src/Controller/Privado/Contrato/ContratoController.php line 231

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Privado\Contrato;
  3. use App\Entity\Ajustes\Financiera;
  4. use App\Entity\Ajustes\TipoFinanciera;
  5. use App\Entity\Contrato;
  6. use App\Entity\Contrato\Cliente;
  7. use App\Entity\Contrato\Documento;
  8. use App\Form\Privado\Entidades\Contrato\ContratoType;
  9. use App\Form\Privado\Entidades\Contrato\ContratoInfoType;
  10. use App\Form\Privado\Filtros\Ajustes\UsuariosFilterType;
  11. use App\Form\Privado\Filtros\Contrato\ContratoFilterType;
  12. use App\Repository\Ajustes\FinancieraRepository;
  13. use App\Repository\Ajustes\TipoFinancieraRepository;
  14. use App\Repository\Contrato\ClienteRepository;
  15. use App\Repository\ContratoRepository;
  16. use App\Service\ExcelExportService;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use App\Utils\FilterSession;
  22. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  23. use Symfony\Component\Filesystem\Filesystem;
  24. use Xthiago\PDFVersionConverter\Converter\GhostscriptConverterCommand;
  25. use Xthiago\PDFVersionConverter\Converter\GhostscriptConverter;
  26. use Symfony\Component\HttpFoundation\File\UploadedFile;
  27. use Doctrine\ORM\EntityManagerInterface;
  28. use Normalizer;
  29. use App\Utils\HelperUtil;
  30. use Knp\Component\Pager\PaginatorInterface;
  31. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  32. use WhiteOctober\BreadcrumbsBundle\Model\Breadcrumbs;
  33. /**
  34.  * @Route("/contrato", name="contrato_", options={"expose"=true})
  35.  */
  36. class ContratoController extends AbstractController
  37. {
  38.     public const BaseDir Contrato::BaseDir;
  39.     public const ICON Contrato::ICON;
  40.     private $em;
  41.     private $bd;
  42.     private $bag;
  43.     private $pag;
  44.     private $hlp;
  45.     private $repo;
  46.     private $excel;
  47.     private $cliRepo;
  48.     private $finRepo;
  49.     private $tipoFinanciera;
  50.     public function __construct(
  51.         EntityManagerInterface $em,
  52.         Breadcrumbs $bd,
  53.         PaginatorInterface $pag,
  54.         ContratoRepository $repo,
  55.         ClienteRepository $cliRepo,
  56.         HelperUtil $hlp,
  57.         ParameterBagInterface $bag,
  58.         FinancieraRepository $finRepo,
  59.         ExcelExportService $excel,
  60.         TipoFinancieraRepository $tipoFinanciera
  61.     )
  62.     {
  63.         $this->em   $em;
  64.         $this->bd   $bd;
  65.         $this->bag  $bag;
  66.         $this->pag  $pag;
  67.         $this->hlp  $hlp;
  68.         $this->repo $repo;
  69.         $this->excel $excel;
  70.         $this->cliRepo $cliRepo;
  71.         $this->finRepo $finRepo;
  72.         $this->tipoFinanciera $tipoFinanciera;
  73.         $this->bd->addRouteItem('Contrato''contrato_index');
  74.     }
  75.     /**
  76.      * @Route("/", name="index", options={"expose"=true})
  77.      * @IsGranted("ROLE_CONTRATO_LIST")
  78.      */
  79.     public function indexAction(Request $request): Response
  80.     {
  81.         //Filter data
  82.         $defaultValues = ['sort' => 'contrato.id''order' => 'desc''page' => 1'limit' => 12];
  83.         $filtro = new FilterSession($request$defaultValues'contrato_filter'$this->bag);
  84.         $dataSesio $filtro->checkFiltroForm();
  85.         $formFiltro $this->createForm(ContratoFilterType::class, $dataSesio);
  86.         $data $formFiltro->handleRequest($request)->getData();
  87.         if ($formFiltro->isSubmitted() && $formFiltro->isValid()) {
  88.             $filtro->añadirFiltrosForm($data);
  89.         }
  90.         //Pagination values
  91.         $resultBD $this->repo->filter($data, ['getQuery' => true]);
  92.         $pagination $this->pag->paginate($resultBD$filtro->getPage(), $filtro->getLimit(), $filtro->getSortKnp());
  93.         return $this->render(self::BaseDir.'/contrato_index.html.twig', [
  94.             'BaseDir' => self::BaseDir,
  95.             'ICON' => self::ICON,
  96.             'pagination' => $pagination,
  97.             'form_filtro' => $formFiltro->createView(),
  98.             'p_filter' => $filtro->getData(),
  99.             'title' => 'Gestión de contratos',
  100.         ]);
  101.     }
  102.     /**
  103.      * @Route("/new", name="new")
  104.      * @IsGranted("ROLE_CONTRATO_CREATE")
  105.      */
  106.     public function new(Request $request)
  107.     {
  108.         $contrato = new Contrato();
  109.         $datos = [];
  110.         /** Recuperamos información del formulario anterior pasandolo por controlador no AJAX */
  111.         if (isset($request->request->all()['contrato'])) {
  112.             $form $this->createForm(ContratoType::class, $contrato, [
  113.                 'action' => $request->getRequestUri(),
  114.                 'attr'   => [
  115.                     'class' => 'form_validator'
  116.                 ],
  117.             ]);
  118.             $form->handleRequest($request);
  119.             $datosForm $request->request->all()['contrato'];
  120.             $tipoFinanciera $this->tipoFinanciera->find($datosForm['conTipoFinanciera']);
  121.             $financiera $tipoFinanciera->getTipoFinanciera();
  122.             $documentos $request->files->all()['contrato']['DocArchivoFile'];
  123.             foreach ($documentos as $file) {
  124.                 $doc = new Documento();
  125.                 $imageObject $this->add_documento($file);
  126.                 $doc->setDocArchivoFile($imageObject);
  127.                 $doc->setDocContrato($contrato);
  128.                 $datos $this->split_pdf($file->getPathName(), $financiera->getId());
  129.                 $this->em->persist($doc);
  130.                 $this->em->flush();
  131.             }
  132.             if (isset($datos['CLIENTE']) && isset($datos['CLIENTE']['DNI'])) {
  133.                 //Comprobar si el cliente existe, si no crealo
  134.                 $cliente $this->cliRepo->findOneBy(['CliNif' => $datos['CLIENTE']['DNI']]);
  135.                 if ($cliente == null) {
  136.                     //Lo creamos
  137.                     $cliente = new Cliente();
  138.                     $cliente
  139.                         ->setCliNombre(isset($datos['CLIENTE']['NOM']) ? $datos['CLIENTE']['NOM'] : null)
  140.                         ->setCliDireccion(isset($datos['CLIENTE']['DIR']) ? $datos['CLIENTE']['DIR'] : null)
  141.                         ->setCliProvincia(isset($datos['CLIENTE']['PRO']) ? $datos['CLIENTE']['PRO'] : null)
  142.                         ->setCliCiudad(isset($datos['CLIENTE']['POB']) ? $datos['CLIENTE']['POB'] : null)
  143.                         ->setCliCodigoPostal(isset($datos['CLIENTE']['COD']) ? $datos['CLIENTE']['COD'] : null)
  144.                         ->setCliNif(isset($datos['CLIENTE']['DNI']) ? $datos['CLIENTE']['DNI'] : null)
  145.                         ->setCliEmail(isset($datos['CLIENTE']['MAIL']) ? $datos['CLIENTE']['MAIL'] : null)
  146.                         ->setCliTelefono(isset($datos['CLIENTE']['TEL1']) ? $datos['CLIENTE']['TEL1'] : null)
  147.                         ->setCliMovil(isset($datos['CLIENTE']['TEL2']) ? $datos['CLIENTE']['TEL2'] : null)
  148.                     ;
  149.                     $this->em->persist($cliente);
  150.                     $this->em->flush();
  151.                 }
  152.                 $contrato->setConCliente($cliente);
  153.             }
  154.             $contrato
  155.                 ->setConFinanciera($financiera)
  156.                 ->setConTipoFinanciera($tipoFinanciera)
  157.                 ->setConEstado(Contrato::ESTADO_APROBAR)
  158.                 ->setConNumIdentificativo(isset($datos['CONTRATO']['NUM_CONTRATO']) ? $datos['CONTRATO']['NUM_CONTRATO'] : null)
  159.                 ->setConImporteTotal(isset($datos['CONTRATO']['TOTAL']) ? floatval($datos['CONTRATO']['TOTAL']) : null)
  160.                 ->setConPlazos(isset($datos['CONTRATO']['PLAZOS']) ? floatval($datos['CONTRATO']['PLAZOS']) : null)
  161.                 ->setConNumeroCuotas(isset($datos['CONTRATO']['NPLAZOS']) ? floatval($datos['CONTRATO']['NPLAZOS']) : null)
  162.             ;
  163.             $contrato
  164.                 ->setConEstado(Contrato::ESTADO_APROBAR)
  165.             ;
  166.             $this->em->persist($contrato);
  167.             $this->em->flush();
  168.             return $this->redirectToRoute('contrato_edit', ['id' => $contrato->getId()]);
  169.         }
  170.         $form2 $this->createForm(ContratoInfoType::class, $contrato, [
  171.             'action' => $request->getRequestUri(),
  172.             'attr'   => [
  173.                 'class' => 'form_validator'
  174.             ],
  175.         ]);
  176.         $form2->handleRequest($request);
  177.         if ($form2->isSubmitted()) {
  178.             if ($form2->isValid()) {
  179.                 //Afegir financiera
  180.                 $contrato
  181.                     ->setConEstado(Contrato::ESTADO_APROBAR)
  182.                 ;
  183.                 $this->em->persist($contrato);
  184.                 $this->em->flush();
  185.                 $this->addFlash('success''Contrato creado correctamente.');
  186.                 if ($form2->getClickedButton() && 'guardarvolver' === $form2->getClickedButton()->getName()) {
  187.                     return $this->redirectToRoute('contrato_index');
  188.                 }
  189.                 return $this->redirectToRoute('contrato_edit', ['id' => $contrato->getId()]);
  190.                 
  191.             } else {
  192.                 $this->addFlash('danger''Se han encontrado errores en el formulario enviado.');
  193.             }
  194.         }
  195.       
  196.         return $this->render(self::BaseDir.'/contrato_new_edit.html.twig', [
  197.             'form'      => $form2->createView(),
  198.             'BaseDir'   => self::BaseDir,
  199.             'title'     => 'Creación de contrato',
  200.             'contrato'  => $contrato,
  201.         ]);
  202.     }
  203.     /**
  204.      * @Route("/{id}/edit", name="edit", methods = {"DELETE", "GET", "POST"}, requirements = {"id"="\d+"})
  205.      * @IsGranted("ROLE_CONTRATO_EDIT")
  206.      */
  207.     public function edit(Request $requestContrato $contrato)
  208.     {
  209.         $form $this->createForm(ContratoInfoType::class, $contrato);
  210.         $form->handleRequest($request);
  211.         
  212.         if ($form->isSubmitted()) {
  213.             if ($form->isValid()) {
  214.                 $this->em->flush();
  215.                 $this->addFlash('success''Contrato editado correctamente.');
  216.                 if ($form->getClickedButton() && 'guardarvolver' === $form->getClickedButton()->getName()) {
  217.                     return $this->redirectToRoute('contrato_index');
  218.                 }
  219.                 return $this->redirectToRoute('contrato_edit', ['id' => $contrato->getId()]);
  220.                 
  221.             } else {
  222.                 $this->addFlash('danger''Se han encontrado errores en el formulario enviado.');
  223.             }
  224.         }
  225.         return $this->render(self::BaseDir.'/contrato_new_edit.html.twig', [
  226.             'form'        => $form->createView(),
  227.             'BaseDir'     => self::BaseDir,
  228.             'title'       => 'Edición de contrato',
  229.             'contrato'    => $contrato,
  230.         ]);
  231.     }
  232.     /**
  233.      * @Route("/{id}/eliminar", name="delete", methods = {"DELETE", "GET", "POST"}, requirements = {"id"="\d+"})
  234.      * @IsGranted("ROLE_CONTRATO_DELETE")
  235.      */
  236.     public function delete(Request $requestContrato $contrato$force false): Response
  237.     {
  238.         if ($this->isCsrfTokenValid('delete'.$contrato->getId(), $request->request->get('_token')) || $force) {
  239.             try {
  240.                 $this->em->remove($contrato);
  241.                 $this->em->flush();
  242.                 $this->addFlash('success'"Contrato eliminado con éxito");
  243.                 return $this->hlp->checkSessionAndRedirect('contrato_index', []);
  244.             } catch (\Exception $e) {
  245.                 $this->hlp->error($e);
  246.                 $this->addFlash('danger'"Ha ocurrido un error interno intentando eliminar el contrato");
  247.             }
  248.         }
  249.         return $this->render(self::BaseDir.'/contrato_delete.html.twig', [
  250.             'contrato' => $contrato,
  251.             'BaseDir' => self::BaseDir,
  252.             'ICON' => self::ICON,
  253.             'title' => 'Eliminar Contrato',
  254.         ]);
  255.     }
  256.     /**
  257.      * @Route("/excel", name="imprimir_excel", options={"expose"=true})
  258.      * @IsGranted("ROLE_CONTRATO_LIST")
  259.      */
  260.     public function excelAction(Request $request)
  261.     {
  262.         //Filter data
  263.         $defaultValues = ['sort' => 'contrato.id''order' => 'desc''page' => 1'limit' => 12];
  264.         $filtro = new FilterSession($request$defaultValues'contrato_filter'$this->bag);
  265.         $resultBD $this->repo->filter($filtro->checkFiltroForm());
  266.         $arrayColumns = [
  267.             'Nº Contrato''Financiera''Versión''Cliente',
  268.             'Importe Total''Importe Plazo''Nº Plazos',
  269.             'Fecha Solicitud''Fecha Financiera',
  270.             'Distribuidor''Comercial''Estado',
  271.             'Fecha Aprobado''Aprobado Por',
  272.             'Fecha Realizado''Realizado Por',
  273.             'Fecha Procesado''Procesado Por',
  274.             'Fecha Anulado''Anulado Por',
  275.         ];
  276.         $arrayDatos = [];
  277.         foreach ($resultBD as $key => $resu) {
  278.             $arrayDatos[$key] = [
  279.                 $resu->getConNumIdentificativo(),
  280.                 $resu->getConFinanciera(),
  281.                 $resu->getConVersion(),
  282.                 $resu->getConCliente(),
  283.                 number_format($resu->getConImporteTotal(), 2'.'''),
  284.                 number_format($resu->getConPlazos(), 2'.'''),
  285.                 $resu->getConNumeroCuotas(),
  286.                 $resu->getConFechaSolicitud() ? $resu->getConFechaSolicitud()->format('d-m-Y H:i') : '',
  287.                 $resu->getConFechaEnvFinanciera() ? $resu->getConFechaEnvFinanciera()->format('d-m-Y H:i') : '',
  288.                 $resu->getConDistribuidor(),
  289.                 $resu->getConComercial(),
  290.                 $resu->getConFechaAprobado() ? $resu->getConFechaAprobado()->format('d-m-Y H:i') : '',
  291.                 $resu->getConAprobadoPor(),
  292.                 $resu->getConFechaRealizado() ? $resu->getConFechaRealizado()->format('d-m-Y H:i') : '',
  293.                 $resu->getConRealizadoPor(),
  294.                 $resu->getConFechaProcesado() ? $resu->getConFechaProcesado()->format('d-m-Y H:i') : '',
  295.                 $resu->getConProcesadoPor(),
  296.                 $resu->getConFechaAnulado() ? $resu->getConFechaAnulado()->format('d-m-Y H:i') : '',
  297.                 $resu->getConAnuladoPor(),
  298.             ];
  299.         }
  300.         return $this->excel->getIndexExcel('Listado de Contratos'$arrayColumns$arrayDatos'Contratos_' date('d_m_Y') . '.xlsx');
  301.     }
  302.     /**
  303.      * @Route("/excel_completo", name="imprimir_excel_completo", options={"expose"=true})
  304.      * @IsGranted("ROLE_CONTRATO_LIST")
  305.      */
  306.     public function excelCompletoAction(Request $request)
  307.     {
  308.         //Filter data
  309.         $defaultValues = ['sort' => 'contrato.id''order' => 'desc''page' => 1'limit' => 12];
  310.         $filtro = new FilterSession($request$defaultValues'contrato_filter'$this->bag);
  311.         $resultBD $this->repo->filter($filtro->checkFiltroForm());
  312.         $arrayColumns = [
  313.             # Datos Contrato
  314.             'Nº Contrato''Versión''Fecha Solicitud''Fecha Financiera',
  315.             'Importe Total''Importe Plazo''Nº Plazos',
  316.             'Check Stock''Check Financiacion''Check Cliente',
  317.             'Estado''Distribuidor''Comercial',
  318.             'Fecha Aprobado''Aprobado Por',
  319.             'Fecha Realizado''Realizado Por',
  320.             'Fecha Procesado''Procesado Por',
  321.             'Fecha Anulado''Anulado Por',
  322.             # Datos Financiera
  323.             'Financiera''Tipo Financiera',
  324.             # Datos Cliente
  325.             'Nombre''NIF''Dirección''Provincia''Código Postal',
  326.             'Teléfono''Móvil''Email',
  327.             # ID
  328.             'ID',
  329.         ];
  330.         $arrayDatos = [];
  331.         foreach ($resultBD as $key => $resu) {
  332.             $arrayDatos[$key] = [
  333.                 # Datos Contrato
  334.                 $resu->getConNumIdentificativo(),
  335.                 $resu->getConVersion(),
  336.                 $resu->getConFechaSolicitud() ? $resu->getConFechaSolicitud()->format('d-m-Y H:i') : '',
  337.                 $resu->getConFechaEnvFinanciera() ? $resu->getConFechaEnvFinanciera()->format('d-m-Y H:i') : '',
  338.                 number_format($resu->getConImporteTotal(), 2'.'''),
  339.                 number_format($resu->getConPlazos(), 2'.'''),
  340.                 $resu->getConNumeroCuotas(),
  341.                 $resu->isConStock(),
  342.                 $resu->isConDatosFinanciacion(),
  343.                 $resu->isConDatosCliente(),
  344.                 $resu->getConEstado(),
  345.                 $resu->getConDistribuidor() != null $resu->getConDistribuidor()->getDistEmail() : '',
  346.                 $resu->getConComercial() != null $resu->getConComercial()->getComEmail() : '',
  347.                 $resu->getConFechaAprobado() ? $resu->getConFechaAprobado()->format('d-m-Y H:i') : '',
  348.                 $resu->getConAprobadoPor(),
  349.                 $resu->getConFechaRealizado() ? $resu->getConFechaRealizado()->format('d-m-Y H:i') : '',
  350.                 $resu->getConRealizadoPor(),
  351.                 $resu->getConFechaProcesado() ? $resu->getConFechaProcesado()->format('d-m-Y H:i') : '',
  352.                 $resu->getConProcesadoPor(),
  353.                 $resu->getConFechaAnulado() ? $resu->getConFechaAnulado()->format('d-m-Y H:i') : '',
  354.                 $resu->getConAnuladoPor(),
  355.                 # Datos FInanciera
  356.                 $resu->getConFinanciera(),
  357.                 $resu->getConTipoFinanciera() != null $resu->getConTipoFinanciera()->getTipoCodigo() : '',
  358.                 # Datos Cliente
  359.                 $resu->getConCliente() != null $resu->getConCliente()->getCliNombre() : '',
  360.                 $resu->getConCliente() != null $resu->getConCliente()->getCliNif() : '',
  361.                 $resu->getConCliente() != null $resu->getConCliente()->getCliDireccion() : '',
  362.                 $resu->getConCliente() != null $resu->getConCliente()->getCliProvincia() : '',
  363.                 $resu->getConCliente() != null $resu->getConCliente()->getCliCodigoPostal() : '',
  364.                 $resu->getConCliente() != null $resu->getConCliente()->getCliTelefono() : '',
  365.                 $resu->getConCliente() != null $resu->getConCliente()->getCliMovil() : '',
  366.                 $resu->getConCliente() != null $resu->getConCliente()->getCliEmail() : '',
  367.                 # ID
  368.                 $resu->getId(),
  369.             ];
  370.         }
  371.         return $this->excel->getIndexExcel('Listado de Contratos Completos'$arrayColumns$arrayDatos'Contratos_' date('d_m_Y') . '.xlsx');
  372.     }
  373.     /**
  374.      * @Route("/excel_documentos", name="imprimir_excel_documentos", options={"expose"=true})
  375.      * @IsGranted("ROLE_CONTRATO_LIST")
  376.      */
  377.     public function excelDocumentosAction(Request $request)
  378.     {
  379.         //Filter data
  380.         $defaultValues = ['sort' => 'contrato.id''order' => 'desc''page' => 1'limit' => 12];
  381.         $filtro = new FilterSession($request$defaultValues'contrato_filter'$this->bag);
  382.         $resultBD $this->repo->filter($filtro->checkFiltroForm());
  383.         $arrayColumns = [
  384.             'Nº Contrato''Nombre Doc''Nombre Original',
  385.         ];
  386.         $arrayDatos = [];
  387.         foreach ($resultBD as $key => $resu) {
  388.             // Por cada contrato, un registro por cada documento
  389.             foreach ($resu->getConDocs() as $doc) {
  390.                 $arrayDatos[] = [
  391.                     $resu->getId(),
  392.                     $doc->getDocFile(),
  393.                     $doc->getDocOriginalName(),
  394.                 ];
  395.             }
  396.         }
  397.         return $this->excel->getIndexExcel('Listado de Documentos'$arrayColumns$arrayDatos'Documentos_' date('d_m_Y') . '.xlsx');
  398.     }
  399.     public function add_documento($doc)
  400.     {
  401.         /** Archivo de la maquinaria anterior */
  402.         $file $doc;
  403.         $extension explode("."$file->getClientOriginalName());
  404.         return new UploadedFile(
  405.             $file->getPathName(),
  406.             $file->getClientOriginalName(),
  407.             $extension[1],
  408.             false,
  409.             true
  410.         );
  411.     }
  412.     public function split_pdf($url$financiera)
  413.     {
  414.         //Primero bajamos la versión del pdf para que no produzca errores de lectura o división
  415.         $command = new GhostscriptConverterCommand();
  416.         $filesystem = new Filesystem();
  417.         
  418.         //Comprobar versión del pdf cuando la versión es distinta a 1.5 no se suben correctamente
  419.         $converter = new GhostscriptConverter($command$filesystem);
  420.         $converter->convert($url'1.4');
  421.         
  422.         // Parse pdf file and build necessary objects.
  423.         $parser = new \Smalot\PdfParser\Parser();
  424.         $pdf    $parser->parseFile($url);
  425.         $pages  $pdf->getPages();
  426.         // Split each page into a new PDF
  427.         /** Lectura de páginas */
  428.         $datos = [];
  429.         
  430.         if ($financiera == Financiera::NOMBRE['CAIXABANK']) {
  431.             $datos $this->search_Datos_Caixabank($pages[16]);
  432.             $datos['CLIENTE'] = $this->search_datos_personales($pages[12]);
  433.         } elseif ($financiera == Financiera::NOMBRE['CETELEM']) {
  434.             $datos $this->search_Datos_Cetelem_Cliente($pages[1]);
  435.             $datos['CONTRATO'] = $this->search_Datos_Cetelem_Contrato($pages[12]);
  436.         } elseif ($financiera == Financiera::NOMBRE['PEEPER']) {
  437.             $datos $this->search_Datos_Pepper($pages[1]);
  438.         } elseif ($financiera == Financiera::NOMBRE['SOFINCO']) {
  439.             $datos $this->search_Datos_Sofinco($pages[5]);
  440.         } elseif ($financiera == Financiera::NOMBRE['UFA']) {
  441.             $datos $this->search_Datos_Ufa($pages[0]);
  442.         } elseif ($financiera == Financiera::NOMBRE['CreditBox']) {
  443.             $datos $this->search_Datos_CreditBox_Contrato($pages[0]);
  444.             $datos['CLIENTE'] = $this->search_Datos_CreditBox_Cliente($pages[6]);
  445.         } elseif ($financiera == Financiera::NOMBRE['CaixaEmpresas']) {
  446.             $datos['CONTRATO']['NUM_CONTRATO'] = $this->search_Datos_CaixaEmpresas_Contrato_Num($pages[0]);
  447.             $datos['CONTRATO']['TOTAL'] = $this->search_Datos_CaixaEmpresas_Contrato_Total($pages[7]);
  448.             $datos['CONTRATO']['PLAZOS'] = $this->search_Datos_CaixaEmpresas_Contrato_Plazos($pages[8]);
  449.             $datos['CLIENTE'] = $this->search_Datos_CaixaEmpresas_Cliente($pages[4]);
  450.         } elseif ($financiera == Financiera::NOMBRE['MontJuich']) {
  451.             $datos $this->search_Datos_MontJuich($pages[0]);
  452.         } elseif ($financiera == Financiera::NOMBRE['SABADELL']) {
  453.             $datos $this->search_Datos_Sabadell($pages[7]);
  454.             $datos['CLIENTE'] = $this->search_Datos_Sabadell_cliente($pages[0]);
  455.         } elseif ($financiera == Financiera::NOMBRE['ABANCA']) {
  456.             $datos $this->search_Datos_Abanca($pages[0]);
  457.             $datos['CLIENTE'] = $this->search_Datos_Abanca_cliente($pages[4]);
  458.         }
  459.         return $datos;
  460.     }
  461.     public function search_Datos_Caixabank($page)
  462.     {
  463.         //INFORMACIÓN CONTRATO
  464.         $imp $pla $num $cod 0;
  465.         $pdf explode("\n"$page->getText());
  466.         //Código del contrato
  467.         $nuevaKey $this->findKeyByText($pdf"Contrato de préstamo núm.");
  468.         if (isset($pdf[$nuevaKey])) {
  469.             $cod explode("núm. "$this->clean($pdf[$nuevaKey]));
  470.             if (isset($cod[1])) {
  471.                 $cod $cod[1];
  472.             }
  473.         }
  474.         
  475.         //Importe total
  476.         if (isset($pdf[11])) {
  477.             $imp explode(" "$this->clean($pdf[11]));
  478.             if (isset($imp[0])) {
  479.                 $imp $imp[0];
  480.                 $imp str_replace('.'''$imp);
  481.             }
  482.         }
  483.         //Num Plazos
  484.         $nuevaKey $this->findKeyByText($pdf"Número de cuotas mixtas");
  485.         if (isset($pdf[$nuevaKey])) {
  486.             $num explode("mixtas"$this->clean($pdf[$nuevaKey]));
  487.             if (isset($num[1])) {
  488.                 $num $num[1];
  489.                 $num explode(" "trim($num));
  490.                 if (isset($num[0])) {
  491.                     $num trim($num[0]);
  492.                 } else {
  493.                     $num null;
  494.                 }
  495.             }
  496.         }
  497.         //Valor Plazo
  498.         $nuevaKey $this->findKeyByText($pdf"CUOTA: ");
  499.         if (isset($pdf[$nuevaKey])) {
  500.             $pla explode("CUOTA: "$this->clean($pdf[$nuevaKey]));
  501.             if (isset($pla[1])) {
  502.                 $pla explode(" "$pla[1]);
  503.                 $pla $pla[0];
  504.                 $pla str_replace('.'''$pla);
  505.             }
  506.         }
  507.         $datos['CONTRATO'] = [
  508.             "NUM_CONTRATO" => $cod,
  509.             "TOTAL"  => str_replace(',''.'$imp),
  510.             "PLAZOS" => str_replace(',''.'$pla),
  511.             'NPLAZOS'=> str_replace(',''.'$num),
  512.         ];
  513.         return $datos;
  514.     }
  515.     public function search_datos_personales($page)
  516.     {
  517.         $dCliente=[];
  518.         $pdf explode("\n"$page->getText());
  519.         
  520.         //Apellidos y Nombre
  521.         $nuevaKey $this->findKeyByText($pdf"Apellidos: ");
  522.         if (isset($pdf[$nuevaKey])) {
  523.             $ape explode("Apellidos: "$pdf[$nuevaKey]);
  524.             if (isset($ape[1])) {
  525.                 $ape explode("Nombre/Denominación:"$ape[1]);
  526.                 if (isset($ape[1])) {
  527.                     $dCliente['NOM'] = $ape[1] . ' ' $ape[0];
  528.                 }
  529.             }
  530.         }
  531.         //DNI
  532.         $nuevaKey $this->findKeyByText($pdf"NIF/CIF: ");
  533.         if (isset($pdf[$nuevaKey])) {
  534.             $dni explode("NIF/CIF: "$pdf[$nuevaKey]);
  535.             if (isset($dni[1])) {
  536.                 $dni explode(" "$dni[1]);
  537.                 $dCliente['DNI'] = $dni[0];
  538.             }
  539.         }
  540.         //Email
  541.         $nuevaKey $this->findKeyByText($pdf"Correo electrónico:");
  542.         if (isset($pdf[$nuevaKey])) {
  543.             $ema explode(": "$pdf[$nuevaKey]);
  544.             if (isset($ema[1])) {
  545.                 $ema explode(" "$ema[1]);
  546.                 $dCliente['MAIL'] = str_contains($this->clean($ema[0]), '@') ? $this->clean($ema[0]) : null;
  547.             }
  548.         }
  549.         //Telefono
  550.         $nuevaKey $this->findKeyByText($pdf"Teléfono fijo:");
  551.         if (isset($pdf[$nuevaKey])) {
  552.             $tel explode("fijo: "$pdf[$nuevaKey]);
  553.             if (isset($tel[1])) {
  554.                 $tel explode(" "$tel[1]);
  555.                 $dCliente['TEL1'] = $tel[0];
  556.             }
  557.         }
  558.         //Poblacion y Codigo Postal
  559.         $nuevaKey $this->findKeyByText($pdf"Población: ");
  560.         if (isset($pdf[$nuevaKey])) {
  561.             $dir explode("Población: "$pdf[$nuevaKey]);
  562.             if (isset($dir[1])) {
  563.                 $dir explode(" "$dir[1]);
  564.                 $dCliente['POB'] = $dir[0];
  565.                 if (isset($dir[1])) {
  566.                     $cod explode("C.P."$dir[1]);
  567.                     if (isset($cod[1])) {
  568.                         $dCliente['COD'] = $cod[1];
  569.                     }
  570.                 }
  571.             }
  572.         }
  573.         //Direccion
  574.         $nuevaKey $this->findKeyByText($pdf"Domicilio: ");
  575.         if (isset($pdf[$nuevaKey])) {
  576.             $dir explode("Domicilio: "$pdf[$nuevaKey]);
  577.             if (isset($dir[1])) {
  578.                 $dCliente['DIR'] = $dir[1];
  579.             }
  580.         }
  581.         return $dCliente;
  582.     }
  583.     public function search_plan_financiacion($page)
  584.     {
  585.         $datos=[];
  586.         /** DATOS PLAN FINANCIACIÓN  */
  587.             /** Recuperación de NOMINAL */
  588.                 $pdf=explode("\n"$page->getText());
  589.                 $pdf=$pdf[25];
  590.                 $pdf=explode("Nominal:"$pdf);
  591.                 $nominal str_replace('.'''$pdf[1]);
  592.                 $nominal floatval($nominal);
  593.                 $datos['NOMINAL']=$nominal;
  594.             /** END::NOMINAL */
  595.             /** Recuperación de PLAZOS */
  596.             $pdf=explode("Nº plazos:"$page->getText());
  597.             $pdf=explode("TIN"$pdf[1]);
  598.             $pdf=explode("\n"$pdf[0]);
  599.             foreach ($pdf as $text) {
  600.                 if ($text != "") {
  601.                     $datos['PLAZOS']=$text;
  602.                     break;
  603.                 }
  604.             }
  605.             /** END::PLAZOS */
  606.         /** END::PLAN FINANCIACIÓN */
  607.         return $datos;
  608.     }
  609.     public function search_Datos_Cetelem_Cliente($page)
  610.     {
  611.         $datos=[];
  612.         $pdf explode("firmabiometrica 3"$page->getText());
  613.         if (isset($pdf[1])) {
  614.             $pdf=explode("\n"$pdf[1]);
  615.             foreach ($pdf as $text) {
  616.                 $textDelimeter $pdf=explode("\t"$text)[0];
  617.                 if ($textDelimeter != 'X' && $textDelimeter != '/' && $textDelimeter != '/' && $textDelimeter != ' ') {
  618.                     $pdfDelimeter[] = $text;
  619.                 }
  620.             }
  621.             $pdf $pdfDelimeter;
  622.             //Datos Client
  623.             if (isset($pdf[19])) {
  624.                 $nom explode("\t"$pdf[19]);
  625.                 $datos['CLIENTE']['NOM'] = $nom[0];
  626.             }
  627.             if (isset($pdf[0])) {
  628.                 $dni explode("\t"$pdf[0]);
  629.                 if (isset($dni[1])) {
  630.                     $datos['CLIENTE']['DNI'] = $dni[1];
  631.                 }
  632.             }
  633.             
  634.             if (isset($pdf[16])) {
  635.                 $pob explode("\t"$pdf[16]);
  636.                 $datos['CLIENTE']['POB'] = $pob[0];
  637.             }
  638.             
  639.             if (isset($pdf[6])) {
  640.                 $pro explode("\t"$pdf[6]);
  641.                 $datos['CLIENTE']['PRO'] = $pro[0];
  642.             }
  643.             if (isset($pdf[21])) {
  644.                 $cod explode("\t"$pdf[21]);
  645.                 $datos['CLIENTE']['COD'] = $cod[0];
  646.             }
  647.             if (isset($pdf[15])) {
  648.                 $dir explode("\t"$pdf[15]);
  649.                 $datos['CLIENTE']['DIR'] = $dir[0];
  650.             }
  651.             if (isset($pdf[13])) {
  652.                 $tel1 explode("\t"$pdf[13]);
  653.                 $datos['CLIENTE']['TEL1'] = $tel1[0];
  654.             }
  655.             if (isset($pdf[9])) {
  656.                 $tel2 explode("\t"$pdf[9]);
  657.                 $datos['CLIENTE']['TEL2'] = $tel2[0];
  658.             }
  659.             if (isset($pdf[8])) {
  660.                 $mail explode("\t"$pdf[8]);
  661.                 $datos['CLIENTE']['MAIL'] = $mail[0];
  662.             }
  663.         }
  664.         
  665.         return $datos;
  666.     }
  667.     public function search_Datos_Pepper($page)
  668.     {
  669.         $datos=[];
  670.         $pdf=explode("\n",$page->getText());
  671.        
  672.         /** DATOS TITULAR */
  673.         //Nom
  674.         $nuevaKey $this->findKeyByText($pdf"Nombre y Apellidos:");
  675.         if (isset($pdf[$nuevaKey])) {
  676.             $nombre=explode("Nombre y Apellidos:"$pdf[$nuevaKey]);
  677.             if (isset($nombre[1])) {
  678.                 $datos['CLIENTE']['NOM']=$nombre[1];
  679.             }
  680.         }
  681.         
  682.         //DNI
  683.         $nuevaKey $this->findKeyByText($pdf"N.I.F:");
  684.         if (isset($pdf[$nuevaKey])) {
  685.             $nif=explode("N.I.F:"$pdf[$nuevaKey]);
  686.             if (isset($nif[1])) {
  687.                 $nif=explode("Estado Civil:"$nif[1]);
  688.                 $nif=str_replace(" "''$nif[0]);
  689.                 $datos['CLIENTE']['DNI']=$nif;
  690.             }
  691.         }
  692.         //Direccio
  693.         $nuevaKey $this->findKeyByText($pdf"Domicilio:");
  694.         if (isset($pdf[$nuevaKey])) {
  695.             $domicilio=explode("Domicilio:"$pdf[$nuevaKey]);
  696.             if (isset($domicilio[1])) {
  697.                 $datos['CLIENTE']['DIR'] = trim($domicilio[1]);
  698.             }
  699.         }
  700.         
  701.         //Codigo postal
  702.         $nuevaKey $this->findKeyByText($pdf"CP: ");
  703.         if (isset($pdf[$nuevaKey])) {
  704.             $cp=explode("CP: "$pdf[$nuevaKey]);
  705.             if (isset($cp[1])) {
  706.                 $datos['CLIENTE']['COD'] = trim($cp[1]);
  707.             }
  708.         }
  709.         //Email
  710.         $nuevaKey $this->findKeyByText($pdf"E-mail:");
  711.         if (isset($pdf[$nuevaKey])) {
  712.             $email explode("E-mail:"$pdf[$nuevaKey]);
  713.             if (isset($email[1])) {
  714.                 $email explode("\t"$email[1]);
  715.                 $datos['CLIENTE']['MAIL'] = $email[0];
  716.             }
  717.         }
  718.         //Telefonos
  719.         $nuevaKey $this->findKeyByText($pdf"Telfs. fijo y móvil:");
  720.         if (isset($pdf[$nuevaKey])) {
  721.             $telefonos explode("Telfs. fijo y móvil:"$pdf[$nuevaKey]);
  722.             if (isset($telefonos[1])) {
  723.                 $telefonos explode(" "$telefonos[1]);
  724.                 $datos['CLIENTE']['TEL1'] = isset($telefonos[1]) ? $telefonos[1] : null;
  725.                 $datos['CLIENTE']['TEL2'] = isset($telefonos[2]) ? $telefonos[2] : null;
  726.             }
  727.         }
  728.         //Datos financiación
  729.         //Importe total
  730.         $nuevaKey $this->findKeyByText($pdf"Importe Total Adeudado: ");
  731.         if (isset($pdf[$nuevaKey])) {
  732.             $importe explode("Importe Total Adeudado: "$pdf[$nuevaKey]);
  733.             if (isset($importe[1])) {
  734.                 $importe $importe[1];
  735.                 $datos['CONTRATO']['TOTAL'] = str_replace('.'''$importe);
  736.             }
  737.         }
  738.         //Num comtrato
  739.         $nuevaKey $this->findKeyByText($pdf"Nº Autorización: ");
  740.         if (isset($pdf[$nuevaKey])) {
  741.             $nCon explode("Nº Autorización: "$pdf[$nuevaKey]);
  742.             if (isset($nCon[1])) {
  743.                 $nCon explode(" "$nCon[1]);
  744.                 $datos['CONTRATO']['NUM_CONTRATO'] = str_replace('.'''$nCon[0]);
  745.             }
  746.         }
  747.         //Plazos
  748.         $nuevaKey $this->findKeyByText($pdf"Cuotas mensuales de ");
  749.         if (isset($pdf[$nuevaKey])) {
  750.             $plazos explode("Cuotas mensuales de "$pdf[$nuevaKey]);
  751.             if (isset($plazos[1])) {
  752.                 $plazos explode(" "$plazos[1]);
  753.                 $datos['CONTRATO']['PLAZOS'] = str_replace('.'''$plazos[0]);
  754.             }
  755.             $num explode("Total de Cuotas: "$pdf[$nuevaKey]);
  756.             if (isset($num[1])) {
  757.                 $num explode("Días"$num[1]);
  758.                 $datos['CONTRATO']['NPLAZOS'] = str_replace('.'''$num[0]);
  759.             }
  760.         }
  761.         return $datos;
  762.     }
  763.     public function search_Datos_Sofinco($page)
  764.     {
  765.         $datos=[];
  766.         $pdf=explode("\n"$page->getText());
  767.         //INFORMACIÓN SOBRE EL CLIENTE
  768.         $nuevaKey $this->findKeyByText($pdf"Nombre:");
  769.         if (isset($pdf[$nuevaKey])) {
  770.             $nom  explode("Nombre:"$pdf[$nuevaKey]);
  771.         }
  772.         
  773.         //DNI
  774.         $nuevaKey $this->findKeyByText($pdf"Número de DNI:");
  775.         if (isset($pdf[$nuevaKey])) {
  776.             $dni  explode("Número de DNI:"$pdf[$nuevaKey]);
  777.         }
  778.         //Telefono
  779.         $nuevaKey $this->findKeyByText($pdf"Teléfono móvil:");
  780.         if (isset($pdf[$nuevaKey])) {
  781.             $tel  explode("Teléfono móvil:"$pdf[$nuevaKey]);
  782.         }
  783.         //Direccion
  784.         $nuevaKey $this->findKeyByText($pdf"Dirección Completa:");
  785.         if (isset($pdf[$nuevaKey])) {
  786.             $dir  explode("Dirección Completa:"$pdf[$nuevaKey]);
  787.             
  788.             //Desestructurar la direccion
  789.             if (isset($dir[1])) {
  790.                 $dir  explode(","$dir[1]);
  791.                 $direccion "";
  792.                 if (isset($dir[0])) {
  793.                     //Direcicon
  794.                     $direccion trim($dir[0]);
  795.                 }
  796.                 if (isset($dir[1])) {
  797.                     //Numero puerta
  798.                     $direccion .= ', ' trim($dir[1]);
  799.                 }
  800.                 if (isset($dir[3])) {
  801.                     //Provincia
  802.                     $provincia trim($dir[3]);
  803.                 }
  804.                 if (isset($dir[2])) {
  805.                     $dir explode(" "trim($dir[2]));
  806.                     $cp = isset($dir[0]) ? $dir[0] : null;
  807.                     $poblacion = isset($dir[1]) ? $dir[1] : null;
  808.                     
  809.                 }
  810.             }
  811.         }
  812.         //email
  813.         $nuevaKey $this->findKeyByText($pdf"E-mail:");
  814.         if (isset($pdf[$nuevaKey])) {
  815.             $mail explode("E-mail:"$pdf[$nuevaKey]);
  816.         }
  817.         $datos['CLIENTE'] = [
  818.             "NOM"  => isset($nom[1]) ? trim($nom[1]) : '',
  819.             "DNI"  => isset($dni[1]) ? trim($dni[1]) : '',
  820.             "TEL2" => isset($tel[1]) ? trim($tel[1]) : '',
  821.             "DIR"  => isset($direccion) ? $direccion '',
  822.             "PRO"  => isset($provincia) ? $provincia '',
  823.             "COD"  => isset($cp) ? $cp '',
  824.             "POB"  => isset($poblacion) ? $poblacion '',
  825.             "MAIL" => isset($mail[1]) ? trim($mail[1]) : '',
  826.         ];
  827.         //INFORMACIÓN DEL CONTRATO
  828.         $nuevaKey $this->findKeyByText($pdf"Número de solicitud:");
  829.         if (isset($pdf[$nuevaKey])) {
  830.             $cod explode("Número de solicitud:"$pdf[$nuevaKey]);
  831.             if (isset($cod[1])) {
  832.                 $cod explode(" "$cod[1]);
  833.             }
  834.         }
  835.         
  836.         //Importe
  837.         $nuevaKey $this->findKeyByText($pdf"Importe financiado:");
  838.         if (isset($pdf[$nuevaKey])) {
  839.             $imp explode("Importe financiado:"$pdf[$nuevaKey]);
  840.             if (isset($imp[1])) {
  841.                 $imp explode("¬"$imp[1]);
  842.                 $imp str_replace(',''.'str_replace('.'''trim($imp[0])));
  843.             }
  844.         }
  845.         //Cuotas
  846.         $nuevaKey $this->findKeyByText($pdf"Importe del resto de cuotas:");
  847.         if (isset($pdf[$nuevaKey])) {
  848.             $plazo explode("Importe del resto de cuotas:"$pdf[$nuevaKey]);
  849.             if (isset($plazo[1])) {
  850.                 $plazo explode("¬"$plazo[1]);
  851.                 $plazo explode(" "$plazo[0]);
  852.                 $plazo str_replace(',''.'str_replace('.'''trim($plazo[1])));
  853.             }
  854.         }
  855.         //NUmero
  856.         $nuevaKey $this->findKeyByText($pdf"Duración del Préstamo: ");
  857.         if (isset($pdf[$nuevaKey])) {
  858.             $num explode("Duración del Préstamo: "$pdf[$nuevaKey]);
  859.             if (isset($num[1])) {
  860.                 $num explode(" "$num[1]);
  861.                 $num $num[0];
  862.             }
  863.         }
  864.         $datos['CONTRATO'] = [
  865.             "NUM_CONTRATO" => isset($cod[0]) ? $cod[0] : '',
  866.             "TOTAL"        => isset($imp) ? $imp '',
  867.             "PLAZOS"       => isset($plazo) ? $plazo '',
  868.             "NPLAZOS"      => isset($num) ? $num '',
  869.         ];
  870.         return $datos;
  871.     }
  872.     public function search_Datos_Ufa($page)
  873.     {
  874.         $datos=[];
  875.         $pdf=explode("\n",$page->getText());
  876.         //Datos Client
  877.         //Nom
  878.         if (isset($pdf[62])) {
  879.             $datos['CLIENTE']['NOM'] = $pdf[62];
  880.         }
  881.         //DNI
  882.         if (isset($pdf[70])) {
  883.             $nif explode("\t"$pdf[70]);
  884.             $datos['CLIENTE']['DNI'] = $nif[0];
  885.         }
  886.         
  887.         //Direccio
  888.         if (isset($pdf[71])) {
  889.             $domicilio explode("\t"$pdf[71]);
  890.             $datos['CLIENTE']['DIR'] = $domicilio[0];
  891.             $datos['CLIENTE']['POB'] = $domicilio[1];
  892.         }
  893.         
  894.         if (isset($pdf[72])) {
  895.             $provincia explode("\t"$pdf[72]);
  896.             $datos['CLIENTE']['PRO'] = $provincia[1];
  897.             $datos['CLIENTE']['COD'] = $provincia[0];
  898.             $datos['CLIENTE']['TEL1'] = isset($provincia[3]) ? $provincia[3] : null;
  899.         }
  900.         //Telefonos
  901.         if (isset($pdf[75])) {
  902.             $telefonos explode("\t"$pdf[75]);
  903.             $datos['CLIENTE']['TEL2'] = isset($telefonos[0]) ? $telefonos[0] : null;
  904.         }
  905.         
  906.         //Datos financiación
  907.         //Importe total
  908.         if (isset($pdf[64])) {
  909.             $importe explode(" "$pdf[64]);
  910.             $importe $importe[0];
  911.             $datos['CONTRATO']['TOTAL'] = str_replace('.'''$importe);
  912.         }
  913.         //Num comtrato
  914.         if (isset($pdf[61])) {
  915.             $nCon explode("\t"$pdf[61]);
  916.             $datos['CONTRATO']['NUM_CONTRATO'] = isset($nCon[2]) ? str_replace('.'''$nCon[2]) : '';
  917.         }
  918.         
  919.         //Plazos
  920.         if (isset($pdf[67])) {
  921.             $plazos explode("\t"$pdf[67]);
  922.             $datos['CONTRATO']['PLAZOS'] = isset($plazos[1]) ? str_replace('.'''$plazos[1]) : '';
  923.         }
  924.         //Nplazos
  925.         if (isset($pdf[67])) {
  926.             $plazos explode("\t"$pdf[67]);
  927.             $datos['CONTRATO']['NPLAZOS'] = str_replace('.'''$plazos[0]);
  928.         }
  929.         return $datos;
  930.     }
  931.     public function search_Datos_CreditBox_Contrato($page)
  932.     {
  933.         //INFORMACIÓN CONTRATO
  934.         $pdf explode("\n"$page->getText());
  935.         $cod $imp $pla $num "";
  936.         if (isset($pdf[99])) {
  937.             $cod explode("\t"$pdf[99]);
  938.             $cod $cod[0];
  939.         }
  940.         
  941.         if (isset($pdf[104])) {
  942.             $imp explode("\t"$pdf[104]);
  943.             $imp $imp[0];
  944.         }
  945.         
  946.         if (isset($pdf[101])) {
  947.             $pla explode("\t"$pdf[101]);
  948.             $pla $pla[0];
  949.         }
  950.         if (isset($pdf[102])) {
  951.             $num explode("\t"$pdf[102]);
  952.             $num $num[0];
  953.         }
  954.         $datos['CONTRATO'] = [
  955.             "NUM_CONTRATO" => $cod,
  956.             "TOTAL"        => str_replace('.'''$imp),
  957.             "PLAZOS"       => str_replace('.'''$pla),
  958.             "NPLAZOS"      => $num,
  959.         ];
  960.         return $datos;
  961.     }
  962.     public function search_Datos_CreditBox_Cliente($page)
  963.     {
  964.         $dCliente=[];
  965.         $pdf explode("\n"$page->getText());
  966.         //Nombre
  967.         if (isset($pdf[39])) {
  968.             $nom explode("\t"$pdf[39]);
  969.             $dCliente['NOM'] = $nom[0];
  970.         }
  971.         //DNI
  972.         if (isset($pdf[45])) {
  973.             $dni explode("\t"$pdf[45]);
  974.             $dCliente['DNI'] = $dni[0];
  975.         }
  976.         //Direcciones
  977.         if (isset($pdf[37])) {
  978.             $pob explode("\t"$pdf[37]);
  979.             $dCliente['POB'] = $pob[0];
  980.         }
  981.         if (isset($pdf[40])) {
  982.             $cod explode("\t"$pdf[40]);
  983.             $dCliente['COD'] = $cod[0];
  984.         }
  985.         if (isset($pdf[51])) {
  986.             $dir1 explode("\t"$pdf[51]);
  987.             $dCliente['DIR'] = $dir1[0];
  988.         }
  989.         if (isset($pdf[38])) {
  990.             $num  explode("\t"$pdf[38]);
  991.             $dCliente['DIR'] .= " nº " $num[0];
  992.         }
  993.         if (isset($pdf[47])) {
  994.             $piso explode("\t"$pdf[47]);
  995.             $dCliente['DIR'] .= " piso " $piso[0];
  996.         }
  997.         //Telefonos
  998.         if (isset($pdf[58])) {
  999.             $tel1 explode("\t"$pdf[58]);
  1000.             $dCliente['TEL1'] = $tel1[0];
  1001.         }
  1002.         if (isset($pdf[53])) {
  1003.             $tel2 explode("\t"$pdf[53]);
  1004.             $dCliente['TEL2'] = $tel2[0];
  1005.         }
  1006.         return $dCliente;
  1007.     }
  1008.     public function search_Datos_Cetelem_Contrato($page)
  1009.     {
  1010.         //INFORMACIÓN CONTRATO
  1011.         
  1012.         $aDatos = [];
  1013.         $pdf explode("\n"$page->getText());
  1014.         $imp $pla $num 0;
  1015.         
  1016.         if (isset($pdf[73])) {
  1017.             $imp explode("\t"$pdf[73]);
  1018.             $imp $imp[0];
  1019.         }
  1020.         if (isset($pdf[83])) {
  1021.             $pla explode("\t"$pdf[83]);
  1022.             $pla $pla[0];
  1023.         }
  1024.         if (isset($pdf[82])) {
  1025.             $num explode("\t"$pdf[82]);
  1026.             $num $num[0];
  1027.         }
  1028.         $aDatos = [
  1029.             "NUM_CONTRATO" => "",
  1030.             "TOTAL"   => $imp,
  1031.             "PLAZOS"  => $pla,
  1032.             "NPLAZOS" => $num,
  1033.         ];
  1034.         return $aDatos;
  1035.     }
  1036.     public function search_Datos_CaixaEmpresas_Contrato_Num($page)
  1037.     {
  1038.         //INFORMACIÓN CONTRATO
  1039.         $pdf explode("\n"$page->getText());
  1040.         $cod "";
  1041.         if (isset($pdf[2])) {
  1042.             $cod explode(" "$pdf[2]);
  1043.             $cod $cod[1];
  1044.         }
  1045.         
  1046.         return $cod;
  1047.     }
  1048.     public function search_Datos_CaixaEmpresas_Contrato_Total($page)
  1049.     {
  1050.         //INFORMACIÓN CONTRATO
  1051.         $pdf explode("\n"$page->getText());
  1052.         $tot "";
  1053.         if (isset($pdf[32])) {
  1054.             $tot explode(" "$pdf[32]);
  1055.             $tot = isset($tot[6]) ? str_replace('.'''$tot[6]) : '';
  1056.         }
  1057.         
  1058.         return str_replace(',''.'$tot);
  1059.     }
  1060.     public function search_Datos_CaixaEmpresas_Contrato_Plazos($page)
  1061.     {
  1062.         //INFORMACIÓN CONTRATO
  1063.         $pdf explode("\n"$page->getText());
  1064.         $pla "";
  1065.         if (isset($pdf[5])) {
  1066.             $pla explode(" "$pdf[5]);
  1067.             $pla = isset($pla[1]) ? str_replace('.'''$pla[1]) : '';
  1068.         }
  1069.         
  1070.         return str_replace(',''.'$pla);
  1071.     }
  1072.     public function search_Datos_CaixaEmpresas_Cliente($page)
  1073.     {
  1074.         $dCliente=[];
  1075.         $pdf explode("\n"$page->getText());
  1076.         
  1077.         //Nombre
  1078.         if (isset($pdf[5])) {
  1079.             $nom explode("Nombre/Denominación:"$pdf[5]);
  1080.             $dCliente['NOM'] = isset($nom[1]) ? $nom[1] : '';
  1081.         }
  1082.         //DNI
  1083.         if (isset($pdf[6])) {
  1084.             $dni explode("NIF/CIF: "$pdf[6]);
  1085.             if (isset($dni[1])) {
  1086.                 $dni explode(" "$dni[1]);
  1087.                 $dCliente['DNI'] = $dni[0];
  1088.             }
  1089.         }
  1090.         //Direcciones
  1091.         if (isset($pdf[10])) {
  1092.             $pob explode("Población: "$pdf[10]);
  1093.             if (isset($pob[1])) {
  1094.                 $pob explode(" "$pob[1]);
  1095.                 $dCliente['POB'] = $pob[0];
  1096.             }
  1097.         }
  1098.         if (isset($pdf[10])) {
  1099.             $cod explode("C.P."$pdf[10]);
  1100.             if (isset($cod[1])) {
  1101.                 $cod explode(" "$cod[1]);
  1102.                 $dCliente['COD'] = $cod[0];
  1103.             }
  1104.         }
  1105.         if (isset($pdf[9])) {
  1106.             $dir1 explode("Domicilio: "$pdf[9]);
  1107.             if (isset($dir1[1])) {
  1108.                 $dir1 explode(" "$dir1[1]);
  1109.                 $dCliente['DIR'] = $dir1[0];
  1110.             }
  1111.         }
  1112.         if (isset($pdf[9])) {
  1113.             $num  explode("Nº:"$pdf[9]);
  1114.             if (isset($num[1])) {
  1115.                 $num explode(" "$num[1]);
  1116.                 $dCliente['DIR'] .= " nº " $num[0];
  1117.             }
  1118.         }
  1119.         //Telefonos
  1120.         if (isset($pdf[14])) {
  1121.             $tel1 explode("empresa:"$pdf[14]);
  1122.             if (isset($tel1[3])) {
  1123.                 $dCliente['TEL1'] = $tel1[3];
  1124.             }
  1125.         }
  1126.         return $dCliente;
  1127.     }
  1128.     public function search_Datos_MontJuich($page)
  1129.     {
  1130.         $datos=[];
  1131.         $pdf=explode("\n",$page->getText());
  1132.         //Datos Client
  1133.         //Nom
  1134.         if (isset($pdf[27]) && isset($pdf[28])) {
  1135.             $datos['CLIENTE']['NOM'] = $pdf[27] . $pdf[28];
  1136.         }
  1137.         
  1138.         //DNI
  1139.         if (isset($pdf[50]) || isset($pdf[51])) {
  1140.             $datos['CLIENTE']['DNI'] = "";
  1141.             if (!str_contains($pdf[50], '@')) {
  1142.                 $datos['CLIENTE']['DNI'] = $pdf[50];
  1143.             }
  1144.             
  1145.             if (!str_contains($pdf[51], '@')) {
  1146.                 $datos['CLIENTE']['DNI'] = $pdf[51];
  1147.             }
  1148.         }
  1149.         
  1150.         //Direccio
  1151.         if (isset($pdf[30])) {
  1152.             $datos['CLIENTE']['DIR'] = $pdf[30];
  1153.         }
  1154.         if (isset($pdf[31])) {
  1155.             $datos['CLIENTE']['POB'] = $pdf[31];
  1156.         }
  1157.         
  1158.         if (isset($pdf[48])) {
  1159.             $provincia explode("\t"$pdf[48]);
  1160.             if (isset($provincia[1])) {
  1161.                 $provincia explode(" "$provincia[1]);
  1162.                 if (isset($provincia[1])) {
  1163.                     $datos['CLIENTE']['PRO'] = $provincia[0];
  1164.                     $datos['CLIENTE']['COD'] = $provincia[1];
  1165.                 }
  1166.             }
  1167.         }
  1168.        
  1169.         //Telefonos
  1170.         if (isset($pdf[49])) {
  1171.             $telefonos explode(" "$pdf[49]);
  1172.             if (isset($telefonos[1])) {
  1173.                 $datos['CLIENTE']['TEL1'] = $telefonos[0];
  1174.                 $datos['CLIENTE']['TEL2'] = $telefonos[1];
  1175.             } else {
  1176.                 $datos['CLIENTE']['TEL1'] = $pdf[49];
  1177.             }
  1178.         }
  1179.         //Email
  1180.         if (isset($pdf[50]) || isset($pdf[51])) {
  1181.             $datos['CLIENTE']['MAIL'] = "";
  1182.             if (str_contains($pdf[50], '@')) {
  1183.                 $datos['CLIENTE']['MAIL'] = $pdf[50];
  1184.             }
  1185.             
  1186.             if (str_contains($pdf[51], '@')) {
  1187.                 $datos['CLIENTE']['MAIL'] = $pdf[51];
  1188.             }
  1189.         }
  1190.         //Datos financiación
  1191.         //Importe total
  1192.         if (isset($pdf[86]) || isset($pdf[87])) {
  1193.             $datos['CONTRATO']['TOTAL'] = "";
  1194.             if (isset($pdf[86]) && str_contains($pdf[86], '€')) {
  1195.                 $importe explode(" "$pdf[86]);
  1196.                 $importe $importe[0];
  1197.                 $importe str_replace('.'''$importe);
  1198.                 $datos['CONTRATO']['TOTAL'] = str_replace(',''.'$importe);
  1199.             } elseif (isset($pdf[87]) && str_contains($pdf[87], '€')) {
  1200.                 $importe explode(" "$pdf[87]);
  1201.                 $importe $importe[0];
  1202.                 $importe str_replace('.'''$importe);
  1203.                 $datos['CONTRATO']['TOTAL'] = str_replace(',''.'$importe);
  1204.             }
  1205.         }
  1206.         //Plazos
  1207.         if (isset($pdf[92]) || isset($pdf[93])) {
  1208.             $datos['CONTRATO']['PLAZOS'] = "";
  1209.             if (isset($pdf[92]) && str_contains($pdf[92], '€')) {
  1210.                 $plazos explode(" "$pdf[92]);
  1211.                 $plazos str_replace('.'''$plazos[0]);
  1212.                 $datos['CONTRATO']['PLAZOS'] = str_replace(',''.'$plazos);
  1213.             } elseif (isset($pdf[93]) && str_contains($pdf[93], '€')) {
  1214.                 $plazos explode(" "$pdf[93]);
  1215.                 $plazos str_replace('.'''$plazos[0]);
  1216.                 $datos['CONTRATO']['PLAZOS'] = str_replace(',''.'$plazos);
  1217.             }
  1218.         }
  1219.         //Nplazos
  1220.         if (isset($pdf[66]) || isset($pdf[67])) {
  1221.             $datos['CONTRATO']['NPLAZOS'] = "";
  1222.             if (isset($pdf[66]) && is_numeric(str_replace('.'''$pdf[66]))) {
  1223.                 $datos['CONTRATO']['NPLAZOS'] = str_replace('.'''$pdf[66]);
  1224.             } elseif (isset($pdf[67]) && is_numeric(str_replace('.'''$pdf[67]))) {
  1225.                 $datos['CONTRATO']['NPLAZOS'] = str_replace('.'''$pdf[67]);
  1226.             }
  1227.         }
  1228.         return $datos;
  1229.     }
  1230.     public function search_Datos_Sabadell($page)
  1231.     {
  1232.         $datos['CONTRATO'] = [];
  1233.         $pdf explode("\n"$page->getText());
  1234.         // Numero cuotas
  1235.         $nuevaKey $this->findKeyByText($pdf"cuotas");
  1236.         if (isset($pdf[$nuevaKey])) {
  1237.             $temp explode("un total de"$this->clean($pdf[$nuevaKey]));
  1238.             if (isset($temp[1])) {
  1239.                 $temp explode(" "trim($temp[1]));
  1240.                 $datos['CONTRATO']['NPLAZOS'] = isset($temp[0]) ? str_replace('.'''$temp[0]) : '';
  1241.             }
  1242.         }
  1243.         // Cantidad Cuotas
  1244.         $nuevaKey $this->findKeyByText($pdf"los importes siguientes:");
  1245.         if (isset($pdf[$nuevaKey])) {
  1246.             $temp explode("los importes siguientes:"$this->clean($pdf[$nuevaKey]));
  1247.             if (isset($temp[1])) {
  1248.                 $temp explode("de"trim($temp[1]));
  1249.                 if (isset($temp[2])) {
  1250.                     $temp explode(" "trim($temp[2]));
  1251.                     $datos['CONTRATO']['PLAZOS'] = isset($temp[0]) ? str_replace('.'''$temp[0]) : '';
  1252.                 } else {
  1253.                     $datos['CONTRATO']['PLAZOS'] = '';
  1254.                 }
  1255.             }
  1256.         }
  1257.         // Importe total
  1258.         $nuevaKey $this->findKeyByText($pdf"Nombre del producto/servicio");
  1259.         if (isset($pdf[$nuevaKey])) {
  1260.             $temp explode(" "$this->clean($pdf[$nuevaKey]));
  1261.             $lastKey array_key_last($temp);
  1262.             $datos['CONTRATO']['TOTAL'] = isset($temp[$lastKey 1]) ? str_replace('.'''$temp[$lastKey 1]) : '';
  1263.         }
  1264.         // Numero contrato
  1265.         $nuevaKey $this->findKeyByText($pdf"Número");
  1266.         if (isset($pdf[$nuevaKey])) {
  1267.             $temp explode("Número"$this->clean($pdf[$nuevaKey]));
  1268.             if (isset($temp[1])) {
  1269.                 $datos['CONTRATO']['NUM_CONTRATO'] = trim($temp[1]);
  1270.             } else {
  1271.                 $datos['CONTRATO']['NUM_CONTRATO'] = '';
  1272.             }
  1273.         }
  1274.         return $datos;
  1275.     }
  1276.     public function search_Datos_Sabadell_cliente($page)
  1277.     {
  1278.         $dCliente=[];
  1279.         $pdf explode("\n"$page->getText());
  1280.         //Nombre
  1281.         $nuevaKey $this->findKeyByText($pdf"con poderes suficientes.");
  1282.         if (isset($pdf[$nuevaKey])) {
  1283.             $nom explode("con poderes suficientes."$this->clean($pdf[$nuevaKey]));
  1284.             if (isset($nom[1])) {
  1285.                 $dCliente['NOM'] = isset($nom[1]) ? $nom[1] : '';
  1286.             } else {
  1287.                 $dCliente['NOM'] = '';
  1288.             }
  1289.         }
  1290.         //DNI -> NEVA KEY +1 
  1291.         if (isset($pdf[$nuevaKey+1])) {
  1292.             $dCliente['DNI'] = $this->clean($pdf[$nuevaKey+1]);
  1293.         }
  1294.         // Domicilio nueva key +2
  1295.         if (isset($pdf[$nuevaKey+2])) {
  1296.             // El pueblo es la ultima key y el cp la anterior, el resto ordenador es la direccion
  1297.             $aTemp explode(" "$this->clean($pdf[$nuevaKey+2]));
  1298.             $lastKey array_key_last($aTemp);
  1299.             $dCliente['POB'] = isset($aTemp[$lastKey]) ? $aTemp[$lastKey] : '';
  1300.             $dCliente['COD'] = isset($aTemp[$lastKey-1]) ?  $aTemp[$lastKey-1] : '';
  1301.             unset($aTemp[$lastKey]);
  1302.             unset($aTemp[$lastKey-1]);
  1303.             $dCliente['DIR'] = implode(" "$aTemp);
  1304.         }
  1305.         //Telefonos + Correo -> nueva key +3
  1306.         if (isset($pdf[$nuevaKey+3])) {
  1307.             $aTemp explode(" "$this->clean($pdf[$nuevaKey+3]));
  1308.             $dCliente['TEL1'] = isset($aTemp[0]) ? $aTemp[0] : '';
  1309.             $dCliente['TEL2'] = isset($aTemp[1]) ? $aTemp[1] : '';
  1310.             $dCliente['MAIL'] = isset($aTemp[2]) && str_contains($aTemp[2], '@') ? $aTemp[2] : '';
  1311.         }
  1312.         return $dCliente;
  1313.     }
  1314.     public function search_Datos_Abanca($page)
  1315.     {
  1316.         $datos['CONTRATO'] = [
  1317.             'NUM_CONTRATO' => '',
  1318.             'TOTAL'        => '',
  1319.             'PLAZOS'       => '',
  1320.             'NPLAZOS'      => '',
  1321.         ];
  1322.         $pdf explode("\n"$page->getText());
  1323.         
  1324.         // Numero cuotas y precio
  1325.         $nuevaKey $this->findKeyByText($pdf"cuota/s  mensual/es");
  1326.         if (isset($pdf[$nuevaKey])) {
  1327.             $temp explode(" "$this->clean($pdf[$nuevaKey]));
  1328.             $datos['CONTRATO']['NPLAZOS'] = isset($temp[0]) ? str_replace('.'''$temp[0]) : '';
  1329.             if (isset($temp[4])) {
  1330.                 $datos['CONTRATO']['PLAZOS'] = str_replace('.'''$temp[4]);
  1331.             }
  1332.         }
  1333.         // Importe total
  1334.         $nuevaKey $this->findKeyByText($pdf"marco  de  un  contrato  de crédito.");
  1335.         if (isset($pdf[$nuevaKey])) {
  1336.             $temp explode("crédito."$this->clean($pdf[$nuevaKey]));
  1337.             if (isset($temp[1])) {
  1338.                 $temp explode("EUR"$temp[1]);
  1339.                 $datos['CONTRATO']['TOTAL'] = str_replace('.'''$temp[0]);
  1340.             }
  1341.         }
  1342.   
  1343.         return $datos;
  1344.     }
  1345.     public function search_Datos_Abanca_cliente($page)
  1346.     {
  1347.         $dCliente=[];
  1348.         $pdf explode("\n"$page->getText());
  1349.         
  1350.         // En este pdf solo tenemos nombre y dni
  1351.         $nuevaKey $this->findKeyByText($pdf"D.N.I.:");
  1352.         if (isset($pdf[$nuevaKey])) {
  1353.             $temp explode("D.N.I.:"$this->clean($pdf[$nuevaKey]));
  1354.             $dCliente['NOM'] = trim($temp[0]);
  1355.             if (isset($temp[1])) {
  1356.                 $dCliente['DNI'] = trim($temp[1]);
  1357.             }
  1358.         }
  1359.         return $dCliente;
  1360.     }
  1361.     private function findKeyByText(array $pdf = [], string $text ""): ?int
  1362.     {
  1363.         $keyText null;
  1364.         if ($pdf !== [] && $text !== "") {
  1365.             foreach ($pdf as $key => $value) {
  1366.                 $haystack $this->clean($value);
  1367.                 $needle   $this->clean($text);
  1368.                 if (str_contains($haystack$needle)) {
  1369.                     $keyText $key;
  1370.                     break;
  1371.                 }
  1372.             }
  1373.         }
  1374.         return $keyText;
  1375.     }
  1376.     private function clean(string $s): string
  1377.     {
  1378.         // 1 – Normaliza acentos (NFC)
  1379.         $s Normalizer::normalize($sNormalizer::FORM_C);
  1380.         // 2 – Convierte NBSP y tabs en espacio normal
  1381.         $s str_replace(["\u{00A0}""\t"], ' '$s);
  1382.         // 3 – Colapsa *cualquier* bloque de espacio‑o‑salto en un solo espacio
  1383.         $s preg_replace('/\s+/u'' '$s);
  1384.         // 4 – Elimina espacios al principio y final
  1385.         return trim($s);
  1386.     }
  1387. }