src/Globals/ClaimManagementBundle/Controller/ClaimFlow/ClaimTimeLogController.php line 302

Open in your IDE?
  1. <?php
  2. namespace Globals\ClaimManagementBundle\Controller\ClaimFlow;
  3. use Globals\ClaimManagementBundle\DependencyInjection\FormHelpers\DisbursementTimeLogFormHelper;
  4. use Globals\ClaimManagementBundle\Entity\Claim;
  5. use Globals\CustomerManagementBundle\Entity\Customer;
  6. use Globals\ResourceManagementBundle\Entity\Resource;
  7. use Globals\ResourceManagementBundle\Service\SLogger;
  8. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  9. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  14. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  15. use Globals\ClaimManagementBundle\Form\DisbursementTimeLogType;
  16. use Globals\InvoiceManagementBundle\Entity\Disbursement;
  17. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  18. use Symfony\Component\Serializer\Encoder\XmlEncoder;
  19. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  20. use Symfony\Component\Serializer\Serializer;
  21. use Globals\ClaimManagementBundle\Entity\DocumentLibrary;
  22. /**
  23.  * @Route("/claims/fragments")
  24.  */
  25. class ClaimTimeLogController extends Controller
  26. {
  27.     /**
  28.      * Time Log Datalist Route
  29.      *
  30.      * @Route("/time-log/{id}")
  31.      * @ParamConverter("claim", class="ClaimManagementBundle:Claim")
  32.      */
  33.     public function timeLogAction(Claim $claimRequest $request)
  34.     {
  35.         $em $this->getDoctrine()->getManager();
  36.         $company $em->getRepository("CompanyManagementBundle:Company")->find(1);
  37.         $bShowRefUrl false;
  38.         if ($claim) {
  39.             $this->denyAccessUnlessGranted("view_timelog_tab"$claim);
  40.             $hasInvoices false;
  41.             $em $this->container->get("doctrine.orm.default_entity_manager");
  42.             $HasInvoice $em->getRepository("InvoiceManagementBundle:Invoice")->findFinalByClaimID($claim);
  43.             if ($HasInvoice) {
  44.                 $hasInvoices true;
  45.             }
  46.             $dateOpened $claim->getDateReopened() ? $claim->getDateReopened() : ($claim->getDateOpened() ? $claim->getDateOpened() :$claim->getDateCreated());
  47.             $dateClosed $claim->getDateClosed()? $claim->getDateClosed(): new \DateTime('now');
  48.             if($dateClosed $dateOpened){
  49.                 $dateClosed = new \DateTime('now');
  50.             }
  51.             $difference date_diff($dateOpened,$dateClosed);
  52.             $difference = (array)$difference;
  53.             $daysOpen = array();
  54.             $daysOpen['days'] = $difference['days'];
  55.             $daysOpen['h'] = $difference['h'];
  56.             $daysOpen['m'] = $difference['m'];
  57.             $systemParamService $this->container->get('core.system_parameter_control');
  58.             $systemAdminUsers $systemParamService->getAccessArray('Invoicing_access');
  59.             $bShowInvoiceAccessTab false;
  60.             $user $this->get('security.token_storage')->getToken()->getUser();
  61.             if (!empty($systemAdminUsers) && in_array($user->getId(),$systemAdminUsers)) {
  62.                 $bShowInvoiceAccessTab true;
  63.             }
  64.             if ($claim->getStatus()>=10) {
  65.                 $bShowRefUrl true;
  66.             }
  67.             $assignmentService $this->get('claim.assignment');
  68.             $alertMessageDateExpiryArray $assignmentService->validLicense($claim);
  69.             $alertMessageDateExpiry $alertMessageDateExpiryArray['alertMessageDateExpiry'];
  70.             return $this->render(
  71.                 'ClaimManagementBundle:ClaimFlowScreen/Fragments:time-log-fragment.html.twig',
  72.                 [
  73.                     'active' => 'time_log',
  74.                     'claim' => $claim,
  75.                     "hasInvoices" => $hasInvoices,
  76.                     'company' => $company,
  77.                     "daysOpen" => $daysOpen,
  78.                     'bShowInvoiceAccessTab' => $bShowInvoiceAccessTab,
  79.                     'alertMessageDateExpiry' =>$alertMessageDateExpiry,
  80.                     "ShowRefUrl" =>$bShowRefUrl
  81.                 ]
  82.             );
  83.         } else {
  84.             throw new NotFoundHttpException('Could not find this claim!');
  85.         }
  86.     }
  87.     /**
  88.      * TimeLog Datalist Ajax Data Route
  89.      *
  90.      * @Route("/time-log/search/{id}")
  91.      */
  92.     public function timeLog_AjaxAction(Request $requestClaim $claim)
  93.     {
  94.         # Make sure valid claim object was passed
  95.         if ($claim == null) {
  96.             throw $this->createNotFoundException("Claim does not exist.");
  97.         }
  98.         $User $this->container->get("security.token_storage")->getToken()->getUser();
  99.         ## Use PaginatorService to return paginated results to DataTables Ajax Request
  100.         $claimId $claim->getId();
  101.         # Array of columns that will be sorted
  102.         $columnsArr = array(
  103.             "expenseName",
  104.             "description",
  105.             "quantity",
  106.             "cost",
  107.             "quantity",
  108.             "adjusterName",
  109.             "dateCreated",
  110.             "invoice_id"
  111.         );
  112.         $isTeExpense $request->query->get("isTeExpense");
  113.         $isAdjuster false;
  114.         if ($this->isGranted("ROLE_ADJUSTER") == true && $this->isGranted("ROLE_TEAM_LEADER") == false) {
  115.             $isAdjuster true;
  116.         }
  117.         # Build Query and PDO Parameters that will be passed to PaginatorService class
  118.         $dataParams = array();
  119.         $sql "SELECT sd.id,
  120.                 ifnull(e.expenseName, e2.expenseName) as expenseName,
  121.                 -- ifnull(eg.name, ifnull(eg2.name, sd.description)) as description,
  122.                 sd.description as description,
  123.                 sd.quantity, sd.cost,
  124.                 CONCAT(r.first_name, ' ', r.last_name) AS adjusterName, sd.dateCreated, sd.invoice_id, "
  125.             . (($isAdjuster) ? "CASE WHEN r.id = " $User->getId() . " AND c.sub_status_id = 0 THEN 1 ELSE 0 END" "1") . " AS can_edit,
  126.                 CASE 
  127.                 WHEN IFNULL(sd.invoice_id,0) != 0 THEN 0
  128.                 ELSE 1
  129.                 END AS can_delete
  130.                 FROM disbursement sd
  131.                 LEFT JOIN expense e
  132.                   ON sd.expense_id = e.id
  133.                 LEFT JOIN expense_group eg 
  134.                   ON e.expense_group_id = eg.id 
  135.                 LEFT JOIN customer_expense ce
  136.                   ON sd.customer_expense_id = ce.id
  137.                 LEFT JOIN expense e2
  138.                   ON ce.expense_id = e2.id
  139.                 LEFT JOIN expense_group eg2 
  140.                   ON e2.expense_group_id = eg2.id 
  141.                 INNER JOIN resource r
  142.                   ON sd.resource_id = r.id
  143.                 INNER JOIN claim c 
  144.                     ON sd.claim_id = c.id
  145.                 WHERE 1 = 1 ";
  146.         # Filter by Resource ID
  147.         if ($claimId 0) {
  148.             $sql .= "AND sd.claim_id = :claimId ";
  149.             $dataParams['claimId'] = $claimId;
  150.         }
  151.         if ($isTeExpense > -1) {
  152.             $sql .= "AND e.isTeExpense = :isTeExpense ";
  153.             $dataParams['isTeExpense'] = $isTeExpense;
  154.         }
  155.         # build keyword filter, which is requested by datatables ajax when someone types into keyword field
  156.         $keyword_filter "AND (sd.description like :keyword OR e.expenseName like :keyword OR invoice_id LIKE :keyword) ";
  157.         # call PaginatorService
  158.         $paginator $this->container->get("resource.paginator_service");
  159.         $retVal $paginator->getPaginationResults($request$sql$dataParams"sd.dateCreated ASC"$columnsArr""$keyword_filter"keyword""");
  160.         # Manipulate the resultset to be recieved by datatable
  161.         $Results2 $retVal['data'];
  162.         $Results = array();
  163.         //$subtotal = 0;
  164.         $systemParamService $this->container->get('core.system_parameter_control');
  165.         $systemAdminUsers $systemParamService->getAccessArray('Invoicing_access');
  166.         $allowDelete false;
  167.         $user $this->get('security.token_storage')->getToken()->getUser();
  168.         if (!empty($systemAdminUsers) && in_array($user->getId(),$systemAdminUsers)) {
  169.             $allowDelete true;
  170.         }
  171.         foreach ($Results2 as $index => $getResult) {
  172.             $getResult2 $getResult;
  173.             //$subtotal += $getResult['cost'];
  174.             $cost number_format($getResult['cost'], 2"."",");
  175.             $total number_format(($getResult['cost'] * $getResult['quantity']), 2"."",");
  176.             $getResult2['dateCreated'] = date("m/d/Y"strtotime($getResult['dateCreated']));
  177.             $getResult2['cost'] = "$" $cost;
  178.             $getResult2['total'] = "$" $total;
  179.             $getResult2['allow_delete'] = $allowDelete "1" "0";
  180.             unset($getResult2['entryDate']);
  181.             $Results[$index] = $getResult2;
  182.         }
  183.         $retVal['data'] = $Results;
  184.         return new JsonResponse($retVal);
  185.     }
  186.     /**
  187.      * ajax html content used when user tries
  188.      * to create a time log entry
  189.      *
  190.      * @Route("/time-log/add/{id}")
  191.      */
  192.     public function timeLogModal(Claim $claim)
  193.     {
  194.         $hasInvoices false;
  195.         $em $this->container->get("doctrine.orm.default_entity_manager");
  196.         $HasInvoice $em->getRepository("InvoiceManagementBundle:Invoice")->findFinalByClaimID($claim);
  197.         if ($HasInvoice) {
  198.             $hasInvoices true;
  199.         }
  200.         $slog = new Slogger();
  201.         $User $this->container->get("security.token_storage")->getToken()->getUser();
  202.         //dd($User->getRoles());
  203.         $this->denyAccessUnlessGranted("view_timelog_tab"$claim);
  204.         $adjuster_id 0;
  205.         if ($User->getRoles() == ["ROLE_ADJUSTER"]) {
  206.             $adjuster_id $User->getId();
  207.         }
  208.         $slog->log("ClaimId");
  209.         $slog->log($claim->getId());
  210.         $formFactory $this->container->get("form.factory");
  211.         $ExpenseId='';
  212.         $AdjusterType='';
  213.         $FieldOrDesk='';
  214.         $CustomerId=0;
  215.         $CustomerExpense=$claim->getCustomer()->getAllowExpense();
  216.         $claimResources $em->getRepository("ClaimManagementBundle:Assignments")->findBy(
  217.             [ "claim" => $claim]
  218.         );
  219.         //dd($CustomerExpense);
  220.         foreach ($claimResources as $getClaimResource) {
  221.             $getAdjustertype $getClaimResource->getResource()->getResourceType()->getResourceType();
  222.             if ($getAdjustertype == "Desk Examiner") {
  223.                 $AdjusterType .=$getClaimResource->getResource()->getId().'@0'.',';
  224.             }else if ($getAdjustertype == "Field Adjuster") {
  225.                 $AdjusterType .=$getClaimResource->getResource()->getId().'@1'.',';
  226.             }else{
  227.                 $AdjusterType .=$getClaimResource->getResource()->getId().'@3'.',';
  228.             }
  229.         }
  230.         $AdjusterType =rtrim($AdjusterType,',');
  231.         //echo "<pre>";
  232.         //print_r($AdjusterType);
  233.         //die;
  234.         if($CustomerExpense){
  235.             $CustomerId=$claim->getCustomer()->getId();
  236.             $expenseIds $em->getRepository("InvoiceManagementBundle:CustomerExpense")->findBy(['customer'=>$CustomerId]);
  237.             //dd($expenseIds);
  238.             if(!empty($expenseIds)){
  239.                 foreach ($expenseIds as $expenseKey=>$expense){
  240.                     $ExpenseId .= $expense->getExpense()->getId().',';
  241.                     if(!is_null($expense->getIsFieldOrDesk())) {
  242.                         $FieldOrDesk .= $expense->getExpense()->getId() . '@' $expense->getIsFieldOrDesk() . ',';
  243.                     }
  244.                 }
  245.                 $ExpenseId =rtrim($ExpenseId,',');
  246.                 $FieldOrDesk =rtrim($FieldOrDesk,',');
  247.             }
  248.         }
  249.         //dd($FieldOrDesk);
  250.         $form $this->createForm(DisbursementTimeLogType::class, new Disbursement(), array('claim_id' => $claim->getId(), 'adjuster_id' => $adjuster_id));
  251.         return $this->render("@ClaimManagement/ClaimFlowScreen/Fragments/modals/add-expense-modal.html.twig", [
  252.             "claim" => $claim,
  253.             'form' => $form->createView(),
  254.             "hasInvoices" => $hasInvoices,
  255.             "CustomerId" => $CustomerId,
  256.             "ExpenseId" => $ExpenseId,
  257.             "FieldOrDesk" => $FieldOrDesk,
  258.             "AdjusterType" => $AdjusterType
  259.         ]);
  260.     }
  261.     /**
  262.      * @Route("/claim/authenticate/{id}")
  263.      */
  264.     public function claimAuthenticationAction(Claim $claim)
  265.     {
  266.         $hasPerils false;
  267.         $hasAdjusters false;
  268.         $hasResources false;
  269.         $hasInvoices false;
  270.         $hasFinalInvoice false;
  271.         $hasDisbursements false;
  272.         $isInspected false;
  273.         $ResourcesHaveContracts true;
  274.         $allContractData = array();
  275.         if ($claim) {
  276.             $em $this->container->get("doctrine.orm.default_entity_manager");
  277.             //check for duplicate claim
  278.             $sql "SELECT COUNT(*) as invoice_count
  279.                     FROM invoice
  280.                     WHERE claim_id = :claim_id";
  281.             $stmt $em->getConnection()->prepare($sql);
  282.             $stmt->execute([
  283.                 "claim_id" => $claim->getId()
  284.             ]);
  285.             $claim_count $stmt->fetchAll( \PDO::FETCH_ASSOC );
  286.             if( $claim_count[0]['invoice_count'] > ){
  287.                 $hasInvoices true;
  288.             }
  289.             $HasFinalInvoice $em->getRepository("InvoiceManagementBundle:Invoice")->findFinalByClaimID($claim);
  290.             if ($HasFinalInvoice) {
  291.                 $hasFinalInvoice true;
  292.             }
  293.             $HasResource $em->getRepository("ClaimManagementBundle:Assignments")->findBy([
  294.                 "claim" => $claim"isCurrentAssignment" => true
  295.             ]);
  296.             if (count($HasResource) > 0) {
  297.                 $hasResources true;
  298.             }
  299.             $HasAdjusters $em->getRepository("ClaimManagementBundle:Assignments")->getAdjustersByClaim($claim);
  300.             if (count($HasAdjusters) > 0) {
  301.                 $hasAdjusters true;
  302.             }
  303.             $hasPerils false;
  304.             $Claim $em->getRepository("ClaimManagementBundle:Claim")->find($claim->getId());
  305.             if ($Claim->getPeril()) {
  306.                 $hasPerils true;
  307.             }
  308.             $em $this->container->get("doctrine.orm.default_entity_manager");
  309.             $HasDisbursement $em->getRepository("InvoiceManagementBundle:Disbursement")->findBy([
  310.                 "claim" => $claim
  311.             ]);
  312.             if (count($HasDisbursement) > 0) {
  313.                 $hasDisbursements true;
  314.             }
  315.             $ClaimResources $em->getRepository("ClaimManagementBundle:Assignments")->findBy([
  316.                 "claim" => $claim"isCurrentAssignment" => true
  317.             ]);
  318.             $slog = new SLogger();
  319.             $sql "SELECT DISTINCT cc.w2_contract, cc.required 
  320.                         FROM company_contract cc
  321.                         WHERE active = :active ";
  322.             $stmt $em->getConnection()->prepare($sql);
  323.             $stmt->execute(['active' => 1]);
  324.             $results $stmt->fetchAll( \PDO::FETCH_ASSOC );
  325.             $haveWingSpn 'Y';
  326.             foreach ($results as $needsW2Val) {
  327.                 #Check if the contract is required
  328.                 if($needsW2Val['required']){
  329.                     $slog->log("1");
  330.                     foreach($ClaimResources as $getClaimResource){
  331.                         $HasContractWingSpan $em->getRepository("ResourceManagementBundle:Contract")->createQueryBuilder('rc')
  332.                             ->select('rc')
  333.                             ->where("rc.resource = :resource")
  334.                             ->andWhere("rc.status = :status")
  335.                             ->andWhere("rc.companyContract = :companyContract")
  336.                             ->setParameter("resource"$getClaimResource->getResource())
  337.                             ->setParameter("companyContract"5)
  338.                             ->setParameter("status"3)
  339.                             ->getQuery()
  340.                             ->setMaxResults(1)
  341.                             ->getOneOrNullResult();
  342.                         if ($HasContractWingSpan == null) {
  343.                             $slog->log("6");
  344.                             $ResourcesHaveContracts false;
  345.                             $haveWingSpn 'N';
  346.                         }else{
  347.                             if(!in_array($getClaimResource->getResource()->getId(),$allContractData))
  348.                             $allContractData[] = $getClaimResource->getResource()->getId();
  349.                         }
  350.                     }
  351.                 }
  352.             }
  353.             if($haveWingSpn == 'N'){
  354.                 $ResourcesHaveContracts true;
  355.                 foreach ($results as $needsW2Val) {
  356.                     #Check if the contract is required
  357.                     if($needsW2Val['required']){
  358.                         $slog->log("1");
  359.                         foreach($ClaimResources as $getClaimResource){
  360.                             #Check if W2 employee needs validation
  361.                             if($needsW2Val['w2_contract']){
  362.                                 $slog->log("2");
  363.                                 #Validate only W2 employee
  364.                                 if($getClaimResource->getResource()->getIsW2()){
  365.                                     $HasContract $em->getRepository("ResourceManagementBundle:Contract")->createQueryBuilder('rc')
  366.                                         ->select('rc')
  367.                                         ->where("rc.resource = :resource")
  368.                                         ->setParameter("resource"$getClaimResource->getResource())
  369.                                         ->andWhere("rc.status = :status")
  370.                                         ->setParameter("status"2)
  371.                                         ->getQuery()
  372.                                         ->setMaxResults(1)
  373.                                         ->getOneOrNullResult();
  374.                                     $slog = new Slogger();
  375.                                     $slog->log('hascontract');
  376.                                     $slog->log($HasContract);
  377.                                     if ($HasContract == null) {
  378.                                         $slog->log("3");
  379.                                         $ResourcesHaveContracts false;
  380.                                     }else{
  381.                                         if(!in_array($getClaimResource->getResource()->getId(),$allContractData))
  382.                                         $allContractData[] = $getClaimResource->getResource()->getId();
  383.                                     }
  384.                                 }
  385.                             }else{ #otherwse, we validate only 1099 employee
  386.                                 $slog->log("4");
  387.                                 if(!$getClaimResource->getResource()->getIsW2()){
  388.                                     $slog->log("5");
  389.                                     $HasContract $em->getRepository("ResourceManagementBundle:Contract")->createQueryBuilder('rc')
  390.                                         ->select('rc')
  391.                                         ->where("rc.resource = :resource")
  392.                                         ->setParameter("resource"$getClaimResource->getResource())
  393.                                         ->andWhere("rc.status = :status")
  394.                                         ->setParameter("status"2)
  395.                                         ->getQuery()
  396.                                         ->setMaxResults(1)
  397.                                         ->getOneOrNullResult();
  398.                                     if ($HasContract == null) {
  399.                                         $slog->log("6");
  400.                                         $ResourcesHaveContracts false;
  401.                                     }else{
  402.                                         if(!in_array($getClaimResource->getResource()->getId(),$allContractData))
  403.                                         $allContractData[] = $getClaimResource->getResource()->getId();
  404.                                     }
  405.                                 }
  406.                             }
  407.                         }
  408.                     }
  409.                 }
  410.             }
  411.             $isInspected $claim->getIsInspected();
  412.             /*if($needsInspection){;
  413.                 $isInspected = $claim->getIsInspected();
  414.                 $slog->log("isInspected ".$isInspected);
  415.             }else{
  416.                 $isInspected = true;
  417.                 $slog->log("isInspected ".$isInspected);
  418.             }*/
  419.         }
  420.         if(count($allContractData) == count($ClaimResources)){
  421.             $ResourcesHaveContracts true;
  422.         }
  423.         $systemParamService $this->container->get('core.system_parameter_control');
  424.         $isRequireResourceHaveContract $systemParamService->getSystemControlData("requires_resources_have_contract");
  425.         if('0' === $isRequireResourceHaveContract){
  426.             $ResourcesHaveContracts true;
  427.         }
  428.         $isRequireSiteInspectionComplete $systemParamService->getSystemControlData("requires_site_inspection_complete");
  429.         if('0' === $isRequireSiteInspectionComplete){
  430.             $isInspected true;
  431.         }
  432.         $retVal = array(
  433.             "hasInvoices" => $hasInvoices,
  434.             "hasFinalInvoice" => $hasFinalInvoice,
  435.             "hasResources" => $hasResources,
  436.             "hasAdjusters" => $hasAdjusters,
  437.             "hasDisbursements" => $hasDisbursements,
  438.             "hasPerils" => $hasPerils,
  439.             "ResourcesHaveContracts" => $ResourcesHaveContracts,
  440.             "isInspected" => $isInspected
  441.         );
  442.         return new JsonResponse($retVal);
  443.     }
  444.     /**
  445.      * @Route("/claim/has_disbursements/{id}")
  446.      */
  447.     public function claimHasDisbursmentsAction(Claim $claim)
  448.     {
  449.         $retVal = array(
  450.             "hasDisbursements" => false
  451.         );
  452.         return new JsonResponse($retVal);
  453.     }
  454.     /**
  455.      * @Route("/time-log/edit/{claimId}/{disbursementId}")
  456.      */
  457.     public function timeLogEditAction($claimId$disbursementId)
  458.     {
  459.         $hasInvoices false;
  460.         $em $this->container->get("doctrine.orm.default_entity_manager");
  461.         $claim $em->getRepository("ClaimManagementBundle:Claim")->find($claimId);
  462.         $disbursement $em->getRepository("InvoiceManagementBundle:Disbursement")->find($disbursementId);
  463.         $customerExpenseId 0;
  464.         $disbursementId $disbursement->getExpense()->getId();
  465.         $customerExpense $disbursement->getCustomerExpense();
  466.         if ($customerExpense) {
  467.             $customerExpenseId $customerExpense->getId();
  468.         }
  469.         $HasInvoice $em->getRepository("InvoiceManagementBundle:Invoice")->findFinalByClaimID($claim);
  470.         if ($HasInvoice) {
  471.             $hasInvoices true;
  472.         }
  473.         $form $this->createForm(DisbursementTimeLogType::class, $disbursement, array('claim_id' => $claim->getId()));
  474.         return $this->render("@ClaimManagement/ClaimFlowScreen/Fragments/modals/edit-expense-modal.html.twig", [
  475.             "claim" => $claim,
  476.             'form' => $form->createView(),
  477.             "hasInvoices" => $hasInvoices,
  478.             "disbursement" => $disbursement,
  479.             "expenseId" => $disbursementId,
  480.             "customerExpenseId" => $customerExpenseId
  481.         ]);
  482.     }
  483.     /**
  484.      * @Route("/time-log/delete/{id}")
  485.      * @Method(methods={"POST"})
  486.      */
  487.     public function deleteTimeLogAction(Request $requestClaim $claim)
  488.     {
  489.         $em $this->container->get("doctrine.orm.entity_manager");
  490.         # Request ID to delete
  491.         $id intval($request->request->get("id"));
  492.         $deleteReason $request->request->get("deleteReason""");
  493.         $user $this->get('security.token_storage')->getToken()->getUser();
  494.         $username = ($user instanceof Resource) ? $user->getFullName() : "";
  495.         # Delete Certificate
  496.         $Disbursement $em->getRepository("InvoiceManagementBundle:Disbursement")->find($id);
  497.         $ClaimNote $this->container->get("claim.note_provider");
  498.         $ClaimNote->addClaimNote(
  499.             $claim,
  500.             sprintf("Disbursement %s was deleted from Claim by %s with reason (%s)",
  501.                 $Disbursement->getExpense()->getExpenseName(), $username$deleteReason),
  502.             false,
  503.             61
  504.         );
  505.         $em->remove($Disbursement);
  506.         $em->flush();
  507.         /*$retVal = array(
  508.             "status" => "success",
  509.             "error_msgs" => []
  510.         );*/
  511.         $retVal = array(
  512.             'error' => false,
  513.             'error_msgs' => []
  514.         );
  515.         return new JsonResponse($retVal);
  516.     }
  517.     /**
  518.      * @Route("/auto_expenses/get/{customer}/{claim_id}")
  519.      * @ParamConverter("customer", class="CustomerManagementBundle:Customer")
  520.      */
  521.     public function getAutoExpenses(Customer $customer$claim_id)
  522.     {
  523.         $em $this->container->get("doctrine.orm.default_entity_manager");
  524.         if($customer){
  525.             $autoExpenses = [];
  526.             $sql "SELECT ce.id, ce.isAutoExpense, e.expenseName, ce.cost, ce.expense_id
  527.                     FROM customer_expense ce
  528.                     LEFT JOIN expense e ON ce.expense_id = e.id
  529.                     WHERE customer_id = :customer_id
  530.                     AND ce.isAutoExpense = :isAutoExpense";
  531.             $dataParams = array();
  532.             $dataParams['customer_id'] = $customer->getId();
  533.             $dataParams['isAutoExpense'] = 1;
  534.             $stmt $em->getConnection()->prepare($sql);
  535.             $stmt->execute($dataParams);
  536.             $customerExpenses $stmt->fetchAll(\PDO::FETCH_ASSOC);
  537.             $i 0;
  538.             foreach($customerExpenses as $customerExpense) {
  539.                 /*$sql = "SELECT *
  540.                         FROM disbursement 
  541.                         WHERE expense_id = :expense_id";
  542.                 $dataParams = array();
  543.                 $dataParams['expense_id'] = $customerExpense['id'];
  544.                 $stmt = $em->getConnection()->prepare($sql);
  545.                 $stmt->execute($dataParams);
  546.                 $disbursementExists = $stmt->fetchAll(\PDO::FETCH_ASSOC);*/
  547.                 //if ($customerExpense['isAutoExpense'] == 1) {
  548.                 array_push($autoExpenses, [
  549.                     "identifier" => $i,
  550.                     "description" => $customerExpense['expenseName'],
  551.                     "amount" => $customerExpense['cost'],
  552.                     "expense" => $customerExpense['expense_id'],
  553.                     "customerExpense" => $customerExpense['id']
  554.                 ]);
  555.                 $i++;
  556.                 // }
  557.             }
  558.             return $this->render("@ClaimManagement/ClaimFlowScreen/Fragments/modals/auto-expense-modal.html.twig", [
  559.                 "lastIdentifier" => $i,
  560.                 "autoExpenses" => $autoExpenses,
  561.                 "claim_id" => $claim_id
  562.             ]);
  563.         }else{
  564.             throw new NotFoundHttpException("Couldn't find this customer!");
  565.         }
  566.     }
  567.     /**
  568.      * @Route("/auto_expenses/load")
  569.      */
  570.     public function getAutoExpenseSubtotal(Request $request)
  571.     {
  572.         $data $request->request->get('autoExpense');
  573.         # number of items
  574.         $quantity $data['qty'];
  575.         # cost in string
  576.         $cost $data['amount'];
  577.         # proper dollar amount
  578.         $cost  floatval(ltrim($cost'$'));
  579.         # total
  580.         $subtotal $quantity $cost;
  581.         return new JsonResponse(['subtotal' => $subtotal]);
  582.     }
  583. }