src/Controller/higotrigo/HtInvoiceController.php line 919

Open in your IDE?
  1. <?php
  2. namespace App\Controller\higotrigo;
  3. use App\Entity\Client;
  4. use App\Entity\HtProforma;
  5. use App\Entity\HtProformaItems;
  6. use App\Entity\Supplier;
  7. use App\Entity\Country;
  8. use App\Entity\HtExtra;
  9. use App\Entity\HtFile;
  10. use App\Entity\HtInvoice;
  11. use App\Entity\HtInvoiceItems;
  12. use App\Entity\HtItem;
  13. use App\Entity\HtMenu;
  14. use App\Repository\HtItemRepository;
  15. use App\Repository\HtMenuRepository;
  16. use App\Service\CommissionEnterprisesService;
  17. use App\Service\HtService;
  18. use App\Form\HtInvoiceType;
  19. use App\Repository\HtInvoiceRepository;
  20. use App\MDS\GreenPatioBundle\Entity\Reservation;
  21. use Google\Service\Dfareporting\Resource\Countries;
  22. use Google\Service\MigrationCenterAPI\DateTime;
  23. use Monolog\DateTimeImmutable;
  24. use PhpParser\Node\Stmt\Foreach_;
  25. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  26. use Symfony\Component\HttpFoundation\Request;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\Routing\Annotation\Route;
  29. use App\Entity\SettingsCompany;
  30. use App\Helper\StatusHelper;
  31. use Doctrine\ORM\EntityManagerInterface;
  32. use Symfony\Component\HttpFoundation\JsonResponse;
  33. /**
  34.  * @Route("/higotrigo/ht/invoice")
  35.  */
  36. class HtInvoiceController extends AbstractController
  37. {
  38.     private $commisionEnterpriseService;
  39.     public function __construct(CommissionEnterprisesService $commisionEnterpriseService)
  40.     {
  41.         $this->commisionEnterpriseService $commisionEnterpriseService;
  42.     }
  43.     /**
  44.      * @Route("/", name="app_ht_invoice_index", methods={"GET"})
  45.      */
  46.     public function index(HtInvoiceRepository $htInvoiceRepository): Response
  47.     {
  48.         $htInvoices $htInvoiceRepository->findAll();
  49.         foreach ($htInvoices as $invoice) {
  50.             // Formatear el campo vatTotalGroup
  51.             $invoice->setVatTotalGroup($this->formatVatTotalGroup($invoice->getVatTotalGroup()));
  52.         }
  53.         return $this->render('higotrigo/ht_invoice/index.html.twig', [
  54.             'ht_invoices' => $htInvoices,
  55.         ]);
  56.     }
  57.     /**
  58.      * @Route("/new", name="app_ht_invoice_new", methods={"GET", "POST"})
  59.      */
  60.     public function new(Request $requestHtInvoiceRepository $htInvoiceRepository): Response
  61.     {
  62.         $htInvoice = new HtInvoice();
  63.         $form $this->createForm(HtInvoiceType::class, $htInvoice);
  64.         $form->handleRequest($request);
  65.         if ($form->isSubmitted() && $form->isValid()) {
  66.             $htInvoiceRepository->add($htInvoicetrue);
  67.             return $this->redirectToRoute('app_ht_invoice_index', [], Response::HTTP_SEE_OTHER);
  68.         }
  69.         return $this->renderForm('higotrigo/ht_invoice/new.html.twig', [
  70.             'ht_invoice' => $htInvoice,
  71.             'form' => $form,
  72.         ]);
  73.     }
  74.     /**
  75.      * @Route("/{id}", name="app_ht_invoice_show", methods={"GET"})
  76.      */
  77.     public function show(HtInvoice $htInvoice): Response
  78.     {
  79.         $em $this->getDoctrine()->getManager();
  80.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  81.         $currency '€';
  82.         $boolToRec false;
  83.         return $this->render('higotrigo/ht_invoice/show.html.twig', [
  84.             'ht_invoice' => $htInvoice,
  85.             'company' => $company,
  86.             'currency' => $currency,
  87.             'boolToRec' => $boolToRec,
  88.         ]);
  89.     }
  90.     /**
  91.      * @Route("/{id}/edit", name="app_ht_invoice_edit", methods={"GET", "POST"})
  92.      */
  93.     public function edit(Request $requestHtInvoice $htInvoiceHtInvoiceRepository $htInvoiceRepository): Response
  94.     {
  95.         $form $this->createForm(HtInvoiceType::class, $htInvoice);
  96.         $form->handleRequest($request);
  97.         if ($form->isSubmitted() && $form->isValid()) {
  98.             $htInvoiceRepository->add($htInvoicetrue);
  99.             return $this->redirectToRoute('app_ht_invoice_index', [], Response::HTTP_SEE_OTHER);
  100.         }
  101.         return $this->renderForm('higotrigo/ht_invoice/edit.html.twig', [
  102.             'ht_invoice' => $htInvoice,
  103.             'form' => $form,
  104.         ]);
  105.     }
  106.     /**
  107.      * @Route("/{id}", name="app_ht_invoice_delete", methods={"POST"})
  108.      */
  109.     public function delete(Request $requestHtInvoice $htInvoiceHtInvoiceRepository $htInvoiceRepository): Response
  110.     {
  111.         if ($this->isCsrfTokenValid('delete'.$htInvoice->getId(), $request->request->get('_token'))) {
  112.             $htInvoiceRepository->remove($htInvoicetrue);
  113.         }
  114.         return $this->redirectToRoute('app_ht_invoice_index', [], Response::HTTP_SEE_OTHER);
  115.     }
  116.     /**
  117.      * @Route("/selinvoice/{id}",  name="ht_select_invoice")
  118.      * Seleccionar los elementos que pasaran a la proforma o factura
  119.      */
  120.     public function selectItemsInvoiceAction(HtFile $htFileEntityManagerInterface $emRequest $request)
  121.     {
  122.         $beneficio $request->query->get('bn');
  123.         // hfile => htitem => htMenu => htExtra ; htMenu => htMenuEscandallo => escandallo
  124.         $data = array();
  125.         $data['file'] = $htFile;
  126.         $allHtItems $htFile->getHtItems();
  127.         $allHtMenus = array();
  128.         $allHtExtrasinFile = array();
  129.         $allHtEscandallos = array();
  130.         $beneficioItem 0;
  131.         $indiceBeneficio = -1;
  132.         foreach ($allHtItems as $item) {
  133.             $indiceBeneficio ++;
  134.             $data['items'][$item->getId()]['item'] = $item;
  135.             $data['items'][$item->getId()]['item_beneficio'] = $beneficio[$indiceBeneficio];
  136.             $allHtExtras $item->getHtExtras();
  137.             foreach ($allHtExtras as $htSinlgeExtra){
  138.                 $htExtraIsInvoiced $em->getRepository(HtInvoiceItems::class)->findBy(array('itemType' => 'htExtra''itemIdOrigin' => $htSinlgeExtra->getId()));
  139.                 $boolIsInvoiced = ((count($htExtraIsInvoiced)) % == 0) ? false true;
  140.                 $data['items'][$item->getId()]['extras'][] = $htSinlgeExtra;
  141.                 if ($htSinlgeExtra->isAppearInvoice()) {
  142.                     $extra_price_no_vat $htSinlgeExtra->isOpOverCommission() ? $htSinlgeExtra->getPrice() * ($htSinlgeExtra->getOverCommission() /100) : ($htSinlgeExtra->getPrice() + $htSinlgeExtra->getOverCommission());
  143.                     $extra_price $extra_price_no_vat * (+ ($htSinlgeExtra->getVat()/100));
  144.                     $allHtExtrasinFile[$htSinlgeExtra->getId()] = array(
  145.                         'enabledToInvoice' => !$boolIsInvoiced,
  146.                         'extra' => $htSinlgeExtra,
  147.                         'extra_price_no_vat' => ($boolIsInvoiced) ? 0$extra_price_no_vat,
  148.                         'extra_price' => ($boolIsInvoiced) ? 0$extra_price,
  149.                     );
  150.                 }
  151.             }
  152.             $htMenus $item->getHtMenus();
  153.             if (!empty($htMenus)){
  154.                 foreach ($htMenus as $htMenu) {
  155.                     $allHtMenus[] = $htMenu;
  156.                     $data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['menu_info'] = $htMenu;
  157.                     $htExtras $htMenu->getHtExtras();
  158.                     if (!empty($htExtras)) {
  159.                         foreach ($htExtras as $elem) {
  160.                             $data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['extras'][] = $elem;
  161.                             $allHtExtras[] = $elem;
  162.                         }
  163.                     }
  164.                     $escandallo $htMenu->getEscandallo();
  165.                     if (!empty($escandallo)) {
  166.                         $data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['escandallos_names'] = null;
  167.                         foreach ($escandallo as $escan) {
  168.                             $data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['escandallos'][] = $escan;
  169.                             $allHtEscandallos[] = $escan;
  170.                             $data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['escandallos_names'] = (empty($data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['escandallos_names'])) ? ($escan->getNombre()) : ($data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['escandallos_names'] . ', ' $escan->getNombre());
  171.                         }
  172.                     }
  173.                 }
  174.             }
  175.         }
  176.         $data['company'] = $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  177.         $data['client'] = $em->getRepository(Client::class)->findOneById($htFile->getClient());
  178.         $data_iva = array();
  179.         $data_iva['ivaMontoVeintiUno'] = 0;
  180.         $data_iva['ivaMontoDiez'] = 0;
  181.         $data_iva['ivaMontoCero'] = 0;
  182.         $netoSum 0$totalSum 0;
  183.         $indiceBeneficio = -1;
  184.         if (array_key_exists("items"$data)) {
  185.             foreach ($data['items'] as $itemFac) {
  186.                 if (array_key_exists("menus"$itemFac)) {
  187.                     $indiceBeneficio++;
  188.                     foreach ($itemFac['menus'] as $htMenu) {
  189.                         $productName $htMenu['menu']['menu_info']->getName() . ' ( ' $htMenu['menu']['escandallos_names'] . ' )';
  190.                         $servicePrice = (($htMenu['menu']['menu_info']->getTotalPrice() * 100) / (100 $htMenu['menu']['menu_info']->getIva()));
  191.                         $subTotalPrice round((($htMenu['menu']['menu_info']->getTotalPrice() * 100) / (100 $htMenu['menu']['menu_info']->getIva())), 2) * $itemFac['item']->getPax();
  192.                         $subtotalProduct $subTotalPrice * (+ ($htMenu['menu']['menu_info']->getIva() / 100));
  193.                         $ivaAmount = ($htMenu['menu']['menu_info']->getIva() * $subTotalPrice) / 100;
  194.                         $htMenuIsInvoiced $em->getRepository(HtInvoiceItems::class)->findBy(array('itemType' => 'htMenu''itemIdOrigin' => $htMenu['menu']['menu_info']->getId()));
  195.                         $boolIsInvoiced = ((count($htMenuIsInvoiced)) % == 0) ? false true;
  196.                         if (!$boolIsInvoiced) {
  197.                             $netoSum += $subTotalPrice;
  198.                             $totalSum += $subtotalProduct;
  199.                             switch ($htMenu['menu']['menu_info']->getIva()) {
  200.                                 case 10$data_iva['ivaMontoDiez'] += $ivaAmount; break;
  201.                                 case 21$data_iva['ivaMontoVeintiUno'] += $ivaAmount; break;
  202.                                 default: break;
  203.                             }
  204.                         }
  205.                         $data['product'][] = array(
  206.                             'id' => $htMenu['menu']['menu_info']->getId(),     // Id del Menu
  207.                             'idHtItem' => $itemFac['item']->getId(),            // Id del Servicio (HtItem) que contiene el Menu
  208.                             'enabledToInvoice' => !$boolIsInvoiced,
  209.                             'productName' => $productName,
  210.                             'type' => null,
  211.                             'servicePrice' => $servicePrice,
  212.                             'qty' => $itemFac['item']->getPax(),
  213.                             'days' => $itemFac['item']->getDateStart()->format('d/m/Y'),
  214.                             'subTotalPrice' => ($boolIsInvoiced) ? $subTotalPrice,
  215.                             'iva' => $htMenu['menu']['menu_info']->getIva(),
  216.                             'ivaAmount' => $ivaAmount,
  217.                             'subtotalProduct' => ($boolIsInvoiced) ? $subtotalProduct,
  218.                             'beneficio' => $beneficio[$indiceBeneficio],
  219.                             'productSubTotal' => array(
  220.                                 'neto' => null,
  221.                                 'sumSubT' => null,
  222.                             ),
  223.                         );
  224.                     }
  225.                 }
  226.             }
  227.         }
  228.         $netoAllSum $netoSum;
  229.         $totalSumItems $totalSum;
  230.         //  SERVICIOS ADICIONALES
  231.         $data_extras = array();
  232.         if (!empty($allHtExtrasinFile)){ $data_extras['allHtExtrasinFile'] = $allHtExtrasinFile; }
  233.         $data_extras_sum = array('extra_price_no_vat' => 0'extra_price' => 0,);
  234.         foreach ($allHtExtrasinFile as $item){
  235.             $data_extras_sum['extra_price_no_vat'] += $item['extra_price_no_vat'];
  236.             $data_extras_sum['extra_price'] += $item['extra_price'];
  237.             $montoIva $item['extra_price'] - $item['extra_price_no_vat'];
  238.             switch ($item['extra']->getVat()) {
  239.                 case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  240.                 case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  241.                 default: break;
  242.             }
  243.             $netoAllSum += $item['extra_price_no_vat'];
  244.             $totalSum += $item['extra_price'];
  245.         }
  246.         $clientType 'client';
  247.         $clientAddress = (array_key_exists("client"$data) and !empty($data['client'])) ? $data['client']->getAddress() : 'No se ha podido determinar la dirección';
  248.         $country = (array_key_exists("client"$data) and !empty($data['client'])) ? $em->getRepository(Country::class)->findOneById($data['client']->getCountry()) : $em->getRepository(Country::class)->findOneById(62);
  249.         $country $country->getCountry();
  250.         if ($country == 'Spain'){ $country 'España'; }
  251.         $clientAddress $clientAddress ', '$country;
  252.         $clientDocument $data['client']->getIdDocument();
  253.         return $this->render('higotrigo/ht_invoice/invoice-select-items.html.twig',
  254.             array(
  255.                 'id' => $htFile->getId(),
  256.                 'htFile' => $htFile,
  257.                 'prefix' => null,
  258.                 'date' => null,
  259.                 'company' => $data['company'],
  260.                 'clientAddress' => $clientAddress,
  261.                 'clientType' => $clientType,
  262.                 'clientDocument' => $clientDocument,
  263.                 'client' => $data['client'],
  264.                 'clients' => null,
  265.                 'datasupplier' => $data,
  266.                 'data_extras' => $data_extras,
  267.                 'data_extras_sum' => $data_extras_sum,
  268.                 'currency' => '€',
  269.                 'totales_coniva_items' => $totalSumItems,
  270.                 'totales_coniva' => $totalSum,
  271.                 'totales_neto_items' => $netoSum,
  272.                 'totales_neto' => $netoAllSum,
  273.                 'bases_imponibles' => $data_iva,
  274.             )
  275.         );
  276.     }
  277.     /**
  278.      * @Route("/selinvoicesp/{id}",  name="ht_select_invoice_special")
  279.      * Vista previa para selecionar a quien se le va a facturar (proveedor - factura de comisión)
  280.      */
  281.     public function generateSpecialInvoiceAction($idEntityManagerInterface $emRequest $request)
  282.     {
  283.         //Buscamos los proveedores
  284.         $suppliers $em->getRepository(Supplier::class)->findAll();
  285.         $arrayClients = array();
  286.         foreach ($suppliers as $item){
  287.             $arrayClients[] = array(
  288.                 'nombre' => $item->getCompany(),
  289.                 'id' => $item->getId(),
  290.                 'tipo' => 'PROVEEDOR',
  291.                 'indice' => 'S'.$item->getId(),
  292.             );
  293.         }
  294.         return $this->render('higotrigo/ht_invoice/invoice-select-client-supplier.html.twig',
  295.             array(
  296.                 'id' => $id,
  297.                 'clients' => $arrayClients,
  298.             )
  299.         );
  300.     }
  301.     /**
  302.      * @Route("/selinvoicecom/{id}",  name="ht_select_commision_invoice")
  303.      * Seleccionar los elementos que pasaran a la factura de comision
  304.      */
  305.     public function selectItemsCommisionInvoiceAction($idHtFile $htFileHtService $htServiceEntityManagerInterface $emRequest $request)
  306.     {
  307.         $supId $request->request->get('reservation');
  308.         $supId $supId['client'];
  309.         $supId substr($supId,1);
  310.         $supplier $em->getRepository(Supplier::class)->findOneById($supId);
  311.         // El beneficio será del 100% por ser factura de comisión
  312.         $beneficio $request->query->get('bn');
  313.         // hfile => htitem => htMenu => htExtra ; htMenu => htMenuEscandallo => escandallo
  314.         $data = array();
  315.         $data['file'] = $em->getRepository(HtFile::class)->findOneById($id);
  316.         $htFile $data['file'];
  317.         $allHtItems $htFile->getHtItems();
  318.         $allHtMenus = array(); $allHtExtrasinFile = array(); $allHtEscandallos = array();
  319.         $beneficioItem 0;
  320.         $indiceBeneficio = -1;
  321.         $dataBen $htService->CalcTotals($htFile);
  322.         foreach ($allHtItems as $item) {
  323.             $indiceBeneficio ++;
  324.             $data['items'][$item->getId()]['item'] = $item;
  325.             $data['items'][$item->getId()]['item_beneficio'] = $dataBen['htItem'][$item->getId()]['precioNeto'] - $dataBen['htItem'][$item->getId()]['coste'];
  326.             $allHtExtras $item->getHtExtras();
  327.             foreach ($allHtExtras as $htSinlgeExtra){
  328.                 $htExtraIsInvoiced $em->getRepository(HtInvoiceItems::class)->findBy(array('itemType' => 'htExtra''itemIdOrigin' => $htSinlgeExtra->getId()));
  329.                 $boolIsInvoiced = ((count($htExtraIsInvoiced)) % == 0) ? false true;
  330.                 $data['items'][$item->getId()]['extras'][] = $htSinlgeExtra;
  331.                 if ($htSinlgeExtra->isAppearInvoice()) {
  332.                     $extra_price_no_vat $htSinlgeExtra->isOpOverCommission() ? $htSinlgeExtra->getPrice() * ($htSinlgeExtra->getOverCommission() /100) : ($htSinlgeExtra->getPrice() + $htSinlgeExtra->getOverCommission());
  333.                     $extra_price $extra_price_no_vat * (+ ($htSinlgeExtra->getVat()/100));
  334.                     $allHtExtrasinFile[] = array(
  335.                         'enabledToInvoice' => !$boolIsInvoiced,
  336.                         'extra' => $htSinlgeExtra,
  337.                         'extra_price_no_vat' => ($boolIsInvoiced) ? 0$extra_price_no_vat,
  338.                         'extra_price' => ($boolIsInvoiced) ? 0$extra_price,
  339.                     );
  340.                 }
  341.             }
  342.             $htMenus $item->getHtMenus();
  343.             if (!empty($htMenus)){
  344.                 foreach ($htMenus as $htMenu) {
  345.                     $allHtMenus[] = $htMenu;
  346.                     $data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['menu_info'] = $htMenu;
  347.                     $htExtras $htMenu->getHtExtras();
  348.                     if (!empty($htExtras)) {
  349.                         foreach ($htExtras as $elem) {
  350.                             $data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['extras'][] = $elem;
  351.                             $allHtExtras[] = $elem;
  352.                         }
  353.                     }
  354.                     $escandallo $htMenu->getEscandallo();
  355.                     if (!empty($escandallo)) {
  356.                         $data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['escandallos_names'] = null;
  357.                         foreach ($escandallo as $escan) {
  358.                             $data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['escandallos'][] = $escan;
  359.                             $allHtEscandallos[] = $escan;
  360.                             $data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['escandallos_names'] = (empty($data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['escandallos_names'])) ? ($escan->getNombre()) : ($data['items'][$item->getId()]['menus'][$htMenu->getId()]['menu']['escandallos_names'] . ', ' $escan->getNombre());
  361.                         }
  362.                     }
  363.                 }
  364.             }
  365.         }
  366.         $data['company'] = $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  367.         $data['client'] = $supplier;
  368.         $data_iva = array();
  369.         $data_iva['ivaMontoVeintiUno'] = 0;
  370.         $data_iva['ivaMontoDiez'] = 0;
  371.         $data_iva['ivaMontoCero'] = 0;
  372.         $netoSum 0$totalSum 0;
  373.         $indiceBeneficio = -1;
  374.         if (array_key_exists("items"$data)) {
  375.             foreach ($data['items'] as $itemFac) {
  376.                 if (array_key_exists("menus"$itemFac)) {
  377.                     $indiceBeneficio++;
  378.                     foreach ($itemFac['menus'] as $htMenu) {
  379.                         $productName $htMenu['menu']['menu_info']->getName() . ' ( ' $htMenu['menu']['escandallos_names'] . ' )';
  380.                         $servicePrice = (($htMenu['menu']['menu_info']->getTotalPrice() * 100) / (100 $htMenu['menu']['menu_info']->getIva()));
  381.                         $subTotalPrice round((($htMenu['menu']['menu_info']->getTotalPrice() * 100) / (100 $htMenu['menu']['menu_info']->getIva())), 2) * $itemFac['item']->getPax();
  382.                         $subtotalProduct $subTotalPrice * (+ ($htMenu['menu']['menu_info']->getIva() / 100));
  383.                         $ivaAmount = ($htMenu['menu']['menu_info']->getIva() * $subTotalPrice) / 100;
  384.                         $htMenuIsInvoiced $em->getRepository(HtInvoiceItems::class)->findBy(array('itemType' => 'htMenu''itemIdOrigin' => $htMenu['menu']['menu_info']->getId()));
  385.                         $boolIsInvoiced = ((count($htMenuIsInvoiced)) % == 0) ? false true;
  386.                         if (!$boolIsInvoiced) {
  387.                             $netoSum += $subTotalPrice;
  388.                             $totalSum += $subtotalProduct;
  389.                             switch ($htMenu['menu']['menu_info']->getIva()) {
  390.                                 case 10$data_iva['ivaMontoDiez'] += $ivaAmount; break;
  391.                                 case 21$data_iva['ivaMontoVeintiUno'] += $ivaAmount; break;
  392.                                 default: break;
  393.                             }
  394.                         }
  395.                         $data['product'][] = array(
  396.                             'id' => $htMenu['menu']['menu_info']->getId(),     // Id del Menu
  397.                             'idHtItem' => $itemFac['item']->getId(),            // Id del Servicio (HtItem) que contiene el Menu
  398.                             'enabledToInvoice' => !$boolIsInvoiced,
  399.                             'productName' => $productName,
  400.                             'type' => null,
  401.                             'servicePrice' => $servicePrice,
  402.                             'qty' => $itemFac['item']->getPax(),
  403.                             'days' => $itemFac['item']->getDateStart()->format('d/m/Y'),
  404.                             'subTotalPrice' => ($boolIsInvoiced) ? $subTotalPrice,
  405.                             'iva' => $htMenu['menu']['menu_info']->getIva(),
  406.                             'ivaAmount' => $ivaAmount,
  407.                             'subtotalProduct' => ($boolIsInvoiced) ? $subtotalProduct,
  408. //                        'beneficio' => $beneficio[$indiceBeneficio],
  409.                             'beneficio' => $dataBen['htItem'][$itemFac['item']->getId()]['precioNeto'] - $dataBen['htItem'][$itemFac['item']->getId()]['coste'],                      // Se lleva al 100% antes de impuestos ya que es factura de comision
  410.                         );
  411.                     }
  412.                 }
  413.             }
  414.         }
  415.         $netoAllSum $netoSum;
  416.         $totalSumItems $totalSum;
  417.         //  SERVICIOS ADICIONALES
  418.         $data_extras = array();
  419.         if (!empty($allHtExtrasinFile)){ $data_extras['allHtExtrasinFile'] = $allHtExtrasinFile; }
  420.         $data_extras_sum = array('extra_price_no_vat' => 0'extra_price' => 0,);
  421.         foreach ($allHtExtrasinFile as $item){
  422.             $data_extras_sum['extra_price_no_vat'] += $item['extra_price_no_vat'];
  423.             $data_extras_sum['extra_price'] += $item['extra_price'];
  424.             $montoIva $item['extra_price'] - $item['extra_price_no_vat'];
  425.             switch ($item['extra']->getVat()) {
  426.                 case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  427.                 case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  428.                 default: break;
  429.             }
  430.             $netoAllSum += $item['extra_price_no_vat'];
  431.             $totalSum += $item['extra_price'];
  432.         }
  433.         $clientType 'supplier';
  434.         $clientAddress = (array_key_exists("client"$data) and !empty($data['client'])) ? $data['client']->getAddress() : 'No se ha podido determinar la dirección';
  435.         $country = (array_key_exists("client"$data) and !empty($data['client'])) ? $em->getRepository(Country::class)->findOneById($data['client']->getCountry()) : $em->getRepository(Country::class)->findOneById(62);
  436.         $country $country->getCountry();
  437.         if ($country == 'Spain'){ $country 'España'; }
  438.         $clientAddress $clientAddress ', '$country;
  439.         $clientDocument $data['client']->getIdDocument();
  440.         return $this->render('higotrigo/ht_invoice/invoice-select-items.html.twig',
  441.             array(
  442.                 'id' => $htFile->getId(),
  443.                 'htFile' => $htFile,
  444.                 'prefix' => null,
  445.                 'date' => null,
  446.                 'company' => $data['company'],
  447.                 'clientAddress' => $clientAddress,
  448.                 'clientDocument' => $clientDocument,
  449.                 'clientType' => $clientType,
  450.                 'client' => $data['client'],
  451.                 'clients' => null,
  452.                 'datasupplier' => $data,
  453.                 'data_extras' => $data_extras,
  454.                 'data_extras_sum' => $data_extras_sum,
  455.                 'currency' => '€',
  456.                 'totales_coniva_items' => $totalSumItems,
  457.                 'totales_coniva' => $totalSum,
  458.                 'totales_neto_items' => $netoSum,
  459.                 'totales_neto' => $netoAllSum,
  460.                 'bases_imponibles' => $data_iva,
  461.             )
  462.         );
  463.     }
  464.     /**
  465.      * @Route("/createinvoice/{id}",  name="ht_create_invoice")
  466.      * Generar factura en el expediente ID
  467.      */
  468.     public function createInvoiceHtAction($idEntityManagerInterface $emHtItemRepository $htItemRepositoryHtMenuRepository $htMenuRepositoryRequest $request)
  469.     {
  470.         $req $request->request->get('invoiced_item');
  471.         $req_extra $request->request->get('invoiced_extra');
  472.         $htFile $em->getRepository(HtFile::class)->findOneById($id);
  473.         $beneficio_total 0;
  474.         $xItem null;  //Item donde se agregara el extra por comision de GP
  475.         // El break es necesario ya que el beneficio fue concebido para ser por servicios, luego con el cambio de multi menus en un servicio se debe sumar solamente una vez
  476.         foreach ($req as $itemServ){
  477.             foreach ($itemServ as $item) {
  478.                 if ($item['boolToInvoice'] == 'true') { $beneficio_total += $item['benefit']; break; }
  479.             }
  480.         }
  481.         $boolSeleccionados false;
  482.         // Si no hay elemento seleccionados se vuelve a la pantalla de seleccion
  483.         if ($boolSeleccionados){ return $this->redirectToRoute('ht_select_invoice', ['id' => $htFile->getId()], Response::HTTP_SEE_OTHER); }
  484.         // Se genera la factura
  485.         // buscamos por el prefijo de cada linea de facturacion para saber el ultimo ID
  486.         $invoiceLineGp $em->getRepository(HtInvoice::class)->findByPrefix('GP');
  487.         $invoiceLineCvr $em->getRepository(HtInvoice::class)->findByPrefix('CV');
  488.         $invoiceLineBlv $em->getRepository(HtInvoice::class)->findByPrefix('BL');
  489.         $invoiceLineOther $em->getRepository(HtInvoice::class)->findByPrefix('F');
  490.         $lastGp end($invoiceLineGp);
  491.         $lastCvr end($invoiceLineCvr);
  492.         $lastBlv end($invoiceLineBlv);
  493.         $lastOther end($invoiceLineOther);
  494.         // Buscamos los HtIemts del HtFile para saber la sala del servicio para determinar la línea de facturación ($prefix)
  495.         $htItems $em->getRepository(HtItem::class)->findByHtFile($htFile);
  496.         $lounge $htItems[0]->getLoungeGp();
  497.         $prefix = empty($lounge) ? 'F' : ($lounge->getId() > 29 'BL' : ($lounge->getId() < 22 'GP' 'CV'));
  498.         switch ($prefix) {
  499.             case 'F'$idNum = (empty($lastOther)) ? $lastOther->getIdNum() + 1; break;
  500.             case 'CV'$idNum = (empty($lastCvr)) ? $lastCvr->getIdNum() + 1; break;
  501.             case 'BL'$idNum = (empty($lastBlv)) ? $lastBlv->getIdNum() + 1; break;
  502.             default:
  503.                 // Por defecto Green Patio.
  504.                 // Esteban Rincon comenta que en caso de un expediente tener salas de GP y CVR deberiamos tener un expediente por linea de facturación
  505.                 $idNum = (empty($lastGp)) ? $lastGp->getIdNum() + 1;
  506.                 break;
  507.         }
  508.         $client = (empty($htFile->getClient())) ? null $htFile->getClient();
  509.         // Si no hay cliente no se puede facturar, se vuelve a la pantalla de seleccion
  510.         if (empty($client)){ return $this->redirectToRoute('ht_select_invoice', ['id' => $htFile->getId()], Response::HTTP_SEE_OTHER); }
  511.         $dateAt = new DateTimeImmutable('now');
  512.         $type 'Invoice';
  513.         $totalNet $vatTotalGroup $total 0;
  514.         $clientName $client->getName();
  515.         $clientAddress $request->request->get('clientAddress');
  516.         $clientDocument = empty($client->getIdDocument()) ? ' ' $client->getIdDocument();
  517.         $clientType $request->request->get('clientType');
  518.         if ($clientType == 'supplier'){
  519.             $type 'commission invoice';
  520.             $clientName $request->request->get('clientName');
  521.             $clientDocument $request->request->get('clientDocument');
  522.         }
  523.         $invoice = new HtInvoice();
  524.         $invoice->setIdNum($idNum);
  525.         $invoice->setPrefix($prefix);
  526.         $invoice->setDateAt($dateAt);
  527.         $invoice->setType($type);
  528.         $invoice->setTotalNet($totalNet);
  529.         $invoice->setVatTotalGroup($vatTotalGroup);
  530.         $invoice->setTotal($total);
  531.         $invoice->setClientName($clientName);
  532.         $invoice->setClientAddress($clientAddress);
  533.         $invoice->setClientDocument($clientDocument);
  534.         $invoice->setClientType($clientType);
  535.         $invoice->setHtFile($htFile);
  536.         $invoice->setBenefit($beneficio_total);
  537.         $em->persist($invoice);
  538.         $em->flush();
  539.         $data_iva = []; $data_iva['ivaMontoVeintiUno'] = 0$data_iva['ivaMontoDiez'] = 0;
  540.         // Se crean los Menus en los HtInvoiceItems
  541.         foreach ($req as $itemServ){
  542.             foreach ($itemServ as $item) {
  543.                 if ($item['boolToInvoice'] == 'true') {
  544.                     $htMenu $em->getRepository(HtMenu::class)->findOneByHtItem($item['idHtService']);
  545.                     $itemType 'htMenu';
  546.                     $itemIdOrigin $htMenu->getId();
  547.                     $itemName $item['name'];
  548.                     $htItem $em->getRepository(HtItem::class)->findOneById($htMenu->getHtItem());
  549.                     if (empty($xItem)){ $xItem $htItem; }
  550.                     $dateStart = ($htItem->getDateStart())->format('Y-m-d');
  551.                     $hourEnd = ($htItem->getHourEnd())->format('Y-m-d');
  552.                     $dateTimeString $dateStart ' ' $hourEnd;
  553.                     $dateEnd = new DateTimeImmutable($dateTimeString);
  554.                     $iva $htMenu->getIva();
  555.                     switch ($iva) {
  556.                         case 10$data_iva['ivaMontoDiez'] += ($item['subTotalPrice'] * 0.1); break;
  557.                         case 21$data_iva['ivaMontoVeintiUno'] += ($item['subTotalPrice'] * 0.21); break;
  558.                         default: break;
  559.                     }
  560.                     $itemCommission 0;                                                                // Solo htExtra maneja el concepto de over o comision.
  561.                     $itemOver 0;                                                                      // Solo htExtra maneja el concepto de over o comision.
  562.                     $costeDirecto $item['subTotalPrice'] - $item['benefit'];
  563.                     $totalNet += round($item['subTotalPrice'], 2);
  564.                     $total += round($item['subTotalPrice'], 2) + (round($item['subTotalPrice'], 2) * ($iva 100));
  565.                     $xPax = empty($item['qty']) ? $item['qty'];
  566.                     $htInvItem = new HtInvoiceItems();
  567.                     $htInvItem->setInvoice($invoice);
  568.                     $htInvItem->setHtFile($htFile);
  569.                     $htInvItem->setItemType($itemType);
  570.                     $htInvItem->setItemIdOrigin($itemIdOrigin);
  571.                     $htInvItem->setItemName($itemName);
  572.                     $htInvItem->setItemDateStart($htItem->getDateStart());
  573.                     $htInvItem->setItemDateEnd($dateEnd);
  574.                     $htInvItem->setItemPrice(round($item['servicePrice'], 2));
  575.                     $htInvItem->setItemUnits(1);
  576.                     $htInvItem->setItemPax($xPax);
  577.                     $htInvItem->setItemKgLt(1);
  578.                     $htInvItem->setItemRank(1);
  579.                     $htInvItem->setItemLocation(0);
  580.                     $htInvItem->setItemIva($iva);
  581.                     $htInvItem->setItemOpIva(0);            // +
  582.                     $htInvItem->setItemCommission($itemCommission);
  583.                     $htInvItem->setItemOpCommission(0);
  584.                     $htInvItem->setItemOver($itemOver);
  585.                     $htInvItem->setItemOpOver(0);
  586.                     $htInvItem->setItemSubTotalPrice(round($item['subTotalPrice'], 2));
  587.                     $htInvItem->setItemCosteDirecto(round($costeDirecto2));
  588.                     $htInvItem->setItemBeneficio(round($item['benefit'], 2));
  589.                     $em->persist($htInvItem);
  590.                     $em->flush();
  591.                 }
  592.             }
  593.         }
  594.         // Se crean los Extras en los HtInvoiceItems
  595.         if (!empty($req_extra)) {
  596.             foreach ($req_extra as $item) {
  597.                 if($item['boolToInvoice'] == 'true') {
  598.                     $htExtra $em->getRepository(HtExtra::class)->findOneById($item['idHtExtra']);
  599.                     if ($htExtra->isAppearInvoice()) {
  600.                         $itemType 'htExtra';
  601.                         $itemIdOrigin $htExtra->getId();
  602.                         $itemName $htExtra->getConcept();
  603.                         $htItem $em->getRepository(HtItem::class)->findOneById($htExtra->getHtItem());
  604.                         $dateStart = ($htItem->getDateStart())->format('Y-m-d');
  605.                         $hourEnd = ($htItem->getHourEnd())->format('Y-m-d');
  606.                         $dateTimeString $dateStart ' ' $hourEnd;
  607.                         $dateEnd = new DateTimeImmutable($dateTimeString);
  608.                         $iva $htExtra->getVat();
  609.                         $itemCommission = (($htExtra->isOpOverCommission() == 0) ? $htExtra->getOverCommission());
  610.                         $itemOver = (($htExtra->isOpOverCommission() == 1)  ? $htExtra->getOverCommission());
  611.                         $costeDirecto 0;
  612.                         $benefit $itemOver + ($item['price'] * ($itemCommission 100));
  613.                         $totalPrice $item['price'] + $benefit;
  614.                         switch ($iva) {
  615.                             case 10$data_iva['ivaMontoDiez'] += ($totalPrice 0.1); break;
  616.                             case 21$data_iva['ivaMontoVeintiUno'] += ($totalPrice 0.21); break;
  617.                             default: break;
  618.                         }
  619.                         $totalNet += round($totalPrice2);
  620.                         $total += round($totalPrice2) + (round($totalPrice2) * ($iva 100));
  621.                         $htInvItem = new HtInvoiceItems();
  622.                         $htInvItem->setInvoice($invoice);
  623.                         $htInvItem->setHtFile($htFile);
  624.                         $htInvItem->setItemType($itemType);
  625.                         $htInvItem->setItemIdOrigin($itemIdOrigin);
  626.                         $htInvItem->setItemName($itemName);
  627.                         $htInvItem->setItemDateStart($htItem->getDateStart());
  628.                         $htInvItem->setItemDateEnd($dateEnd);
  629.                         $htInvItem->setItemPrice(round($item['price'], 2));
  630.                         $htInvItem->setItemUnits(1);
  631.                         $htInvItem->setItemPax(1);
  632.                         $htInvItem->setItemKgLt(1);
  633.                         $htInvItem->setItemRank(1);
  634.                         $htInvItem->setItemLocation(0);
  635.                         $htInvItem->setItemIva($iva);
  636.                         $htInvItem->setItemOpIva(0);            // +
  637.                         $htInvItem->setItemCommission($itemCommission);
  638.                         $htInvItem->setItemOpCommission(0);
  639.                         $htInvItem->setItemOver($itemOver);
  640.                         $htInvItem->setItemOpOver(0);
  641.                         $htInvItem->setItemSubTotalPrice(round($totalPrice2));
  642.                         $htInvItem->setItemCosteDirecto(round($costeDirecto2));
  643.                         $htInvItem->setItemBeneficio(round($benefit2));
  644.                         $em->persist($htInvItem);
  645.                         $em->flush();
  646.                     }
  647.                 }
  648.             }
  649.         }
  650.         $string_data_iva '[21]'.round($data_iva['ivaMontoVeintiUno'],2).'[21]'.'[10]'.round($data_iva['ivaMontoDiez'],2).'[10]';
  651.         // Se actualiza la factura con los datos globales
  652.         $invoice->setTotalNet($totalNet);
  653.         $invoice->setVatTotalGroup($string_data_iva);
  654.         $invoice->setTotal(round($total,2));
  655.         // Comisión de HT a GreenPatio
  656.         $reserva $em->getRepository(Reservation::class)->findOneById($htFile->getReservation());
  657.         $user_logueado $this->getUser();
  658.         $now = new \DateTimeImmutable("now");
  659.         if (!empty($reserva)){
  660.             if (!is_null($reserva->getComHtGp())) {
  661.                 $infoComissionToService $totalNet * ($reserva->getComHtGp()/100);
  662.                 $perCom $reserva->getComHtGp();
  663.             } else {
  664.                 // Valor por defecto de la Comision de Ht 14%
  665.                 $infoComissionToService $totalNet * (14/100);
  666.                 $perCom 14;
  667.             }
  668.             $xObservation $invoice->getPrefix().$invoice->getIdNum().' - Comisión MANTE de Green Patio (Generado automaticamente) del '.$perCom '%';
  669.             $newHtExtra = new HtExtra();
  670.             $newHtExtra->setHtItem($xItem)
  671.                 ->setCreatedId($user_logueado)
  672.                 ->setUpdatedId($user_logueado)
  673.                 ->setCreatedAt($now)
  674.                 ->setUpdatedAt($now)
  675.                 ->setConcept($invoice->getPrefix().$invoice->getIdNum().' - Comisión MANTE de Green Patio (Generado automaticamente)')
  676.                 ->setPrice(0)
  677.                 ->setVat(21)
  678.                 ->setAppearInvoice(0)
  679.                 ->setOverCommission($infoComissionToService)
  680.                 ->setOpOverCommission(0);
  681.             $em->persist($newHtExtra);
  682.             $em->flush();
  683. //            $htMenuExtras = $em->getRepository(HtMenu::class)->findByHtItem($newHtItem->getId());
  684. //            foreach ($htMenuExtras as $item){
  685. //                $htMenuRepository->remove($item, true);
  686. //            }
  687.             $newBenAfterCom $invoice->getBenefit() - ($infoComissionToService * (+ ($newHtExtra->getVat()/100)));
  688.             $invoice->setBenefit($newBenAfterCom);
  689.         }
  690.         // Se actualiza el estado del expediente a facturado
  691.         $htFile->setStatus(StatusHelper::STATUS_HT['Facturado']);
  692.         $em->persist($htFile);
  693.         $em->persist($invoice);
  694.         $em->flush();
  695.         $dataService $this->commisionEnterpriseService->commissionHigoTrigoGreenPatio($invoice->getId(), $user_logueado->getId());
  696.         return $this->redirectToRoute('ht_view_invoice', ['id' => $invoice->getPrefix(). $invoice->getIdNum()], Response::HTTP_SEE_OTHER);
  697.     }
  698.     /**
  699.      * @Route("/viewinvoice/{id}",  name="ht_view_invoice")
  700.      * Ver la factura con el ID
  701.      */
  702.     public function showInvoiceHtAction($idEntityManagerInterface $emRequest $request)
  703.     {
  704.         $idNum = (substr($id01) == 'F') ? substr($id1) : substr($id2);      // F1, GP1, CV1
  705.         $prefix = (substr($id01) == 'F') ? 'F' substr($id02);
  706.         $user $this->getUser();
  707.         $parameters = array( 'idNum' => $idNum'prefix' => $prefix, );
  708.         $dql 'SELECT p
  709.                 FROM App\Entity\HtInvoice p
  710.                 WHERE p.idNum = :idNum AND p.prefix = :prefix';
  711.         $query $em->createQuery($dql)->setParameters($parameters);
  712.         $invoice $query->getResult();
  713.         $invoice = (!empty($invoice)) ? $invoice[0] : null;
  714. //        $id = $invoice->getPrefix() . $invoice->getIdNum();
  715.         // Si no consigue la factura redirige al listado de expedientes
  716.         if (empty($invoice)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  717.         $datAt = (!empty($invoice)) ? $invoice->getDateAt() : null;
  718.         $totales_neto = (!empty($invoice)) ? $invoice->getTotalNet() : 0;
  719.         $totales_iva = (!empty($invoice)) ? $invoice->getVatTotalGroup() : 0;
  720.         $totales = (!empty($invoice)) ? $invoice->getTotal() : 0;
  721.         $htInvoiceItems $em->getRepository(HtInvoiceItems::class)->findByInvoice($invoice);
  722.         $htFile $em->getRepository(HtFile::class)->findOneById(($invoice->getHtFile())->getId());
  723.         $clientName = (!empty($invoice)) ? $invoice->getClientName() : 'No se pudo determinar el cliente';
  724.         $clientAddress = (!empty($invoice)) ? $invoice->getClientAddress() : 'No se pudo determinar la dirección';
  725.         $clientDocument = (!empty($invoice)) ? $invoice->getClientDocument() : 'No se pudo determinar';
  726.         $type $invoice->getType();
  727.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  728.         $bases_imponibles = array('21'=> 0,'10'=> 0,'0'=> 0,);
  729.         $datasupplier = array(); $netoSumItems 0$totalSumItems 0;
  730.         $data_iva = array('ivaMontoDiez' => 0'ivaMontoVeintiUno' => 0);
  731.         $datasupplier['invoice_item_net_sum'] = 0$datasupplier['invoice_item_sum'] = 0;
  732.         $datasupplier['invoice_extra_net_sum'] = 0$datasupplier['invoice_extra_sum'] = 0;
  733.         foreach ($htInvoiceItems as $key => $item){
  734.             if ($item->getItemType()=='htMenu') {
  735.                 $datasupplier['invoice_item'][] = array(
  736.                     'id' => $item->getId(),
  737.                     'itemName' => $item->getItemName(),
  738.                     'itemPrice' => $item->getItemPrice(),
  739.                     'itemPax' => $item->getItemPax(),
  740.                     'itemDateStart' => $item->getItemDateStart(),
  741.                     'itemDateEnd' => $item->getItemDateEnd(),
  742.                     'itemIva' => $item->getItemIva(),
  743.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  744.                 );
  745.                 $netoSumItems += $item->getItemSubTotalPrice();
  746.                 $datasupplier['invoice_item_net_sum'] += $item->getItemSubTotalPrice();
  747.                 $datasupplier['invoice_item_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  748.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  749.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  750.                 switch ($item->getItemIva()) {
  751.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  752.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  753.                     default: break;
  754.                 }
  755.             }
  756.             if ($item->getItemType()=='htExtra') {
  757.                 $datasupplier['invoice_extra'][] = array(
  758.                     'id' => $item->getId(),
  759.                     'itemType' => $item->getItemType(),
  760.                     'itemIdOrigin' => $item->getItemIdOrigin(),
  761.                     'itemName' => $item->getItemName(),
  762.                     'itemPrice' => $item->getItemSubTotalPrice(),
  763.                     'itemPax' => $item->getItemPax(),
  764.                     'itemDateStart' => $item->getItemDateStart(),
  765.                     'itemDateEnd' => $item->getItemDateEnd(),
  766.                     'itemIva' => $item->getItemIva(),
  767.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  768.                 );
  769.                 $netoSumItems += $item->getItemSubTotalPrice();
  770.                 $datasupplier['invoice_extra_net_sum'] += $item->getItemSubTotalPrice();
  771.                 $datasupplier['invoice_extra_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  772.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  773.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  774.                 switch ($item->getItemIva()) {
  775.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  776.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  777.                     default: break;
  778.                 }
  779.             }
  780.         }
  781.         $allInvoices $em->getRepository(HtInvoice::class)->findByHtFile($htFile);
  782.         $invoiceRec $em->getRepository(HtInvoice::class)->findByInvoiceToRec($id);
  783.         $boolToRec = ($invoice->getType() == 'Invoice Rec') ? false : empty($invoiceRec);
  784.         return $this->render('higotrigo/ht_invoice/show-invoice.html.twig',
  785.             array(
  786.                 'id' => $htFile->getId(),
  787.                 'cid' => '',
  788.                 'fid' => $id,
  789.                 'invoice' => $invoice,
  790.                 'allInvoices' => $allInvoices,
  791.                 'proformas' => null,
  792.                 'numberadmin' => '',
  793.                 'type' => $type,
  794.                 'number' => $id,
  795.                 'prefix' => $prefix,
  796.                 'date' => $datAt,
  797.                 'reservation' => $htFile,
  798.                 'company' => $company,
  799.                 'user' => $user,
  800.                 'boolToRec' => $boolToRec,
  801.                 'invoicedeposititems' => '',
  802.                 'datasupplier' => $datasupplier,
  803.                 'totales_neto' => $netoSumItems,
  804.                 'totales_iva' => $totales_iva,
  805.                 'totales' => $totalSumItems,
  806.                 'bases_imponibles' => $data_iva,
  807.                 'paymentInvoice' => null,
  808.                 'currency' => '€',
  809.                 'clientName' => $clientName,
  810.                 'clientAddress' => $clientAddress,
  811.                 'clientDocument' => $clientDocument,
  812.             )
  813.         );
  814.     }
  815.     /**
  816.      * @Route("/viewinvoicerec/{id}",  name="ht_view_invoice_rec")
  817.      * Ver la factura rectificativa con el ID
  818.      */
  819.     public function showInvoiceRecHtAction($idEntityManagerInterface $emRequest $request)
  820.     {
  821.         $idNum = (substr($id02) == 'RF') ? substr($id2) : substr($id3);      // RF1, RGP1, RCV1
  822.         $prefix = (substr($id02) == 'RF') ? 'RF' substr($id03);
  823.         $user $this->getUser();
  824.         $parameters = array( 'idNum' => $idNum'prefix' => $prefix, );
  825.         $dql 'SELECT p
  826.                 FROM App\Entity\HtInvoice p
  827.                 WHERE p.idNum = :idNum AND p.prefix = :prefix';
  828.         $query $em->createQuery($dql)->setParameters($parameters);
  829.         $invoice $query->getResult();
  830.         $invoice = (!empty($invoice)) ? $invoice[0] : null;
  831.         // Si no consigue la factura redirige al listado de expedientes
  832.         if (empty($invoice)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  833.         $datAt = (!empty($invoice)) ? $invoice->getDateAt() : null;
  834.         $totales_neto = (!empty($invoice)) ? $invoice->getTotalNet() : 0;
  835.         $totales_iva = (!empty($invoice)) ? $invoice->getVatTotalGroup() : 0;
  836.         $totales = (!empty($invoice)) ? $invoice->getTotal() : 0;
  837.         $htInvoiceItems $em->getRepository(HtInvoiceItems::class)->findByInvoice($invoice);
  838.         $htFile $em->getRepository(HtFile::class)->findOneById(($invoice->getHtFile())->getId());
  839.         $clientName = (!empty($invoice)) ? $invoice->getClientName() : 'No se pudo determinar el cliente';
  840.         $clientAddress = (!empty($invoice)) ? $invoice->getClientAddress() : 'No se pudo determinar la dirección';
  841.         $clientDocument = (!empty($invoice)) ? $invoice->getClientDocument() : 'No se pudo determinar';
  842.         $type $invoice->getType();
  843.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  844.         $bases_imponibles = array('21'=> 0,'10'=> 0,'0'=> 0,);
  845.         $datasupplier = array(); $netoSumItems 0$totalSumItems 0;
  846.         $data_iva = array('ivaMontoDiez' => 0'ivaMontoVeintiUno' => 0);
  847.         $datasupplier['invoice_item_net_sum'] = 0$datasupplier['invoice_item_sum'] = 0;
  848.         $datasupplier['invoice_extra_net_sum'] = 0$datasupplier['invoice_extra_sum'] = 0;
  849.         foreach ($htInvoiceItems as $key => $item){
  850.             if ($item->getItemType()=='htMenu') {
  851.                 $datasupplier['invoice_item'][] = $item;
  852.                 $netoSumItems += $item->getItemSubTotalPrice();
  853.                 $datasupplier['invoice_item_net_sum'] += $item->getItemSubTotalPrice();
  854.                 $datasupplier['invoice_item_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  855.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  856.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  857.                 switch ($item->getItemIva()) {
  858.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  859.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  860.                     default: break;
  861.                 }
  862.             }
  863.             if ($item->getItemType()=='htExtra') {
  864. //                $datasupplier['invoice_extra'][] = $item;
  865.                 $datasupplier['invoice_extra'][] = array(
  866.                     'id' => $item->getId(),
  867.                     'itemType' => $item->getItemType(),
  868.                     'itemIdOrigin' => $item->getItemIdOrigin(),
  869.                     'itemName' => $item->getItemName(),
  870.                     'itemPrice' => $item->getItemSubTotalPrice(),
  871.                     'itemPax' => $item->getItemPax(),
  872.                     'itemDateStart' => $item->getItemDateStart(),
  873.                     'itemDateEnd' => $item->getItemDateEnd(),
  874.                     'itemIva' => $item->getItemIva(),
  875.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  876.                 );
  877.                 $netoSumItems += $item->getItemSubTotalPrice();
  878.                 $datasupplier['invoice_extra_net_sum'] += $item->getItemSubTotalPrice();
  879.                 $datasupplier['invoice_extra_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  880.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  881.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  882.                 switch ($item->getItemIva()) {
  883.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  884.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  885.                     default: break;
  886.                 }
  887.             }
  888.         }
  889.         $allInvoices $em->getRepository(HtInvoice::class)->findByHtFile($htFile);
  890.         return $this->render('higotrigo/ht_invoice/show-invoice.html.twig',
  891.             array(
  892.                 'id' => $htFile->getId(),
  893.                 'cid' => '',
  894.                 'fid' => $id,
  895.                 'invoice' => $invoice,
  896.                 'invoiceIdToRec' => $invoice->getInvoiceToRec(),
  897.                 'allInvoices' => $allInvoices,
  898.                 'proformas' => null,
  899.                 'boolToRec' => false,
  900.                 'numberadmin' => '',
  901.                 'type' => $type,
  902.                 'number' => $id,
  903.                 'prefix' => $prefix,
  904.                 'date' => $datAt,
  905.                 'reservation' => $htFile,
  906.                 'company' => $company,
  907.                 'user' => $user,
  908.                 'invoicedeposititems' => '',
  909.                 'datasupplier' => $datasupplier,
  910.                 'totales_neto' => $netoSumItems,
  911.                 'totales_iva' => $totales_iva,
  912.                 'totales' => $totalSumItems,
  913.                 'bases_imponibles' => $data_iva,
  914.                 'paymentInvoice' => null,
  915.                 'currency' => '€',
  916.                 'clientName' => $clientName,
  917.                 'clientAddress' => $clientAddress,
  918.                 'clientDocument' => $clientDocument,
  919.             )
  920.         );
  921.     }
  922.     /**
  923.      * @Route("/htexternal/viewprintinvoice/{id}",  name="ht_view_print_invoice")
  924.      * Ver la factura con el ID en modalidad de impresion
  925.      */
  926.     public function printInvoiceHtAction($idEntityManagerInterface $emRequest $request)
  927.     {
  928.         $idNum = (substr($id01) == 'F') ? substr($id1) : substr($id2);      // F1, GP1, CV1
  929.         $prefix = (substr($id01) == 'F') ? 'F' substr($id02);
  930.         $user $this->getUser();
  931.         $parameters = array( 'idNum' => $idNum'prefix' => $prefix, );
  932.         $dql 'SELECT p
  933.                 FROM App\Entity\HtInvoice p
  934.                 WHERE p.idNum = :idNum AND p.prefix = :prefix';
  935.         $query $em->createQuery($dql)->setParameters($parameters);
  936.         $invoice $query->getResult();
  937.         $invoice = (!empty($invoice)) ? $invoice[0] : null;
  938.         // Si no consigue la factura redirige al listado de expedientes
  939.         if (empty($invoice)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  940.         $datAt = (!empty($invoice)) ? $invoice->getDateAt() : null;
  941.         $totales_neto = (!empty($invoice)) ? $invoice->getTotalNet() : 0;
  942.         $totales_iva = (!empty($invoice)) ? $invoice->getVatTotalGroup() : 0;
  943.         $totales = (!empty($invoice)) ? $invoice->getTotal() : 0;
  944.         $htInvoiceItems $em->getRepository(HtInvoiceItems::class)->findByInvoice($invoice);
  945.         $htFile $em->getRepository(HtFile::class)->findOneById(($invoice->getHtFile())->getId());
  946.         $clientName = (!empty($invoice)) ? $invoice->getClientName() : 'No se pudo determinar el cliente';
  947.         $clientAddress = (!empty($invoice)) ? $invoice->getClientAddress() : 'No se pudo determinar la dirección';
  948.         $clientDocument = (!empty($invoice)) ? $invoice->getClientDocument() : 'No se pudo determinar';
  949.         $type $invoice->getType();
  950.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  951.         $bases_imponibles = array('21'=> 0,'10'=> 0,'0'=> 0,);
  952.         $datasupplier = array(); $netoSumItems 0$totalSumItems 0;
  953.         $data_iva = array('ivaMontoDiez' => 0'ivaMontoVeintiUno' => 0);
  954.         $datasupplier['invoice_item_net_sum'] = 0$datasupplier['invoice_item_sum'] = 0;
  955.         $datasupplier['invoice_extra_net_sum'] = 0$datasupplier['invoice_extra_sum'] = 0;
  956.         foreach ($htInvoiceItems as $key => $item){
  957.             if ($item->getItemType()=='htMenu') {
  958.                 $datasupplier['invoice_item'][] = array(
  959.                     'id' => $item->getId(),
  960.                     'itemName' => $item->getItemName(),
  961.                     'itemPrice' => $item->getItemPrice(),
  962.                     'itemPax' => $item->getItemPax(),
  963.                     'itemDateStart' => $item->getItemDateStart(),
  964.                     'itemDateEnd' => $item->getItemDateEnd(),
  965.                     'itemIva' => $item->getItemIva(),
  966.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  967.                 );
  968.                 $netoSumItems += $item->getItemSubTotalPrice();
  969.                 $datasupplier['invoice_item_net_sum'] += $item->getItemSubTotalPrice();
  970.                 $datasupplier['invoice_item_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  971.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  972.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  973.                 switch ($item->getItemIva()) {
  974.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  975.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  976.                     default: break;
  977.                 }
  978.             }
  979.             if ($item->getItemType()=='htExtra') {
  980. //                $datasupplier['invoice_extra'][] = $item;
  981.                 $datasupplier['invoice_extra'][] = array(
  982.                     'id' => $item->getId(),
  983.                     'itemType' => $item->getItemType(),
  984.                     'itemIdOrigin' => $item->getItemIdOrigin(),
  985.                     'itemName' => $item->getItemName(),
  986.                     'itemPrice' => $item->getItemSubTotalPrice(),
  987.                     'itemPax' => $item->getItemPax(),
  988.                     'itemDateStart' => $item->getItemDateStart(),
  989.                     'itemDateEnd' => $item->getItemDateEnd(),
  990.                     'itemIva' => $item->getItemIva(),
  991.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  992.                 );
  993.                 $netoSumItems += $item->getItemSubTotalPrice();
  994.                 $datasupplier['invoice_extra_net_sum'] += $item->getItemSubTotalPrice();
  995.                 $datasupplier['invoice_extra_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  996.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  997.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  998.                 switch ($item->getItemIva()) {
  999.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1000.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1001.                     default: break;
  1002.                 }
  1003.             }
  1004.         }
  1005.         return $this->render('higotrigo/ht_invoice/invoice-print.html.twig',
  1006.             array(
  1007.                 'id' => $htFile->getId(),
  1008.                 'cid' => '',
  1009.                 'fid' => $id,
  1010.                 'invoice' => $invoice,
  1011.                 'proformas' => null,
  1012.                 'boolToRec' => true,
  1013.                 'numberadmin' => '',
  1014.                 'type' => $type,
  1015.                 'number' => $id,
  1016.                 'prefix' => $prefix,
  1017.                 'date' => $datAt,
  1018.                 'reservation' => $htFile,
  1019.                 'company' => $company,
  1020.                 'user' => $user,
  1021.                 'invoicedeposititems' => '',
  1022.                 'datasupplier' => $datasupplier,
  1023.                 'totales_neto' => $netoSumItems,
  1024.                 'totales_iva' => $totales_iva,
  1025.                 'totales' => $totalSumItems,
  1026.                 'bases_imponibles' => $data_iva,
  1027.                 'paymentInvoice' => null,
  1028.                 'currency' => '€',
  1029.                 'clientName' => $clientName,
  1030.                 'clientAddress' => $clientAddress,
  1031.                 'clientDocument' => $clientDocument,
  1032.             )
  1033.         );
  1034.     }
  1035.     /**
  1036.      * @Route("/htexternal/viewprintinvoicerec/{id}", name="ht_view_print_invoicerec")
  1037.      * Ver la factura rectificativa con el ID en modalidad de impresion
  1038.      */
  1039.     public function printInvoiceRecHtAction($idEntityManagerInterface $emRequest $request)
  1040.     {
  1041.         $idNum = (substr($id02) == 'RF') ? substr($id2) : substr($id3);      // RF1, RGP1, RCV1
  1042.         $prefix = (substr($id02) == 'RF') ? 'RF' substr($id03);
  1043.         $user $this->getUser();
  1044.         $parameters = array( 'idNum' => $idNum'prefix' => $prefix, );
  1045.         $dql 'SELECT p
  1046.                 FROM App\Entity\HtInvoice p
  1047.                 WHERE p.idNum = :idNum AND p.prefix = :prefix';
  1048.         $query $em->createQuery($dql)->setParameters($parameters);
  1049.         $invoice $query->getResult();
  1050.         $invoice = (!empty($invoice)) ? $invoice[0] : null;
  1051.         // Si no consigue la factura redirige al listado de expedientes
  1052.         if (empty($invoice)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  1053.         $datAt = (!empty($invoice)) ? $invoice->getDateAt() : null;
  1054.         $totales_neto = (!empty($invoice)) ? $invoice->getTotalNet() : 0;
  1055.         $totales_iva = (!empty($invoice)) ? $invoice->getVatTotalGroup() : 0;
  1056.         $totales = (!empty($invoice)) ? $invoice->getTotal() : 0;
  1057.         $htInvoiceItems $em->getRepository(HtInvoiceItems::class)->findByInvoice($invoice);
  1058.         $htFile $em->getRepository(HtFile::class)->findOneById(($invoice->getHtFile())->getId());
  1059.         $clientName = (!empty($invoice)) ? $invoice->getClientName() : 'No se pudo determinar el cliente';
  1060.         $clientAddress = (!empty($invoice)) ? $invoice->getClientAddress() : 'No se pudo determinar la dirección';
  1061.         $clientDocument = (!empty($invoice)) ? $invoice->getClientDocument() : 'No se pudo determinar';
  1062.         $type $invoice->getType();
  1063.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  1064.         $invoiceIdToRec $invoice->getInvoiceToRec();
  1065.         $bases_imponibles = array('21'=> 0,'10'=> 0,'0'=> 0,);
  1066.         $datasupplier = array(); $netoSumItems 0$totalSumItems 0;
  1067.         $data_iva = array('ivaMontoDiez' => 0'ivaMontoVeintiUno' => 0);
  1068.         $datasupplier['invoice_item_net_sum'] = 0$datasupplier['invoice_item_sum'] = 0;
  1069.         $datasupplier['invoice_extra_net_sum'] = 0$datasupplier['invoice_extra_sum'] = 0;
  1070.         foreach ($htInvoiceItems as $key => $item){
  1071.             if ($item->getItemType()=='htMenu') {
  1072.                 $datasupplier['invoice_item'][] = array(
  1073.                     'id' => $item->getId(),
  1074.                     'itemName' => $item->getItemName(),
  1075.                     'itemPrice' => $item->getItemPrice(),
  1076.                     'itemPax' => $item->getItemPax(),
  1077.                     'itemDateStart' => $item->getItemDateStart(),
  1078.                     'itemDateEnd' => $item->getItemDateEnd(),
  1079.                     'itemIva' => $item->getItemIva(),
  1080.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1081.                 );
  1082.                 $netoSumItems += $item->getItemSubTotalPrice();
  1083.                 $datasupplier['invoice_item_net_sum'] += $item->getItemSubTotalPrice();
  1084.                 $datasupplier['invoice_item_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1085.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1086.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1087.                 switch ($item->getItemIva()) {
  1088.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1089.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1090.                     default: break;
  1091.                 }
  1092.             }
  1093.             if ($item->getItemType()=='htExtra') {
  1094. //                $datasupplier['invoice_extra'][] = $item;
  1095.                 $datasupplier['invoice_extra'][] = array(
  1096.                     'id' => $item->getId(),
  1097.                     'itemType' => $item->getItemType(),
  1098.                     'itemIdOrigin' => $item->getItemIdOrigin(),
  1099.                     'itemName' => $item->getItemName(),
  1100.                     'itemPrice' => $item->getItemSubTotalPrice(),
  1101.                     'itemPax' => $item->getItemPax(),
  1102.                     'itemDateStart' => $item->getItemDateStart(),
  1103.                     'itemDateEnd' => $item->getItemDateEnd(),
  1104.                     'itemIva' => $item->getItemIva(),
  1105.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1106.                 );
  1107.                 $netoSumItems += $item->getItemSubTotalPrice();
  1108.                 $datasupplier['invoice_extra_net_sum'] += $item->getItemSubTotalPrice();
  1109.                 $datasupplier['invoice_extra_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1110.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1111.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1112.                 switch ($item->getItemIva()) {
  1113.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1114.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1115.                     default: break;
  1116.                 }
  1117.             }
  1118.         }
  1119.         return $this->render('higotrigo/ht_invoice/invoice-print.html.twig',
  1120.             array(
  1121.                 'id' => $htFile->getId(),
  1122.                 'cid' => '',
  1123.                 'fid' => $id,
  1124.                 'invoice' => $invoice,
  1125.                 'proformas' => null,
  1126.                 'boolToRec' => true,
  1127.                 'numberadmin' => '',
  1128.                 'type' => $type,
  1129.                 'number' => $id,
  1130.                 'prefix' => $prefix,
  1131.                 'date' => $datAt,
  1132.                 'reservation' => $htFile,
  1133.                 'company' => $company,
  1134.                 'user' => $user,
  1135.                 'invoicedeposititems' => '',
  1136.                 'datasupplier' => $datasupplier,
  1137.                 'totales_neto' => $netoSumItems,
  1138.                 'totales_iva' => $totales_iva,
  1139.                 'totales' => $totalSumItems,
  1140.                 'bases_imponibles' => $data_iva,
  1141.                 'paymentInvoice' => null,
  1142.                 'currency' => '€',
  1143.                 'clientName' => $clientName,
  1144.                 'clientAddress' => $clientAddress,
  1145.                 'clientDocument' => $clientDocument,
  1146.                 'invoiceIdToRec' => $invoiceIdToRec,
  1147.             )
  1148.         );
  1149.     }
  1150.     /**
  1151.      * @Route("/createrecinvoice/{id}",  name="ht_create_rec_invoice")
  1152.      * Generar factura rectificativa de la factura ID
  1153.      */
  1154.     public function createRecInvoiceHtAction($idEntityManagerInterface $emRequest $request)
  1155.     {
  1156.         $idNum = (substr($id01) == 'F') ? substr($id1) : substr($id2);      // F1, GP1, CV1, BL1
  1157.         $prefix = (substr($id01) == 'F') ? 'F' substr($id02);
  1158.         $parameters = array( 'idNum' => $idNum'prefix' => $prefix, );
  1159.         $dql 'SELECT p
  1160.                 FROM App\Entity\HtInvoice p
  1161.                 WHERE p.idNum = :idNum AND p.prefix = :prefix';
  1162.         $query $em->createQuery($dql)->setParameters($parameters);
  1163.         $invoice $query->getResult();
  1164.         $invoice = (!empty($invoice)) ? $invoice[0] : null;
  1165.         // Si no consigue la factura redirige al listado de expedientes
  1166.         if (empty($invoice)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  1167.         // Buscamos el ID para la nueva rectificativa
  1168.         $parameters = array( 'prefix' => 'R'.$prefix, );
  1169.         $dql 'SELECT p
  1170.                 FROM App\Entity\HtInvoice p
  1171.                 WHERE p.prefix = :prefix';
  1172.         $query $em->createQuery($dql)->setParameters($parameters);
  1173.         $invoiceRec $query->getResult();
  1174.         $invoiceRec = (!empty($invoiceRec)) ? end($invoiceRec) : null;
  1175.         $idNewRec = empty($invoiceRec) ? : ($invoiceRec->getIdNum() + 1) ;
  1176.         $dateAt = new DateTimeImmutable('now');
  1177.         $invoiceItems $em->getRepository(HtInvoiceItems::class)->findByInvoice($invoice);
  1178.         // Creamos la factura rectificativa
  1179.         $oldIvas $invoice->getVatTotalGroup();
  1180.         $newIvas $this->transformarString($oldIvas);
  1181.         $invoiceRec = new HtInvoice();
  1182.         $invoiceRec->setIdNum($idNewRec);
  1183.         $invoiceRec->setPrefix('R'$prefix);
  1184.         $invoiceRec->setDateAt($dateAt);
  1185.         $invoiceRec->setType('Invoice Rec');
  1186.         $invoiceRec->setClientName($invoice->getClientName());
  1187.         $invoiceRec->setClientAddress($invoice->getClientAddress());
  1188.         $invoiceRec->setClientDocument($invoice->getClientDocument());
  1189.         $invoiceRec->setClientType($invoice->getClientType());
  1190.         $invoiceRec->setHtFile($invoice->getHtFile());
  1191.         $invoiceRec->setBenefit((-1) * $invoice->getBenefit());
  1192.         $invoiceRec->setTotalNet((-1) * $invoice->getTotalNet());
  1193.         $invoiceRec->setVatTotalGroup($newIvas);
  1194.         $invoiceRec->setTotal((-1) * $invoice->getTotal());
  1195.         $invoiceRec->setInvoiceToRec($id);
  1196.         $em->persist($invoiceRec);
  1197.         $em->flush();
  1198.         // Creamos los Items de la factura rectificativa
  1199.         foreach ($invoiceItems as $item){
  1200.             $htInvItem = new HtInvoiceItems();
  1201.             $htInvItem->setInvoice($invoiceRec);
  1202.             $htInvItem->setHtFile($item->getHtFile());
  1203.             $htInvItem->setItemType($item->getItemType());
  1204.             $htInvItem->setItemIdOrigin($item->getItemIdOrigin());
  1205.             $htInvItem->setItemName($item->getItemName());
  1206.             $htInvItem->setItemDateStart($item->getItemDateStart());
  1207.             $htInvItem->setItemDateEnd($item->getItemDateEnd());
  1208.             $htInvItem->setItemPrice((-1) * $item->getItemPrice());
  1209.             $htInvItem->setItemUnits($item->getItemUnits());
  1210.             $htInvItem->setItemPax($item->getItemPax());
  1211.             $htInvItem->setItemKgLt($item->getItemKgLt());
  1212.             $htInvItem->setItemRank($item->getItemRank());
  1213.             $htInvItem->setItemLocation($item->getItemLocation());
  1214.             $htInvItem->setItemIva($item->getItemIva());
  1215.             $htInvItem->setItemOpIva($item->isItemOpIva());
  1216.             $htInvItem->setItemCommission((-1) * $item->getItemCommission());
  1217.             $htInvItem->setItemOpCommission($item->isItemOpCommission());
  1218.             $htInvItem->setItemOver((-1) * $item->getItemOver());
  1219.             $htInvItem->setItemOpOver($item->isItemOpOver());
  1220.             $htInvItem->setItemSubTotalPrice((-1) * $item->getItemSubTotalPrice());
  1221.             $htInvItem->setItemCosteDirecto((-1) * $item->getItemCosteDirecto());
  1222.             $htInvItem->setItemBeneficio((-1) * $item->getItemBeneficio());
  1223.             $em->persist($htInvItem);
  1224.             $em->flush();
  1225.         }
  1226.         $user_logueado $this->getUser();
  1227.         $dataService $this->commisionEnterpriseService->rectCommissionHigoTrigoGreenPatio($invoice->getPrefix(), $invoice->getIdNum(), $user_logueado->getId());
  1228.         return $this->redirectToRoute('ht_view_invoice_rec', ['id' => $invoiceRec->getPrefix(). $invoiceRec->getIdNum()], Response::HTTP_SEE_OTHER);
  1229.     }
  1230.     /**
  1231.      * @Route("/createproforma/{id}",  name="ht_create_proforma")
  1232.      * Generar proforma en el expediente ID
  1233.      */
  1234.     public function createProformaHtAction($idEntityManagerInterface $emRequest $request)
  1235.     {
  1236.         $req $request->request->get('invoiced_item');
  1237.         $clientName $request->request->get('clientName');
  1238.         $req_extra $request->request->get('invoiced_extra');
  1239.         $htFile $em->getRepository(HtFile::class)->findOneById($id);
  1240.         $beneficio_total 0;
  1241.         foreach ($req as $itemServ){
  1242.             foreach ($itemServ as $item) {
  1243.                 if ($item['boolToInvoice'] == 'true') {
  1244.                     $beneficio_total += $item['benefit'];
  1245.                 }
  1246.             }
  1247.         }
  1248.         // Se genera la proforma
  1249.         // buscamos por el prefijo de cada linea de facturacion para saber el ultimo ID
  1250.         $invoiceLineGp $em->getRepository(HtInvoice::class)->findByPrefix('GP');
  1251.         $invoiceLineCvr $em->getRepository(HtInvoice::class)->findByPrefix('CV');
  1252.         $invoiceLineOther $em->getRepository(HtInvoice::class)->findByPrefix('F');
  1253.         $lastGp end($invoiceLineGp);
  1254.         $lastCvr end($invoiceLineCvr);
  1255.         $lastOther end($invoiceLineOther);
  1256.         // Buscamos los HtIemts del HtFile para saber la sala del servicio para determinar la línea de facturación ($prefix)
  1257.         $htItems $em->getRepository(HtItem::class)->findByHtFile($htFile);
  1258.         $lounge $htItems[0]->getLoungeGp();
  1259.         $prefix = (empty($lounge) ? 'F' : (($lounge->getId() < 22) ? 'GP' 'CV'));
  1260.         switch ($prefix) {
  1261.             case 'F'$idNum = (empty($lastOther)) ? $lastOther->getIdNum() + 1; break;
  1262.             case 'CV'$idNum = (empty($lastCvr)) ? $lastCvr->getIdNum() + 1; break;
  1263.             default:
  1264.                 // Por defecto Green Patio.
  1265.                 // Esteban Rincon comenta que en caso de un expediente tener salas de GP y CVR deberiamos tener un expediente por linea de facturación
  1266.                 $idNum = (empty($lastGp)) ? $lastGp->getIdNum() + 1;
  1267.                 break;
  1268.         }
  1269.         $client = (empty($htFile->getClient())) ? null $htFile->getClient();
  1270.         // Si no hay cliente no se puede facturar, se vuelve a la pantalla de seleccion
  1271.         if (empty($client)){ return $this->redirectToRoute('ht_select_invoice', ['id' => $htFile->getId()], Response::HTTP_SEE_OTHER); }
  1272.         $dateAt = new DateTimeImmutable('now');
  1273.         $type 'Proforma';
  1274.         $totalNet 0$vatTotalGroup 0$total 0;
  1275.         if (empty($clientName)){ $clientName $client->getName(); }
  1276.         $clientAddress $request->request->get('clientAddress');
  1277.         $clientDocument $request->request->get('clientDocument');
  1278.         if (empty($clientDocument)){ $clientDocument = empty($client->getIdDocument()) ? ' ' $client->getIdDocument(); }
  1279.         $clientType $request->request->get('clientType');
  1280.         if ($clientType == 'supplier'){
  1281.             $type 'Proforma de Factura de Comision';
  1282.             $clientName $request->request->get('clientName');
  1283.             $clientDocument $request->request->get('clientDocument');
  1284.         }
  1285.         $proforma = new HtProforma();
  1286.         $proforma->setIdNum($idNum);
  1287.         $proforma->setPrefix($prefix);
  1288.         $proforma->setDateAt($dateAt);
  1289.         $proforma->setType($type);
  1290.         $proforma->setTotalNet($totalNet);
  1291.         $proforma->setVatTotalGroup($vatTotalGroup);
  1292.         $proforma->setTotal($total);
  1293.         $proforma->setClientName($clientName);
  1294.         $proforma->setClientAddress($clientAddress);
  1295.         $proforma->setClientDocument($clientDocument);
  1296.         $proforma->setClientType($clientType);
  1297.         $proforma->setHtFile($htFile->getId());
  1298.         $proforma->setBenefit($beneficio_total);
  1299.         $em->persist($proforma);
  1300.         $em->flush();
  1301.         $data_iva = array(); $data_iva['ivaMontoVeintiUno'] = 0$data_iva['ivaMontoDiez'] = 0;
  1302.         // Se crean los Menus en los HtInvoiceItems
  1303.         foreach ($req as $itemServ){
  1304.             foreach ($itemServ as $item) {
  1305.                 if ($item['boolToInvoice'] == 'true') {
  1306.                     $htMenu $em->getRepository(HtMenu::class)->findOneByHtItem($item['idHtService']);
  1307.                     $itemType 'htMenu';
  1308.                     $itemIdOrigin $htMenu->getId();
  1309.                     $itemName $item['name'];
  1310.                     $htItem $em->getRepository(HtItem::class)->findOneById($htMenu->getHtItem());
  1311.                     $dateStart = ($htItem->getDateStart())->format('Y-m-d');
  1312.                     $hourEnd = ($htItem->getHourEnd())->format('Y-m-d');
  1313.                     $dateTimeString $dateStart ' ' $hourEnd;
  1314.                     $dateEnd = new DateTimeImmutable($dateTimeString);
  1315.                     $iva $htMenu->getIva();
  1316.                     switch ($iva) {
  1317.                         case 10$data_iva['ivaMontoDiez'] += ($item['subTotalPrice'] * 0.1); break;
  1318.                         case 21$data_iva['ivaMontoVeintiUno'] += ($item['subTotalPrice'] * 0.21); break;
  1319.                         default: break;
  1320.                     }
  1321.                     $itemCommission 0;                                                                // Solo htExtra maneja el concepto de over o comision.
  1322.                     $itemOver 0;                                                                      // Solo htExtra maneja el concepto de over o comision.
  1323.                     $costeDirecto $item['subTotalPrice'] - $item['benefit'];
  1324.                     $totalNet += round($item['subTotalPrice'], 2);
  1325.                     $total += round($item['subTotalPrice'], 2) + (round($item['subTotalPrice'], 2) * ($iva 100));
  1326.                     $htInvItem = new HtProformaItems();
  1327.                     $htInvItem->setProforma($proforma);
  1328.                     $htInvItem->setHtFile($htFile->getId());
  1329.                     $htInvItem->setItemType($itemType);
  1330.                     $htInvItem->setItemIdOrigin($itemIdOrigin);
  1331.                     $htInvItem->setItemName($itemName);
  1332.                     $htInvItem->setItemDateStart($htItem->getDateStart());
  1333.                     $htInvItem->setItemDateEnd($dateEnd);
  1334.                     $htInvItem->setItemPrice(round($item['servicePrice'], 2));
  1335.                     $htInvItem->setItemUnits(1);
  1336.                     $htInvItem->setItemPax($item['qty']);
  1337.                     $htInvItem->setItemKgLt(1);
  1338.                     $htInvItem->setItemRank(1);
  1339.                     $htInvItem->setItemLocation(0);
  1340.                     $htInvItem->setItemIva($iva);
  1341.                     $htInvItem->setItemOpIva(0);            // +
  1342.                     $htInvItem->setItemCommission($itemCommission);
  1343.                     $htInvItem->setItemOpCommission(0);
  1344.                     $htInvItem->setItemOver($itemOver);
  1345.                     $htInvItem->setItemOpOver(0);
  1346.                     $htInvItem->setItemSubTotalPrice(round($item['subTotalPrice'], 2));
  1347.                     $htInvItem->setItemCosteDirecto(round($costeDirecto2));
  1348.                     $htInvItem->setItemBeneficio(round($item['benefit'], 2));
  1349.                     $em->persist($htInvItem);
  1350.                     $em->flush();
  1351.                 }
  1352.             }
  1353.         }
  1354.         // Se crean los Extras en los HtInvoiceItems
  1355.         if (!empty($req_extra)) {
  1356.             foreach ($req_extra as $item) {
  1357.                 if($item['boolToInvoice'] == 'true') {
  1358.                     $htExtra $em->getRepository(HtExtra::class)->findOneById($item['idHtExtra']);
  1359.                     if ($htExtra->isAppearInvoice()) {
  1360.                         $itemType 'htExtra';
  1361.                         $itemIdOrigin $htExtra->getId();
  1362.                         $itemName $htExtra->getConcept();
  1363.                         $htItem $em->getRepository(HtItem::class)->findOneById($htExtra->getHtItem());
  1364.                         $dateStart = ($htItem->getDateStart())->format('Y-m-d');
  1365.                         $hourEnd = ($htItem->getHourEnd())->format('Y-m-d');
  1366.                         $dateTimeString $dateStart ' ' $hourEnd;
  1367.                         $dateEnd = new DateTimeImmutable($dateTimeString);
  1368.                         $iva $htExtra->getVat();
  1369.                         $itemCommission = (($htExtra->isOpOverCommission() == 0) ? $htExtra->getOverCommission());
  1370.                         $itemOver = (($htExtra->isOpOverCommission() == 1)  ? $htExtra->getOverCommission());
  1371.                         $costeDirecto 0;
  1372.                         $benefit $itemOver + ($item['price'] * ($itemCommission 100));
  1373.                         $totalPrice $item['price'] + $benefit;
  1374.                         switch ($iva) {
  1375.                             case 10$data_iva['ivaMontoDiez'] += ($totalPrice 0.1); break;
  1376.                             case 21$data_iva['ivaMontoVeintiUno'] += ($totalPrice 0.21); break;
  1377.                             default: break;
  1378.                         }
  1379.                         $totalNet += round($totalPrice2);
  1380.                         $total += round($totalPrice2) + (round($totalPrice2) * ($iva 100));
  1381.                         $htInvItem = new HtProformaItems();
  1382.                         $htInvItem->setProforma($proforma);
  1383.                         $htInvItem->setHtFile($htFile->getId());
  1384.                         $htInvItem->setItemType($itemType);
  1385.                         $htInvItem->setItemIdOrigin($itemIdOrigin);
  1386.                         $htInvItem->setItemName($itemName);
  1387.                         $htInvItem->setItemDateStart($htItem->getDateStart());
  1388.                         $htInvItem->setItemDateEnd($dateEnd);
  1389.                         $htInvItem->setItemPrice(round($item['price'], 2));
  1390.                         $htInvItem->setItemUnits(1);
  1391.                         $htInvItem->setItemPax(1);
  1392.                         $htInvItem->setItemKgLt(1);
  1393.                         $htInvItem->setItemRank(1);
  1394.                         $htInvItem->setItemLocation(0);
  1395.                         $htInvItem->setItemIva($iva);
  1396.                         $htInvItem->setItemOpIva(0);            // +
  1397.                         $htInvItem->setItemCommission($itemCommission);
  1398.                         $htInvItem->setItemOpCommission(0);
  1399.                         $htInvItem->setItemOver($itemOver);
  1400.                         $htInvItem->setItemOpOver(0);
  1401.                         $htInvItem->setItemSubTotalPrice(round($totalPrice2));
  1402.                         $htInvItem->setItemCosteDirecto(round($costeDirecto2));
  1403.                         $htInvItem->setItemBeneficio(round($benefit2));
  1404.                         $em->persist($htInvItem);
  1405.                         $em->flush();
  1406.                     }
  1407.                 }
  1408.             }
  1409.         }
  1410.         $string_data_iva '[21]'.round($data_iva['ivaMontoVeintiUno'],2).'[21]'.'[10]'.round($data_iva['ivaMontoDiez'],2).'[10]';
  1411.         // Se actualiza la factura con los datos globales
  1412.         $proforma->setTotalNet($totalNet);
  1413.         $proforma->setVatTotalGroup($string_data_iva);
  1414.         $proforma->setTotal(round($total,2));
  1415.         $em->persist($proforma);
  1416.         $em->flush();
  1417.         return $this->redirectToRoute('ht_view_proforma', ['id' => $proforma->getId()], Response::HTTP_SEE_OTHER);
  1418.     }
  1419.     /**
  1420.      * @Route("/viewproforma/{id}",  name="ht_view_proforma")
  1421.      * Ver la proforma número ID
  1422.      */
  1423.     public function showProformaHtAction($idEntityManagerInterface $emRequest $request)
  1424.     {
  1425.         $user $this->getUser();
  1426.         $proforma $em->getRepository(HtProforma::class)->findOneById($id);
  1427.         // Si no consigue la proforma redirige al listado de expedientes
  1428.         if (empty($proforma)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  1429.         $datAt = (!empty($proforma)) ? $proforma->getDateAt() : null;
  1430.         $totales_neto = (!empty($proforma)) ? $proforma->getTotalNet() : 0;
  1431.         $totales_iva = (!empty($proforma)) ? $proforma->getVatTotalGroup() : 0;
  1432.         $totales = (!empty($proforma)) ? $proforma->getTotal() : 0;
  1433.         $htProformaItems $em->getRepository(HtProformaItems::class)->findByProforma($proforma);
  1434.         $htFile $em->getRepository(HtFile::class)->findOneById($proforma->getHtFile());
  1435.         $clientName = (!empty($proforma)) ? $proforma->getClientName() : 'No se pudo determinar el cliente';
  1436.         $clientAddress = (!empty($proforma)) ? $proforma->getClientAddress() : 'No se pudo determinar la dirección';
  1437.         $clientDocument = (!empty($proforma)) ? $proforma->getClientDocument() : 'No se pudo determinar';
  1438.         $type $proforma->getType();
  1439.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  1440.         $bases_imponibles = array('21'=> 0,'10'=> 0,'0'=> 0,);
  1441.         $datasupplier = array(); $netoSumItems 0$totalSumItems 0;
  1442.         $data_iva = array('ivaMontoDiez' => 0'ivaMontoVeintiUno' => 0);
  1443.         $datasupplier['invoice_item_net_sum'] = 0$datasupplier['invoice_item_sum'] = 0;
  1444.         $datasupplier['invoice_extra_net_sum'] = 0$datasupplier['invoice_extra_sum'] = 0;
  1445.         foreach ($htProformaItems as $key => $item){
  1446.             if ($item->getItemType()=='htMenu') {
  1447.                 $datasupplier['invoice_item'][] = array(
  1448.                     'id' => $item->getId(),
  1449.                     'itemName' => $item->getItemName(),
  1450.                     'itemPrice' => $item->getItemPrice(),
  1451.                     'itemPax' => $item->getItemPax(),
  1452.                     'itemDateStart' => $item->getItemDateStart(),
  1453.                     'itemDateEnd' => $item->getItemDateEnd(),
  1454.                     'itemIva' => $item->getItemIva(),
  1455.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1456.                 );
  1457.                 $netoSumItems += $item->getItemSubTotalPrice();
  1458.                 $datasupplier['invoice_item_net_sum'] += $item->getItemSubTotalPrice();
  1459.                 $datasupplier['invoice_item_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1460.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1461.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1462.                 switch ($item->getItemIva()) {
  1463.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1464.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1465.                     default: break;
  1466.                 }
  1467.             }
  1468.             if ($item->getItemType()=='htExtra') {
  1469.                 $datasupplier['invoice_extra'][] = array(
  1470.                     'id' => $item->getId(),
  1471.                     'itemType' => $item->getItemType(),
  1472.                     'itemIdOrigin' => $item->getItemIdOrigin(),
  1473.                     'itemName' => $item->getItemName(),
  1474.                     'itemPrice' => $item->getItemSubTotalPrice(),
  1475.                     'itemPax' => $item->getItemPax(),
  1476.                     'itemDateStart' => $item->getItemDateStart(),
  1477.                     'itemDateEnd' => $item->getItemDateEnd(),
  1478.                     'itemIva' => $item->getItemIva(),
  1479.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1480.                 );
  1481.                 $netoSumItems += $item->getItemSubTotalPrice();
  1482.                 $datasupplier['invoice_extra_net_sum'] += $item->getItemSubTotalPrice();
  1483.                 $datasupplier['invoice_extra_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1484.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1485.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1486.                 switch ($item->getItemIva()) {
  1487.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1488.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1489.                     default: break;
  1490.                 }
  1491.             }
  1492.         }
  1493.         $allInvoices $em->getRepository(HtInvoice::class)->findByHtFile($htFile);
  1494.         $boolToRec false;
  1495.         $proformas $em->getRepository(HtProforma::class)->findByHtFile($htFile->getId());
  1496.         $fid $proforma->getId();
  1497.         return $this->render('higotrigo/ht_invoice/show-invoice.html.twig',
  1498.             array(
  1499.                 'id' => $htFile->getId(),
  1500.                 'cid' => '',
  1501.                 'fid' => $fid,
  1502.                 'invoice' => $proforma,
  1503.                 'allInvoices' => $allInvoices,
  1504.                 'proformas' => $proformas,
  1505.                 'numberadmin' => '',
  1506.                 'type' => $type,
  1507.                 'number' => $proforma->getId(),
  1508.                 'prefix' => $proforma->getPrefix(),
  1509.                 'date' => $datAt,
  1510.                 'reservation' => $htFile,
  1511.                 'company' => $company,
  1512.                 'user' => $user,
  1513.                 'boolToRec' => $boolToRec,
  1514.                 'invoicedeposititems' => '',
  1515.                 'datasupplier' => $datasupplier,
  1516.                 'totales_neto' => $netoSumItems,
  1517.                 'totales_iva' => $totales_iva,
  1518.                 'totales' => $totalSumItems,
  1519.                 'bases_imponibles' => $data_iva,
  1520.                 'paymentInvoice' => null,
  1521.                 'currency' => '€',
  1522.                 'clientName' => $clientName,
  1523.                 'clientAddress' => $clientAddress,
  1524.                 'clientDocument' => $clientDocument,
  1525.             )
  1526.         );
  1527.     }
  1528.     /**
  1529.      * @Route("/htexternal/viewprintproforma/{id}",  name="ht_view_print_proforma")
  1530.      * Ver la proforma del expediente ID en modalidad de impresion
  1531.      */
  1532.     public function printProformaHtAction($idEntityManagerInterface $emRequest $request)
  1533.     {
  1534.         $proforma $em->getRepository(HtProforma::class)->findOneById($id);
  1535.         // Si no consigue la proforma redirige al listado de expedientes
  1536.         if (empty($proforma)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  1537.         $datAt = (!empty($proforma)) ? $proforma->getDateAt() : null;
  1538.         $totales_neto = (!empty($proforma)) ? $proforma->getTotalNet() : 0;
  1539.         $totales_iva = (!empty($proforma)) ? $proforma->getVatTotalGroup() : 0;
  1540.         $totales = (!empty($proforma)) ? $proforma->getTotal() : 0;
  1541.         $htProformaItems $em->getRepository(HtProformaItems::class)->findByProforma($proforma);
  1542.         $htFile $em->getRepository(HtFile::class)->findOneById($id);
  1543.         $clientName = (!empty($proforma)) ? $proforma->getClientName() : 'No se pudo determinar el cliente';
  1544.         $clientAddress = (!empty($proforma)) ? $proforma->getClientAddress() : 'No se pudo determinar la dirección';
  1545.         $clientDocument = (!empty($proforma)) ? $proforma->getClientDocument() : 'No se pudo determinar';
  1546.         $type $proforma->getType();
  1547.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  1548.         $bases_imponibles = array('21'=> 0,'10'=> 0,'0'=> 0,);
  1549.         $datasupplier = array(); $netoSumItems 0$totalSumItems 0;
  1550.         $data_iva = array('ivaMontoDiez' => 0'ivaMontoVeintiUno' => 0);
  1551.         $datasupplier['invoice_item_net_sum'] = 0$datasupplier['invoice_item_sum'] = 0;
  1552.         $datasupplier['invoice_extra_net_sum'] = 0$datasupplier['invoice_extra_sum'] = 0;
  1553.         foreach ($htProformaItems as $key => $item){
  1554.             if ($item->getItemType()=='htMenu') {
  1555.                 $datasupplier['invoice_item'][] = array(
  1556.                     'id' => $item->getId(),
  1557.                     'itemName' => $item->getItemName(),
  1558.                     'itemPrice' => $item->getItemPrice(),
  1559.                     'itemPax' => $item->getItemPax(),
  1560.                     'itemDateStart' => $item->getItemDateStart(),
  1561.                     'itemDateEnd' => $item->getItemDateEnd(),
  1562.                     'itemIva' => $item->getItemIva(),
  1563.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1564.                 );
  1565.                 $netoSumItems += $item->getItemSubTotalPrice();
  1566.                 $datasupplier['invoice_item_net_sum'] += $item->getItemSubTotalPrice();
  1567.                 $datasupplier['invoice_item_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1568.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1569.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1570.                 switch ($item->getItemIva()) {
  1571.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1572.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1573.                     default: break;
  1574.                 }
  1575.             }
  1576.             if ($item->getItemType()=='htExtra') {
  1577.                 $datasupplier['invoice_extra'][] = array(
  1578.                     'id' => $item->getId(),
  1579.                     'itemType' => $item->getItemType(),
  1580.                     'itemIdOrigin' => $item->getItemIdOrigin(),
  1581.                     'itemName' => $item->getItemName(),
  1582.                     'itemPrice' => $item->getItemSubTotalPrice(),
  1583.                     'itemPax' => $item->getItemPax(),
  1584.                     'itemDateStart' => $item->getItemDateStart(),
  1585.                     'itemDateEnd' => $item->getItemDateEnd(),
  1586.                     'itemIva' => $item->getItemIva(),
  1587.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1588.                 );
  1589.                 $netoSumItems += $item->getItemSubTotalPrice();
  1590.                 $datasupplier['invoice_extra_net_sum'] += $item->getItemSubTotalPrice();
  1591.                 $datasupplier['invoice_extra_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1592.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1593.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1594.                 switch ($item->getItemIva()) {
  1595.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1596.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1597.                     default: break;
  1598.                 }
  1599.             }
  1600.         }
  1601.         $allInvoices $em->getRepository(HtInvoice::class)->findByHtFile($htFile);
  1602.         $boolToRec false;
  1603.         $fid $proforma->getPrefix() . $proforma->getIdNum();
  1604.         return $this->render('higotrigo/ht_invoice/proforma-print.html.twig',
  1605.             array(
  1606.                 'id' => $id,
  1607.                 'fid' => $fid,
  1608.                 'type' => 'Proforma',
  1609.                 'number' => $id,
  1610.                 'date' => $datAt,
  1611.                 'company' => $company,
  1612.                 'invoicedeposititems' => '',
  1613.                 'datasupplier' => $datasupplier,
  1614.                 'totales_neto' => $netoSumItems,
  1615.                 'totales' => $totalSumItems,
  1616.                 'bases_imponibles' => $data_iva,
  1617.                 'currency' => '€',
  1618.                 'clientName' => $clientName,
  1619.                 'clientAddress' => $clientAddress,
  1620.                 'clientDocument' => $clientDocument,
  1621.             )
  1622.         );
  1623.     }
  1624.     private function transformarString($input) {
  1625.         // Expresión regular para encontrar números entre los delimitadores [21] y [10]
  1626.         $pattern '/\[21\](\d+\.?\d*)\[21\]|\[10\](\d+\.?\d*)\[10\]/';
  1627.         // Función de reemplazo que multiplica los números por -1
  1628.         $callback = function ($matches) {
  1629.             if (isset($matches[1]) && $matches[1] !== '') { return '[21]' . (-$matches[1]) . '[21]'; } elseif (isset($matches[2]) && $matches[2] !== '') { return '[10]' . (-$matches[2]) . '[10]'; }
  1630.             return $matches[0]; // No debería llegar aquí
  1631.         };
  1632.         // Realizar el reemplazo en el string original
  1633.         $output preg_replace_callback($pattern$callback$input);
  1634.         return $output;
  1635.     }
  1636.     /**
  1637.      * Formatea el campo vatTotalGroup a una cadena como "157.00 (21%)"
  1638.      */
  1639.     private function formatVatTotalGroup($vatTotalGroup): string
  1640.     {
  1641.         // Regex para extraer valores, porcentajes y manejar valores negativos
  1642.         preg_match_all('/\[(\d+)\](-?\d+(\.\d+)?)/'$vatTotalGroup$matches);
  1643.         $formattedVat '';
  1644.         foreach ($matches[1] as $index => $percentage) {
  1645.             // Asegurarse de que los números se formateen correctamente
  1646.             $amount number_format((float)$matches[2][$index], 2',''.');
  1647.             $formattedVat .= "$amount ({$percentage}%)<br>";
  1648.         }
  1649.         return $formattedVat;
  1650.     }
  1651. }