<?php
namespace App\Controller\Privado\Contrato;
use App\Entity\Ajustes\Financiera;
use App\Entity\Ajustes\TipoFinanciera;
use App\Entity\Contrato;
use App\Entity\Contrato\Cliente;
use App\Entity\Contrato\Documento;
use App\Form\Privado\Entidades\Contrato\ContratoType;
use App\Form\Privado\Entidades\Contrato\ContratoInfoType;
use App\Form\Privado\Filtros\Ajustes\UsuariosFilterType;
use App\Form\Privado\Filtros\Contrato\ContratoFilterType;
use App\Repository\Ajustes\FinancieraRepository;
use App\Repository\Ajustes\TipoFinancieraRepository;
use App\Repository\Contrato\ClienteRepository;
use App\Repository\ContratoRepository;
use App\Service\ExcelExportService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Utils\FilterSession;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Component\Filesystem\Filesystem;
use Xthiago\PDFVersionConverter\Converter\GhostscriptConverterCommand;
use Xthiago\PDFVersionConverter\Converter\GhostscriptConverter;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Doctrine\ORM\EntityManagerInterface;
use Normalizer;
use App\Utils\HelperUtil;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use WhiteOctober\BreadcrumbsBundle\Model\Breadcrumbs;
/**
* @Route("/contrato", name="contrato_", options={"expose"=true})
*/
class ContratoController extends AbstractController
{
public const BaseDir = Contrato::BaseDir;
public const ICON = Contrato::ICON;
private $em;
private $bd;
private $bag;
private $pag;
private $hlp;
private $repo;
private $excel;
private $cliRepo;
private $finRepo;
private $tipoFinanciera;
public function __construct(
EntityManagerInterface $em,
Breadcrumbs $bd,
PaginatorInterface $pag,
ContratoRepository $repo,
ClienteRepository $cliRepo,
HelperUtil $hlp,
ParameterBagInterface $bag,
FinancieraRepository $finRepo,
ExcelExportService $excel,
TipoFinancieraRepository $tipoFinanciera
)
{
$this->em = $em;
$this->bd = $bd;
$this->bag = $bag;
$this->pag = $pag;
$this->hlp = $hlp;
$this->repo = $repo;
$this->excel = $excel;
$this->cliRepo = $cliRepo;
$this->finRepo = $finRepo;
$this->tipoFinanciera = $tipoFinanciera;
$this->bd->addRouteItem('Contrato', 'contrato_index');
}
/**
* @Route("/", name="index", options={"expose"=true})
* @IsGranted("ROLE_CONTRATO_LIST")
*/
public function indexAction(Request $request): Response
{
//Filter data
$defaultValues = ['sort' => 'contrato.id', 'order' => 'desc', 'page' => 1, 'limit' => 12];
$filtro = new FilterSession($request, $defaultValues, 'contrato_filter', $this->bag);
$dataSesio = $filtro->checkFiltroForm();
$formFiltro = $this->createForm(ContratoFilterType::class, $dataSesio);
$data = $formFiltro->handleRequest($request)->getData();
if ($formFiltro->isSubmitted() && $formFiltro->isValid()) {
$filtro->añadirFiltrosForm($data);
}
//Pagination values
$resultBD = $this->repo->filter($data, ['getQuery' => true]);
$pagination = $this->pag->paginate($resultBD, $filtro->getPage(), $filtro->getLimit(), $filtro->getSortKnp());
return $this->render(self::BaseDir.'/contrato_index.html.twig', [
'BaseDir' => self::BaseDir,
'ICON' => self::ICON,
'pagination' => $pagination,
'form_filtro' => $formFiltro->createView(),
'p_filter' => $filtro->getData(),
'title' => 'Gestión de contratos',
]);
}
/**
* @Route("/new", name="new")
* @IsGranted("ROLE_CONTRATO_CREATE")
*/
public function new(Request $request)
{
$contrato = new Contrato();
$datos = [];
/** Recuperamos información del formulario anterior pasandolo por controlador no AJAX */
if (isset($request->request->all()['contrato'])) {
$form = $this->createForm(ContratoType::class, $contrato, [
'action' => $request->getRequestUri(),
'attr' => [
'class' => 'form_validator'
],
]);
$form->handleRequest($request);
$datosForm = $request->request->all()['contrato'];
$tipoFinanciera = $this->tipoFinanciera->find($datosForm['conTipoFinanciera']);
$financiera = $tipoFinanciera->getTipoFinanciera();
$documentos = $request->files->all()['contrato']['DocArchivoFile'];
foreach ($documentos as $file) {
$doc = new Documento();
$imageObject = $this->add_documento($file);
$doc->setDocArchivoFile($imageObject);
$doc->setDocContrato($contrato);
$datos = $this->split_pdf($file->getPathName(), $financiera->getId());
$this->em->persist($doc);
$this->em->flush();
}
if (isset($datos['CLIENTE']) && isset($datos['CLIENTE']['DNI'])) {
//Comprobar si el cliente existe, si no crealo
$cliente = $this->cliRepo->findOneBy(['CliNif' => $datos['CLIENTE']['DNI']]);
if ($cliente == null) {
//Lo creamos
$cliente = new Cliente();
$cliente
->setCliNombre(isset($datos['CLIENTE']['NOM']) ? $datos['CLIENTE']['NOM'] : null)
->setCliDireccion(isset($datos['CLIENTE']['DIR']) ? $datos['CLIENTE']['DIR'] : null)
->setCliProvincia(isset($datos['CLIENTE']['PRO']) ? $datos['CLIENTE']['PRO'] : null)
->setCliCiudad(isset($datos['CLIENTE']['POB']) ? $datos['CLIENTE']['POB'] : null)
->setCliCodigoPostal(isset($datos['CLIENTE']['COD']) ? $datos['CLIENTE']['COD'] : null)
->setCliNif(isset($datos['CLIENTE']['DNI']) ? $datos['CLIENTE']['DNI'] : null)
->setCliEmail(isset($datos['CLIENTE']['MAIL']) ? $datos['CLIENTE']['MAIL'] : null)
->setCliTelefono(isset($datos['CLIENTE']['TEL1']) ? $datos['CLIENTE']['TEL1'] : null)
->setCliMovil(isset($datos['CLIENTE']['TEL2']) ? $datos['CLIENTE']['TEL2'] : null)
;
$this->em->persist($cliente);
$this->em->flush();
}
$contrato->setConCliente($cliente);
}
$contrato
->setConFinanciera($financiera)
->setConTipoFinanciera($tipoFinanciera)
->setConEstado(Contrato::ESTADO_APROBAR)
->setConNumIdentificativo(isset($datos['CONTRATO']['NUM_CONTRATO']) ? $datos['CONTRATO']['NUM_CONTRATO'] : null)
->setConImporteTotal(isset($datos['CONTRATO']['TOTAL']) ? floatval($datos['CONTRATO']['TOTAL']) : null)
->setConPlazos(isset($datos['CONTRATO']['PLAZOS']) ? floatval($datos['CONTRATO']['PLAZOS']) : null)
->setConNumeroCuotas(isset($datos['CONTRATO']['NPLAZOS']) ? floatval($datos['CONTRATO']['NPLAZOS']) : null)
;
$contrato
->setConEstado(Contrato::ESTADO_APROBAR)
;
$this->em->persist($contrato);
$this->em->flush();
return $this->redirectToRoute('contrato_edit', ['id' => $contrato->getId()]);
}
$form2 = $this->createForm(ContratoInfoType::class, $contrato, [
'action' => $request->getRequestUri(),
'attr' => [
'class' => 'form_validator'
],
]);
$form2->handleRequest($request);
if ($form2->isSubmitted()) {
if ($form2->isValid()) {
//Afegir financiera
$contrato
->setConEstado(Contrato::ESTADO_APROBAR)
;
$this->em->persist($contrato);
$this->em->flush();
$this->addFlash('success', 'Contrato creado correctamente.');
if ($form2->getClickedButton() && 'guardarvolver' === $form2->getClickedButton()->getName()) {
return $this->redirectToRoute('contrato_index');
}
return $this->redirectToRoute('contrato_edit', ['id' => $contrato->getId()]);
} else {
$this->addFlash('danger', 'Se han encontrado errores en el formulario enviado.');
}
}
return $this->render(self::BaseDir.'/contrato_new_edit.html.twig', [
'form' => $form2->createView(),
'BaseDir' => self::BaseDir,
'title' => 'Creación de contrato',
'contrato' => $contrato,
]);
}
/**
* @Route("/{id}/edit", name="edit", methods = {"DELETE", "GET", "POST"}, requirements = {"id"="\d+"})
* @IsGranted("ROLE_CONTRATO_EDIT")
*/
public function edit(Request $request, Contrato $contrato)
{
$form = $this->createForm(ContratoInfoType::class, $contrato);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$this->em->flush();
$this->addFlash('success', 'Contrato editado correctamente.');
if ($form->getClickedButton() && 'guardarvolver' === $form->getClickedButton()->getName()) {
return $this->redirectToRoute('contrato_index');
}
return $this->redirectToRoute('contrato_edit', ['id' => $contrato->getId()]);
} else {
$this->addFlash('danger', 'Se han encontrado errores en el formulario enviado.');
}
}
return $this->render(self::BaseDir.'/contrato_new_edit.html.twig', [
'form' => $form->createView(),
'BaseDir' => self::BaseDir,
'title' => 'Edición de contrato',
'contrato' => $contrato,
]);
}
/**
* @Route("/{id}/eliminar", name="delete", methods = {"DELETE", "GET", "POST"}, requirements = {"id"="\d+"})
* @IsGranted("ROLE_CONTRATO_DELETE")
*/
public function delete(Request $request, Contrato $contrato, $force = false): Response
{
if ($this->isCsrfTokenValid('delete'.$contrato->getId(), $request->request->get('_token')) || $force) {
try {
$this->em->remove($contrato);
$this->em->flush();
$this->addFlash('success', "Contrato eliminado con éxito");
return $this->hlp->checkSessionAndRedirect('contrato_index', []);
} catch (\Exception $e) {
$this->hlp->error($e);
$this->addFlash('danger', "Ha ocurrido un error interno intentando eliminar el contrato");
}
}
return $this->render(self::BaseDir.'/contrato_delete.html.twig', [
'contrato' => $contrato,
'BaseDir' => self::BaseDir,
'ICON' => self::ICON,
'title' => 'Eliminar Contrato',
]);
}
/**
* @Route("/excel", name="imprimir_excel", options={"expose"=true})
* @IsGranted("ROLE_CONTRATO_LIST")
*/
public function excelAction(Request $request)
{
//Filter data
$defaultValues = ['sort' => 'contrato.id', 'order' => 'desc', 'page' => 1, 'limit' => 12];
$filtro = new FilterSession($request, $defaultValues, 'contrato_filter', $this->bag);
$resultBD = $this->repo->filter($filtro->checkFiltroForm());
$arrayColumns = [
'Nº Contrato', 'Financiera', 'Versión', 'Cliente',
'Importe Total', 'Importe Plazo', 'Nº Plazos',
'Fecha Solicitud', 'Fecha Financiera',
'Distribuidor', 'Comercial', 'Estado',
'Fecha Aprobado', 'Aprobado Por',
'Fecha Realizado', 'Realizado Por',
'Fecha Procesado', 'Procesado Por',
'Fecha Anulado', 'Anulado Por',
];
$arrayDatos = [];
foreach ($resultBD as $key => $resu) {
$arrayDatos[$key] = [
$resu->getConNumIdentificativo(),
$resu->getConFinanciera(),
$resu->getConVersion(),
$resu->getConCliente(),
number_format($resu->getConImporteTotal(), 2, '.', ''),
number_format($resu->getConPlazos(), 2, '.', ''),
$resu->getConNumeroCuotas(),
$resu->getConFechaSolicitud() ? $resu->getConFechaSolicitud()->format('d-m-Y H:i') : '',
$resu->getConFechaEnvFinanciera() ? $resu->getConFechaEnvFinanciera()->format('d-m-Y H:i') : '',
$resu->getConDistribuidor(),
$resu->getConComercial(),
$resu->getConFechaAprobado() ? $resu->getConFechaAprobado()->format('d-m-Y H:i') : '',
$resu->getConAprobadoPor(),
$resu->getConFechaRealizado() ? $resu->getConFechaRealizado()->format('d-m-Y H:i') : '',
$resu->getConRealizadoPor(),
$resu->getConFechaProcesado() ? $resu->getConFechaProcesado()->format('d-m-Y H:i') : '',
$resu->getConProcesadoPor(),
$resu->getConFechaAnulado() ? $resu->getConFechaAnulado()->format('d-m-Y H:i') : '',
$resu->getConAnuladoPor(),
];
}
return $this->excel->getIndexExcel('Listado de Contratos', $arrayColumns, $arrayDatos, 'Contratos_' . date('d_m_Y') . '.xlsx');
}
/**
* @Route("/excel_completo", name="imprimir_excel_completo", options={"expose"=true})
* @IsGranted("ROLE_CONTRATO_LIST")
*/
public function excelCompletoAction(Request $request)
{
//Filter data
$defaultValues = ['sort' => 'contrato.id', 'order' => 'desc', 'page' => 1, 'limit' => 12];
$filtro = new FilterSession($request, $defaultValues, 'contrato_filter', $this->bag);
$resultBD = $this->repo->filter($filtro->checkFiltroForm());
$arrayColumns = [
# Datos Contrato
'Nº Contrato', 'Versión', 'Fecha Solicitud', 'Fecha Financiera',
'Importe Total', 'Importe Plazo', 'Nº Plazos',
'Check Stock', 'Check Financiacion', 'Check Cliente',
'Estado', 'Distribuidor', 'Comercial',
'Fecha Aprobado', 'Aprobado Por',
'Fecha Realizado', 'Realizado Por',
'Fecha Procesado', 'Procesado Por',
'Fecha Anulado', 'Anulado Por',
# Datos Financiera
'Financiera', 'Tipo Financiera',
# Datos Cliente
'Nombre', 'NIF', 'Dirección', 'Provincia', 'Código Postal',
'Teléfono', 'Móvil', 'Email',
# ID
'ID',
];
$arrayDatos = [];
foreach ($resultBD as $key => $resu) {
$arrayDatos[$key] = [
# Datos Contrato
$resu->getConNumIdentificativo(),
$resu->getConVersion(),
$resu->getConFechaSolicitud() ? $resu->getConFechaSolicitud()->format('d-m-Y H:i') : '',
$resu->getConFechaEnvFinanciera() ? $resu->getConFechaEnvFinanciera()->format('d-m-Y H:i') : '',
number_format($resu->getConImporteTotal(), 2, '.', ''),
number_format($resu->getConPlazos(), 2, '.', ''),
$resu->getConNumeroCuotas(),
$resu->isConStock(),
$resu->isConDatosFinanciacion(),
$resu->isConDatosCliente(),
$resu->getConEstado(),
$resu->getConDistribuidor() != null ? $resu->getConDistribuidor()->getDistEmail() : '',
$resu->getConComercial() != null ? $resu->getConComercial()->getComEmail() : '',
$resu->getConFechaAprobado() ? $resu->getConFechaAprobado()->format('d-m-Y H:i') : '',
$resu->getConAprobadoPor(),
$resu->getConFechaRealizado() ? $resu->getConFechaRealizado()->format('d-m-Y H:i') : '',
$resu->getConRealizadoPor(),
$resu->getConFechaProcesado() ? $resu->getConFechaProcesado()->format('d-m-Y H:i') : '',
$resu->getConProcesadoPor(),
$resu->getConFechaAnulado() ? $resu->getConFechaAnulado()->format('d-m-Y H:i') : '',
$resu->getConAnuladoPor(),
# Datos FInanciera
$resu->getConFinanciera(),
$resu->getConTipoFinanciera() != null ? $resu->getConTipoFinanciera()->getTipoCodigo() : '',
# Datos Cliente
$resu->getConCliente() != null ? $resu->getConCliente()->getCliNombre() : '',
$resu->getConCliente() != null ? $resu->getConCliente()->getCliNif() : '',
$resu->getConCliente() != null ? $resu->getConCliente()->getCliDireccion() : '',
$resu->getConCliente() != null ? $resu->getConCliente()->getCliProvincia() : '',
$resu->getConCliente() != null ? $resu->getConCliente()->getCliCodigoPostal() : '',
$resu->getConCliente() != null ? $resu->getConCliente()->getCliTelefono() : '',
$resu->getConCliente() != null ? $resu->getConCliente()->getCliMovil() : '',
$resu->getConCliente() != null ? $resu->getConCliente()->getCliEmail() : '',
# ID
$resu->getId(),
];
}
return $this->excel->getIndexExcel('Listado de Contratos Completos', $arrayColumns, $arrayDatos, 'Contratos_' . date('d_m_Y') . '.xlsx');
}
/**
* @Route("/excel_documentos", name="imprimir_excel_documentos", options={"expose"=true})
* @IsGranted("ROLE_CONTRATO_LIST")
*/
public function excelDocumentosAction(Request $request)
{
//Filter data
$defaultValues = ['sort' => 'contrato.id', 'order' => 'desc', 'page' => 1, 'limit' => 12];
$filtro = new FilterSession($request, $defaultValues, 'contrato_filter', $this->bag);
$resultBD = $this->repo->filter($filtro->checkFiltroForm());
$arrayColumns = [
'Nº Contrato', 'Nombre Doc', 'Nombre Original',
];
$arrayDatos = [];
foreach ($resultBD as $key => $resu) {
// Por cada contrato, un registro por cada documento
foreach ($resu->getConDocs() as $doc) {
$arrayDatos[] = [
$resu->getId(),
$doc->getDocFile(),
$doc->getDocOriginalName(),
];
}
}
return $this->excel->getIndexExcel('Listado de Documentos', $arrayColumns, $arrayDatos, 'Documentos_' . date('d_m_Y') . '.xlsx');
}
public function add_documento($doc)
{
/** Archivo de la maquinaria anterior */
$file = $doc;
$extension = explode(".", $file->getClientOriginalName());
return new UploadedFile(
$file->getPathName(),
$file->getClientOriginalName(),
$extension[1],
false,
true
);
}
public function split_pdf($url, $financiera)
{
//Primero bajamos la versión del pdf para que no produzca errores de lectura o división
$command = new GhostscriptConverterCommand();
$filesystem = new Filesystem();
//Comprobar versión del pdf cuando la versión es distinta a 1.5 no se suben correctamente
$converter = new GhostscriptConverter($command, $filesystem);
$converter->convert($url, '1.4');
// Parse pdf file and build necessary objects.
$parser = new \Smalot\PdfParser\Parser();
$pdf = $parser->parseFile($url);
$pages = $pdf->getPages();
// Split each page into a new PDF
/** Lectura de páginas */
$datos = [];
if ($financiera == Financiera::NOMBRE['CAIXABANK']) {
$datos = $this->search_Datos_Caixabank($pages[16]);
$datos['CLIENTE'] = $this->search_datos_personales($pages[12]);
} elseif ($financiera == Financiera::NOMBRE['CETELEM']) {
$datos = $this->search_Datos_Cetelem_Cliente($pages[1]);
$datos['CONTRATO'] = $this->search_Datos_Cetelem_Contrato($pages[12]);
} elseif ($financiera == Financiera::NOMBRE['PEEPER']) {
$datos = $this->search_Datos_Pepper($pages[1]);
} elseif ($financiera == Financiera::NOMBRE['SOFINCO']) {
$datos = $this->search_Datos_Sofinco($pages[5]);
} elseif ($financiera == Financiera::NOMBRE['UFA']) {
$datos = $this->search_Datos_Ufa($pages[0]);
} elseif ($financiera == Financiera::NOMBRE['CreditBox']) {
$datos = $this->search_Datos_CreditBox_Contrato($pages[0]);
$datos['CLIENTE'] = $this->search_Datos_CreditBox_Cliente($pages[6]);
} elseif ($financiera == Financiera::NOMBRE['CaixaEmpresas']) {
$datos['CONTRATO']['NUM_CONTRATO'] = $this->search_Datos_CaixaEmpresas_Contrato_Num($pages[0]);
$datos['CONTRATO']['TOTAL'] = $this->search_Datos_CaixaEmpresas_Contrato_Total($pages[7]);
$datos['CONTRATO']['PLAZOS'] = $this->search_Datos_CaixaEmpresas_Contrato_Plazos($pages[8]);
$datos['CLIENTE'] = $this->search_Datos_CaixaEmpresas_Cliente($pages[4]);
} elseif ($financiera == Financiera::NOMBRE['MontJuich']) {
$datos = $this->search_Datos_MontJuich($pages[0]);
} elseif ($financiera == Financiera::NOMBRE['SABADELL']) {
$datos = $this->search_Datos_Sabadell($pages[7]);
$datos['CLIENTE'] = $this->search_Datos_Sabadell_cliente($pages[0]);
} elseif ($financiera == Financiera::NOMBRE['ABANCA']) {
$datos = $this->search_Datos_Abanca($pages[0]);
$datos['CLIENTE'] = $this->search_Datos_Abanca_cliente($pages[4]);
}
return $datos;
}
public function search_Datos_Caixabank($page)
{
//INFORMACIÓN CONTRATO
$imp = $pla = $num = $cod = 0;
$pdf = explode("\n", $page->getText());
//Código del contrato
$nuevaKey = $this->findKeyByText($pdf, "Contrato de préstamo núm.");
if (isset($pdf[$nuevaKey])) {
$cod = explode("núm. ", $this->clean($pdf[$nuevaKey]));
if (isset($cod[1])) {
$cod = $cod[1];
}
}
//Importe total
if (isset($pdf[11])) {
$imp = explode(" ", $this->clean($pdf[11]));
if (isset($imp[0])) {
$imp = $imp[0];
$imp = str_replace('.', '', $imp);
}
}
//Num Plazos
$nuevaKey = $this->findKeyByText($pdf, "Número de cuotas mixtas");
if (isset($pdf[$nuevaKey])) {
$num = explode("mixtas", $this->clean($pdf[$nuevaKey]));
if (isset($num[1])) {
$num = $num[1];
$num = explode(" ", trim($num));
if (isset($num[0])) {
$num = trim($num[0]);
} else {
$num = null;
}
}
}
//Valor Plazo
$nuevaKey = $this->findKeyByText($pdf, "CUOTA: ");
if (isset($pdf[$nuevaKey])) {
$pla = explode("CUOTA: ", $this->clean($pdf[$nuevaKey]));
if (isset($pla[1])) {
$pla = explode(" ", $pla[1]);
$pla = $pla[0];
$pla = str_replace('.', '', $pla);
}
}
$datos['CONTRATO'] = [
"NUM_CONTRATO" => $cod,
"TOTAL" => str_replace(',', '.', $imp),
"PLAZOS" => str_replace(',', '.', $pla),
'NPLAZOS'=> str_replace(',', '.', $num),
];
return $datos;
}
public function search_datos_personales($page)
{
$dCliente=[];
$pdf = explode("\n", $page->getText());
//Apellidos y Nombre
$nuevaKey = $this->findKeyByText($pdf, "Apellidos: ");
if (isset($pdf[$nuevaKey])) {
$ape = explode("Apellidos: ", $pdf[$nuevaKey]);
if (isset($ape[1])) {
$ape = explode("Nombre/Denominación:", $ape[1]);
if (isset($ape[1])) {
$dCliente['NOM'] = $ape[1] . ' ' . $ape[0];
}
}
}
//DNI
$nuevaKey = $this->findKeyByText($pdf, "NIF/CIF: ");
if (isset($pdf[$nuevaKey])) {
$dni = explode("NIF/CIF: ", $pdf[$nuevaKey]);
if (isset($dni[1])) {
$dni = explode(" ", $dni[1]);
$dCliente['DNI'] = $dni[0];
}
}
//Email
$nuevaKey = $this->findKeyByText($pdf, "Correo electrónico:");
if (isset($pdf[$nuevaKey])) {
$ema = explode(": ", $pdf[$nuevaKey]);
if (isset($ema[1])) {
$ema = explode(" ", $ema[1]);
$dCliente['MAIL'] = str_contains($this->clean($ema[0]), '@') ? $this->clean($ema[0]) : null;
}
}
//Telefono
$nuevaKey = $this->findKeyByText($pdf, "Teléfono fijo:");
if (isset($pdf[$nuevaKey])) {
$tel = explode("fijo: ", $pdf[$nuevaKey]);
if (isset($tel[1])) {
$tel = explode(" ", $tel[1]);
$dCliente['TEL1'] = $tel[0];
}
}
//Poblacion y Codigo Postal
$nuevaKey = $this->findKeyByText($pdf, "Población: ");
if (isset($pdf[$nuevaKey])) {
$dir = explode("Población: ", $pdf[$nuevaKey]);
if (isset($dir[1])) {
$dir = explode(" ", $dir[1]);
$dCliente['POB'] = $dir[0];
if (isset($dir[1])) {
$cod = explode("C.P.", $dir[1]);
if (isset($cod[1])) {
$dCliente['COD'] = $cod[1];
}
}
}
}
//Direccion
$nuevaKey = $this->findKeyByText($pdf, "Domicilio: ");
if (isset($pdf[$nuevaKey])) {
$dir = explode("Domicilio: ", $pdf[$nuevaKey]);
if (isset($dir[1])) {
$dCliente['DIR'] = $dir[1];
}
}
return $dCliente;
}
public function search_plan_financiacion($page)
{
$datos=[];
/** DATOS PLAN FINANCIACIÓN */
/** Recuperación de NOMINAL */
$pdf=explode("\n", $page->getText());
$pdf=$pdf[25];
$pdf=explode("Nominal:", $pdf);
$nominal = str_replace('.', '', $pdf[1]);
$nominal = floatval($nominal);
$datos['NOMINAL']=$nominal;
/** END::NOMINAL */
/** Recuperación de PLAZOS */
$pdf=explode("Nº plazos:", $page->getText());
$pdf=explode("TIN", $pdf[1]);
$pdf=explode("\n", $pdf[0]);
foreach ($pdf as $text) {
if ($text != "") {
$datos['PLAZOS']=$text;
break;
}
}
/** END::PLAZOS */
/** END::PLAN FINANCIACIÓN */
return $datos;
}
public function search_Datos_Cetelem_Cliente($page)
{
$datos=[];
$pdf = explode("firmabiometrica 3", $page->getText());
if (isset($pdf[1])) {
$pdf=explode("\n", $pdf[1]);
foreach ($pdf as $text) {
$textDelimeter = $pdf=explode("\t", $text)[0];
if ($textDelimeter != 'X' && $textDelimeter != '/' && $textDelimeter != '/' && $textDelimeter != ' ') {
$pdfDelimeter[] = $text;
}
}
$pdf = $pdfDelimeter;
//Datos Client
if (isset($pdf[19])) {
$nom = explode("\t", $pdf[19]);
$datos['CLIENTE']['NOM'] = $nom[0];
}
if (isset($pdf[0])) {
$dni = explode("\t", $pdf[0]);
if (isset($dni[1])) {
$datos['CLIENTE']['DNI'] = $dni[1];
}
}
if (isset($pdf[16])) {
$pob = explode("\t", $pdf[16]);
$datos['CLIENTE']['POB'] = $pob[0];
}
if (isset($pdf[6])) {
$pro = explode("\t", $pdf[6]);
$datos['CLIENTE']['PRO'] = $pro[0];
}
if (isset($pdf[21])) {
$cod = explode("\t", $pdf[21]);
$datos['CLIENTE']['COD'] = $cod[0];
}
if (isset($pdf[15])) {
$dir = explode("\t", $pdf[15]);
$datos['CLIENTE']['DIR'] = $dir[0];
}
if (isset($pdf[13])) {
$tel1 = explode("\t", $pdf[13]);
$datos['CLIENTE']['TEL1'] = $tel1[0];
}
if (isset($pdf[9])) {
$tel2 = explode("\t", $pdf[9]);
$datos['CLIENTE']['TEL2'] = $tel2[0];
}
if (isset($pdf[8])) {
$mail = explode("\t", $pdf[8]);
$datos['CLIENTE']['MAIL'] = $mail[0];
}
}
return $datos;
}
public function search_Datos_Pepper($page)
{
$datos=[];
$pdf=explode("\n",$page->getText());
/** DATOS TITULAR */
//Nom
$nuevaKey = $this->findKeyByText($pdf, "Nombre y Apellidos:");
if (isset($pdf[$nuevaKey])) {
$nombre=explode("Nombre y Apellidos:", $pdf[$nuevaKey]);
if (isset($nombre[1])) {
$datos['CLIENTE']['NOM']=$nombre[1];
}
}
//DNI
$nuevaKey = $this->findKeyByText($pdf, "N.I.F:");
if (isset($pdf[$nuevaKey])) {
$nif=explode("N.I.F:", $pdf[$nuevaKey]);
if (isset($nif[1])) {
$nif=explode("Estado Civil:", $nif[1]);
$nif=str_replace(" ", '', $nif[0]);
$datos['CLIENTE']['DNI']=$nif;
}
}
//Direccio
$nuevaKey = $this->findKeyByText($pdf, "Domicilio:");
if (isset($pdf[$nuevaKey])) {
$domicilio=explode("Domicilio:", $pdf[$nuevaKey]);
if (isset($domicilio[1])) {
$datos['CLIENTE']['DIR'] = trim($domicilio[1]);
}
}
//Codigo postal
$nuevaKey = $this->findKeyByText($pdf, "CP: ");
if (isset($pdf[$nuevaKey])) {
$cp=explode("CP: ", $pdf[$nuevaKey]);
if (isset($cp[1])) {
$datos['CLIENTE']['COD'] = trim($cp[1]);
}
}
//Email
$nuevaKey = $this->findKeyByText($pdf, "E-mail:");
if (isset($pdf[$nuevaKey])) {
$email = explode("E-mail:", $pdf[$nuevaKey]);
if (isset($email[1])) {
$email = explode("\t", $email[1]);
$datos['CLIENTE']['MAIL'] = $email[0];
}
}
//Telefonos
$nuevaKey = $this->findKeyByText($pdf, "Telfs. fijo y móvil:");
if (isset($pdf[$nuevaKey])) {
$telefonos = explode("Telfs. fijo y móvil:", $pdf[$nuevaKey]);
if (isset($telefonos[1])) {
$telefonos = explode(" ", $telefonos[1]);
$datos['CLIENTE']['TEL1'] = isset($telefonos[1]) ? $telefonos[1] : null;
$datos['CLIENTE']['TEL2'] = isset($telefonos[2]) ? $telefonos[2] : null;
}
}
//Datos financiación
//Importe total
$nuevaKey = $this->findKeyByText($pdf, "Importe Total Adeudado: ");
if (isset($pdf[$nuevaKey])) {
$importe = explode("Importe Total Adeudado: ", $pdf[$nuevaKey]);
if (isset($importe[1])) {
$importe = $importe[1];
$datos['CONTRATO']['TOTAL'] = str_replace('.', '', $importe);
}
}
//Num comtrato
$nuevaKey = $this->findKeyByText($pdf, "Nº Autorización: ");
if (isset($pdf[$nuevaKey])) {
$nCon = explode("Nº Autorización: ", $pdf[$nuevaKey]);
if (isset($nCon[1])) {
$nCon = explode(" ", $nCon[1]);
$datos['CONTRATO']['NUM_CONTRATO'] = str_replace('.', '', $nCon[0]);
}
}
//Plazos
$nuevaKey = $this->findKeyByText($pdf, "Cuotas mensuales de ");
if (isset($pdf[$nuevaKey])) {
$plazos = explode("Cuotas mensuales de ", $pdf[$nuevaKey]);
if (isset($plazos[1])) {
$plazos = explode(" ", $plazos[1]);
$datos['CONTRATO']['PLAZOS'] = str_replace('.', '', $plazos[0]);
}
$num = explode("Total de Cuotas: ", $pdf[$nuevaKey]);
if (isset($num[1])) {
$num = explode("Días", $num[1]);
$datos['CONTRATO']['NPLAZOS'] = str_replace('.', '', $num[0]);
}
}
return $datos;
}
public function search_Datos_Sofinco($page)
{
$datos=[];
$pdf=explode("\n", $page->getText());
//INFORMACIÓN SOBRE EL CLIENTE
$nuevaKey = $this->findKeyByText($pdf, "Nombre:");
if (isset($pdf[$nuevaKey])) {
$nom = explode("Nombre:", $pdf[$nuevaKey]);
}
//DNI
$nuevaKey = $this->findKeyByText($pdf, "Número de DNI:");
if (isset($pdf[$nuevaKey])) {
$dni = explode("Número de DNI:", $pdf[$nuevaKey]);
}
//Telefono
$nuevaKey = $this->findKeyByText($pdf, "Teléfono móvil:");
if (isset($pdf[$nuevaKey])) {
$tel = explode("Teléfono móvil:", $pdf[$nuevaKey]);
}
//Direccion
$nuevaKey = $this->findKeyByText($pdf, "Dirección Completa:");
if (isset($pdf[$nuevaKey])) {
$dir = explode("Dirección Completa:", $pdf[$nuevaKey]);
//Desestructurar la direccion
if (isset($dir[1])) {
$dir = explode(",", $dir[1]);
$direccion = "";
if (isset($dir[0])) {
//Direcicon
$direccion = trim($dir[0]);
}
if (isset($dir[1])) {
//Numero puerta
$direccion .= ', ' . trim($dir[1]);
}
if (isset($dir[3])) {
//Provincia
$provincia = trim($dir[3]);
}
if (isset($dir[2])) {
$dir = explode(" ", trim($dir[2]));
$cp = isset($dir[0]) ? $dir[0] : null;
$poblacion = isset($dir[1]) ? $dir[1] : null;
}
}
}
//email
$nuevaKey = $this->findKeyByText($pdf, "E-mail:");
if (isset($pdf[$nuevaKey])) {
$mail = explode("E-mail:", $pdf[$nuevaKey]);
}
$datos['CLIENTE'] = [
"NOM" => isset($nom[1]) ? trim($nom[1]) : '',
"DNI" => isset($dni[1]) ? trim($dni[1]) : '',
"TEL2" => isset($tel[1]) ? trim($tel[1]) : '',
"DIR" => isset($direccion) ? $direccion : '',
"PRO" => isset($provincia) ? $provincia : '',
"COD" => isset($cp) ? $cp : '',
"POB" => isset($poblacion) ? $poblacion : '',
"MAIL" => isset($mail[1]) ? trim($mail[1]) : '',
];
//INFORMACIÓN DEL CONTRATO
$nuevaKey = $this->findKeyByText($pdf, "Número de solicitud:");
if (isset($pdf[$nuevaKey])) {
$cod = explode("Número de solicitud:", $pdf[$nuevaKey]);
if (isset($cod[1])) {
$cod = explode(" ", $cod[1]);
}
}
//Importe
$nuevaKey = $this->findKeyByText($pdf, "Importe financiado:");
if (isset($pdf[$nuevaKey])) {
$imp = explode("Importe financiado:", $pdf[$nuevaKey]);
if (isset($imp[1])) {
$imp = explode("¬", $imp[1]);
$imp = str_replace(',', '.', str_replace('.', '', trim($imp[0])));
}
}
//Cuotas
$nuevaKey = $this->findKeyByText($pdf, "Importe del resto de cuotas:");
if (isset($pdf[$nuevaKey])) {
$plazo = explode("Importe del resto de cuotas:", $pdf[$nuevaKey]);
if (isset($plazo[1])) {
$plazo = explode("¬", $plazo[1]);
$plazo = explode(" ", $plazo[0]);
$plazo = str_replace(',', '.', str_replace('.', '', trim($plazo[1])));
}
}
//NUmero
$nuevaKey = $this->findKeyByText($pdf, "Duración del Préstamo: ");
if (isset($pdf[$nuevaKey])) {
$num = explode("Duración del Préstamo: ", $pdf[$nuevaKey]);
if (isset($num[1])) {
$num = explode(" ", $num[1]);
$num = $num[0];
}
}
$datos['CONTRATO'] = [
"NUM_CONTRATO" => isset($cod[0]) ? $cod[0] : '',
"TOTAL" => isset($imp) ? $imp : '',
"PLAZOS" => isset($plazo) ? $plazo : '',
"NPLAZOS" => isset($num) ? $num : '',
];
return $datos;
}
public function search_Datos_Ufa($page)
{
$datos=[];
$pdf=explode("\n",$page->getText());
//Datos Client
//Nom
if (isset($pdf[62])) {
$datos['CLIENTE']['NOM'] = $pdf[62];
}
//DNI
if (isset($pdf[70])) {
$nif = explode("\t", $pdf[70]);
$datos['CLIENTE']['DNI'] = $nif[0];
}
//Direccio
if (isset($pdf[71])) {
$domicilio = explode("\t", $pdf[71]);
$datos['CLIENTE']['DIR'] = $domicilio[0];
$datos['CLIENTE']['POB'] = $domicilio[1];
}
if (isset($pdf[72])) {
$provincia = explode("\t", $pdf[72]);
$datos['CLIENTE']['PRO'] = $provincia[1];
$datos['CLIENTE']['COD'] = $provincia[0];
$datos['CLIENTE']['TEL1'] = isset($provincia[3]) ? $provincia[3] : null;
}
//Telefonos
if (isset($pdf[75])) {
$telefonos = explode("\t", $pdf[75]);
$datos['CLIENTE']['TEL2'] = isset($telefonos[0]) ? $telefonos[0] : null;
}
//Datos financiación
//Importe total
if (isset($pdf[64])) {
$importe = explode(" ", $pdf[64]);
$importe = $importe[0];
$datos['CONTRATO']['TOTAL'] = str_replace('.', '', $importe);
}
//Num comtrato
if (isset($pdf[61])) {
$nCon = explode("\t", $pdf[61]);
$datos['CONTRATO']['NUM_CONTRATO'] = isset($nCon[2]) ? str_replace('.', '', $nCon[2]) : '';
}
//Plazos
if (isset($pdf[67])) {
$plazos = explode("\t", $pdf[67]);
$datos['CONTRATO']['PLAZOS'] = isset($plazos[1]) ? str_replace('.', '', $plazos[1]) : '';
}
//Nplazos
if (isset($pdf[67])) {
$plazos = explode("\t", $pdf[67]);
$datos['CONTRATO']['NPLAZOS'] = str_replace('.', '', $plazos[0]);
}
return $datos;
}
public function search_Datos_CreditBox_Contrato($page)
{
//INFORMACIÓN CONTRATO
$pdf = explode("\n", $page->getText());
$cod = $imp = $pla = $num = "";
if (isset($pdf[99])) {
$cod = explode("\t", $pdf[99]);
$cod = $cod[0];
}
if (isset($pdf[104])) {
$imp = explode("\t", $pdf[104]);
$imp = $imp[0];
}
if (isset($pdf[101])) {
$pla = explode("\t", $pdf[101]);
$pla = $pla[0];
}
if (isset($pdf[102])) {
$num = explode("\t", $pdf[102]);
$num = $num[0];
}
$datos['CONTRATO'] = [
"NUM_CONTRATO" => $cod,
"TOTAL" => str_replace('.', '', $imp),
"PLAZOS" => str_replace('.', '', $pla),
"NPLAZOS" => $num,
];
return $datos;
}
public function search_Datos_CreditBox_Cliente($page)
{
$dCliente=[];
$pdf = explode("\n", $page->getText());
//Nombre
if (isset($pdf[39])) {
$nom = explode("\t", $pdf[39]);
$dCliente['NOM'] = $nom[0];
}
//DNI
if (isset($pdf[45])) {
$dni = explode("\t", $pdf[45]);
$dCliente['DNI'] = $dni[0];
}
//Direcciones
if (isset($pdf[37])) {
$pob = explode("\t", $pdf[37]);
$dCliente['POB'] = $pob[0];
}
if (isset($pdf[40])) {
$cod = explode("\t", $pdf[40]);
$dCliente['COD'] = $cod[0];
}
if (isset($pdf[51])) {
$dir1 = explode("\t", $pdf[51]);
$dCliente['DIR'] = $dir1[0];
}
if (isset($pdf[38])) {
$num = explode("\t", $pdf[38]);
$dCliente['DIR'] .= " nº " . $num[0];
}
if (isset($pdf[47])) {
$piso = explode("\t", $pdf[47]);
$dCliente['DIR'] .= " piso " . $piso[0];
}
//Telefonos
if (isset($pdf[58])) {
$tel1 = explode("\t", $pdf[58]);
$dCliente['TEL1'] = $tel1[0];
}
if (isset($pdf[53])) {
$tel2 = explode("\t", $pdf[53]);
$dCliente['TEL2'] = $tel2[0];
}
return $dCliente;
}
public function search_Datos_Cetelem_Contrato($page)
{
//INFORMACIÓN CONTRATO
$aDatos = [];
$pdf = explode("\n", $page->getText());
$imp = $pla = $num = 0;
if (isset($pdf[73])) {
$imp = explode("\t", $pdf[73]);
$imp = $imp[0];
}
if (isset($pdf[83])) {
$pla = explode("\t", $pdf[83]);
$pla = $pla[0];
}
if (isset($pdf[82])) {
$num = explode("\t", $pdf[82]);
$num = $num[0];
}
$aDatos = [
"NUM_CONTRATO" => "",
"TOTAL" => $imp,
"PLAZOS" => $pla,
"NPLAZOS" => $num,
];
return $aDatos;
}
public function search_Datos_CaixaEmpresas_Contrato_Num($page)
{
//INFORMACIÓN CONTRATO
$pdf = explode("\n", $page->getText());
$cod = "";
if (isset($pdf[2])) {
$cod = explode(" ", $pdf[2]);
$cod = $cod[1];
}
return $cod;
}
public function search_Datos_CaixaEmpresas_Contrato_Total($page)
{
//INFORMACIÓN CONTRATO
$pdf = explode("\n", $page->getText());
$tot = "";
if (isset($pdf[32])) {
$tot = explode(" ", $pdf[32]);
$tot = isset($tot[6]) ? str_replace('.', '', $tot[6]) : '';
}
return str_replace(',', '.', $tot);
}
public function search_Datos_CaixaEmpresas_Contrato_Plazos($page)
{
//INFORMACIÓN CONTRATO
$pdf = explode("\n", $page->getText());
$pla = "";
if (isset($pdf[5])) {
$pla = explode(" ", $pdf[5]);
$pla = isset($pla[1]) ? str_replace('.', '', $pla[1]) : '';
}
return str_replace(',', '.', $pla);
}
public function search_Datos_CaixaEmpresas_Cliente($page)
{
$dCliente=[];
$pdf = explode("\n", $page->getText());
//Nombre
if (isset($pdf[5])) {
$nom = explode("Nombre/Denominación:", $pdf[5]);
$dCliente['NOM'] = isset($nom[1]) ? $nom[1] : '';
}
//DNI
if (isset($pdf[6])) {
$dni = explode("NIF/CIF: ", $pdf[6]);
if (isset($dni[1])) {
$dni = explode(" ", $dni[1]);
$dCliente['DNI'] = $dni[0];
}
}
//Direcciones
if (isset($pdf[10])) {
$pob = explode("Población: ", $pdf[10]);
if (isset($pob[1])) {
$pob = explode(" ", $pob[1]);
$dCliente['POB'] = $pob[0];
}
}
if (isset($pdf[10])) {
$cod = explode("C.P.", $pdf[10]);
if (isset($cod[1])) {
$cod = explode(" ", $cod[1]);
$dCliente['COD'] = $cod[0];
}
}
if (isset($pdf[9])) {
$dir1 = explode("Domicilio: ", $pdf[9]);
if (isset($dir1[1])) {
$dir1 = explode(" ", $dir1[1]);
$dCliente['DIR'] = $dir1[0];
}
}
if (isset($pdf[9])) {
$num = explode("Nº:", $pdf[9]);
if (isset($num[1])) {
$num = explode(" ", $num[1]);
$dCliente['DIR'] .= " nº " . $num[0];
}
}
//Telefonos
if (isset($pdf[14])) {
$tel1 = explode("empresa:", $pdf[14]);
if (isset($tel1[3])) {
$dCliente['TEL1'] = $tel1[3];
}
}
return $dCliente;
}
public function search_Datos_MontJuich($page)
{
$datos=[];
$pdf=explode("\n",$page->getText());
//Datos Client
//Nom
if (isset($pdf[27]) && isset($pdf[28])) {
$datos['CLIENTE']['NOM'] = $pdf[27] . $pdf[28];
}
//DNI
if (isset($pdf[50]) || isset($pdf[51])) {
$datos['CLIENTE']['DNI'] = "";
if (!str_contains($pdf[50], '@')) {
$datos['CLIENTE']['DNI'] = $pdf[50];
}
if (!str_contains($pdf[51], '@')) {
$datos['CLIENTE']['DNI'] = $pdf[51];
}
}
//Direccio
if (isset($pdf[30])) {
$datos['CLIENTE']['DIR'] = $pdf[30];
}
if (isset($pdf[31])) {
$datos['CLIENTE']['POB'] = $pdf[31];
}
if (isset($pdf[48])) {
$provincia = explode("\t", $pdf[48]);
if (isset($provincia[1])) {
$provincia = explode(" ", $provincia[1]);
if (isset($provincia[1])) {
$datos['CLIENTE']['PRO'] = $provincia[0];
$datos['CLIENTE']['COD'] = $provincia[1];
}
}
}
//Telefonos
if (isset($pdf[49])) {
$telefonos = explode(" ", $pdf[49]);
if (isset($telefonos[1])) {
$datos['CLIENTE']['TEL1'] = $telefonos[0];
$datos['CLIENTE']['TEL2'] = $telefonos[1];
} else {
$datos['CLIENTE']['TEL1'] = $pdf[49];
}
}
//Email
if (isset($pdf[50]) || isset($pdf[51])) {
$datos['CLIENTE']['MAIL'] = "";
if (str_contains($pdf[50], '@')) {
$datos['CLIENTE']['MAIL'] = $pdf[50];
}
if (str_contains($pdf[51], '@')) {
$datos['CLIENTE']['MAIL'] = $pdf[51];
}
}
//Datos financiación
//Importe total
if (isset($pdf[86]) || isset($pdf[87])) {
$datos['CONTRATO']['TOTAL'] = "";
if (isset($pdf[86]) && str_contains($pdf[86], '€')) {
$importe = explode(" ", $pdf[86]);
$importe = $importe[0];
$importe = str_replace('.', '', $importe);
$datos['CONTRATO']['TOTAL'] = str_replace(',', '.', $importe);
} elseif (isset($pdf[87]) && str_contains($pdf[87], '€')) {
$importe = explode(" ", $pdf[87]);
$importe = $importe[0];
$importe = str_replace('.', '', $importe);
$datos['CONTRATO']['TOTAL'] = str_replace(',', '.', $importe);
}
}
//Plazos
if (isset($pdf[92]) || isset($pdf[93])) {
$datos['CONTRATO']['PLAZOS'] = "";
if (isset($pdf[92]) && str_contains($pdf[92], '€')) {
$plazos = explode(" ", $pdf[92]);
$plazos = str_replace('.', '', $plazos[0]);
$datos['CONTRATO']['PLAZOS'] = str_replace(',', '.', $plazos);
} elseif (isset($pdf[93]) && str_contains($pdf[93], '€')) {
$plazos = explode(" ", $pdf[93]);
$plazos = str_replace('.', '', $plazos[0]);
$datos['CONTRATO']['PLAZOS'] = str_replace(',', '.', $plazos);
}
}
//Nplazos
if (isset($pdf[66]) || isset($pdf[67])) {
$datos['CONTRATO']['NPLAZOS'] = "";
if (isset($pdf[66]) && is_numeric(str_replace('.', '', $pdf[66]))) {
$datos['CONTRATO']['NPLAZOS'] = str_replace('.', '', $pdf[66]);
} elseif (isset($pdf[67]) && is_numeric(str_replace('.', '', $pdf[67]))) {
$datos['CONTRATO']['NPLAZOS'] = str_replace('.', '', $pdf[67]);
}
}
return $datos;
}
public function search_Datos_Sabadell($page)
{
$datos['CONTRATO'] = [];
$pdf = explode("\n", $page->getText());
// Numero cuotas
$nuevaKey = $this->findKeyByText($pdf, "cuotas");
if (isset($pdf[$nuevaKey])) {
$temp = explode("un total de", $this->clean($pdf[$nuevaKey]));
if (isset($temp[1])) {
$temp = explode(" ", trim($temp[1]));
$datos['CONTRATO']['NPLAZOS'] = isset($temp[0]) ? str_replace('.', '', $temp[0]) : '';
}
}
// Cantidad Cuotas
$nuevaKey = $this->findKeyByText($pdf, "los importes siguientes:");
if (isset($pdf[$nuevaKey])) {
$temp = explode("los importes siguientes:", $this->clean($pdf[$nuevaKey]));
if (isset($temp[1])) {
$temp = explode("de", trim($temp[1]));
if (isset($temp[2])) {
$temp = explode(" ", trim($temp[2]));
$datos['CONTRATO']['PLAZOS'] = isset($temp[0]) ? str_replace('.', '', $temp[0]) : '';
} else {
$datos['CONTRATO']['PLAZOS'] = '';
}
}
}
// Importe total
$nuevaKey = $this->findKeyByText($pdf, "Nombre del producto/servicio");
if (isset($pdf[$nuevaKey])) {
$temp = explode(" ", $this->clean($pdf[$nuevaKey]));
$lastKey = array_key_last($temp);
$datos['CONTRATO']['TOTAL'] = isset($temp[$lastKey - 1]) ? str_replace('.', '', $temp[$lastKey - 1]) : '';
}
// Numero contrato
$nuevaKey = $this->findKeyByText($pdf, "Número");
if (isset($pdf[$nuevaKey])) {
$temp = explode("Número", $this->clean($pdf[$nuevaKey]));
if (isset($temp[1])) {
$datos['CONTRATO']['NUM_CONTRATO'] = trim($temp[1]);
} else {
$datos['CONTRATO']['NUM_CONTRATO'] = '';
}
}
return $datos;
}
public function search_Datos_Sabadell_cliente($page)
{
$dCliente=[];
$pdf = explode("\n", $page->getText());
//Nombre
$nuevaKey = $this->findKeyByText($pdf, "con poderes suficientes.");
if (isset($pdf[$nuevaKey])) {
$nom = explode("con poderes suficientes.", $this->clean($pdf[$nuevaKey]));
if (isset($nom[1])) {
$dCliente['NOM'] = isset($nom[1]) ? $nom[1] : '';
} else {
$dCliente['NOM'] = '';
}
}
//DNI -> NEVA KEY +1
if (isset($pdf[$nuevaKey+1])) {
$dCliente['DNI'] = $this->clean($pdf[$nuevaKey+1]);
}
// Domicilio nueva key +2
if (isset($pdf[$nuevaKey+2])) {
// El pueblo es la ultima key y el cp la anterior, el resto ordenador es la direccion
$aTemp = explode(" ", $this->clean($pdf[$nuevaKey+2]));
$lastKey = array_key_last($aTemp);
$dCliente['POB'] = isset($aTemp[$lastKey]) ? $aTemp[$lastKey] : '';
$dCliente['COD'] = isset($aTemp[$lastKey-1]) ? $aTemp[$lastKey-1] : '';
unset($aTemp[$lastKey]);
unset($aTemp[$lastKey-1]);
$dCliente['DIR'] = implode(" ", $aTemp);
}
//Telefonos + Correo -> nueva key +3
if (isset($pdf[$nuevaKey+3])) {
$aTemp = explode(" ", $this->clean($pdf[$nuevaKey+3]));
$dCliente['TEL1'] = isset($aTemp[0]) ? $aTemp[0] : '';
$dCliente['TEL2'] = isset($aTemp[1]) ? $aTemp[1] : '';
$dCliente['MAIL'] = isset($aTemp[2]) && str_contains($aTemp[2], '@') ? $aTemp[2] : '';
}
return $dCliente;
}
public function search_Datos_Abanca($page)
{
$datos['CONTRATO'] = [
'NUM_CONTRATO' => '',
'TOTAL' => '',
'PLAZOS' => '',
'NPLAZOS' => '',
];
$pdf = explode("\n", $page->getText());
// Numero cuotas y precio
$nuevaKey = $this->findKeyByText($pdf, "cuota/s mensual/es");
if (isset($pdf[$nuevaKey])) {
$temp = explode(" ", $this->clean($pdf[$nuevaKey]));
$datos['CONTRATO']['NPLAZOS'] = isset($temp[0]) ? str_replace('.', '', $temp[0]) : '';
if (isset($temp[4])) {
$datos['CONTRATO']['PLAZOS'] = str_replace('.', '', $temp[4]);
}
}
// Importe total
$nuevaKey = $this->findKeyByText($pdf, "marco de un contrato de crédito.");
if (isset($pdf[$nuevaKey])) {
$temp = explode("crédito.", $this->clean($pdf[$nuevaKey]));
if (isset($temp[1])) {
$temp = explode("EUR", $temp[1]);
$datos['CONTRATO']['TOTAL'] = str_replace('.', '', $temp[0]);
}
}
return $datos;
}
public function search_Datos_Abanca_cliente($page)
{
$dCliente=[];
$pdf = explode("\n", $page->getText());
// En este pdf solo tenemos nombre y dni
$nuevaKey = $this->findKeyByText($pdf, "D.N.I.:");
if (isset($pdf[$nuevaKey])) {
$temp = explode("D.N.I.:", $this->clean($pdf[$nuevaKey]));
$dCliente['NOM'] = trim($temp[0]);
if (isset($temp[1])) {
$dCliente['DNI'] = trim($temp[1]);
}
}
return $dCliente;
}
private function findKeyByText(array $pdf = [], string $text = ""): ?int
{
$keyText = null;
if ($pdf !== [] && $text !== "") {
foreach ($pdf as $key => $value) {
$haystack = $this->clean($value);
$needle = $this->clean($text);
if (str_contains($haystack, $needle)) {
$keyText = $key;
break;
}
}
}
return $keyText;
}
private function clean(string $s): string
{
// 1 – Normaliza acentos (NFC)
$s = Normalizer::normalize($s, Normalizer::FORM_C);
// 2 – Convierte NBSP y tabs en espacio normal
$s = str_replace(["\u{00A0}", "\t"], ' ', $s);
// 3 – Colapsa *cualquier* bloque de espacio‑o‑salto en un solo espacio
$s = preg_replace('/\s+/u', ' ', $s);
// 4 – Elimina espacios al principio y final
return trim($s);
}
}