<?php
class reporteStockControlador extends Controlador
{
    public $atReporte;
    public $atCommodityModelo;
    public $atClasificacionModelo;
    public $atMiscelaneoModelo;
    public function __construct()
    {
        parent::__construct();
        #se carga el Modelo.
        $this->atReporte = $this->metCargarModelo('reporteStock', 'reportes');
        Session::metAcceso();
        #se carga la Libreria.
        $this->metObtenerLibreria('headerStock','modLG');
        $this->atFPDF = new pdf('P', 'mm', 'Letter');
    }

    public function metIndex()
    {
        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029',
        );
        $js[] = 'materialSiace/core/demo/DemoTableDynamic';
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJs($js);
        $this->atVista->assign('selectTipoItem',$this->atReporte->atMiscelaneoModelo->metMostrarSelect('TIPOITM'));
        $this->atVista->assign('almacen',$this->atReporte->atCommodityModelo->atAlmacenModelo->metListarAlmacen());
        $this->atVista->assign('clasificacion',$this->atReporte->atClasificacionModelo->metListarClasificacion());
        $this->atVista->metRenderizar('filtro');
    }

    public function metRellenarCeros($nro,$cantidad){
        $cont=strlen($nro);
        if($cont<$cantidad){
            while($cont<$cantidad){
                $nro="0".$nro;
                $cont=$cont+1;
            }
        }
        return $nro;
    } // END FUNCTION

    public function metGenerarReporte($orden,$item,$tipo,$cantidad)
    {
        $elaboradoPor = $this->atReporte->metMostrarEmpleado(Session::metObtener('idEmpleado'));
        $revisadoPor = $this->atReporte->metMostrarEmpleado(36);//#35 pk_num_empleado Juan Hernandez
        $conformadoPor = $this->atReporte->metMostrarEmpleado(67);//#36 pk_num_empleado Geovanny Caraballo


        define('ELABORADO_POR',$elaboradoPor['nombre']);
        define('ELABORADO_CARGO',$elaboradoPor['ind_descripcion_cargo']);
        define('REVISADO_POR',$revisadoPor['nombre']);
        define('REVISADO_CARGO',$revisadoPor['ind_descripcion_cargo']);
        define('CONFORMADO_POR',$conformadoPor['nombre']);
        define('CONFORMADO_CARGO',$conformadoPor['ind_descripcion_cargo']);



        $filtro = "AND item.num_estatus= 1 ";
        if($item!='no'){ $filtro .= "AND item.pk_num_item='$item' "; }
        if($tipo!='no'){ $filtro .= "AND detalle.pk_num_miscelaneo_detalle='$tipo' "; }
        if($cantidad!='no'){ $filtro .= "AND stock.num_stock_actual>='".number_format($cantidad,2,",",".")."' ";}

        $filtro .= "ORDER BY item.$orden ASC";

        $stock = $this->atReporte->metListarStock($filtro);

        $this->atFPDF->SetTitle(utf8_decode('Stock de Items'));
        $this->atFPDF->AliasNbPages();
        $this->atFPDF->SetMargins(5, 1, 1);
        $this->atFPDF->SetAutoPageBreak(5, 35);
        $this->atFPDF->AddPage();
        $num=0;
        foreach($stock AS $titulo=>$valor){
            $num++;
            $this->atFPDF->SetDrawColor(255, 255, 255);
            $this->atFPDF->SetFillColor(255, 255, 255);
            $this->atFPDF->SetTextColor(0, 0, 0);
            $this->atFPDF->SetFont('Arial', '', 6);
            $this->atFPDF->Row(array(
                //$stock[$titulo]['pk_num_item'],
                $num,
                $stock[$titulo]['ind_codigo_interno'],
                utf8_decode($stock[$titulo]['descripcionItem']),
                $stock[$titulo]['unidad'],
                number_format($stock[$titulo]['num_stock_actual'], 2, ',', '.'),
                number_format($stock[$titulo]['num_stock_comprometido'], 2, ',', '.'),
                number_format($stock[$titulo]['num_stock_actual']-$stock[$titulo]['num_stock_comprometido'], 2, ',', '.')
            ));
            $this->atFPDF->Ln(1);
        }

        #salida del pdf
        $this->atFPDF->Output('Stock de Items','I');
    }

    public function metGenerarReporteExcel($orden, $item, $tipo, $cantidad){
        $this->metObtenerLibreria('PHPExcel', 'PHPExcel/Classes');
        $objPHPExcel = new PHPExcel();

        // Propiedades del documento
        $objPHPExcel->getProperties()->setCreator("Contraloria del Estado Sucre")
            ->setLastModifiedBy("Contraloria del Estado Sucre")
            ->setTitle("Nomina Consolidada")
            ->setSubject("Nomina Consolidada")
            ->setDescription("Nomina Consolidada de la Contraloria del Estado Sucre")
            ->setKeywords("Nomina Consolidada")
            ->setCategory("Archivo de Nomina Consolidada");

        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('B1:E1');
        $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('B1', 'REPÚBLICA BOLIVARIANA DE VENEZUELA');
        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('B2:E2');
        $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('B2', 'CONTRALORÍA DEL ESTADO SUCRE');
        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('B3:E3');
        $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('B3', 'DIRECCIÓN DE ADMINISTRACIÓN: ');

        // Se agregan los titulos del reporte
        $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('B5', 'LISTADO DE STOCK: ');        // Titulo del reporte

        //Ancho de las columnas
        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(6);
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(50);
        $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
        $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15);
        $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(15);
        $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(15);

        /**
         * COLOCAR ESTILO A LOS TITULOS
         * @var integer
         */
        $col = 3;

        $styleArray = array(
            'font' => array(
                'bold' => true,
            ),
            'alignment' => array(
                'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT,
            ),
            'borders' => array(
                'top' => array(
                    'style' => PHPExcel_Style_Border::BORDER_THIN,
                ),
            ),
            'fill' => array(
                'type' => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
                'rotation' => 90,
                'startcolor' => array(
                    'argb' => 'FFA0A0A0',
                ),
                'endcolor' => array(
                    'argb' => 'FFFFFFFF',
                ),
            ),
        );
        $objPHPExcel->getActiveSheet()->getStyle('A7:G7')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('B1:B5')->applyFromArray($styleArray);

        $row = 7;

        $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $row, 'Item');
        $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, $row, 'Cod. Interno');
        $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2, $row, 'Descripcion');
        $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(3, $row, 'Und.');
        $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(4, $row, 'Stock Actual');
        $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(5, $row, 'Comprometido');
        $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(6, $row, 'Stock Disponible');



        /**
         * Consulta a la base de datos para obtener los datos del listado
         * @var string
         */
        $filtro = "AND item.num_estatus= 1 ";
        if($item!='no'){ $filtro .= "AND item.pk_num_item='$item' "; }
        if($tipo!='no'){ $filtro .= "AND detalle.pk_num_miscelaneo_detalle='$tipo' "; }
        if($cantidad!='no'){ $filtro .= "AND stock.num_stock_actual>='".number_format($cantidad,2,",",".")."' ";}

        $filtro .= "ORDER BY item.$orden ASC";

        $stock = $this->atReporte->metListarStock($filtro);

        $row=8;
        $num=0;
        foreach($stock AS $titulo=>$valor){
            $col=0;
            $num++;
            //$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $stock[$titulo]['pk_num_item']);
            $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $num);
            $col++;
            $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $stock[$titulo]['ind_codigo_interno']);
            $col++;
            $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $stock[$titulo]['descripcionItem']);
            $col++;
            $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $stock[$titulo]['unidad']);
            $col++;

            $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, number_format($stock[$titulo]['num_stock_actual'], 2, ',', '.'));
            $col++;
            $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, number_format($stock[$titulo]['num_stock_comprometido'], 2, ',', '.'));
            $col++;
            $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, number_format($stock[$titulo]['num_stock_actual']-$stock[$titulo]['num_stock_comprometido'], 2, ',', '.'));

            $row++;
        }

        // Redirigir la salida al navegador web de un cliente ( Excel5 )
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="Logistica_listado_stock.xls"');
        header('Cache-Control: max-age=0');
        // Si usted está sirviendo a IE 9 , a continuación, puede ser necesaria la siguiente
        header('Cache-Control: max-age=1');

        // Si usted está sirviendo a IE a través de SSL , a continuación, puede ser necesaria la siguiente
        header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
        header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
        header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
        header ('Pragma: public'); // HTTP/1.0

        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');

        $respuesta = array('estatus' => 1);
        echo json_encode($respuesta);
    }
}

?>
