<?php 
require_once('../../../includes/load.php');
require_once('../../../vendor/autoload.php');
 

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;


$OpcionesAnio = $_POST['opciones'];
$OpcionesMes = $_POST['opciones1'];
$OpcionesCampana = $_POST['opciones2'];

// Verificar si se seleccionaron opciones
if (!empty($OpcionesAnio) && !empty($OpcionesMes) && !empty($OpcionesCampana)) {
    // Crear la parte de la consulta SQL con el IN
    $OpcionesAnio = implode(',', array_map('intval', $OpcionesAnio));
    $OpcionesMes = implode(',', array_map('intval', $OpcionesMes));
    $OpcionesCampana = implode(',', array_map('intval', $OpcionesCampana));



    // Realizar la consulta SELECT con el IN
    $consulta = $db->query("SELECT zona.ZNombre, granja.AreaTrabajo, granja.GNombre, operacion.id, date_format(operacion.FechaInicioRecepcion, '%d-%m-%Y') as FechaInicioRecepcion, date_format(operacion.FechaTerminoRecepcion, '%d-%m-%Y') as FechaTerminoRecepcion, date_format(operacion.FechaInicioCompost, '%d-%m-%Y') as FechaInicioCompost, date_format(operacion.FechaTerminoCompost, '%d-%m-%Y') as FechaTerminoCompost, date_format(operacion.FechaTerminoLimpiezaInicial, '%d-%m-%Y') as FechaTerminoLimpiezaInicial, date_format(operacion.FechaInicioTumbadoCompost, '%d-%m-%Y') as FechaInicioTumbadoCompost, date_format(operacion.FechaTerminoTumbadoCompost, '%d-%m-%Y') as FechaTerminoTumbadoCompost, date_format(operacion.FechaRedDragon, '%d-%m-%Y') as FechaRedDragon, date_format(operacion.FechaEntregaGranja, '%d-%m-%Y') as FechaEntregaGranja, date_format(operacion.FechaIngresoPollosBB, '%d-%m-%Y') as FechaIngresoPollosBB, date_format(programa.ProFechaRegistro, '%d-%m-%Y') as ProFechaRegistro, date_format(programa.ProFechaUltimaVenta, '%d-%m-%Y') as ProFechaUltimaVenta, date_format(programa.ProFechaInicioLimpieza, '%d-%m-%Y') as ProFechaInicioLimpieza, date_format(programa.ProFechaInicioRecepcion, '%d-%m-%Y') as ProFechaInicioRecepcion, date_format(programa.ProFechaTerminoRecepcion, '%d-%m-%Y') as ProFechaTerminoRecepcion, date_format(programa.ProFechaInicioCompost, '%d-%m-%Y') as ProFechaInicioCompost, date_format(programa.ProFechaTerminoCompost, '%d-%m-%Y') as ProFechaTerminoCompost, date_format(programa.ProFechaTerminoLimpiezaInicial, '%d-%m-%Y') as ProFechaTerminoLimpiezaInicial, date_format(programa.ProFechaInicioTumbadoCompost, '%d-%m-%Y') as ProFechaInicioTumbadoCompost, date_format(programa.ProFechaTerminoTumbadoCompost, '%d-%m-%Y') as ProFechaTerminoTumbadoCompost, date_format(programa.ProFechaRedDragon, '%d-%m-%Y') as ProFechaRedDragon, date_format(programa.ProFechaEntregaGranja, '%d-%m-%Y') as ProFechaEntregaGranja, date_format(programa.ProFechaIngresoPollosBB, '%d-%m-%Y') as ProFechaIngresoPollosBB, date_format(operacion.FechaInicioLimpieza, '%d-%m-%Y') as FechaInicioLimpieza, operacion.TPreparacionLimpieza, operacion.TCompost, operacion.TLimpiezaInicial, operacion.TDescanso, operacion.TVacioSanitario, operacion.TLimpieza, operacion.TDescansoProduccion, programa.TProPreparacionLimpieza, programa.TProCompost, programa.TProLimpiezaInicial, programa.TProDescanso, programa.TProVacioSanitario, programa.TProLimpieza, programa.TProDescansoProduccion, operacion.TipoGranja, operacion.DiferenciaTiempoLimpieza, operacion.DiferenciaTerminoTumbado, operacion.DiferenciaInicioTumbado, operacion.DiferenciaTerminioCompost, operacion.DiferenciaInicioCompost, operacion.DiferenciaIngresoLimpieza, operacion.MetaEntregaGranja, operacion.DiferenciaProRealVacioSanitario,                   operacion.DiferenciaProRealTerminoTumbado, operacion.DiferenciaProRealInicioTumbado, operacion.DiferenciaProRealLimpiezaInicial, operacion.DiferenciaProRealTerminioCompost, operacion.DiferenciaProRealInicioCompost,                  operacion.DiferenciaProRealPreparacionLimpieza, programa.TProInicioCompost, programa.TProInicioTumbado, programa.TProTerminoTumbado, operacion.TInicioCompost, operacion.TInicioTumbado, operacion.TTerminoTumbado, operacion.Estado, operacion.Mt2Proceso, operacion.Mt2Terminados, operacion.Contadoroperacion, operacion.ContarEntradaPorcentaje, operacion.ContarInicioCompostPorcentaje, operacion.ContarTerminoCompostPorcentaje, operacion.ContarInicioTumbadoPorcentaje, operacion.ContarTerminoTumbadoPorcentaje, operacion.ContarTiempoLimpiezaPorcentaje, operacion.ContarProRealPreparacionLimpiezaPorcentaje, operacion.ContarProRealInicioCompostPorcentaje, operacion.ContarProRealTerminoCompostPorcentaje, operacion.ContarProRealLimpiezaInicialPorcentaje, operacion.ContarProRealInicioTumbadoPorcentaje, operacion.ContarProRealTerminoTumbadoPorcentaje, operacion.ContarProRealVacioSanitarioPorcentaje, operacion.ContarCondicionalEntradaPorcentaje, operacion.ContarCondicionalInicioCompostPorcentaje, operacion.ContarCondicionalTerminoCompostPorcentaje, operacion.ContarCondicionalInicioTumbadoPorcentaje, operacion.ContarCondicionalTerminoTumbadoPorcentaje, operacion.ContarCondicionalTiempoLimpiezaPorcentaje, operacion.ContarProRealCondicionalPreparacionLimpiezaPorcentaje, operacion.ContarProRealCondicionalInicioCompostPorcentaje, operacion.ContarProRealCondicionalTerminoCompostPorcentaje, operacion.ContarProRealCondicionalInicioTumbadoPorcentaje, operacion.ContarProRealCondicionalTerminoTumbadoPorcentaje, operacion.ContarProRealCondicionalVacioSanitarioPorcentaje, operacion.ContarProRealCondicionalLimpiezaInicialPorcentaje, operacion.Mes, operacion.Campana, operacion.Reuso, case (operacion.IdMesRptOperacion) WHEN 1 THEN 'Enero' WHEN 2 THEN 'Febrero' WHEN 3 THEN 'Marzo' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Mayo' WHEN 6 THEN 'Junio' WHEN 7 THEN 'Julio' WHEN 8 THEN 'Agosto' WHEN 9 THEN 'Septiembre' WHEN 10 THEN 'Octubre' WHEN 11 THEN 'Noviembre' WHEN 12 THEN 'Diciembre' END NMes, operacion.GranjasProceso, operacion.GranjasTerminados, operacion.DiferenciaTerminoLimpiezaInicial, operacion.IdAnioRptOperacion, operacion.MetaTiempoLimpiezaInicial, operacion.ContarTotalOperacionPorcentajeEntrada, operacion.ContarOperacionVerdeAmarilloPorcentajeEntrada, operacion.ContarTotalOperacionInicioCompost, operacion.ContarOperacionVerdeAmarilloInicioCompost, operacion.ContarTotalOperacionTerminoCompost, operacion.ContarOperacionVerdeAmarilloTerminoCompost, operacion.ContarTotalOperacionTerminoLimpiezaInicial, operacion.ContarOperacionVerdeAmarilloTerminoLimpiezaInicial, operacion.ContarTotalOperacionInicioTumbado, operacion.ContarOperacionVerdeAmarilloInicioTumbado, operacion.ContarTotalOperacionTerminoTumbado, operacion.ContarOperacionVerdeAmarilloTerminoTumbado, operacion.ContarTotalOperacionTerminoLimpieza, operacion.ContarOperacionVerdeAmarilloTerminoLimpieza, operacion.DiferenciaDiasTerminoLimpiezaInicial FROM zona INNER JOIN granja ON zona.Idzona = granja.Idzona INNER JOIN operacion ON granja.IdGranja = operacion.IdGranja INNER JOIN tiposervicio ON operacion.IdTipoServicio = tiposervicio.IdTipoServicio INNER JOIN programa ON granja.IdGranja = programa.IdGranja AND operacion.IdPrograma = programa.id AND tiposervicio.IdTipoServicio = programa.IdTipoServicio INNER JOIN areagerenciaoperaciones ON operacion.IdAreaGerenciaOperaciones = areagerenciaoperaciones.IdAreaGerenciaOperaciones WHERE (areagerenciaoperaciones.CodigoGO = 'Lge') AND (operacion.IdTipoServicio = 1) AND (operacion.IdMesRptOperacion IN ($OpcionesMes)) AND (operacion.Campana IN ($OpcionesCampana)) AND (operacion.IdAnioRptOperacion IN ($OpcionesAnio)) ORDER BY IdAnioRptOperacion DESC, IdMesRptOperacion DESC, TipoGranja DESC, ZNombre DESC, id;");
    if ($db->num_rows($consulta) >= 1) {
        $documento = new Spreadsheet();

        $sheet = $documento->getActiveSheet();
        # Se usa para ponerle un titulo a la hoja de excel 
        $sheet->setTitle("TABLERO");
        //TItulo
        $sheet->mergeCells('A1:BI1');
        $sheet->setCellValue('A1', 'REPORTE OPERACIÓN');
        $sheet->getStyle('A1:BI1')->getFont()->setSize(20)->setBold(true); 
        $sheet->getStyle('A3:BI3')->getFont()->setSize(11)->setBold(true); 
        //juntar las filas sueltas 
        $sheet->mergeCells('A2:P2');
        $sheet->mergeCells('T2:AN2');
        $sheet->mergeCells('AR2:BI2');
        $sheet->mergeCells('A3:P3');

        $range = 'Q2:S2';
        $imagePath = '../../../img/Leyenda1.png'; // Ruta de la imagen que deseas insertar
        $sheet->mergeCells($range);
        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($imagePath)
            ->setCoordinates('Q2')
            ->setResizeProportional(false)
            ->setOffsetX(15); 
        $sheet->getRowDimension(2)->setRowHeight(67); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        // Encabezados de columna
        $sheet->setCellValue('A4', 'AÑO');
        $sheet->setCellValue('B4', 'MES');
        $sheet->setCellValue('C4', 'DESTINO');
        $sheet->setCellValue('D4', 'ZONA');
        $sheet->setCellValue('E4', 'OPERACIÓN');
        $sheet->setCellValue('F4', 'CAMPAÑA');
        $sheet->setCellValue('G4', 'REÚSO');
        $sheet->setCellValue('H4', 'GRANJA');
        $sheet->setCellValue('I4', 'INICIO');
        $sheet->setCellValue('J4', 'ESTADO');
        $sheet->setCellValue('K4', 'PRODUCCIÓN');
        $sheet->setCellValue('L4', 'MT2');
        $sheet->setCellValue('M4', 'TERMINADO');
        $sheet->setCellValue('N4', 'MT2');
        $sheet->setCellValue('O4', 'PROCESO');
        $sheet->setCellValue('P4', 'MT2');
        
        $sheet->mergeCells('Q3:S3');
    	$sheet->setCellValue('Q3', 'ENTRADA');
        $sheet->setCellValue('Q4', 'PROY.');
        $sheet->setCellValue('R4', 'REAL');
        $sheet->setCellValue('S4', 'INDICADOR');

        $sheet->mergeCells('T3:V3');
    	$sheet->setCellValue('T3', 'INICIO COMPOST');
        $sheet->setCellValue('T4', 'PROY.');
        $sheet->setCellValue('U4', 'REAL');
        $sheet->setCellValue('V4', 'INDICADOR');

        $sheet->mergeCells('W3:Y3');
    	$sheet->setCellValue('W3', 'TERMINO COMPOST');
        $sheet->setCellValue('W4', 'PROY.');
        $sheet->setCellValue('X4', 'REAL');
        $sheet->setCellValue('Y4', 'INDICADOR');

        $sheet->mergeCells('Z3:AB3');
    	$sheet->setCellValue('Z3', 'TERMINO LIMPIEZA INICIAL');
        $sheet->setCellValue('Z4', 'PROY.');
        $sheet->setCellValue('AA4', 'REAL');
        $sheet->setCellValue('AB4', 'INDICADOR');

        $sheet->mergeCells('AC3:AE3');
    	$sheet->setCellValue('AC3', 'TIEMPO LIMPIEZA INICIAL');
        $sheet->setCellValue('AC4', 'META');
        $sheet->setCellValue('AD4', 'REAL');
        $sheet->setCellValue('AE4', 'INDICADOR');

        $sheet->mergeCells('AF3:AH3');
    	$sheet->setCellValue('AF3', 'INICIO TUMBADO');
        $sheet->setCellValue('AF4', 'PROY.');
        $sheet->setCellValue('AG4', 'REAL');
        $sheet->setCellValue('AH4', 'INDICADOR');

        $sheet->mergeCells('AI3:AK3');
    	$sheet->setCellValue('AI3', 'TERMINO TUMBADO');
        $sheet->setCellValue('AI4', 'PROY.');
        $sheet->setCellValue('AJ4', 'REAL');
        $sheet->setCellValue('AK4', 'INDICADOR');

        $sheet->mergeCells('AL3:AN3');
    	$sheet->setCellValue('AL3', 'TIEMPO  LIMPIEZA');
        $sheet->setCellValue('AL4', 'META.');
        $sheet->setCellValue('AM4', 'REAL');
        $sheet->setCellValue('AN4', 'INDICADOR');


        $range = 'AO2:AQ2';
        $imagePath = '../../../img/Leyenda2.png'; // Ruta de la imagen que deseas insertar
        $sheet->mergeCells($range);
        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($imagePath)
            ->setCoordinates('AO2')
            ->setResizeProportional(false)
            ->setOffsetY(10); 
        $sheet->getRowDimension(2)->setRowHeight(67); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->mergeCells('AO3:AQ3');
    	$sheet->setCellValue('AO3', 'PREPARACIÓN LIMPIEZA');
        $sheet->setCellValue('AO4', 'PROY.');
        $sheet->setCellValue('AP4', 'REAL');
        $sheet->setCellValue('AQ4', 'INDICADOR');

        $sheet->mergeCells('AR3:AT3');
    	$sheet->setCellValue('AR3', 'INICIO COMPOST');
        $sheet->setCellValue('AR4', 'PROY.');
        $sheet->setCellValue('AS4', 'REAL');
        $sheet->setCellValue('AT4', 'INDICADOR');

        $sheet->mergeCells('AU3:AW3');
    	$sheet->setCellValue('AU3', 'TERMINO COMPOST');
        $sheet->setCellValue('AU4', 'PROY.');
        $sheet->setCellValue('AV4', 'REAL');
        $sheet->setCellValue('AW4', 'INDICADOR');

        $sheet->mergeCells('AX3:AZ3');
    	$sheet->setCellValue('AX3', 'LIMPIEZA INICIAL');
        $sheet->setCellValue('AX4', 'PROY.');
        $sheet->setCellValue('AY4', 'REAL');
        $sheet->setCellValue('AZ4', 'INDICADOR');

        $sheet->mergeCells('BA3:BC3');
    	$sheet->setCellValue('BA3', 'INICIO TUMBADO');
        $sheet->setCellValue('BA4', 'PROY.');
        $sheet->setCellValue('BB4', 'REAL');
        $sheet->setCellValue('BC4', 'INDICADOR');

        $sheet->mergeCells('BD3:BF3');
    	$sheet->setCellValue('BD3', 'TERMINO TUMBADO');
        $sheet->setCellValue('BD4', 'PROY.');
        $sheet->setCellValue('BE4', 'REAL');
        $sheet->setCellValue('BF4', 'INDICADOR');

        $sheet->mergeCells('BG3:BI3');
    	$sheet->setCellValue('BG3', 'VACIO SANITARIO');
        $sheet->setCellValue('BG4', 'PROY.');
        $sheet->setCellValue('BH4', 'REAL');
        $sheet->setCellValue('BI4', 'INDICADOR');

        $sheet->getStyle('Q3:AB3')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('afeeee');
        $sheet->getStyle('Q3:AB3')->getFont()->setBold(true);

        $sheet->getStyle('AC3:AE3')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('008080');
        $sheet->getStyle('AC3:AE3')->getFont()->setBold(true)->getColor()->setRGB('FFFFFF');

        $sheet->getStyle('AF3:AK3')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('afeeee');
        $sheet->getStyle('AF3:AK3')->getFont()->setBold(true);

        $sheet->getStyle('AL3:AN3')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('008080');
        $sheet->getStyle('AL3:AN3')->getFont()->setBold(true)->getColor()->setRGB('FFFFFF');

        $sheet->getStyle('AO3:BI3')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('afeeee');
        $sheet->getStyle('AO3:BI3')->getFont()->setBold(true);

    	$sheet->getStyle('A4:BI4')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('008080');
        $sheet->getStyle('A4:BI4')->getFont()->setBold(true)->getColor()->setRGB('FFFFFF'); // Establece el color en blanco (código RGB hexadecimal para blanco: FFFFFF)

        

        $row = 5; // Fila inicial para los datos

        // Variable auxiliar para rastrear el año anterior y el mes anterior
        $anteriorAnio = null;
        $anteriorMes = null;
        $anteriorTipoGranja = null;
        $anteriorZNombre = null;

        $filaVaciaAnio = false;
        $filaVaciaMes = false;
        $filaVaciaTipoGranja = false;
        $filaVaciaZNombre = false;

        $mergeStartRowAnio = null;
        $mergeStartRowMes = null;
        $mergeStartRowTipoGranja = null;
        $mergeStartRowZNombre = null;

        //Variable para la Suma de Galpon
        $sumContadorAnio = 0;
        $sumContadorMes = 0;
        $sumContadorTipoGranja = 0;
        $sumContadorZNombre = 0;
        
        //Variable para la Suma de Area
        $sumAreaAnio = 0;
        $sumAreaMes = 0;
        $sumAreaTipoGranja = 0;
        $sumAreaZNombre = 0;

        //Variable para la Suma de Granjas Terminanadas
        $sumAreaGranjasTerAnio = 0;
        $sumAreaGranjasTerMes = 0;
        $sumAreaGranjasTerTipoGranja = 0;
        $sumAreaGranjasTerZNombre = 0;

        //Variable para la Suma de MT Terminanadas
        $sumAreaMTTerAnio = 0;
        $sumAreaMTTerMes = 0;
        $sumAreaMTTerTipoGranja = 0;
        $sumAreaMTTerZNombre = 0;
        
        //Variable para la Suma de GranjasPro 
        $sumAreaGranjasProAnio = 0;
        $sumAreaGranjasProMes = 0;
        $sumAreaGranjasProTipoGranja = 0;
        $sumAreaGranjasProZNombre = 0;

        //Variable para la Suma de MTPro 
        $sumAreaMTProAnio = 0;
        $sumAreaMTProMes = 0;
        $sumAreaMTProTipoGranja = 0;
        $sumAreaMTProZNombre = 0;
      

    // Recorrer los resultados y agregar los datos a la tabla
    while ($rowData = $consulta->fetch_assoc()) {
        // Verificar si el año actual es diferente al año anterior
        if ($rowData['IdAnioRptOperacion'] !== $anteriorAnio) {
            // Insertar una fila vacía antes de cada nuevo grupo de datos de Anio
            if ($filaVaciaZNombre) {
                $sheet->insertNewRowBefore($row);
                

                // Combinar toda la fila
                $sheet->setCellValue('K' . $row, $sumContadorZNombre);
                $sheet->setCellValue('L' . $row, $sumAreaZNombre);
                $sheet->setCellValue('M' . $row, $sumAreaGranjasTerZNombre);
                $sheet->setCellValue('N' . $row, $sumAreaMTTerZNombre);
                $sheet->setCellValue('O' . $row, $sumAreaGranjasProZNombre);  
                $sheet->setCellValue('P' . $row, $sumAreaMTProZNombre);          

                // Define the color for the row
                $rowColor = 'afeeee'; // Change the color as desired (in this example, red)
              
                // Set the fill color for the entire row
                $sheet->getStyle('E' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
                $sheet->getStyle('E' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                $sheet->getStyle('E' . $row . ':BI' . $row)->getFont()->setBold(true);

                $sheet->setCellValue('E' . $row, 'TOTAL ZONA');
                $lastRow = $row++;
                $sheet->mergeCells('E' . $lastRow . ':I' . $lastRow);
                // Combinar las celdas para el ZNombre anterior
                if ($mergeStartRowZNombre !== null && $row - $mergeStartRowZNombre > 0) {
                    $mergeEndRowZNombre = $row - 1;
                    $sheet->mergeCells('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre);
                    $sheet->getStyle('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                    $sheet->getStyle('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre)->getFont()->setBold(true);
                    
                }
            }
            if ($filaVaciaTipoGranja) {
                $sheet->insertNewRowBefore($row);


                // Combinar toda la fila
                $sheet->setCellValue('K' . $row, $sumContadorTipoGranja);
                $sheet->setCellValue('L' . $row, $sumAreaTipoGranja);
                $sheet->setCellValue('M' . $row, $sumAreaGranjasTerTipoGranja);
                $sheet->setCellValue('N' . $row, $sumAreaMTTerTipoGranja);
                $sheet->setCellValue('O' . $row, $sumAreaGranjasProTipoGranja);
                $sheet->setCellValue('P' . $row, $sumAreaMTProTipoGranja);

               
                // Define the color for the row
                $rowColor = 'add8e6'; // Change the color as desired (in this example, red)
              
                // Set the fill color for the entire row
                $sheet->getStyle('D' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
                $sheet->getStyle('D' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                $sheet->getStyle('D' . $row . ':BI' . $row)->getFont()->setBold(true);

                $sheet->setCellValue('D' . $row, 'TOTAL GRANJA');
                $lastRow = $row++;
                $sheet->mergeCells('D' . $lastRow . ':I' . $lastRow);
                // Combinar las celdas para el TipoGranja anterior
                if ($mergeStartRowTipoGranja !== null && $row - $mergeStartRowTipoGranja > 0) {
                    $mergeEndRowTipoGranja = $row - 1;
                    $sheet->mergeCells('C' . $mergeStartRowTipoGranja . ':C' . $mergeEndRowTipoGranja);
                    $sheet->getStyle('C' . $mergeStartRowTipoGranja . ':C' . $mergeEndRowTipoGranja)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                    $sheet->getStyle('C' . $mergeStartRowTipoGranja . ':C' . $mergeEndRowTipoGranja)->getFont()->setBold(true);            
                }
            }
            if ($filaVaciaMes) {
                $sheet->insertNewRowBefore($row);

                // Combinar toda la fila
                $sheet->setCellValue('K' . $row, $sumContadorMes);
                $sheet->setCellValue('L' . $row, $sumAreaMes);
                $sheet->setCellValue('M' . $row, $sumAreaGranjasTerMes);
                $sheet->setCellValue('N' . $row, $sumAreaMTTerMes);
                $sheet->setCellValue('O' . $row, $sumAreaGranjasProMes);
                $sheet->setCellValue('P' . $row, $sumAreaMTProMes);

                
                // Define the color for the row
                $rowColor = '5f9ea0'; // Change the color as desired (in this example, red)
              
                // Set the fill color for the entire row
                $sheet->getStyle('C' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
                $sheet->getStyle('C' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                $sheet->getStyle('C' . $row . ':BI' . $row)->getFont()->setBold(true);

                $sheet->setCellValue('C' . $row, 'TOTAL MES');
                $lastRow = $row++;
                $sheet->mergeCells('C' . $lastRow . ':I' . $lastRow);
                // Combinar las celdas para el Mes anterior
                if ($mergeStartRowMes !== null && $row - $mergeStartRowMes > 0) {
                    $mergeEndRowMes = $row - 1;
                    $sheet->mergeCells('B' . $mergeStartRowMes . ':B' . $mergeEndRowMes);
                    $sheet->getStyle('B' . $mergeStartRowMes . ':B' . $mergeEndRowMes)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                    $sheet->getStyle('B' . $mergeStartRowMes . ':B' . $mergeEndRowMes)->getFont()->setBold(true);
                }
            } 
            if ($filaVaciaAnio) {
                $sheet->insertNewRowBefore($row);

                // Combinar toda la fila
                $sheet->setCellValue('K' . $row, $sumContadorAnio);
                $sheet->setCellValue('L' . $row, $sumAreaAnio);
                $sheet->setCellValue('M' . $row, $sumAreaGranjasTerAnio);
                $sheet->setCellValue('N' . $row, $sumAreaMTTerAnio);
                $sheet->setCellValue('O' . $row, $sumAreaGranjasProAnio);
                $sheet->setCellValue('P' . $row, $sumAreaMTProAnio);

                // Define the color for the row
                $rowColor = '008080'; // Change the color as desired (in this example, red)
              
                // Set the fill color for the entire row
                $sheet->getStyle('B' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
                $sheet->getStyle('B' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                $sheet->getStyle('B' . $row . ':BI' . $row)->getFont()->setBold(true)->getColor()->setRGB('FFFFFF'); // Establece el color en blanco (código RGB hexadecimal para blanco: FFFFFF)

                $sheet->setCellValue('B' . $row, 'TOTAL AÑO');
                $lastRow = $row++;
                $sheet->mergeCells('B' . $lastRow . ':I' . $lastRow); 
                // Agregar la suma de Galpon al final del grupo de Año
                $mergeEndRowAnio = $row - 1;
                $sheet->mergeCells('A' . $mergeStartRowAnio . ':A' . $mergeEndRowAnio);
                $sheet->getStyle('A' . $mergeStartRowAnio . ':A' . $mergeEndRowAnio)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                $sheet->getStyle('A' . $mergeStartRowAnio . ':A' . $mergeEndRowAnio)->getFont()->setBold(true)->getColor()->setRGB('FFFFFF'); // Establece el color en blanco (código RGB hexadecimal para blanco: FFFFFF)
                
            }
            else {
                $filaVaciaAnio = true;
            }
            // Combinar las celdas para el Año anterior
            if ($mergeStartRowAnio !== null && $row - $mergeStartRowAnio > 0) {
                $mergeEndRowAnio = $row - 1;
                $sheet->mergeCells('A' . $mergeStartRowAnio . ':A' . $mergeEndRowAnio);
            }
            // Actualizar la fila de inicio para combinar celdas de Año
            $mergeStartRowAnio = $row;
            // Actualizar el año anterior
            $anteriorAnio = $rowData['IdAnioRptOperacion'];
            // Agregar el valor del año actual en la celda correspondiente
            $sheet->setCellValue('A' . $row, $rowData['IdAnioRptOperacion']);
            // Reiniciar el mes anterior
            $anteriorMes = null;
            // Reiniciar las variables de fila vacía
            $filaVaciaMes = false;
            $filaVaciaTipoGranja = false;
            $filaVaciaZNombre = false;
            // Reiniciar la suma de Galpon para cada nuevo Año
            $sumContadorAnio = 0;
            $sumContadorMes = 0;
            $sumContadorTipoGranja = 0;
            $sumContadorZNombre = 0;

            $sumAreaAnio = 0;
            $sumAreaMes = 0;
            $sumAreaTipoGranja = 0;
            $sumAreaZNombre = 0;

            //Variable para la Suma de Granjas Terminanadas
            $sumAreaGranjasTerAnio = 0;
            $sumAreaGranjasTerMes = 0;
            $sumAreaGranjasTerTipoGranja = 0;
            $sumAreaGranjasTerZNombre = 0;

            //Variable para la Suma de MT Terminanadas
            $sumAreaMTTerAnio = 0;
            $sumAreaMTTerMes = 0;
            $sumAreaMTTerTipoGranja = 0;
            $sumAreaMTTerZNombre = 0;

            //Variable para la Suma de GranjasPro 
            $sumAreaGranjasProAnio = 0;
            $sumAreaGranjasProMes = 0;
            $sumAreaGranjasProTipoGranja = 0;
            $sumAreaGranjasProZNombre = 0;

            //Variable para la Suma de MTPro 
            $sumAreaMTProAnio = 0;
            $sumAreaMTProMes = 0;
            $sumAreaMTProTipoGranja = 0;
            $sumAreaMTProZNombre = 0;


           
        }

        // Verificar si el mes actual es diferente al mes anterior
        if ($rowData['NMes'] !== $anteriorMes) {

            // Insertar una fila vacía antes de la fila de Anio
            if ($filaVaciaZNombre) {
                $sheet->insertNewRowBefore($row);

                // Combinar toda la fila
                $sheet->setCellValue('K' . $row, $sumContadorZNombre);
                $sheet->setCellValue('L' . $row, $sumAreaZNombre);
                $sheet->setCellValue('M' . $row, $sumAreaGranjasTerZNombre);
                $sheet->setCellValue('N' . $row, $sumAreaMTTerZNombre);
                $sheet->setCellValue('O' . $row, $sumAreaGranjasProZNombre);
                $sheet->setCellValue('P' . $row, $sumAreaMTProZNombre);

                // Define the color for the row
                $rowColor = 'afeeee'; // Change the color as desired (in this example, red)
              
                // Set the fill color for the entire row
                $sheet->getStyle('E' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
                $sheet->getStyle('E' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                $sheet->getStyle('E' . $row . ':BI' . $row)->getFont()->setBold(true);

                $sheet->setCellValue('E' . $row, 'TOTAL ZONA');
                $lastRow = $row++;
                $sheet->mergeCells('E' . $lastRow . ':I' . $lastRow);
                // Combinar las celdas para el ZNombre anterior
                if ($mergeStartRowZNombre !== null && $row - $mergeStartRowZNombre > 0) {
                    $mergeEndRowZNombre = $row - 1;
                    $sheet->mergeCells('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre);
                    $sheet->getStyle('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                    $sheet->getStyle('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre)->getFont()->setBold(true);
                    
                }
            }
            if ($filaVaciaTipoGranja) {
                $sheet->insertNewRowBefore($row);

                // Combinar toda la fila
                $sheet->setCellValue('K' . $row, $sumContadorTipoGranja);
                $sheet->setCellValue('L' . $row, $sumAreaTipoGranja);
                $sheet->setCellValue('M' . $row, $sumAreaGranjasTerTipoGranja);
                $sheet->setCellValue('N' . $row, $sumAreaMTTerTipoGranja);
                $sheet->setCellValue('O' . $row, $sumAreaGranjasProTipoGranja);
                $sheet->setCellValue('P' . $row, $sumAreaMTProTipoGranja);

                // Define the color for the row
                $rowColor = 'add8e6'; // Change the color as desired (in this example, red)
              
                // Set the fill color for the entire row
                $sheet->getStyle('D' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
                $sheet->getStyle('D' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                $sheet->getStyle('D' . $row . ':BI' . $row)->getFont()->setBold(true);

                $sheet->setCellValue('D' . $row, 'TOTAL GRANJA');
                $lastRow = $row++;
                $sheet->mergeCells('D' . $lastRow . ':I' . $lastRow);
                // Combinar las celdas para el TipoGranja anterior
                if ($mergeStartRowTipoGranja !== null && $row - $mergeStartRowTipoGranja > 0) {
                    $mergeEndRowTipoGranja = $row - 1;
                    $sheet->mergeCells('C' . $mergeStartRowTipoGranja . ':C' . $mergeEndRowTipoGranja);
                    $sheet->getStyle('C' . $mergeStartRowTipoGranja . ':C' . $mergeEndRowTipoGranja)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                    $sheet->getStyle('C' . $mergeStartRowTipoGranja . ':C' . $mergeEndRowTipoGranja)->getFont()->setBold(true);            
                }
            } 
            if ($filaVaciaMes) {
                $sheet->insertNewRowBefore($row);

                // Combinar toda la fila
                $sheet->setCellValue('K' . $row, $sumContadorMes);
                $sheet->setCellValue('L' . $row, $sumAreaMes);
                $sheet->setCellValue('M' . $row, $sumAreaGranjasTerMes);
                $sheet->setCellValue('N' . $row, $sumAreaMTTerMes);
                $sheet->setCellValue('O' . $row, $sumAreaGranjasProMes);
                $sheet->setCellValue('P' . $row, $sumAreaMTProMes);

                // Define the color for the row
                $rowColor = '5f9ea0'; // Change the color as desired (in this example, red)
              
                // Set the fill color for the entire row
                $sheet->getStyle('C' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
                $sheet->getStyle('C' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                $sheet->getStyle('C' . $row . ':BI' . $row)->getFont()->setBold(true);

                $sheet->setCellValue('C' . $row, 'TOTAL MES');
                $lastRow = $row++;
                $sheet->mergeCells('C' . $lastRow . ':I' . $lastRow);
                // Combinar las celdas para el Mes anterior
                if ($mergeStartRowMes !== null && $row - $mergeStartRowMes > 0) {
                    $mergeEndRowMes = $row - 1;
                    $sheet->mergeCells('B' . $mergeStartRowMes . ':B' . $mergeEndRowMes);
                    $sheet->getStyle('B' . $mergeStartRowMes . ':B' . $mergeEndRowMes)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                    $sheet->getStyle('B' . $mergeStartRowMes . ':B' . $mergeEndRowMes)->getFont()->setBold(true);
                }
            } 
            else {
                $filaVaciaMes = true;
            }
            
            // Actualizar la fila de inicio para combinar celdas de Mes
            $mergeStartRowMes = $row;
            // Actualizar el mes anterior
            $anteriorMes = $rowData['NMes'];
            // Agregar el valor del mes actual en la celda correspondiente
            $sheet->setCellValue('B' . $row, $rowData['NMes']);
            // Reiniciar el mes anterior
            $anteriorTipoGranja = null;
            // Reiniciar las variables de fila vacía
            $filaVaciaTipoGranja = false;
            $filaVaciaZNombre = false;
            $sumContadorMes = 0;
            $sumContadorTipoGranja = 0;
            $sumContadorZNombre = 0;
            $sumAreaMes = 0;
            $sumAreaTipoGranja = 0;
            $sumAreaZNombre = 0;
            //Variable para la Suma de Granjas Terminanadas
            $sumAreaGranjasTerMes = 0;
            $sumAreaGranjasTerTipoGranja = 0;
            $sumAreaGranjasTerZNombre = 0;
            //Variable para la Suma de MT Terminanadas
            $sumAreaMTTerMes = 0;
            $sumAreaMTTerTipoGranja = 0;
            $sumAreaMTTerZNombre = 0;
            //Variable para la Suma de GranjasPro 
            $sumAreaGranjasProMes = 0;
            $sumAreaGranjasProTipoGranja = 0;
            $sumAreaGranjasProZNombre = 0;
            //Variable para la Suma de MTPro 
            $sumAreaMTProMes = 0;
            $sumAreaMTProTipoGranja = 0;
            $sumAreaMTProZNombre = 0;

        }   
        // Verificar si el TipoGranja ha cambiado
        if ($rowData['TipoGranja'] !== $anteriorTipoGranja) {
            // Insertar una fila vacía antes de la fila de Anio
            if ($filaVaciaZNombre) {
                $sheet->insertNewRowBefore($row);

                // Combinar toda la fila
                $sheet->setCellValue('K' . $row, $sumContadorZNombre);
                $sheet->setCellValue('L' . $row, $sumAreaZNombre);
                $sheet->setCellValue('M' . $row, $sumAreaGranjasTerZNombre);
                $sheet->setCellValue('N' . $row, $sumAreaMTTerZNombre);
                $sheet->setCellValue('O' . $row, $sumAreaGranjasProZNombre);
                $sheet->setCellValue('P' . $row, $sumAreaMTProZNombre);

                // Define the color for the row
                $rowColor = 'afeeee'; // Change the color as desired (in this example, red)
              
                // Set the fill color for the entire row
                $sheet->getStyle('E' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
                $sheet->getStyle('E' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                $sheet->getStyle('E' . $row . ':BI' . $row)->getFont()->setBold(true);

                $sheet->setCellValue('E' . $row, 'TOTAL ZONA');
                $lastRow = $row++;
                $sheet->mergeCells('E' . $lastRow . ':I' . $lastRow);
                // Combinar las celdas para el ZNombre anterior
                if ($mergeStartRowZNombre !== null && $row - $mergeStartRowZNombre > 0) {
                    $mergeEndRowZNombre = $row - 1;
                    $sheet->mergeCells('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre);
                    $sheet->getStyle('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                    $sheet->getStyle('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre)->getFont()->setBold(true);
                    
                }
            }
            if ($filaVaciaTipoGranja) {
                $sheet->insertNewRowBefore($row);

                // Combinar toda la fila
                $sheet->setCellValue('K' . $row, $sumContadorTipoGranja);
                $sheet->setCellValue('L' . $row, $sumAreaTipoGranja);
                $sheet->setCellValue('M' . $row, $sumAreaGranjasTerTipoGranja);
                $sheet->setCellValue('N' . $row, $sumAreaMTTerTipoGranja);
                $sheet->setCellValue('O' . $row, $sumAreaGranjasProTipoGranja);
                $sheet->setCellValue('P' . $row, $sumAreaMTProTipoGranja);

                // Define the color for the row
                $rowColor = 'add8e6'; // Change the color as desired (in this example, red)
              
                // Set the fill color for the entire row
                $sheet->getStyle('D' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
                $sheet->getStyle('D' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                $sheet->getStyle('D' . $row . ':BI' . $row)->getFont()->setBold(true);

                $sheet->setCellValue('D' . $row, 'TOTAL GRANJA');
                $lastRow = $row++;
                $sheet->mergeCells('D' . $lastRow . ':I' . $lastRow);
                // Combinar las celdas para el TipoGranja anterior
                if ($mergeStartRowTipoGranja !== null && $row - $mergeStartRowTipoGranja > 0) {
                    $mergeEndRowTipoGranja = $row - 1;
                    $sheet->mergeCells('C' . $mergeStartRowTipoGranja . ':C' . $mergeEndRowTipoGranja);
                    $sheet->getStyle('C' . $mergeStartRowTipoGranja . ':C' . $mergeEndRowTipoGranja)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                    $sheet->getStyle('C' . $mergeStartRowTipoGranja . ':C' . $mergeEndRowTipoGranja)->getFont()->setBold(true);            
                }
            } 
            else {
                $filaVaciaTipoGranja = true;
            }
            
            // Actualizar la fila de inicio para combinar celdas de TipoGranja
            $mergeStartRowTipoGranja = $row; 

            // Actualizar el TipoGranja actual
            $anteriorTipoGranja = $rowData['TipoGranja'];
            // Agregar el valor del mes actual en la celda correspondiente
            $sheet->setCellValue('C' . $row, $rowData['TipoGranja']);

            // Reiniciar el mes anterior
            $anteriorZNombre = null;

            // Reiniciar las variables de fila vacía
            $filaVaciaZNombre = false;

            $sumContadorTipoGranja = 0;
            $sumContadorZNombre = 0;
            $sumAreaTipoGranja = 0;
            $sumAreaZNombre = 0;

            //Variable para la Suma de Granjas Terminanadas
            $sumAreaGranjasTerTipoGranja = 0;
            $sumAreaGranjasTerZNombre = 0;

            //Variable para la Suma de MT Terminanadas
            $sumAreaMTTerTipoGranja = 0;
            $sumAreaMTTerZNombre = 0;

            //Variable para la Suma de GranjasPro 
            $sumAreaGranjasProTipoGranja = 0;
            $sumAreaGranjasProZNombre = 0;

            //Variable para la Suma de MTPro 
            $sumAreaMTProTipoGranja = 0;
            $sumAreaMTProZNombre = 0;



        }
        // Verificar si el ZNombre ha cambiado
        if ($rowData['ZNombre'] !== $anteriorZNombre) {
            // Insertar una fila vacía antes de la fila de Anio
            if ($filaVaciaZNombre) {
                $sheet->insertNewRowBefore($row);

                // Combinar toda la fila
                $sheet->setCellValue('K' . $row, $sumContadorZNombre);
                $sheet->setCellValue('L' . $row, $sumAreaZNombre);
                $sheet->setCellValue('M' . $row, $sumAreaGranjasTerZNombre);
                $sheet->setCellValue('N' . $row, $sumAreaMTTerZNombre);
                $sheet->setCellValue('O' . $row, $sumAreaGranjasProZNombre);
                $sheet->setCellValue('P' . $row, $sumAreaMTProZNombre);

                // Define the color for the row
                $rowColor = 'afeeee'; // Change the color as desired (in this example, red)
              
                // Set the fill color for the entire row
                $sheet->getStyle('E' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
                $sheet->getStyle('E' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                $sheet->getStyle('E' . $row . ':BI' . $row)->getFont()->setBold(true);

                $sheet->setCellValue('E' . $row, 'TOTAL ZONA');
                $lastRow = $row++;
                $sheet->mergeCells('E' . $lastRow . ':I' . $lastRow);
                // Combinar las celdas para el ZNombre anterior
                if ($mergeStartRowZNombre !== null && $row - $mergeStartRowZNombre > 0) {
                    $mergeEndRowZNombre = $row - 1;
                    $sheet->mergeCells('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre);
                    $sheet->getStyle('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
                    $sheet->getStyle('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre)->getFont()->setBold(true);
                    
                }
            }
            else {
                $filaVaciaZNombre = true;
            }

            
            $mergeStartRowZNombre = $row; // Actualizar la fila de inicio para combinar celdas de ZNombre
            // Actualizar el ZNombre actual
            $anteriorZNombre = $rowData['ZNombre'];
            // Agregar el valor del mes actual en la celda correspondiente
            $sheet->setCellValue('D' . $row, $rowData['ZNombre']);
            $sumContadorZNombre = 0;
            $sumAreaZNombre = 0;

            //Variable para la Suma de Granjas Terminanadas
            $sumAreaGranjasTerZNombre = 0;
            //Variable para la Suma de MT Terminanadas
            $sumAreaMTTerZNombre = 0;
            //Variable para la Suma de GranjasPro 
            $sumAreaGranjasProZNombre = 0;
            //Variable para la Suma de MTPro 
            $sumAreaMTProZNombre = 0;


       }

        
               // Agregar los datos a las celdas correspondientes
        $sheet->setCellValue('A' . $row, $rowData['IdAnioRptOperacion']);
        $sheet->setCellValue('E' . $row, $rowData['id']);
        $sheet->setCellValue('F' . $row, $rowData['Campana']);
        $sheet->setCellValue('G' . $row, $rowData['Reuso']);
        $sheet->setCellValue('H' . $row, $rowData['GNombre']);
        $sheet->setCellValue('I' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['FechaInicioLimpieza']));
        $sheet->getStyle('I'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('J' . $row, $rowData['Estado']);
        $sheet->setCellValue('K' . $row, $rowData['Contadoroperacion']);
        $sheet->setCellValue('L' . $row, $rowData['AreaTrabajo']);
        // Define the color for the row
        $rowColor = 'afeeee'; // Change the color as desired
        $cellStyle = $sheet->getStyle('L' . $row);
        $cellStyle->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($rowColor);
        //
        $sheet->setCellValue('M' . $row, $rowData['GranjasTerminados']);
        $sheet->setCellValue('N' . $row, $rowData['Mt2Terminados']);
        $sheet->setCellValue('O' . $row, $rowData['GranjasProceso']);
        $sheet->setCellValue('P' . $row, $rowData['Mt2Proceso']);
        $sheet->setCellValue('Q' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['ProFechaInicioLimpieza']));
        $sheet->getStyle('Q'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('R' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['FechaInicioLimpieza']));
        $sheet->getStyle('R'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('S' . $row, ''); // Establecer el valor de la celda como una cadena vacía

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaIngresoLimpieza'] == 1) {
            $colorImage = '../../../img/amarillo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaIngresoLimpieza'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaIngresoLimpieza'] >= 2) {
            $colorImage = '../../../img/rojo.png'; // Ruta de la imagen rojo
        }elseif ($rowData['DiferenciaIngresoLimpieza'] <= 0) {
            $colorImage = '../../../img/verde.png'; // Ruta de la imagen amarilla
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('S' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('T' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['ProFechaInicioCompost']));
        $sheet->getStyle('T'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('U' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['FechaInicioCompost']));
        $sheet->getStyle('U'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('V' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaInicioCompost'] == 1) {
            $colorImage = '../../../img/amarillo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaInicioCompost'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaInicioCompost'] >= 2) {
            $colorImage = '../../../img/rojo.png'; // Ruta de la imagen rojo
        }elseif ($rowData['DiferenciaInicioCompost'] <= 0) {
            $colorImage = '../../../img/verde.png'; // Ruta de la imagen amarilla
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('V' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('W' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['ProFechaTerminoCompost']));
        $sheet->getStyle('W'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('X' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['FechaTerminoCompost']));
        $sheet->getStyle('X'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('Y' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaTerminioCompost'] == 1) {
            $colorImage = '../../../img/amarillo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaTerminioCompost'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaTerminioCompost'] >= 2) {
            $colorImage = '../../../img/rojo.png'; // Ruta de la imagen rojo
        }elseif ($rowData['DiferenciaTerminioCompost'] <= 0) {
            $colorImage = '../../../img/verde.png'; // Ruta de la imagen amarilla
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('Y' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('Z' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['ProFechaTerminoLimpiezaInicial']));
        $sheet->getStyle('Z'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('AA' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['FechaTerminoLimpiezaInicial']));
        $sheet->getStyle('AA'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('AB' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaTerminoLimpiezaInicial'] == 1) {
            $colorImage = '../../../img/amarillo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaTerminoLimpiezaInicial'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaTerminoLimpiezaInicial'] >= 2) {
            $colorImage = '../../../img/rojo.png'; // Ruta de la imagen rojo
        }elseif ($rowData['DiferenciaTerminoLimpiezaInicial'] <= 0) {
            $colorImage = '../../../img/verde.png'; // Ruta de la imagen amarilla
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('AB' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('AC' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['MetaTiempoLimpiezaInicial']));
        $sheet->getStyle('AC'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('AD' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['TLimpiezaInicial']));
        $sheet->getStyle('AD'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('AE' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaDiasTerminoLimpiezaInicial'] == 1) {
            $colorImage = '../../../img/amarillo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaDiasTerminoLimpiezaInicial'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaDiasTerminoLimpiezaInicial'] >= 2) {
            $colorImage = '../../../img/rojo.png'; // Ruta de la imagen rojo
        }elseif ($rowData['DiferenciaDiasTerminoLimpiezaInicial'] <= 0) {
            $colorImage = '../../../img/verde.png'; // Ruta de la imagen amarilla
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('AE' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('AF' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['ProFechaInicioTumbadoCompost']));
        $sheet->getStyle('AF'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('AG' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['FechaInicioTumbadoCompost']));
        $sheet->getStyle('AG'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('AH' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaInicioTumbado'] == 1) {
            $colorImage = '../../../img/amarillo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaInicioTumbado'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaInicioTumbado'] >= 2) {
            $colorImage = '../../../img/rojo.png'; // Ruta de la imagen rojo
        }elseif ($rowData['DiferenciaInicioTumbado'] <= 0) {
            $colorImage = '../../../img/verde.png'; // Ruta de la imagen amarilla
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('AH' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('AI' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['ProFechaTerminoTumbadoCompost']));
        $sheet->getStyle('AI'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('AJ' . $row, \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($rowData['FechaTerminoTumbadoCompost']));
        $sheet->getStyle('AJ'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
        $sheet->setCellValue('AK' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaTerminoTumbado'] == 1) {
            $colorImage = '../../../img/amarillo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaTerminoTumbado'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaTerminoTumbado'] >= 2) {
            $colorImage = '../../../img/rojo.png'; // Ruta de la imagen rojo
        }elseif ($rowData['DiferenciaTerminoTumbado'] <= 0) {
            $colorImage = '../../../img/verde.png'; // Ruta de la imagen amarilla
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('AK' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('AL' . $row, $rowData['MetaEntregaGranja']);
        $sheet->setCellValue('AM' . $row, $rowData['TLimpieza']);
        $sheet->setCellValue('AN' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaTiempoLimpieza'] == 1) {
            $colorImage = '../../../img/amarillo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaTiempoLimpieza'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen amarilla
        }elseif ($rowData['DiferenciaTiempoLimpieza'] >= 2) {
            $colorImage = '../../../img/rojo.png'; // Ruta de la imagen rojo
        }elseif ($rowData['DiferenciaTiempoLimpieza'] <= 0) {
            $colorImage = '../../../img/verde.png'; // Ruta de la imagen amarilla
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('AN' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('AO' . $row, $rowData['TProPreparacionLimpieza']);
        $sheet->setCellValue('AP' . $row, $rowData['TPreparacionLimpieza']);
        $sheet->setCellValue('AQ' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaTiempoLimpieza'] > 1 && $rowData['DiferenciaTiempoLimpieza'] < 50000) {
            $colorImage = '../../../img/banderaroja.png'; // Ruta de la imagen badera roja
        }elseif ($rowData['DiferenciaTiempoLimpieza'] <= 0) {
            $colorImage = '../../../img/banderaverde.png'; // Ruta de la imagen bandera verde
        }elseif ($rowData['DiferenciaTiempoLimpieza'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen fondo blanco
        }else{
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen fondo blanco
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('AQ' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('AR' . $row, $rowData['TProInicioCompost']);
        $sheet->setCellValue('AS' . $row, $rowData['TInicioCompost']);
        $sheet->setCellValue('AT' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaProRealInicioCompost'] >= 1 && $rowData['DiferenciaProRealInicioCompost'] < 50000) {
            $colorImage = '../../../img/banderaroja.png'; // Ruta de la imagen badera roja
        }elseif ($rowData['DiferenciaProRealInicioCompost'] <= 0) {
            $colorImage = '../../../img/banderaverde.png'; // Ruta de la imagen bandera verde
        }elseif ($rowData['DiferenciaProRealInicioCompost'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen fondo blanco
        }else{
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen fondo blanco
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('AT' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('AU' . $row, $rowData['TProCompost']);
        $sheet->setCellValue('AV' . $row, $rowData['TCompost']);
        $sheet->setCellValue('AW' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaProRealTerminioCompost'] >= 1 && $rowData['DiferenciaProRealTerminioCompost'] < 50000) {
            $colorImage = '../../../img/banderaroja.png'; // Ruta de la imagen badera roja
        }elseif ($rowData['DiferenciaProRealTerminioCompost'] <= 0) {
            $colorImage = '../../../img/banderaverde.png'; // Ruta de la imagen bandera verde
        }elseif ($rowData['DiferenciaProRealTerminioCompost'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen fondo blanco
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('AW' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('AX' . $row, $rowData['TProLimpiezaInicial']);
        $sheet->setCellValue('AY' . $row, $rowData['TLimpiezaInicial']);
        $sheet->setCellValue('AZ' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaProRealLimpiezaInicial'] >= 1 && $rowData['DiferenciaProRealLimpiezaInicial'] < 50000) {
            $colorImage = '../../../img/banderaroja.png'; // Ruta de la imagen badera roja
        }elseif ($rowData['DiferenciaProRealLimpiezaInicial'] <= 0) {
            $colorImage = '../../../img/banderaverde.png'; // Ruta de la imagen bandera verde
        }elseif ($rowData['DiferenciaProRealLimpiezaInicial'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen fondo blanco
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('AZ' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('BA' . $row, $rowData['TProInicioTumbado']);
        $sheet->setCellValue('BB' . $row, $rowData['TInicioTumbado']);
        $sheet->setCellValue('BC' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaProRealInicioTumbado'] >= 1 && $rowData['DiferenciaProRealInicioTumbado'] < 50000) {
            $colorImage = '../../../img/banderaroja.png'; // Ruta de la imagen badera roja
        }elseif ($rowData['DiferenciaProRealInicioTumbado'] <= 0) {
            $colorImage = '../../../img/banderaverde.png'; // Ruta de la imagen bandera verde
        }elseif ($rowData['DiferenciaProRealInicioTumbado'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen fondo blanco
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('BC' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);

        $sheet->setCellValue('BD' . $row, $rowData['TProTerminoTumbado']);
        $sheet->setCellValue('BE' . $row, $rowData['TTerminoTumbado']);
        $sheet->setCellValue('BF' . $row, '');

        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaProRealTerminoTumbado'] >= 1 && $rowData['DiferenciaProRealTerminoTumbado'] < 50000) {
            $colorImage = '../../../img/banderaroja.png'; // Ruta de la imagen badera roja
        }elseif ($rowData['DiferenciaProRealTerminoTumbado'] <= 0) {
            $colorImage = '../../../img/banderaverde.png'; // Ruta de la imagen bandera verde
        }elseif ($rowData['DiferenciaProRealTerminoTumbado'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen fondo blanco
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('BF' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);


        $sheet->setCellValue('BG' . $row, $rowData['TProVacioSanitario']);
        $sheet->setCellValue('BH' . $row, $rowData['TVacioSanitario']);
        $sheet->setCellValue('BI' . $row, '');


        $colorImage = ''; // Ruta de la imagen de color correspondiente al número

        if ($rowData['DiferenciaProRealVacioSanitario'] >= 1 && $rowData['DiferenciaProRealVacioSanitario'] < 50000) {
            $colorImage = '../../../img/banderaroja.png'; // Ruta de la imagen badera roja
        }elseif ($rowData['DiferenciaProRealVacioSanitario'] <= 0) {
            $colorImage = '../../../img/banderaverde.png'; // Ruta de la imagen bandera verde
        }elseif ($rowData['DiferenciaProRealVacioSanitario'] == 66666) {
            $colorImage = '../../../img/fondo.png'; // Ruta de la imagen fondo blanco
        }

        $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
        $drawing->setPath($colorImage)
            ->setCoordinates('BI' . $row)
            ->setOffsetX(35)
            ->setOffsetY(3);

        $sheet->getRowDimension($row)->setRowHeight(25); // Ajusta la altura de la fila para acomodar la imagen
        $drawing->setWorksheet($sheet);





        // Sumar el valor de ContadorOperacion al total del Año actual
        $sumContadorAnio += $rowData['Contadoroperacion'];

        // Sumar el valor de ContadorOperacion al total del Mes actual
        $sumContadorMes += $rowData['Contadoroperacion'];

        // Sumar el valor de ContadorOperacion al total del Año actual
        $sumContadorTipoGranja += $rowData['Contadoroperacion'];

        // Sumar el valor de ContadorOperacion al total del Mes actual
        $sumContadorZNombre += $rowData['Contadoroperacion'];

        // Sumar el valor de AreaTrabajo al total del Año actual
        $sumAreaAnio += $rowData['AreaTrabajo'];

        // Sumar el valor de AreaTrabajo al total del Mes actual
        $sumAreaMes += $rowData['AreaTrabajo'];

        // Sumar el valor de AreaTrabajo al total del Año actual
        $sumAreaTipoGranja += $rowData['AreaTrabajo'];

        // Sumar el valor de AreaTrabajo al total del Mes actual
        $sumAreaZNombre += $rowData['AreaTrabajo'];

        // Sumar el valor de Granjas Terminadas al total del Año actual
        $sumAreaGranjasTerAnio += $rowData['GranjasTerminados'];

        // Sumar el valor de Granjas Terminadas al total del Mes actual
        $sumAreaGranjasTerMes += $rowData['GranjasTerminados'];

        // Sumar el valor de Granjas Terminadas al total del Año actual
        $sumAreaGranjasTerTipoGranja += $rowData['GranjasTerminados'];

        // Sumar el valor de Granjas Terminadas al total del Mes actual
        $sumAreaGranjasTerZNombre += $rowData['GranjasTerminados'];

        // Sumar el valor de MT Terminadas al total del Año actual
        $sumAreaMTTerAnio += $rowData['Mt2Terminados'];

        // Sumar el valor de MT Terminadas al total del Mes actual
        $sumAreaMTTerMes += $rowData['Mt2Terminados'];

        // Sumar el valor de MT Terminadas al total del Año actual
        $sumAreaMTTerTipoGranja += $rowData['Mt2Terminados'];

        // Sumar el valor de MT Terminadas al total del Mes actual
        $sumAreaMTTerZNombre += $rowData['Mt2Terminados'];

        // Sumar el valor de GranjasPro al total del Año actual
        $sumAreaGranjasProAnio += $rowData['GranjasProceso'];

        // Sumar el valor de GranjasPro al total del Mes actual
        $sumAreaGranjasProMes += $rowData['GranjasProceso'];

        // Sumar el valor de GranjasPro al total del Año actual
        $sumAreaGranjasProTipoGranja += $rowData['GranjasProceso'];

        // Sumar el valor de GranjasPro al total del Mes actual
        $sumAreaGranjasProZNombre += $rowData['GranjasProceso'];

        // Sumar el valor de MTPro al total del Año actual
        $sumAreaMTProAnio += $rowData['Mt2Proceso'];

        // Sumar el valor de MTPro al total del Mes actual
        $sumAreaMTProMes += $rowData['Mt2Proceso'];

        // Sumar el valor de MTPro al total del Año actual
        $sumAreaMTProTipoGranja += $rowData['Mt2Proceso'];

        // Sumar el valor de MTPro al total del Mes actual
        $sumAreaMTProZNombre += $rowData['Mt2Proceso'];


        // Incrementar el contador de fila 
        $row++;

    }   


        if ($row - $mergeStartRowZNombre > 0) {
            $sheet->insertNewRowBefore($row);
            // Combinar toda la fila
            $sheet->setCellValue('K' . $row, $sumContadorZNombre);
            $sheet->setCellValue('L' . $row, $sumAreaZNombre);
            $sheet->setCellValue('M' . $row, $sumAreaGranjasTerZNombre);
            $sheet->setCellValue('N' . $row, $sumAreaMTTerZNombre);
            $sheet->setCellValue('O' . $row, $sumAreaGranjasProZNombre);
            $sheet->setCellValue('P' . $row, $sumAreaMTProZNombre);
            // Define the color for the row
            $rowColor = 'afeeee'; // Change the color as desired (in this example, red)
          
            // Set the fill color for the entire row
            $sheet->getStyle('E' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('E' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('E' . $row . ':BI' . $row)->getFont()->setBold(true);
            $sheet->setCellValue('E' . $row, 'TOTAL ZONA');
            $lastRow = $row++;
            $sheet->mergeCells('E' . $lastRow . ':I' . $lastRow);
            $mergeEndRowZNombre = $row - 1;
            $sheet->mergeCells('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre);
            $sheet->getStyle('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('D' . $mergeStartRowZNombre . ':D' . $mergeEndRowZNombre)->getFont()->setBold(true);
        }
        if ($row - $mergeStartRowTipoGranja > 0) {
            $sheet->insertNewRowBefore($row);

            // Combinar toda la fila
            $sheet->setCellValue('K' . $row, $sumContadorTipoGranja);
            $sheet->setCellValue('L' . $row, $sumAreaTipoGranja);
            $sheet->setCellValue('M' . $row, $sumAreaGranjasTerTipoGranja);
            $sheet->setCellValue('N' . $row, $sumAreaMTTerTipoGranja);
            $sheet->setCellValue('O' . $row, $sumAreaGranjasProTipoGranja);
            $sheet->setCellValue('P' . $row, $sumAreaMTProTipoGranja);
            // Define the color for the row
            $rowColor = 'add8e6'; // Change the color as desired (in this example, red)
          
            // Set the fill color for the entire row
            $sheet->getStyle('D' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('D' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('D' . $row . ':BI' . $row)->getFont()->setBold(true);
            $sheet->setCellValue('D' . $row, 'TOTAL GRANJA');
            $lastRow = $row++;
            $sheet->mergeCells('D' . $lastRow . ':I' . $lastRow);
            $mergeEndRowTipoGranja = $row - 1;
            $sheet->mergeCells('C' . $mergeStartRowTipoGranja . ':C' . $mergeEndRowTipoGranja);
            $sheet->getStyle('C' . $mergeStartRowTipoGranja . ':C' . $mergeEndRowTipoGranja)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('C' . $mergeStartRowTipoGranja . ':C' . $mergeEndRowTipoGranja)->getFont()->setBold(true);
        }
        if ($mergeStartRowMes !== null && $row - $mergeStartRowMes > 0) {
            $sheet->insertNewRowBefore($row);
            // Combinar toda la fila
            $sheet->setCellValue('K' . $row, $sumContadorMes);
            $sheet->setCellValue('L' . $row, $sumAreaMes);
            $sheet->setCellValue('M' . $row, $sumAreaGranjasTerMes);
            $sheet->setCellValue('N' . $row, $sumAreaMTTerMes);
            $sheet->setCellValue('O' . $row, $sumAreaGranjasProMes);
            $sheet->setCellValue('P' . $row, $sumAreaMTProMes);
            $rowColor = '5f9ea0'; // Change the color as desired (in this example, red)
          
            // Set the fill color for the entire row
            $sheet->getStyle('C' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('C' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('C' . $row . ':BI' . $row)->getFont()->setBold(true);
            $sheet->setCellValue('C' . $row, 'TOTAL MES');
            $lastRow = $row++;
            $sheet->mergeCells('C' . $lastRow . ':I' . $lastRow);
            $mergeEndRowMes = $row - 1;
            $sheet->mergeCells('B' . $mergeStartRowMes . ':B' . $mergeEndRowMes);
            $sheet->getStyle('B' . $mergeStartRowMes . ':B' . $mergeEndRowMes)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('B' . $mergeStartRowMes . ':B' . $mergeEndRowMes)->getFont()->setBold(true);
        }
        // Combinar las celdas para el último año y mes si hay datos
        if ($mergeStartRowAnio !== null && $row - $mergeStartRowAnio > 0) {
            $sheet->insertNewRowBefore($row);

            // Combinar toda la fila
            $sheet->setCellValue('K' . $row, $sumContadorAnio);
            $sheet->setCellValue('L' . $row, $sumAreaAnio);
            $sheet->setCellValue('M' . $row, $sumAreaGranjasTerAnio);
            $sheet->setCellValue('N' . $row, $sumAreaMTTerAnio);
            $sheet->setCellValue('O' . $row, $sumAreaGranjasProAnio);
            $sheet->setCellValue('P' . $row, $sumAreaMTProAnio);

            // Define the color for the row
            $rowColor = '008080'; // Change the color as desired (in this example, red)
          
            // Set the fill color for the entire row
            $sheet->getStyle('B' . $row . ':BI' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('B' . $row . ':BI' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('B' . $row . ':BI' . $row)->getFont()->setBold(true)->getColor()->setRGB('FFFFFF'); // Establece el color en blanco (código RGB hexadecimal para blanco: FFFFFF)
            $sheet->setCellValue('B' . $row, 'TOTAL AÑO');
            $lastRow = $row++;
            $sheet->mergeCells('B' . $lastRow . ':I' . $lastRow); 
            // Agregar la suma de Galpon al final del grupo de Año
            $mergeEndRowAnio = $row - 1;
            $sheet->mergeCells('A' . $mergeStartRowAnio . ':A' . $mergeEndRowAnio);
            $sheet->getStyle('A' . $mergeStartRowAnio . ':A' . $mergeEndRowAnio)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('A' . $mergeStartRowAnio . ':A' . $mergeEndRowAnio)->getFont()->setBold(true)->getColor()->setRGB('FFFFFF'); // Establece el color en blanco (código RGB hexadecimal para blanco: FFFFFF)
        }


        

        // Centrar el texto en las celdas combinadas (horizontal y vertical)
        $style = $sheet->getStyle('A3:BI' . ($row - 1));
        $style->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
        $style->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);

        // Ajustar el ancho de las columnas automáticamente
        $startColumn = 'A';
        $endColumn = 'BI';

        $startIndex = Coordinate::columnIndexFromString($startColumn);
        $endIndex = Coordinate::columnIndexFromString($endColumn);

        for ($columnIndex = $startIndex; $columnIndex <= $endIndex; $columnIndex++) {
            $column = Coordinate::stringFromColumnIndex($columnIndex);
            $sheet->getColumnDimension($column)->setAutoSize(true);
        }


          $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($documento, 'Xlsx');

          $file_name = 'RptOperacion';

          $writer->save($file_name);

          header('Content-Type: application/x-www-form-urlencoded');

          header('Content-Transfer-Encoding: Binary');

          header("Content-disposition: attachment; filename=\"".$file_name.".xlsx\"");

          readfile($file_name);

          unlink($file_name);
          exit;
          if($writer= true){
            $session->msg("s", "Se Creo el reporte");
           redirect('../operaciones.php',false);
          }

        }else{
            $session->msg("d", "No hay datos en lo Seleccionado");
           redirect('../operaciones.php',false);
        }
      

    } else {

      $session->msg("d", "No se seleccionaron opciones");
       echo display_msg($msg);
       redirect('../operaciones.php',false);
    }



?>




