<?php
require_once __DIR__ . '/../../../../vendor/autoload.php';
!class_exists('Empleado') && require_once __DIR__ . '/../models/empleadoModel.php';
class DocumentoPago extends Empleado
{
    public $idProceso;
    public $tipoAccion;
    public $tipoPlanilla;
    public $esAguinaldo;
    public $correlativoPlanilla;
    public $idUsuario;
    public $fechaRegistro;
    public $autoriza = "Pendiente";
    public $autorizaSuperior = 'Pendiente';

    function __construct()
    {
        !empty($this->fechaRegistro) && $this->fechaRegistro = date("d-m-Y h:i a", strtotime($this->fechaRegistro));
    }

    public static function verificarPorEmpleadoPlanilla($codempleado, $correlativo, $db = null): object
    {
        if (empty($db)) $db = obtenerConexion();

        $envios = 0;
        $generaciones = 0;
        $salarioLiquido = 0;

        $query = "EXEC rrhh.sp_verificarDocumentosPago :codempleado,:correlativo,:envios,:generaciones,:salarioLiquido;";
        $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
        $stmt->bindParam(":codempleado", $codempleado, PDO::PARAM_STR);
        $stmt->bindParam(":correlativo", $correlativo, PDO::PARAM_INT);
        $stmt->bindParam(":envios", $envios, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 4);
        $stmt->bindParam(":generaciones", $generaciones, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 4);
        $stmt->bindParam(":salarioLiquido", $salarioLiquido, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 50);

        try {
            $stmt->execute();

            return (object)[
                'status' => 200,
                'envios' => $envios,
                'generaciones' => $generaciones,
                'salarioLiquido' => $salarioLiquido
            ];
        } catch (PDOException $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        }
    }

    public function construir($departamento = null): object
    {
        $db = obtenerConexion();

        $respuesta = null;

        $query = "EXEC rrhh.sp_guardarProcesoDocumentoPagoEmpleado :tipoPlanilla,:correlativo,:tipoAccion,:idUsuario,:respuesta,:idProceso;";
        $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
        $stmt->bindParam(":tipoPlanilla", $this->tipoPlanilla, PDO::PARAM_INT);
        $stmt->bindParam(":correlativo", $this->correlativoPlanilla, PDO::PARAM_INT);
        $stmt->bindParam(":tipoAccion", $this->tipoAccion, PDO::PARAM_STR);
        $stmt->bindParam(":idUsuario", $this->idUsuario, PDO::PARAM_INT);
        $stmt->bindParam(":respuesta", $respuesta, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 300);
        $stmt->bindParam(":idProceso", $this->idProceso, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 40);

        try {
            $db->beginTransaction();

            if ($this->idProceso == 0) {
                $stmt->execute();
            } else {
                $respuesta = 'success';
            }

            $nombreArchivo = null;
            if ($respuesta == 'success') {
                $directorio = __DIR__ . '/../../docs/documentosPago/';
                if (!file_exists($directorio)) mkdir($directorio, 0777, true);

                if (empty($departamento) && !empty($this->codempleado)) {
                    $guardadoDetalle = $this->guardarDetalle($db);

                    if ($guardadoDetalle->status != 200 || ($guardadoDetalle->status == 200 && $guardadoDetalle->message != 'success')) {
                        $db->rollBack();
                        return (object)[
                            'status' => 500,
                            'message' => $respuesta . ' al guardar detalle de documento de pago'
                        ];
                    }

                    $this->email = $guardadoDetalle->email;
                    $this->nombreCompleto = $guardadoDetalle->nombreCompleto;
                    $this->nombrePuesto = $guardadoDetalle->nombrePuesto;

                    $query = "SELECT TOP(1) * FROM rrhh.view_pagosEmpleados WHERE codempleado = :codempleado AND correlativo = :correlativo";
                    $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
                    $stmt->bindParam(":codempleado", $this->codempleado, PDO::PARAM_STR);
                    $stmt->bindParam(":correlativo", $this->correlativoPlanilla, PDO::PARAM_INT);

                    $stmt->execute();

                    $datosPago = $stmt->fetch(PDO::FETCH_OBJ);

                    $pdf = $this->iniciarPDF(in_array($this->tipoPlanilla, [1]) ? 'Boleta' : 'Recibo');

                    if (in_array($this->tipoPlanilla, [1])) $this->agregarBoletaAPDF($pdf, $datosPago);

                    if (in_array($this->tipoPlanilla, [7])) $this->agregarReciboAPDF($pdf, $datosPago);

                    $nombreArchivo = 'documentoPago_' . $this->tipoPlanilla . '_' . $this->correlativoPlanilla . '_' . $this->codempleado . '.pdf';
                    $url = $directorio . $nombreArchivo;
                    $pdf->Output($url, 'F');

                    if ($this->tipoAccion == 'Enviar' && !empty($this->email)) {
                        $respuestaEnvio = $this->enviarDocumentoPago($url, $datosPago);

                        if ($respuestaEnvio->status != 200) {
                            $db->rollBack();
                            $respuestaEnvio->message = $respuestaEnvio->message . ' al enviar documento de pago';
                            return $respuestaEnvio;
                        }
                    }
                }

                if (!empty($departamento)) {
                    $query = "SELECT * FROM rrhh.view_pagosEmpleados WHERE correlativo = :correlativo AND coddepartamento = :departamento ORDER BY coddepartamento ASC;";
                    $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
                    $stmt->bindParam(":correlativo", $this->correlativoPlanilla, PDO::PARAM_INT);
                    $stmt->bindParam(":departamento", $departamento, PDO::PARAM_STR);

                    $stmt->execute();

                    $empleados = $stmt->fetchAll(PDO::FETCH_OBJ);

                    $pdfDepartamento = $this->iniciarPDF(in_array($this->tipoPlanilla, [1]) ? 'Boleta' : 'Recibo');

                    foreach ($empleados as $empleado) {
                        if ($this->tipoAccion == 'Enviar') {
                            if (empty($empleado->email) || strlen(trim($empleado->email)) == 0 || trim($empleado->email == '0')) continue;

                            $verificacion = DocumentoPago::verificarPorEmpleadoPlanilla($empleado->codempleado, $this->correlativoPlanilla, $db);
                            if ($verificacion->envios > 0) continue;
                        }

                        $pdfActual = $pdfDepartamento;

                        $this->codempleado = $empleado->codempleado;
                        $guardadoDetalle = $this->guardarDetalle($db);

                        if ($guardadoDetalle->status != 200 || ($guardadoDetalle->status == 200 && $guardadoDetalle->message != 'success')) {
                            $db->rollBack();
                            return (object)[
                                'status' => 500,
                                'message' => $respuesta . ' al guardar detalle de documento de pago'
                            ];
                        }

                        $this->nombreCompleto = $guardadoDetalle->nombreCompleto;
                        $this->nombrePuesto = $guardadoDetalle->nombrePuesto;
                        $this->email = $empleado->email;

                        if ($this->tipoAccion == 'Enviar') {
                            $pdfActual = $this->iniciarPDF(in_array($this->tipoPlanilla, [1]) ? 'Boleta' : 'Recibo');
                        }

                        if (in_array($this->tipoPlanilla, [1])) $this->agregarBoletaAPDF($pdfActual, $empleado);

                        if (in_array($this->tipoPlanilla, [7])) $this->agregarReciboAPDF($pdfActual, $empleado);

                        if ($this->tipoAccion == 'Enviar') {
                            $nombreArchivo = 'documentoPago_' . $this->tipoPlanilla . '_' . $this->correlativoPlanilla . '_' . $empleado->codempleado . '.pdf';
                            $url = $directorio . $nombreArchivo;
                            $pdfActual->Output($url, 'F');

                            $respuestaEnvio = $this->enviarDocumentoPago($url, $empleado);

                            if ($respuestaEnvio->status != 200) {
                                $db->rollBack();
                                $respuestaEnvio->message = $respuestaEnvio->message . ' al enviar documento de pago';
                                return $respuestaEnvio;
                            }
                        } else {
                            $pdfDepartamento = $pdfActual;
                        }
                    }

                    if ($this->tipoAccion == 'Descargar') {
                        $nombreDepartamento = isset($empleados[0]) ? trim($empleados[0]->nombreDepartamento) : '';
                        $nombreArchivo = str_replace(' ', '_', $nombreDepartamento) . '_' . $this->tipoPlanilla . '_' . $this->correlativoPlanilla . '.pdf';
                        $url = $directorio . $nombreArchivo;
                        $pdfDepartamento->Output($url, 'F');
                    }
                }

                $db->commit();
            } else {
                $db->rollBack();
            }

            return (object)[
                'status' => $respuesta == 'success' ? 200 : 500,
                'message' => $respuesta,
                'nombreArchivo' => $nombreArchivo
            ];
        } catch (PDOException $e) {
            $db->rollBack();
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        }
    }

    private function guardarDetalle($db): object
    {
        $respuesta = null;
        $nombreCompleto = null;
        $email = null;
        $nombrePuesto = null;

        $query = "EXEC rrhh.sp_guardarDetalleDocumentoPagoEmpleado :idProceso,:codempleado,:tipoAccion,:respuesta,:email,:nombreCompleto,:nombrePuesto;";
        $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
        $stmt->bindParam(":idProceso", $this->idProceso, PDO::PARAM_INT);
        $stmt->bindParam(":codempleado", $this->codempleado, PDO::PARAM_STR);
        $stmt->bindParam(":tipoAccion", $this->tipoAccion, PDO::PARAM_STR);
        $stmt->bindParam(":respuesta", $respuesta, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 300);
        $stmt->bindParam(":email", $email, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 300);
        $stmt->bindParam(":nombreCompleto", $nombreCompleto, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 300);
        $stmt->bindParam(":nombrePuesto", $nombrePuesto, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 300);

        try {
            $stmt->execute();

            return (object)[
                'status' => 200,
                'message' => $respuesta,
                'email' => $email,
                'nombreCompleto' => $nombreCompleto,
                'nombrePuesto' => $nombrePuesto
            ];
        } catch (PDOException $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        }
    }

    private function iniciarPDF($tipo = 'Boleta'): object
    {
        $pdf = $tipo == 'Boleta'
            ? new PDFBoleta(PDF_PAGE_ORIENTATION, PDF_UNIT, 'LETTER', true, 'UTF-8', false)
            : new PDFRecibo(PDF_PAGE_ORIENTATION, PDF_UNIT, 'LETTER', true, 'UTF-8', false);

        $pdf->setCreator(PDF_CREATOR);
        $pdf->SetAuthor('Departamento IT');
        $pdf->SetTitle('Documento de Pago');
        $pdf->SetSubject('Documento de Pago');
        $pdf->SetKeywords('Documento de Pago, RRHH, IT');
        $pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
        $pdf->setFooterFont(array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
        $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

        if ($tipo == 'Boleta') {
            $pdf->setMargins(8, 10, 10, true);
            $pdf->setAutoPageBreak(TRUE, 40);
        } else {
            $pdf->setMargins(17, 17, 10, true);
            $pdf->setAutoPageBreak(TRUE, 15);
        }
        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

        return $pdf;
    }

    private function agregarBoletaAPDF($pdf, object $datos = null)
    {
        $pdf->AddPage();

        $pdf->SetFont('helvetica', '', 6);

        $razonPago = $this->esAguinaldo ? 'Boleta de pago de aguinaldo' : 'Boleta de pago de sueldos y otros';
        $diaInicio = date("d", strtotime($datos->desde));
        $diaFinal = date("d", strtotime($datos->hasta));
        $nombreMes = DEFINICION_MESES[intval(date("m", strtotime($datos->desde)))]['long'];
        $anio = date("Y", strtotime($datos->desde));
        $nombreMesFinal = DEFINICION_MESES[intval(date("m", strtotime($datos->hasta)))]['long'];
        $anioFinal = date("Y", strtotime($datos->hasta));

        $periodo = $this->esAguinaldo ? $diaInicio . ' de ' . $nombreMes . ' de ' . $anio . ' al ' . $diaFinal . ' de ' . $nombreMesFinal . ' de ' . $anioFinal : $diaInicio . ' al ' . $diaFinal . ' de ' . $nombreMes . ' de ' . $anio;

        $tbl = '<br><br><br><br><br><br><br><br>
        <table width="60%" cellspacing="0" cellpadding="1" style="text-align: left;font-size:11px;">
            <tr>
                <td>
                    <b>' . $razonPago . '</b>
                </td>
            </tr>
            <tr>
                <td>
                    <b>Periodo: Del ' . $periodo . '</b>
                </td>
            </tr>';
        if (!$this->esAguinaldo) {
            $tbl .= '<tr>
                <td>
                    <b>D&iacute;as pagados: ' . $datos->totaldias . '</b>
                </td>
            </tr>';
        }
        $tbl = $tbl .= '</table>';

        $pdf->writeHTML($tbl, true, false, false, false, '');

        $pdf->SetFont('helvetica', '', 6);
        $tbl = '<br><br>
        <table width="60%" cellspacing="0" cellpadding="1" style="text-align: left;font-size:11px;">
            <tr>
                <td width="150px">
                    <b>C&oacute;digo:</b>
                </td>
                <td width="350px">' .
            $this->codempleado . '
                </td>
            </tr>
            <tr>
                <td>
                    <b>Nombre:</b>
                </td>
                <td>' .
            $this->nombreCompleto . '
                </td>
            </tr>
            <tr>
                <td>
                    <b>Cargo:</b>
                </td>             
                <td>' .
            $datos->nombrePuesto . '
                </td>
            </tr>
            <tr>
                <td>
                    <b>Departamento:</b>
                </td>
                <td>' .
            $datos->nombreDepartamento . '
                </td>
            </tr>';

        if ($this->esAguinaldo) {
            $tbl = $tbl .= '<tr>
                <td>
                    <b>Fecha de ingreso:</b>
                </td>
                <td>' .
                date('d-m-Y', strtotime($datos->fechaIngreso)) . '
                </td>
            </tr>
            <tr>
                <td>
                    <b>Sueldo:</b>
                </td>
                <td>$' .
                number_format(($datos->salario * 2), 2, '.', ',') . '
                </td>
            </tr>';
        }

        $tbl = $tbl .= '</table>';

        $pdf->writeHTML($tbl, true, false, false, false, '');

        $pdf->SetFont('helvetica', '', 6);
        if ($this->esAguinaldo) {
            $fechaIngreso = new DateTime(date("Y-m-d", strtotime($datos->fechaIngreso . ' -1 day')));
            $fechaFinal = new DateTime(date("Y-m-d", strtotime($datos->hasta)));

            $datos->totaldias = $fechaIngreso->diff($fechaFinal)->format('%a');
            $datos->sueldo = $datos->sueldobase;
        }
        $totalIngresos = $datos->sueldo + $datos->vacaciones + $datos->otrosingresos + $datos->viaticos;
        $descripcionSueldo = $this->esAguinaldo ? ($datos->totaldias >= 365 ? 'Aguinaldo completo' : 'Aguinaldo proporcional') : 'Sueldo';

        $tbl = '<style>table td{text-align:center; font-size:11px; border: 1px solid #ddd;}</style>
        <table cellspacing="0" cellpadding="1" style="text-align: center;">
            <tr bgcolor="#cccccc">
                <td colspan="2">
                    &nbsp;&nbsp;<b>Detalle de ingresos:</b>
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;<b>' . $descripcionSueldo . ':</b>
                </td>
                <td>
                    $' . number_format($datos->sueldo, 2, '.', ',') . '
                </td>
            </tr>';

        if (!$this->esAguinaldo) {
            $tbl = $tbl .= '<tr>
                <td>
                    &nbsp;&nbsp;<b>Vacación 30%:</b>
                </td>
                <td>
                    $' . number_format($datos->vacaciones, 2, '.', ',') . '
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;<b>Viaticos:</b>
                </td>
                <td>
                    $' . number_format($datos->viaticos, 2, '.', ',') . '
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;<b>Otros ingresos</b>
                </td>
                <td>
                    $' . number_format($datos->otrosingresos, 2, '.', ',') . '
                </td>
            </tr>';
        }

        $tbl = $tbl .= '<tr>
                <td>
                    &nbsp;&nbsp;
                </td>
                <td>
                    &nbsp;&nbsp;
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;<b>Total ingresos:</b>
                </td>
                <td>
                    <b>$' . number_format($totalIngresos, 2, '.', ',') . '</b>
                </td>
             </tr>
        </table>';
        $pdf->writeHTML($tbl, true, false, false, false, '');

        $pdf->SetFont('helvetica', '', 6);

        $totalDeducciones = $datos->isss + $datos->afp + $datos->renta + $datos->procuraduria + $datos->fsv + $datos->anticipos + $datos->prestamobanco + $datos->prestamointerno + $datos->otrosdescuentos;

        $tbl = '<style>table td{text-align:center; font-size:11px; border: 1px solid #ddd;}</style>
        <table cellspacing="0" cellpadding="1" style="text-align: center;">
            <tr bgcolor="#cccccc">
                <td colspan="2">
                    &nbsp;&nbsp;<b>Menos deducciones:</b>
                </td>
            </tr>';

        if (!$this->esAguinaldo) {
            $tbl = $tbl .= '<tr>
                <td>
                    &nbsp;&nbsp;<b>ISSS:</b>
                </td>
                <td>
                    $' . number_format($datos->isss, 2, '.', ',') . '
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;<b>AFP:</b>
                </td>
                <td>
                    $' . number_format($datos->afp, 2, '.', ',') . '
                </td>
            </tr>';
        }

        $tbl = $tbl .= '<tr>
                <td>
                    &nbsp;&nbsp;<b>Impto. S/Renta:</b>
                </td>
                <td>
                    $' . number_format($datos->renta, 2, '.', ',') . '
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;<b>Procuraduría:</b>
                </td>
                <td>
                    $' . number_format($datos->procuraduria, 2, '.', ',') . '
                </td>
            </tr>';

        if (!$this->esAguinaldo) {
            $tbl = $tbl .= '<tr>
                <td>
                    &nbsp;&nbsp;<b>FSV:</b></td>
                <td>
                    $' . number_format($datos->fsv, 2, '.', ',') . '</td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;<b>Anticipo sueldo:</b>
                </td>
                <td>
                    $' . number_format($datos->anticipos, 2, '.', ',') . '
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;<b>Prestamo bancos:</b>
                </td>
                <td>
                    $' . number_format($datos->prestamobanco, 2, '.', ',') . '
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;<b>Prestamo interno:</b>
                </td>
                <td>
                    $' . number_format($datos->prestamointerno, 2, '.', ',') . '
                </td>
            </tr>';
        }
        $tbl = $tbl .= '<tr>
                <td>
                    &nbsp;&nbsp;<b>Otros descuentos:</b>
                </td>
                <td>
                    $' . number_format($datos->otrosdescuentos, 2, '.', ',') . '
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;
                </td>
                <td>
                    &nbsp;&nbsp;
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;<b>Total deducciones:</b>
                </td>
                <td><b>
                    $' . number_format($totalDeducciones, 2, '.', ',') . '</b>
                </td>
            </tr>
        </table>';

        $pdf->writeHTML($tbl, true, false, false, false, '');

        $pdf->SetFont('helvetica', '', 6);

        $sueldoLiquido = $totalIngresos - $totalDeducciones;
        $tbl = '
        <table cellspacing="0" cellpadding="1" style="text-align: center;">
            <tr>
                <td>
                    &nbsp;&nbsp;
                </td>
                <td>
                    &nbsp;&nbsp;
                </td>
            </tr>
            <tr>
                <td style="text-align: center; font-size:12px;border-top: .5px solid #221F1F; border-bottom: .5px solid #221F1F;">
                    &nbsp;&nbsp;<b>Sueldo l&iacute;quido a pagar:</b>
                </td>             
                <td style="text-align: center; font-size:12px; border-top: .5px solid #221F1F; border-bottom: .5px solid #221F1F;">
                    &nbsp;&nbsp;<b>$' . number_format($sueldoLiquido, 2, '.', ',') . '</b>
                </td>
            </tr>
        </table>';

        $pdf->writeHTML($tbl, true, false, false, false, '');

        $pdf->SetFont('helvetica', '', 6);

        $urlFirma =  __DIR__ . '/../../assets/images/firmaRRHH.png';

        $tbl = '<br><br><br><br><br><br><br><br>
        <table cellspacing="0" cellpadding="1" style="text-align: center;">
            <tr>
                <td>
                    &nbsp;&nbsp;
                </td>
                <td>
                    &nbsp;&nbsp;
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;
                </td>
                <td>
                    <img src="' . $urlFirma . '" width="300" />
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;&nbsp;
                </td>             
                <td style="text-align: center; font-size:10px; border-top: .5px solid #221F1F;">
                    Autorizado ' . $this->autorizaSuperior . ' <br> 
                    Gerente Administrativo Financiero
                </td>
            </tr>
        </table>';

        $pdf->writeHTML($tbl, true, false, false, false, '');
    }

    private function agregarReciboAPDF($pdf, object $datos = null)
    {
        $fechaPago = date('d/m/Y', strtotime($datos->hasta));
        $duiempleado = $datos->dui;
        $nitempleado = $datos->nit;
        $descripcion = $datos->descripcionServiciosProfesionales;

        $fechaInicio = date('d/m/Y', strtotime($datos->desde));
        $fechaFinal = date('d/m/Y', strtotime($datos->hasta));

        empty($descripcion) && $descripcion = 'SERVICIOS PROFESIONALES VARIOS';

        $descripcion = $descripcion . ' DESDE EL ' . $fechaInicio . ' HASTA EL ' . $fechaFinal;

        $sueldo = '$' . number_format(floatval($datos->sueldo), 2, '.', ',');
        $renta = '$' . number_format(floatval($datos->renta), 2, '.', ',');
        $sueldoliquido = '$' . number_format(floatval($datos->sueldoLiquido), 2, '.', ',');
        $prestamointerno = (!empty($datos->prestamointerno) && floatval($datos->prestamointerno)) ? '$' . number_format(floatval($datos->prestamointerno), 2, '.', ',') : '';

        $arrSueldo = explode('.', strval($datos->sueldoLiquido));
        $enteroLetras = NumeroALetras::convertir($arrSueldo[0]);
        $centavos = isset($arrSueldo[1]) ? str_pad(substr($arrSueldo[1], 0, 2), 2, '0', STR_PAD_LEFT) : '00';

        $sueldoLiquidoLetras = $enteroLetras . ' ' . $centavos . '/100';
        $pdf->AddPage();
        $pdf->SetFont('helvetica', '', 8);
        $tbl = '<table width="644px" cellpadding="0" border="1">
        <tr>
            <td width="644px" height="868px">
                <span style="color:white;">a</span>
                <table width="600px" border="0" cellpadding="0">
                    <tr>
                        <td width="615px" colspan="3" style="text-align:center; font-weight:bold; border-bottom:1px solid black; font-size:13px;">DOCUMENTO EMITIDO POR SUJETO EXCLUIDO (ART. 119 C.T.)</td>
                    </tr>
                    <tr>
                        <td colspan="3" height="10px"></td>
                    </tr>
                    <tr>
                        <td width="315px" style="line-height:20px; text-align:left;"></td>
                        <td width="120px" style="line-height:20px; text-align:left;">Comprobante N°: </td>
                        <td width="180px" style="line-height:20px; text-align:left;">S/N</td>
                    </tr>
                    <tr>
                        <td width="315px" style="line-height:20px; text-align:left;"></td>
                        <td width="120px" style="line-height:20px; text-align:left;">Fecha: </td>
                        <td width="180px" style="line-height:20px; text-align:left;">San Salvador ' . $fechaPago . '</td>
                    </tr>
                    <tr>
                        <td colspan="3" height="18px"></td>
                    </tr>
                    <tr style="line-height:20px;">
                        <td width="200px" style="font-weight:bold; font-size:10px; text-align:left">NOMBRE DE SUJETO EXCLUIDO:</td>
                        <td width="415px" style="font-size:10px; text-align:left">' . $this->nombreCompleto . '</td>
                    </tr>
                    <tr style="line-height:20px;">
                        <td width="200px" style="font-weight:bold; font-size:10px; text-align:left">GIRO:</td>
                        <td width="415px" style="font-size:10px; text-align:left"></td>
                    </tr>
                    <tr style="line-height:20px;">
                        <td width="200px" style="font-weight:bold; font-size:10px; text-align:left">DIRECCIÓN:</td>
                        <td width="415px" style="font-size:10px; text-align:left"></td>
                    </tr>
                    <tr style="line-height:20px;">
                        <td width="100px" style="font-weight:bold; font-size:10px; text-align:left">NIT:</td>
                        <td width="207px" style="font-size:10px; text-align:left">' . $nitempleado . '</td>
                        <td width="100px" style="font-weight:bold; font-size:10px; text-align:left">DUI:</td>
                        <td width="208px" style="font-size:10px; text-align:left">' . $duiempleado . '</td>
                    </tr>
                    <tr>
                        <td width="615px" height="15px"></td>
                    </tr>
                    <tr>
                        <td width="615px" style="font-size:9.5px;">
                            <table width="605px" border="0" cellpadding="0">
                                <tr>
                                    <td style="border:1px solid black;" width="605px">
                                        <table width="600px" border="0" cellpadding="0">
                                        <tr>
                                            <td style="font-weight:bold; line-height:18px;">
                                                NOMBRE DEL CONTRIBUYENTE:
                                            </td>
                                        </tr>
                                        <tr>
                                            <td width="10px"></td>
                                            <td width="590px" style="line-height:16px;">CONSTRU SERVICES S.A. DE C.V.</td>
                                        </tr>
                                        </table>
                                    </td>
                                </tr>
                                <tr>
                                    <td style="border:1px solid black;" width="175px">
                                        <table width="170px" border="0" cellpadding="0">
                                        <tr>
                                            <td style="font-weight:bold; line-height:18px;">
                                                MUNICIPIO:
                                            </td>
                                        </tr>
                                        <tr>
                                            <td width="10px"></td>
                                            <td width="160px" style="line-height:16px;"></td>
                                        </tr>
                                        </table>
                                    </td>
                                    <td style="border:1px solid black;" width="175px">
                                        <table width="170px" border="0" cellpadding="0">
                                        <tr>
                                            <td style="font-weight:bold; line-height:18px;">
                                                DEPARTAMENTO:
                                            </td>
                                        </tr>
                                        <tr>
                                            <td width="10px"></td>
                                            <td width="160px" style="line-height:16px;">SAN SALVADOR</td>
                                        </tr>
                                        </table>
                                    </td>
                                    <td style="border:1px solid black;" width="255px">
                                        <table width="250px" border="0" cellpadding="0">
                                        <tr>
                                            <td style="font-weight:bold; line-height:18px;">
                                                GIRO:
                                            </td>
                                        </tr>
                                        <tr>
                                            <td width="10px"></td>
                                            <td width="240px" style="line-height:16px;"></td>
                                        </tr>
                                        </table>
                                    </td>
                                </tr>
                                <tr>
                                    <td style="border:1px solid black;" width="350px">
                                        <table width="345px" border="0" cellpadding="0">
                                        <tr>
                                            <td style="line-height:22px;">
                                                <span style="font-weight:bold;">NIT:</span>
                                                0614-220416-103-9
                                            </td>
                                        </tr>
                                        </table>
                                    </td>
                                    <td style="border:1px solid black;" width="255px">
                                        <table width="250px" border="0" cellpadding="0">
                                        <tr>
                                            <td style="line-height:22px;">
                                                <span style="font-weight:bold;">NRC:</span>
                                                249754-0
                                            </td>
                                        </tr>
                                        </table>
                                    </td>
                                </tr>
                                <tr>
                                    <td style="border:1px solid black; line-height:22px; font-weight:bold; text-align:center;" width="100px">
                                        CANTIDAD    
                                    </td>
                                    <td style="border:1px solid black; line-height:22px; font-weight:bold;" width="250px">
                                        DESCRIPCIÓN
                                    </td>
                                    <td style="border:1px solid black; line-height:22px; font-weight:bold; text-align:center;" width="120px">
                                        PRECIO UNITARIO
                                    </td>
                                    <td style="border:1px solid black; line-height:22px; font-weight:bold; text-align:center;" width="135px">
                                        VENTAS
                                    </td>
                                </tr>
                                <tr>
                                    <td height="250px" style="border:1px solid black; text-align:center; line-height:45px;" width="100px;">
                                        1.00    
                                    </td>
                                    <td height="250px" style="border:1px solid black;" width="250px; padding:5px;">
                                        <table width="250px" border="0" cellpadding="4">
                                            <tr>
                                                <td width="240px;" style="text-align:justify; line-height:14px;">' . $descripcion . '
                                                </td>
                                            </tr>
                                        </table>
                                    </td>
                                    <td height="250px" style="border:1px solid black; text-align:center; line-height:45px;" width="120px">
                                        
                                    </td>
                                    <td height="250px" style="border:1px solid black; text-align:center; line-height:45px;" width="135px">
                                        ' . $sueldo . '
                                    </td>
                                </tr>
                            </table>
                            <table width="605px" border="0" cellpadding="0">
                                <tr>
                                    <td height="25px"></td>
                                </tr>
                                <tr>
                                    <td width="370px">
                                        <table width="370px" border="0" cellpadding="0" style="line-height:14px;">
                                            <tr>
                                                <td width="370px" style="font-weight:bold;">
                                                    OPERACIONES MAYORES A $228.00
                                                </td>
                                            </tr>
                                            <tr>
                                                <td width="370px" style="font-weight:bold;">
                                                    RECIBÍ LA CANTIDAD DE:
                                                </td>
                                            </tr>
                                            <tr>
                                                <td width="370px">
                                                    ' . $sueldoLiquidoLetras . ' DÓLARES
                                                </td>
                                            </tr>
                                            <tr>
                                                <td width="370px">
                                                    <table border="0" width="370px" cellpadding="0">
                                                        <tr>
                                                            <td width="70px"></td>
                                                            <td width="200px" height="110px" style="border-bottom:1px solid black;"></td>
                                                        </tr>
                                                        <tr>
                                                            <td width="70px"></td>
                                                            <td width="200px" style="line-height:14px; text-align:center; font-weight:bold;">FIRMA</td>
                                                        </tr>
                                                        <tr>
                                                            <td width="70px"></td>
                                                            <td width="200px" style="line-height:14px; text-align:center; font-weight:bold;">SUJETO EXCLUIDO</td>
                                                        </tr>
                                                    </table>
                                                </td>
                                            </tr>
                                        </table>
                                    </td>
                                    <td width="235px">
                                        <table width="235px" border="0" cellpadding="4">
                                            <tr>
                                                <td width="230px" style="border:1px solid black;">
                                                    <table width="230px" border="0" cellpadding="0">
                                                        <tr>
                                                            <td width="130px" style="text-align:left; line-height:14px;">SUMAS</td>
                                                            <td width="80px" style="text-align:right; line-height:14px;">' . $sueldo . '</td>
                                                        </tr>
                                                        <tr>
                                                            <td width="130px" style="text-align:left; line-height:14px;">(-10%) ISR</td>
                                                            <td width="80px" style="text-align:right; line-height:14px;">' . $renta . '</td>
                                                        </tr>
                                                        <tr>
                                                            <td height="10px"></td>
                                                        </tr>
                                                        <tr>
                                                            <td width="130px" style="text-align:left; line-height:14px;">SUBTOTAL</td>
                                                            <td width="80px" style="text-align:right; line-height:14px;"></td>
                                                        </tr>
                                                        <tr>
                                                            <td width="130px" style="text-align:left; line-height:14px; border-bottom:1px solid black;">DESC. PRÉSTAMO INT.</td>
                                                            <td width="80px" style="text-align:right; line-height:14px; border-bottom:1px solid black;">' . $prestamointerno . '</td>
                                                        </tr>
                                                        <tr>
                                                            <td width="130px" style="text-align:left; line-height:25px;">TOTAL</td>
                                                            <td width="80px" style="text-align:right; line-height:25px;">' . $sueldoliquido . '</td>
                                                        </tr>
                                                    </table>
                                                </td>
                                            </tr>
                                        </table>
                                    </td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                    <tr>
                        <td width="615px" colspan="3" height="95px"></td>
                    </tr>
                    <tr>
                        <td width="615px" colspan="3" style="text-align:center;font-size:12px;">ORIGINAL: CLIENTE QUE ADQUIERE LOS BIENES Y SERVICIOS</td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>';
        $pdf->writeHTML($tbl, true, false, false, false, '');
    }

    private function enviarDocumentoPago($adjuntos, $datos)
    {
        $urlPlantilla = __DIR__ . '/../../docs/plantillas/documentoPago.html';

        $desde = date('d-m-Y', strtotime($datos->desde));
        $hasta = date('d-m-Y', strtotime($datos->hasta));
        $anioFinal = date('Y', strtotime($datos->hasta));
        $razonPago = $this->esAguinaldo ? 'el aguinaldo del año ' . $anioFinal : 'la quincena del ' . $desde . ' al ' . $hasta;

        $parametros = ['nombreCompleto' => $this->nombreCompleto, 'razonPago' => $razonPago, 'autoriza' => $this->autoriza];

        $email = new CorreoElectronico($urlPlantilla, $parametros);
        $tipoDocumento = in_array($this->tipoPlanilla, [1]) ? 'Boleta' : 'Recibo';
        $asunto = mb_strtoupper($this->esAguinaldo ? $tipoDocumento . ' de aguinaldo' : $tipoDocumento . ' de pago', 'UTF-8');

        $respuesta = $email->enviar($this->email, $this->nombreCompleto, $asunto, [$adjuntos]);

        return $respuesta;
    }
}

class PDFBoleta extends TCPDF
{
    function setMargin()
    {
        $this->SetMargins(22, 24, 22, 15);
        $this->SetHeaderMargin(10);
        $this->SetFooterMargin(PDF_MARGIN_FOOTER + 10);
    }

    function Header()
    {
        $bMargin = $this->getBreakMargin();
        $auto_page_break = $this->AutoPageBreak;

        $this->SetAutoPageBreak($auto_page_break, $bMargin);

        // Logo
        $urlLogo = __DIR__ . '/../../assets/images/logo.png';
        $this->Image($urlLogo, 10, 5, 15, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false);

        $dia = date("d");
        $mes = date("m");
        $anio = date("Y");

        $nombreMes = DEFINICION_MESES[intval($mes)]['long'];

        $tablaHeader = '<table>
                
                <tr>
                  <td width="74px">&nbsp;</td>
                  <td width="290px">&nbsp;</td>
                  <td style="text-align: right; font-size:11px;">&nbsp;</td>
                </tr>
                <tr>
                  
                  <td width="174px">&nbsp;</td>
                  <td width="350px"><h2>' . NOMBRE_EMPRESA . '</h2></td>
                  <td style="text-align: right;font-size:11px;">&nbsp;</td>
                </tr>
                 <tr>
                  <td width="74px">&nbsp;</td>
                  <td width="290px">&nbsp;</td>
                  <td style="text-align: right; font-size:11px;">&nbsp;</td>
                </tr>
                <tr>
                  
                  <td width="74px">&nbsp;</td>
                  <td width="290px">&nbsp;</td>
                  <td width="200px" style="text-align: right;font-size:10px;">San Salvador, ' . $dia . ' de ' . $nombreMes . ' de ' . $anio . '</td>
                </tr>
                
              </table>';

        $this->writeHTML($tablaHeader, true, false, false, false, '');

        $this->setPageMark();
    }

    function Footer()
    {
        $this->SetY(-15);
        $this->SetFont('helvetica', 'B', 8);
        $this->Cell(0, 7, 'Página ' . $this->getAliasNumPage() . ' de ' . $this->getAliasNbPages(), 0, false, 'R', 0, '', 0, false, 'T', 'M');
    }
};

class PDFRecibo extends TCPDF
{
    function setMargin()
    {
        $this->SetMargins(22, 24, 22, 15);
        $this->SetHeaderMargin(10);
        $this->SetFooterMargin(PDF_MARGIN_FOOTER);
    }

    function Header()
    {
        $bMargin = $this->getBreakMargin();
        $auto_page_break = $this->AutoPageBreak;

        $this->SetAutoPageBreak($auto_page_break, $bMargin);
    }

    function Footer()
    {
        $this->SetY(-10);
        $this->SetFont('helvetica', 'B', 8);
        $this->Cell(0, 7, 'Página ' . $this->getAliasNumPage() . ' de ' . $this->getAliasNbPages(), 0, false, 'R', 0, '', 0, false, 'T', 'M');
    }
}
