<?php

namespace Predial\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use Predial\Predio;
use Illuminate\Support\Facades\Response;
use Predial\Http\Controllers\ExtractoController;
use Predial\Http\Controllers\LiquidadorInteresesController;
use Predial\Vencimiento;
use Predial\ParametrizacionAnio;
use Fpdf;

class MiFpdf extends \Anouar\Fpdf\Fpdf {
    public $logoPath   = '';
    public $numRes     = '';
    public $propietario = '';
    public $cedula     = '';
    public $direccion  = '';
    public $catastral  = '';
    public $avaluo     = '';
    public $vigencias  = '';

    public function Header() {
        // Logo
        if (!empty($this->logoPath)) {
            $this->Image($this->logoPath, 15, 8, 20);
        }
        $this->Ln(10);
        $this->SetFont('Arial', 'B', 9);

        $this->SetX(35);
        $this->Cell(160, 5, 'REPUBLICA DE COLOMBIA', 0, 0, 'C');
        $this->Ln(5);
        $this->SetX(35);
        $this->Cell(160, 5, 'DEPARTAMENTO DE SANTANDER', 0, 0, 'C');
        $this->Ln(5);
        $this->SetX(35);
        $this->Cell(160, 5, 'MUNICIPIO DE BARBOSA', 0, 0, 'C');
        $this->Ln(7);
        $this->SetX(35);
        $this->Cell(160, 5, utf8_decode('RESOLUCIÓN Nº ' . $this->numRes), 0, 0, 'C');
        $this->Ln(8);
        $this->Cell(170, 5, utf8_decode('Por medio de la cual se liquida oficialmente el impuesto predial'), 0, 0, 'C');
        $this->Ln(10);

        // Datos del predio
        $this->SetX(30);
        $this->Cell(60, 5, 'CONCEPTO:', 0, 0);
        $this->SetFont('Arial', '', 9);
        $this->SetX(103);
        $this->Cell(110, 5, 'IMPUESTO PREDIAL UNIFICADO', 0, 0, 'L');
        $this->Ln(5);

        $this->SetX(30);
        $this->SetFont('Arial', 'B', 9);
        $this->Cell(60, 5, 'PROPIETARIO:', 0, 0);
        $this->SetFont('Arial', '', 9);
        $this->SetX(103);
        $this->Cell(110, 5, utf8_decode($this->propietario), 0, 0, 'L');
        $this->Ln(5);

        $this->SetX(30);
        $this->SetFont('Arial', 'B', 9);
        $this->Cell(60, 5, 'CEDULA DE CIUDADANIA:', 0, 0);
        $this->SetFont('Arial', '', 9);
        $this->SetX(103);
        $this->Cell(110, 5, $this->cedula, 0, 0, 'L');
        $this->Ln(5);

        $this->SetX(30);
        $this->SetFont('Arial', 'B', 9);
        $this->Cell(60, 5, utf8_decode('DIRECCIÓN:'), 0, 0);
        $this->SetFont('Arial', '', 9);
        $this->SetX(103);
        $this->Cell(110, 5, utf8_decode($this->direccion), 0, 0, 'L');
        $this->Ln(5);

        $this->SetX(30);
        $this->SetFont('Arial', 'B', 9);
        $this->Cell(60, 5, utf8_decode('CODIGO CATASTRAL:'), 0, 0);
        $this->SetFont('Arial', '', 9);
        $this->SetX(103);
        $this->Cell(110, 5, $this->catastral, 0, 0, 'L');
        $this->Ln(5);

        $this->SetX(30);
        $this->SetFont('Arial', 'B', 9);
        $this->Cell(60, 5, utf8_decode('AVALÚO CATASTRAL:'), 0, 0);
        $this->SetFont('Arial', '', 9);
        $this->SetX(103);
        $this->Cell(110, 5, number_format($this->avaluo, 2), 0, 0, 'L');
        $this->Ln(5);

        $this->SetX(30);
        $this->SetFont('Arial', 'B', 9);
        $this->Cell(60, 5, utf8_decode('VIGENCIAS:'), 0, 0);
        $this->SetFont('Arial', '', 9);
        $this->SetX(103);
        $this->Cell(110, 5, $this->vigencias, 0, 0, 'L');
        $this->Ln(10);
    }
    public function Footer() {
    $this->SetY(-15);
    $this->SetFont('Arial', 'I', 8);
    $fecha    = date('d/m/Y H:i:s');
    $usuario  = session('usuario'); // ← cambia 'usuario' por el nombre de tu variable de sesión
    $this->Cell(0, 10, utf8_decode('Usuario: ' . $usuario . '   Fecha Impresión: ' . $fecha), 0, 0, 'L');
    $this->Cell(0, 10, utf8_decode('Página ') . $this->PageNo() . ' de {nb}', 0, 0, 'R');
    }
};

class ResolucionCobro extends Controller
{

    public $valorD;

    /**
     * index
     * Metodo para mostrar la vista del proceos de resoluciones de cobro
     * @author Alexander Numpaque
     * @package Predial
     * @return ResolcionC (View()) Vista principal de resolucón
     */
    public function index()
    {
        $carteras = DB::table('gr_cartera_obligada')
            ->select(DB::raw("DATE_FORMAT(fecha, '%d/%m/%Y') AS fecha"), 'fecha AS normf')
            ->groupBy('normf')
            ->orderBy('normf', 'DESC')
            ->get();

        $codigocastastralAsc = DB::table('gp_predio1 as pre')
            ->select(
                'pre.id_unico',
                DB::raw("CONCAT_WS(' ', TRIM(pre.codigo_catastral), TRIM(ter.nombres), TRIM(ter.numero), TRIM(pre.codigo_catastral_anterior)) AS valor")
            )
            ->leftJoin('gp_tercero_predio as tpr', function ($join) {
                $join->on('tpr.predio', '=', 'pre.id_unico')
                    ->where('tpr.orden', '=', '001');
            })
            ->leftJoin('gr_propietarios as ter', 'tpr.tercero', '=', 'ter.id_unico')
            ->join('gr_cartera_obligada as o', 'o.predio', '=', 'pre.id_unico')
            ->whereNotNull('pre.codigo_catastral')
            ->orderBy('pre.codigo_catastral', 'ASC')
            ->distinct()
            ->get();

        $codigocastastralDesc = DB::table('gp_predio1 as pre')
            ->select(
                'pre.id_unico',
                DB::raw("CONCAT_WS(' ', TRIM(pre.codigo_catastral), TRIM(ter.nombres), TRIM(ter.numero), TRIM(pre.codigo_catastral_anterior)) AS valor")
            )
            ->leftJoin('gp_tercero_predio as tpr', function ($join) {
                $join->on('tpr.predio', '=', 'pre.id_unico')
                    ->where('tpr.orden', '=', '001');
            })
            ->leftJoin('gr_propietarios as ter', 'tpr.tercero', '=', 'ter.id_unico')
            ->join('gr_cartera_obligada as o', 'o.predio', '=', 'pre.id_unico')
            ->whereNotNull('pre.codigo_catastral')
            ->orderBy('pre.codigo_catastral', 'DESC')
            ->distinct()
            ->get();

        return view("resolucion.resolucionC", compact('carteras', 'codigocastastralAsc', 'codigocastastralDesc'));
    }

    /**
     * responseReq
     * Metodo de respuesta recibida del formulario en el que se genera la impresión del archivo de excel
     * @author Alexander Numpaque
     * @package Predial
     * @param $requestr (Request) action post recibida del formulario
     * @return $content Response Archivo de Word con los predios que tienen adeudo
     */
public function responseReq(Request $request)
{
    $idI = $request->sltPredioI;
    $idF = $request->sltPredioF;
    $cod_i = DB::select(
        "SELECT codigo_catastral as codi
         FROM    gp_predio1
         WHERE id_unico=$idI
         ORDER BY id_unico DESC LIMIT 1"
    );
    $cod_in = $cod_i[0]->codi;
    $cod_f = DB::select(
        "SELECT codigo_catastral as codf
         FROM    gp_predio1
         WHERE id_unico=$idF
         ORDER BY id_unico DESC LIMIT 1"
    );
    $cod_fi = $cod_f[0]->codf;

    $predios = DB::table('gr_cartera_obligada as gco')
        ->leftJoin('gp_predio1 as gpr', 'gco.predio', '=', 'gpr.id_unico')
        ->leftJoin('gr_avaluo as gav', 'gpr.id_unico', '=', 'gav.predio')
        ->whereBetween('gpr.codigo_catastral', [$cod_in, $cod_fi])
        ->where('gco.fecha', $request->sltCartera)
        ->select('gpr.id_unico', 'gpr.direccion', 'gpr.codigo_catastral')
        ->distinct()
        ->get();

    $annoI = $request->txtAnnoI;
    $annoF = $request->txtAnnoF;
    $monto = $request->txtMonto;
    $fechaG = $request->txtFechaF;

    $tipoD = DB::table("gf_tipo_documento AS td")
        ->where("td.nombre", "=", "Resolucion Coactivo Barbosa")
        ->first();

    $usuarioTercero = DB::table('gf_tercero')
        ->where('id_unico', session('usuario_tercero'))
        ->select(DB::raw("COALESCE(
            NULLIF(TRIM(CONCAT_WS(' ',
                TRIM(razonsocial),
                TRIM(nombreuno),
                TRIM(nombredos),
                TRIM(apellidouno),
                TRIM(apellidodos)
            )), ''),
            ''
        ) as nombre_completo"))
        ->first();

    $nombreUsuario  = !empty($usuarioTercero) ? $usuarioTercero->nombre_completo : '';
    $usuario  = session('usuario');
    
    $fechaImpresion = date('d/m/Y H:i:s');

    if (!empty($tipoD)) {

        $html  = "<html>";
        $html .= "\n\t<head>";
        $html .= "\n\t\t<meta charset='utf-8'>";
        $html .= "\n\t\t<style type='text/css' media='screen'>";
        $html .= "\n\t\t\thtml, body { font-family: Arial, sans-serif; font-size: 11px; }";
        $html .= "\n\t\t\th1, h2, h3, h4 { font-weight: 800; }";
        $html .= "\n\t\t\th1, h2, h3, h4, h5, h6, p { font-family: Arial, sans-serif; }";
        $html .= "\n\t\t\t.bold { font-weight: 800; }";
        $html .= "\n\t\t\t.printx { page-break-after: always; }";
        $html .= "\n\t\t\tthead { display: table-header-group; }";
        $html .= "\n\t\t\ttbody { display: table-row-group; }";
        $html .= "\n\t\t\t.footer-impresion {";
        $html .= "\n\t\t\t\tfont-size: 9px; color: #555; text-align: justify;";
        $html .= "\n\t\t\t\tmargin-top: 10px; border-top: 1px solid #ccc; padding-top: 4px;";
        $html .= "\n\t\t\t}";
        $html .= "\n\t\t</style>";
        $html .= "\n\t</head>";
        $html .= "\n\t<body>";

        $liq  = new LiquidadorInteresesController();
        $xanno = "";
        $cont  = 0;

        foreach ($predios as $value) {
            $valorD = 0;
            $deb    = 0;
            $ultimop = ExtractoController::obtnerultimoannopago($value->id_unico);
            if ($ultimop < date("Y") || empty($ultimop)) {
                $xanno   = empty($ultimop) ? $annoI : $ultimop;
                $avaluos = ResolucionCobro::obtenerAvaluos($value->id_unico, $xanno, $annoF);

                $propros = DB::table("gp_tercero_predio AS gtp")
                    ->select("gpr.nombres", "gpr.numero")
                    ->leftJoin("gr_propietarios as gpr", "gtp.tercero", "=", "gpr.id_unico")
                    ->where("gtp.predio", "=", $value->id_unico)
                    ->where("gtp.propietario", "=", 0)
                    ->where("gtp.orden", "=", "001")
                    ->first();

                $copros = DB::table("gp_tercero_predio AS gtp")
                    ->select("gpr.nombres", "gpr.numero")
                    ->leftJoin("gr_propietarios as gpr", "gtp.tercero", "=", "gpr.id_unico")
                    ->where("gtp.predio", "=", $value->id_unico)
                    ->where("gtp.propietario", "!=", 0)
                    ->where("gtp.orden", "!=", "001")
                    ->get();

                $avaluoF = DB::table("gr_avaluo")
                    ->select("valor")
                    ->where("anno", "=", $annoF)
                    ->where("predio", "=", $value->id_unico)
                    ->first();
                $avaluo_val = !empty($avaluoF) ? $avaluoF->valor : 0;

                if (isset($propros)) {

                    $valorTo = DB::table('gr_cartera_obligada as gco')
                        ->leftJoin('gp_predio1 as gpr', 'gco.predio', '=', 'gpr.id_unico')
                        ->leftJoin('gr_avaluo as gav', 'gco.avaluo', '=', 'gav.id_unico')
                        ->leftJoin('gr_concepto as gct', 'gco.concepto', '=', 'gct.id_unico')
                        ->where('gco.fecha', $request->sltCartera)
                        ->where("gco.predio", "=", $value->id_unico)
                        ->select(
                            'gpr.codigo_catastral as cod',
                            'gav.anno',
                            DB::raw('sum(if(gco.concepto = 1, gco.valor, 0)) as imp'),
                            DB::raw('sum(if(gco.concepto = 4, gco.valor, 0)) as "int"'),
                            DB::raw('sum(if(gco.concepto = 3, gco.valor, 0)) as cas'),
                            DB::raw('sum(if(gco.concepto = 8, gco.valor, 0)) as inc'),
                            DB::raw('sum(if(gco.concepto = 7, gco.valor, 0)) as sob'),
                            DB::raw('sum(if(gco.concepto = 6, gco.valor, 0)) as pap'),
                            DB::raw('sum(if(gco.concepto = 9, gco.valor, 0)) as deb')
                        )
                        ->groupBy('gco.avaluo')
                        ->groupBy('gco.predio')
                        ->orderBy('gpr.id_unico', 'ASC')
                        ->orderBy('gav.anno', 'ASC')
                        ->distinct()
                        ->get();

                    list($valorD, $xxx) = array(0, 0);
                    foreach ($valorTo as $rowTOT) {
                        $xxx     = $rowTOT->imp + $rowTOT->int + $rowTOT->cas + $rowTOT->sob + $rowTOT->pap + $rowTOT->deb + $rowTOT->inc;
                        $valorD += $xxx;
                    }
                    $valorL = ($valorD == 0) ? "Cero" : ExtractoController::num2letras($valorD, false, false);

                    // Consecutivo resolución
                    $fechaAc = date('Y-m-d');
                   
                    
                    $anno    = date('Y');
                    $numR = DB::table('gr_consecutivo_resolucion')
                        ->where('numero', 'LIKE', $anno . '%')
                        ->orderBy('id_unico', 'DESC')
                        ->first();

                    if (!empty($numR)) {
                        $consecutivo = $numR->numero + 1;
                    } else {
                        $consecutivo = $anno . '000001';
                    }

                    DB::table('gr_consecutivo_resolucion')
                        ->insert(['numero' => $consecutivo, 'fecha_generacion' => $fechaAc, 'predio' => $value->id_unico]);

                    $numero_resolucion = $consecutivo;
                    // Vigencias
                    $dataVi = DB::table('gr_cartera_obligada as gco')
                        ->leftJoin('gp_predio1 as gpr', 'gco.predio', '=', 'gpr.id_unico')
                        ->leftJoin('gr_avaluo as gav', 'gco.avaluo', '=', 'gav.id_unico')
                        ->leftJoin('gr_concepto as gct', 'gco.concepto', '=', 'gct.id_unico')
                        ->leftJoin('gp_tercero_predio as tpr', 'tpr.predio', '=', 'gpr.id_unico')
                        ->leftJoin('gr_propietarios as pro', 'tpr.tercero', '=', 'pro.id_unico')
                        ->leftJoin('gp_tipo_predio as tp', 'tp.id_unico', '=', 'gpr.tipo_predio')
                        ->leftJoin('gf_tipo_identificacion as ti', 'ti.id_unico', '=', 'pro.tipoidentificacion')
                        ->where('gco.fecha', $request->sltCartera)
                        ->where("gco.predio", "=", $value->id_unico)
                        ->select(DB::raw('MIN(gav.anno) as menor'), DB::raw('MAX(gav.anno) as mayor'))
                        ->groupBy('gco.predio')
                        ->orderBy('gpr.id_unico', 'ASC')
                        ->distinct()
                        ->get();
                    foreach ($dataVi as $rowVi) {
                        $anioI = $rowVi->menor;
                        $anioF = $rowVi->mayor;
                    }

                    // Salto de página entre resoluciones
                    if ($cont != 0) {
                        $html .= "\n\t\t<p class='printx'><br></p>";
                    }
                    $cont++;

                    
                    $html .= "\n\t\t<table style='width:100%; border-collapse:collapse; font-size:12px;'>";

$html .= "\n\t\t\t<thead>";
$html .= "\n\t\t\t\t<tr><td colspan='2' style='padding-bottom:6px;'>";

// Encabezado con logo + título
$html .= "\n\t\t\t\t\t<table style='width:100%; border-collapse:collapse; margin-bottom:6px;'>";
$html .= "\n\t\t\t\t\t\t<tr>";


// Celda central: título
$compania = ListadoPagosController::obtenerCompania();
$logo = !empty($compania->logo) ? $compania->logo : '';

$html .= "<td>";
$html .= "<table width='120%' border='0' cellpadding='0' cellspacing='0'><tr>";

// Logo izquierda — align y valign como atributos HTML
$html .= "<td width='60' valign='top' align='left'>";
if(!empty($logo)){
    $html .= "<img src='http://66.206.10.74:8081/municipiobarbosa-sigiep/predial/public/$logo' width='75' height='75' align='left' style='opacity:0.35;'>";
}
$html .= "</td>";

// Texto centro
$html .= "<td align='center' valign='middle'>";
$html .= "<h4 style='font-size:12px; margin:2px 0;'>REPUBLICA DE COLOMBIA</h4>";
$html .= "<h4 style='font-size:12px; margin:2px 0;'>DEPARTAMENTO DE SANTANDER</h4>";
$html .= "<h4 style='font-size:12px; margin:2px 0;'>MUNICIPIO DE BARBOSA</h4>";
$html .= "<h4 style='font-size:12px; margin:8px 0;'>RESOLUCIÓN Nº $numero_resolucion</h4>";
$html .= "<h4 style='font-size:12px; margin:2px 0;'>Por medio de la cual se liquida oficialmente el impuesto predial</h4>";
$html .= "</td>";

// Celda derecha vacía
$html .= "<td width='60'></td>";

$html .= "</tr></table>";
$html .= "</td>";

// Celda derecha: vacía (para centrar visualmente)
$html .= "\n\t\t\t\t\t\t\t<td style='width:110px;'></td>";

$html .= "\n\t\t\t\t\t\t</tr>";
$html .= "\n\t\t\t\t\t</table>";

// Tabla de datos del predio
$html .= "\n\t\t\t\t\t<table style='width:100%; font-size:12px;'>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>CONCEPTO:</th><td>IMPUESTO PREDIAL UNIFICADO</td></tr>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>PROPIETARIO:</th><td>$propros->nombres</td></tr>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>CEDULA DE CIUDADANIA:</th><td>$propros->numero</td></tr>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>DIRECCIÓN:</th><td>$value->direccion</td></tr>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left; vertical-align:top;'>COPROPIETARIOS:</th><td>";
foreach ($copros as $rowss) {
    $html .= "<div>$rowss->nombres &nbsp; $rowss->numero</div>";
}
$html .= "</td></tr>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>CODIGO CATASTRAL:</th><td>$value->codigo_catastral</td></tr>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>AVALÚO CATASTRAL:</th><td>" . number_format($avaluo_val, 2) . "</td></tr>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>VIGENCIAS:</th><td>$anioI-$anioF</td></tr>";
$html .= "\n\t\t\t\t\t</table>";

$html .= "\n\t\t\t\t</td></tr>";
$html .= "\n\t\t\t</thead>";

                    // --- TBODY (contenido de la resolución) ---
                    $html .= "\n\t\t\t<tbody>";
                    $html .= "\n\t\t\t\t<tr><td colspan='2'>";

                    $html .= "\n\t\t\t\t\t<h5 style='text-align:justify; font-size:12px;'>La Secretaria de Hacienda del Municipio de Barbosa, de conformidad con las facultades conferidas por la Ley 1066 del 29 de Julio de 2009, articulo 2 de la Ley 44 de 1990, el Decreto Reglamentario No. 4473 de 2006, el Acuerdo Municipal No. 023 del 30 de Diciembre de 1998, Estatuto Tributario Nacional por remisión expresa de la Ley 383 de 1997 Código de Procedimiento Administrativo y de lo Contencioso Administrativo, Código General del Proceso, y demás normas concordantes y complementarias y</h5>";
                    $html .= "\n\t\t\t\t\t<h4 style='text-align:center; font-size:12px;'>CONSIDERANDO</h4>";
                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>1. Que según lo dispuesto por el Artículo 98 del Código de Procedimiento Administrativo y de lo Contencioso Administrativo, las entidades publicas definidas en el parágrafo del articulo 104 deberán recaudar las obligaciones creadas en su favor, que consten en documentos que presten merito ejecutivo de conformidad con este código.</p>";
                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>2. Que el articulo 99 del Código de Procedimiento Administrativo y de lo Contencioso Administrativo expresa: <i>&ldquo;prestaran merito ejecutivo para su cobro coactivo siempre que en ellos conste una obligación clara, expresa y exigible, los siguientes documentos:</i></p>";
                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px; margin-left:50px;'><i>1. Todo Acto administrativo ejecutoriado que imponga a favor de las entidades publicas a las que alude el parágrafo del articulo 104, la obligación de pagar una suma liquida de dinero en los casos previstos en la ley&rdquo;</i></p>";
                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>3. Que el articulo 828 del Estatuto Tributario Nacional menciona, las liquidaciones oficiales ejecutoriadas prestan merito ejecutivo y en la presente Resolución se ha vertido el acto de liquidación oficial por concepto del Impuesto Predial Unificado.</p>";
                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>4. Que de conformidad con el Articulo 317 de la Constitución Política de Colombia, y la Ley 44 de 1990, es deber todo propietario del inmueble pagar el Impuesto Predial Unificado.</p>";
                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>5. Que es función de la Secretaria de Hacienda Municipal, efectuar la liquidación y posterior notificación del Impuesto Predial Unificado y adelantar las acciones necesarias para lograr de los sujetos pasivos morosos del Impuesto en mención, el pago de las obligaciones insolutas a favor del Municipio.</p>";
                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>6. Que de conformidad con el Titulo II, Capítulo I, artículos 12 al 32 del Estatuto de Rentas del Municipio de Barbosa (Acuerdo 019 de 2024), se crea y regula todo lo relacionado con el impuesto predial, por lo cual en la presente resolución se procede a liquidar el mismo.</p>";

                    $propietario = trim($propros->nombres);
                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>7. Que el contribuyente <span class='bold'>$propietario</span>, adeuda al Municipio de Barbosa, la suma de <span class='bold'>" . mb_strtoupper($valorL) . " MCTE</span>, ($" . number_format($valorD, 0, ',', '.') . ") por concepto de impuesto predial unificado del inmueble ubicado en la <span class='bold'>" . $value->direccion . "</span>, identificado con Cédula Catastral No. <span class='bold'>$value->codigo_catastral</span> más intereses moratorios y discriminada así:</p>";
                    $html .= "\n\t\t\t\t\t<br/>";

                    // Tabla 1
                    $dataT = DB::table('gr_cartera_obligada as gco')
                        ->leftJoin('gp_predio1 as gpr', 'gco.predio', '=', 'gpr.id_unico')
                        ->leftJoin('gr_avaluo as gav', 'gco.avaluo', '=', 'gav.id_unico')
                        ->leftJoin('gr_concepto as gct', 'gco.concepto', '=', 'gct.id_unico')
                        ->where('gco.fecha', $request->sltCartera)
                        ->where("gco.predio", "=", $value->id_unico)
                        ->select(
                            'gpr.codigo_catastral as cod',
                            'gav.anno',
                            'gav.valor as avaluo',
                            DB::raw('sum(if(gco.concepto = 1, gco.valor, 0)) as imp'),
                            DB::raw('sum(if(gco.concepto = 4, gco.valor, 0)) as "int"'),
                            DB::raw('sum(if(gco.concepto = 3, gco.valor, 0)) as cas'),
                            DB::raw('sum(if(gco.concepto = 8, gco.valor, 0)) as inc'),
                            DB::raw('sum(if(gco.concepto = 7, gco.valor, 0)) as sob'),
                            DB::raw('sum(if(gco.concepto = 6, gco.valor, 0)) as pap'),
                            DB::raw('sum(if(gco.concepto = 9, gco.valor, 0)) as deb')
                        )
                        ->groupBy('gco.avaluo')
                        ->groupBy('gco.predio')
                        ->groupBy('gav.valor')
                        ->orderBy('gpr.id_unico', 'ASC')
                        ->orderBy('gav.anno', 'ASC')
                        ->distinct()
                        ->get();

                    $html .= "\n\t\t\t\t\t<table border='1' style='width:100%; font-size:12px;'>";
                    $html .= "\n\t\t\t\t\t\t<thead><tr style='text-align:center;'>";
                    $html .= "<th>AÑO</th><th>AVALUO</th><th>IMPUESTO PREDIAL</th><th>INTERES</th><th>CAS</th><th>INTERES CAS</th><th>SOB BOM</th><th>PAPELERIA</th><th>D.COB</th><th>TOTAL</th>";
                    $html .= "</tr></thead><tbody>";
                    list($imp, $int, $cas, $inc, $sob, $pap, $deb, $xto, $xxx) = array(0, 0, 0, 0, 0, 0, 0, 0, 0);
                    foreach ($dataT as $rowT) {
                        $xxx  = $rowT->imp + $rowT->int + $rowT->cas + $rowT->sob + $rowT->pap + $rowT->deb + $rowT->inc;
                        $imp += $rowT->imp; $int += $rowT->int; $int += $rowT->cas;
                        $sob += $rowT->sob; $pap += $rowT->pap; $deb += $rowT->deb;
                        $xto += $xxx; $inc += $rowT->inc; $cas += $rowT->cas;
                        $html .= "<tr style='font-size:10px;'>";
                        $html .= "<td>" . $rowT->anno . "</td>";
                        $html .= "<td>" . number_format($rowT->avaluo, 2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->imp,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->int,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->cas,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->inc,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->sob,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->pap,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->deb,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($xxx,          2, ',', '.') . "</td>";
                        $html .= "</tr>";
                    }
                    $html .= "</tbody>";
                    $html .= "<tr style='font-size:10px;'><th colspan='2' style='text-align:center;'>TOTALES</th>";
                    $html .= "<th><b>" . number_format($imp, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($int, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($cas, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($inc, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($sob, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($pap, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($deb, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($xto, 2, ',', '.') . "</b></th>";
                    $html .= "</tr></table>";

                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>Que en mérito de lo expuesto,</p>";
                    $html .= "\n\t\t\t\t\t<h4 style='text-align:center; font-size:12px;'>RESUELVE</h4>";

                    $propietario = rtrim($propros->nombres);
                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'><span class='bold'>ARTÍCULO PRIMERO: </span>Expedir la liquidación del Impuesto Predial Unificado del Municipio de Barbosa – Santander, por la suma de <span class='bold'>" . mb_strtoupper($valorL) . " MCTE</span>, ($" . number_format($valorD, 0, ',', '.') . "), mediante la Resolución Administrativa No. $numero_resolucion, y con cargo a $propietario, más los intereses moratorios que se generen desde que se hizo exigible la obligación y hasta el momento del pago, liquidados a la tasa legal vigente para esa fecha de acuerdo con los artículos 634 y 635 del Estatuto Tributario Nacional, y determinadas de la siguiente forma:</p>";
                    $html .= "\n\t\t\t\t\t<br/>";

                    // Tabla 2 (mismos datos $dataT, reset acumuladores)
                    $html .= "\n\t\t\t\t\t<table border='1' style='width:100%; font-size:12px;'>";
                    $html .= "\n\t\t\t\t\t\t<thead><tr style='text-align:center;'>";
                    $html .= "<th>AÑO</th><th>AVALUO</th><th>IMPUESTO PREDIAL</th><th>INTERES</th><th>CAS</th><th>INTERES CAS</th><th>SOB BOM</th><th>PAPELERIA</th><th>D.COB</th><th>TOTAL</th>";
                    $html .= "</tr></thead><tbody>";
                    list($imp, $int, $cas, $inc, $sob, $pap, $deb, $xto, $xxx) = array(0, 0, 0, 0, 0, 0, 0, 0, 0);
                    foreach ($dataT as $rowT) {
                        $xxx  = $rowT->imp + $rowT->int + $rowT->cas + $rowT->sob + $rowT->pap + $rowT->deb + $rowT->inc;
                        $imp += $rowT->imp; $int += $rowT->int; $int += $rowT->cas;
                        $sob += $rowT->sob; $pap += $rowT->pap; $deb += $rowT->deb;
                        $xto += $xxx; $inc += $rowT->inc; $cas += $rowT->cas;
                        $html .= "<tr style='font-size:10px;'>";
                        $html .= "<td>" . $rowT->anno . "</td>";
                        $html .= "<td>" . number_format($rowT->avaluo, 2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->imp,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->int,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->cas,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->inc,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->sob,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->pap,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($rowT->deb,    2, ',', '.') . "</td>";
                        $html .= "<td>" . number_format($xxx,          2, ',', '.') . "</td>";
                        $html .= "</tr>";
                    }
                    $html .= "</tbody>";
                    $html .= "<tr style='font-size:10px;'><th colspan='2' style='text-align:center;'>TOTALES</th>";
                    $html .= "<th><b>" . number_format($imp, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($int, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($cas, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($inc, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($sob, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($pap, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($deb, 2, ',', '.') . "</b></th>";
                    $html .= "<th><b>" . number_format($xto, 2, ',', '.') . "</b></th>";
                    $html .= "</tr></table>";
                    $html .= "\n\t\t\t\t\t<br/>";

                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'><span class='bold'>PARÁGRAFO PRIMERO: </span>Los intereses de mora generados, deberán ser liquidados con las condiciones legales vigentes en el momento de pago.</p>";
                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'><span class='bold'>ARTÍCULO SEGUNDO: </span>La presente liquidación se constituye como título ejecutivo base de recaudo y de Proceso de Jurisdicción Coactiva.</p>";
                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'><span class='bold'>ARTÍCULO TERCERO: NOTIFICACIÓN:</span> Contra la presente liquidación oficial procede el recurso de RECONSIDERACION de conformidad con lo establecido en el artículo del estatuto de rentas en concordancia con el art. 720 del estatuto tributario nacional, en el cual deberá interponerse ante este despacho dentro de los dos (2) meses siguientes a la notificación del presente acto. Notifíquese de conformidad con el artículo 354 de la ley 1819 del 2016 en la página web del Municipio de Barbosa - Santander, previa socialización.</p>";
                    $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'><span class='bold'>ARTICULO CUARTO: </span>El presente acto administrativo presta merito ejecutivo.</p>";

                    $meses = array(1=>"Enero",2=>"Febrero",3=>"Marzo",4=>"Abril",5=>"Mayo",6=>"Junio",7=>"Julio",8=>"Agosto",9=>"Septiembre",10=>"Octubre",11=>"Noviembre",12=>"Diciembre");
                    if (!empty($fechaG)) {
                        $fechaDiv = explode("/", $fechaG);
                        $dia  = $fechaDiv[0];
                        $mesP = intval($fechaDiv[1]);
                        $mesl = $meses[$mesP];
                        $aniof = $fechaDiv[2];
                    } else {
                        $dia   = date("d");
                        $mesl  = $meses[(int) date("m")];
                        $aniof = date("Y");
                    }
                    $dias = ExtractoController::num2letras($dia, false, false, 1);

                    $html .= "\n\t\t\t\t\t<p style='text-align:center; font-size:12px;'>Expedido en el Municipio de Barbosa – Departamento de Santander a los $dias (" . $dia . ") días del mes de $mesl del año $aniof.</p>";
                    $html .= "\n\t\t\t\t\t<h4 style='text-align:center; font-size:12px;'>NOTIFÍQUESE Y CÚMPLASE</h4>";
 $hoy = Carbon::today();
                   $firma = DB::table('gf_responsable_documento as rd')
                        ->select(
                            DB::raw('IF(CONCAT_WS(" ",
                                            t.nombreuno,
                                            t.nombredos,
                                            t.apellidouno,
                                            t.apellidodos
                                        ) = " ",
                                        t.razonsocial,
                                        CONCAT_WS(" ",
                                            t.nombreuno,
                                            t.nombredos,
                                            t.apellidouno,
                                            t.apellidodos
                                        )
                                    ) as res'),
                            'tr.nombre as nomt',
                            'tre.nombre as ntro'
                        )
                        ->leftJoin('gf_tercero as t',           'rd.tercero',         '=', 't.id_unico')
                        ->leftJoin('gf_tipo_documento as td',   'rd.tipodocumento',   '=', 'td.id_unico')
                        ->leftJoin('gf_tipo_responsable as tr', 'rd.tiporesponsable', '=', 'tr.id_unico')
                        ->leftJoin('gg_tipo_relacion as tre',   'rd.tipo_relacion',   '=', 'tre.id_unico')
                        ->where('td.nombre', '=', 'Resolución Cobro')
                        ->where('rd.fecha_inicio', '<=', $hoy)
                        ->where(function ($q) use ($hoy) {
                            $q->whereNull('rd.fecha_fin')
                              ->orWhere('rd.fecha_fin', '>=', $hoy);
                        })
                        ->first();

                    $html .= "\n\t\t\t\t\t<p style='text-align:center;'><img src='http://66.206.10.74:8081/municipiobarbosa-sigiep/predial/public/img/Firma/NINI_YOHANA.jpg' width='130' height='100'></p>";
                    $html .= "\n\t\t\t\t\t<h4 style='text-align:center; font-size:12px;'>" . $firma->res . "<br/>" . $firma->nomt . "<br/>Municipio de Barbosa</h4>";
                    $html .= "\n\t\t\t\t\t<p class='footer-impresion'>Impreso por: " . $usuario . " &nbsp;&nbsp;&nbsp; Fecha Impresión: " . $fechaImpresion . "</p>";

                    // Cierre tbody y tabla contenedora
                    $html .= "\n\t\t\t\t</td></tr>";
                    $html .= "\n\t\t\t</tbody>";
                    $html .= "\n\t\t</table>";
                }
            }
        }
        $html .= "\n\t</body>";
        $html .= "\n</html>";

    } else {

        $html  = "<html>";
        $html .= "\n\t<head>";
        $html .= "\n\t\t<meta charset='utf-8'>";
        $html .= "\n\t\t<style type='text/css' media='screen'>";
        $html .= "\n\t\t\thtml, body { font-family: Arial, sans-serif; font-size: 11px; }";
        $html .= "\n\t\t\th1, h2, h3, h4 { font-weight: 800; }";
        $html .= "\n\t\t\th1, h2, h3, h4, h5, h6, p { font-family: Arial, sans-serif; }";
        $html .= "\n\t\t\t.bold { font-weight: 800; }";
        $html .= "\n\t\t\tthead { display: table-header-group; }";
        $html .= "\n\t\t\ttbody { display: table-row-group; }";
        $html .= "\n\t\t\t.footer-impresion {";
        $html .= "\n\t\t\t\tfont-size: 9px; color: #555; text-align: justify;";
        $html .= "\n\t\t\t\tmargin-top: 10px; border-top: 1px solid #ccc; padding-top: 4px;";
        $html .= "\n\t\t\t}";
        $html .= "\n\t\t</style>";
        $html .= "\n\t</head>";
        $html .= "\n\t<body>";

        $liq   = new LiquidadorInteresesController();
        $xanno = "";
        $cont  = 0;

        foreach ($predios as $value) {
            $valorD = 0;
            $deb    = 0;
            $ultimop = ExtractoController::obtnerultimoannopago($value->id_unico);
            if ($ultimop < date("Y") || empty($ultimop)) {
                $xanno   = empty($ultimop) ? $annoI : $ultimop;
                $avaluos = ResolucionCobro::obtenerAvaluos($value->id_unico, $xanno, $annoF);

                $propros = DB::table("gp_tercero_predio AS gtp")
                    ->select("gpr.nombres", "gpr.numero")
                    ->leftJoin("gr_propietarios as gpr", "gtp.tercero", "=", "gpr.id_unico")
                    ->where("gtp.predio", "=", $value->id_unico)
                    ->where("gtp.propietario", "=", 0)
                    ->where("gtp.orden", "=", "001")
                    ->first();

                $copros = DB::table("gp_tercero_predio AS gtp")
                    ->select("gpr.nombres", "gpr.numero")
                    ->leftJoin("gr_propietarios as gpr", "gtp.tercero", "=", "gpr.id_unico")
                    ->where("gtp.predio", "=", $value->id_unico)
                    ->where("gtp.propietario", "!=", 0)
                    ->where("gtp.orden", "!=", "001")
                    ->get();

                $avaluoF = DB::table("gr_avaluo")
                    ->select("valor")
                    ->where("anno", "=", $annoF)
                    ->where("predio", "=", $value->id_unico)
                    ->first();

                $xhtml = "";
                list($ximp, $xdesc, $xint, $xcar, $xintc, $xbom, $xpap, $xdeb, $xto) = array(0,0,0,0,0,0,0,0,0);

                foreach ($avaluos as $row) {
                    $avaluo  = $row->valor;
                    $tarifa  = $row->tarifa;
                    $dateV   = ResolucionCobro::fechaVencimiento($row->anno, 1);
                    $dateD   = ResolucionCobro::fechaVencimiento($row->anno, 2);
                    $xfecha  = ResolucionCobro::validarFechaVencimiento($dateV, $row->anno);
                    $imp     = ResolucionCobro::calculoImpueto($avaluo, $tarifa);
                    $imp     = ExtractoController::convertirPeso($imp);
                    $desc    = 0;
                    $desct   = $desc * -1;
                    $intm    = $liq->liquidar_intereses($imp, $xfecha, date("Y-m-d"), date("Y-m-d"));
                    $intm    = ExtractoController::convertirPeso($intm);
                    $xbase   = ResolucionCobro::validarValorTipoBaseAmbiental($row->tipobaseambiental, $avaluo, $imp);
                    $rbase   = explode(";", $xbase);
                    $base    = $rbase[0];
                    $por     = $rbase[1];
                    $car     = empty($xbase) ? 0 : ExtractoController::convertirPeso(ResolucionCobro::calculoCorporacion($base, $row->porcentajeimpuestoambiental, $por));
                    $intc    = ExtractoController::convertirPeso($liq->liquidar_intereses($car, $xfecha, date("Y-m-d"), date("Y-m-d")));
                    $bom     = empty($row->porcentajesobretasa) ? 0 : ExtractoController::convertirPeso(ResolucionCobro::calculoSobretasaBomberil($imp, $row->porcentajesobretasa));
                    $pap     = ResolucionCobro::obtenerValorPapeleria($row->anno);
                    $exdeb   = ResolucionCobro::ValidarExistenciaDebidoCobrar($row->anno);
                    $deb     = empty($exdeb) ? 0 : ExtractoController::convertirPeso(ResolucionCobro::obtenerDebidoCobrar($value->id_unico));
                    $xxx     = $imp + $desc + $intm + $car + $intc + $bom + $pap + $deb;

                    if ($xxx > $monto) {
                        $xto   += $xxx; $ximp  += $imp; $xdesc += $desct; $xint  += $intm;
                        $xcar  += $car; $xintc += $intc; $xbom  += $bom; $xpap  += $pap; $xdeb  += $deb;
                        $xhtml .= "<tr style='font-size:10px;'>";
                        $xhtml .= "<td style='text-align:right;'>$row->anno</td>";
                        $xhtml .= "<td style='text-align:right;'>$tarifa</td>";
                        $xhtml .= "<td style='text-align:right;'>" . number_format($avaluo, 0, ',', '.') . "</td>";
                        $xhtml .= "<td style='text-align:right;'>" . number_format($imp,    0, ',', '.') . "</td>";
                        $xhtml .= "<td style='text-align:right;'>" . number_format($desct,  0, ',', '.') . "</td>";
                        $xhtml .= "<td style='text-align:right;'>" . number_format($intm,   0, ',', '.') . "</td>";
                        $xhtml .= "<td style='text-align:right;'>" . number_format($car,    0, ',', '.') . "</td>";
                        $xhtml .= "<td style='text-align:right;'>" . number_format($intc,   0, ',', '.') . "</td>";
                        $xhtml .= "<td style='text-align:right;'>" . number_format($bom,    0, ',', '.') . "</td>";
                        $xhtml .= "<td style='text-align:right;'>" . number_format($pap,    0, ',', '.') . "</td>";
                        $xhtml .= "<td style='text-align:right;'>" . number_format($deb,    0, ',', '.') . "</td>";
                        $xhtml .= "<td style='text-align:right;'>" . number_format($xxx,    0, ',', '.') . "</td>";
                        $xhtml .= "</tr>";
                    }
                    $valorD = $xto;
                }

                $valorL = ($valorD == 0) ? "Cero" : ExtractoController::num2letras($valorD, false, false);

                if ($cont != 0) {
                    $html .= "\n\t\t<p style='page-break-after:always;'><br></p>";
                }
                $cont++;

                // =============================================
                // TABLA CONTENEDORA con thead repetible
                // =============================================
               $compania = ListadoPagosController::obtenerCompania();
$logo = !empty($compania->logo) ? $compania->logo : '';

$html .= "\n\t\t<table style='width:100%; border-collapse:collapse; font-size:12px;'>";

// --- THEAD ---
$html .= "\n\t\t\t<thead>";
$html .= "\n\t\t\t\t<tr><td colspan='2' style='padding-bottom:6px;'>";

// ENCABEZADO
$html .= "\n\t\t\t\t\t<table style='width:100%; border-collapse:collapse;'>";
$html .= "\n\t\t\t\t\t\t<tr>";

// LOGO
/*
$html .= "\n\t\t\t\t\t\t\t<td style='width:10%; text-align:left; vertical-align:top;'>";
if(!empty($logo)){
    $html .= "<img src='http://66.206.10.74:8081/municipiobarbosa-sigiep/predial/public/$logo' style='width:45px;'>";
}
$html .= "</td>";
*/
// TEXTO
$html .= "\n\t\t\t\t\t\t\t<td style='width:90%; text-align:center;'>";

$html .= "<div style='font-size:12px; font-weight:bold;'>REPUBLICA DE COLOMBIA</div>";
$html .= "<div style='font-size:12px; font-weight:bold;'>DEPARTAMENTO DE SANTANDER</div>";
$html .= "<div style='font-size:12px; font-weight:bold;'>MUNICIPIO DE BARBOSA</div>";

$html .= "<div style='font-size:13px; font-weight:bold; margin-top:6px;'>RESOLUCIÓN Nº</div>";

$html .= "<div style='font-size:12px; margin-top:4px;'>Por medio de la cual se liquida oficialmente el impuesto predial</div>";

$html .= "</td>";

$html .= "\n\t\t\t\t\t\t</tr>";
$html .= "\n\t\t\t\t\t</table>";

// TABLA DE DATOS
$html .= "\n\t\t\t\t\t<table style='width:100%; font-size:12px;'>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>CONCEPTO:</th><td>IMPUESTO PREDIAL UNIFICADO</td></tr>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>PROPIETARIO:</th><td>$propros->nombres</td></tr>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>CEDULA DE CIUDADANIA:</th><td>$propros->numero</td></tr>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>DIRECCIÓN:</th><td>$value->direccion</td></tr>";

$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left; vertical-align:top;'>COPROPIETARIOS:</th><td>";
foreach ($copros as $rowss) {
    $html .= "<div>$rowss->nombres &nbsp; $rowss->numero</div>";
}
$html .= "</td></tr>";

$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>CODIGO CATASTRAL:</th><td>$value->codigo_catastral</td></tr>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>AVALÚO CATASTRAL:</th><td>" . number_format($avaluoF->valor, 2) . "</td></tr>";
$html .= "\n\t\t\t\t\t\t<tr><th style='text-align:left;'>VIGENCIAS:</th><td>$xanno-$annoF</td></tr>";
$html .= "\n\t\t\t\t\t</table>";

$html .= "\n\t\t\t\t</td></tr>";
$html .= "\n\t\t\t</thead>";

                // --- TBODY ---
                $html .= "\n\t\t\t<tbody>";
                $html .= "\n\t\t\t\t<tr><td colspan='2'>";

                $html .= "\n\t\t\t\t\t<h5 style='text-align:justify; font-size:12px;'>La Secretaria de Hacienda del Municipio de Barbosa, de conformidad con las facultades conferidas por la Ley 1066 del 29 de Julio de 2009, articulo 2 de la Ley 44 de 1990, el Decreto Reglamentario No. 4473 de 2006, el Acuerdo Municipal No. 023 del 30 de Diciembre de 1998, Estatuto Tributario Nacional por remisión expresa de la Ley 383 de 1997 Código de Procedimiento Administrativo y de lo Contencioso Administrativo, Código General del Proceso, y demás normas concordantes y complementarias y</h5>";
                $html .= "\n\t\t\t\t\t<h4 style='text-align:center; font-size:12px;'>CONSIDERANDO</h4>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>1. Que según lo dispuesto por el Artículo 98 del Código de Procedimiento Administrativo y de lo Contencioso Administrativo, las entidades publicas definidas en el parágrafo del articulo 104 deberán recaudar las obligaciones creadas en su favor, que consten en documentos que presten merito ejecutivo de conformidad con este código.</p>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>2. Que el articulo 99 del Código de Procedimiento Administrativo y de lo Contencioso Administrativo expresa: <i>&ldquo;prestaran merito ejecutivo para su cobro coactivo siempre que en ellos conste una obligación clara, expresa y exigible, los siguientes documentos:</i></p>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px; margin-left:50px;'><i>1. Todo Acto administrativo ejecutoriado que imponga a favor de las entidades publicas a las que alude el parágrafo del articulo 104, la obligación de pagar una suma liquida de dinero en los casos previstos en la ley&rdquo;</i></p>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>3. Que el articulo 828 del Estatuto Tributario Nacional menciona, las liquidaciones oficiales ejecutoriadas prestan merito ejecutivo y en la presente Resolución se ha vertido el acto de liquidación oficial por concepto del Impuesto Predial Unificado.</p>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>4. Que de conformidad con el Articulo 317 de la Constitución Política de Colombia, y la Ley 44 de 1990, es deber todo propietario del inmueble pagar el Impuesto Predial Unificado.</p>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>5. Que es función de la Secretaria de Hacienda Municipal, efectuar la liquidación y posterior notificación del Impuesto Predial Unificado y adelantar las acciones necesarias para lograr de los sujetos pasivos morosos del Impuesto en mención, el pago de las obligaciones insolutas a favor del Municipio.</p>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>6. Que de conformidad con el Titulo II, Capítulo I, artículos 12 al 32 del Estatuto de Rentas del Municipio de Barbosa (Acuerdo 019 de 2024), se crea y regula todo lo relacionado con el impuesto predial, por lo cual en la presente resolución se procede a liquidar el mismo.</p>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>7. Que el contribuyente <span class='bold'>$propros->nombres</span>, adeuda al Municipio de Barbosa, la suma de <span class='bold'>" . mb_strtoupper($valorL) . " MCTE</span>, ($" . number_format($valorD, 0, ',', '.') . ") por concepto de impuesto predial unificado del inmueble ubicado en la <span class='bold'>" . $value->direccion . "</span>, identificado con Cédula Catastral No. <span class='bold'>$value->codigo_catastral</span> más intereses moratorios y discriminada así:</p>";
                $html .= "\n\t\t\t\t\t<br/>";

                // Tabla 1
                $html .= "\n\t\t\t\t\t<table border='1' style='width:100%; font-size:12px;'>";
                $html .= "\n\t\t\t\t\t\t<thead><tr style='text-align:center;'>";
                $html .= "<th>AÑO</th><th>%M</th><th>AVALUO</th><th>IMP</th><th>DESC</th><th>INT. IMP</th><th>CAS</th><th>INT. CAS</th><th>SOB.BOM.</th><th>PAP.</th><th>D.COB</th><th>TOTAL</th>";
                $html .= "</tr></thead><tbody>" . $xhtml . "</tbody>";
                $html .= "<tr style='font-size:10px;'><td style='text-align:center; font-weight:800;' colspan='3'>TOTALES</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($ximp,  0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xdesc, 0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xint,  0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xcar,  0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xintc, 0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xbom,  0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xpap,  0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($deb,   0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xto,   0, ',', '.') . "</td>";
                $html .= "</tr></table>";

                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'>Que en mérito de lo expuesto,</p>";
                $html .= "\n\t\t\t\t\t<br/>";
                $html .= "\n\t\t\t\t\t<h4 style='text-align:center; font-size:12px;'>RESUELVE</h4>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'><span class='bold'>ARTÍCULO PRIMERO: </span>Expedir la liquidación del Impuesto Predial Unificado del Municipio de Barbosa – Santander, por la suma de <span class='bold'>" . mb_strtoupper($valorL) . " MCTE</span>, ($" . number_format($valorD, 0, ',', '.') . "), mediante la Resolución Administrativa No. XXX, y con cargo a $propros->nombres, más los intereses moratorios que se generen desde que se hizo exigible la obligación y hasta el momento del pago, liquidados a la tasa legal vigente para esa fecha de acuerdo con los artículos 634 y 635 del Estatuto Tributario Nacional, y determinadas de la siguiente forma:</p>";
                $html .= "\n\t\t\t\t\t<br/>";

                // Tabla 2
                $html .= "\n\t\t\t\t\t<table border='1' style='width:100%; font-size:12px;'>";
                $html .= "\n\t\t\t\t\t\t<thead><tr style='text-align:center;'>";
                $html .= "<th>AÑO</th><th>%M</th><th>AVALUO</th><th>IMP</th><th>DESC</th><th>INT. IMP</th><th>CAS</th><th>INT. CAS</th><th>SOB.BOM.</th><th>PAP.</th><th>D.COB</th><th>TOTAL</th>";
                $html .= "</tr></thead><tbody>" . $xhtml . "</tbody>";
                $html .= "<tr style='font-size:10px;'><td style='text-align:center; font-weight:800;' colspan='3'>TOTALES</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($ximp,  0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xdesc, 0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xint,  0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xcar,  0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xintc, 0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xbom,  0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xpap,  0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($deb,   0, ',', '.') . "</td>";
                $html .= "<td style='text-align:right; font-weight:800;'>" . number_format($xto,   0, ',', '.') . "</td>";
                $html .= "</tr></table>";
                $html .= "\n\t\t\t\t\t<br/>";

                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'><span class='bold'>PARÁGRAFO PRIMERO: </span>Los intereses de mora generados, deberán ser liquidados con las condiciones legales vigentes en el momento de pago.</p>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'><span class='bold'>ARTÍCULO SEGUNDO: </span>La presente liquidación se constituye como título ejecutivo base de recaudo y de Proceso de Jurisdicción Coactiva.</p>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'><span class='bold'>ARTÍCULO TERCERO: NOTIFICACIÓN: </span>La presente <span class='bold'>LIQUIDACIÓN OFICIAL</span> se notificara personalmente o por correo de conformidad con lo establecido en el artículo 565 del Estatuto Tributario y en concordancia de las demás normas que versen sobre notificaciones de actos administrativos.</p>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'><span class='bold'>ARTICULO CUARTO: RECURSOS: </span>Contra la presente liquidación oficial procede el recurso de <span class='bold'>RECONSIDERACIÓN</span>, de conformidad con lo establecido en el artículo 720 del Estatuto Tributario, el cual podrá interponerse ante la Secretaria de Hacienda dentro de los dos meses siguientes a la notificación del presente acto y deberá cumplir con los requisitos exigidos por el articulo 722 de Estatuto Tributario.</p>";
                $html .= "\n\t\t\t\t\t<p style='text-align:justify; font-size:12px;'><span class='bold'>ARTICULO QUINTO: </span>El presente acto administrativo presta merito ejecutivo.</p>";
                $html .= "\n\t\t\t\t\t<br/>";

                $dias  = ExtractoController::num2letras(date("d"), false, false, 1);
                $meses = array(1=>"Enero",2=>"Febrero",3=>"Marzo",4=>"Abril",5=>"Mayo",6=>"Junio",7=>"Julio",8=>"Agosto",9=>"Septiembre",10=>"Octubre",11=>"Noviembre",12=>"Diciembre");
                $mx    = (int) date("m");
                $html .= "\n\t\t\t\t\t<p style='text-align:center; font-size:12px;'>Expedido en el Municipio de Barbosa – Departamento de Santander a los $dias (" . date('d') . ") días del mes de " . $meses[$mx] . " del año " . date("Y") . ".</p>";
                $html .= "\n\t\t\t\t\t<br/>";
                $html .= "\n\t\t\t\t\t<h4 style='text-align:center; font-size:12px;'>NOTIFÍQUESE Y CÚMPLASE</h4>";
                $html .= "\n\t\t\t\t\t<br/>";

                $firma = DB::table('gf_responsable_documento as rd')
                    ->select(DB::raw('IF(CONCAT_WS(" ", t.nombreuno, t.nombredos, t.apellidouno, t.apellidodos) = " ", t.razonsocial, CONCAT_WS(" ", t.nombreuno, t.nombredos, t.apellidouno, t.apellidodos)) as res'), 'tr.nombre as nomt', 'tre.nombre as ntro')
                    ->leftjoin('gf_tercero as t',          'rd.tercero',         '=', 't.id_unico')
                    ->leftjoin('gf_tipo_documento as td',  'rd.tipodocumento',   '=', 'td.id_unico')
                    ->leftjoin('gf_tipo_responsable as tr','rd.tiporesponsable', '=', 'tr.id_unico')
                    ->leftjoin('gg_tipo_relacion as tre',  'rd.tipo_relacion',   '=', 'tre.id_unico')
                    ->where('td.nombre', '=', 'Resolución Cobro')
                    ->first();

                $html .= "\n\t\t\t\t\t<h4 style='text-align:center; font-size:12px;'>" . $firma->res . "<br/>" . $firma->nomt . "<br/>Municipio de Barbosa</h4>";
                $html .= "\n\t\t\t\t\t<br/><br/><br/>";
                $html .= "\n\t\t\t\t\t<p class='footer-impresion'>Impreso por: " . $usuario . " &nbsp;&nbsp;&nbsp; Fecha Impresión: " . $fechaImpresion . "</p>";

                // Cierre tbody y tabla contenedora
                $html .= "\n\t\t\t\t</td></tr>";
                $html .= "\n\t\t\t</tbody>";
                $html .= "\n\t\t</table>";
            }
        }
        $html .= "\n\t</body>";
        $html .= "\n</html>";
    }

    header("Content-type: text/html");
    header("Content-Disposition: attachment; filename=ResolucionesCobro.doc");
    echo $html;
}



    /**
     * generatePdf
     * Metodo de respuesta recibida del formulario en el que se genera la impresión del archivo de excel
     * @author Alexander Numpaque
     * @package Predial
     * @param $requestr (Request) action post recibida del formulario
     * @return $content Response Archivo de PDF con los predios que tienen adeudo
     */
    public function generatePdf(Request $request)
{
    //$idI = decrypt($request->sltPredioI);
    //$idF = decrypt($request->sltPredioF);
    $idI = $request->sltPredioI;
    $idF = $request->sltPredioF;
    $cod_i = DB::select(
        "SELECT codigo_catastral as codi
         FROM    gp_predio1
         WHERE id_unico=$idI
         ORDER BY id_unico DESC LIMIT 1"
    );
    $cod_in = $cod_i[0]->codi;
    $cod_f = DB::select(
        "SELECT codigo_catastral as codf
         FROM    gp_predio1
         WHERE id_unico=$idF
         ORDER BY id_unico DESC LIMIT 1"
    );
    $cod_fi = $cod_f[0]->codf;

    $predios = DB::table('gr_cartera_obligada as gco')
        ->leftJoin('gp_predio1 as gpr', 'gco.predio', '=', 'gpr.id_unico')
        ->leftJoin('gr_avaluo as gav', 'gpr.id_unico', '=', 'gav.predio')
        ->whereBetween('gpr.codigo_catastral', [$cod_in, $cod_fi])
        ->where('gco.fecha', $request->sltCartera)
        ->select('gpr.id_unico', 'gpr.direccion', 'gpr.codigo_catastral')
        ->distinct()
        ->get();

    $annoI = $request->txtAnnoI;
    $annoF = $request->txtAnnoF;
    $monto = $request->txtMonto;
    $fechaG = $request->txtFechaF;
    $headers = array(
        "Content-type" => "text/html",
        "Content-Disposition" => "attachment;Filename=ResolucionesCobro.doc"
    );

    $tipoD = DB::table("gf_tipo_documento AS td")
        ->where("td.nombre", "=", "Resolucion Coactivo Barbosa")
        ->first();

    if (!empty($tipoD)) {

        $compania = ListadoPagosController::obtenerCompania();
        $pdf = new MiFpdf();
        $pdf->AliasNbPages('{nb}');
        $pdf->logoPath = !empty($compania->logo) ? $compania->logo : '';

        $liq = new LiquidadorInteresesController();
        $xanno = "";
        $first = true;
        foreach ($predios as $value) {
            $valorD = 0;
            $deb = 0;
            $ultimop = ExtractoController::obtnerultimoannopago($value->id_unico);
            if ($ultimop < date("Y") || empty($ultimop)) {
                $xanno = empty($ultimop) ? $annoI : $ultimop;
                $avaluos = ResolucionCobro::obtenerAvaluos($value->id_unico, $xanno, $annoF);
                $propros = DB::table("gp_tercero_predio AS gtp")
                    ->select("gpr.nombres", "gpr.numero")
                    ->leftJoin("gr_propietarios as gpr", "gtp.tercero", "=", "gpr.id_unico")
                    ->where("gtp.predio", "=", $value->id_unico)
                    ->where("gtp.propietario", "=", 0)
                    ->where("gtp.orden", "=", "001")
                    ->first();

                $copros = DB::table("gp_tercero_predio AS gtp")
                    ->select("gpr.nombres", "gpr.numero")
                    ->leftJoin("gr_propietarios as gpr", "gtp.tercero", "=", "gpr.id_unico")
                    ->where("gtp.predio", "=", $value->id_unico)
                    ->where("gtp.propietario", "!=", 0)
                    ->where("gtp.orden", "!=", "001")
                    ->get();

                $avaluoF = DB::table("gr_avaluo")
                    ->select("valor")
                    ->where("anno", "=", $annoF)
                    ->where("predio", "=", $value->id_unico)
                    ->first();

                if (!empty($avaluoF)) {
                    $avaluo_val = $avaluoF->valor;
                } else {
                    $avaluo_val = 0;
                }

                if (isset($propros)) {

                    $valorTo = DB::table('gr_cartera_obligada as gco')
                        ->leftJoin('gp_predio1 as gpr', 'gco.predio', '=', 'gpr.id_unico')
                        ->leftJoin('gr_avaluo as gav', 'gco.avaluo', '=', 'gav.id_unico')
                        ->leftJoin('gr_concepto as gct', 'gco.concepto', '=', 'gct.id_unico')
                        ->where('gco.fecha', $request->sltCartera)
                        ->where("gco.predio", "=", $value->id_unico)
                        ->select(
                            'gpr.codigo_catastral as cod',
                            'gav.anno',
                            DB::raw('sum(if(gco.concepto = 1, gco.valor, 0)) as imp'),
                            DB::raw('sum(if(gco.concepto = 4, gco.valor, 0)) as "int"'),
                            DB::raw('sum(if(gco.concepto = 3, gco.valor, 0)) as cas'),
                            DB::raw('sum(if(gco.concepto = 8, gco.valor, 0)) as inc'),
                            DB::raw('sum(if(gco.concepto = 7, gco.valor, 0)) as sob'),
                            DB::raw('sum(if(gco.concepto = 6, gco.valor, 0)) as pap'),
                            DB::raw('sum(if(gco.concepto = 9, gco.valor, 0)) as deb')
                        )
                        ->groupBy('gco.avaluo')
                        ->groupBy('gco.predio')
                        ->orderBy('gpr.id_unico', 'ASC')
                        ->orderBy('gav.anno', 'ASC')
                        ->distinct()
                        ->get();

                    list($valorD, $xxx) = array(0, 0);

                    foreach ($valorTo as $rowTOT) {
                        $xxx = $rowTOT->imp + $rowTOT->int + $rowTOT->cas + $rowTOT->sob + $rowTOT->pap + $rowTOT->deb + $rowTOT->inc;
                        $valorD += $xxx;
                    }

                    if ($valorD == 0) {
                        $valorL = "Cero";
                    } else {
                        $valorL = ExtractoController::num2letras($valorD, false, false);
                    }

                    //iNSERTAMOS Y MOSTRAMOS NUMERO DE RESOLUCION
                    /*
                    $numR = DB::table("gr_consecutivo_resolucion AS cr")
                        ->first();
                    $fechaAc = date('Y-m-d');
                    if (!empty($numR)) {
                        $sqlCo = DB::select(
                            "SELECT numero+1 as numero
                        FROM    gr_consecutivo_resolucion
                        ORDER BY id_unico DESC LIMIT 1"
                        );
                        $consecutivo = $sqlCo[0]->numero;
                        $In = DB::table('gr_consecutivo_resolucion')
                            ->insert(['numero' => $consecutivo, 'fecha_generacion' => $fechaAc, 'predio' => $value->id_unico]);
                    } else {
                        $vigencias = DB::select(
                            "SELECT id_unico, anno
                        FROM    gf_parametrizacion_anno
                        WHERE   COMPANIA = 1
                        ORDER BY ANNO DESC LIMIT 1"
                        );
                        $conse = $vigencias[0]->anno;
                        $consecutivo = $conse . '000003';
                        $In = DB::table('gr_consecutivo_resolucion')
                            ->insert(['numero' => $consecutivo, 'fecha_generacion' => $fechaAc, 'predio' => $value->id_unico]);
                    }

                    $numero_res = DB::select(
                        "SELECT numero
                    FROM    gr_consecutivo_resolucion
                    ORDER BY id_unico DESC LIMIT 1"
                    );
                    $numero_resolucion = $numero_res[0]->numero;
                    */

                    $fechaAc = date('Y-m-d');
                    $anno    = date('Y');

                    $numR = DB::table('gr_consecutivo_resolucion')
                        ->where('numero', 'LIKE', $anno . '%')
                        ->orderBy('id_unico', 'DESC')
                        ->first();

                    if (!empty($numR)) {
                        $consecutivo = $numR->numero + 1;
                    } else {
                        $consecutivo = $anno . '000001';
                    }

                    DB::table('gr_consecutivo_resolucion')
                        ->insert(['numero' => $consecutivo, 'fecha_generacion' => $fechaAc, 'predio' => $value->id_unico]);

                    $numero_resolucion = $consecutivo;

                    $dataVi = DB::table('gr_cartera_obligada as gco')
                        ->leftJoin('gp_predio1 as gpr', 'gco.predio', '=', 'gpr.id_unico')
                        ->leftJoin('gr_avaluo as gav', 'gco.avaluo', '=', 'gav.id_unico')
                        ->leftJoin('gr_concepto as gct', 'gco.concepto', '=', 'gct.id_unico')
                        ->leftJoin('gp_tercero_predio as tpr', 'tpr.predio', '=', 'gpr.id_unico')
                        ->leftJoin('gr_propietarios as pro', 'tpr.tercero', '=', 'pro.id_unico')
                        ->leftJoin('gp_tipo_predio as tp', 'tp.id_unico', '=', 'gpr.tipo_predio')
                        ->leftJoin('gf_tipo_identificacion as ti', 'ti.id_unico', '=', 'pro.tipoidentificacion')
                        ->where('gco.fecha', $request->sltCartera)
                        ->where("gco.predio", "=", $value->id_unico)
                        ->select(
                            DB::raw('MIN(gav.anno) as menor'),
                            DB::raw('MAX(gav.anno)as mayor')
                        )
                        ->groupBy('gco.predio')
                        ->orderBy('gpr.id_unico', 'ASC')
                        ->distinct()
                        ->first();

                    $anioI = !empty($dataVi) ? $dataVi->menor : $xanno;
$anioF = !empty($dataVi) ? $dataVi->mayor : $annoF;

                    $pdf->numRes      = $numero_resolucion;
                    $pdf->propietario = $propros->nombres;
                    $pdf->cedula      = $propros->numero;
                    $pdf->direccion   = $value->direccion;
                    $pdf->catastral   = $value->codigo_catastral;
                    $pdf->avaluo      = $avaluo_val;
                    $pdf->vigencias   = $anioI . '-' . $anioF;
                    $pdf->copros      = $copros;

                    $pdf->AddPage('P', 'A4');
                    $first = false;

                    $pdf->SetFont('Arial', 'B', 9);
                    $pdf->SetX(30);
                    $pdf->MultiCell(150, 5, iconv('utf-8', 'cp1252', 'La Secretaria de Hacienda del Municipio de Barbosa, de conformidad con las facultades conferidas por la Ley 1066 del 29 de Julio de 2009, articulo 2 de la Ley 44 de 1990, el Decreto Reglamentario No. 4473 de 2006, el Acuerdo Municipal No. 023 del 30 de Diciembre de 1998, Estatuto Tributario Nacional por remisión expresa de la Ley 383 de 1997  Código de Procedimiento Administrativo y de lo Contencioso Administrativo, Código General del Proceso, y demás normas concordantes y complementarias y'), 0, 'FJ');
                    $pdf->Ln(3);
                    $pdf->SetX(20);
                    $pdf->Cell(170, 5, utf8_decode('CONSIDERANDO'), 0, 0, 'C');
                    $pdf->Ln(8);
                    $pdf->SetX(30);
                    $pdf->SetFont('Arial', '', 9);
                    $pdf->MultiCell(150, 5, iconv('utf-8', 'cp1252', '1.Que según lo dispuesto por el Artículo 98 del Código de Procedimiento Administrativo y de lo Contencioso Administrativo, las entidades publicas definidas en el parágrafo del articulo 104 deberán recaudar las obligaciones creadas en su favor, que consten en documentos que presten merito ejecutivo de conformidad con este código.'), 0, 'FJ');
                    $pdf->Ln(2);
                    $pdf->SetX(30);
                    $pdf->SetFont('Arial', '', 9);
                    $pdf->MultiCell(150, 5, iconv('utf-8', 'cp1252', '2.Que el articulo 99 del Código de Procedimiento Administrativo y de lo Contencioso Administrativo expresa: "prestaran merito ejecutivo para su cobro coactivo siempre que en ellos conste una obligación clara, expresa y exigible, los siguientes documentos:'), 0, 'FJ');
                    $pdf->Ln(2);
                    $pdf->SetX(45);
                    $pdf->SetFont('Arial', '', 9);
                    $pdf->SetFont('Times', 'I');
                    $pdf->MultiCell(130, 5, iconv('utf-8', 'cp1252', '1. Todo Acto administrativo ejecutoriado que imponga a favor de las entidades publicas a las que alude el parágrafo del articulo 104, la obligación de pagar una suma liquida de dinero en los casos previstos en la ley"'), 0, 'FJ');
                    $pdf->Ln(2);
                    $pdf->SetX(30);
                    $pdf->SetFont('Arial', '', 9);
                    $pdf->MultiCell(150, 5, iconv('utf-8', 'cp1252', '3. Que el articulo 828 del Estatuto Tributario Nacional menciona, las liquidaciones oficiales ejecutoriadas prestan merito ejecutivo y en la presente Resolución se ha vertido el acto de liquidación oficial por concepto del Impuesto Predial Unificado.'), 0, 'FJ');
                    $pdf->Ln(2);
                    $pdf->SetX(30);
                    $pdf->SetFont('Arial', '', 9);
                    $pdf->MultiCell(150, 5, iconv('utf-8', 'cp1252', '4. Que de conformidad con el Articulo 317 de la Constitución Política de Colombia, y la Ley 44 de 1990, es deber todo propietario del inmueble pagar el Impuesto Predial Unificado.'), 0, 'FJ');
                    $pdf->Ln(2);
                    $pdf->SetX(30);
                    $pdf->SetFont('Arial', '', 9);
                    $pdf->MultiCell(150, 5, iconv('utf-8', 'cp1252', '5. Que es función de la Secretaria de Hacienda Municipal, efectuar la liquidación y posterior notificación del Impuesto Predial Unificado y adelantar las acciones necesarias para lograr de los sujetos pasivos morosos del Impuesto en mención, el pago de las obligaciones insolutas a favor del Municipio.'), 0, 'FJ');
                    $pdf->Ln(2);
                    $pdf->SetX(30);
                    $pdf->SetFont('Arial', '', 9);
                    //$pdf->SetRightMargin(30);
                    $pdf->MultiCell(150, 5, iconv('utf-8', 'cp1252', '6. Que de conformidad con el Titulo II, Capítulo I, artículos 12 al 32 del Estatuto de Rentas del Municipio de Barbosa (Acuerdo 019 de 2024), se crea y regula todo lo relacionado con el impuesto predial, por lo cual en la presente resolución se procede a liquidar el mismo.'), 0, 'FJ');
                    $pdf->Ln(2);
                    $pdf->SetX(30);
                    $pdf->SetFont('Arial', '', 9);
                    //$pdf->MultiCell(150, 5, iconv('utf-8', 'cp1252','6.Que el contribuyente '.$propros->nombres.'adeuda al Municipio de Barbosa, la suma de '.mb_strtoupper($valorL).' MCTE,($'.number_format($valorD, 0, ',', '.').')'.'por concepto de impuesto predial unificado del inmueble ubicado en la '.$value->direccion.', identificado con Cédula Catastral No. '.$value->codigo_catastral.' más intereses moratorios y discriminada así:'), 0, 'FJ');
                    $pdf->Ln(2);
                    $a = $pdf->GetY();
                    //$pdf->Cell(60,5,$a,0,'C');
                    if ($a > 260) {
                        $pdf->AddPage();
                        $pdf->Ln(10);
                    }
                    $pdf->SetLeftMargin(30);
                    $pdf->SetRightMargin(30);
                    $propietario = rtrim($propros->nombres);
                    $html = "7.Que el contribuyente <b>" . $propietario . "</b> adeuda al Municipio de Barbosa,<br> la suma de <b>" . mb_strtoupper($valorL) . " MCTE</b>,($" . number_format($valorD, 0, ',', '.') . ")" . " por concepto de impuesto predial unificado del inmueble ubicado en la <b>" . $value->direccion . "</b>, identificado con Cédula Catastral No. <b>" . $value->codigo_catastral . "</b> más intereses moratorios y discriminada así:";
                    $pdf->WriteHTML(utf8_decode($html));
                    $pdf->Ln(10);

                    $pdf->SetX(30);
                    $ay = $pdf->GetY();
                    if ($ay > 260) {
                        $pdf->AddPage();
                        $pdf->Ln(10);
                    }
                    $pdf->SetFont('Arial', 'B', 6);
                    $pdf->Cell(12, 7, utf8_decode('AÑO'), 1, 0, 'C');
                    $pdf->Cell(24, 7, utf8_decode('AVALUO'), 1, 0, 'C');
                    $pdf->Cell(24, 7, utf8_decode('IMPUESTO PREDIAL'), 1, 0, 'C');
                    $pdf->Cell(14, 7, utf8_decode('INTERES'), 1, 0, 'C');
                    $pdf->Cell(14, 7, utf8_decode('CAS'), 1, 0, 'C');
                    $pdf->Cell(18, 7, utf8_decode('INTERES CAS'), 1, 0, 'C');
                    $pdf->Cell(12, 7, utf8_decode('SOB BOM'), 1, 0, 'C');
                    $pdf->Cell(15, 7, utf8_decode('PAPELERIA'), 1, 0, 'C');
                    $pdf->Cell(12, 7, utf8_decode('D.COB'), 1, 0, 'C');
                    $pdf->Cell(22, 7, utf8_decode('TOTAL'), 1, 0, 'C');
                    $pdf->Ln();

                    $dataT = DB::table('gr_cartera_obligada as gco')
                        ->leftJoin('gp_predio1 as gpr', 'gco.predio', '=', 'gpr.id_unico')
                        ->leftJoin('gr_avaluo as gav', 'gco.avaluo', '=', 'gav.id_unico')
                        ->leftJoin('gr_concepto as gct', 'gco.concepto', '=', 'gct.id_unico')
                        ->where('gco.fecha', $request->sltCartera)
                        ->where("gco.predio", "=", $value->id_unico)
                        ->select(
                            'gpr.codigo_catastral as cod',
                            'gav.anno',
                            'gav.valor as avaluo',
                            DB::raw('sum(if(gco.concepto = 1, gco.valor, 0)) as imp'),
                            DB::raw('sum(if(gco.concepto = 4, gco.valor, 0)) as "int"'),
                            DB::raw('sum(if(gco.concepto = 3, gco.valor, 0)) as cas'),
                            DB::raw('sum(if(gco.concepto = 8, gco.valor, 0)) as inc'),
                            DB::raw('sum(if(gco.concepto = 7, gco.valor, 0)) as sob'),
                            DB::raw('sum(if(gco.concepto = 6, gco.valor, 0)) as pap'),
                            DB::raw('sum(if(gco.concepto = 9, gco.valor, 0)) as deb')
                        )
                        ->groupBy('gco.avaluo')
                        ->groupBy('gco.predio')
                        ->groupBy('gav.valor')
                        ->orderBy('gpr.id_unico', 'ASC')
                        ->orderBy('gav.anno', 'ASC')
                        ->distinct()
                        ->get();

                    $pdf->SetFont('Arial', '', 6);
                    list($imp, $int, $cas, $inc, $sob, $pap, $deb, $xto, $xxx) = array(0, 0, 0, 0, 0, 0, 0, 0, 0);
                    foreach ($dataT as $rowT) {
                        $xxx = $rowT->imp + $rowT->int + $rowT->cas + $rowT->sob + $rowT->pap + $rowT->deb + $rowT->inc;
                        $imp += $rowT->imp;
                        $int += $rowT->int;
                        $int += $rowT->cas;
                        $sob += $rowT->sob;
                        $pap += $rowT->pap;
                        $deb += $rowT->deb;
                        $xto += $xxx;
                        $inc += $rowT->inc;
                        $cas += $rowT->cas;
                        $pdf->Cell(12, 7, $rowT->anno, 1, 0, 'R');
                        $pdf->Cell(24, 7, number_format($rowT->avaluo, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(24, 7, number_format($rowT->imp, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(14, 7, number_format($rowT->int, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(14, 7, number_format($rowT->cas, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(18, 7, number_format($rowT->inc, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(12, 7, number_format($rowT->sob, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(15, 7, number_format($rowT->pap, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(12, 7, number_format($rowT->deb, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(22, 7, number_format($xxx, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Ln();
                    }

                    $pdf->SetFont('Arial', 'B', 6);
                    $pdf->Cell(36, 7, utf8_decode('TOTALES'), 1, 0, 'C');
                    $pdf->Cell(24, 7, number_format($imp, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(14, 7, number_format($int, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(14, 7, number_format($cas, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(18, 7, number_format($inc, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(12, 7, number_format($sob, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(15, 7, number_format($pap, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(12, 7, number_format($deb, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(22, 7, number_format($xto, 2, ',', '.'), 1, 0, 'R');

                    $pdf->Ln(10);
                    $pdf->SetFont('Arial', '', 9);
                    $pdf->SetX(30);
                    $pdf->Cell(170, 5, utf8_decode('Que en mérito de lo expuesto,'), 0, 0, 'L');
                    $pdf->Ln(7);
                    $pdf->SetX(20);
                    $pdf->SetFont('Arial', 'B', 9);
                    $pdf->Cell(170, 5, utf8_decode('RESUELVE'), 0, 0, 'C');
                    $pdf->Ln(6);
                    $pdf->SetX(30);
                    $pdf->SetLeftMargin(30);
                    $pdf->SetRightMargin(30);
                    $propietario = rtrim($propros->nombres);
                    $htmla1 = "<b>ARTÍCULO PRIMERO: </b>Expedir la liquidación del Impuesto Predial Unificado del Municipio de Barbosa Santander , por la suma de <b>" . mb_strtoupper($valorL) . " MCTE</b>,($" . number_format($valorD, 0, ',', '.') . "), mediante la Resolución Administrativa No. " . $numero_resolucion . ", y con cargo a " . $propietario . ",más los intereses moratorios que se generen desde que se hizo exigible la obligación y hasta el momento del pago, liquidados a la tasa legal vigente para esa fecha de acuerdo con los artículos 634 y 635 del Estatuto Tributario Nacional, y determinadas de la siguiente forma:";
                    $pdf->WriteHTML(utf8_decode($htmla1));
                    $pdf->Ln(8);
                    $pdf->SetFont('Arial', 'B', 6);
                    $pdf->Cell(12, 7, utf8_decode('AÑO'), 1, 0, 'C');
                    $pdf->Cell(24, 7, utf8_decode('AVALUO'), 1, 0, 'C');
                    $pdf->Cell(24, 7, utf8_decode('IMPUESTO PREDIAL'), 1, 0, 'C');
                    $pdf->Cell(14, 7, utf8_decode('INTERES'), 1, 0, 'C');
                    $pdf->Cell(14, 7, utf8_decode('CAS'), 1, 0, 'C');
                    $pdf->Cell(18, 7, utf8_decode('INTERES CAS'), 1, 0, 'C');
                    $pdf->Cell(12, 7, utf8_decode('SOB BOM'), 1, 0, 'C');
                    $pdf->Cell(15, 7, utf8_decode('PAPELERIA'), 1, 0, 'C');
                    $pdf->Cell(12, 7, utf8_decode('D.COB'), 1, 0, 'C');
                    $pdf->Cell(22, 7, utf8_decode('TOTAL'), 1, 0, 'C');
                    $pdf->Ln();

                    $pdf->SetFont('Arial', '', 6);
                    list($imp, $int, $cas, $inc, $sob, $pap, $deb, $xto, $xxx) = array(0, 0, 0, 0, 0, 0, 0, 0, 0);
                    foreach ($dataT as $rowT) {
                        $xxx = $rowT->imp + $rowT->int + $rowT->cas + $rowT->sob + $rowT->pap + $rowT->deb + $rowT->inc;
                        $imp += $rowT->imp;
                        $int += $rowT->int;
                        $int += $rowT->cas;
                        $sob += $rowT->sob;
                        $pap += $rowT->pap;
                        $deb += $rowT->deb;
                        $xto += $xxx;
                        $inc += $rowT->inc;
                        $cas += $rowT->cas;
                        $pdf->Cell(12, 7, $rowT->anno, 1, 0, 'R');
                        $pdf->Cell(24, 7, number_format($rowT->avaluo, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(24, 7, number_format($rowT->imp, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(14, 7, number_format($rowT->int, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(14, 7, number_format($rowT->cas, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(18, 7, number_format($rowT->inc, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(12, 7, number_format($rowT->sob, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(15, 7, number_format($rowT->pap, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(12, 7, number_format($rowT->deb, 2, ',', '.'), 1, 0, 'R');
                        $pdf->Cell(22, 7, number_format($xxx, 2, ',', '.'), 1, 0, 'R');
                        // $pdf->Cell(12,7,  number_format($row->imp, 2, ',', '.'),1, 0 , 'R' );
                        // $pdf->Cell(12,7,  number_format($row->imp, 2, ',', '.'),1, 0 , 'R' );
                        // $pdf->Cell(12,7,  number_format($row->imp, 2, ',', '.'),1, 0 , 'R' );
                        $pdf->Ln();
                    }
                    $pdf->SetFont('Arial', 'B', 6);
                    $pdf->Cell(36, 7, utf8_decode('TOTALES'), 1, 0, 'C');
                    $pdf->Cell(24, 7, number_format($imp, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(14, 7, number_format($int, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(14, 7, number_format($cas, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(18, 7, number_format($inc, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(12, 7, number_format($sob, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(15, 7, number_format($pap, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(12, 7, number_format($deb, 2, ',', '.'), 1, 0, 'R');
                    $pdf->Cell(22, 7, number_format($xto, 2, ',', '.'), 1, 0, 'R');

                    $pdf->SetFont('Arial', '', 9);
                    $pdf->Ln(10);
                    $pdf->SetX(30);
                    $pdf->SetLeftMargin(30);
                    $pdf->SetRightMargin(30);
                    $htmla2 = "<b>PARÁGRAFO PRIMERO: </b>Los intereses de mora generados, deberán ser liquidados con las condiciones legales vigentes en el momento de pago.";
                    $pdf->WriteHTML(utf8_decode($htmla2));
                    $pdf->SetFont('Arial', '', 9);
                    $pdf->Ln(10);
                    $pdf->SetX(30);
                    $pdf->SetLeftMargin(30);
                    $pdf->SetRightMargin(30);
                    $htmlaP = "<b>ARTÍCULO SEGUNDO: </b>La presente liquidación se constituye como título ejecutivo base de recaudo y de Proceso de Jurisdicción Coactiva.";
                    $pdf->WriteHTML(utf8_decode($htmlaP));
                    $pdf->Ln(8);
                    $pdf->SetX(30);
                    $pdf->SetLeftMargin(30);
                    $pdf->SetRightMargin(30);
                    $htmla3 = "<b>ARTÍCULO TERCERO:NOTIFICACIÓN:</b>Contra la presente liquidación oficial procede el recurso de RECONSIDERACION de conformidad con lo establecido en el artículo del estatuto de rentas en concordancia con el art. 720 del estatuto tributario nacional, en el cual deberá interponerse ante este despacho dentro de los dos (2) meses siguientes a la notificación del presente acto. Notifíquese de conformidad con el artículo 354 de la ley 1819 del 2016 en la página web del Municipio de Barbosa - Santander, previa socialización.";
                    $pdf->WriteHTML(utf8_decode($htmla3));
                    // $pdf->Ln(8);
                    // $pdf->SetX(30);
                    // $pdf->SetLeftMargin(30);
                    // $pdf->SetRightMargin(30);
                    // $htmla4="<b>ARTÍCULO CUARTO: RECURSOS:</b>Contra la presente liquidación oficial procede el recurso de <b>RECONSIDERACIÓN</b>, de conformidad con lo establecido en el artículo 720 del Estatuto Tributario, el cual podrá interponerse ante la Secretaria de Hacienda dentro de los dos meses siguientes a la notificación del presente acto y deberá cumplir con los requisitos exigidos por el articulo 722 de Estatuto Tributario.";
                    // $pdf->WriteHTML(utf8_decode($htmla4));
                    $pdf->Ln(8);
                    $pdf->SetX(30);
                    $pdf->SetLeftMargin(30);
                    $pdf->SetRightMargin(30);
                    $htmla5 = "<b>ARTÍCULO CUARTO:</b>El presente acto administrativo presta merito ejecutivo.";
                    $pdf->WriteHTML(utf8_decode($htmla5));
                    $pdf->Ln(10);
                    $pdf->SetFont('Arial', '', 9);
                    $pdf->SetX(30);

                    $meses = array(1 => "Enero", 2 => "Febrero", 3 => "Marzo", 4 => "Abril", 5 => "Mayo", 6 => "Junio", 7 => "Julio", 8 => "Agosto", 9 => "Septiembre", 10 => "Octubre", 11 => "Noviembre", 12 => "Diciembre");

                    if (!empty($fechaG)) {
                        $fechaC = $fechaG;
                    } else {
                        $fechaC = null;
                    }

                    if ($fechaC != null) {
                        $fechaDiv = explode("/", $fechaC);
                        $diaP = $fechaDiv[0];
                        $mesP = $fechaDiv[1];
                        $mesP = intval($mesP);
                        $anioP = $fechaDiv[2];
                        $nmes = $meses[$mesP];
                        $dia = $diaP;
                        $mesl = $meses[$mesP];
                        $aniof = $anioP;
                    } else {
                        $dia = date("d");
                        $mx = (int) date("m");
                        $mesl = $meses[$mx];
                        $aniof = date("Y");
                    }
                    $dias = ExtractoController::num2letras($dia, false, false, 1);

                    if ((277 - $pdf->GetY()) < 71) {
                        $pdf->AddPage();
                        $pdf->Ln(15);
                    }

                    $pdf->MultiCell(150, 5, iconv('utf-8', 'cp1252', "Expedido en el Municipio de Barbosa – Departamento de Santander a los " . $dias . "(" . $dia . ")" . "  días del mes de " . $mesl . " del año " . $aniof . ""), 0, 'C');
                    $pdf->Ln(8);
                    $pdf->SetX(20);
                    $pdf->SetFont('Arial', 'B', 9);
                    $pdf->Cell(170, 5, utf8_decode('NOTIFÍQUESE Y CÚMPLASE'), 0, 0, 'C');
                    $pdf->Ln(7);

                    $pdf->SetFont('Arial', 'B', 9);
                    $hoy = Carbon::today();

                    $firma = DB::table('gf_responsable_documento as rd')
                        ->select(
                            DB::raw('IF(CONCAT_WS(" ",
                                            t.nombreuno,
                                            t.nombredos,
                                            t.apellidouno,
                                            t.apellidodos
                                        ) = " ",
                                        t.razonsocial,
                                        CONCAT_WS(" ",
                                            t.nombreuno,
                                            t.nombredos,
                                            t.apellidouno,
                                            t.apellidodos
                                        )
                                    ) as res'),
                            'tr.nombre as nomt',
                            'tre.nombre as ntro'
                        )
                        ->leftJoin('gf_tercero as t',           'rd.tercero',         '=', 't.id_unico')
                        ->leftJoin('gf_tipo_documento as td',   'rd.tipodocumento',   '=', 'td.id_unico')
                        ->leftJoin('gf_tipo_responsable as tr', 'rd.tiporesponsable', '=', 'tr.id_unico')
                        ->leftJoin('gg_tipo_relacion as tre',   'rd.tipo_relacion',   '=', 'tre.id_unico')
                        ->where('td.nombre', '=', 'Resolución Cobro')
                        ->where('rd.fecha_inicio', '<=', $hoy)
                        ->where(function ($q) use ($hoy) {
                            $q->whereNull('rd.fecha_fin')
                              ->orWhere('rd.fecha_fin', '>=', $hoy);
                        })
                        ->first();

                    $pdf->SetX(20);
                    $pdf->Image('./img/Firma/NINI_YOHANA.jpg', 82, $pdf->GetY(), 50);
                    $pdf->Ln(26);
                    $pdf->Cell(150, 4, utf8_decode($firma->res), 0, 0, 'C');
                    $pdf->Ln();
                    $pdf->SetX(20);
                    $pdf->Cell(170, 4, utf8_decode($firma->nomt), 0, 0, 'C');
                    $pdf->Ln();
                    $pdf->SetX(20);
                    $pdf->Cell(170, 4, utf8_decode('Municipio de Barbosa'), 0, 0, 'C');
                }
            }
        }
    } else {
        // $html = "";
        // $html .= "<html>";
        // $html .= "\n\t<head>";
        // $html .= "\n\t\t<meta charset='utf-8'>";
        // $html .= "\n\t\t<style type='text/css' media='screen'>";
        // $html .= "\n\t\t\thtml, body{";
        // $html .= "\n\t\t\t\tfont-family: Arial, sans-serif;";
        // $html .= "\n\t\t\t\tfont-size: 11px;";
        // $html .= "\n\t\t\t}";
        // $html .= "\n\t\t\th1, h2, h3, h4{";
        // $html .= "\n\t\t\t\tfont-weight: 800;";
        // $html .= "\n\t\t\t}";
        // $html .= "\n\t\t\th1, h2, h3, h4, h5, h6, p{";
        // $html .= "\n\t\t\t\tfont-family: Arial, sans-serif;";
        // $html .= "\n\t\t\t}";
        // $html .= "\n\t\t\t.bold{";
        // $html .= "\n\t\t\t\tfont-weight:800;";
        // $html .= "\n\t\t\t}";
        // $html .= "\n\t\t</style>";
        // $html .= "\n\t</head>";
        // $html .= "\n\t<body>";
        $liq = new LiquidadorInteresesController();
        $xanno = "";
        foreach ($predios as $value) {
            $valorD = 0;
            $deb = 0;
            $ultimop = ExtractoController::obtnerultimoannopago($value->id_unico);
            if ($ultimop < date("Y") || empty($ultimop)) {
                $xanno = empty($ultimop) ? $annoI : $ultimop;
                $avaluos = ResolucionCobro::obtenerAvaluos($value->id_unico, $xanno, $annoF);
                $propros = DB::table("gp_tercero_predio AS gtp")
                    ->select("gpr.nombres", "gpr.numero")
                    ->leftJoin("gr_propietarios as gpr", "gtp.tercero", "=", "gpr.id_unico")
                    ->where("gtp.predio", "=", $value->id_unico)
                    ->where("gtp.propietario", "=", 0)
                    ->where("gtp.orden", "=", "001")
                    ->first();

                $copros = DB::table("gp_tercero_predio AS gtp")
                    ->select("gpr.nombres", "gpr.numero")
                    ->leftJoin("gr_propietarios as gpr", "gtp.tercero", "=", "gpr.id_unico")
                    ->where("gtp.predio", "=", $value->id_unico)
                    ->where("gtp.propietario", "!=", 0)
                    ->where("gtp.orden", "!=", "001")
                    ->get();

                $avaluoF = DB::table("gr_avaluo")
                    ->select("valor")
                    ->where("anno", "=", $annoF)
                    ->where("predio", "=", $value->id_unico)
                    ->first();
                if (!empty($avaluoF)) {
                    $avaluo_val = $avaluoF->valor;
                } else {
                    $avaluo_val = 0;
                }
                $xhtml = "";
                list($ximp, $xdesc, $xint, $xcar, $xintc, $xbom, $xpap, $xdeb, $xto) = array(0, 0, 0, 0, 0, 0, 0, 0, 0);
                foreach ($avaluos as $row) {
                    $avaluo = $row->valor;
                    $tarifa = $row->tarifa;
                    $dateV = ResolucionCobro::fechaVencimiento($row->anno, 1);
                    $dateD = ResolucionCobro::fechaVencimiento($row->anno, 2);
                    $xfecha = ResolucionCobro::validarFechaVencimiento($dateV, $row->anno);
                    $imp = ResolucionCobro::calculoImpueto($avaluo, $tarifa);
                    $imp = ExtractoController::convertirPeso($imp);
                    if (empty($dateD)) {
                        $desc = 0;
                    } else {
                        //$desc   = ResolucionCobro::calculoDescuento($dateD->fecha, $imp);
                        $desc = 0;
                    }
                    $desct = ExtractoController::convertirPeso($desc);
                    $desct = $desc * -1;
                    $intm = $liq->liquidar_intereses($imp, $xfecha, date("Y-m-d"), date("Y-m-d"));
                    $intm = ExtractoController::convertirPeso($intm);
                    $xbase = ResolucionCobro::validarValorTipoBaseAmbiental($row->tipobaseambiental, $avaluo, $imp);
                    $rbase = explode(";", $xbase);
                    $base = $rbase[0];
                    $por = $rbase[1];
                    if (empty($xbase)) {
                        $car = 0;
                    } else {
                        $car = ResolucionCobro::calculoCorporacion($base, $row->porcentajeimpuestoambiental, $por);
                        $car = ExtractoController::convertirPeso($car);
                    }
                    $intc = $liq->liquidar_intereses($car, $xfecha, date("Y-m-d"), date("Y-m-d"));
                    $intc = ExtractoController::convertirPeso($intc);
                    if (empty($row->porcentajesobretasa)) {
                        $bom = 0;
                    } else {
                        $bom = ResolucionCobro::calculoSobretasaBomberil($imp, $row->porcentajesobretasa);
                        $bom = ExtractoController::convertirPeso($bom);
                    }
                    $pap = ResolucionCobro::obtenerValorPapeleria($row->anno);
                    $exdeb = ResolucionCobro::ValidarExistenciaDebidoCobrar($row->anno);
                    if (empty($exdeb)) {
                        $deb = 0;
                    } else {
                        $deb = ResolucionCobro::obtenerDebidoCobrar($value->id_unico);
                        $deb = ExtractoController::convertirPeso($deb);
                    }
                    $xxx = $imp + $desc + $intm + $car + $intc + $bom + $pap + $deb;
                    if ($xxx > $monto) {
                        $xto += $xxx;
                        $ximp += $imp;
                        $xdesc += $desct;
                        $xint += $intm;
                        $xcar += $car;
                        $xintc += $intc;
                        $xbom += $bom;
                        $xpap += $pap;
                        $xdeb += $deb;
                        // $xhtml .= "\n\t\t\t\t<tr style='font-size: 10px'>";
                        // $xhtml .= "\n\t\t\t\t\t<td style='text-align:right'>$row->anno</td>";
                        // $xhtml .= "\n\t\t\t\t\t<td style='text-align:right'>$tarifa</td>";
                        // $xhtml .= "\n\t\t\t\t\t<td style='text-align:right'>".number_format($avaluo, 0, ',', '.')."</td>";
                        // $xhtml .= "\n\t\t\t\t\t<td style='text-align:right'>".number_format($imp, 0, ',', '.')."</td>";
                        // $xhtml .= "\n\t\t\t\t\t<td style='text-align:right'>".number_format($desct, 0, ',', '.')."</td>";
                        // $xhtml .= "\n\t\t\t\t\t<td style='text-align:right'>".number_format($intm, 0, ',', '.')."</td>";
                        // $xhtml .= "\n\t\t\t\t\t<td style='text-align:right'>".number_format($car, 0, ',', '.')."</td>";
                        // $xhtml .= "\n\t\t\t\t\t<td style='text-align:right'>".number_format($intc, 0, ',', '.')."</td>";
                        // $xhtml .= "\n\t\t\t\t\t<td style='text-align:right'>".number_format($bom, 0, ',', '.')."</td>";
                        // $xhtml .= "\n\t\t\t\t\t<td style='text-align:right'>".number_format($pap, 0, ',', '.')."</td>";
                        // $xhtml .= "\n\t\t\t\t\t<td style='text-align:right'>".number_format($deb, 0, ',', '.')."</td>";
                        // $xhtml .= "\n\t\t\t\t\t<td style='text-align:right'>".number_format($xxx, 0, ',', '.')."</td>";
                        // $xhtml .= "\n\t\t\t\t</tr>";
                    }
                    $valorD = $xto;
                }

                if ($valorD == 0) {
                    $valorL = "Cero";
                } else {
                    $valorL = ExtractoController::num2letras($valorD, false, false);
                }

                // $html .= "\n\t\t<h4 style='text-align: center; font-size: 12px'>REPUBLICA DE COLOMBIA <br/> DEPARTAMENTO DE SANTANDER <br/> MUNICIPIO DE BARBOSA </h4>";
                // $html .= "\n\t\t<h4 style='text-align: center; font-size: 12px'>RESOLUCIÓN Nº</h4>";
                // $html .= "\n\t\t<h4 style='text-align: center; font-size: 12px'>Por medio de la cual se liquida oficialmente el impuesto predial</h4>";
                // $html .= "\n\t\t<table style='width: 100%; font-size: 12px;'>";
                // $html .= "\n\t\t\t<tr>";
                // $html .= "\n\t\t\t\t<th style='text-align: left;'>CONCEPTO:</th><td style='text-align: left;'>IMPUESTO PREDIAL UNIFICADO</td>";
                // $html .= "\n\t\t\t</tr>";
                // $html .= "\n\t\t\t<tr>";
                // $html .= "\n\t\t\t\t<th style='text-align: left;'>PROPIETARIO:</th style='text-align: left;'><td>$propros->nombres</td>";
                // $html .= "\n\t\t\t</tr>";
                // $html .= "\n\t\t\t<tr>";
                // $html .= "\n\t\t\t\t<th style='text-align: left;'>CEDULA DE CIUDADANIA:</th style='text-align: left;'><td>$propros->numero</td>";
                // $html .= "\n\t\t\t</tr>";
                // $html .= "\n\t\t\t<tr>";
                // $html .= "\n\t\t\t\t<th style='text-align: left;'>DIRECCIÓN:</th style='text-align: left;'><td>$value->direccion</td>";
                // $html .= "\n\t\t\t</tr>";
                // $html .= "\n\t\t\t<tr>";
                // $html .= "\n\t\t\t\t<th style='text-align: left;'>COPROPIETARIOS:</th style='text-align: left;'>";
                foreach ($copros as $rowss) {
                    // $html .="<tr><td>$rowss->nombres</td><td>$rowss->numero</td></tr>";
                }
                // $html .= "\n\t\t\t</tr>";
                // $html .= "\n\t\t\t<tr>";
                // $html .= "\n\t\t\t\t<th style='text-align: left;'>CODIGO CATASTRAL:</th style='text-align: left;'><td>$value->codigo_catastral</td>";
                // $html .= "\n\t\t\t</tr>";
                // $html .= "\n\t\t\t<tr>";
                // $html .= "\n\t\t\t\t<th style='text-align: left;'>AVALÚO CATASTRAL:</th style='text-align: left;'><td>".number_format($avaluoF->valor, 2)."</td>";
                // $html .= "\n\t\t\t</tr>";
                // $html .= "\n\t\t\t<tr>";
                // $html .= "\n\t\t\t\t<th style='text-align: left;'>VIGENCIAS:</th style='text-align: left;'><td>$xanno-$annoF</td>";
                // $html .= "\n\t\t\t</tr>";
                // $html .= "\n\t\t</table>";
                // $html .= "\n\t\t<h5 style='text-align: justify; font-size: 12px;'>La Secretaria de Hacienda del Municipio de Barbosa, de conformidad con las facultades conferidas por la Ley 1066 del 29 de Julio de 2009, articulo 2 de la Ley 44 de 1990, el Decreto Reglamentario No. 4473 de 2006, el Acuerdo Municipal No. 023 del 30 de Diciembre de 1998, Estatuto Tributario Nacional por remisión expresa de la Ley 383 de 1997  Código de Procedimiento Administrativo y de lo Contencioso Administrativo, Código General del Proceso, y demás normas concordantes y complementarias y</h5>";
                // $html .= "\n\t\t<h4 style='text-align: center; font-size: 12px;'>CONSIDERANDO</h4>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px;'>1.Que según lo dispuesto por el Artículo 98 del Código de Procedimiento Administrativo y de lo Contencioso Administrativo, las entidades publicas definidas en el parágrafo del articulo 104 deberán recaudar las obligaciones creadas en su favor, que consten en documentos que presten merito ejecutivo de conformidad con este código. </p>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px;'>2.Que el articulo 99 del Código de Procedimiento Administrativo y de lo Contencioso Administrativo expresa: <i>"prestaran merito ejecutivo para su cobro coactivo siempre que en ellos conste una obligación clara, expresa y exigible, los siguientes documentos:</i></p>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px; margin-left: 50px;'><i>1.    Todo Acto administrativo ejecutoriado que imponga a favor de las entidades publicas a las que alude el parágrafo del articulo 104, la obligación de pagar una suma liquida de dinero en los casos previstos en la ley" </i></p>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px;'>3. Que el articulo 828 del Estatuto Tributario Nacional menciona, las liquidaciones oficiales ejecutoriadas prestan merito ejecutivo y en la presente Resolución se ha vertido el acto de liquidación oficial por concepto del Impuesto Predial Unificado.</p>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px;'>4. Que de conformidad con el Articulo 317 de la Constitución Política de Colombia, y la Ley 44 de 1990, es deber todo propietario del inmueble pagar el Impuesto Predial Unificado. </p>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px;'>5. Que es función de la Secretaria de Hacienda Municipal, efectuar la liquidación y posterior notificación del Impuesto Predial Unificado y adelantar las acciones necesarias para lograr de los sujetos pasivos morosos del Impuesto en mención, el pago de las obligaciones insolutas a favor del Municipio. </p>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px;'>6. Que de conformidad con el Titulo Preliminar, Capitulo I, artículos 14 al 25 del Estatuto de Rentas del Municipio de Barbosa (Acuerdo 023 de 1998), se crea y regula todo lo relacionado con el impuesto predial, por lo cual en la presente resolución se procede a liquidar el mismo. </p>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px;'>7.Que el contribuyente <span class='bold'>$propros->nombres</span>, adeuda al Municipio de Barbosa, la suma de <span class='bold'>".mb_strtoupper($valorL)." MCTE</span>, ($".number_format($valorD, 0, ',', '.').") por concepto de impuesto predial unificado del inmueble ubicado en la <span class='bold'>".$value->direccion."</span>, identificado con Cédula Catastral No. <span class='bold'>$value->codigo_catastral</span> más intereses moratorios y discriminada así: </p>";
                // $html .= "\n\t\t<br/>";
                // $html .= "\n\t\t<table border='1' style='width:100%; font-size: 12px;'>";
                // $html .= "\n\t\t\t<thead>";
                // $html .= "\n\t\t\t\t<tr style='text-align:center'>";
                // $html .= "\n\t\t\t\t\t<th>AÑO</th>";
                // $html .= "\n\t\t\t\t\t<th>%M</th>";
                // $html .= "\n\t\t\t\t\t<th>AVALUO</th>";
                // $html .= "\n\t\t\t\t\t<th>IMP</th>";
                // $html .= "\n\t\t\t\t\t<th>DESC</th>";
                // $html .= "\n\t\t\t\t\t<th>INT. IMP</th>";
                // $html .= "\n\t\t\t\t\t<th>CAS</th>";
                // $html .= "\n\t\t\t\t\t<th>INT. CAS</th>";
                // $html .= "\n\t\t\t\t\t<th>SOB.BOM.</th>";
                // $html .= "\n\t\t\t\t\t<th>PAP.</th>";
                // $html .= "\n\t\t\t\t\t<th>D.COB</th>";
                // $html .= "\n\t\t\t\t\t<th>TOTAL</th>";
                // $html .= "\n\t\t\t\t</tr>";
                // $html .= "\n\t\t\t</thead>";
                // $html .= "\n\t\t\t<tbody>";
                // $html .= $xhtml;
                // $html .= "\n\t\t\t</tbody>";
                // $html .= "\n\t\t\t<tfoot>";
                // $html .= "\n\t\t\t</tfoot>";
                // $html .= "\n\t\t\t\t<tr style='font-size: 10px'>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:center; font-weight:800' colspan='3'>TOTALES</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($ximp, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xdesc, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xint, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xcar, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xintc, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xbom, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xpap, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($deb, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xto, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t</tr>";
                // $html .= "\n\t\t</table>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px;'>Que en mérito de lo expuesto, </p>";
                // $html .= "\n\t\t<br/>";
                // $html .= "\n\t\t<h4 style='text-align: center; font-size: 12px;'>RESUELVE</h4>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px;'><span class='bold'>ARTÍCULO PRIMERO: </span>Expedir la liquidación del Impuesto Predial Unificado del Municipio de Barbosa – Santander , por la suma de <span class='bold'>".mb_strtoupper($valorL)." MCTE</span>, ($".number_format($valorD, 0, ',', '.')."), mediante la Resolución Administrativa No. XXX, y con cargo a $propros->nombres, más los intereses moratorios que se generen desde que se hizo exigible la obligación y hasta el momento del pago, liquidados a la tasa legal vigente para esa fecha de acuerdo con los artículos 634 y 635 del Estatuto Tributario Nacional, y determinadas de la siguiente forma:</p>";
                // $html .= "\n\t\t<br/>";
                // $html .= "\n\t\t<table border='1' style='width:100%; font-size: 12px;'>";
                // $html .= "\n\t\t\t<thead>";
                // $html .= "\n\t\t\t\t<tr style='text-align:center'>";
                // $html .= "\n\t\t\t\t\t<th>AÑO</th>";
                // $html .= "\n\t\t\t\t\t<th>%M</th>";
                // $html .= "\n\t\t\t\t\t<th>AVALUO</th>";
                // $html .= "\n\t\t\t\t\t<th>IMP</th>";
                // $html .= "\n\t\t\t\t\t<th>DESC</th>";
                // $html .= "\n\t\t\t\t\t<th>INT. IMP</th>";
                // $html .= "\n\t\t\t\t\t<th>CAS</th>";
                // $html .= "\n\t\t\t\t\t<th>INT. CAS</th>";
                // $html .= "\n\t\t\t\t\t<th>SOB.BOM.</th>";
                // $html .= "\n\t\t\t\t\t<th>PAP.</th>";
                // $html .= "\n\t\t\t\t\t<th>D.COB</th>";
                // $html .= "\n\t\t\t\t\t<th>TOTAL</th>";
                // $html .= "\n\t\t\t\t</tr>";
                // $html .= "\n\t\t\t</thead>";
                // $html .= "\n\t\t\t<tbody>";
                // $html .= $xhtml;
                // $html .= "\n\t\t\t</tbody>";
                // $html .= "\n\t\t\t<tfoot>";
                // $html .= "\n\t\t\t</tfoot>";
                // $html .= "\n\t\t\t\t<tr style='font-size: 10px'>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:center; font-weight:800' colspan='3'>TOTALES</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($ximp, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xdesc, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xint, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xcar, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xintc, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xbom, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xpap, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($deb, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t\t<td style='text-align:right; font-weight:800'>".number_format($xto, 0, ',', '.')."</td>";
                // $html .= "\n\t\t\t\t</tr>";
                // $html .= "\n\t\t</table>";
                // $html .= "\n\t\t<br/>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px'><span class='bold'>ARTÍCULO SEGUNDO: </span>La presente liquidación se constituye como título ejecutivo base de recaudo y de Proceso de Jurisdicción Coactiva.</p>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px'><span class='bold'>ARTÍCULO TERCERO: NOTIFICACIÓN: </span>La presente <span class='bold'>LIQUIDACIÓN OFICIAL</span> se notificara personalmente o por correo de conformidad con lo establecido en el artículo 565 del Estatuto Tributario y en concordancia de las demás normas que versen sobre notificaciones de actos administrativos.</p>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px'><span class='bold'>ARTICULO CUARTO: RECURSOS: </span>Contra la presente liquidación oficial procede el recurso de <span class='bold'>RECONSIDERACIÓN</span>, de conformidad con lo establecido en el artículo 720 del Estatuto Tributario, el cual podrá interponerse ante la Secretaria de Hacienda dentro de los dos meses siguientes a la notificación del presente acto y deberá cumplir con los requisitos exigidos por el articulo 722 de Estatuto Tributario.</p>";
                // $html .= "\n\t\t<p style='text-align: justify; font-size: 12px'><span class='bold'>ARTICULO QUINTO: </span>El presente acto administrativo presta merito ejecutivo.</p>";
                // $html .= "\n\t\t<br/>";

                $dias = ExtractoController::num2letras(date("d"), false, false, 1);
                $meses = array(1 => "Enero", 2 => "Febrero", 3 => "Marzo", 4 => "Abril", 5 => "Mayo", 6 => "Junio", 7 => "Julio", 8 => "Agosto", 9 => "Septiembre", 10 => "Octubre", 11 => "Noviembre", 12 => "Diciembre");
                $mx = (int) date("m");
                // $html .= "\n\t\t<p style='text-align: center; font-size: 12px'>Expedido en el Municipio de Barbosa – Departamento de Santander a los $dias (".date('d').") días del mes de ".$meses[$mx]." del año ".date("Y").". </p>";
                // $html .= "\n\t\t<br/>";
                // $html .= "\n\t\t<h4 style='text-align: center; font-size: 12px'>NOTIFÍQUESE Y CÚMPLASE</h4>";
                // $html .= "\n\t\t<br/>";
                $firma = DB::table('gf_responsable_documento as rd')
                    ->select(
                        DB::raw('IF(CONCAT_WS(" ",
                                            t.nombreuno,
                                            t.nombredos,
                                            t.apellidouno,
                                            t.apellidodos
                                        ) = " ",
                                        t.razonsocial,
                                        CONCAT_WS(" ",
                                            t.nombreuno,
                                            t.nombredos,
                                            t.apellidouno,
                                            t.apellidodos
                                        )
                                    ) as res'),
                        'tr.nombre as nomt',
                        'tre.nombre as ntro'
                    )
                    ->leftjoin('gf_tercero as t', 'rd.tercero', '=', 't.id_unico')
                    ->leftjoin('gf_tipo_documento as td', 'rd.tipodocumento', '=', 'td.id_unico')
                    ->leftjoin('gf_tipo_responsable as tr', 'rd.tiporesponsable', '=', 'tr.id_unico')
                    ->leftjoin('gg_tipo_relacion as  tre', 'rd.tipo_relacion', '=', 'tre.id_unico')
                    ->where('td.nombre', '=', 'Resolución Cobro')
                    ->first();

                //    $html .= "\n\t\t<h4 style='text-align: center; font-size: 12px'>".$firma->res."<br/>".$firma->nomt."<br> Municipio de Barbosa</h4>";
                // $html .= "\n\t\t<br/>";
                // $html .= "\n\t\t<br/>";
                // $html .= "\n\t\t<br/>";
            }
        }
        // $html .= "\n\t<body>";
        // $html .= "</html>";
    }
    $pdf->Output();
    exit;
}

    

    /**
     * obtenerAvaluos
     * Metodo para obtener los avaluos respecto al predio
     * @author Alexander Numpaque
     * @package Predial
     * @param $predio (int) Id del predio
     * @param $annoI (int) Año inicial
     * @param $annoF (int) Año final
     * @return $data (Collection) Array con los años debidos
     */
    public static function obtenerAvaluos($predio, $annoI, $annoF)
    {
        try {
            $data = DB::table('gr_avaluo as ava')
                ->select(
                    'ava.anno',
                    'ava.valor',
                    'tar.valor as tarifa',
                    'tar.tipobaseambiental',
                    'tar.porcentajeimpuestoambiental',
                    'tar.porcentajesobretasa'
                )
                ->leftJoin('gr_tarifa as tar', 'ava.tarifa', '=', 'tar.id_unico')
                ->where('ava.predio', '=', $predio)
                ->where('ava.anno', '>', $annoI)
                ->where('ava.anno', '<=', $annoF)
                ->orderBy('ava.anno', 'asc')
                ->get();
            return $data;
        } catch (Exception $e) {
            return $e->getMessage();
        }
    }

    /**
     * calculoImpuesto
     * Metodo para el calculo del impuesto predial
     * @author Alexander Numpaque
     * @package Predial
     * @param $avaluo (double|int) Valor del avaluo
     * @param $tarifa (double|int) Valor de la tarifa
     * @return $valor (double|int) Valor de impuesto predial
     */
    public static function calculoImpueto($avaluo, $tarifa)
    {
        $valor = ($avaluo * $tarifa) / 1000;
        return $valor;
    }

    /**
     * fechaVencimientoDescuento
     * Metodo para obtener la fecha de vencimiento
     * @author Alexander Numpaque
     * @package Predial
     * @param $anno (int) Valor del año
     * @param $tipo (int) Tipo de fecha de vencimiento
     * @return $data (Collection|array) Data de la consulta
     */
    public static function fechaVencimiento($anno, $tipo)
    {
        $data = DB::table('gr_vencimiento as ven')
            ->leftJoin('gf_mes as mes', 'ven.mes', '=', 'mes.id_unico')
            ->where('ven.anno', '=', $anno)
            ->where('tipo', '=', $tipo)
            ->where('mes.numero', '=', date("m"))
            ->first();
        return $data;
    }

    /**
     * calculoDescuento
     * Metodo para calculo de Descuento
     * @author Alexander Numpaque
     * @package Predial
     * @param $fecha (data) Fecha de Descuento
     * @param $impuesto (int|double) Valor del impuesto calculado
     * @return $valor (int|double) Valor Calculado
     */
    public static function calculoDescuento($fecha, $impuesto)
    {
        $ff = explode("-", $fecha);
        $fecha = Carbon::createFromDate($ff[0], $ff[1], $ff[2]);
        if ($fecha->format("Y") == date("Y")) {

            if ($fecha->format('m') == '01') { #Mes de Enero
                $valor = ($impuesto * 20) / 100;
            } elseif ($fecha->format('m') == '02') { #Mes de Febrero
                $valor = ($impuesto * 15) / 100;
            } elseif ($fecha->format('m') == '03') { #Marzo
                $valor = ($impuesto * 10) / 100;
            } else {
                $valor = 0;
            }
        } else {
            $valor = 0;
        }
        $valor = $valor * -1;

        return $valor;
    }
    /**
     * validarFechaVencimiento
     * Metodo para validar la fecha de vencimiento para intereses
     * @author Alexander Numpaque
     * @package Predial
     * @param $fecha (Collection|Array) Datos encontrados de la funcion fechaVencimiento
     * @param $anno (string) Año del avaluo
     */
    public static function validarFechaVencimiento($fecha, $anno)
    {
        $xvx = Carbon::createFromDate($anno, 01, 01);
        $xvx = $xvx->lastOfMonth();
        $xxx = $xvx->format("Y-m-d");
        return $xxx;
    }

    /**
     * validarValorTipoBaseAmbiental
     * Metodo para validar el valor a tomar para el calculo de CAR
     * @author Alexander Numpaque
     * @package Predial
     * @param $tipo (int) Tipo de Base Ambiental
     * @param $avaluo (int|double) Valor de avaluo
     * @param impuesto (int|double) Valor del impuesto
     * @return $valor (int|double) Valor para calcular CAR
     */
    public static function validarValorTipoBaseAmbiental($tipo, $avaluo, $impuesto)
    {
        if ($tipo == 6) {
            $valor = $avaluo . ";1000";
        } else {
            $valor = $impuesto . ";100";
        }
        return $valor;
    }

    /**
     * calculoCorporacion
     * Metodo para calcular la corporacion
     * @author Alexander Numpaque
     * @package Predial
     * @param $base (int|double) Valor base para el calculo de corporación
     * @param $xtar (int|double) Valor de porcentaje de impuesto ambiental
     * @param $por (int|double) Valor de porcentaje de calculo
     * @return $valor (int|double) Valor calculado
     */
    public static function calculoCorporacion($base, $xtar, $por)
    {
        $valor = ($base * $xtar) / $por;
        return $valor;
    }

    /**
     * calculoSobretasaBomberil
     * Metodo de calculo de sobretasa bomberil
     * @author Alexander Numpaque
     * @package Predial
     * @param $impuesto (int|double) Valor del impuesto
     * @param $xtar (int|double) Valor del porcentaje en la tarifa
     * @return $valor (int|double) Valor calculado
     */
    public static function calculoSobretasaBomberil($impuesto, $xtar)
    {
        $valor = ($impuesto * $xtar) / 100;
        return $valor;
    }

    /**
     * obtenerValorPapeleria
     * Metodo para obtener los valor de papeleria
     * @author Alexander Numpaque
     * @package Predial
     * @param $anno (int) Año del avaluo
     * @return $data->formula (int|double) Valor de papeleria en el concepto
     */
    public static function obtenerValorPapeleria($anno)
    {
        $data = DB::table('gr_concepto_predial')
            ->where('id_concepto', '=', 6)
            ->where('anno', '=', $anno)
            ->first();
        return $data->formula;
    }

    /**
     * obtenerDebidoCobrar
     * Metodo de para consultar el valor de debido cobrar
     * @author Alexander Numpaque
     * @package Predial
     * @param $predio (int) Id del predio
     * @return $valor (double) Valor de debido cobrar
     */
    public static function obtenerDebidoCobrar($predio)
    {
        $data = DB::table('gr_debido_valor')
            ->where('predio', '=', $predio)
            ->first();
        if (empty($data))
            $xxx = 0;
        else
            $xxx = $data->valor;
        return $xxx;
    }

    /**
     * ValidarExistenciaDebidoCobrar
     * Metodo de para consultar si existe el concepto debido cobrar relacionado al año
     * @author Alexander Numpaque
     * @package Predial
     * @param $anno (int) Valor año
     * @return $Data (Collection) Data con los valores obtenidos de la consulta
     */
    public static function ValidarExistenciaDebidoCobrar($anno)
    {
        $data = DB::table('gr_concepto_predial')
            ->where('anno', '=', $anno)
            ->where('id_concepto', '=', 9)
            ->first();
        return $data;
    }
}
