src/Globals/ClaimManagementBundle/Controller/ClaimFlow/ClaimDiaryController.php line 167

Open in your IDE?
  1. <?php
  2. namespace Globals\ClaimManagementBundle\Controller\ClaimFlow;
  3. use Globals\ClaimManagementBundle\DependencyInjection\FormHelpers\DisbursementTimeLogFormHelper;
  4. use Globals\ClaimManagementBundle\Entity\DiaryEntry;
  5. use Globals\ClaimManagementBundle\Entity\DiaryOtherResource;
  6. use Globals\ClaimManagementBundle\Event\ClaimDiaryAssignedEvent;
  7. use Globals\ClaimManagementBundle\Event\ClaimDiaryCompleteEvent;
  8. use Globals\ClaimManagementBundle\Form\DiaryFormType;
  9. use Globals\ResourceManagementBundle\Service\SLogger;
  10. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  15. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  16. use Symfony\Component\Serializer\Encoder\XmlEncoder;
  17. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  18. use Symfony\Component\Serializer\Serializer;
  19. use Globals\ClaimManagementBundle\Entity\DocumentLibrary;
  20. use Globals\CompanyManagementBundle\Entity\Company;
  21. /**
  22.  * @Route("/claims/fragments")
  23.  */
  24. class ClaimDiaryController extends Controller
  25. {
  26.     /**
  27.      * @Route("/claim-diary/{claim_id}")
  28.      */
  29.     public function autoDiaryRead($claim_idRequest $request)
  30.     {
  31.         $bShowRefUrl false;
  32.         if ($claim_id) {
  33.             $em $this->getDoctrine()->getManager();
  34.             $claim $this->getDoctrine()->getRepository('ClaimManagementBundle:Claim')->find($claim_id);
  35.             $companyId 1;
  36.             if ($claim->getCustomer()) {
  37.                 $ClaimCustomer $claim->getCustomer();
  38.                 if ($ClaimCustomer->getSubCompany()) {
  39.                     $companyId $ClaimCustomer->getSubCompany()->getId();
  40.                 }
  41.             }
  42.             $company $em->getRepository("CompanyManagementBundle:Company")->find($companyId);
  43.             $this->denyAccessUnlessGranted("view_diaries_tab"$claim);
  44.             $assignmentService $this->get('claim.assignment');
  45.             $alertMessageDateExpiryArray $assignmentService->validLicense($claim);
  46.             $alertMessageDateExpiry $alertMessageDateExpiryArray['alertMessageDateExpiry'];
  47.             /**
  48.              * Added by AMH 2018-09-13, to restrict
  49.              * resource dropdown, so that if user is adjuster,
  50.              * he can only edit himself as the resource
  51.              */
  52.             $User $this->container->get("security.token_storage")->getToken()->getUser();
  53.             $optionsArray = [
  54.                 'claim_id' => $claim->getId(),
  55.                 'adjuster_id' => 0
  56.             ];
  57.             if ($User->getRoles() == ["ROLE_ADJUSTER"]) {
  58.                 $optionsArray['adjuster_id'] = $User->getId();
  59.             }
  60.             $createForm $this->createForm(DiaryFormType::class, new DiaryEntry(), $optionsArray);
  61.             /**
  62.              * Added 8/30/2017
  63.              *
  64.              * Here we'll load up all the resources available (possibly excluding logged in user?) to add
  65.              * to the Diary.
  66.              *
  67.              */
  68.             $foundResources $this->getDoctrine()->getRepository('ResourceManagementBundle:Resource')->getUsersOnClaim($claim);
  69.             $dateOpened $claim->getDateReopened() ? $claim->getDateReopened() : ($claim->getDateOpened() ? $claim->getDateOpened() :$claim->getDateCreated());
  70.             $dateClosed $claim->getDateClosed()? $claim->getDateClosed(): new \DateTime('now');
  71.             if($dateClosed $dateOpened){
  72.                 $dateClosed = new \DateTime('now');
  73.             }
  74.             $difference date_diff($dateOpened,$dateClosed);
  75.             $difference = (array)$difference;
  76.             $daysOpen = array();
  77.             $daysOpen['days'] = $difference['days'];
  78.             $daysOpen['h'] = $difference['h'];
  79.             $daysOpen['m'] = $difference['m'];
  80.             $systemParamService $this->container->get('core.system_parameter_control');
  81.             $systemAdminUsers $systemParamService->getAccessArray('Invoicing_access');
  82.             $bShowInvoiceAccessTab false;
  83.             $user $this->get('security.token_storage')->getToken()->getUser();
  84.             if (!empty($systemAdminUsers) && in_array($user->getId(),$systemAdminUsers)) {
  85.                 $bShowInvoiceAccessTab true;
  86.             }
  87.             if ($claim->getStatus()>=10) {
  88.                 $bShowRefUrl true;
  89.             }
  90.            // dd($foundResources);
  91.             return $this->render('ClaimManagementBundle:ClaimFlowScreen/Fragments:auto-diary-fragment.html.twig', [
  92.                 'resources' => $foundResources,
  93.                 'active' => 'claim_diary',
  94.                 'claim' => $claim,
  95.                 'company' => $company,
  96.                 'createForm' => $createForm->createView(),
  97.                 "daysOpen" => $daysOpen,
  98.                 'bShowInvoiceAccessTab' => $bShowInvoiceAccessTab,
  99.                 'alertMessageDateExpiry' =>$alertMessageDateExpiry,
  100.                 "ShowRefUrl" =>$bShowRefUrl
  101.             ]);
  102.         } else {
  103.             throw new NotFoundHttpException('Could not find this claim!');
  104.         }
  105.     }
  106.     /**
  107.      * @Route("/claim-diary/add/{claim_id}")
  108.      */
  109.     public function addDiaryRead($claim_id)
  110.     {
  111.         if ($claim_id) {
  112.             $diary = new DiaryEntry();
  113.             $claim $this->getDoctrine()->getRepository('ClaimManagementBundle:Claim')->find($claim_id);
  114.             $this->denyAccessUnlessGranted("view_diaries_tab"$claim);
  115.             /**
  116.              * Added by AMH 2018-09-13, to restrict
  117.              * resource dropdown, so that if user is adjuster,
  118.              * he can only edit himself as the resource
  119.              */
  120.             $User $this->container->get("security.token_storage")->getToken()->getUser();
  121.             $optionsArray = [
  122.                 'claim_id' => $claim->getId(),
  123.                 'adjuster_id' => 0
  124.             ];
  125.             if ($User->getRoles() == ["ROLE_ADJUSTER"]) {
  126.                 $optionsArray['adjuster_id'] = $User->getId();
  127.             }
  128.             $assoicatedResources $this->getDoctrine()->getRepository('ResourceManagementBundle:Resource')->getUsersOnClaim($claim);
  129.             $createForm $this->createForm(DiaryFormType::class, $diary$optionsArray);
  130.             return $this->render('ClaimManagementBundle:ClaimFlowScreen/Fragments/modals:auto-diary-modal.html.twig', [
  131.                 'resources' => $assoicatedResources,
  132.                 'diary' => $diary,
  133.                 'claim' => $claim,
  134.                 'createForm' => $createForm->createView()
  135.             ]);
  136.         } else {
  137.             throw new NotFoundHttpException('Could not find this claim!');
  138.         }
  139.     }
  140.     /**
  141.      * @Route("/claim-diary/edit/{claim_id}/{diary_id}", defaults={"diary_id" = "none"})
  142.      */
  143.     public function editDiaryRead($claim_id$diary_idRequest $request)
  144.     {
  145.         if ($claim_id) {
  146.             if ($diary_id) {
  147.                 $diary $this->getDoctrine()->getRepository('ClaimManagementBundle:DiaryEntry')->find($diary_id);
  148.                 $this->denyAccessUnlessGranted("edit_diary"$diary);
  149.             } else {
  150.                 $diary = new DiaryEntry();
  151.             }
  152.             $claim $this->getDoctrine()->getRepository('ClaimManagementBundle:Claim')->find($claim_id);
  153.             $this->denyAccessUnlessGranted("view_diaries_tab"$claim);
  154.             /**
  155.              * Added by AMH 2018-09-13, to restrict
  156.              * resource dropdown, so that if user is adjuster,
  157.              * he can only edit himself as the resource
  158.              */
  159.             $User $this->container->get("security.token_storage")->getToken()->getUser();
  160.             $optionsArray = [
  161.                 'claim_id' => $claim->getId(),
  162.                 'adjuster_id' => 0
  163.             ];
  164.             if ($User->getRoles() == ["ROLE_ADJUSTER"]) {
  165.                 $optionsArray['adjuster_id'] = $User->getId();
  166.             }
  167.             $editForm $this->createForm(DiaryFormType::class, $diary$optionsArray);
  168.             return $this->render('ClaimManagementBundle:ClaimFlowScreen/Fragments/modals:auto-diary-edit-modal.html.twig', [
  169.                 'diary' => $diary,
  170.                 'active' => 'claim_diary',
  171.                 'claim' => $claim,
  172.                 'editForm' => $editForm->createView()
  173.             ]);
  174.         } else {
  175.             throw new NotFoundHttpException('Could not find this claim!');
  176.         }
  177.     }
  178.     /**
  179.      * TimeLog Datalist Ajax Data Route
  180.      *
  181.      * @Route("/all/{claim_id}")
  182.      */
  183.     public function claimDiaryDatatablesAction($claim_idRequest $request)
  184.     {
  185.         # Array of columns that will be sorted
  186.         $columnsArr = [
  187.             "id",
  188.             "resourceName",
  189.             "dueDate",
  190.             "description",
  191.             "dateCreated",
  192.             "authorName",
  193.             "priority",
  194.             "status"
  195.         ];
  196.         $User $this->container->get("security.token_storage")->getToken()->getUser();
  197.         $isAdjuster false;
  198.         if ($User->getRoles() == ["ROLE_ADJUSTER"]) {
  199.             $isAdjuster true;
  200.         }
  201.         # Build Query and PDO Parameters that will be passed to PaginatorService class
  202.         $dataParams = array();
  203.         $sql "SELECT DE.id,
  204.         (CONCAT(R.first_name,' ',R.last_name)) as resourceName,
  205.         DE.dueDate,
  206.         DE.description,
  207.         DE.dateCreated,
  208.         (CONCAT(R2.first_name,' ',R2.last_name)) authorName,
  209.         DE.priority,
  210.         DE.status,
  211.         DE.claim_id
  212.         FROM diary_entry DE
  213.         LEFT JOIN resource R ON R.id = DE.resource_id
  214.         LEFT JOIN resource R2 ON R2.id = DE.author_id
  215.         WHERE 1 = 1 ";
  216.         if ($claim_id) {
  217.             $sql .= "AND DE.claim_id = :claimId ";
  218.             $dataParams['claimId'] = $claim_id;
  219.         }
  220.         if ($isAdjuster) {
  221.             $sql .= "AND DE.resource_id = :adjuster_id ";
  222.             $dataParams['adjuster_id'] = $User->getId();
  223.         }
  224.         # build keyword filter, which is requested by datatables ajax when someone types into keyword field
  225.         $keyword_filter "AND (resourceName like :keyword OR authorName like :keyword OR De.description like :keyword) ";
  226.         # specifiy group by
  227.         $group_by "";
  228.         # call PaginatorService
  229.         $paginator $this->container->get("resource.paginator_service");
  230.         $data $paginator->getPaginationResults($request$sql$dataParams""$columnsArr""$keyword_filter"keyword"$group_by"GET");
  231.         # Manipulate the resultset to be recieved by datatable
  232.         $data $this->manipulateClaimDiaryData($data);
  233.         return new JsonResponse($data);
  234.     }
  235.     private function manipulateClaimDiaryData($data)
  236.     {
  237.         $data $data['data'];
  238.         $result = [];
  239.         foreach ($data as $index => $row) {
  240.             $row['dueDate'] = date("m/d/Y"strtotime($row['dueDate']));
  241.             $row['dateCreated'] = date("m/d/Y H:i A"strtotime($row['dateCreated']));
  242.             if ($row['status'] == 1) {
  243.                 $word "Completed";
  244.             } else if (strtotime($row['dueDate']) < strtotime(date("Y-m-d"))) {
  245.                 $word "Overdue";
  246.             } else {
  247.                 $word "Pending";
  248.             }
  249.             $row['status'] = $word;
  250.             # store into another array
  251.             $result[$index] = $row;
  252.         }
  253.         $result['data'] = $result;
  254.         return $result;
  255.     }
  256.     /**
  257.      * @Route("/claim-diary/multiedit/{claim_id}/{diaries}", defaults={"diary_id" = "none"})
  258.      */
  259.     public function editMultiDiaryRead($claim_id$diaries,Request $request)
  260.     {
  261.         if ($claim_id) {
  262.             $diary = new DiaryEntry();
  263.             $claim $this->getDoctrine()->getRepository('ClaimManagementBundle:Claim')->find($claim_id);
  264.             $this->denyAccessUnlessGranted("view_diaries_tab"$claim);
  265.             $Tblid=$diaries;
  266.             $DiaryId=explode('@',$Tblid);
  267.             //dd($DiaryId);
  268.             $diary=[];
  269.             foreach($DiaryId as $diary_id) {
  270.                 //dd($Tblid);
  271.                 $diaryEntry $this->getDoctrine()->getRepository('ClaimManagementBundle:DiaryEntry')->find($diary_id);
  272.                 //$diary[]['Resource']=$diaryEntry->getResource()->getId();
  273.                 $diary[$diary_id]['Resource']=$diaryEntry->getResource()->getFullName();
  274.                 $diary[$diary_id]['DueDate']=$diaryEntry->getDueDate();
  275.                 $diary[$diary_id]['Priority']=$diaryEntry->getPriority();
  276.                 $diary[$diary_id]['Description']=$diaryEntry->getDescription();
  277.             }
  278.             //dd($diary);
  279.             /**
  280.              * Added by AMH 2018-09-13, to restrict
  281.              * resource dropdown, so that if user is adjuster,
  282.              * he can only edit himself as the resource
  283.              */
  284.             $User $this->container->get("security.token_storage")->getToken()->getUser();
  285.             $optionsArray = [
  286.                 'claim_id' => $claim->getId(),
  287.                 'adjuster_id' => 0
  288.             ];
  289.             if ($User->getRoles() == ["ROLE_ADJUSTER"]) {
  290.                 $optionsArray['adjuster_id'] = $User->getId();
  291.             }
  292.             //$createForm = $this->createForm(DiaryFormType::class, $diary, $optionsArray);
  293.             return $this->render('ClaimManagementBundle:ClaimFlowScreen/Fragments/modals:multi-diary-edit-modal.html.twig', [
  294.                 'diary' => $diary,
  295.                 'claim' => $claim,
  296.                 //'createForm' => $createForm->createView()
  297.             ]);
  298.         } else {
  299.             throw new NotFoundHttpException('Could not find this claim!');
  300.         }
  301.     }
  302.     /**
  303.      * @Route("/claim-diary/multicomplete/{claim_id}", defaults={"diary_id" = null})
  304.      */
  305.     public function multidiaryComplete($claim_id,Request $request)
  306.     {
  307.        // dd($request->request);
  308.         if ($claim_id) {
  309.             $dispatch $this->get('event_dispatcher');
  310.             $Tblid=$request->request->get('diaries');
  311.             $DiaryId=explode('@',$Tblid);
  312.             //dd($DiaryId);
  313.             foreach($DiaryId as $diary_id) {
  314.                 //dd($Tblid);
  315.                 $diaryEntry $this->getDoctrine()->getRepository('ClaimManagementBundle:DiaryEntry')->find($diary_id);
  316.                 $diaryEntry->setStatus(1);
  317.                 $em $this->getDoctrine()->getManager();
  318.                 $em->persist($diaryEntry);
  319.                 $em->flush();
  320.                 /**
  321.                  * @date 08/11/2017
  322.                  *
  323.                  * Implementing service to push a note to the Claim
  324.                  *
  325.                  */
  326.                 $NoteService $this->get('claim.note_provider');
  327.                 // Todo ClaimDiaryAssignedEvent listener for this event
  328.                 $dispatch->dispatch(ClaimDiaryCompleteEvent::NAME, new ClaimDiaryCompleteEvent($diaryEntry));
  329.                 $NoteService->addClaimNote($diaryEntry->getClaim(), "Diary entry '" $diaryEntry->getDescription() . "' was completed!"false70);
  330.             }
  331.             return new JsonResponse(['diary'=> $claim_id]);
  332.         } else {
  333.             throw new NotFoundHttpException('Could not find this claim!');
  334.         }
  335.     }
  336.     /**
  337.      * @Route("/claim-diary/multidiaryeditentry/{claim_id}", defaults={"diary_id" = null})
  338.      */
  339.     public function multidiaryeditEntry($claim_id,Request $request)
  340.     {
  341.         $dispatch $this->get('event_dispatcher');
  342.         // This is the EM we'll use
  343.         $em $this->getDoctrine()->getManager();
  344.         $LoggedInUser $this->container->get("security.token_storage")->getToken()->getUser();
  345.         if($claim_id){
  346.             $claim $this->getDoctrine()->getRepository('ClaimManagementBundle:Claim')->find($claim_id);
  347.             $response = [];
  348.             $diaryFormData $request->request->get('diary_form');
  349.             //dd($diaryFormData);
  350.             $Tblid=$request->request->get('strDiariesIds');
  351.             $DiaryId=explode('@',$Tblid);
  352.             //dd($DiaryId);
  353.             $i=0;
  354.             foreach($DiaryId as $diary_id) {
  355.                 $diary $this->getDoctrine()->getRepository('ClaimManagementBundle:DiaryEntry')->find($diary_id);
  356.                 $taskAssignedResource $em->getRepository("ResourceManagementBundle:Resource")->find($diary->getResource());
  357.                 $diary->setDescription($diaryFormData['description'][$i]);
  358.                 $diary->setResource($taskAssignedResource);
  359.                 $diary->setDueDate(new \DateTime($diaryFormData['dueDate'][$i]));
  360.                 $diary->setPriority($diaryFormData['priority'][$i]);
  361.                 $diary->setStatus(0);
  362.                 //$DiaryEntry->setDateCreated( new \DateTime() );
  363.                 /**
  364.                  * @date 08/11/2017
  365.                  *
  366.                  * Implementing service to push a note to the Claim
  367.                  *
  368.                  */
  369.                 $NoteService $this->get('claim.note_provider');
  370.                 $NoteService->addClaimNote($diary->getClaim(), "Diary entry  status  as pending and Due date  was updated!"false70);
  371.                 $em->persist($diary);
  372.                 $em->flush();
  373.                 $response['error'] = false;
  374.                 $i++;
  375.             }
  376.             return new JsonResponse($response);
  377.         }else{
  378.             throw new NotFoundHttpException("Couldn't find this claim!");
  379.         }
  380.     }
  381.     /**
  382.      * @Route("/create/claim-diary/{claim_id}/{diary_id}", defaults={"diary_id" = null})
  383.      */
  384.     public function addMultiDiaryEntry($claim_id$diary_idRequest $request)
  385.     {
  386.         $dispatch $this->get('event_dispatcher');
  387.         // This is the EM we'll use
  388.         $em $this->getDoctrine()->getManager();
  389.         $LoggedInUser $this->container->get("security.token_storage")->getToken()->getUser();
  390.         if($claim_id){
  391.             $claim $this->getDoctrine()->getRepository('ClaimManagementBundle:Claim')->find($claim_id);
  392.             $diaryFormData $request->request->get('diary_form');
  393.             $countRecord=count($diaryFormData['resource']);
  394.             //dd($countRecord);
  395.             for($i=0;$i<$countRecord;$i++){
  396.                 $diary = new DiaryEntry();
  397.                 $taskAssignedResource $em->getRepository("ResourceManagementBundle:Resource")->find($diaryFormData['resource'][$i]);
  398.                 $diary->setDescription($diaryFormData['description'][$i]);
  399.                 $diary->setResource($taskAssignedResource);
  400.                 $diary->setDueDate(new \DateTime($diaryFormData['dueDate'][$i]));
  401.                 $diary->setPriority($diaryFormData['priority'][$i]);
  402.                 $diary->setClaim($claim);
  403.                 $diary->setAuthor($LoggedInUser);
  404.                 $diary->setStatus(0);
  405.                 $diary->setDateCreated( new \DateTime() );
  406.                 $em->persist($diary);
  407.                 $em->flush();
  408.                 $NoteService $this->get('claim.note_provider');
  409.                 $dispatch->dispatch(ClaimDiaryAssignedEvent::NAME, new ClaimDiaryAssignedEvent($diary));
  410.                 $NoteService->addClaimNote($diary->getClaim(), "Diary entry '" $diary->getDescription() . "' was created!"false70);
  411.             }
  412.             $response['error'] = false;
  413.             return new JsonResponse($response);
  414.         }else{
  415.             throw new NotFoundHttpException("Couldn't find this claim!");
  416.         }
  417.     }
  418. }