src/MDS/EventsBundle/Controller/ProposalInvoiceDepositControlller.php line 80

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Mediterranean Develup Solutions
  4.  * User: jorge.defreitas@develup.solutions
  5.  * Date: 13/04/2018
  6.  * Time: 10:03
  7.  */
  8. namespace App\MDS\EventsBundle\Controller;
  9. use App\Entity\Configuration;
  10. use App\Entity\SettingsCompany;
  11. use App\MDS\EventsBundle\Entity\Proposal;
  12. use App\MDS\EventsBundle\Entity\ProposalInvoiceDepositControl;
  13. use App\MDS\EventsBundle\Entity\ProposalInvoiceDepositItems;
  14. use App\MDS\EventsBundle\Form\ProposalInvoiceDepositItemsType;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use App\MDS\EventsBundle\Entity\ProposalTracing;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use DateTime;
  20. use Symfony\Contracts\Translation\TranslatorInterface;
  21. class ProposalInvoiceDepositControlller extends AbstractController
  22. {
  23.     private $translator;
  24.     public function __construct(TranslatorInterface $translator) {
  25.         $this->translator $translator;
  26.     }
  27.     
  28.     /**
  29.      * @Route("/proposal/invoicedeposit/proforma/{id}",  name="proposal_invoice_deposit_proforma")
  30.      */
  31.     public function detailsProformaAction($idRequest $request)
  32.     {
  33.         $data = array();
  34.         $em $this->getDoctrine()->getManager();
  35.         $proposal$em->getRepository(Proposal::class)->findOneById($id);
  36.         $invoicedepositcontrol $em->getRepository(ProposalInvoiceDepositControl::class)->findByProposalId($id);
  37.         $invoicedeposit = new ProposalInvoiceDepositItems();
  38.         $invoicedeposit->setProposalId($id);
  39.         $form $this->createProposalInvoiceDepositItemsForm($invoicedeposit);
  40.         $controlId null;
  41.         $type "Proforma";
  42.         $prefix "PFD-";
  43.         $date = new \DateTime('now');
  44.         $data $this->baseInvoiceDepositProposal($id$controlId$type$id$prefix$date$request);
  45.         return $this->render('MDS/EventsBundle/invoice/invoice-deposit-proforma.html.twig',
  46.             array(
  47.                 'id' => $id,
  48.                 'cid' => $data['cid'],
  49.                 'numberadmin' => null,
  50.                 'type' => $data['type'],
  51.                 'invoice' => $invoicedepositcontrol,
  52.                 'number' => $data['number'],
  53.                 'prefix' => $data['prefix'],
  54.                 'date' => $data['date'],
  55.                 'token' =>  $data['token'],
  56.                 'proposal' => $data['proposal'],
  57.                 'company' => $data['company'],
  58.                 'clients' => $data['clients'],
  59.                 'invoicedeposititems' => $data['invoicedeposititems'],
  60.                 'totales_neto' => $data['totales_neto'],
  61.                 'totales_iva' => $data['totales_iva'],
  62.                 'totales' => $data['totales'],
  63.                 'bases_imponibles' => $data['ivas'],
  64.                 'currency' => $data['currency'],
  65.                 'form' => $form->createView(),
  66.                 'mcp' => $proposal->getMcp(),
  67.                 'propEditable' => !($proposal->getStatus() == 'Invoiced'),
  68.             )
  69.         );
  70.     }
  71.     /**
  72.      * @Route("/proposal/invoicedeposit/invoice/{id}/{fid}", defaults={"fid" = ""}, name="proposal_invoice_deposit")
  73.      */
  74.     public function detailsInvoiceDepositAction($id$fidRequest $request)
  75.     {
  76.         $data = array();
  77.         $em $this->getDoctrine()->getManager();
  78.         $proposal$em->getRepository(Proposal::class)->findOneById($id);
  79.         $invoicecontrol $em->getRepository(ProposalInvoiceDepositControl::class)->findByProposalId($id);
  80.         $prefix "IFD-";
  81.         if (empty($fid)){
  82.             $invoicedeposititems $em->getRepository(ProposalInvoiceDepositItems::class)->findBy(
  83.                 array(
  84.                     'proposalId' => $id,
  85.                     'controlId' => null,
  86.                 )
  87.             );
  88.             if (!empty($invoicedeposititems)){
  89.                 $invoicedepositcontrol = new ProposalInvoiceDepositControl();
  90.                 $invoicedepositcontrol->setProposalId($id);
  91.                 $invoicedepositcontrol->setDateAt(new \DateTime("now"));
  92.                 $invoicedepositcontrol->setPrefix($prefix);
  93.                 /* Obtengo usuario logueado */
  94.                 $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  95.                 $user_id $user_logueado->getId();
  96.                 $invoicedepositcontrol->setCreatedId($user_id);
  97.                 $invoicedepositcontrol->setUpdatedId($user_id);
  98.                 $em->persist($invoicedepositcontrol);
  99.                 $em->flush();
  100.                 $controlId $invoicedepositcontrol->getId();
  101.                 $date $invoicedepositcontrol->getDateAt();
  102.                 foreach($invoicedeposititems as $invoicedeposit){
  103.                     $invoicedeposit->setControlId($controlId);
  104.                     $em->persist($invoicedeposit);
  105.                 }
  106.                 $em->flush();
  107.                 return $this->redirectToRoute('proposal_invoice_deposit',
  108.                     array(
  109.                         'id' => $id,
  110.                         'fid' => $invoicedepositcontrol->getId(),
  111.                     )
  112.                 );
  113.             }else{
  114.                 return $this->redirectToRoute('proposal_invoice_deposit_proforma',
  115.                     array(
  116.                         'id' => $id
  117.                     )
  118.                 );
  119.             }
  120.         }else{
  121.             $invoicedepositcontrolconsulta $em->getRepository(ProposalInvoiceDepositControl::class)->findOneBy(
  122.                 array(
  123.                     'proposalId' => $id,
  124.                     'id' => $fid
  125.                 )
  126.             );
  127.             $controlId $invoicedepositcontrolconsulta->getId();
  128.             $date $invoicedepositcontrolconsulta->getDateAt();
  129.         }
  130.         $number $id."-".$controlId;
  131.         $type "Invoice";
  132.         $data $this->baseInvoiceDepositProposal($id$controlId$type$number$prefix$date$request);
  133.         /* Obtengo usuario logueado */
  134.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  135.         $user_id $user_logueado->getId();
  136.         return $this->render('MDS/EventsBundle/invoice/invoice-deposit-invoice.html.twig',
  137.             array(
  138.                 'id' => $id,
  139.                 'cid' => $data['cid'],
  140.                 'fid' => $controlId,
  141.                 'invoice' => $invoicecontrol,
  142.                 'numberadmin' => $data['numberadmin'],
  143.                 'type' => $data['type'],
  144.                 'number' => $data['number'],
  145.                 'prefix' => $data['prefix'],
  146.                 'date' => $data['date'],
  147.                 'token' =>  $data['token'],
  148.                 'proposal' => $data['proposal'],
  149.                 'company' => $data['company'],
  150.                 'clients' => $data['clients'],
  151.                 'user' => $user_logueado,
  152.                 'invoicedeposititems' => $data['invoicedeposititems'],
  153.                 'totales_neto' => $data['totales_neto'],
  154.                 'totales_iva' => $data['totales_iva'],
  155.                 'totales' => $data['totales'],
  156.                 'bases_imponibles' => $data['ivas'],
  157.                 'currency' => $data['currency'],
  158.                 'mcp' => $proposal->getMcp(),
  159.             )
  160.         );
  161.     }
  162.     private function createProposalInvoiceDepositItemsForm(ProposalInvoiceDepositItems $entity)
  163.     {
  164.         $form $this->createForm(ProposalInvoiceDepositItemsType::class, $entity, array(
  165.             'action' => $this->generateUrl('proposal_invoice_Deposit_proforma_add'),
  166.             'method' => 'POST'
  167.         ));
  168.         return $form;
  169.     }
  170.     /**
  171.      * @Route("/proposal/invoicedepositdelete/invoice/{id}/{fid}", defaults={"fid" = ""}, name="proposal_invoice_deposit_delete")
  172.      */
  173.     public function deleteInvoiceDepositAction($id$fidRequest $request)
  174.     {
  175.         $em $this->getDoctrine()->getManager();
  176.         // INICIO: Buscamos en ITEMS los elementos que coincidan
  177.         $invoicedeposititems $em->getRepository(ProposalInvoiceDepositItems::class)->findBy(
  178.             array(
  179.                 'proposalId' => $id,
  180.                 'controlId' => $fid
  181.             )
  182.         );
  183.         foreach ($invoicedeposititems as $item){
  184.             $em->remove($item);
  185.             $em->flush();
  186.         }
  187.         // FIN: Buscamos en ITEMS los elementos que coincidan
  188.         // INICIO: Buscamos en CONTROL los elementos que coincidan
  189.         $invoicedepositcontrol $em->getRepository(ProposalInvoiceDepositControl::class)->findBy(
  190.             array(
  191.                 'proposalId' => $id,
  192.                 'id' => $fid
  193.             )
  194.         );
  195.         foreach ($invoicedepositcontrol as $item){
  196.             $numberDeposit $item->getNumber();
  197.             $em->remove($item);
  198.             $em->flush();
  199.         }
  200.         // FIN: Buscamos en CONTROL los elementos que coincidan
  201.         /* Obtengo usuario logueado */
  202.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  203.         $user_id $user_logueado->getId();
  204.         $now = new DateTime('now');
  205.         $tracingDeleteDeposit = new ProposalTracing();
  206.         $tracingDeleteDeposit->setDateAt($now);
  207.         $tracingDeleteDeposit->setCreatedAt($now);
  208.         $tracingDeleteDeposit->setUpdatedAt($now);
  209.         $tracingDeleteDeposit->setText('Ha eliminado la Factura de deposito No. '.$numberDeposit);
  210.         $tracingDeleteDeposit->setAgentId($user_id);
  211.         $tracingDeleteDeposit->setProposalId($id);
  212.         $tracingDeleteDeposit->setViewed('no');
  213.         $tracingDeleteDeposit->setCreatedId($user_id);
  214.         $tracingDeleteDeposit->setUpdatedId($user_id);
  215.         try{
  216.             $em->persist($tracingDeleteDeposit);
  217.             $em->flush();
  218.             $event 'The item has been deleted.';
  219.             $successMessage $this->translator->trans($event);
  220.             $this->addFlash('mensajereservation'$successMessage);
  221.         } catch (\Exception $e){
  222.             $event 'An error occurred: '.$e->getMessage();
  223.             $errorMessage $this->translator->trans($event);
  224.             $this->addFlash('mensajereservationerror'$errorMessage);
  225.         }
  226.         return $this->redirectToRoute('proposal_invoice_deposit_proforma',
  227.             array('id' => $id));
  228.     }
  229.     /**
  230.      * @Route("/proposal/invoicedeposit/add", name="proposal_invoice_Deposit_proforma_add")
  231.      */
  232.     public function createDepositAction(Request $request)
  233.     {
  234.         $invoicedeposit = new ProposalInvoiceDepositItems();
  235.         $form $this->createProposalInvoiceDepositItemsForm($invoicedeposit);
  236.         $form->handleRequest($request);
  237.         if($form->isValid())
  238.         {
  239.             $em $this->getDoctrine()->getManager();
  240.             /* Obtengo usuario logueado */
  241.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  242.             $user_id $user_logueado->getId();
  243.             $invoicedeposit->setCreatedId($user_id);
  244.             $invoicedeposit->setUpdatedId($user_id);
  245.             /* Gestión de eventos en Log */
  246.             $user_lastname $user_logueado->getLastname();
  247.             $user_name $user_logueado->getName();
  248.             $user_email $user_logueado->getEmail();
  249.             $user_rol $user_logueado->getRoles();
  250.             $event_url $request->getPathInfo();
  251.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  252.             $em->persist($invoicedeposit);
  253.             $em->flush();
  254.             $event 'the Items was registered';
  255.             $successMessage $this->translator->trans($event);
  256.             $this->addFlash('mensajeinvoicedepositservices'$successMessage);
  257.             return $this->redirectToRoute('proposal_invoice_deposit_proforma',
  258.                 array(
  259.                     'id' => $invoicedeposit->getProposalId()
  260.                 )
  261.             );
  262.         }else{
  263.             $errorMessage $this->translator->trans('Error, some fields are empty');
  264.             $this->addFlash('mensajeinvoicedepositserviceserror'$errorMessage);
  265.         }
  266.         return $this->redirectToRoute('proposal_invoice_deposit_proforma',
  267.             array(
  268.                 'id' => $invoicedeposit->getProposalId()
  269.             )
  270.         );
  271.     }
  272.     /**
  273.      * @Route("/proposal/invoicedeposit/print/proforma/{id}",  name="proposal_invoice_deposit_proforma_print")
  274.      */
  275.     public function printdetailsProformaDepositAction($idRequest $request)
  276.     {
  277.         $data = array();
  278.         $controlId null;
  279.         $type "Proforma";
  280.         $prefix "PFD-";
  281.         $date = new \DateTime('now');
  282.         $data $this->baseInvoiceDepositProposal($id$controlId$type$id$prefix$date$request);
  283.         return $this->render('MDS/EventsBundle/invoice/print-invoice-deposit-proforma.html.twig',
  284.             array(
  285.                 'id' => $id,
  286.                 'cid' => $data['cid'],
  287.                 'numberadmin' => null,
  288.                 'type' => $data['type'],
  289.                 'number' => $data['number'],
  290.                 'prefix' => $data['prefix'],
  291.                 'date' => $data['date'],
  292.                 'token' =>  $data['token'],
  293.                 'proposal' => $data['proposal'],
  294.                 'company' => $data['company'],
  295.                 'clients' => $data['clients'],
  296.                 'invoicedeposititems' => $data['invoicedeposititems'],
  297.                 'totales_neto' => $data['totales_neto'],
  298.                 'totales_iva' => $data['totales_iva'],
  299.                 'totales' => $data['totales'],
  300.                 'bases_imponibles' => $data['ivas'],
  301.                 'currency' => $data['currency']
  302.             )
  303.         );
  304.     }
  305.     /**
  306.      * @Route("/proposal/invoicedeposit/print/invoice/{id}/{fid}",  name="proposal_invoice_deposit_invoice_print")
  307.      */
  308.     public function printdetailsInvoicedepositAction($id$fidRequest $request)
  309.     {
  310.         $data = array();
  311.         $em $this->getDoctrine()->getManager();
  312.         $invoicedepositcontrolconsulta $em->getRepository(ProposalInvoiceDepositControl::class)->findOneBy(
  313.             array(
  314.                 'proposalId' => $id,
  315.                 'id' => $fid
  316.             )
  317.         );
  318.         $type "Invoice";
  319.         $controlId $invoicedepositcontrolconsulta->getId();
  320.         $date $invoicedepositcontrolconsulta->getDateAt();
  321.         $prefix $invoicedepositcontrolconsulta->getPrefix();
  322.         $data $this->baseInvoiceDepositProposal($id$controlId$type$id$prefix$date$request);
  323.         return $this->render('MDS/EventsBundle/invoice/print-invoice-deposit-proforma.html.twig',
  324.             array(
  325.                 'id' => $id,
  326.                 'cid' => $data['cid'],
  327.                 'numberadmin' => $data['numberadmin'],
  328.                 'type' => $data['type'],
  329.                 'number' => $data['number'],
  330.                 'prefix' => $data['prefix'],
  331.                 'date' => $data['date'],
  332.                 'token' =>  $data['token'],
  333.                 'proposal' => $data['proposal'],
  334.                 'company' => $data['company'],
  335.                 'clients' => $data['clients'],
  336.                 'invoicedeposititems' => $data['invoicedeposititems'],
  337.                 'totales_neto' => $data['totales_neto'],
  338.                 'totales_iva' => $data['totales_iva'],
  339.                 'totales' => $data['totales'],
  340.                 'bases_imponibles' => $data['ivas'],
  341.                 'currency' => $data['currency']
  342.             )
  343.         );
  344.     }
  345.     private function baseInvoiceDepositProposal($id$controlId$type$number$prefix$dateRequest $request)
  346.     {
  347.         $em $this->getDoctrine()->getManager();
  348.         $proposal$em->getRepository(Proposal::class)->findOneById($id);
  349.         $company $em->getRepository(SettingsCompany::class)->findOneById('1');
  350.         $parameters = array(
  351.             'id' => $proposal->getclientId(),
  352.         );
  353.         $dql 'SELECT cl,  c.country, re.region, p.name, r.city
  354.                 FROM App:Client cl
  355.                 INNER JOIN App:Country c WITH c.id = cl.country
  356.                 INNER JOIN App:Regions re WITH re.id = cl.region
  357.                 INNER JOIN App:Provinces p WITH p.id = cl.province
  358.                 INNER JOIN App:Cities r WITH r.id = cl.population
  359.                 WHERE cl.id = :id';
  360.         $query $em->createQuery($dql)->setParameters($parameters);
  361.         $client $query->getResult();
  362.         if (!is_null($controlId)){
  363.             $invoicecontrol $em->getRepository(ProposalInvoiceDepositControl::class)->findOneById($controlId);
  364.             if (!is_null($invoicecontrol->getNumber())){
  365.                 $numberadmin $invoicecontrol->getNumber();
  366.             }else{
  367.                 $numberadmin null;
  368.             }
  369.         }else{
  370.             $numberadmin null;
  371.         }
  372.         $invoicedeposititems $em->getRepository(ProposalInvoiceDepositItems::class)->findBy(
  373.             array(
  374.                 'proposalId' => $id,
  375.                 'controlId' => $controlId,
  376.             )
  377.         );
  378.         $totales_neto_all "0";
  379.         $totales_iva_all "0";
  380.         $totales_con_iva_all "0";
  381.         $data_iva = array();
  382.         $data_deposititems = array();
  383.         foreach($invoicedeposititems as $deposititems){
  384.             $amount $deposititems->getAmount();
  385.             $iva_base $deposititems->getIva();
  386.             $iva $iva_base 100;
  387.             if($iva_base !='0'){
  388.                 $amount_iva $amount $iva;
  389.             }else{
  390.                 $amount_iva "0";
  391.             }
  392.             $amount_con_iva $amount $amount_iva;
  393.             $totales_neto_all += $amount;
  394.             $totales_iva_all += $amount_iva;
  395.             $totales_con_iva_all += $amount_con_iva;
  396.             if (empty($totales_ivas_all[$iva_base])){
  397.                 $totales_ivas_all[$iva_base]= 0;
  398.             }
  399.             $totales_ivas_all[$iva_base] += $amount_iva;
  400.             $data_iva[$iva_base] = array(
  401.                 'iva' => $iva_base,
  402.                 'ivas' => $totales_ivas_all[$iva_base],
  403.             );
  404.             $data_deposititems[] = array(
  405.                 'id' => $deposititems->getId(),
  406.                 'name' => $deposititems->getName(),
  407.                 'amount' => $amount,
  408.                 'iva' => $iva_base,
  409.                 'total' => $amount_con_iva
  410.             );
  411.         }
  412.         $currency ="€";
  413.         $data = array(
  414.             'id' => $id,
  415.             'cid' => $controlId,
  416.             'type' => $type,
  417.             'number' => $number,
  418.             'prefix' => $prefix,
  419.             'numberadmin' => $numberadmin,
  420.             'date' => $date,
  421.             'token' => $proposal->getAccessKey(),
  422.             'proposal' => $proposal,
  423.             'company' => $company,
  424.             'clients' => $client,
  425.             'invoicedeposititems' => $data_deposititems,
  426.             'totales_neto' => $totales_neto_all,
  427.             'totales_iva' => $totales_iva_all,
  428.             'totales' => $totales_con_iva_all,
  429.             'ivas' => $data_iva,
  430.             'currency' => $currency,
  431.         );
  432.         return $data;
  433.     }
  434.     /**
  435.      * @Route("/proposal/invoicedeposit/deleted/items/{id}", name="proposal_invoice_deposit_invoice_deleted_items")
  436.      *
  437.      */
  438.     public function deleteItemsInvoiceDepositAction($idRequest $request)
  439.     {
  440.         $em $this->getDoctrine()->getManager();
  441.         $delete $em->getRepository(ProposalInvoiceDepositItems::class)->findOneById($id);
  442.         $em->remove($delete);
  443.         $em->flush();
  444.         $event 'The item in the deposit proforma has been removed';
  445.         $successMessage $this->translator->trans($event);
  446.         $this->addFlash('mensajeinvoicedepositservices'$successMessage);
  447.         return $this->redirectToRoute('proposal_invoice_deposit_proforma',
  448.             array(
  449.                 'id' => $delete->getProposalId(),
  450.             )
  451.         );
  452.     }
  453.     /**
  454.      * @Route("/proposal/invoicedeposit/number/updated/{cid}/{id}", name="proposal_invoicedeposit_number_update")
  455.      */
  456.     public function InvoiceEmptyNumberInvoiceDepositUpdateAction($cid$idRequest $request)
  457.     {
  458.         $em $this->getDoctrine()->getManager();
  459.         $invoice $em->getRepository(ProposalInvoiceDepositControl::class)->findOneById($id);
  460.         $numberinvoice $request->request->get('invoice')['number'];
  461. //        d($invoice, $numberinvoice);
  462.         if(!empty($numberinvoice) and !is_null($invoice))
  463.         {
  464.             $invoice->setNumber($numberinvoice);
  465.             /* Obtengo usuario logueado */
  466.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  467.             $user_id $user_logueado->getId();
  468.             $invoice->setUpdatedId($user_id);
  469.             $em->persist($invoice);
  470.             $em->flush();
  471.             $event 'The Invoice Deposit has been Updated.';
  472.             $successMessage $this->translator->trans($event);
  473.             $this->addFlash('mensajeinvoicedepositservices'$successMessage);
  474.         }else{
  475.             $errorMessage $this->translator->trans('Error, some fields are empty');
  476.             $this->addFlash('mensajeinvoicedepositserviceserror'$errorMessage);
  477.         }
  478.         return $this->redirectToRoute('proposal_invoice_deposit',
  479.             array(
  480.                 'id' => $cid,
  481.                 'fid' => $id,
  482.             )
  483.         );
  484.     }
  485. }