<?php

Yii::createComponent('application.extensions.fpdf181.fpdf');
Yii::import('application.models.FuncionesFpdf');

$f1 = $_GET['fecha1'];
$f2 = $_GET['fecha2'];
$c1 = $_GET['c1'];
$c2 = $_GET['c2'];
$hd = $_GET['hd'];
$tipo = $_GET['tipo'];

if ($f1 == null || $f2 == null):
    echo "<script>alert('Debe seleccionar un rango de fechas!!!');</script>";
    die();
endif;

if ($c1 == null || $c2 == null):
    echo "<script>alert('Debe seleccionar un rango de Cuentas Contables!!!');</script>";
    die();
endif;

$cuenta1 = CuentasConsolidada::model()->findByPk($c1)->cuenta;
$cuenta2 = CuentasConsolidada::model()->findByPk($c2)->cuenta;

?>

<?php function detalle_cuenta($p_cuenta, $p_fechaDesde, $p_fechaHasta)
{
    $dat_fechaDesde=date('Y-m-d',strtotime($p_fechaDesde));
    $dat_fechaHasta=date('Y-m-d',strtotime($p_fechaHasta));
    $query = MayorAnaliticoDetalle::model()->findAll("cuenta='${p_cuenta}' and fecha_comprobante < '${dat_fechaDesde}'");
    $cuenta = count($query);

    $fechaanterior = strtotime('-1 day', strtotime($p_fechaDesde));
    $fechaanterior = date('d-m-Y', $fechaanterior);

    if ($cuenta > 0) {
        $model_detalle = MayorAnaliticoDetalle::model()->findAllBysql(
            "SELECT
                '${fechaanterior}' as fecha,
                '' as nro_comprobante,
                'saldo al inicio' as descripcion,
                case when (sum(monto_debe-monto_haber) > 0) then
                sum(monto_debe) - sum(monto_haber)
                else
                0
                end as monto_debe,
                case when (sum(monto_debe-monto_haber) < 0) then
                sum(monto_haber) - sum(monto_debe)
                else
                0
                end as monto_haber,
                null as fecha_creado,
                id_cuenta,
                cuenta,
                denom_cuenta,
                id,
                activo,
                blnborrado,
                estatus_contab,
                null as referencia,
                null as id_d,
                '${fechaanterior}' as fecha_comprobante,
                0
                FROM contable.vsw_mayor_analitico_detalle
                WHERE cuenta= '${p_cuenta}' AND fecha_comprobante < '${dat_fechaDesde}'
                group by  id_cuenta,cuenta, denom_cuenta, id, activo, blnborrado, estatus_contab
            union
            SELECT *
            FROM contable.vsw_mayor_analitico_detalle
            WHERE cuenta= '${p_cuenta}'
                AND fecha_comprobante BETWEEN '${dat_fechaDesde}' and '${dat_fechaHasta}'
                and id_tipo_comprobante=1 -- comprobantes normales
            ORDER BY cuenta,fecha_comprobante asc, nro_comprobante asc, fecha asc "
        );
    } else {
        $saldo_inicial = Yii::app()->getDb()->createCommand("
                SELECT
                    '$fechaanterior' as fecha,
                    '' as nro_comprobante,
                    'saldo al inicio' as descripcion,
                    monto_debe,
                    monto_haber,
                    null as fecha_creado,
                    id_cuenta,
                    cuenta,
                    denom_cuenta,
                    id,
                    activo,
                    blnborrado,
                    estatus_contab,
                    null as referencia,
                    null as id_d,
                    '$fechaanterior' as fecha_comprobante,
                    0
            FROM contable.vsw_mayor_analitico_detalle
            where cuenta= '$p_cuenta' and id_tipo_comprobante=2
        ")->queryAll();

        $model_detalle = Yii::app()->getDb()->createCommand("
            SELECT *
            FROM contable.vsw_mayor_analitico_detalle
            WHERE cuenta= '$p_cuenta' AND fecha_comprobante between  '$dat_fechaDesde' and '$dat_fechaHasta' and id_tipo_comprobante=1
            order by cuenta,fecha_comprobante asc
        ")->queryAll();

        if ($saldo_inicial) {
            $model_detalle = array_merge([], $saldo_inicial, $model_detalle);
        } else if ($model_detalle) {
            $model_detalle = array_merge([], [
                [
                    'fecha' => $fechaanterior,
                    'nro_comprobante' => '',
                    'descripcion' => 'saldo al inicio',
                    'monto_debe' => 0,
                    'monto_haber' => 0,
                    'fecha_creado' => 'null',
                    'id_cuenta' => '',
                    'cuenta' => '',
                    'denom_cuenta' => '',
                    'id' => '',
                    'activo' => '',
                    'blnborrado' => '',
                    'estatus_contab' => '',
                    'referencia' => null,
                    'id_d' => null,
                    'fecha_comprobante' => $fechaanterior,
                    0
                ]
            ], $model_detalle);
        }

        if ($p_cuenta == '111010100') {
            // echo '<pre>';
            // print_r($model_detalle);
            // echo '</pre>';
            // die();
        }
    }

    $i = 0;
    $saldoinicial = 0;
    $acum_debe = 0;
    $acum_haber = 0;
    $acum_saldo = 0;
    $array_detalle = [];
    if (count($model_detalle) > 0) {
        foreach ($model_detalle as $detalle):
            if ($detalle === reset($model_detalle)) {
                $array_detalle[$i]['nro'] = $i + 1;
                $array_detalle[$i]['fecha_comprobante'] = '';
                $array_detalle[$i]['nro_comprobante'] = $detalle['nro_comprobante'];
                $array_detalle[$i]['fecha'] = '';
                $array_detalle[$i]['descripcion'] = utf8_decode(ucfirst(strtolower($detalle['descripcion'])));
                $array_detalle[$i]['monto_debe'] = ($detalle['monto_debe'] != '0') ? '' : '';
                $array_detalle[$i]['monto_haber'] = ($detalle['monto_haber'] != '0') ? '' : '';
                $array_detalle[$i]['monto_saldo'] = (($detalle['monto_debe'] - $detalle['monto_haber']) >= 0) ? number_format(($saldoinicial + $detalle['monto_debe'] - $detalle['monto_haber']), 2, ',', '.') : '('.number_format(($detalle['monto_debe'] - $detalle['monto_haber']) * -1, 2, ',', '.').')';
                $array_detalle[$i]['fecha_creado'] = $detalle['fecha_creado'];
                $array_detalle[$i]['id_cuenta'] = $detalle['id_cuenta'];
                $array_detalle[$i]['cuenta'] = $detalle['cuenta'];
                $array_detalle[$i]['denom_cuenta'] = utf8_decode($detalle['denom_cuenta']);
                $array_detalle[$i]['referencia'] = strtolower(substr(utf8_decode($detalle['referencia']), 0, 10));
            } else {
                $array_detalle[$i]['nro'] = $i + 1;
                $array_detalle[$i]['fecha_comprobante'] = date('d-m-Y', strtotime($detalle['fecha_comprobante']));
                $array_detalle[$i]['nro_comprobante'] = $detalle['nro_comprobante'];
                $array_detalle[$i]['fecha'] = date('d-m-Y', strtotime($detalle['fecha']));
                $array_detalle[$i]['descripcion'] = utf8_decode(ucfirst(mb_strtolower($detalle['descripcion'], 'UTF-8')));
                $array_detalle[$i]['monto_debe'] = ($detalle['monto_debe'] != '0') ? number_format($detalle['monto_debe'], 2, ',', '.') : '';
                $array_detalle[$i]['monto_haber'] = ($detalle['monto_haber'] != '0') ? number_format($detalle['monto_haber'], 2, ',', '.') : '';
                $array_detalle[$i]['monto_saldo'] = (($acum_saldo + $detalle['monto_debe'] - $detalle['monto_haber']) > 0) ? number_format(($acum_saldo + $detalle['monto_debe'] - $detalle['monto_haber']), 2, ',', '.') : '('.number_format(($acum_saldo + $detalle['monto_debe'] - $detalle['monto_haber']) * -1, 2, ',', '.').')';
                $array_detalle[$i]['fecha_creado'] = $detalle['fecha_creado'];
                $array_detalle[$i]['id_cuenta'] = $detalle['id_cuenta'];
                $array_detalle[$i]['cuenta'] = $detalle['cuenta'];
                $array_detalle[$i]['denom_cuenta'] = utf8_decode($detalle['denom_cuenta']);
                $array_detalle[$i]['referencia'] = strtolower(substr(utf8_decode($detalle['referencia']), 0, 10));
            }
            $i++;
            $acum_debe += $detalle['monto_debe'];
            $acum_haber += $detalle['monto_haber'];
            $acum_saldo += ($detalle['monto_debe'] - $detalle['monto_haber']);
        endforeach;

        //Pasamos por el arreglo los montos acumulados de la partida
        $array_totales[0]['denom'] = 'TOTAL CUENTA '.$detalle['cuenta'];
        $array_totales[0]['acum_debe'] = ($model_detalle[0]['monto_debe'] > 0)
            ? Yii::app()->format->number($acum_debe - $model_detalle[0]['monto_debe'])
            : Yii::app()->format->number($acum_debe);
        $array_totales[0]['acum_haber'] = ($model_detalle[0]['monto_haber'] > 0)
            ? Yii::app()->format->number($acum_haber - $model_detalle[0]['monto_haber'])
            : Yii::app()->format->number($acum_haber);
        $array_totales[0]['acum_saldo'] = (($acum_debe - $acum_haber) > 0)
            ? Yii::app()->format->number($acum_saldo)
            : '('.Yii::app()->format->number(abs($acum_saldo)).')';

        $data = []; //armamos un arreglo donde vamos a devolver la informacion de la tabla
        $data['detalle'] = $array_detalle;
        $data['totales'] = $array_totales;

        return $data;
    }
}

?>

<?php

$empresa = Empresa::model()->find();
$logo = dirname(Yii::app()->getBasePath()).'/images/'.$empresa->logo;
$sector_registro = 'SECTOR: '.$empresa->getSector().'      NÚMERO DE REGISTRO: '.$empresa->getRegistroSudeca();
$titulo = 'MAYOR ANALITICO DESDE '.$f1.' HASTA '.$f2;
$coletilla = '(EXPRESADO EN Bs.)';
$header_text = utf8_decode($empresa->nom_emp."\n".$empresa->rif_emp."\n".$sector_registro."\n".$titulo."\n".$coletilla);

//Creacion del PDF
$fpdf = new FuncionesFpdf('P', 'mm', 'Letter');
$fpdf->AliasNbPages();
$fpdf->AddPage();
$fpdf->SetAutoPageBreak(true, 13);
$fpdf->SetFont('Arial', '', 6);
$fpdf->setLogo($logo);
$fpdf->setText($header_text);
$fpdf->Header();

$anchos = [15, 15, 16, 19, 60, 23, 23, 24];

///////////////////////////////////////////////////////////////////////

//Vamos a sacar el rango de cuentas seleccionadas
$criteria = new CDbCriteria();
$criteria->condition = "cuenta BETWEEN '${cuenta1}' AND '${cuenta2}' and blnborrado=false";
$criteria->order = 'cuenta ASC';
//Enviamos el query al modelo
$model_cuentas = CuentasConsolidada::model()->findAll($criteria);

foreach ($model_cuentas as $cuenta):
    //buscamos las cuentas relacionadas
    $data = detalle_cuenta($cuenta->cuenta, $f1, $f2);
    // if ($cuenta->cuenta == '111020000') {
    //     echo '<pre>';
    //     print_r($data);
    //     echo '</pre>';
    //     die();
    // }
    if (count($data['detalle']) > 0):
        $account = 'Código: '.$cuenta->codigo_cuenta."\n".'Cuenta: '.$cuenta->descripcion;
        $n = 0;
        $n = max($n, $fpdf->NbLines(4, $account));
        $fpdf->SetFont('Arial', 'B', 7);

        $fpdf->MultiCell(100, 4, utf8_decode($account), 0, 'L');
        $fpdf->Ln(4);
        $fpdf->CheckPageBreak($n);

        $x = $fpdf->GetX();
        $y = $fpdf->GetY();

        $fpdf->Cell($anchos[0], 5, 'Fecha com.', 0, 'C');

        $fpdf->SetXY($x = $x + $anchos[1], $y);
        $fpdf->Cell($anchos[2], 5, 'Comp.', 0, 'C');

        $fpdf->SetXY($x = $x + $anchos[0], $y);
        $fpdf->Cell($anchos[1], 5, 'Fecha ref.', 0, 'C');

        $fpdf->SetXY($x = $x + $anchos[2], $y);
        $fpdf->Cell($anchos[3], 5, 'Ref.', 0, 'C');

        $fpdf->SetXY($x = $x + $anchos[3], $y);
        $fpdf->Cell($anchos[4], 5, utf8_decode('Descripción'), 0, 'C');

        $fpdf->SetXY($x = $x + $anchos[4], $y);
        $fpdf->Cell($anchos[5], 5, 'Debe', 0, 0, 'R');

        $fpdf->SetXY($x = $x + $anchos[5], $y);
        $fpdf->Cell($anchos[6], 5, 'Haber', 0, 0, 'R');

        $fpdf->SetXY($x = $x + $anchos[6], $y);
        $fpdf->Cell($anchos[7], 5, 'Saldo', 0, 0, 'R');
        $fpdf->Ln(5);

        foreach ($data['detalle'] as $key => $value) {
            $nb = 0;
            $nb = max($nb, $fpdf->NbLines($anchos[4], $value['descripcion']));
            $h = 5 * $nb;

            if ($key < 1) {
                $fpdf->SetFont('Arial', 'B', 7);
            } else {
                $fpdf->SetFont('Arial', '', 7);
            }

            $fpdf->Cell($anchos[0], $h, $value['fecha_comprobante'], 0, 0, 'L');

            $fpdf->Cell($anchos[2], $h, $value['nro_comprobante'], 0, 0, 'C');

            $fpdf->Cell($anchos[1], $h, $value['fecha'], 0, 0, 'C');

            $fpdf->Cell($anchos[3], $h, $value['referencia'], 0, 0, 'L');

            $x = $fpdf->GetX();
            $y = $fpdf->GetY();
            $fpdf->SetXY($x, $y);
            $fpdf->MultiCell($anchos[4], 5, $value['descripcion'], 0, 'J');

            $fpdf->SetXY($x = $x + $anchos[4], $y);
            $fpdf->Cell($anchos[5], $h, $value['monto_debe'], 0, 0, 'R');

            $fpdf->Cell($anchos[6], $h, $value['monto_haber'], 0, 0, 'R');

            $fpdf->Cell($anchos[7], $h, $value['monto_saldo'], 0, 0, 'R');
            $fpdf->Ln();

            $pb = $fpdf->CheckPageBreak($h);
        }

        $fpdf->SetFillColor(220, 221, 225);
        $fpdf->Cell($anchos[0], 5, '', 0, 0, 'R', true);
        $fpdf->Cell($anchos[1], 5, '', 0, 0, 'R', true);
        $fpdf->Cell($anchos[2], 5, '', 0, 0, 'R', true);
        $fpdf->Cell($anchos[3], 5, '', 0, 0, 'R', true);
        $fpdf->Cell($anchos[4], 5, $data['totales'][0]['denom'], 0, 0, 'C', true);
        $fpdf->Cell($anchos[5], 5, $data['totales'][0]['acum_debe'], 0, 0, 'R', true);
        $fpdf->Cell($anchos[6], 5, $data['totales'][0]['acum_haber'], 0, 0, 'R', true);
        $fpdf->Cell($anchos[7], 5, $data['totales'][0]['acum_saldo'], 0, 0, 'R', true);
        $fpdf->Ln(15);
    endif;
endforeach;
$fpdf->Output();

exit;
