<?php
namespace Globals\ClaimManagementBundle\Form;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Globals\ClaimManagementBundle\Entity\DiaryEntry;
class DiaryFormType extends AbstractType
{
private $adjuster_id = 0;
public function buildForm(FormBuilderInterface $builder, array $options)
{
$this->claim_id = $options['claim_id'];
$this->adjuster_id = $options['adjuster_id'];
$builder = $builder
->add('description' , TextareaType::class, ['attr'=>['style'=>'height:200px;']])
->add("dueDate", DateType::class, [
"widget" => "single_text",
"attr" => [
"class" => "diary-datepicker",
],
"html5" => false,
'format' => 'M/d/y',
])
->add('priority' , IntegerType::class,['attr' => [
'min' => 1,
'onkeypress'=>'return event.charCode >= 48 && event.charCode <= 57',
'onkeydown'=>"limit(this);",
'onkeyup'=>"limit(this);"
]])
// ->add('author' , EntityType::class, ['choice_label' => 'fullName', 'class' => 'Globals\ResourceManagementBundle\Entity\Resource'])
// ->add('status' , IntegerType::class)
->add('diaryType' , EntityType::class, ['choice_label' => 'name', 'class' => 'Globals\ClaimManagementBundle\Entity\DiaryEntryType']);
/**
* If the key "adjuster_id" is set, this means
* that the logged in user has the role: ROLE_ADJUSTER
* and cannot change himself as the resource on this diary
* entry
*/
if ($this->adjuster_id == 0) { // if not set
// Show all resources on claim
$builder
->add('resource', EntityType::class, [
'class' => 'Globals\ResourceManagementBundle\Entity\Resource',
'query_builder' => function (EntityRepository $er) {
$qb = $er->createQueryBuilder('r')
->select('r')
->leftJoin('r.resourceClaims', 'a')
->andWhere("a.claim = :claim");
$qb->andWhere($qb->expr()->orX($qb->expr()->isNull('a.nextAssignment'),$qb->expr()->eq('a.nextAssignment',':next_assignment_id')))
->andWhere($qb->expr()->eq('a.isCurrentAssignment',':is_current_assignment'))
->setParameter("claim", $this->claim_id)
->setParameter('next_assignment_id', 0)
->setParameter('is_current_assignment', 1);
return $qb;
},
'choice_label' => 'fullName'
]);
} else { // if adjuster_id set
// Show only the logged in user in the resource dropdown
$builder
->add('resource', EntityType::class, [
'class' => 'Globals\ResourceManagementBundle\Entity\Resource',
'query_builder' => function (EntityRepository $er) {
$qb = $er->createQueryBuilder('r')
->select('r')
->leftJoin('r.resourceClaims', 'a')
->where("a.claim = :claim")
->setParameter("claim", $this->claim_id)
->andWhere('r.id = :resource_id');
$qb->andWhere($qb->expr()->orX($qb->expr()->isNull('a.nextAssignment'),$qb->expr()->eq('a.nextAssignment',':next_assignment_id')))
->andWhere($qb->expr()->eq('a.isCurrentAssignment',':is_current_assignment'))
->setParameter('resource_id', $this->adjuster_id)
->setParameter('next_assignment_id', 0)
->setParameter('is_current_assignment', 1);
return $qb;
},
'choice_label' => 'fullName'
]);
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
"claim_id" => '',
'adjuster_id' => 0,
'data_class' => DiaryEntry::class,
"csrf_protection" => false
));
}
public function getName()
{
return 'claim_management_bundle_diary_form_type';
}
}