src/Controller/higotrigo/HtInvoiceController.php line 1048

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.         if (!empty($reserva)){
  658.             if (!is_null($reserva->getComHtGp())) {
  659.                 $infoComissionToService $totalNet * ($reserva->getComHtGp()/100);
  660.                 $perCom $reserva->getComHtGp();
  661.             } else {
  662.                 // Valor por defecto de la Comision de Ht 14%
  663.                 $infoComissionToService $totalNet * (14/100);
  664.                 $perCom 14;
  665.             }
  666.             $xObservation $invoice->getPrefix().$invoice->getIdNum().' - Comisión MANTE de Green Patio (Generado automaticamente) del '.$perCom '%';
  667.             $user_logueado $this->getUser();
  668.             $now = new \DateTimeImmutable("now");
  669. //            $newHtItem = new HtItem();
  670. //            $newHtItem->setHtFile($htFile)
  671. //                ->setDateStart($htFile->getDateStart())
  672. //                ->setGratitudes(0)
  673. //                ->setCreatedId($user_logueado)
  674. //                ->setUpdatedId($user_logueado)
  675. //                ->setCreatedAt($now)
  676. //                ->setUpdatedAt($now)
  677. //                ->setObservation($xObservation)
  678. //                ->setPax(1);
  679. //            $em->persist($newHtItem);
  680. //            $em->flush();
  681.             $newHtExtra = new HtExtra();
  682.             $newHtExtra->setHtItem($xItem)
  683.                 ->setCreatedId($user_logueado)
  684.                 ->setUpdatedId($user_logueado)
  685.                 ->setCreatedAt($now)
  686.                 ->setUpdatedAt($now)
  687.                 ->setConcept($invoice->getPrefix().$invoice->getIdNum().' - Comisión MANTE de Green Patio (Generado automaticamente)')
  688.                 ->setPrice(0)
  689.                 ->setVat(21)
  690.                 ->setAppearInvoice(0)
  691.                 ->setOverCommission($infoComissionToService)
  692.                 ->setOpOverCommission(0);
  693.             $em->persist($newHtExtra);
  694.             $em->flush();
  695. //            $htMenuExtras = $em->getRepository(HtMenu::class)->findByHtItem($newHtItem->getId());
  696. //            foreach ($htMenuExtras as $item){
  697. //                $htMenuRepository->remove($item, true);
  698. //            }
  699.             $newBenAfterCom $invoice->getBenefit() - ($infoComissionToService * (+ ($newHtExtra->getVat()/100)));
  700.             $invoice->setBenefit($newBenAfterCom);
  701.         }
  702.         // Se actualiza el estado del expediente a facturado
  703.         $htFile->setStatus(StatusHelper::STATUS_HT['Facturado']);
  704.         $em->persist($htFile);
  705.         $em->persist($invoice);
  706.         $em->flush();
  707.         $dataService $this->commisionEnterpriseService->commissionHigoTrigoGreenPatio($invoice->getId(), $user_logueado->getId());
  708.         return $this->redirectToRoute('ht_view_invoice', ['id' => $invoice->getPrefix(). $invoice->getIdNum()], Response::HTTP_SEE_OTHER);
  709.     }
  710.     /**
  711.      * @Route("/viewinvoice/{id}",  name="ht_view_invoice")
  712.      * Ver la factura con el ID
  713.      */
  714.     public function showInvoiceHtAction($idEntityManagerInterface $emRequest $request)
  715.     {
  716.         $idNum = (substr($id01) == 'F') ? substr($id1) : substr($id2);      // F1, GP1, CV1
  717.         $prefix = (substr($id01) == 'F') ? 'F' substr($id02);
  718.         $user $this->getUser();
  719.         $parameters = array( 'idNum' => $idNum'prefix' => $prefix, );
  720.         $dql 'SELECT p
  721.                 FROM App\Entity\HtInvoice p
  722.                 WHERE p.idNum = :idNum AND p.prefix = :prefix';
  723.         $query $em->createQuery($dql)->setParameters($parameters);
  724.         $invoice $query->getResult();
  725.         $invoice = (!empty($invoice)) ? $invoice[0] : null;
  726. //        $id = $invoice->getPrefix() . $invoice->getIdNum();
  727.         // Si no consigue la factura redirige al listado de expedientes
  728.         if (empty($invoice)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  729.         $datAt = (!empty($invoice)) ? $invoice->getDateAt() : null;
  730.         $totales_neto = (!empty($invoice)) ? $invoice->getTotalNet() : 0;
  731.         $totales_iva = (!empty($invoice)) ? $invoice->getVatTotalGroup() : 0;
  732.         $totales = (!empty($invoice)) ? $invoice->getTotal() : 0;
  733.         $htInvoiceItems $em->getRepository(HtInvoiceItems::class)->findByInvoice($invoice);
  734.         $htFile $em->getRepository(HtFile::class)->findOneById(($invoice->getHtFile())->getId());
  735.         $clientName = (!empty($invoice)) ? $invoice->getClientName() : 'No se pudo determinar el cliente';
  736.         $clientAddress = (!empty($invoice)) ? $invoice->getClientAddress() : 'No se pudo determinar la dirección';
  737.         $clientDocument = (!empty($invoice)) ? $invoice->getClientDocument() : 'No se pudo determinar';
  738.         $type $invoice->getType();
  739.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  740.         $bases_imponibles = array('21'=> 0,'10'=> 0,'0'=> 0,);
  741.         $datasupplier = array(); $netoSumItems 0$totalSumItems 0;
  742.         $data_iva = array('ivaMontoDiez' => 0'ivaMontoVeintiUno' => 0);
  743.         $datasupplier['invoice_item_net_sum'] = 0$datasupplier['invoice_item_sum'] = 0;
  744.         $datasupplier['invoice_extra_net_sum'] = 0$datasupplier['invoice_extra_sum'] = 0;
  745.         foreach ($htInvoiceItems as $key => $item){
  746.             if ($item->getItemType()=='htMenu') {
  747.                 $datasupplier['invoice_item'][] = array(
  748.                     'id' => $item->getId(),
  749.                     'itemName' => $item->getItemName(),
  750.                     'itemPrice' => $item->getItemPrice(),
  751.                     'itemPax' => $item->getItemPax(),
  752.                     'itemDateStart' => $item->getItemDateStart(),
  753.                     'itemDateEnd' => $item->getItemDateEnd(),
  754.                     'itemIva' => $item->getItemIva(),
  755.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  756.                 );
  757.                 $netoSumItems += $item->getItemSubTotalPrice();
  758.                 $datasupplier['invoice_item_net_sum'] += $item->getItemSubTotalPrice();
  759.                 $datasupplier['invoice_item_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  760.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  761.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  762.                 switch ($item->getItemIva()) {
  763.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  764.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  765.                     default: break;
  766.                 }
  767.             }
  768.             if ($item->getItemType()=='htExtra') {
  769.                 $datasupplier['invoice_extra'][] = array(
  770.                     'id' => $item->getId(),
  771.                     'itemType' => $item->getItemType(),
  772.                     'itemIdOrigin' => $item->getItemIdOrigin(),
  773.                     'itemName' => $item->getItemName(),
  774.                     'itemPrice' => $item->getItemSubTotalPrice(),
  775.                     'itemPax' => $item->getItemPax(),
  776.                     'itemDateStart' => $item->getItemDateStart(),
  777.                     'itemDateEnd' => $item->getItemDateEnd(),
  778.                     'itemIva' => $item->getItemIva(),
  779.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  780.                 );
  781.                 $netoSumItems += $item->getItemSubTotalPrice();
  782.                 $datasupplier['invoice_extra_net_sum'] += $item->getItemSubTotalPrice();
  783.                 $datasupplier['invoice_extra_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  784.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  785.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  786.                 switch ($item->getItemIva()) {
  787.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  788.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  789.                     default: break;
  790.                 }
  791.             }
  792.         }
  793.         $allInvoices $em->getRepository(HtInvoice::class)->findByHtFile($htFile);
  794.         $invoiceRec $em->getRepository(HtInvoice::class)->findByInvoiceToRec($id);
  795.         $boolToRec = ($invoice->getType() == 'Invoice Rec') ? false : empty($invoiceRec);
  796.         return $this->render('higotrigo/ht_invoice/show-invoice.html.twig',
  797.             array(
  798.                 'id' => $htFile->getId(),
  799.                 'cid' => '',
  800.                 'fid' => $id,
  801.                 'invoice' => $invoice,
  802.                 'allInvoices' => $allInvoices,
  803.                 'proformas' => null,
  804.                 'numberadmin' => '',
  805.                 'type' => $type,
  806.                 'number' => $id,
  807.                 'prefix' => $prefix,
  808.                 'date' => $datAt,
  809.                 'reservation' => $htFile,
  810.                 'company' => $company,
  811.                 'user' => $user,
  812.                 'boolToRec' => $boolToRec,
  813.                 'invoicedeposititems' => '',
  814.                 'datasupplier' => $datasupplier,
  815.                 'totales_neto' => $netoSumItems,
  816.                 'totales_iva' => $totales_iva,
  817.                 'totales' => $totalSumItems,
  818.                 'bases_imponibles' => $data_iva,
  819.                 'paymentInvoice' => null,
  820.                 'currency' => '€',
  821.                 'clientName' => $clientName,
  822.                 'clientAddress' => $clientAddress,
  823.                 'clientDocument' => $clientDocument,
  824.             )
  825.         );
  826.     }
  827.     /**
  828.      * @Route("/viewinvoicerec/{id}",  name="ht_view_invoice_rec")
  829.      * Ver la factura rectificativa con el ID
  830.      */
  831.     public function showInvoiceRecHtAction($idEntityManagerInterface $emRequest $request)
  832.     {
  833.         $idNum = (substr($id02) == 'RF') ? substr($id2) : substr($id3);      // RF1, RGP1, RCV1
  834.         $prefix = (substr($id02) == 'RF') ? 'RF' substr($id03);
  835.         $user $this->getUser();
  836.         $parameters = array( 'idNum' => $idNum'prefix' => $prefix, );
  837.         $dql 'SELECT p
  838.                 FROM App\Entity\HtInvoice p
  839.                 WHERE p.idNum = :idNum AND p.prefix = :prefix';
  840.         $query $em->createQuery($dql)->setParameters($parameters);
  841.         $invoice $query->getResult();
  842.         $invoice = (!empty($invoice)) ? $invoice[0] : null;
  843.         // Si no consigue la factura redirige al listado de expedientes
  844.         if (empty($invoice)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  845.         $datAt = (!empty($invoice)) ? $invoice->getDateAt() : null;
  846.         $totales_neto = (!empty($invoice)) ? $invoice->getTotalNet() : 0;
  847.         $totales_iva = (!empty($invoice)) ? $invoice->getVatTotalGroup() : 0;
  848.         $totales = (!empty($invoice)) ? $invoice->getTotal() : 0;
  849.         $htInvoiceItems $em->getRepository(HtInvoiceItems::class)->findByInvoice($invoice);
  850.         $htFile $em->getRepository(HtFile::class)->findOneById(($invoice->getHtFile())->getId());
  851.         $clientName = (!empty($invoice)) ? $invoice->getClientName() : 'No se pudo determinar el cliente';
  852.         $clientAddress = (!empty($invoice)) ? $invoice->getClientAddress() : 'No se pudo determinar la dirección';
  853.         $clientDocument = (!empty($invoice)) ? $invoice->getClientDocument() : 'No se pudo determinar';
  854.         $type $invoice->getType();
  855.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  856.         $bases_imponibles = array('21'=> 0,'10'=> 0,'0'=> 0,);
  857.         $datasupplier = array(); $netoSumItems 0$totalSumItems 0;
  858.         $data_iva = array('ivaMontoDiez' => 0'ivaMontoVeintiUno' => 0);
  859.         $datasupplier['invoice_item_net_sum'] = 0$datasupplier['invoice_item_sum'] = 0;
  860.         $datasupplier['invoice_extra_net_sum'] = 0$datasupplier['invoice_extra_sum'] = 0;
  861.         foreach ($htInvoiceItems as $key => $item){
  862.             if ($item->getItemType()=='htMenu') {
  863.                 $datasupplier['invoice_item'][] = $item;
  864.                 $netoSumItems += $item->getItemSubTotalPrice();
  865.                 $datasupplier['invoice_item_net_sum'] += $item->getItemSubTotalPrice();
  866.                 $datasupplier['invoice_item_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  867.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  868.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  869.                 switch ($item->getItemIva()) {
  870.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  871.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  872.                     default: break;
  873.                 }
  874.             }
  875.             if ($item->getItemType()=='htExtra') {
  876. //                $datasupplier['invoice_extra'][] = $item;
  877.                 $datasupplier['invoice_extra'][] = array(
  878.                     'id' => $item->getId(),
  879.                     'itemType' => $item->getItemType(),
  880.                     'itemIdOrigin' => $item->getItemIdOrigin(),
  881.                     'itemName' => $item->getItemName(),
  882.                     'itemPrice' => $item->getItemSubTotalPrice(),
  883.                     'itemPax' => $item->getItemPax(),
  884.                     'itemDateStart' => $item->getItemDateStart(),
  885.                     'itemDateEnd' => $item->getItemDateEnd(),
  886.                     'itemIva' => $item->getItemIva(),
  887.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  888.                 );
  889.                 $netoSumItems += $item->getItemSubTotalPrice();
  890.                 $datasupplier['invoice_extra_net_sum'] += $item->getItemSubTotalPrice();
  891.                 $datasupplier['invoice_extra_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  892.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  893.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  894.                 switch ($item->getItemIva()) {
  895.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  896.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  897.                     default: break;
  898.                 }
  899.             }
  900.         }
  901.         $allInvoices $em->getRepository(HtInvoice::class)->findByHtFile($htFile);
  902.         return $this->render('higotrigo/ht_invoice/show-invoice.html.twig',
  903.             array(
  904.                 'id' => $htFile->getId(),
  905.                 'cid' => '',
  906.                 'fid' => $id,
  907.                 'invoice' => $invoice,
  908.                 'invoiceIdToRec' => $invoice->getInvoiceToRec(),
  909.                 'allInvoices' => $allInvoices,
  910.                 'proformas' => null,
  911.                 'boolToRec' => false,
  912.                 'numberadmin' => '',
  913.                 'type' => $type,
  914.                 'number' => $id,
  915.                 'prefix' => $prefix,
  916.                 'date' => $datAt,
  917.                 'reservation' => $htFile,
  918.                 'company' => $company,
  919.                 'user' => $user,
  920.                 'invoicedeposititems' => '',
  921.                 'datasupplier' => $datasupplier,
  922.                 'totales_neto' => $netoSumItems,
  923.                 'totales_iva' => $totales_iva,
  924.                 'totales' => $totalSumItems,
  925.                 'bases_imponibles' => $data_iva,
  926.                 'paymentInvoice' => null,
  927.                 'currency' => '€',
  928.                 'clientName' => $clientName,
  929.                 'clientAddress' => $clientAddress,
  930.                 'clientDocument' => $clientDocument,
  931.             )
  932.         );
  933.     }
  934.     /**
  935.      * @Route("/htexternal/viewprintinvoice/{id}",  name="ht_view_print_invoice")
  936.      * Ver la factura con el ID en modalidad de impresion
  937.      */
  938.     public function printInvoiceHtAction($idEntityManagerInterface $emRequest $request)
  939.     {
  940.         $idNum = (substr($id01) == 'F') ? substr($id1) : substr($id2);      // F1, GP1, CV1
  941.         $prefix = (substr($id01) == 'F') ? 'F' substr($id02);
  942.         $user $this->getUser();
  943.         $parameters = array( 'idNum' => $idNum'prefix' => $prefix, );
  944.         $dql 'SELECT p
  945.                 FROM App\Entity\HtInvoice p
  946.                 WHERE p.idNum = :idNum AND p.prefix = :prefix';
  947.         $query $em->createQuery($dql)->setParameters($parameters);
  948.         $invoice $query->getResult();
  949.         $invoice = (!empty($invoice)) ? $invoice[0] : null;
  950.         // Si no consigue la factura redirige al listado de expedientes
  951.         if (empty($invoice)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  952.         $datAt = (!empty($invoice)) ? $invoice->getDateAt() : null;
  953.         $totales_neto = (!empty($invoice)) ? $invoice->getTotalNet() : 0;
  954.         $totales_iva = (!empty($invoice)) ? $invoice->getVatTotalGroup() : 0;
  955.         $totales = (!empty($invoice)) ? $invoice->getTotal() : 0;
  956.         $htInvoiceItems $em->getRepository(HtInvoiceItems::class)->findByInvoice($invoice);
  957.         $htFile $em->getRepository(HtFile::class)->findOneById(($invoice->getHtFile())->getId());
  958.         $clientName = (!empty($invoice)) ? $invoice->getClientName() : 'No se pudo determinar el cliente';
  959.         $clientAddress = (!empty($invoice)) ? $invoice->getClientAddress() : 'No se pudo determinar la dirección';
  960.         $clientDocument = (!empty($invoice)) ? $invoice->getClientDocument() : 'No se pudo determinar';
  961.         $type $invoice->getType();
  962.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  963.         $bases_imponibles = array('21'=> 0,'10'=> 0,'0'=> 0,);
  964.         $datasupplier = array(); $netoSumItems 0$totalSumItems 0;
  965.         $data_iva = array('ivaMontoDiez' => 0'ivaMontoVeintiUno' => 0);
  966.         $datasupplier['invoice_item_net_sum'] = 0$datasupplier['invoice_item_sum'] = 0;
  967.         $datasupplier['invoice_extra_net_sum'] = 0$datasupplier['invoice_extra_sum'] = 0;
  968.         foreach ($htInvoiceItems as $key => $item){
  969.             if ($item->getItemType()=='htMenu') {
  970.                 $datasupplier['invoice_item'][] = array(
  971.                     'id' => $item->getId(),
  972.                     'itemName' => $item->getItemName(),
  973.                     'itemPrice' => $item->getItemPrice(),
  974.                     'itemPax' => $item->getItemPax(),
  975.                     'itemDateStart' => $item->getItemDateStart(),
  976.                     'itemDateEnd' => $item->getItemDateEnd(),
  977.                     'itemIva' => $item->getItemIva(),
  978.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  979.                 );
  980.                 $netoSumItems += $item->getItemSubTotalPrice();
  981.                 $datasupplier['invoice_item_net_sum'] += $item->getItemSubTotalPrice();
  982.                 $datasupplier['invoice_item_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  983.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  984.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  985.                 switch ($item->getItemIva()) {
  986.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  987.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  988.                     default: break;
  989.                 }
  990.             }
  991.             if ($item->getItemType()=='htExtra') {
  992. //                $datasupplier['invoice_extra'][] = $item;
  993.                 $datasupplier['invoice_extra'][] = array(
  994.                     'id' => $item->getId(),
  995.                     'itemType' => $item->getItemType(),
  996.                     'itemIdOrigin' => $item->getItemIdOrigin(),
  997.                     'itemName' => $item->getItemName(),
  998.                     'itemPrice' => $item->getItemSubTotalPrice(),
  999.                     'itemPax' => $item->getItemPax(),
  1000.                     'itemDateStart' => $item->getItemDateStart(),
  1001.                     'itemDateEnd' => $item->getItemDateEnd(),
  1002.                     'itemIva' => $item->getItemIva(),
  1003.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1004.                 );
  1005.                 $netoSumItems += $item->getItemSubTotalPrice();
  1006.                 $datasupplier['invoice_extra_net_sum'] += $item->getItemSubTotalPrice();
  1007.                 $datasupplier['invoice_extra_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1008.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1009.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1010.                 switch ($item->getItemIva()) {
  1011.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1012.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1013.                     default: break;
  1014.                 }
  1015.             }
  1016.         }
  1017.         return $this->render('higotrigo/ht_invoice/invoice-print.html.twig',
  1018.             array(
  1019.                 'id' => $htFile->getId(),
  1020.                 'cid' => '',
  1021.                 'fid' => $id,
  1022.                 'invoice' => $invoice,
  1023.                 'proformas' => null,
  1024.                 'boolToRec' => true,
  1025.                 'numberadmin' => '',
  1026.                 'type' => $type,
  1027.                 'number' => $id,
  1028.                 'prefix' => $prefix,
  1029.                 'date' => $datAt,
  1030.                 'reservation' => $htFile,
  1031.                 'company' => $company,
  1032.                 'user' => $user,
  1033.                 'invoicedeposititems' => '',
  1034.                 'datasupplier' => $datasupplier,
  1035.                 'totales_neto' => $netoSumItems,
  1036.                 'totales_iva' => $totales_iva,
  1037.                 'totales' => $totalSumItems,
  1038.                 'bases_imponibles' => $data_iva,
  1039.                 'paymentInvoice' => null,
  1040.                 'currency' => '€',
  1041.                 'clientName' => $clientName,
  1042.                 'clientAddress' => $clientAddress,
  1043.                 'clientDocument' => $clientDocument,
  1044.             )
  1045.         );
  1046.     }
  1047.     /**
  1048.      * @Route("/htexternal/viewprintinvoicerec/{id}", name="ht_view_print_invoicerec")
  1049.      * Ver la factura rectificativa con el ID en modalidad de impresion
  1050.      */
  1051.     public function printInvoiceRecHtAction($idEntityManagerInterface $emRequest $request)
  1052.     {
  1053.         $idNum = (substr($id02) == 'RF') ? substr($id2) : substr($id3);      // RF1, RGP1, RCV1
  1054.         $prefix = (substr($id02) == 'RF') ? 'RF' substr($id03);
  1055.         $user $this->getUser();
  1056.         $parameters = array( 'idNum' => $idNum'prefix' => $prefix, );
  1057.         $dql 'SELECT p
  1058.                 FROM App\Entity\HtInvoice p
  1059.                 WHERE p.idNum = :idNum AND p.prefix = :prefix';
  1060.         $query $em->createQuery($dql)->setParameters($parameters);
  1061.         $invoice $query->getResult();
  1062.         $invoice = (!empty($invoice)) ? $invoice[0] : null;
  1063.         // Si no consigue la factura redirige al listado de expedientes
  1064.         if (empty($invoice)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  1065.         $datAt = (!empty($invoice)) ? $invoice->getDateAt() : null;
  1066.         $totales_neto = (!empty($invoice)) ? $invoice->getTotalNet() : 0;
  1067.         $totales_iva = (!empty($invoice)) ? $invoice->getVatTotalGroup() : 0;
  1068.         $totales = (!empty($invoice)) ? $invoice->getTotal() : 0;
  1069.         $htInvoiceItems $em->getRepository(HtInvoiceItems::class)->findByInvoice($invoice);
  1070.         $htFile $em->getRepository(HtFile::class)->findOneById(($invoice->getHtFile())->getId());
  1071.         $clientName = (!empty($invoice)) ? $invoice->getClientName() : 'No se pudo determinar el cliente';
  1072.         $clientAddress = (!empty($invoice)) ? $invoice->getClientAddress() : 'No se pudo determinar la dirección';
  1073.         $clientDocument = (!empty($invoice)) ? $invoice->getClientDocument() : 'No se pudo determinar';
  1074.         $type $invoice->getType();
  1075.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  1076.         $invoiceIdToRec $invoice->getInvoiceToRec();
  1077.         $bases_imponibles = array('21'=> 0,'10'=> 0,'0'=> 0,);
  1078.         $datasupplier = array(); $netoSumItems 0$totalSumItems 0;
  1079.         $data_iva = array('ivaMontoDiez' => 0'ivaMontoVeintiUno' => 0);
  1080.         $datasupplier['invoice_item_net_sum'] = 0$datasupplier['invoice_item_sum'] = 0;
  1081.         $datasupplier['invoice_extra_net_sum'] = 0$datasupplier['invoice_extra_sum'] = 0;
  1082.         foreach ($htInvoiceItems as $key => $item){
  1083.             if ($item->getItemType()=='htMenu') {
  1084.                 $datasupplier['invoice_item'][] = array(
  1085.                     'id' => $item->getId(),
  1086.                     'itemName' => $item->getItemName(),
  1087.                     'itemPrice' => $item->getItemPrice(),
  1088.                     'itemPax' => $item->getItemPax(),
  1089.                     'itemDateStart' => $item->getItemDateStart(),
  1090.                     'itemDateEnd' => $item->getItemDateEnd(),
  1091.                     'itemIva' => $item->getItemIva(),
  1092.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1093.                 );
  1094.                 $netoSumItems += $item->getItemSubTotalPrice();
  1095.                 $datasupplier['invoice_item_net_sum'] += $item->getItemSubTotalPrice();
  1096.                 $datasupplier['invoice_item_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1097.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1098.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1099.                 switch ($item->getItemIva()) {
  1100.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1101.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1102.                     default: break;
  1103.                 }
  1104.             }
  1105.             if ($item->getItemType()=='htExtra') {
  1106. //                $datasupplier['invoice_extra'][] = $item;
  1107.                 $datasupplier['invoice_extra'][] = array(
  1108.                     'id' => $item->getId(),
  1109.                     'itemType' => $item->getItemType(),
  1110.                     'itemIdOrigin' => $item->getItemIdOrigin(),
  1111.                     'itemName' => $item->getItemName(),
  1112.                     'itemPrice' => $item->getItemSubTotalPrice(),
  1113.                     'itemPax' => $item->getItemPax(),
  1114.                     'itemDateStart' => $item->getItemDateStart(),
  1115.                     'itemDateEnd' => $item->getItemDateEnd(),
  1116.                     'itemIva' => $item->getItemIva(),
  1117.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1118.                 );
  1119.                 $netoSumItems += $item->getItemSubTotalPrice();
  1120.                 $datasupplier['invoice_extra_net_sum'] += $item->getItemSubTotalPrice();
  1121.                 $datasupplier['invoice_extra_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1122.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1123.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1124.                 switch ($item->getItemIva()) {
  1125.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1126.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1127.                     default: break;
  1128.                 }
  1129.             }
  1130.         }
  1131.         return $this->render('higotrigo/ht_invoice/invoice-print.html.twig',
  1132.             array(
  1133.                 'id' => $htFile->getId(),
  1134.                 'cid' => '',
  1135.                 'fid' => $id,
  1136.                 'invoice' => $invoice,
  1137.                 'proformas' => null,
  1138.                 'boolToRec' => true,
  1139.                 'numberadmin' => '',
  1140.                 'type' => $type,
  1141.                 'number' => $id,
  1142.                 'prefix' => $prefix,
  1143.                 'date' => $datAt,
  1144.                 'reservation' => $htFile,
  1145.                 'company' => $company,
  1146.                 'user' => $user,
  1147.                 'invoicedeposititems' => '',
  1148.                 'datasupplier' => $datasupplier,
  1149.                 'totales_neto' => $netoSumItems,
  1150.                 'totales_iva' => $totales_iva,
  1151.                 'totales' => $totalSumItems,
  1152.                 'bases_imponibles' => $data_iva,
  1153.                 'paymentInvoice' => null,
  1154.                 'currency' => '€',
  1155.                 'clientName' => $clientName,
  1156.                 'clientAddress' => $clientAddress,
  1157.                 'clientDocument' => $clientDocument,
  1158.                 'invoiceIdToRec' => $invoiceIdToRec,
  1159.             )
  1160.         );
  1161.     }
  1162.     /**
  1163.      * @Route("/createrecinvoice/{id}",  name="ht_create_rec_invoice")
  1164.      * Generar factura rectificativa de la factura ID
  1165.      */
  1166.     public function createRecInvoiceHtAction($idEntityManagerInterface $emRequest $request)
  1167.     {
  1168.         $idNum = (substr($id01) == 'F') ? substr($id1) : substr($id2);      // F1, GP1, CV1, BL1
  1169.         $prefix = (substr($id01) == 'F') ? 'F' substr($id02);
  1170.         $parameters = array( 'idNum' => $idNum'prefix' => $prefix, );
  1171.         $dql 'SELECT p
  1172.                 FROM App\Entity\HtInvoice p
  1173.                 WHERE p.idNum = :idNum AND p.prefix = :prefix';
  1174.         $query $em->createQuery($dql)->setParameters($parameters);
  1175.         $invoice $query->getResult();
  1176.         $invoice = (!empty($invoice)) ? $invoice[0] : null;
  1177.         // Si no consigue la factura redirige al listado de expedientes
  1178.         if (empty($invoice)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  1179.         // Buscamos el ID para la nueva rectificativa
  1180.         $parameters = array( 'prefix' => 'R'.$prefix, );
  1181.         $dql 'SELECT p
  1182.                 FROM App\Entity\HtInvoice p
  1183.                 WHERE p.prefix = :prefix';
  1184.         $query $em->createQuery($dql)->setParameters($parameters);
  1185.         $invoiceRec $query->getResult();
  1186.         $invoiceRec = (!empty($invoiceRec)) ? end($invoiceRec) : null;
  1187.         $idNewRec = empty($invoiceRec) ? : ($invoiceRec->getIdNum() + 1) ;
  1188.         $dateAt = new DateTimeImmutable('now');
  1189.         $invoiceItems $em->getRepository(HtInvoiceItems::class)->findByInvoice($invoice);
  1190.         // Creamos la factura rectificativa
  1191.         $oldIvas $invoice->getVatTotalGroup();
  1192.         $newIvas $this->transformarString($oldIvas);
  1193.         $invoiceRec = new HtInvoice();
  1194.         $invoiceRec->setIdNum($idNewRec);
  1195.         $invoiceRec->setPrefix('R'$prefix);
  1196.         $invoiceRec->setDateAt($dateAt);
  1197.         $invoiceRec->setType('Invoice Rec');
  1198.         $invoiceRec->setClientName($invoice->getClientName());
  1199.         $invoiceRec->setClientAddress($invoice->getClientAddress());
  1200.         $invoiceRec->setClientDocument($invoice->getClientDocument());
  1201.         $invoiceRec->setClientType($invoice->getClientType());
  1202.         $invoiceRec->setHtFile($invoice->getHtFile());
  1203.         $invoiceRec->setBenefit((-1) * $invoice->getBenefit());
  1204.         $invoiceRec->setTotalNet((-1) * $invoice->getTotalNet());
  1205.         $invoiceRec->setVatTotalGroup($newIvas);
  1206.         $invoiceRec->setTotal((-1) * $invoice->getTotal());
  1207.         $invoiceRec->setInvoiceToRec($id);
  1208.         $em->persist($invoiceRec);
  1209.         $em->flush();
  1210.         // Creamos los Items de la factura rectificativa
  1211.         foreach ($invoiceItems as $item){
  1212.             $htInvItem = new HtInvoiceItems();
  1213.             $htInvItem->setInvoice($invoiceRec);
  1214.             $htInvItem->setHtFile($item->getHtFile());
  1215.             $htInvItem->setItemType($item->getItemType());
  1216.             $htInvItem->setItemIdOrigin($item->getItemIdOrigin());
  1217.             $htInvItem->setItemName($item->getItemName());
  1218.             $htInvItem->setItemDateStart($item->getItemDateStart());
  1219.             $htInvItem->setItemDateEnd($item->getItemDateEnd());
  1220.             $htInvItem->setItemPrice((-1) * $item->getItemPrice());
  1221.             $htInvItem->setItemUnits($item->getItemUnits());
  1222.             $htInvItem->setItemPax($item->getItemPax());
  1223.             $htInvItem->setItemKgLt($item->getItemKgLt());
  1224.             $htInvItem->setItemRank($item->getItemRank());
  1225.             $htInvItem->setItemLocation($item->getItemLocation());
  1226.             $htInvItem->setItemIva($item->getItemIva());
  1227.             $htInvItem->setItemOpIva($item->isItemOpIva());
  1228.             $htInvItem->setItemCommission((-1) * $item->getItemCommission());
  1229.             $htInvItem->setItemOpCommission($item->isItemOpCommission());
  1230.             $htInvItem->setItemOver((-1) * $item->getItemOver());
  1231.             $htInvItem->setItemOpOver($item->isItemOpOver());
  1232.             $htInvItem->setItemSubTotalPrice((-1) * $item->getItemSubTotalPrice());
  1233.             $htInvItem->setItemCosteDirecto((-1) * $item->getItemCosteDirecto());
  1234.             $htInvItem->setItemBeneficio((-1) * $item->getItemBeneficio());
  1235.             $em->persist($htInvItem);
  1236.             $em->flush();
  1237.         }
  1238.         $user_logueado $this->getUser();
  1239.         $dataService $this->commisionEnterpriseService->rectCommissionHigoTrigoGreenPatio($invoice->getPrefix(), $invoice->getIdNum(), $user_logueado->getId());
  1240.         return $this->redirectToRoute('ht_view_invoice_rec', ['id' => $invoiceRec->getPrefix(). $invoiceRec->getIdNum()], Response::HTTP_SEE_OTHER);
  1241.     }
  1242.     /**
  1243.      * @Route("/createproforma/{id}",  name="ht_create_proforma")
  1244.      * Generar proforma en el expediente ID
  1245.      */
  1246.     public function createProformaHtAction($idEntityManagerInterface $emRequest $request)
  1247.     {
  1248.         $req $request->request->get('invoiced_item');
  1249.         $clientName $request->request->get('clientName');
  1250.         $req_extra $request->request->get('invoiced_extra');
  1251.         $htFile $em->getRepository(HtFile::class)->findOneById($id);
  1252.         $beneficio_total 0;
  1253.         foreach ($req as $itemServ){
  1254.             foreach ($itemServ as $item) {
  1255.                 if ($item['boolToInvoice'] == 'true') {
  1256.                     $beneficio_total += $item['benefit'];
  1257.                 }
  1258.             }
  1259.         }
  1260.         // Se genera la proforma
  1261.         // buscamos por el prefijo de cada linea de facturacion para saber el ultimo ID
  1262.         $invoiceLineGp $em->getRepository(HtInvoice::class)->findByPrefix('GP');
  1263.         $invoiceLineCvr $em->getRepository(HtInvoice::class)->findByPrefix('CV');
  1264.         $invoiceLineOther $em->getRepository(HtInvoice::class)->findByPrefix('F');
  1265.         $lastGp end($invoiceLineGp);
  1266.         $lastCvr end($invoiceLineCvr);
  1267.         $lastOther end($invoiceLineOther);
  1268.         // Buscamos los HtIemts del HtFile para saber la sala del servicio para determinar la línea de facturación ($prefix)
  1269.         $htItems $em->getRepository(HtItem::class)->findByHtFile($htFile);
  1270.         $lounge $htItems[0]->getLoungeGp();
  1271.         $prefix = (empty($lounge) ? 'F' : (($lounge->getId() < 22) ? 'GP' 'CV'));
  1272.         switch ($prefix) {
  1273.             case 'F'$idNum = (empty($lastOther)) ? $lastOther->getIdNum() + 1; break;
  1274.             case 'CV'$idNum = (empty($lastCvr)) ? $lastCvr->getIdNum() + 1; break;
  1275.             default:
  1276.                 // Por defecto Green Patio.
  1277.                 // Esteban Rincon comenta que en caso de un expediente tener salas de GP y CVR deberiamos tener un expediente por linea de facturación
  1278.                 $idNum = (empty($lastGp)) ? $lastGp->getIdNum() + 1;
  1279.                 break;
  1280.         }
  1281.         $client = (empty($htFile->getClient())) ? null $htFile->getClient();
  1282.         // Si no hay cliente no se puede facturar, se vuelve a la pantalla de seleccion
  1283.         if (empty($client)){ return $this->redirectToRoute('ht_select_invoice', ['id' => $htFile->getId()], Response::HTTP_SEE_OTHER); }
  1284.         $dateAt = new DateTimeImmutable('now');
  1285.         $type 'Proforma';
  1286.         $totalNet 0$vatTotalGroup 0$total 0;
  1287.         if (empty($clientName)){ $clientName $client->getName(); }
  1288.         $clientAddress $request->request->get('clientAddress');
  1289.         $clientDocument $request->request->get('clientDocument');
  1290.         if (empty($clientDocument)){ $clientDocument = empty($client->getIdDocument()) ? ' ' $client->getIdDocument(); }
  1291.         $clientType $request->request->get('clientType');
  1292.         if ($clientType == 'supplier'){
  1293.             $type 'Proforma de Factura de Comision';
  1294.             $clientName $request->request->get('clientName');
  1295.             $clientDocument $request->request->get('clientDocument');
  1296.         }
  1297.         $proforma = new HtProforma();
  1298.         $proforma->setIdNum($idNum);
  1299.         $proforma->setPrefix($prefix);
  1300.         $proforma->setDateAt($dateAt);
  1301.         $proforma->setType($type);
  1302.         $proforma->setTotalNet($totalNet);
  1303.         $proforma->setVatTotalGroup($vatTotalGroup);
  1304.         $proforma->setTotal($total);
  1305.         $proforma->setClientName($clientName);
  1306.         $proforma->setClientAddress($clientAddress);
  1307.         $proforma->setClientDocument($clientDocument);
  1308.         $proforma->setClientType($clientType);
  1309.         $proforma->setHtFile($htFile->getId());
  1310.         $proforma->setBenefit($beneficio_total);
  1311.         $em->persist($proforma);
  1312.         $em->flush();
  1313.         $data_iva = array(); $data_iva['ivaMontoVeintiUno'] = 0$data_iva['ivaMontoDiez'] = 0;
  1314.         // Se crean los Menus en los HtInvoiceItems
  1315.         foreach ($req as $itemServ){
  1316.             foreach ($itemServ as $item) {
  1317.                 if ($item['boolToInvoice'] == 'true') {
  1318.                     $htMenu $em->getRepository(HtMenu::class)->findOneByHtItem($item['idHtService']);
  1319.                     $itemType 'htMenu';
  1320.                     $itemIdOrigin $htMenu->getId();
  1321.                     $itemName $item['name'];
  1322.                     $htItem $em->getRepository(HtItem::class)->findOneById($htMenu->getHtItem());
  1323.                     $dateStart = ($htItem->getDateStart())->format('Y-m-d');
  1324.                     $hourEnd = ($htItem->getHourEnd())->format('Y-m-d');
  1325.                     $dateTimeString $dateStart ' ' $hourEnd;
  1326.                     $dateEnd = new DateTimeImmutable($dateTimeString);
  1327.                     $iva $htMenu->getIva();
  1328.                     switch ($iva) {
  1329.                         case 10$data_iva['ivaMontoDiez'] += ($item['subTotalPrice'] * 0.1); break;
  1330.                         case 21$data_iva['ivaMontoVeintiUno'] += ($item['subTotalPrice'] * 0.21); break;
  1331.                         default: break;
  1332.                     }
  1333.                     $itemCommission 0;                                                                // Solo htExtra maneja el concepto de over o comision.
  1334.                     $itemOver 0;                                                                      // Solo htExtra maneja el concepto de over o comision.
  1335.                     $costeDirecto $item['subTotalPrice'] - $item['benefit'];
  1336.                     $totalNet += round($item['subTotalPrice'], 2);
  1337.                     $total += round($item['subTotalPrice'], 2) + (round($item['subTotalPrice'], 2) * ($iva 100));
  1338.                     $htInvItem = new HtProformaItems();
  1339.                     $htInvItem->setProforma($proforma);
  1340.                     $htInvItem->setHtFile($htFile->getId());
  1341.                     $htInvItem->setItemType($itemType);
  1342.                     $htInvItem->setItemIdOrigin($itemIdOrigin);
  1343.                     $htInvItem->setItemName($itemName);
  1344.                     $htInvItem->setItemDateStart($htItem->getDateStart());
  1345.                     $htInvItem->setItemDateEnd($dateEnd);
  1346.                     $htInvItem->setItemPrice(round($item['servicePrice'], 2));
  1347.                     $htInvItem->setItemUnits(1);
  1348.                     $htInvItem->setItemPax($item['qty']);
  1349.                     $htInvItem->setItemKgLt(1);
  1350.                     $htInvItem->setItemRank(1);
  1351.                     $htInvItem->setItemLocation(0);
  1352.                     $htInvItem->setItemIva($iva);
  1353.                     $htInvItem->setItemOpIva(0);            // +
  1354.                     $htInvItem->setItemCommission($itemCommission);
  1355.                     $htInvItem->setItemOpCommission(0);
  1356.                     $htInvItem->setItemOver($itemOver);
  1357.                     $htInvItem->setItemOpOver(0);
  1358.                     $htInvItem->setItemSubTotalPrice(round($item['subTotalPrice'], 2));
  1359.                     $htInvItem->setItemCosteDirecto(round($costeDirecto2));
  1360.                     $htInvItem->setItemBeneficio(round($item['benefit'], 2));
  1361.                     $em->persist($htInvItem);
  1362.                     $em->flush();
  1363.                 }
  1364.             }
  1365.         }
  1366.         // Se crean los Extras en los HtInvoiceItems
  1367.         if (!empty($req_extra)) {
  1368.             foreach ($req_extra as $item) {
  1369.                 if($item['boolToInvoice'] == 'true') {
  1370.                     $htExtra $em->getRepository(HtExtra::class)->findOneById($item['idHtExtra']);
  1371.                     if ($htExtra->isAppearInvoice()) {
  1372.                         $itemType 'htExtra';
  1373.                         $itemIdOrigin $htExtra->getId();
  1374.                         $itemName $htExtra->getConcept();
  1375.                         $htItem $em->getRepository(HtItem::class)->findOneById($htExtra->getHtItem());
  1376.                         $dateStart = ($htItem->getDateStart())->format('Y-m-d');
  1377.                         $hourEnd = ($htItem->getHourEnd())->format('Y-m-d');
  1378.                         $dateTimeString $dateStart ' ' $hourEnd;
  1379.                         $dateEnd = new DateTimeImmutable($dateTimeString);
  1380.                         $iva $htExtra->getVat();
  1381.                         $itemCommission = (($htExtra->isOpOverCommission() == 0) ? $htExtra->getOverCommission());
  1382.                         $itemOver = (($htExtra->isOpOverCommission() == 1)  ? $htExtra->getOverCommission());
  1383.                         $costeDirecto 0;
  1384.                         $benefit $itemOver + ($item['price'] * ($itemCommission 100));
  1385.                         $totalPrice $item['price'] + $benefit;
  1386.                         switch ($iva) {
  1387.                             case 10$data_iva['ivaMontoDiez'] += ($totalPrice 0.1); break;
  1388.                             case 21$data_iva['ivaMontoVeintiUno'] += ($totalPrice 0.21); break;
  1389.                             default: break;
  1390.                         }
  1391.                         $totalNet += round($totalPrice2);
  1392.                         $total += round($totalPrice2) + (round($totalPrice2) * ($iva 100));
  1393.                         $htInvItem = new HtProformaItems();
  1394.                         $htInvItem->setProforma($proforma);
  1395.                         $htInvItem->setHtFile($htFile->getId());
  1396.                         $htInvItem->setItemType($itemType);
  1397.                         $htInvItem->setItemIdOrigin($itemIdOrigin);
  1398.                         $htInvItem->setItemName($itemName);
  1399.                         $htInvItem->setItemDateStart($htItem->getDateStart());
  1400.                         $htInvItem->setItemDateEnd($dateEnd);
  1401.                         $htInvItem->setItemPrice(round($item['price'], 2));
  1402.                         $htInvItem->setItemUnits(1);
  1403.                         $htInvItem->setItemPax(1);
  1404.                         $htInvItem->setItemKgLt(1);
  1405.                         $htInvItem->setItemRank(1);
  1406.                         $htInvItem->setItemLocation(0);
  1407.                         $htInvItem->setItemIva($iva);
  1408.                         $htInvItem->setItemOpIva(0);            // +
  1409.                         $htInvItem->setItemCommission($itemCommission);
  1410.                         $htInvItem->setItemOpCommission(0);
  1411.                         $htInvItem->setItemOver($itemOver);
  1412.                         $htInvItem->setItemOpOver(0);
  1413.                         $htInvItem->setItemSubTotalPrice(round($totalPrice2));
  1414.                         $htInvItem->setItemCosteDirecto(round($costeDirecto2));
  1415.                         $htInvItem->setItemBeneficio(round($benefit2));
  1416.                         $em->persist($htInvItem);
  1417.                         $em->flush();
  1418.                     }
  1419.                 }
  1420.             }
  1421.         }
  1422.         $string_data_iva '[21]'.round($data_iva['ivaMontoVeintiUno'],2).'[21]'.'[10]'.round($data_iva['ivaMontoDiez'],2).'[10]';
  1423.         // Se actualiza la factura con los datos globales
  1424.         $proforma->setTotalNet($totalNet);
  1425.         $proforma->setVatTotalGroup($string_data_iva);
  1426.         $proforma->setTotal(round($total,2));
  1427.         $em->persist($proforma);
  1428.         $em->flush();
  1429.         return $this->redirectToRoute('ht_view_proforma', ['id' => $proforma->getId()], Response::HTTP_SEE_OTHER);
  1430.     }
  1431.     /**
  1432.      * @Route("/viewproforma/{id}",  name="ht_view_proforma")
  1433.      * Ver la proforma número ID
  1434.      */
  1435.     public function showProformaHtAction($idEntityManagerInterface $emRequest $request)
  1436.     {
  1437.         $user $this->getUser();
  1438.         $proforma $em->getRepository(HtProforma::class)->findOneById($id);
  1439.         // Si no consigue la proforma redirige al listado de expedientes
  1440.         if (empty($proforma)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  1441.         $datAt = (!empty($proforma)) ? $proforma->getDateAt() : null;
  1442.         $totales_neto = (!empty($proforma)) ? $proforma->getTotalNet() : 0;
  1443.         $totales_iva = (!empty($proforma)) ? $proforma->getVatTotalGroup() : 0;
  1444.         $totales = (!empty($proforma)) ? $proforma->getTotal() : 0;
  1445.         $htProformaItems $em->getRepository(HtProformaItems::class)->findByProforma($proforma);
  1446.         $htFile $em->getRepository(HtFile::class)->findOneById($proforma->getHtFile());
  1447.         $clientName = (!empty($proforma)) ? $proforma->getClientName() : 'No se pudo determinar el cliente';
  1448.         $clientAddress = (!empty($proforma)) ? $proforma->getClientAddress() : 'No se pudo determinar la dirección';
  1449.         $clientDocument = (!empty($proforma)) ? $proforma->getClientDocument() : 'No se pudo determinar';
  1450.         $type $proforma->getType();
  1451.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  1452.         $bases_imponibles = array('21'=> 0,'10'=> 0,'0'=> 0,);
  1453.         $datasupplier = array(); $netoSumItems 0$totalSumItems 0;
  1454.         $data_iva = array('ivaMontoDiez' => 0'ivaMontoVeintiUno' => 0);
  1455.         $datasupplier['invoice_item_net_sum'] = 0$datasupplier['invoice_item_sum'] = 0;
  1456.         $datasupplier['invoice_extra_net_sum'] = 0$datasupplier['invoice_extra_sum'] = 0;
  1457.         foreach ($htProformaItems as $key => $item){
  1458.             if ($item->getItemType()=='htMenu') {
  1459.                 $datasupplier['invoice_item'][] = array(
  1460.                     'id' => $item->getId(),
  1461.                     'itemName' => $item->getItemName(),
  1462.                     'itemPrice' => $item->getItemPrice(),
  1463.                     'itemPax' => $item->getItemPax(),
  1464.                     'itemDateStart' => $item->getItemDateStart(),
  1465.                     'itemDateEnd' => $item->getItemDateEnd(),
  1466.                     'itemIva' => $item->getItemIva(),
  1467.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1468.                 );
  1469.                 $netoSumItems += $item->getItemSubTotalPrice();
  1470.                 $datasupplier['invoice_item_net_sum'] += $item->getItemSubTotalPrice();
  1471.                 $datasupplier['invoice_item_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1472.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1473.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1474.                 switch ($item->getItemIva()) {
  1475.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1476.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1477.                     default: break;
  1478.                 }
  1479.             }
  1480.             if ($item->getItemType()=='htExtra') {
  1481.                 $datasupplier['invoice_extra'][] = array(
  1482.                     'id' => $item->getId(),
  1483.                     'itemType' => $item->getItemType(),
  1484.                     'itemIdOrigin' => $item->getItemIdOrigin(),
  1485.                     'itemName' => $item->getItemName(),
  1486.                     'itemPrice' => $item->getItemSubTotalPrice(),
  1487.                     'itemPax' => $item->getItemPax(),
  1488.                     'itemDateStart' => $item->getItemDateStart(),
  1489.                     'itemDateEnd' => $item->getItemDateEnd(),
  1490.                     'itemIva' => $item->getItemIva(),
  1491.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1492.                 );
  1493.                 $netoSumItems += $item->getItemSubTotalPrice();
  1494.                 $datasupplier['invoice_extra_net_sum'] += $item->getItemSubTotalPrice();
  1495.                 $datasupplier['invoice_extra_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1496.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1497.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1498.                 switch ($item->getItemIva()) {
  1499.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1500.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1501.                     default: break;
  1502.                 }
  1503.             }
  1504.         }
  1505.         $allInvoices $em->getRepository(HtInvoice::class)->findByHtFile($htFile);
  1506.         $boolToRec false;
  1507.         $proformas $em->getRepository(HtProforma::class)->findByHtFile($htFile->getId());
  1508.         $fid $proforma->getId();
  1509.         return $this->render('higotrigo/ht_invoice/show-invoice.html.twig',
  1510.             array(
  1511.                 'id' => $htFile->getId(),
  1512.                 'cid' => '',
  1513.                 'fid' => $fid,
  1514.                 'invoice' => $proforma,
  1515.                 'allInvoices' => $allInvoices,
  1516.                 'proformas' => $proformas,
  1517.                 'numberadmin' => '',
  1518.                 'type' => $type,
  1519.                 'number' => $proforma->getId(),
  1520.                 'prefix' => $proforma->getPrefix(),
  1521.                 'date' => $datAt,
  1522.                 'reservation' => $htFile,
  1523.                 'company' => $company,
  1524.                 'user' => $user,
  1525.                 'boolToRec' => $boolToRec,
  1526.                 'invoicedeposititems' => '',
  1527.                 'datasupplier' => $datasupplier,
  1528.                 'totales_neto' => $netoSumItems,
  1529.                 'totales_iva' => $totales_iva,
  1530.                 'totales' => $totalSumItems,
  1531.                 'bases_imponibles' => $data_iva,
  1532.                 'paymentInvoice' => null,
  1533.                 'currency' => '€',
  1534.                 'clientName' => $clientName,
  1535.                 'clientAddress' => $clientAddress,
  1536.                 'clientDocument' => $clientDocument,
  1537.             )
  1538.         );
  1539.     }
  1540.     /**
  1541.      * @Route("/htexternal/viewprintproforma/{id}",  name="ht_view_print_proforma")
  1542.      * Ver la proforma del expediente ID en modalidad de impresion
  1543.      */
  1544.     public function printProformaHtAction($idEntityManagerInterface $emRequest $request)
  1545.     {
  1546.         $proforma $em->getRepository(HtProforma::class)->findOneById($id);
  1547.         // Si no consigue la proforma redirige al listado de expedientes
  1548.         if (empty($proforma)){ return $this->redirectToRoute('app_ht_file_index', [], Response::HTTP_SEE_OTHER); }
  1549.         $datAt = (!empty($proforma)) ? $proforma->getDateAt() : null;
  1550.         $totales_neto = (!empty($proforma)) ? $proforma->getTotalNet() : 0;
  1551.         $totales_iva = (!empty($proforma)) ? $proforma->getVatTotalGroup() : 0;
  1552.         $totales = (!empty($proforma)) ? $proforma->getTotal() : 0;
  1553.         $htProformaItems $em->getRepository(HtProformaItems::class)->findByProforma($proforma);
  1554.         $htFile $em->getRepository(HtFile::class)->findOneById($id);
  1555.         $clientName = (!empty($proforma)) ? $proforma->getClientName() : 'No se pudo determinar el cliente';
  1556.         $clientAddress = (!empty($proforma)) ? $proforma->getClientAddress() : 'No se pudo determinar la dirección';
  1557.         $clientDocument = (!empty($proforma)) ? $proforma->getClientDocument() : 'No se pudo determinar';
  1558.         $type $proforma->getType();
  1559.         $company $em->getRepository(SettingsCompany::class)->findOneByPriority('5');
  1560.         $bases_imponibles = array('21'=> 0,'10'=> 0,'0'=> 0,);
  1561.         $datasupplier = array(); $netoSumItems 0$totalSumItems 0;
  1562.         $data_iva = array('ivaMontoDiez' => 0'ivaMontoVeintiUno' => 0);
  1563.         $datasupplier['invoice_item_net_sum'] = 0$datasupplier['invoice_item_sum'] = 0;
  1564.         $datasupplier['invoice_extra_net_sum'] = 0$datasupplier['invoice_extra_sum'] = 0;
  1565.         foreach ($htProformaItems as $key => $item){
  1566.             if ($item->getItemType()=='htMenu') {
  1567.                 $datasupplier['invoice_item'][] = array(
  1568.                     'id' => $item->getId(),
  1569.                     'itemName' => $item->getItemName(),
  1570.                     'itemPrice' => $item->getItemPrice(),
  1571.                     'itemPax' => $item->getItemPax(),
  1572.                     'itemDateStart' => $item->getItemDateStart(),
  1573.                     'itemDateEnd' => $item->getItemDateEnd(),
  1574.                     'itemIva' => $item->getItemIva(),
  1575.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1576.                 );
  1577.                 $netoSumItems += $item->getItemSubTotalPrice();
  1578.                 $datasupplier['invoice_item_net_sum'] += $item->getItemSubTotalPrice();
  1579.                 $datasupplier['invoice_item_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1580.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1581.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1582.                 switch ($item->getItemIva()) {
  1583.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1584.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1585.                     default: break;
  1586.                 }
  1587.             }
  1588.             if ($item->getItemType()=='htExtra') {
  1589.                 $datasupplier['invoice_extra'][] = array(
  1590.                     'id' => $item->getId(),
  1591.                     'itemType' => $item->getItemType(),
  1592.                     'itemIdOrigin' => $item->getItemIdOrigin(),
  1593.                     'itemName' => $item->getItemName(),
  1594.                     'itemPrice' => $item->getItemSubTotalPrice(),
  1595.                     'itemPax' => $item->getItemPax(),
  1596.                     'itemDateStart' => $item->getItemDateStart(),
  1597.                     'itemDateEnd' => $item->getItemDateEnd(),
  1598.                     'itemIva' => $item->getItemIva(),
  1599.                     'itemSubTotalPrice' => round($item->getItemSubTotalPrice() * (+ ($item->getItemIva()/100)),2),
  1600.                 );
  1601.                 $netoSumItems += $item->getItemSubTotalPrice();
  1602.                 $datasupplier['invoice_extra_net_sum'] += $item->getItemSubTotalPrice();
  1603.                 $datasupplier['invoice_extra_sum'] += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1604.                 $totalSumItems += $item->getItemSubTotalPrice() * (+ ($item->getItemIva() / 100));
  1605.                 $montoIva $item->getItemSubTotalPrice() * ($item->getItemIva() / 100);
  1606.                 switch ($item->getItemIva()) {
  1607.                     case 10$data_iva['ivaMontoDiez'] += $montoIva; break;
  1608.                     case 21$data_iva['ivaMontoVeintiUno'] += $montoIva; break;
  1609.                     default: break;
  1610.                 }
  1611.             }
  1612.         }
  1613.         $allInvoices $em->getRepository(HtInvoice::class)->findByHtFile($htFile);
  1614.         $boolToRec false;
  1615.         $fid $proforma->getPrefix() . $proforma->getIdNum();
  1616.         return $this->render('higotrigo/ht_invoice/proforma-print.html.twig',
  1617.             array(
  1618.                 'id' => $id,
  1619.                 'fid' => $fid,
  1620.                 'type' => 'Proforma',
  1621.                 'number' => $id,
  1622.                 'date' => $datAt,
  1623.                 'company' => $company,
  1624.                 'invoicedeposititems' => '',
  1625.                 'datasupplier' => $datasupplier,
  1626.                 'totales_neto' => $netoSumItems,
  1627.                 'totales' => $totalSumItems,
  1628.                 'bases_imponibles' => $data_iva,
  1629.                 'currency' => '€',
  1630.                 'clientName' => $clientName,
  1631.                 'clientAddress' => $clientAddress,
  1632.                 'clientDocument' => $clientDocument,
  1633.             )
  1634.         );
  1635.     }
  1636.     private function transformarString($input) {
  1637.         // Expresión regular para encontrar números entre los delimitadores [21] y [10]
  1638.         $pattern '/\[21\](\d+\.?\d*)\[21\]|\[10\](\d+\.?\d*)\[10\]/';
  1639.         // Función de reemplazo que multiplica los números por -1
  1640.         $callback = function ($matches) {
  1641.             if (isset($matches[1]) && $matches[1] !== '') { return '[21]' . (-$matches[1]) . '[21]'; } elseif (isset($matches[2]) && $matches[2] !== '') { return '[10]' . (-$matches[2]) . '[10]'; }
  1642.             return $matches[0]; // No debería llegar aquí
  1643.         };
  1644.         // Realizar el reemplazo en el string original
  1645.         $output preg_replace_callback($pattern$callback$input);
  1646.         return $output;
  1647.     }
  1648.     /**
  1649.      * Formatea el campo vatTotalGroup a una cadena como "157.00 (21%)"
  1650.      */
  1651.     private function formatVatTotalGroup($vatTotalGroup): string
  1652.     {
  1653.         // Regex para extraer valores, porcentajes y manejar valores negativos
  1654.         preg_match_all('/\[(\d+)\](-?\d+(\.\d+)?)/'$vatTotalGroup$matches);
  1655.         $formattedVat '';
  1656.         foreach ($matches[1] as $index => $percentage) {
  1657.             // Asegurarse de que los números se formateen correctamente
  1658.             $amount number_format((float)$matches[2][$index], 2',''.');
  1659.             $formattedVat .= "$amount ({$percentage}%)<br>";
  1660.         }
  1661.         return $formattedVat;
  1662.     }
  1663. }