<?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;


$OpcionesAnio = $_POST['opciones'];
$OpcionesMes = $_POST['opciones1'];
$OpcionesTGranja = $_POST['opciones2'];
$OpcionesZona = $_POST['opciones3'];

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

    // Escapar y entrecomillar cada valor seleccionado
    $OpcionesTGranja = array_map(function($OpcionesTGranja) {
    return "'" . ($OpcionesTGranja) . "'";
    }, $OpcionesTGranja);

    $OpcionesZona = array_map(function($OpcionesZona) {
    return "'" . ($OpcionesZona) . "'";
    }, $OpcionesZona);

    // Crear la parte de la consulta SQL con el IN
    $OpcionesTGranja = implode(',', array_map('strval', $OpcionesTGranja));
    $OpcionesZona = implode(',', array_map('strval', $OpcionesZona));

    // Realizar la consulta SELECT con el IN
    $consulta = $db->query("SELECT operacion.Anio, operacion.Campana, granja.GNombre, granja.AreaTrabajo, case (operacion.Mes) 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.TipoGranja, operacion.Reuso, zona.ZNombre, operacion.TCompost, operacion.TPreparacionLimpieza, operacion.TLimpiezaInicial, operacion.TDescanso, operacion.TVacioSanitario, operacion.TLimpieza, operacion.TDescansoProduccion,date_format(operacion.FechaEntregaGranja, '%d-%m-%Y') as FechaEntregaGranja, operacion.Anio, operacion.Mes, operacion.id, operacion.TInicioCompost, operacion.Galpon, operacion.MTTrabajadosReal
                FROM operacion INNER JOIN granja ON operacion.IdGranja = granja.IdGranja INNER JOIN tiposervicio ON operacion.IdTipoServicio = tiposervicio.IdTipoServicio INNER JOIN zona ON granja.IdZona = zona.IdZona INNER JOIN areagerenciaoperaciones ON operacion.IdAreaGerenciaOperaciones = areagerenciaoperaciones.IdAreaGerenciaOperaciones WHERE (areagerenciaoperaciones.CodigoGO = 'Lge') AND  operacion.Estado = 'Terminado' AND operacion.IdTipoServicio = 1 AND operacion.Anio IN ($OpcionesAnio) AND operacion.Mes IN ($OpcionesMes) AND operacion.TipoGranja IN ($OpcionesTGranja) AND zona.ZNombre IN ($OpcionesZona) ORDER BY Anio DESC, mes DESC, TipoGranja, ZNombre, id;");
 

    $documento = new Spreadsheet();

    $sheet = $documento->getActiveSheet();
    # Se usa para ponerle un titulo a la hoja de excel 
    $sheet->setTitle("TABLERO");
   //TItulo
   $sheet->mergeCells('A1:S1');
   $sheet->setCellValue('A1', 'INDICADORES DE LIMPIEZA DE GRANJA P.S.P.');
   $sheet->getStyle('A1:S1')->getFont()->setSize(20)->setBold(true); // Establece el color en blanco (código RGB hexadecimal para
   // Quitar los bordes exteriores de la tabla
   $sheet->getStyle('A1:S2')->getBorders()->getOutline()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_NONE);
    // Encabezados de columna
    $sheet->setCellValue('A3', 'AÑO');
    $sheet->setCellValue('B3', 'MES');
    $sheet->setCellValue('C3', 'DESTINO');
    $sheet->setCellValue('D3', 'ZONA');
    $sheet->setCellValue('E3', 'OPERACIÓN');
    $sheet->setCellValue('F3', 'CAMPAÑA');
    $sheet->setCellValue('G3', 'REÚSO');
    $sheet->setCellValue('H3', 'GRANJA');
    $sheet->setCellValue('I3', 'ENTREGA');
    $sheet->setCellValue('J3', 'GALPON');
    $sheet->setCellValue('K3', 'AREA');
    $sheet->setCellValue('L3', 'PREPARACIÓN');
    $sheet->setCellValue('M3', 'I. COMPOST');
    $sheet->setCellValue('N3', 'T. COMPOST');
    $sheet->setCellValue('O3', 'LIMPIEZA');
    $sheet->setCellValue('P3', 'DESCANSO');
    $sheet->setCellValue('Q3', 'VACÍO');
    $sheet->setCellValue('R3', 'TÉRMINO');
    $sheet->setCellValue('S3', 'PRODUCCIÓN');

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

    $row = 4; // 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
    $sumGalponAnio = 0;
    $sumGalponMes = 0;
    $sumGalponTipoGranja = 0;
    $sumGalponZNombre = 0;
    
    //Variable para la Suma de Area
    $sumAreaAnio = 0;
    $sumAreaMes = 0;
    $sumAreaTipoGranja = 0;
    $sumAreaZNombre = 0;

    //Variable para sumar y multiplicar para hallar la preparacion
    $totalPrepAreaAnio = 0;
    $totalAreaAnio = 0;
    $totalPrepAreaMes = 0;
    $totalAreaMes = 0;
    $totalPrepAreaTipoGranja = 0;
    $totalAreaTipoGranja = 0;
    $totalPrepAreaZNombre = 0;
    $totalAreaZNombre = 0;


    //Variable para sumar y multiplicar para hallar la I. COMPOST
    $totalCompAreaAnio = 0;
    $totalAreaCompAnio = 0;
    $totalCompAreaMes = 0;
    $totalAreaCompMes = 0;
    $totalCompAreaTipoGranja = 0;
    $totalAreaCompTipoGranja = 0;
    $totalCompAreaZNombre = 0;
    $totalAreaCompZNombre = 0;

    //Variable para sumar y multiplicar para hallar la T. COMPOST
    $totalTCompAreaAnio = 0;
    $totalAreaTCompAnio = 0;
    $totalTCompAreaMes = 0;
    $totalAreaTCompMes = 0;
    $totalTCompAreaTipoGranja = 0;
    $totalAreaTCompTipoGranja = 0;
    $totalTCompAreaZNombre = 0;
    $totalAreaTCompZNombre = 0;

    //Variable para sumar y multiplicar para hallar la LIMPIEZA
    $totalLimpiezaAreaAnio = 0;
    $totalAreaLimpiezaAnio = 0;
    $totalLimpiezaAreaMes = 0;
    $totalAreaLimpiezaMes = 0;
    $totalLimpiezaAreaTipoGranja = 0;
    $totalAreaLimpiezaTipoGranja = 0;
    $totalLimpiezaAreaZNombre = 0;
    $totalAreaLimpiezaZNombre = 0;

    //Variable para sumar y multiplicar para hallar la Descanso
    $totalDescansoAreaAnio = 0;
    $totalAreaDescansoAnio = 0;
    $totalDescansoAreaMes = 0;
    $totalAreaDescansoMes = 0;
    $totalDescansoAreaTipoGranja = 0;
    $totalAreaDescansoTipoGranja = 0;
    $totalDescansoAreaZNombre = 0;
    $totalAreaDescansoZNombre = 0;

    //Variable para sumar y multiplicar para hallar la Vacio
    $totalVacioAreaAnio = 0;
    $totalAreaVacioAnio = 0;
    $totalVacioAreaMes = 0;
    $totalAreaVacioMes = 0;
    $totalVacioAreaTipoGranja = 0;
    $totalAreaVacioTipoGranja = 0;
    $totalVacioAreaZNombre = 0;
    $totalAreaVacioZNombre = 0;

    //Variable para sumar y multiplicar para hallar la Termino
    $totalTerminoAreaAnio = 0;
    $totalAreaTerminoAnio = 0;
    $totalTerminoAreaMes = 0;
    $totalAreaTerminoMes = 0;
    $totalTerminoAreaTipoGranja = 0;
    $totalAreaTerminoTipoGranja = 0;
    $totalTerminoAreaZNombre = 0;
    $totalAreaTerminoZNombre = 0;

    //Variable para sumar y multiplicar para hallar la Produccion
    $totalProduccionAreaAnio = 0;
    $totalAreaProduccionAnio = 0;
    $totalProduccionAreaMes = 0;
    $totalAreaProduccionMes = 0;
    $totalProduccionAreaTipoGranja = 0;
    $totalAreaProduccionTipoGranja = 0;
    $totalProduccionAreaZNombre = 0;
    $totalAreaProduccionZNombre = 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['Anio'] !== $anteriorAnio) {
        // Insertar una fila vacía antes de cada nuevo grupo de datos de Anio
        if ($filaVaciaZNombre) {
            $sheet->insertNewRowBefore($row);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por ZNombre
            $resultZNombre = $totalPrepAreaZNombre / $totalAreaZNombre;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Año
            $resultZNombreCompost = $totalCompAreaZNombre / $totalAreaCompZNombre;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por ZNombre
            $resultZNombreTCompost = $totalTCompAreaZNombre / $totalAreaTCompZNombre;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por ZNombre
            $resultZNombreLimpieza = $totalLimpiezaAreaZNombre / $totalAreaLimpiezaZNombre;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por ZNombre
            $resultZNombreDescanso = $totalDescansoAreaZNombre / $totalAreaDescansoZNombre;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por ZNombre
            $resultZNombreVacio = $totalVacioAreaZNombre / $totalAreaVacioZNombre;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por ZNombre
            $resultZNombreTermino = $totalTerminoAreaZNombre / $totalAreaTerminoZNombre;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por ZNombre
            $resultZNombreProduccion = $totalProduccionAreaZNombre / $totalAreaProduccionZNombre;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponZNombre);
            $sheet->setCellValue('K' . $row, $sumAreaZNombre);
            $sheet->setCellValue('L' . $row, $resultZNombre);
            $sheet->setCellValue('M' . $row, $resultZNombreCompost);
            $sheet->setCellValue('N' . $row, $resultZNombreTCompost);
            $sheet->setCellValue('O' . $row, $resultZNombreLimpieza);
            $sheet->setCellValue('P' . $row, $resultZNombreDescanso);
            $sheet->setCellValue('Q' . $row, $resultZNombreVacio);
            $sheet->setCellValue('R' . $row, $resultZNombreTermino);
            $sheet->setCellValue('S' . $row, $resultZNombreProduccion);

            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('E' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('E' . $row . ':S' . $row)->getFont()->setBold(true);
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranja = $totalPrepAreaTipoGranja / $totalAreaTipoGranja;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Año
            $resultTipoGranjaCompost = $totalCompAreaTipoGranja / $totalAreaCompTipoGranja;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaTCompost = $totalTCompAreaTipoGranja / $totalAreaTCompTipoGranja;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaLimpieza = $totalLimpiezaAreaTipoGranja / $totalAreaLimpiezaTipoGranja;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaDescanso = $totalDescansoAreaTipoGranja / $totalAreaDescansoTipoGranja;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaVacio = $totalVacioAreaTipoGranja / $totalAreaVacioTipoGranja;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaTermino = $totalTerminoAreaTipoGranja / $totalAreaTerminoTipoGranja;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaProduccion = $totalProduccionAreaTipoGranja / $totalAreaProduccionTipoGranja;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponTipoGranja);
            $sheet->setCellValue('K' . $row, $sumAreaTipoGranja);
            $sheet->setCellValue('L' . $row, $resultTipoGranja);
            $sheet->setCellValue('M' . $row, $resultTipoGranjaCompost);
            $sheet->setCellValue('N' . $row, $resultTipoGranjaTCompost);
            $sheet->setCellValue('O' . $row, $resultTipoGranjaLimpieza);
            $sheet->setCellValue('P' . $row, $resultTipoGranjaDescanso);
            $sheet->setCellValue('Q' . $row, $resultTipoGranjaVacio);
            $sheet->setCellValue('R' . $row, $resultTipoGranjaTermino);
            $sheet->setCellValue('S' . $row, $resultTipoGranjaProduccion);
           
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('D' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('D' . $row . ':S' . $row)->getFont()->setBold(true);
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por Mes
            $resultMes = $totalPrepAreaMes / $totalAreaMes;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Año
            $resultMesCompost = $totalCompAreaMes / $totalAreaCompMes;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por Año
            $resultMesTCompost = $totalTCompAreaMes / $totalAreaTCompMes;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por Mes
            $resultMesLimpieza = $totalLimpiezaAreaMes / $totalAreaLimpiezaMes;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por Mes
            $resultMesDescanso = $totalDescansoAreaMes / $totalAreaDescansoMes;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por Mes
            $resultMesVacio = $totalVacioAreaMes / $totalAreaVacioMes;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por Mes
            $resultMesTermino = $totalTerminoAreaMes / $totalAreaTerminoMes;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por Mes
            $resultMesProduccion = $totalProduccionAreaMes / $totalAreaProduccionMes;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponMes);
            $sheet->setCellValue('K' . $row, $sumAreaMes);
            $sheet->setCellValue('L' . $row, $resultMes);
            $sheet->setCellValue('M' . $row, $resultMesCompost);
            $sheet->setCellValue('N' . $row, $resultMesTCompost);
            $sheet->setCellValue('O' . $row, $resultMesLimpieza);
            $sheet->setCellValue('P' . $row, $resultMesDescanso);
            $sheet->setCellValue('Q' . $row, $resultMesVacio);
            $sheet->setCellValue('R' . $row, $resultMesTermino);
            $sheet->setCellValue('S' . $row, $resultMesProduccion);
            
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('C' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('C' . $row . ':S' . $row)->getFont()->setBold(true);
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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);

            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por Año
            $resultAnio = $totalPrepAreaAnio / $totalAreaAnio;
            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Año
            $resultAnioCompost = $totalCompAreaAnio / $totalAreaCompAnio;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por Año
            $resultAnioTCompost = $totalTCompAreaAnio / $totalAreaTCompAnio;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por Año
            $resultAnioLimpieza = $totalLimpiezaAreaAnio / $totalAreaLimpiezaAnio;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por Año
            $resultAnioDescanso = $totalDescansoAreaAnio / $totalAreaDescansoAnio;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por Año
            $resultAnioVacio = $totalVacioAreaAnio / $totalAreaVacioAnio;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por Año
            $resultAnioTermino = $totalTerminoAreaAnio / $totalAreaTerminoAnio;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por Año
            $resultAnioProduccion = $totalProduccionAreaAnio / $totalAreaProduccionAnio;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponAnio);
            $sheet->setCellValue('K' . $row, $sumAreaAnio);
            $sheet->setCellValue('L' . $row, $resultAnio);
            $sheet->setCellValue('M' . $row, $resultAnioCompost);
            $sheet->setCellValue('N' . $row, $resultAnioTCompost);
            $sheet->setCellValue('O' . $row, $resultAnioLimpieza);
            $sheet->setCellValue('P' . $row, $resultAnioDescanso);
            $sheet->setCellValue('Q' . $row, $resultAnioVacio);
            $sheet->setCellValue('R' . $row, $resultAnioTermino);
            $sheet->setCellValue('S' . $row, $resultAnioProduccion);
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('B' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('B' . $row . ':S' . $row)->getFont()->setBold(true)->getColor()->setRGB('FFFFFF'); // Establece el color en blanco (código RGB hexadecimal para blanco: FFFFFF)
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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['Anio'];
        // Agregar el valor del año actual en la celda correspondiente
        $sheet->setCellValue('A' . $row, $rowData['Anio']);
        // 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
        $sumGalponAnio = 0;
        $sumGalponMes = 0;
        $sumGalponTipoGranja = 0;
        $sumGalponZNombre = 0;

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

        $totalPrepAreaAnio = 0;
        $totalAreaAnio = 0;

        $totalPrepAreaMes = 0;
        $totalAreaMes = 0;

        $totalPrepAreaTipoGranja = 0;
        $totalAreaTipoGranja = 0;

        $totalPrepAreaZNombre = 0;
        $totalAreaZNombre = 0;

        //Variable para sumar y multiplicar para hallar la I. COMPOST
        $totalCompAreaAnio = 0;
        $totalAreaCompAnio = 0;
        $totalCompAreaMes = 0;
        $totalAreaCompMes = 0;
        $totalCompAreaTipoGranja = 0;
        $totalAreaCompTipoGranja = 0;
        $totalCompAreaZNombre = 0;
        $totalAreaCompZNombre = 0;

        //Variable para sumar y multiplicar para hallar la T. COMPOST
        $totalTCompAreaAnio = 0;
        $totalAreaTCompAnio = 0;
        $totalTCompAreaMes = 0;
        $totalAreaTCompMes = 0;
        $totalTCompAreaTipoGranja = 0;
        $totalAreaTCompTipoGranja = 0;
        $totalTCompAreaZNombre = 0;
        $totalAreaTCompZNombre = 0;

        //Variable para sumar y multiplicar para hallar la LIMPIEZA
        $totalLimpiezaAreaAnio = 0;
        $totalAreaLimpiezaAnio = 0;
        $totalLimpiezaAreaMes = 0;
        $totalAreaLimpiezaMes = 0;
        $totalLimpiezaAreaTipoGranja = 0;
        $totalAreaLimpiezaTipoGranja = 0;
        $totalLimpiezaAreaZNombre = 0;
        $totalAreaLimpiezaZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Descanso
        $totalDescansoAreaAnio = 0;
        $totalAreaDescansoAnio = 0;
        $totalDescansoAreaMes = 0;
        $totalAreaDescansoMes = 0;
        $totalDescansoAreaTipoGranja = 0;
        $totalAreaDescansoTipoGranja = 0;
        $totalDescansoAreaZNombre = 0;
        $totalAreaDescansoZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Vacio
        $totalVacioAreaAnio = 0;
        $totalAreaVacioAnio = 0;
        $totalVacioAreaMes = 0;
        $totalAreaVacioMes = 0;
        $totalVacioAreaTipoGranja = 0;
        $totalAreaVacioTipoGranja = 0;
        $totalVacioAreaZNombre = 0;
        $totalAreaVacioZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Termino
        $totalTerminoAreaAnio = 0;
        $totalAreaTerminoAnio = 0;
        $totalTerminoAreaMes = 0;
        $totalAreaTerminoMes = 0;
        $totalTerminoAreaTipoGranja = 0;
        $totalAreaTerminoTipoGranja = 0;
        $totalTerminoAreaZNombre = 0;
        $totalAreaTerminoZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Produccion
        $totalProduccionAreaAnio = 0;
        $totalAreaProduccionAnio = 0;
        $totalProduccionAreaMes = 0;
        $totalAreaProduccionMes = 0;
        $totalProduccionAreaTipoGranja = 0;
        $totalAreaProduccionTipoGranja = 0;
        $totalProduccionAreaZNombre = 0;
        $totalAreaProduccionZNombre = 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);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por ZNombre
            $resultZNombre = $totalPrepAreaZNombre / $totalAreaZNombre;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Año
            $resultZNombreCompost = $totalCompAreaZNombre / $totalAreaCompZNombre;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por ZNombre
            $resultZNombreTCompost = $totalTCompAreaZNombre / $totalAreaTCompZNombre;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por ZNombre
            $resultZNombreLimpieza = $totalLimpiezaAreaZNombre / $totalAreaLimpiezaZNombre;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por ZNombre
            $resultZNombreDescanso = $totalDescansoAreaZNombre / $totalAreaDescansoZNombre;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por ZNombre
            $resultZNombreVacio = $totalVacioAreaZNombre / $totalAreaVacioZNombre;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por ZNombre
            $resultZNombreTermino = $totalTerminoAreaZNombre / $totalAreaTerminoZNombre;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por ZNombre
            $resultZNombreProduccion = $totalProduccionAreaZNombre / $totalAreaProduccionZNombre;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponZNombre);
            $sheet->setCellValue('K' . $row, $sumAreaZNombre);
            $sheet->setCellValue('L' . $row, $resultZNombre);
            $sheet->setCellValue('M' . $row, $resultZNombreCompost);
            $sheet->setCellValue('N' . $row, $resultZNombreTCompost);
            $sheet->setCellValue('O' . $row, $resultZNombreLimpieza);
            $sheet->setCellValue('P' . $row, $resultZNombreDescanso);
            $sheet->setCellValue('Q' . $row, $resultZNombreVacio);
            $sheet->setCellValue('R' . $row, $resultZNombreTermino);
            $sheet->setCellValue('S' . $row, $resultZNombreProduccion);
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('E' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('E' . $row . ':S' . $row)->getFont()->setBold(true);
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranja = $totalPrepAreaTipoGranja / $totalAreaTipoGranja;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Año
            $resultTipoGranjaCompost = $totalCompAreaTipoGranja / $totalAreaCompTipoGranja;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaTCompost = $totalTCompAreaTipoGranja / $totalAreaTCompTipoGranja;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaLimpieza = $totalLimpiezaAreaTipoGranja / $totalAreaLimpiezaTipoGranja;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaDescanso = $totalDescansoAreaTipoGranja / $totalAreaDescansoTipoGranja;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaVacio = $totalVacioAreaTipoGranja / $totalAreaVacioTipoGranja;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaTermino = $totalTerminoAreaTipoGranja / $totalAreaTerminoTipoGranja;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaProduccion = $totalProduccionAreaTipoGranja / $totalAreaProduccionTipoGranja;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponTipoGranja);
            $sheet->setCellValue('K' . $row, $sumAreaTipoGranja);
            $sheet->setCellValue('L' . $row, $resultTipoGranja);
            $sheet->setCellValue('M' . $row, $resultTipoGranjaCompost);
            $sheet->setCellValue('N' . $row, $resultTipoGranjaTCompost);
            $sheet->setCellValue('O' . $row, $resultTipoGranjaLimpieza);
            $sheet->setCellValue('P' . $row, $resultTipoGranjaDescanso);
            $sheet->setCellValue('Q' . $row, $resultTipoGranjaVacio);
            $sheet->setCellValue('R' . $row, $resultTipoGranjaTermino);
            $sheet->setCellValue('S' . $row, $resultTipoGranjaProduccion);
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('D' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('D' . $row . ':S' . $row)->getFont()->setBold(true);
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por Mes
            $resultMes = $totalPrepAreaMes / $totalAreaMes;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Año
            $resultMesCompost = $totalCompAreaMes / $totalAreaCompMes;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por Año
            $resultMesTCompost = $totalTCompAreaMes / $totalAreaTCompMes;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por Mes
            $resultMesLimpieza = $totalLimpiezaAreaMes / $totalAreaLimpiezaMes;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por Mes
            $resultMesDescanso = $totalDescansoAreaMes / $totalAreaDescansoMes;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por Mes
            $resultMesVacio = $totalVacioAreaMes / $totalAreaVacioMes;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por Mes
            $resultMesTermino = $totalTerminoAreaMes / $totalAreaTerminoMes;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por Mes
            $resultMesProduccion = $totalProduccionAreaMes / $totalAreaProduccionMes;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponMes);
            $sheet->setCellValue('K' . $row, $sumAreaMes);
            $sheet->setCellValue('L' . $row, $resultMes);
            $sheet->setCellValue('M' . $row, $resultMesCompost);
            $sheet->setCellValue('N' . $row, $resultMesTCompost);
            $sheet->setCellValue('O' . $row, $resultMesLimpieza);
            $sheet->setCellValue('P' . $row, $resultMesDescanso);
            $sheet->setCellValue('Q' . $row, $resultMesVacio);
            $sheet->setCellValue('R' . $row, $resultMesTermino);
            $sheet->setCellValue('S' . $row, $resultMesProduccion);
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('C' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('C' . $row . ':S' . $row)->getFont()->setBold(true);
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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;
        $sumGalponMes = 0;
        $sumGalponTipoGranja = 0;
        $sumGalponZNombre = 0;
        $sumAreaMes = 0;
        $sumAreaTipoGranja = 0;
        $sumAreaZNombre = 0;

        $totalPrepAreaMes = 0;
        $totalAreaMes = 0;
        $totalPrepAreaTipoGranja = 0;
        $totalAreaTipoGranja = 0;
        $totalPrepAreaZNombre = 0;
        $totalAreaZNombre = 0;

        //Variable para sumar y multiplicar para hallar la I. COMPOST

        $totalCompAreaMes = 0;
        $totalAreaCompMes = 0;
        $totalCompAreaTipoGranja = 0;
        $totalAreaCompTipoGranja = 0;
        $totalCompAreaZNombre = 0;
        $totalAreaCompZNombre = 0;

        //Variable para sumar y multiplicar para hallar la T. COMPOST
        $totalTCompAreaMes = 0;
        $totalAreaTCompMes = 0;
        $totalTCompAreaTipoGranja = 0;
        $totalAreaTCompTipoGranja = 0;
        $totalTCompAreaZNombre = 0;
        $totalAreaTCompZNombre = 0;

        //Variable para sumar y multiplicar para hallar la LIMPIEZA
        $totalLimpiezaAreaMes = 0;
        $totalAreaLimpiezaMes = 0;
        $totalLimpiezaAreaTipoGranja = 0;
        $totalAreaLimpiezaTipoGranja = 0;
        $totalLimpiezaAreaZNombre = 0;
        $totalAreaLimpiezaZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Descanso
        $totalDescansoAreaMes = 0;
        $totalAreaDescansoMes = 0;
        $totalDescansoAreaTipoGranja = 0;
        $totalAreaDescansoTipoGranja = 0;
        $totalDescansoAreaZNombre = 0;
        $totalAreaDescansoZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Vacio
        $totalVacioAreaMes = 0;
        $totalAreaVacioMes = 0;
        $totalVacioAreaTipoGranja = 0;
        $totalAreaVacioTipoGranja = 0;
        $totalVacioAreaZNombre = 0;
        $totalAreaVacioZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Termino
        $totalTerminoAreaMes = 0;
        $totalAreaTerminoMes = 0;
        $totalTerminoAreaTipoGranja = 0;
        $totalAreaTerminoTipoGranja = 0;
        $totalTerminoAreaZNombre = 0;
        $totalAreaTerminoZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Produccion
        $totalProduccionAreaMes = 0;
        $totalAreaProduccionMes = 0;
        $totalProduccionAreaTipoGranja = 0;
        $totalAreaProduccionTipoGranja = 0;
        $totalProduccionAreaZNombre = 0;
        $totalAreaProduccionZNombre = 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);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por ZNombre
            $resultZNombre = $totalPrepAreaZNombre / $totalAreaZNombre;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Año
            $resultZNombreCompost = $totalCompAreaZNombre / $totalAreaCompZNombre;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por ZNombre
            $resultZNombreTCompost = $totalTCompAreaZNombre / $totalAreaTCompZNombre;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por ZNombre
            $resultZNombreLimpieza = $totalLimpiezaAreaZNombre / $totalAreaLimpiezaZNombre;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por ZNombre
            $resultZNombreDescanso = $totalDescansoAreaZNombre / $totalAreaDescansoZNombre;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por ZNombre
            $resultZNombreVacio = $totalVacioAreaZNombre / $totalAreaVacioZNombre;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por ZNombre
            $resultZNombreTermino = $totalTerminoAreaZNombre / $totalAreaTerminoZNombre;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por ZNombre
            $resultZNombreProduccion = $totalProduccionAreaZNombre / $totalAreaProduccionZNombre;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponZNombre);
            $sheet->setCellValue('K' . $row, $sumAreaZNombre);
            $sheet->setCellValue('L' . $row, $resultZNombre);
            $sheet->setCellValue('M' . $row, $resultZNombreCompost);
            $sheet->setCellValue('N' . $row, $resultZNombreTCompost);
            $sheet->setCellValue('O' . $row, $resultZNombreLimpieza);
            $sheet->setCellValue('P' . $row, $resultZNombreDescanso);
            $sheet->setCellValue('Q' . $row, $resultZNombreVacio);
            $sheet->setCellValue('R' . $row, $resultZNombreTermino);
            $sheet->setCellValue('S' . $row, $resultZNombreProduccion);
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('E' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('E' . $row . ':S' . $row)->getFont()->setBold(true);
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranja = $totalPrepAreaTipoGranja / $totalAreaTipoGranja;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Año
            $resultTipoGranjaCompost = $totalCompAreaTipoGranja / $totalAreaCompTipoGranja;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaTCompost = $totalTCompAreaTipoGranja / $totalAreaTCompTipoGranja;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaLimpieza = $totalLimpiezaAreaTipoGranja / $totalAreaLimpiezaTipoGranja;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaDescanso = $totalDescansoAreaTipoGranja / $totalAreaDescansoTipoGranja;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaVacio = $totalVacioAreaTipoGranja / $totalAreaVacioTipoGranja;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaTermino = $totalTerminoAreaTipoGranja / $totalAreaTerminoTipoGranja;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaProduccion = $totalProduccionAreaTipoGranja / $totalAreaProduccionTipoGranja;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponTipoGranja);
            $sheet->setCellValue('K' . $row, $sumAreaTipoGranja);
            $sheet->setCellValue('L' . $row, $resultTipoGranja);
            $sheet->setCellValue('M' . $row, $resultTipoGranjaCompost);
            $sheet->setCellValue('N' . $row, $resultTipoGranjaTCompost);
            $sheet->setCellValue('O' . $row, $resultTipoGranjaLimpieza);
            $sheet->setCellValue('P' . $row, $resultTipoGranjaDescanso);
            $sheet->setCellValue('Q' . $row, $resultTipoGranjaVacio);
            $sheet->setCellValue('R' . $row, $resultTipoGranjaTermino);
            $sheet->setCellValue('S' . $row, $resultTipoGranjaProduccion);
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('D' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('D' . $row . ':S' . $row)->getFont()->setBold(true);
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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;

        $sumGalponTipoGranja = 0;
        $sumGalponZNombre = 0;
        $sumAreaTipoGranja = 0;
        $sumAreaZNombre = 0;


        $totalPrepAreaTipoGranja = 0;
        $totalAreaTipoGranja = 0;

        $totalPrepAreaZNombre = 0;
        $totalAreaZNombre = 0;

        //Variable para sumar y multiplicar para hallar la I. COMPOST
        $totalCompAreaTipoGranja = 0;
        $totalAreaCompTipoGranja = 0;
        $totalCompAreaZNombre = 0;
        $totalAreaCompZNombre = 0;

        //Variable para sumar y multiplicar para hallar la T. COMPOST
        $totalTCompAreaTipoGranja = 0;
        $totalAreaTCompTipoGranja = 0;
        $totalTCompAreaZNombre = 0;
        $totalAreaTCompZNombre = 0;

        //Variable para sumar y multiplicar para hallar la LIMPIEZA
        $totalLimpiezaAreaTipoGranja = 0;
        $totalAreaLimpiezaTipoGranja = 0;
        $totalLimpiezaAreaZNombre = 0;
        $totalAreaLimpiezaZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Descanso
        $totalDescansoAreaTipoGranja = 0;
        $totalAreaDescansoTipoGranja = 0;
        $totalDescansoAreaZNombre = 0;
        $totalAreaDescansoZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Vacio
        $totalVacioAreaTipoGranja = 0;
        $totalAreaVacioTipoGranja = 0;
        $totalVacioAreaZNombre = 0;
        $totalAreaVacioZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Termino
        $totalTerminoAreaTipoGranja = 0;
        $totalAreaTerminoTipoGranja = 0;
        $totalTerminoAreaZNombre = 0;
        $totalAreaTerminoZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Produccion
        $totalProduccionAreaTipoGranja = 0;
        $totalAreaProduccionTipoGranja = 0;
        $totalProduccionAreaZNombre = 0;
        $totalAreaProduccionZNombre = 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);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por ZNombre
            $resultZNombre = $totalPrepAreaZNombre / $totalAreaZNombre;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Año
            $resultZNombreCompost = $totalCompAreaZNombre / $totalAreaCompZNombre;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por ZNombre
            $resultZNombreTCompost = $totalTCompAreaZNombre / $totalAreaTCompZNombre;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por ZNombre
            $resultZNombreLimpieza = $totalLimpiezaAreaZNombre / $totalAreaLimpiezaZNombre;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por ZNombre
            $resultZNombreDescanso = $totalDescansoAreaZNombre / $totalAreaDescansoZNombre;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por ZNombre
            $resultZNombreVacio = $totalVacioAreaZNombre / $totalAreaVacioZNombre;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por ZNombre
            $resultZNombreTermino = $totalTerminoAreaZNombre / $totalAreaTerminoZNombre;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por ZNombre
            $resultZNombreProduccion = $totalProduccionAreaZNombre / $totalAreaProduccionZNombre;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponZNombre);
            $sheet->setCellValue('K' . $row, $sumAreaZNombre);
            $sheet->setCellValue('L' . $row, $resultZNombre);
            $sheet->setCellValue('M' . $row, $resultZNombreCompost);
            $sheet->setCellValue('N' . $row, $resultZNombreTCompost);
            $sheet->setCellValue('O' . $row, $resultZNombreLimpieza);
            $sheet->setCellValue('P' . $row, $resultZNombreDescanso);
            $sheet->setCellValue('Q' . $row, $resultZNombreVacio);
            $sheet->setCellValue('R' . $row, $resultZNombreTermino);
            $sheet->setCellValue('S' . $row, $resultZNombreProduccion);
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('E' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('E' . $row . ':S' . $row)->getFont()->setBold(true);
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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']);
        $sumGalponZNombre = 0;
        $sumAreaZNombre = 0;

        $totalPrepAreaZNombre = 0;
        $totalAreaZNombre = 0;

        //Variable para sumar y multiplicar para hallar la I. COMPOST

        $totalCompAreaZNombre = 0;
        $totalAreaCompZNombre = 0;

        //Variable para sumar y multiplicar para hallar la T. COMPOST
        $totalTCompAreaZNombre = 0;
        $totalAreaTCompZNombre = 0;

        //Variable para sumar y multiplicar para hallar la LIMPIEZA
        $totalLimpiezaAreaZNombre = 0;
        $totalAreaLimpiezaZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Descanso
        $totalDescansoAreaZNombre = 0;
        $totalAreaDescansoZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Vacio
        $totalVacioAreaZNombre = 0;
        $totalAreaVacioZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Termino
        $totalTerminoAreaZNombre = 0;
        $totalAreaTerminoZNombre = 0;

        //Variable para sumar y multiplicar para hallar la Produccion
        $totalProduccionAreaZNombre = 0;
        $totalAreaProduccionZNombre = 0;
   }

    
   // Agregar los datos a las celdas correspondientes
    $sheet->setCellValue('A' . $row, $rowData['Anio']);
    $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['FechaEntregaGranja']) );
    $sheet->getStyle('I'.$row)->getNumberFormat()->setFormatCode('dd/mm/yyyy');
    $sheet->setCellValue('J' . $row, $rowData['Galpon']);
    $sheet->setCellValue('K' . $row, $rowData['MTTrabajadosReal']);
    // Define the color for the row
    $rowColor = 'afeeee'; // Change the color as desired
    $cellStyle = $sheet->getStyle('K' . $row);
    $cellStyle->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($rowColor);
    //
    $sheet->setCellValue('L' . $row, $rowData['TPreparacionLimpieza']);
    $sheet->setCellValue('M' . $row, $rowData['TInicioCompost']);
    $sheet->setCellValue('N' . $row, $rowData['TCompost']);
    $sheet->setCellValue('O' . $row, $rowData['TLimpiezaInicial']);
    $sheet->setCellValue('P' . $row, $rowData['TDescanso']);
    $sheet->setCellValue('Q' . $row, $rowData['TVacioSanitario']);
    $sheet->setCellValue('R' . $row, $rowData['TLimpieza']);
    $sheet->setCellValue('S' . $row, $rowData['TDescansoProduccion']);


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

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

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

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

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

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

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

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

    //Hallar las Sumas para la Preparacion 
    //multiplicacion por años
        // Calcular el producto de Preparacion y Area
        $prepArea = $rowData['TPreparacionLimpieza'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de (Preparacion por Area) del Año actual
        $totalPrepAreaAnio += $prepArea;

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

    //multiplicacion por Mes
        // Calcular el producto de Preparacion y Area
        $prepAreaMes = $rowData['TPreparacionLimpieza'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de (Preparacion por Area) del Mes actual
        $totalPrepAreaMes += $prepAreaMes;

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

    //multiplicacion por TipoGranja
        // Calcular el producto de Preparacion y Area
        $prepAreaTipoGranja = $rowData['TPreparacionLimpieza'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de (Preparacion por Area) del TipoGranja actual
        $totalPrepAreaTipoGranja += $prepAreaTipoGranja;

        // Sumar el valor de Area al total de Area del TipoGranja actual
        $totalAreaTipoGranja += $rowData['AreaTrabajo'];

    //multiplicacion por ZNombre
        // Calcular el producto de Preparacion y Area
        $prepAreaZNombre = $rowData['TPreparacionLimpieza'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de (Preparacion por Area) del ZNombre actual
        $totalPrepAreaZNombre += $prepAreaZNombre;

        // Sumar el valor de Area al total de Area del ZNombre actual
        $totalAreaZNombre += $rowData['AreaTrabajo'];

    //Hallar las Sumas para la ICompost 
    //multiplicacion por años
        // Calcular el producto de Compost y Area
        $prepAreaCompost = $rowData['TInicioCompost'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de (Compost por Area) del Año actual
        $totalCompAreaAnio += $prepAreaCompost;

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

    //multiplicacion por Mes
        // Calcular el producto de Compost y Area
        $prepAreaMesCompost = $rowData['TInicioCompost'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de (Compost por Area) del Mes actual
        $totalCompAreaMes += $prepAreaMesCompost;

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

    //multiplicacion por TipoGranja
        // Calcular el producto de Compost y Area
        $prepAreaTipoGranjaCompost = $rowData['TInicioCompost'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de (Compost por Area) del TipoGranja actual
        $totalCompAreaTipoGranja += $prepAreaTipoGranjaCompost;

        // Sumar el valor de Area al total de Area del TipoGranja actual
        $totalAreaCompTipoGranja += $rowData['AreaTrabajo'];

    //multiplicacion por ZNombre
        // Calcular el producto de Compost y Area
        $prepAreaZNombreCompost = $rowData['TInicioCompost'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de (Compost por Area) del ZNombre actual
        $totalCompAreaZNombre += $prepAreaZNombreCompost;

        // Sumar el valor de Area al total de Area del ZNombre actual
        $totalAreaCompZNombre += $rowData['AreaTrabajo'];

    //Hallar las Sumas para la TCompost 
    //multiplicacion por años
        // Calcular el producto de Compost y Area
        $AreaTCompost = $rowData['TCompost'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de (Compost por Area) del Año actual
        $totalTCompAreaAnio += $AreaTCompost;

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

    //multiplicacion por Mes
        // Calcular el producto de Compost y Area
        $AreaMesTCompost = $rowData['TCompost'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de (Compost por Area) del Mes actual
        $totalTCompAreaMes += $AreaMesTCompost;

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

    //multiplicacion por TipoGranja
        // Calcular el producto de Compost y Area
        $AreaTipoGranjaTCompost = $rowData['TCompost'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de (Compost por Area) del TipoGranja actual
        $totalTCompAreaTipoGranja += $AreaTipoGranjaTCompost;

        // Sumar el valor de Area al total de Area del TipoGranja actual
        $totalAreaTCompTipoGranja += $rowData['AreaTrabajo'];

    //multiplicacion por ZNombre
        // Calcular el producto de Compost y Area
        $AreaZNombreTCompost = $rowData['TCompost'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de (Compost por Area) del ZNombre actual
        $totalTCompAreaZNombre += $AreaZNombreTCompost;

        // Sumar el valor de Area al total de Area del ZNombre actual
        $totalAreaTCompZNombre += $rowData['AreaTrabajo'];

    //Hallar las Sumas para la Limpieza 
    //multiplicacion por años
        // Calcular el producto de Limpieza y Area
        $AreaLimpieza = $rowData['TLimpiezaInicial'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Limpieza por Area) del Año actual
        $totalLimpiezaAreaAnio += $AreaLimpieza;

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

    //multiplicacion por Mes
        // Calcular el producto de Limpieza y Area
        $AreaMesLimpieza = $rowData['TLimpiezaInicial'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Limpieza por Area) del Mes actual
        $totalLimpiezaAreaMes += $AreaMesLimpieza;

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

    //multiplicacion por TipoGranja
        // Calcular el producto de Limpieza y Area
        $AreaTipoGranjaLimpieza = $rowData['TLimpiezaInicial'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Limpieza por Area) del TipoGranja actual
        $totalLimpiezaAreaTipoGranja += $AreaTipoGranjaLimpieza;

        // Sumar el valor de Area al total de Area del TipoGranja actual
        $totalAreaLimpiezaTipoGranja += $rowData['AreaTrabajo'];

    //multiplicacion por ZNombre
        // Calcular el producto de Limpieza y Area
        $AreaZNombreLimpieza = $rowData['TLimpiezaInicial'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Limpieza por Area) del ZNombre actual
        $totalLimpiezaAreaZNombre += $AreaZNombreLimpieza;

        // Sumar el valor de Area al total de Area del ZNombre actual
        $totalAreaLimpiezaZNombre += $rowData['AreaTrabajo'];

    //Hallar las Sumas para la Descanso 
    //multiplicacion por años
        // Calcular el producto de Descanso y Area
        $AreaDescanso = $rowData['TDescanso'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Descanso por Area) del Año actual
        $totalDescansoAreaAnio += $AreaDescanso;

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

    //multiplicacion por Mes
        // Calcular el producto de Descanso y Area
        $AreaMesDescanso = $rowData['TDescanso'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Descanso por Area) del Mes actual
        $totalDescansoAreaMes += $AreaMesDescanso;

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

    //multiplicacion por TipoGranja
        // Calcular el producto de Descanso y Area
        $AreaTipoGranjaDescanso = $rowData['TDescanso'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Descanso por Area) del TipoGranja actual
        $totalDescansoAreaTipoGranja += $AreaTipoGranjaDescanso;

        // Sumar el valor de Area al total de Area del TipoGranja actual
        $totalAreaDescansoTipoGranja += $rowData['AreaTrabajo'];

    //multiplicacion por ZNombre
        // Calcular el producto de Descanso y Area
        $AreaZNombreDescanso = $rowData['TDescanso'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Descanso por Area) del ZNombre actual
        $totalDescansoAreaZNombre += $AreaZNombreDescanso;

        // Sumar el valor de Area al total de Area del ZNombre actual
        $totalAreaDescansoZNombre += $rowData['AreaTrabajo'];

    //Hallar las Sumas para la Vacio 
    //multiplicacion por años
        // Calcular el producto de Vacio y Area
        $AreaVacio = $rowData['TVacioSanitario'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Vacio por Area) del Año actual
        $totalVacioAreaAnio += $AreaVacio;

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

    //multiplicacion por Mes
        // Calcular el producto de Vacio y Area
        $AreaMesVacio = $rowData['TVacioSanitario'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Vacio por Area) del Mes actual
        $totalVacioAreaMes += $AreaMesVacio;

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

    //multiplicacion por TipoGranja
        // Calcular el producto de Vacio y Area
        $AreaTipoGranjaVacio = $rowData['TVacioSanitario'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Vacio por Area) del TipoGranja actual
        $totalVacioAreaTipoGranja += $AreaTipoGranjaVacio;

        // Sumar el valor de Area al total de Area del TipoGranja actual
        $totalAreaVacioTipoGranja += $rowData['AreaTrabajo'];

    //multiplicacion por ZNombre
        // Calcular el producto de Vacio y Area
        $AreaZNombreVacio = $rowData['TVacioSanitario'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Vacio por Area) del ZNombre actual
        $totalVacioAreaZNombre += $AreaZNombreVacio;

        // Sumar el valor de Area al total de Area del ZNombre actual
        $totalAreaVacioZNombre += $rowData['AreaTrabajo'];

    //Hallar las Sumas para la Termino 
    //multiplicacion por años
        // Calcular el producto de Termino y Area
        $AreaTermino = $rowData['TLimpieza'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Termino por Area) del Año actual
        $totalTerminoAreaAnio += $AreaTermino;

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

    //multiplicacion por Mes
        // Calcular el producto de Termino y Area
        $AreaMesTermino = $rowData['TLimpieza'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Termino por Area) del Mes actual
        $totalTerminoAreaMes += $AreaMesTermino;

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

    //multiplicacion por TipoGranja
        // Calcular el producto de Termino y Area
        $AreaTipoGranjaTermino = $rowData['TLimpieza'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Termino por Area) del TipoGranja actual
        $totalTerminoAreaTipoGranja += $AreaTipoGranjaTermino;

        // Sumar el valor de Area al total de Area del TipoGranja actual
        $totalAreaTerminoTipoGranja += $rowData['AreaTrabajo'];

    //multiplicacion por ZNombre
        // Calcular el producto de Termino y Area
        $AreaZNombreTermino = $rowData['TLimpieza'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Termino por Area) del ZNombre actual
        $totalTerminoAreaZNombre += $AreaZNombreTermino;

        // Sumar el valor de Area al total de Area del ZNombre actual
        $totalAreaTerminoZNombre += $rowData['AreaTrabajo'];

    //Hallar las Sumas para la Produccion 
    //multiplicacion por años
        // Calcular el producto de Produccion y Area
        $AreaProduccion = $rowData['TDescansoProduccion'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Produccion por Area) del Año actual
        $totalProduccionAreaAnio += $AreaProduccion;

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

    //multiplicacion por Mes
        // Calcular el producto de Produccion y Area
        $AreaMesProduccion = $rowData['TDescansoProduccion'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Produccion por Area) del Mes actual
        $totalProduccionAreaMes += $AreaMesProduccion;

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

    //multiplicacion por TipoGranja
        // Calcular el producto de Produccion y Area
        $AreaTipoGranjaProduccion = $rowData['TDescansoProduccion'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Produccion por Area) del TipoGranja actual
        $totalProduccionAreaTipoGranja += $AreaTipoGranjaProduccion;

        // Sumar el valor de Area al total de Area del TipoGranja actual
        $totalAreaProduccionTipoGranja += $rowData['AreaTrabajo'];

    //multiplicacion por ZNombre
        // Calcular el producto de Produccion y Area
        $AreaZNombreProduccion = $rowData['TDescansoProduccion'] * $rowData['AreaTrabajo'];

        // Sumar el producto al total de Produccion por Area) del ZNombre actual
        $totalProduccionAreaZNombre += $AreaZNombreProduccion;

        // Sumar el valor de Area al total de Area del ZNombre actual
        $totalAreaProduccionZNombre += $rowData['AreaTrabajo'];

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

}   

    if ($totalAreaZNombre != 0) {


        if ($row - $mergeStartRowZNombre > 0) {
            $sheet->insertNewRowBefore($row);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por ZNombre
            $resultZNombre = $totalPrepAreaZNombre / $totalAreaZNombre;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Año
            $resultZNombreCompost = $totalCompAreaZNombre / $totalAreaCompZNombre;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por ZNombre
            $resultZNombreTCompost = $totalTCompAreaZNombre / $totalAreaTCompZNombre;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por ZNombre
            $resultZNombreLimpieza = $totalLimpiezaAreaZNombre / $totalAreaLimpiezaZNombre;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por ZNombre
            $resultZNombreDescanso = $totalDescansoAreaZNombre / $totalAreaDescansoZNombre;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por ZNombre
            $resultZNombreVacio = $totalVacioAreaZNombre / $totalAreaVacioZNombre;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por ZNombre
            $resultZNombreTermino = $totalTerminoAreaZNombre / $totalAreaTerminoZNombre;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por ZNombre
            $resultZNombreProduccion = $totalProduccionAreaZNombre / $totalAreaProduccionZNombre;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponZNombre);
            $sheet->setCellValue('K' . $row, $sumAreaZNombre);
            $sheet->setCellValue('L' . $row, $resultZNombre);
            $sheet->setCellValue('M' . $row, $resultZNombreCompost);
            $sheet->setCellValue('N' . $row, $resultZNombreTCompost);
            $sheet->setCellValue('O' . $row, $resultZNombreLimpieza);
            $sheet->setCellValue('P' . $row, $resultZNombreDescanso);
            $sheet->setCellValue('Q' . $row, $resultZNombreVacio);
            $sheet->setCellValue('R' . $row, $resultZNombreTermino);
            $sheet->setCellValue('S' . $row, $resultZNombreProduccion);
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('E' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('E' . $row . ':S' . $row)->getFont()->setBold(true);
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranja = $totalPrepAreaTipoGranja / $totalAreaTipoGranja;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaCompost = $totalCompAreaTipoGranja / $totalAreaCompTipoGranja;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaTCompost = $totalTCompAreaTipoGranja / $totalAreaTCompTipoGranja;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaLimpieza = $totalLimpiezaAreaTipoGranja / $totalAreaLimpiezaTipoGranja;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaDescanso = $totalDescansoAreaTipoGranja / $totalAreaDescansoTipoGranja;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaVacio = $totalVacioAreaTipoGranja / $totalAreaVacioTipoGranja;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaTermino = $totalTerminoAreaTipoGranja / $totalAreaTerminoTipoGranja;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por TipoGranja
            $resultTipoGranjaProduccion = $totalProduccionAreaTipoGranja / $totalAreaProduccionTipoGranja;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponTipoGranja);
            $sheet->setCellValue('K' . $row, $sumAreaTipoGranja);
            $sheet->setCellValue('L' . $row, $resultTipoGranja);
            $sheet->setCellValue('M' . $row, $resultTipoGranjaCompost);
            $sheet->setCellValue('N' . $row, $resultTipoGranjaTCompost);
            $sheet->setCellValue('O' . $row, $resultTipoGranjaLimpieza);
            $sheet->setCellValue('P' . $row, $resultTipoGranjaDescanso);
            $sheet->setCellValue('Q' . $row, $resultTipoGranjaVacio);
            $sheet->setCellValue('R' . $row, $resultTipoGranjaTermino);
            $sheet->setCellValue('S' . $row, $resultTipoGranjaProduccion);
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('D' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('D' . $row . ':S' . $row)->getFont()->setBold(true);
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por Mes
            $resultMes = $totalPrepAreaMes / $totalAreaMes;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Mes
            $resultMesCompost = $totalCompAreaMes / $totalAreaCompMes;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por Mes
            $resultMesTCompost = $totalTCompAreaMes / $totalAreaTCompMes;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por Mes
            $resultMesLimpieza = $totalLimpiezaAreaMes / $totalAreaLimpiezaMes;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por Mes
            $resultMesDescanso = $totalDescansoAreaMes / $totalAreaDescansoMes;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por Mes
            $resultMesVacio = $totalVacioAreaMes / $totalAreaVacioMes;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por Mes
            $resultMesTermino = $totalTerminoAreaMes / $totalAreaTerminoMes;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por Mes
            $resultMesProduccion = $totalProduccionAreaMes / $totalAreaProduccionMes;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponMes);
            $sheet->setCellValue('K' . $row, $sumAreaMes);
            $sheet->setCellValue('L' . $row, $resultMes);
            $sheet->setCellValue('M' . $row, $resultMesCompost);
            $sheet->setCellValue('N' . $row, $resultMesTCompost);
            $sheet->setCellValue('O' . $row, $resultMesLimpieza);
            $sheet->setCellValue('P' . $row, $resultMesDescanso);
            $sheet->setCellValue('Q' . $row, $resultMesVacio);
            $sheet->setCellValue('R' . $row, $resultMesTermino);
            $sheet->setCellValue('S' . $row, $resultMesProduccion);
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('C' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('C' . $row . ':S' . $row)->getFont()->setBold(true);
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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);
            // Calcular el resultado de (Suma de Preparacion por Area) / (Suma de Area) por Año
            $resultAnio = $totalPrepAreaAnio / $totalAreaAnio;

            // Calcular el resultado de (Suma de Compost por Area) / (Suma de Area) por Año
            $resultAnioCompost = $totalCompAreaAnio / $totalAreaCompAnio;

            // Calcular el resultado de (Suma de TCompost por Area) / (Suma de Area) por Año
            $resultAnioTCompost = $totalTCompAreaAnio / $totalAreaTCompAnio;

            // Calcular el resultado de (Suma de Limpieza por Area) / (Suma de Area) por Año
            $resultAnioLimpieza = $totalLimpiezaAreaAnio / $totalAreaLimpiezaAnio;

            // Calcular el resultado de (Suma de Descanso por Area) / (Suma de Area) por Año
            $resultAnioDescanso = $totalDescansoAreaAnio / $totalAreaDescansoAnio;

            // Calcular el resultado de (Suma de Vacio por Area) / (Suma de Area) por Año
            $resultAnioVacio = $totalVacioAreaAnio / $totalAreaVacioAnio;

            // Calcular el resultado de (Suma de Termino por Area) / (Suma de Area) por Año
            $resultAnioTermino = $totalTerminoAreaAnio / $totalAreaTerminoAnio;

            // Calcular el resultado de (Suma de Produccion por Area) / (Suma de Area) por Año
            $resultAnioProduccion = $totalProduccionAreaAnio / $totalAreaProduccionAnio;

            // Combinar toda la fila
            $sheet->setCellValue('J' . $row, $sumGalponAnio);
            $sheet->setCellValue('K' . $row, $sumAreaAnio);
            $sheet->setCellValue('L' . $row, $resultAnio);
            $sheet->setCellValue('M' . $row, $resultAnioCompost);
            $sheet->setCellValue('N' . $row, $resultAnioTCompost);
            $sheet->setCellValue('O' . $row, $resultAnioLimpieza);
            $sheet->setCellValue('P' . $row, $resultAnioDescanso);
            $sheet->setCellValue('Q' . $row, $resultAnioVacio);
            $sheet->setCellValue('R' . $row, $resultAnioTermino);
            $sheet->setCellValue('S' . $row, $resultAnioProduccion);
            // 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 . ':K' . $row)->getNumberFormat()->setFormatCode("#,##0");
            $sheet->getStyle('B' . $row . ':S' . $row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($rowColor);
            $sheet->getStyle('B' . $row . ':S' . $row)->getFont()->setBold(true)->getColor()->setRGB('FFFFFF'); // Establece el color en blanco (código RGB hexadecimal para blanco: FFFFFF)
            $sheet->getStyle('L' . $row . ':S' . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_0);
            $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{
        $session->msg("d", "No hay Datos para lo Seleccionado");
           redirect('../indicador.php',false);
    }

    

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

    // Ajustar el ancho de las columnas automáticamente
    foreach (range('A', 'S') as $column) {
        $sheet->getColumnDimension($column)->setAutoSize(true);
    }

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

      $file_name = 'RptTablero';

      $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('../indicador.php',false);
      }
      

    } else {

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



?>



