<?php
/************************************************************************************************************
 * DEV: CONTRALORIA DEL ESTADO.
 * MODULO: Logistica
 * PROGRAMADORES.____________________________________________________________________________________________
 * | # | NOMBRE.              | CORREO.                                 | TELEFONO.         | CONTRALORIA
 * | 1 | Fernando Rosillo     | f.rosillo@contraloriamonagas.gob.ve     | 0414-8807980      | MONAGAS
 * | 2 |
 * |_________________________________________________________________________________________________________
 * **********************************************************************************************************/

class planOperativoControlador extends Controlador
{
    private $atPlanOperativo;
    public function __construct()
    {
        parent::__construct();
        #se carga el Modelo.
        Session::metAcceso();
        #se carga el Modelo.
        $this->atPlanOperativo = $this->metCargarModelo('planOperativo');
    }

    //Método para listar los planOperativos
    public function metIndex($estado = false)
    {
        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029',
        );
        $js[] = 'materialSiace/core/demo/DemoTableDynamic';
        $js[] = 'Aplicacion/appFunciones';
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJs($js);
        $this->atVista->assign('estado',$estado);
        $this->atVista->metRenderizar('listado');
    }

    //Método para rellenar con ceros a la izquierda
    public function metRellenarCeros($nro,$cantidad){
        $cont=strlen($nro);
        if($cont<$cantidad){
            while($cont<$cantidad){
                $nro="0".$nro;
                $cont=$cont+1;
            }
        }
        return $nro;
    } // END FUNCTION

    //Método para crear y/o modificar los planOperativos
    public function metCrearModificarPlan()
    {

        $complementosJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'bootstrap-datepicker/bootstrap-datepicker',
            'wizard/jquery.bootstrap.wizard.min',
            'select2/select2.min',
            'inputmask/jquery.inputmask.bundle.min'
        );
        $complementoCss = array(
            'bootstrap-datepicker/datepicker',
            'wizard/wizardfa6c',
            'select2/select201ef'
        );
        $js[] = 'materialSiace/core/demo/DemoFormWizard';
        $js[] = 'Aplicacion/appFunciones';
        $this->atVista->metCargarCssComplemento($complementoCss);
        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarJs($js);

        $valido = $this->metObtenerInt('valido');
        $idPlan = $this->metObtenerInt('idPlan');
        $ver = $this->metObtenerInt('ver');
        $opcion = $this->metObtenerTexto('opcion');
        if($valido==1){
            $this->metValidarToken();

            $formula = $this->metValidarFormArrayDatos('form','formula');
            $validacion = $formula;


            if($opcion=='CE'){
                $this->atPlanOperativo->metActualizarPlan($idPlan,'CE');
                $validacion['status']='nuevo';
                echo json_encode($validacion);
                exit;
            }elseif($opcion=='RV' OR $opcion=='AP') {
                $this->atPlanOperativo->metActualizarPlan($idPlan,$opcion);
                $validacion['status']='actualizado';
                echo json_encode($validacion);
                exit;
            }
            if($validacion['num_monto_presupuesto']=='error'){
                $validacion['num_monto_presupuesto'] = 0;
            }

            $orden=$this->atPlanOperativo->metContar('po_b001_poa',date('Y'),'fec_anio','AND fk_a004_num_dependencia="'.$validacion['dependencia'].'"');
            $orden['cantidad'] = $orden['cantidad'] + 1;

            $dependencia = $this->atPlanOperativo->metBuscarDependencia($validacion['dependencia']);

            $codigo=$dependencia['ind_codinterno']."-".$this->metRellenarCeros($orden['cantidad'],4)."-".date('Y');

            $validacion['codigo']=$codigo;

            if(in_array('error',$validacion)){
                $validacion['status']='error';
                echo json_encode($validacion);
                exit;
            }

            $validacion['num_monto_presupuesto'] = str_replace('_','',$validacion['num_monto_presupuesto']);
            $validacion['num_monto_presupuesto'] = str_replace('.','',$validacion['num_monto_presupuesto']);
            if (substr($validacion['num_monto_presupuesto'],0,1)==',') $validacion['num_monto_presupuesto'] = '0'.$validacion['num_monto_presupuesto'];
            $validacion['num_monto_presupuesto'] = str_replace(',','.',$validacion['num_monto_presupuesto']);

            if(!isset($validacion['descripcionP'])){
                $validacion['status']='errorProductos';
                echo json_encode($validacion);
                exit;
            }

            $error = 0;
            foreach ($validacion['especifico'] as $key1=>$value1) {
                foreach ($validacion['descripcionP'][$key1] as $key=>$value) {

                    if($validacion['trimestre1'][$key1][$key]=='error')
                        $validacion['trimestre1'][$key1][$key] = 0;
                    else
                        $validacion['trimestre1'][$key1][$key] = str_replace('_','',$validacion['trimestre1'][$key1][$key]);

                    if($validacion['trimestre2'][$key1][$key]=='error')
                        $validacion['trimestre2'][$key1][$key] = 0;
                    else
                        $validacion['trimestre2'][$key1][$key] = str_replace('_','',$validacion['trimestre2'][$key1][$key]);

                    if($validacion['trimestre3'][$key1][$key]=='error')
                        $validacion['trimestre3'][$key1][$key] = 0;
                    else
                        $validacion['trimestre3'][$key1][$key] = str_replace('_','',$validacion['trimestre3'][$key1][$key]);

                    if($validacion['trimestre4'][$key1][$key]=='error')
                        $validacion['trimestre4'][$key1][$key] = 0;
                    else
                        $validacion['trimestre4'][$key1][$key] = str_replace('_','',$validacion['trimestre4'][$key1][$key]);

                    if($validacion['cantidad'][$key1][$key]=='')
                        $validacion['cantidad'][$key1][$key] = 0;

                    if($validacion['horasH'][$key1][$key]=='')
                        $validacion['horasH'][$key1][$key] = 0;
                    else
                        $validacion['horasH'][$key1][$key] = str_replace('_','',$validacion['horasH'][$key1][$key]);

                    if($validacion['cantH'][$key1][$key]=='')
                        $validacion['cantH'][$key1][$key] = 0;
                    else
                        $validacion['cantH'][$key1][$key] = str_replace('_','',$validacion['cantH'][$key1][$key]);

                    if($validacion['montoPresP'][$key1][$key]==''){
                        $error = 1;
                    }else{
                        $validacion['montoPresP'][$key1][$key] = str_replace('_','0',$validacion['montoPresP'][$key1][$key]);
                        $validacion['montoPresP'][$key1][$key] = str_replace('.','',$validacion['montoPresP'][$key1][$key]);
                        if (substr($validacion['montoPresP'][$key1][$key],0,1)==',') $validacion['montoPresP'][$key1][$key] = '0'.$validacion['montoPresP'][$key1][$key];
                        $validacion['montoPresP'][$key1][$key] = str_replace(',','.',$validacion['montoPresP'][$key1][$key]);
                    }
                }
            }
            /*
            echo json_encode($validacion);
            exit;*/


            if($error==1){
                $validacion['status']='errorProductos2';
                echo json_encode($validacion);
                exit;
            }

            if($idPlan===0 OR $opcion=='RP'){
                $id=$this->atPlanOperativo->metCrearPlan($validacion);
                if($opcion=='RP')
                    $this->atPlanOperativo->metActualizarPlan($idPlan,'RP');
                $validacion['status']='nuevo';
            }else{
                $validacion['idPlan']=$idPlan;
                $id=$this->atPlanOperativo->metModificarPlan($validacion);
                $validacion['status']='modificar';
            }

            if (is_array($id)) {
                foreach ($validacion as $titulo => $valor) {
                    if (strpos($id[2], $validacion[$titulo])) {
                        $validacion[$titulo] = 'error';
                    }
                }
                $validacion['status'] = 'errorSQL';
                $validacion['planOperativo'] = 'error';
                echo json_encode($validacion);
                exit;
            }

            $validacion['idPlan']=$id;

            echo json_encode($validacion);
            exit;
        }
        if($idPlan!=0){
            $this->atVista->assign('formDB',$this->atPlanOperativo->metMostrarPlan($idPlan));

            $detallesE = $this->atPlanOperativo->metMostrarPlanEstDet($idPlan,1);
            $general = array();
            $especifico = array();
            $codigogeneral = array();
            $codigoespecifico = array();
            $actividades = array();
            $productos = array();

            foreach ($detallesE as $detE) {
                $consulta = $this->atPlanOperativo->metBuscarPuntos($detE['pk_num_plan_estrategico_detalle']);

                $general[$consulta[1]['pk_num_plan_estrategico_detalle']] = $consulta[1]['ind_objetivo'];
                $codigogeneral[$consulta[1]['pk_num_plan_estrategico_detalle']] = $consulta[1]['codigo_objetivo'];
                $especifico[$consulta[1]['pk_num_plan_estrategico_detalle']][$detE['pk_num_plan_estrategico_detalle']] = $detE['ind_objetivo'];
                $codigoespecifico[$consulta[1]['pk_num_plan_estrategico_detalle']][$detE['pk_num_plan_estrategico_detalle']] = $detE['codigo_objetivo'];

                $actividades[$detE['pk_num_plan_estrategico_detalle']] = $this->atPlanOperativo->metMostrarDetalles3($idPlan,$detE['pk_num_plan_estrategico_detalle']);

                foreach ($actividades[$detE['pk_num_plan_estrategico_detalle']] as $act) {
                    $productos[$detE['pk_num_plan_estrategico_detalle']][$act['fk_pob003_num_actividad']] = $this->atPlanOperativo->metMostrarDetalles2($idPlan,$act['fk_pob003_num_actividad'],$detE['pk_num_plan_estrategico_detalle']);
                }
            }


            $this->atVista->assign('general',$general);
            $this->atVista->assign('codigogeneral',$codigogeneral);
            $this->atVista->assign('especifico',$especifico);
            $this->atVista->assign('codigoespecifico',$codigoespecifico);
            $this->atVista->assign('actividades',$actividades);
            $this->atVista->assign('productos',$productos);

            $this->atVista->assign('idPlan',$idPlan);
            if($opcion=='RV' OR $opcion=='AP' OR $opcion=='CE')
                $ver = 1;
            $this->atVista->assign('ver',$ver);
        }
        $this->atVista->assign('opcion',$opcion);
        $this->atVista->assign('planEst',$this->atPlanOperativo->metListarPlanEst());
        $this->atVista->assign('dependencia',$this->atPlanOperativo->metListarDependencias());

        $this->atVista->metRenderizar('CrearModificar','modales');

    }

    //Método para eliminar los planOperativos
    public function metAnularPlan()
    {
        $idPlan = $this->metObtenerInt('idPlan');
        if($idPlan!=0){
            $plan = $this->atPlanOperativo->metMostrarPlan($idPlan);
            if($plan['ind_estado']=='RV'){
                $estado = 'Reversado';
                $id=$this->atPlanOperativo->metActualizarPlan($idPlan,'PR');
            } else {
                $estado = 'Anulado';
                $id=$this->atPlanOperativo->metActualizarPlan($idPlan,'AN');
            }
            if(is_array($id)){
                $valido=array(
                    'estado'=>$estado,
                    'status'=>'error',
                    'mensaje'=>'Disculpa. Pero el PlanOperativo se encuentra en uso y no se puede eliminar'
                );
            }else{
                $valido=array(
                    'estado'=>$estado,
                    'status'=>'ok',
                    'id'=>$idPlan
                );
            }
        }
        echo json_encode($valido);
        exit;
    }

    public function metListarProductos()
    {
        $idtr = $this->metObtenerFormulas('idtr');
        $idpunto = $this->metObtenerFormulas('idpunto');
        $idEspe = str_replace('puntoEspecifico','',$idtr);
        $this->atVista->assign('idtr',$idtr);
        $this->atVista->assign('idpunto',$idpunto);
        $this->atVista->assign('idEspe',$idEspe);
        $this->atVista->metRenderizar('procesos','modales');
    }

    public function metListarPuntos($idPlanEst)
    {
        $this->atVista->assign('idPlanEst',$idPlanEst);
        $this->atVista->metRenderizar('planEst','modales');
    }

    public function metBuscarProductos()
    {
        $id = $this->metObtenerInt('id');
        $datos = $this->atPlanOperativo->metBuscarProducto($id);
        $consulta = $this->atPlanOperativo->metBuscarPuntos($id);
        if(!isset($consulta[1]))
            $datos['anterior'] = $consulta[0];
        else
            $datos['anterior'] = $consulta[1];
        //var_dump($datos);
        echo json_encode($datos);
        exit;

    }

    public function metBuscarPuntos()
    {
        $id = $this->metObtenerInt('id');
        #busco el que seleccioné y el punto general del cual depende
        $consulta = $this->atPlanOperativo->metBuscarPuntos($id);
        $datos['actual'] = $consulta[0];
        $datos['anterior'] = $consulta[1];

        echo json_encode($datos);
        exit;

    }

    public function metEjecutar()
    {
        $complementosJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
            'bootstrap-datepicker/bootstrap-datepicker',
            'wizard/jquery.bootstrap.wizard.min',
            'select2/select2.min',
            'inputmask/jquery.inputmask.bundle.min'
        );
        $complementoCss = array(
            'bootstrap-datepicker/datepicker',
            'wizard/wizardfa6c',
            'select2/select201ef'
        );
        $js[] = 'materialSiace/core/demo/DemoFormWizard';
        $js[] = 'Aplicacion/appFunciones';
        $this->atVista->metCargarCssComplemento($complementoCss);
        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarJs($js);

        $idPlan = $this->metObtenerInt('idPlan');
        $valido = $this->metObtenerInt('valido');

        if($valido==1){
            $this->metValidarToken();

            $validacion['idDet']= $this->metObtenerInt('idDet');
            $validacion['mes1']= $this->metObtenerAlphaNumerico('mes1');
            $validacion['mes2']= $this->metObtenerAlphaNumerico('mes2');
            $validacion['mes3']= $this->metObtenerAlphaNumerico('mes3');
            $validacion['mes4']= $this->metObtenerAlphaNumerico('mes4');
            $validacion['mes5']= $this->metObtenerAlphaNumerico('mes5');
            $validacion['mes6']= $this->metObtenerAlphaNumerico('mes6');
            $validacion['mes7']= $this->metObtenerAlphaNumerico('mes7');
            $validacion['mes8']= $this->metObtenerAlphaNumerico('mes8');
            $validacion['mes9']= $this->metObtenerAlphaNumerico('mes9');
            $validacion['mes10']= $this->metObtenerAlphaNumerico('mes10');
            $validacion['mes11']= $this->metObtenerAlphaNumerico('mes11');
            $validacion['mes12']= $this->metObtenerAlphaNumerico('mes12');

            $validacion['obs1']= $this->metObtenerAlphaNumerico('obs1');
            $validacion['obs2']= $this->metObtenerAlphaNumerico('obs2');
            $validacion['obs3']= $this->metObtenerAlphaNumerico('obs3');
            $validacion['obs4']= $this->metObtenerAlphaNumerico('obs4');

            $validacion['ev1']= $this->metObtenerAlphaNumerico('ev1');
            $validacion['ev2']= $this->metObtenerAlphaNumerico('ev2');
            $validacion['ev3']= $this->metObtenerAlphaNumerico('ev3');
            $validacion['ev4']= $this->metObtenerAlphaNumerico('ev4');

            for ($i=1;$i<13;$i++){
                $validacion['mes'.$i] = str_replace('_','',$validacion['mes'.$i]);
            }

            $id=$this->atPlanOperativo->metEjecutarDetalle($validacion);
            $validacion['id']=$id;
            $validacion['status']='nuevo';

            echo json_encode($validacion);
            exit;

        }

        $this->atVista->assign('formDB',$this->atPlanOperativo->metMostrarPlan($idPlan));

        $detallesE = $this->atPlanOperativo->metMostrarPlanEstDet($idPlan,1);
        $general = array();
        $especifico = array();
        $codigogeneral = array();
        $codigoespecifico = array();
        $actividades = array();
        $productos = array();

        foreach ($detallesE as $detE) {
            $consulta = $this->atPlanOperativo->metBuscarPuntos($detE['pk_num_plan_estrategico_detalle']);

            $general[$consulta[1]['pk_num_plan_estrategico_detalle']] = $consulta[1]['ind_objetivo'];
            $codigogeneral[$consulta[1]['pk_num_plan_estrategico_detalle']] = $consulta[1]['codigo_objetivo'];
            $especifico[$consulta[1]['pk_num_plan_estrategico_detalle']][$detE['pk_num_plan_estrategico_detalle']] = $detE['ind_objetivo'];
            $codigoespecifico[$consulta[1]['pk_num_plan_estrategico_detalle']][$detE['pk_num_plan_estrategico_detalle']] = $detE['codigo_objetivo'];

            $actividades[$detE['pk_num_plan_estrategico_detalle']] = $this->atPlanOperativo->metMostrarDetalles3($idPlan,$detE['pk_num_plan_estrategico_detalle']);

            foreach ($actividades[$detE['pk_num_plan_estrategico_detalle']] as $act) {
                $productos[$detE['pk_num_plan_estrategico_detalle']][$act['fk_pob003_num_actividad']] = $this->atPlanOperativo->metMostrarDetalles2($idPlan,$act['fk_pob003_num_actividad'],$detE['pk_num_plan_estrategico_detalle']);
            }
        }

        $this->atVista->assign('general',$general);
        $this->atVista->assign('codigogeneral',$codigogeneral);
        $this->atVista->assign('especifico',$especifico);
        $this->atVista->assign('codigoespecifico',$codigoespecifico);
        $this->atVista->assign('actividades',$actividades);
        $this->atVista->assign('productos',$productos);
        $this->atVista->metRenderizar('ejecutar','modales');
    }

    public function metPlanOperativoPdf($idPlan)
    {
        $datos = $this->atPlanOperativo->metMostrarPlan($idPlan);

        //define('APP_LOGO',$this->atPlanOperativo->metLogoContraloria());
        define('APP_LOGO','CEM.jpg');
        define('APP_LOGO2','LOGOSNCF.png');
        define('DEPENDENCIA',$datos['ind_dependencia']);
        define('PERIODO',$datos['ind_periodo']);

        $this->metObtenerLibreria('planOperativo','modPO');
        $this->atFPDF = new pdf('l','mm','Legal');//array(320,216) array(340,220)
        $this->atFPDF->titulo = $idPlan;

        $this->atFPDF->SetAutoPageBreak(true, 35);
        $this->atFPDF->AliasNbPages();
        $this->atFPDF->SetMargins(10, 10, 5);

        $detallesE = $this->atPlanOperativo->metMostrarPlanEstDet($idPlan);

        $anterior = array(0=>array('pk_num_plan_estrategico_detalle'=>''));

        $this->atFPDF->SetY(67.8);
        $c=1;
        $c2 = 0;
        $contYact = 0;
        $altMax = array();
        $actividades = array();
        foreach ($detallesE as $i => $detE) {

            //GET Y > 150
            $consulta = $this->atPlanOperativo->metBuscarPuntos($detE['pk_num_plan_estrategico_detalle']);
            if($c2 == 0 OR $this->atFPDF->GetY()>125 OR $anterior[0]['pk_num_plan_estrategico_detalle']!=$detE['pk_num_plan_estrategico_detalle']){
                if($c2 == 1){
                    $this->metAgregarDependencia($altMax,$actividades);

                    $altMax = array();
                    $actividades = array();
                }
                $c2 = 1;
                $this->metAgregarPagina($consulta,$datos);
                $this->atFPDF->SetY(67.8);
                $contYant = 0;
            }

            $productos = $this->atPlanOperativo->metMostrarDetalles($detE['pk_num_estrategico_operativo']);

            $this->atFPDF->SetX(146+38+20);
            //td1 110.38 + 25    2.83*9=28.3
            $totalP = $productos[0]['totalPlanificado'];
            $observacionGeneral = '
Total de '.$productos[0]['producto'].' realizado<br>
                                --------------------------------------- X  100 <br>
Total de '.$productos[0]['producto'].' planificado<br>
                            
            ';

            $presupuesto = number_format($productos[0]['num_monto_presupuesto'],2,',','.');

            if($totalP==0){
                $observacionGeneral = '
Sumatoria de '.$productos[0]['producto'].' realizados<br>
Rango:<br>
  0 No se realizaron<br>
1 &lt;= que 10  Moderadamente eficaz<br>
 &gt;= que 11 Muy eficaz<br>
                ';
                $presupuesto = 'No Programable';
            }

            $html = '<table align="center" border="0.5" style="font-size: 6pt">
                        <tr>
                            <td width="138.85" style="text-align: justify;">'.str_replace(['<', '>'], '', $productos[0]['ind_objetivo_general']).'<br></td>
                            <td width="105.02" align="justify"><br><br>
'.$observacionGeneral.'
                            </td>
                            <td width="56.7" style="font-size: 7pt;"><br><br>'.$productos[0]['producto'].'<br></td>
                            <td width="70.86" style="font-size: 7pt"><br><br>'.$presupuesto.'<br></td>
                        </tr>
                    </table>';

            $this->atFPDF->SetFont('', '', 7);
            $this->atFPDF->writeHTML($html);

            if(!isset($contYant))
                $contYant = 0;

            $y2 = $this->atFPDF->GetY()-3;
            $contYtotal = $y2-67.8;
            $contYact = $contYtotal-$contYant;
            $contYant = $contYtotal;

            $this->atFPDF->SetXY(77+24, $y2-$contYact);
            $porcentaje = number_format($contYact*40.5,2,'.','');
            $h1 = $productos[0]['num_horas_hombre'];
            $h2 = $productos[0]['num_cantidad_hombre'];
            $ht = $h1 * $h2;
            $ta = $productos[0]['totalPlanificado'];
            $t1 = $productos[0]['ind_trimestre_planificado1'];
            $t2 = $productos[0]['ind_trimestre_planificado2'];
            $t3 = $productos[0]['ind_trimestre_planificado3'];
            $t4 = $productos[0]['ind_trimestre_planificado4'];

            if($ta==0){
                $h1 = 'No P.';
                $h2 = 'No P.';
                $ht = 'No P.';
                $ta = '100%';
                $t1 = 'No P.';
                $t2 = 'No P.';
                $t3 = 'No P.';
                $t4 = 'No P.';
            }

            $html = '<table align="center" border="0.5">
                        <tr style="line-height: '.$porcentaje.'%">
                            <td width="28.3" style="display: table-cell; height='.$porcentaje.'%">'.$ta.'</td>
                            <td width="28.3">'.$h1.'</td>
                            <td width="39.62">'.$h2.'</td>
                            <td width="28.3">'.$ht.'</td>
                            <td width="28.3">'.$t1.'</td>
                            <td width="28.3">'.$t2.'</td>
                            <td width="28.3">'.$t3.'</td>
                            <td width="25.6">'.$t4.'</td>
                        </tr>
                    </table>';//33.96 39.62 36.79

            $this->atFPDF->SetFont('', '', 7);
            $this->atFPDF->writeHTML($html);
            $this->atFPDF->SetXY(60+19,$y2-$contYact);
            $this->atFPDF->Cell(17+5, $contYact,'', 1, 0, 'C');
            $this->atFPDF->SetXY(60+19,$y2-$contYact);
            $this->atFPDF->Cell(17+5, 5,$productos[0]['cod_producto'], 0, 0, 'C');
            $this->atFPDF->SetXY(60+19,$y2-$contYact+5-2);
            $this->atFPDF->MultiCell(17+5,$contYact-5,$productos[0]['producto'],0,'C',false);

            $actividades[$productos[0]['cod_actividad']] = $productos[0]['actividad'];
            if(!isset($altMax[$productos[0]['cod_actividad']]))
                $altMax[$productos[0]['cod_actividad']] = $contYact;
            else
                $altMax[$productos[0]['cod_actividad']] += $contYact;

            $this->atFPDF->SetY($y2);
            $c++;

            $anterior = $consulta;
        }

        $this->metAgregarDependencia($altMax,$actividades);

        $this->atFPDF->Output('Plan_Operativo.pdf', 'D');
    }

    public function metAgregarPagina($datos,$datos2){

        $fecha = str_getcsv($datos2['fec_inicio'],'-');
        $this->atFPDF->AddPage();

        $this->atFPDF->SetFont('', 'B', 7);//Diferencia 38mm antes 277mm ahora 315mm
        $this->atFPDF->SetXY(20,30); $this->atFPDF->Cell(315, 5,'Objetivo Estratégico General:', 1, 1, 'L');
        $this->atFPDF->SetXY(20,35); $this->atFPDF->Cell(315, 5,'[ '.$datos[1]['codigo_objetivo'].' ] '.$datos[1]['ind_objetivo'], 1, 1, 'L');

        $this->atFPDF->SetXY(20,40); $this->atFPDF->Cell(315, 5,'Objetivo Estratégico Específico:', 1, 1, 'L');
        $this->atFPDF->SetXY(20,45); $this->atFPDF->Cell(315, 5,'[ '.$datos[0]['codigo_objetivo'].' ] '.$datos[0]['ind_objetivo'], 1, 1, 'L');

        $this->atFPDF->ln(2);
        $this->atFPDF->SetFillColor(200, 200, 200);
        $this->atFPDF->SetFont('', 'B', 10);
        $this->atFPDF->SetXY(20,50); $this->atFPDF->Cell(315, 5,'NIVEL OPERATIVO  AÑO '.$fecha[0], 1, 1, 'C', 1);
        $this->atFPDF->SetFont('', 'B', 7);
        $this->atFPDF->SetXY(20,55);
        $this->atFPDF->Cell(59, 6.4,'ACCIONES', 1, 0, 'C');
        $this->atFPDF->Cell(27+5, 6.4,'PRODUCTO', 1, 0, 'C');//19
        $this->atFPDF->MultiCell(34,6,"HORAS HOMBRES DISPONIBLES",1,'C',false);
        $x = 87+58;$this->atFPDF->SetXY(20+59+27+39,55);
        $this->atFPDF->MultiCell(39,6,"DISTRIBUCIÓN TRIMESTRAL DE LA META ANUAL",1,'C',false);
        $x += 39; $this->atFPDF->SetXY($x,55);
        $this->atFPDF->MultiCell(20,6,"DEPENDENCIA EJECUTORA",1,'C',false);
        $x += 20; $this->atFPDF->SetXY($x,55);
        $this->atFPDF->MultiCell(49,12.8,"OBSERVACIONES GENERALES",1,'C',false);//W=59 Dif=20
        $x += 49; $this->atFPDF->SetXY($x,55);
        $this->atFPDF->MultiCell(37,12.8,"INDICADORES DE GESTION",1,'C',false);
        $x += 37; $this->atFPDF->SetXY($x,55);
        $this->atFPDF->MultiCell(20,12.8,"UNIDAD 
DE 
MEDIDA",1,'C',false);
        $x += 20; $this->atFPDF->SetXY($x,55);
        $this->atFPDF->MultiCell(25,12.8,"COSTO PRESUPUESTADO",1,'C',false);

        $this->atFPDF->SetXY(20,61.4);
        $x = 20;
        $this->atFPDF->MultiCell(40+19,6,"[ Cód ]
Enunciado",1,'C',false);
        $x += 40+19; $this->atFPDF->SetXY($x,61.4);
        $this->atFPDF->MultiCell(17+5,6.4,"Descripción",1,'C',false);
        $x += 17+5;$this->atFPDF->SetXY($x,61.4);
        $this->atFPDF->MultiCell(10,6.4,"Meta Anual",1,'C',false);
        $this->atFPDF->SetXY($x + 10,61.4);
        $this->atFPDF->Cell(10, 6.4,'HORAS', 1, 0, 'C');
        $this->atFPDF->Cell(14, 6.4,'HOMBRES', 1, 0, 'C');
        $this->atFPDF->Cell(10, 6.4,'TOTAL', 1, 0, 'C');
        $x += 10+39-5;$this->atFPDF->SetXY($x,61.4);
        $this->atFPDF->Cell(10, 6.4,'I', 1, 0, 'C');
        $this->atFPDF->Cell(10, 6.4,'II', 1, 0, 'C');
        $this->atFPDF->Cell(10, 6.4,'III', 1, 0, 'C');
        $this->atFPDF->Cell(9, 6.4,'IV', 1, 0, 'C');
        $this->atFPDF->MultiCell(20,5,"Dirección  Responsable",1,'C',false);
    }

    public function metAgregarDependencia($altMax,$actividades){

        $this->atFPDF->SetXY(20,67.8);
        $this->atFPDF->SetFont('', '', 5.9);
        $acumulado = 0;
        foreach ($actividades as $key=>$val) {
            $acumulado += $altMax[$key];
            $this->atFPDF->MultiCell(40+19,$altMax[$key],"[ ".$key." ]
".$actividades[$key],1,'L',false);
            $this->atFPDF->SetX(20);
        }
        $this->atFPDF->SetXY(126+38+20,67.8);
        if(strlen(DEPENDENCIA)>40)
            $div = 9;
        else
            $div = 7;
        $acumulado2 = (int)$acumulado/$div;
        $br = '';
        for ($i=0;$i<$acumulado2;$i++){
            $br .= '
';
        }
        $this->atFPDF->MultiCell(20,$acumulado,$br.DEPENDENCIA,1,'C',false);
    }

    //Método para paginar los planOperativos
    public function metJsonDataTablaProductos()
    {

        #obtengo los rodes de usuario, Nota: esto es obligatorio
        $rol=Session::metObtener('perfil');
        #cacturo la busqueda enviada por la datatabla, Nota: esto es obligatorio
        $busqueda = $this->metObtenerFormulas('search');
        #construyo el sql, Nota: esto es obligatorio
        $sql = "SELECT
                  po_b004_productos.*,
                  po_b003_actividad.ind_descripcion AS actividad,
                  po_b003_actividad.cod_actividad
                FROM po_b004_productos
                INNER JOIN po_b003_actividad ON po_b004_productos.fk_pob003_num_actividad = po_b003_actividad.pk_num_actividad
                INNER JOIN a019_seguridad_dependencia AS seguridad ON seguridad.fk_a004_num_dependencia = po_b003_actividad.fk_a004_num_dependencia
                      AND seguridad.fk_a018_num_seguridad_usuario = '".Session::metObtener('idUsuario')."' AND seguridad.fk_a015_num_seguridad_aplicacion = '22'
                WHERE 1 ";
        if ($busqueda['value']) {
            $sql .= " AND
                        (po_b004_productos.pk_num_productos LIKE '%$busqueda[value]%' OR
                        po_b004_productos.cod_producto LIKE '%$busqueda[value]%' OR
                        po_b004_productos.ind_descripcion LIKE '%$busqueda[value]%' OR
                        po_b003_actividad.cod_actividad LIKE '%$busqueda[value]%' OR
                        po_b003_actividad.ind_descripcion LIKE '%$busqueda[value]%'
                        ) 
                        ";
        }

        #creo un arreglo de los campos a mostrar, Nota: esto es obligatorio
        $campos = array('pk_num_productos','cod_producto','cod_actividad','ind_descripcion','actividad', 'fec_creacion');
        #campo primario de la tabla, Nota: esto es obligatorio
        $clavePrimaria = 'pk_num_productos';

        #hago el llamado de la datatabla del controlador principal.
        $this->metDataTabla($sql,$campos,$clavePrimaria, false, false, ' ORDER BY po_b004_productos.fec_creacion DESC ');
    }

    //Método para paginar los planOperativos
    public function metJsonDataTablaPlanEstDet($idPlanEst)
    {

        #obtengo los rodes de usuario, Nota: esto es obligatorio
        $rol=Session::metObtener('perfil');
        #cacturo la busqueda enviada por la datatabla, Nota: esto es obligatorio
        $busqueda = $this->metObtenerFormulas('search');
        #construyo el sql, Nota: esto es obligatorio
        $sql = "SELECT
                  po_b006_plan_estrategico_detalle.*
                FROM po_b006_plan_estrategico_detalle
                WHERE fk_pob005_num_plan_estrategico = '$idPlanEst' 
                AND pk_num_plan_estrategico_detalle IN (SELECT MAX(pk_num_plan_estrategico_detalle) FROM po_b006_plan_estrategico_detalle   
                    WHERE po_b006_plan_estrategico_detalle.fk_pob005_num_plan_estrategico='$idPlanEst' GROUP BY codigo_objetivo)";
        if ($busqueda['value']) {
            $sql .= " AND (
                        po_b006_plan_estrategico_detalle.codigo_objetivo LIKE '%$busqueda[value]%' OR
                        po_b006_plan_estrategico_detalle.ind_objetivo LIKE '%$busqueda[value]%' 
                        ) 
                        ";
        }

        #creo un arreglo de los campos a mostrar, Nota: esto es obligatorio
        $campos = array('pk_num_plan_estrategico_detalle','ind_tipo','codigo_objetivo','ind_objetivo');
        #campo primario de la tabla, Nota: esto es obligatorio
        $clavePrimaria = 'pk_num_plan_estrategico_detalle';

        #hago el llamado de la datatabla del controlador principal.
        $this->metDataTabla($sql,$campos,$clavePrimaria);
    }

    //Método para paginar los planOperativos
    public function metJsonDataTabla($estado = false)
    {
        #obtengo los rodes de usuario, Nota: esto es obligatorio
        $rol=Session::metObtener('perfil');
        #cacturo la busqueda enviada por la datatabla, Nota: esto es obligatorio
        $busqueda = $this->metObtenerFormulas('search');
        #construyo el sql, Nota: esto es obligatorio
        $sql = "SELECT
                  po_b001_poa.*,
                  a004_dependencia.ind_dependencia,
                  case po_b001_poa.ind_estado
                      when 'PR' then 'Preparado'
                      when 'RV' then 'Revisado'
                      when 'AP' then 'Aprobado'
                      when 'AN' then 'Anulado'
                      when 'RP' then 'Reprogramado'
                      when 'CE' then 'Cerrado'
                    end as estatus,
                  case po_b001_poa.ind_estado
                      when 'PR' then 'Anular'
                      when 'RV' then 'Reversar'
                    end as tituloa
                FROM po_b001_poa
                INNER JOIN a004_dependencia ON po_b001_poa.fk_a004_num_dependencia = a004_dependencia.pk_num_dependencia
                INNER JOIN a019_seguridad_dependencia AS seguridad ON seguridad.fk_a004_num_dependencia = po_b001_poa.fk_a004_num_dependencia
                      AND seguridad.fk_a018_num_seguridad_usuario = '".Session::metObtener('idUsuario')."' AND seguridad.fk_a015_num_seguridad_aplicacion = '22'
                WHERE 1 ";

        if($estado){
            if($estado=='EJ')
                $sql .= " AND po_b001_poa.ind_estado = 'AP' ";
            else
                $sql .= " AND po_b001_poa.ind_estado = '$estado' ";
        }
        if ($busqueda['value']) {
            $sql .= " AND
                        (po_b001_poa.pk_num_poa LIKE '%$busqueda[value]%' OR
                        po_b001_poa.cod_poa LIKE '%$busqueda[value]%' OR
                        po_b001_poa.fec_inicio LIKE '%$busqueda[value]%' OR
                        po_b001_poa.fec_fin LIKE '%$busqueda[value]%' OR
                        a004_dependencia.ind_dependencia LIKE '%$busqueda[value]%' OR
                            (
                            CASE 
                                WHEN 'Preparado' LIKE '%$busqueda[value]%' THEN 'PR'
                                WHEN 'Revisado' LIKE '%$busqueda[value]%' THEN 'RV'
                                WHEN 'Aprobado' LIKE '%$busqueda[value]%' THEN 'AP'
                                WHEN 'Anulado' LIKE '%$busqueda[value]%' THEN 'AN'
                                WHEN 'Reprogramado' LIKE '%$busqueda[value]%' THEN 'RP'
                            END
                            ) LIKE po_b001_poa.ind_estado 
                        ) 
                        ";
        }

        #creo un arreglo de los campos a mostrar, Nota: esto es obligatorio
        $campos = array('pk_num_poa','cod_poa','fec_inicio','fec_fin','estatus','ind_dependencia');
        $camposExtra = array('tituloa');
        #campo primario de la tabla, Nota: esto es obligatorio
        $clavePrimaria = 'pk_num_poa';
        #construyo el listado de botones

        if (in_array('PO-01-01-01-02-M',$rol) AND !$estado) {
            $campos['boton']['Editar'] = array("
                <button title='Editar'
                        class='modificar logsUsuario btn ink-reaction btn-raised btn-xs btn-primary'
                        descipcion='El Usuario ha Modificado el PlanOperativo Nro. $clavePrimaria'
                        idPlan='$clavePrimaria' titulo='Modificar Plan Operativo'
                        opcion='Editar'
                        data-toggle='modal' data-target='#formModal' id='modificar'>
                    <i class='fa fa-edit'></i>
                </button>
                ",
                'if( $i["ind_estado"] =="PR") { $valor2 = "#botonEval"; } else { $valor2 = ""; }'
            );
        } else {
            $campos['boton']['Editar'] = false;
        }

        if (in_array('PO-01-01-01-03-C',$rol) AND !$estado) {
            $campos['boton']['Consultar'] = "
                <button title='Consultar'
                        class='ver logsUsuario btn ink-reaction btn-raised btn-xs btn-warning'
                        descipcion='El Usuario ha Consultado el PlanOperativo Nro. $clavePrimaria'
                        idPlan='$clavePrimaria' titulo='Consultar Plan Operativo'
                        data-toggle='modal' data-target='#formModal' id='modificar'>
                    <i class='icm icm-eye2'></i>
                </button>
                "
            ;
        } else {
            $campos['boton']['Consultar'] = false;
        }

        if (in_array('PO-01-01-01-03-A',$rol) AND !$estado) {
            $campos['boton']['Anular'] = array("
                <button title='tituloa'
                        class='anular logsUsuario btn ink-reaction btn-raised btn-xs btn-danger'
                        descipcion='El Usuario ha tituloa el PlanOperativo Nro. $clavePrimaria'
                        idPlan='$clavePrimaria' titulo='tituloa Plan Operativo'
                        opcion='tituloa' id='tituloa'>
                    <i class='md md-delete'></i>
                </button>
                ",
                'if( $i["ind_estado"] =="PR" OR $i["ind_estado"] =="RV" ) { $valor2 = "#botonEval"; } else { $valor2 = ""; }'
            );
        } else {
            $campos['boton']['Anular'] = false;
        }

        if (in_array('PO-01-01-02-01-R',$rol) AND $estado=='PR') {
            $campos['boton']['Revisar'] = "
                <button title='Revisar'
                        class='modificar logsUsuario btn ink-reaction btn-raised btn-xs btn-primary'
                        descipcion='El Usuario ha Revisado el PlanOperativo Nro. $clavePrimaria'
                        idPlan='$clavePrimaria' titulo='Revisar Plan Operativo'
                        opcion='RV'
                        data-toggle='modal' data-target='#formModal'>
                    <i class='icm icm-rating'></i>
                </button>
                "
            ;
        } else {
            $campos['boton']['Revisar'] = false;
        }

        if (in_array('PO-01-01-03-01-A',$rol) AND $estado=='RV') {
            $campos['boton']['Aprobar'] = "
                <button title='Aprobar'
                        class='modificar logsUsuario btn ink-reaction btn-raised btn-xs btn-primary'
                        descipcion='El Usuario ha Aprobado el PlanOperativo Nro. $clavePrimaria'
                        idPlan='$clavePrimaria' titulo='Aprobar Plan Operativo'
                        opcion='AP'
                        data-toggle='modal' data-target='#formModal'>
                    <i class='icm icm-rating3'></i>
                </button>
                "
            ;
        } else {
            $campos['boton']['Aprobar'] = false;
        }

        if (in_array('PO-01-01-04-01-C',$rol) AND $estado=='AP') {
            $campos['boton']['Cerrar'] = "
                <button title='Cerrar'
                        class='modificar logsUsuario btn ink-reaction btn-raised btn-xs btn-primary'
                        descipcion='El Usuario ha Cerrado el PlanOperativo Nro. $clavePrimaria'
                        idPlan='$clavePrimaria' titulo='Cerrar Plan Operativo'
                        opcion='CE'
                        data-toggle='modal' data-target='#formModal'>
                    <i class='md md-close'></i>
                </button>
                "
            ;
        } else {
            $campos['boton']['Cerrar'] = false;
        }

        if (in_array('PO-01-01-05-01-E',$rol) AND $estado=='EJ') {
            $campos['boton']['Ejecutar'] = "
                <button title='Ejecutar'
                        class='modificar logsUsuario btn ink-reaction btn-raised btn-xs btn-info'
                        descipcion='El Usuario ha Ejecutado el PlanOperativo Nro. $clavePrimaria'
                        idPlan='$clavePrimaria' titulo='Ejecutar Actividades - Procesos'
                        opcion='EJ'
                        data-toggle='modal' data-target='#formModal'>
                    <i class='md md-send'></i>
                </button>
                "
            ;
        } else {
            $campos['boton']['Ejecutar'] = false;
        }

        if (in_array('PO-01-01-01-04-R',$rol) AND !$estado) {
            $campos['boton']['Reprogramar'] = array("
                <button title='Reprogramar'
                        class='modificar logsUsuario btn ink-reaction btn-raised btn-xs btn-info'
                        descipcion='El Usuario ha Reprogramado el PlanOperativo Nro. $clavePrimaria'
                        idPlan='$clavePrimaria' titulo='Reprogramar Plan Operativo'
                        opcion='RP'
                        data-toggle='modal' data-target='#formModal' id='modificar'>
                    <i class='fa fa-rotate-left'></i>
                </button>
                ",
                'if( $i["ind_estado"] =="AP") { $valor2 = "#botonEval"; } else { $valor2 = ""; }'
            );
        } else {
            $campos['boton']['Reprogramar'] = false;
        }

        if (in_array('PO-01-01-01-04-I',$rol) AND !$estado) {
            $campos['boton']['Imprimir'] = "
                <button title='Imprimir'
                        class='imprimir logsUsuario btn ink-reaction btn-raised btn-xs btn-info'
                        descipcion='El Usuario ha Imprimeso el PlanOperativo Nro. $clavePrimaria'
                        idPlan='$clavePrimaria' titulo='Imprimir Plan Operativo'
                        opcion='Imprimir'>
                    <i class='md md-print'></i>
                </button>
                "
            ;
        } else {
            $campos['boton']['Imprimir'] = false;
        }


        #hago el llamado de la datatabla del controlador principal.
        $this->metDataTabla($sql,$campos,$clavePrimaria,$camposExtra, false, 'ORDER BY po_b001_poa.pk_num_poa DESC ');
    }
}
