src/Controller/higotrigo/HtInvoiceController.php line 728

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