src/Globals/ClaimManagementBundle/Form/DiaryFormType.php line 79

Open in your IDE?
  1. <?php
  2. namespace Globals\ClaimManagementBundle\Form;
  3. use Doctrine\ORM\EntityRepository;
  4. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  5. use Symfony\Component\Form\AbstractType;
  6. use Symfony\Component\Form\Extension\Core\Type\DateType;
  7. use Symfony\Component\Form\FormBuilderInterface;
  8. use Symfony\Component\OptionsResolver\OptionsResolver;
  9. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  10. use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
  11. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  12. use Globals\ClaimManagementBundle\Entity\DiaryEntry;
  13. class DiaryFormType extends AbstractType
  14. {
  15.     private $adjuster_id 0;
  16.     public function buildForm(FormBuilderInterface $builder, array $options)
  17.     {
  18.         $this->claim_id $options['claim_id'];
  19.         $this->adjuster_id $options['adjuster_id'];
  20.         $builder $builder
  21.             ->add('description' TextareaType::class, ['attr'=>['style'=>'height:200px;']])
  22.             ->add("dueDate"DateType::class, [
  23.                 "widget" => "single_text",
  24.                 "attr" => [
  25.                     "class" => "diary-datepicker",
  26.                 ],
  27.                 "html5" => false,
  28.                 'format' => 'M/d/y',
  29.             ])
  30.             ->add('priority'    IntegerType::class,['attr' => [
  31.                 'min' => 1,
  32.                 'onkeypress'=>'return event.charCode >= 48 && event.charCode <= 57',
  33.                 'onkeydown'=>"limit(this);",
  34.                 'onkeyup'=>"limit(this);"
  35.             ]])
  36.             // ->add('author'      , EntityType::class, ['choice_label' => 'fullName', 'class' => 'Globals\ResourceManagementBundle\Entity\Resource'])
  37.             // ->add('status'      , IntegerType::class)
  38.             ->add('diaryType'   EntityType::class, ['choice_label' => 'name''class' => 'Globals\ClaimManagementBundle\Entity\DiaryEntryType']);
  39.         /**
  40.          * If the key "adjuster_id" is set, this means
  41.          * that the logged in user has the role: ROLE_ADJUSTER
  42.          * and cannot change himself as the resource on this diary
  43.          * entry
  44.          */
  45.         if ($this->adjuster_id == 0) {  // if not set
  46.             // Show all resources on claim
  47.             $builder
  48.                 ->add('resource'EntityType::class, [
  49.                     'class' => 'Globals\ResourceManagementBundle\Entity\Resource',
  50.                     'query_builder' => function (EntityRepository $er) {
  51.                         $qb =  $er->createQueryBuilder('r')
  52.                             ->select('r')
  53.                             ->leftJoin('r.resourceClaims''a')
  54.                             ->andWhere("a.claim = :claim");
  55.                             $qb->andWhere($qb->expr()->orX($qb->expr()->isNull('a.nextAssignment'),$qb->expr()->eq('a.nextAssignment',':next_assignment_id')))
  56.                                 ->andWhere($qb->expr()->eq('a.isCurrentAssignment',':is_current_assignment'))
  57.                             ->setParameter("claim"$this->claim_id)
  58.                            ->setParameter('next_assignment_id'0)
  59.                            ->setParameter('is_current_assignment'1);
  60.                             return $qb;
  61.                     },
  62.                     'choice_label' => 'fullName'
  63.                 ]);
  64.         } else {  // if adjuster_id set
  65.             // Show only the logged in user in the resource dropdown
  66.             $builder
  67.                 ->add('resource'EntityType::class, [
  68.                     'class' => 'Globals\ResourceManagementBundle\Entity\Resource',
  69.                     'query_builder' => function (EntityRepository $er) {
  70.                     $qb $er->createQueryBuilder('r')
  71.                             ->select('r')
  72.                             ->leftJoin('r.resourceClaims''a')
  73.                             ->where("a.claim = :claim")
  74.                             ->setParameter("claim"$this->claim_id)
  75.                             ->andWhere('r.id = :resource_id');
  76.                             $qb->andWhere($qb->expr()->orX($qb->expr()->isNull('a.nextAssignment'),$qb->expr()->eq('a.nextAssignment',':next_assignment_id')))
  77.                                 ->andWhere($qb->expr()->eq('a.isCurrentAssignment',':is_current_assignment'))
  78.                                 ->setParameter('resource_id'$this->adjuster_id)
  79.                                 ->setParameter('next_assignment_id'0)
  80.                                 ->setParameter('is_current_assignment'1);
  81.                         return $qb;
  82.                     },
  83.                     'choice_label' => 'fullName'
  84.                 ]);
  85.         }
  86.     }
  87.     public function configureOptions(OptionsResolver $resolver)
  88.     {
  89.         $resolver->setDefaults(array(
  90.             "claim_id" => '',
  91.             'adjuster_id' => 0,
  92.             'data_class' => DiaryEntry::class,
  93.             "csrf_protection" => false
  94.         ));
  95.     }
  96.     public function getName()
  97.     {
  98.         return 'claim_management_bundle_diary_form_type';
  99.     }
  100. }