<?php
//Incluimos conexion a la base de 
require_once('../config/Conexion.php');

Class Reporte
{
  //Implementando nuestro constructor
  public function __construct()
  {

  }

  public function listar_cliente_venta($fecha_inicio,$fecha_fin){
    $sql="SELECT count(v.idventa)as ventas_conteo,sum(v.total_venta)as total,p.nombre,p.numero_celular,p.estado,p.idpersona
          FROM venta v
          JOIN persona p ON p.idpersona=v.idpersona
          WHERE date(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'
          GROUP BY p.idpersona
          ORDER BY total DESC;";
    return ejecutarConsulta($sql);
  }

  public function listar_venta($fecha_inicio,$fecha_fin,$idpersona)
  {
    // Obtener cabeceras (almacenes activos)
      $sqlCabecera = "SELECT p.idproducto,p.nombre as producto,d.idventa
                      FROM detalle_venta d
                      JOIN venta v ON v.idventa = d.idventa
                      JOIN almacen_central a ON a.idalmacen_central=d.idalmacen_central
                      JOIN producto p ON p.idproducto=a.idproducto 
                      WHERE date(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idpersona='$idpersona'
                      GROUP BY p.idproducto";
      $resultCabecera = ejecutarConsulta($sqlCabecera);
      $cabeceras = [];

      while ($row = $resultCabecera->fetch_assoc()) {
          $cabeceras[] = $row; // Guardamos las cabeceras
      }

      $sqlColor = "SELECT p.idproducto,p.nombre as producto,c.idcolor,o.nombre as color
      FROM detalle_venta d
       JOIN venta v ON v.idventa = d.idventa
      JOIN almacen_central a ON a.idalmacen_central=d.idalmacen_central
      JOIN producto p ON p.idproducto=a.idproducto
      JOIN combinacion_color c ON c.idcombinacion_color = a.idcombinacion_color
      JOIN color o ON c.idcolor = o.idcolor
      WHERE date(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idpersona='$idpersona'
      GROUP BY p.idproducto,c.idcolor";
        $resultColor = ejecutarConsulta($sqlColor);
        $colores = [];

        while ($row = $resultColor->fetch_assoc()) {
        $colores[] = $row; // Guardamos las cabeceras
        }

      // Obtener detalles de todos los almacenes en una sola consulta
      $sqlDetalle = "SELECT
                          c.idproducto,
                          c.idcolor, 
                          v.fecha_hora,
                          v.nroguia,
                          p.nombre AS producto,
                          CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinaci車n' USING utf8mb3))) AS color_combinacion,
                          GROUP_CONCAT(CONCAT(t.idtalla, ' (', d.cantidad, ')') ORDER BY t.nombre SEPARATOR ', ') AS tallas_cantidades
                          FROM detalle_venta d
                          JOIN venta v ON v.idventa = d.idventa
                          JOIN almacen_central a ON a.idalmacen_central = d.idalmacen_central
                          JOIN producto p ON p.idproducto = a.idproducto 
                          JOIN talla t ON t.idtalla = a.idtalla
                          JOIN combinacion_color c ON c.idcombinacion_color = a.idcombinacion_color
                          JOIN color o ON c.idcolor = o.idcolor
                          LEFT JOIN color r ON c.color1 = r.idcolor
                          WHERE date(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idpersona='$idpersona'
                          GROUP BY v.nroguia, p.nombre, o.nombre, r.nombre
                      ";

      $resultDetalle = ejecutarConsulta($sqlDetalle);
      $detalles = [];

      while ($row = $resultDetalle->fetch_assoc()) {
          $detalles[] = $row; // Guardamos los detalles
      }

      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "colores" => $colores,
          "detalles" => $detalles
      ];
  }

  public function listar_guia($guia1,$guia2)
  {
    // Obtener cabeceras (almacenes activos)
      $sqlCabecera = "SELECT p.idproducto,p.nombre as producto,d.idventa
                      FROM detalle_venta d
                      JOIN venta v ON v.idventa = d.idventa
                      JOIN almacen_central a ON a.idalmacen_central=d.idalmacen_central
                      JOIN producto p ON p.idproducto=a.idproducto
                      WHERE v.nroguia>='$guia1' and v.nroguia<='$guia2' 
                      GROUP BY p.idproducto";
      $resultCabecera = ejecutarConsulta($sqlCabecera);
      $cabeceras = [];

      while ($row = $resultCabecera->fetch_assoc()) {
          $cabeceras[] = $row; // Guardamos las cabeceras
      }

      $sqlColor = "SELECT p.idproducto,p.nombre as producto,c.idcolor,o.nombre as color
      FROM detalle_venta d
       JOIN venta v ON v.idventa = d.idventa
      JOIN almacen_central a ON a.idalmacen_central=d.idalmacen_central
      JOIN producto p ON p.idproducto=a.idproducto
      JOIN combinacion_color c ON c.idcombinacion_color = a.idcombinacion_color
      JOIN color o ON c.idcolor = o.idcolor
      WHERE v.nroguia>='$guia1' and v.nroguia<='$guia2' 
      GROUP BY p.idproducto,c.idcolor";
        $resultColor = ejecutarConsulta($sqlColor);
        $colores = [];

        while ($row = $resultColor->fetch_assoc()) {
        $colores[] = $row; // Guardamos las cabeceras
        }
      // Obtener detalles de todos los almacenes en una sola consulta
      $sqlDetalle = "SELECT
                          c.idproducto,
                          c.idcolor, 
                          v.fecha_hora,
                          v.nroguia,
                          p.nombre AS producto,
                          e.nombre as persona,
                          CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinaci車n' USING utf8mb3))) AS color_combinacion,
                  GROUP_CONCAT(CONCAT(t.idtalla, ' (', d.cantidad, ')') ORDER BY t.nombre SEPARATOR ', ') AS tallas_cantidades
                          FROM detalle_venta d
                          JOIN venta v ON v.idventa = d.idventa
                          JOIN almacen_central a ON a.idalmacen_central = d.idalmacen_central
                          JOIN producto p ON p.idproducto = a.idproducto 
                          JOIN talla t ON t.idtalla = a.idtalla
                          JOIN combinacion_color c ON c.idcombinacion_color = a.idcombinacion_color
                          JOIN color o ON c.idcolor = o.idcolor
                          LEFT JOIN color r ON c.color1 = r.idcolor
                          JOIN persona e ON e.idpersona=v.idpersona 
                          WHERE v.nroguia>='$guia1' and v.nroguia<='$guia2' 
                          GROUP BY v.nroguia, p.nombre, o.nombre, r.nombre
                      ";

      $resultDetalle = ejecutarConsulta($sqlDetalle);
      $detalles = [];

      while ($row = $resultDetalle->fetch_assoc()) {
          $detalles[] = $row; // Guardamos los detalles
      }
      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "colores" => $colores,
          "detalles" => $detalles
      ];
  }


  public function listar_kardex()
  {
    // Obtener cabeceras (almacenes activos)
      $sqlCabecera = "SELECT p.idproducto,p.nombre as producto
                      FROM producto p ";
      $resultCabecera = ejecutarConsulta($sqlCabecera);
      $cabeceras = [];

      while ($row = $resultCabecera->fetch_assoc()) {
          $cabeceras[] = $row; // Guardamos las cabeceras
      }

          $sqlInventario = "SELECT date(v.fecha_hora)as fecha_hora,sum(d.cantidad)as cantidad_inventario,d.idproducto
          FROM detalle_inventario d
          JOIN inventario v ON v.idinventario = d.idinventario
          WHERE v.estado='2'
          GROUP BY fecha_hora,d.idproducto";
          $resultInventario = ejecutarConsulta($sqlInventario);
          $inventarios = [];

          while ($row = $resultInventario->fetch_assoc()) {
          $inventarios[] = $row; // Guardamos las cabeceras
          }

      $sqlVenta = "SELECT v.fecha_hora,sum(d.cantidad)as cantidad_venta,p.idproducto
                    FROM detalle_venta d
                    JOIN venta v ON v.idventa = d.idventa
                    JOIN almacen_central a ON a.idalmacen_central=d.idalmacen_central
                    JOIN producto p ON p.idproducto=a.idproducto
                    GROUP BY v.fecha_hora,p.idproducto";
        $resultVenta = ejecutarConsulta($sqlVenta);
        $ventas = [];

        while ($row = $resultVenta->fetch_assoc()) {
        $ventas[] = $row; // Guardamos las cabeceras
        }

      // Obtener detalles de todos los almacenes en una sola consulta
      $sqlIngreso = "SELECT date(c.fecha_stock)as fecha_hora,sum(d.cantidad)as cantidad_ingreso,d.idproducto
                         FROM corte c
                         JOIN detalle_corte d ON d.idcorte=c.idcorte
                         WHERE c.fecha_stock>0
                         GROUP BY fecha_hora,d.idproducto
                      ";

      $resultIngreso = ejecutarConsulta($sqlIngreso);
      $ingresos = [];

      while ($row = $resultIngreso->fetch_assoc()) {
          $ingresos[] = $row; // Guardamos los detalles
      }

      $sqlTransferencia = "SELECT date(c.fecha_hora)as fecha_hora,sum(d.cantidad)as cantidad_trans,d.idproducto
                         FROM movimiento c
                         JOIN movimiento_almacen d ON d.idmovimiento=c.idmovimiento
                         GROUP BY fecha_hora,d.idproducto
                      ";

      $resultTransferencia = ejecutarConsulta($sqlTransferencia);
      $transferencias = [];

      while ($row = $resultTransferencia->fetch_assoc()) {
          $transferencias[] = $row; // Guardamos los detalles
      }

      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "ventas" => $ventas,
          "ingresos" => $ingresos,
          "transferencias" => $transferencias,
          "inventarios" => $inventarios
          
      ];
  }

public function listar_transferencias($fecha_inicio, $fecha_fin)
{
    global $conexion;

    // Consulta 1: Cabeceras
    $sqlCabecera = "SELECT p.idproducto, p.nombre AS producto, MIN(d.idmovimiento) AS idmovimiento
                    FROM movimiento_almacen d
                    JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                    JOIN producto p ON p.idproducto = d.idproducto 
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' 
                    GROUP BY p.idproducto, p.nombre";
    $resultCabecera = ejecutarConsulta($sqlCabecera);
    if (!$resultCabecera) {
        die("Error en SQL Cabecera: " . $conexion->error . "<br>Consulta: $sqlCabecera");
    }

    $cabeceras = [];
    while ($row = $resultCabecera->fetch_assoc()) {
        $cabeceras[] = $row;
    }

    // Consulta 2: Colores
    $sqlColor = "SELECT p.idproducto, p.nombre AS producto, c.idcolor, o.nombre AS color
                 FROM movimiento_almacen d
                 JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                 JOIN producto p ON p.idproducto = d.idproducto
                 JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                 JOIN color o ON c.idcolor = o.idcolor
                 WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                 GROUP BY p.idproducto, p.nombre, c.idcolor, o.nombre";
    $resultColor = ejecutarConsulta($sqlColor);
    if (!$resultColor) {
        die("Error en SQL Color: " . $conexion->error . "<br>Consulta: $sqlColor");
    }

    $colores = [];
    while ($row = $resultColor->fetch_assoc()) {
        $colores[] = $row;
    }

    // Consulta 3: Detalles
    $sqlDetalle = "SELECT
                  c.idproducto,
                  c.idcolor, 
                  date(v.fecha_hora)as fecha_hora,
                  v.idmovimiento,
                  p.nombre AS producto,
                  CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinaci車n' USING utf8mb3))) AS color_combinacion,
                  GROUP_CONCAT(CONCAT(t.idtalla, ' (', d.cantidad, ')') ORDER BY t.nombre SEPARATOR ', ') AS tallas_cantidades
              FROM movimiento_almacen d
              JOIN movimiento v ON v.idmovimiento = d.idmovimiento
              JOIN producto p ON p.idproducto = d.idproducto 
              JOIN talla t ON t.idtalla = d.idtalla
              JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
              JOIN color o ON c.idcolor = o.idcolor
              LEFT JOIN color r ON c.color1 = r.idcolor
              WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'
              GROUP BY 
                c.idproducto,
                c.idcolor,
                v.fecha_hora,
                v.idmovimiento,
                p.nombre,
                o.nombre,
                r.nombre";
    $resultDetalle = ejecutarConsulta($sqlDetalle);
    if (!$resultDetalle) {
        die("Error en SQL Detalle: " . $conexion->error . "<br>Consulta: $sqlDetalle");
    }

    $detalles = [];
    while ($row = $resultDetalle->fetch_assoc()) {
        $detalles[] = $row;
    }

    return [
        "cabeceras" => $cabeceras,
        "colores"   => $colores,
        "detalles"  => $detalles
    ];
}

public function listar_transferencias_almacen($fecha_inicio, $fecha_fin, $idalmacen)
{
    global $conexion;

    // Consulta 1: Cabeceras
    $sqlCabecera = "SELECT p.idproducto, p.nombre AS producto, MIN(d.idmovimiento) AS idmovimiento
                    FROM movimiento_almacen d
                    JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                    JOIN producto p ON p.idproducto = d.idproducto 
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen_origen='$idalmacen'
                    GROUP BY p.idproducto, p.nombre";
    $resultCabecera = ejecutarConsulta($sqlCabecera);
    if (!$resultCabecera) {
        die("Error en SQL Cabecera: " . $conexion->error . "<br>Consulta: $sqlCabecera");
    }

    $cabeceras = [];
    while ($row = $resultCabecera->fetch_assoc()) {
        $cabeceras[] = $row;
    }

    // Consulta 2: Colores
    $sqlColor = "SELECT p.idproducto, p.nombre AS producto, c.idcolor, o.nombre AS color
                 FROM movimiento_almacen d
                 JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                 JOIN producto p ON p.idproducto = d.idproducto
                 JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                 JOIN color o ON c.idcolor = o.idcolor
                 WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen_origen='$idalmacen'
                 GROUP BY p.idproducto, p.nombre, c.idcolor, o.nombre";
    $resultColor = ejecutarConsulta($sqlColor);
    if (!$resultColor) {
        die("Error en SQL Color: " . $conexion->error . "<br>Consulta: $sqlColor");
    }

    $colores = [];
    while ($row = $resultColor->fetch_assoc()) {
        $colores[] = $row;
    }

    // Consulta 3: Detalles
    $sqlDetalle = "SELECT
                  c.idproducto,
                  c.idcolor, 
                 date(v.fecha_hora)as fecha_hora,
                  v.idmovimiento,
                  p.nombre AS producto,
                  CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                  GROUP_CONCAT(CONCAT(t.idtalla, ' (', d.cantidad, ')') ORDER BY t.nombre SEPARATOR ', ') AS tallas_cantidades
              FROM movimiento_almacen d
              JOIN movimiento v ON v.idmovimiento = d.idmovimiento
              JOIN producto p ON p.idproducto = d.idproducto 
              JOIN talla t ON t.idtalla = d.idtalla
              JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
              JOIN color o ON c.idcolor = o.idcolor
              LEFT JOIN color r ON c.color1 = r.idcolor
              WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen_origen='$idalmacen'
              GROUP BY 
                c.idproducto,
                c.idcolor,
                v.fecha_hora,
                v.idmovimiento,
                p.nombre,
                o.nombre,
                r.nombre";
    $resultDetalle = ejecutarConsulta($sqlDetalle);
    if (!$resultDetalle) {
        die("Error en SQL Detalle: " . $conexion->error . "<br>Consulta: $sqlDetalle");
    }

    $detalles = [];
    while ($row = $resultDetalle->fetch_assoc()) {
        $detalles[] = $row;
    }

    return [
        "cabeceras" => $cabeceras,
        "colores"   => $colores,
        "detalles"  => $detalles
    ];
}


public function listar_fecha_producto_color($fecha_inicio, $fecha_fin, $idalmacen, $idproducto, $idcolor)
  {
     $sqlCabecera = "  SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_inventario d
                        JOIN inventario v ON v.idinventario = d.idinventario
                        JOIN producto p ON p.idproducto = d.idproducto
                        JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                        JOIN color o ON c.idcolor = o.idcolor
                        JOIN color r ON c.color1 = r.idcolor
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto' and o.idcolor='$idcolor'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_corte d
                        JOIN corte v ON v.idcorte = d.idcorte
                        JOIN producto p ON p.idproducto = d.idproducto
                        JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                        JOIN color o ON c.idcolor = o.idcolor
                        JOIN color r ON c.color1 = r.idcolor
                        WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto' and o.idcolor='$idcolor'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM movimiento_almacen d
                        JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                        JOIN producto p ON p.idproducto = d.idproducto
                        JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                        JOIN color o ON c.idcolor = o.idcolor
                        JOIN color r ON c.color1 = r.idcolor
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto' and o.idcolor='$idcolor'
                        AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))


                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_venta d
                        JOIN venta v ON v.idventa = d.idventa
                        JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                        JOIN producto p ON p.idproducto = c.idproducto
                        JOIN combinacion_color a ON a.idcombinacion_color = c.idcombinacion_color
                        JOIN color o ON o.idcolor = a.idcolor
                        JOIN color r ON a.color1 = r.idcolor
                        JOIN usuario u ON u.idusuario=v.idusuario
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'  and u.idalmacen='$idalmacen' and p.idproducto='$idproducto' and o.idcolor='$idcolor'
                    ";

        $sqlCabecera = "SELECT idproducto, producto FROM ($sqlCabecera) AS sub GROUP BY idproducto";

        $resultCabecera = ejecutarConsulta($sqlCabecera);
        $cabeceras = [];

        while ($row = $resultCabecera->fetch_assoc()) {
            $cabeceras[] = $row;
        }

      $sqlColor = "SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_inventario d
                    JOIN inventario v ON v.idinventario = d.idinventario
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto' and o.idcolor='$idcolor'

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_corte d
                    JOIN corte v ON v.idcorte = d.idcorte
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto' and o.idcolor='$idcolor'
                    
                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM movimiento_almacen d
                    JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto' and o.idcolor='$idcolor'
                    AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        a.idcolor,
                        a.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_venta d
                    JOIN venta v ON v.idventa = d.idventa
                    JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                    JOIN producto p ON p.idproducto = c.idproducto
                    JOIN combinacion_color a ON a.idcombinacion_color = c.idcombinacion_color
                    JOIN color o ON o.idcolor = a.idcolor
                    JOIN color r ON a.color1 = r.idcolor
                    JOIN usuario u ON u.idusuario=v.idusuario
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and u.idalmacen='$idalmacen' and p.idproducto='$idproducto' and o.idcolor='$idcolor'
                    ";

                $sqlColor = "SELECT idproducto, producto, idcolor, color1, color, color_r FROM ($sqlColor) AS sub GROUP BY idproducto, idcolor, color1";

                $resultColor = ejecutarConsulta($sqlColor);
                $colores = [];

                while ($row = $resultColor->fetch_assoc()) {
                    $colores[] = $row;
                }

      // Obtener detalles de todos los almacenes en una sola consulta
        $sqlDetalle = "SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'IN' AS tipo_ingreso,
                                v.idinventario AS nro_correlativo,
                                'S/N' as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_inventario d
                            JOIN inventario v ON v.idinventario = d.idinventario
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto' and o.idcolor='$idcolor'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_stock) AS fecha_hora,
                                p.nombre AS producto,
                                'CO' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                'S/N' as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_corte d
                            JOIN corte v ON v.idcorte = d.idcorte
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto' and o.idcolor='$idcolor'


                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                CASE 
                                    WHEN v.idalmacen_destino = '$idalmacen' THEN 'TRA' 
                                    WHEN v.idalmacen_origen = '$idalmacen' THEN 'TRS' 
                                    ELSE '' 
                                END AS tipo_ingreso,
                                v.idmovimiento AS nro_correlativo,
                                'S/N' as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM movimiento_almacen d
                            JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto' and o.idcolor='$idcolor'
                            AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))

                             UNION ALL

                            SELECT
                                c.idproducto,
                                l.idcolor,
                                l.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'VE' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                u.nombre as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_venta d
                            JOIN venta v ON v.idventa = d.idventa
                            JOIN usuario u ON v.idusuario= u.idusuario
                            JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                            JOIN producto p ON p.idproducto = c.idproducto 
                            JOIN talla t ON t.idtalla = c.idtalla
                            JOIN combinacion_color l ON l.idcombinacion_color = c.idcombinacion_color
                            JOIN color o ON o.idcolor = l.idcolor
                            LEFT JOIN color r ON r.idcolor = l.color1
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and d.tipo_salida='1' and u.idalmacen='$idalmacen' and p.idproducto='$idproducto' and o.idcolor='$idcolor'
                        ";

                        // Ahora agrupamos en una consulta externa
                        $sqlDetalleFinal = "
                            SELECT
                                idproducto,
                                idcolor,
                                color1,
                                fecha_hora,
                                producto,
                                tipo_ingreso,
                                nro_correlativo,
                                usuario,
                                color_combinacion,
                                GROUP_CONCAT(talla_cantidad ORDER BY nombre_talla SEPARATOR ', ') AS tallas_cantidades
                            FROM (
                                $sqlDetalle
                            ) AS sub
                            GROUP BY producto, color_combinacion, fecha_hora, tipo_ingreso, nro_correlativo
                        ";

                        // Ejecutar consulta final
                        $resultDetalle = ejecutarConsulta($sqlDetalleFinal);
                    $detalles = [];

                    while ($row = $resultDetalle->fetch_assoc()) {
                        $detalles[] = $row;
                    }
      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "colores" => $colores,
          "detalles" => $detalles
      ];
  }
  
public function listar_fecha_producto($fecha_inicio, $fecha_fin, $idalmacen, $idproducto)
  {
                  // COMENZAA INTERACTUAR CON LAS TABLAS INVENTARIO Y PRODUCTO
      $sqlCabecera = "  SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_inventario d
                        JOIN inventario v ON v.idinventario = d.idinventario
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_corte d
                        JOIN corte v ON v.idcorte = d.idcorte
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM movimiento_almacen d
                        JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto'
                        AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))


                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_venta d
                        JOIN venta v ON v.idventa = d.idventa
                        JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                        JOIN producto p ON p.idproducto = c.idproducto
                        JOIN usuario u ON u.idusuario=v.idusuario
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'  and u.idalmacen='$idalmacen' and p.idproducto='$idproducto'
                    ";

        $sqlCabecera = "SELECT idproducto, producto FROM ($sqlCabecera) AS sub GROUP BY idproducto";

        $resultCabecera = ejecutarConsulta($sqlCabecera);
        $cabeceras = [];

        while ($row = $resultCabecera->fetch_assoc()) {
            $cabeceras[] = $row;
        }

      $sqlColor = "SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_inventario d
                    JOIN inventario v ON v.idinventario = d.idinventario
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto'

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_corte d
                    JOIN corte v ON v.idcorte = d.idcorte
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto'
                    
                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM movimiento_almacen d
                    JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto'
                    AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        a.idcolor,
                        a.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_venta d
                    JOIN venta v ON v.idventa = d.idventa
                    JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                    JOIN producto p ON p.idproducto = c.idproducto
                    JOIN combinacion_color a ON a.idcombinacion_color = c.idcombinacion_color
                    JOIN color o ON o.idcolor = a.idcolor
                    JOIN color r ON a.color1 = r.idcolor
                    JOIN usuario u ON u.idusuario=v.idusuario
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and u.idalmacen='$idalmacen' and p.idproducto='$idproducto'
                    ";

                $sqlColor = "SELECT idproducto, producto, idcolor, color1, color, color_r FROM ($sqlColor) AS sub GROUP BY idproducto, idcolor, color1";

                $resultColor = ejecutarConsulta($sqlColor);
                $colores = [];

                while ($row = $resultColor->fetch_assoc()) {
                    $colores[] = $row;
                }

      // Obtener detalles de todos los almacenes en una sola consulta
        $sqlDetalle = "SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'IN' AS tipo_ingreso,
                                v.idinventario AS nro_correlativo,
                                'S/N' as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_inventario d
                            JOIN inventario v ON v.idinventario = d.idinventario
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_stock) AS fecha_hora,
                                p.nombre AS producto,
                                'CO' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                'S/N' as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_corte d
                            JOIN corte v ON v.idcorte = d.idcorte
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto'


                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                CASE 
                                    WHEN v.idalmacen_destino = '$idalmacen' THEN 'TRA' 
                                    WHEN v.idalmacen_origen = '$idalmacen' THEN 'TRS' 
                                    ELSE '' 
                                END AS tipo_ingreso,
                                v.idmovimiento AS nro_correlativo,
                                'S/N' as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM movimiento_almacen d
                            JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto'
                            AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))

                             UNION ALL

                            SELECT
                                c.idproducto,
                                l.idcolor,
                                l.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'VE' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                u.nombre as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_venta d
                            JOIN venta v ON v.idventa = d.idventa
                            JOIN usuario u ON v.idusuario= u.idusuario
                            JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                            JOIN producto p ON p.idproducto = c.idproducto 
                            JOIN talla t ON t.idtalla = c.idtalla
                            JOIN combinacion_color l ON l.idcombinacion_color = c.idcombinacion_color
                            JOIN color o ON o.idcolor = l.idcolor
                            LEFT JOIN color r ON r.idcolor = l.color1
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and d.tipo_salida='1' and u.idalmacen='$idalmacen' and p.idproducto='$idproducto'
                        ";

                        // Ahora agrupamos en una consulta externa
                        $sqlDetalleFinal = "
                            SELECT
                                idproducto,
                                idcolor,
                                color1,
                                fecha_hora,
                                producto,
                                tipo_ingreso,
                                nro_correlativo,
                                usuario,
                                color_combinacion,
                                GROUP_CONCAT(talla_cantidad ORDER BY nombre_talla SEPARATOR ', ') AS tallas_cantidades
                            FROM (
                                $sqlDetalle
                            ) AS sub
                            GROUP BY producto, color_combinacion, fecha_hora, tipo_ingreso, nro_correlativo
                        ";

                        // Ejecutar consulta final
                        $resultDetalle = ejecutarConsulta($sqlDetalleFinal);
                    $detalles = [];

                    while ($row = $resultDetalle->fetch_assoc()) {
                        $detalles[] = $row;
                    }
      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "colores" => $colores,
          "detalles" => $detalles
      ];
  }

    public function listar_fecha_almacen($fecha_inicio, $fecha_fin, $idalmacen)
        {
                   // COMENZAA INTERACTUAR CON LAS TABLAS INVENTARIO Y PRODUCTO
      $sqlCabecera = "  SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_inventario d
                        JOIN inventario v ON v.idinventario = d.idinventario
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_corte d
                        JOIN corte v ON v.idcorte = d.idcorte
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM movimiento_almacen d
                        JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                        AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))


                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_venta d
                        JOIN venta v ON v.idventa = d.idventa
                        JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                        JOIN producto p ON p.idproducto = c.idproducto
                        JOIN usuario u ON u.idusuario=v.idusuario
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'  and u.idalmacen='$idalmacen'
                    ";

        $sqlCabecera = "SELECT idproducto, producto FROM ($sqlCabecera) AS sub GROUP BY idproducto";

        $resultCabecera = ejecutarConsulta($sqlCabecera);
        $cabeceras = [];

        while ($row = $resultCabecera->fetch_assoc()) {
            $cabeceras[] = $row;
        }

      $sqlColor = "SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_inventario d
                    JOIN inventario v ON v.idinventario = d.idinventario
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen'

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_corte d
                    JOIN corte v ON v.idcorte = d.idcorte
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen'
                    
                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM movimiento_almacen d
                    JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                    AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        a.idcolor,
                        a.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_venta d
                    JOIN venta v ON v.idventa = d.idventa
                    JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                    JOIN producto p ON p.idproducto = c.idproducto
                    JOIN combinacion_color a ON a.idcombinacion_color = c.idcombinacion_color
                    JOIN color o ON o.idcolor = a.idcolor
                    JOIN color r ON a.color1 = r.idcolor
                    JOIN usuario u ON u.idusuario=v.idusuario
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and u.idalmacen='$idalmacen'
                    ";

                $sqlColor = "SELECT idproducto, producto, idcolor, color1, color, color_r FROM ($sqlColor) AS sub GROUP BY idproducto, idcolor, color1";

                $resultColor = ejecutarConsulta($sqlColor);
                $colores = [];

                while ($row = $resultColor->fetch_assoc()) {
                    $colores[] = $row;
                }

      // Obtener detalles de todos los almacenes en una sola consulta
        $sqlDetalle = "SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'IN' AS tipo_ingreso,
                                v.idinventario AS nro_correlativo,
                                'S/N' as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_inventario d
                            JOIN inventario v ON v.idinventario = d.idinventario
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_stock) AS fecha_hora,
                                p.nombre AS producto,
                                'CO' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                'S/N' as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_corte d
                            JOIN corte v ON v.idcorte = d.idcorte
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen'


                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                CASE 
                                    WHEN v.idalmacen_destino = '$idalmacen' THEN 'TRA' 
                                    WHEN v.idalmacen_origen = '$idalmacen' THEN 'TRS' 
                                    ELSE '' 
                                END AS tipo_ingreso,
                                v.idmovimiento AS nro_correlativo,
                                'S/N' as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM movimiento_almacen d
                            JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' 
                            AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))

                             UNION ALL

                            SELECT
                                c.idproducto,
                                l.idcolor,
                                l.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'VE' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                u.nombre as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_venta d
                            JOIN venta v ON v.idventa = d.idventa
                            JOIN usuario u ON v.idusuario= u.idusuario
                            JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                            JOIN producto p ON p.idproducto = c.idproducto 
                            JOIN talla t ON t.idtalla = c.idtalla
                            JOIN combinacion_color l ON l.idcombinacion_color = c.idcombinacion_color
                            JOIN color o ON o.idcolor = l.idcolor
                            LEFT JOIN color r ON r.idcolor = l.color1
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and d.tipo_salida='1' and u.idalmacen='$idalmacen'
                        ";

                        // Ahora agrupamos en una consulta externa
                        $sqlDetalleFinal = "
                            SELECT
                                idproducto,
                                idcolor,
                                color1,
                                fecha_hora,
                                producto,
                                tipo_ingreso,
                                nro_correlativo,
                                usuario,
                                color_combinacion,
                                GROUP_CONCAT(talla_cantidad ORDER BY nombre_talla SEPARATOR ', ') AS tallas_cantidades
                            FROM (
                                $sqlDetalle
                            ) AS sub
                            GROUP BY producto, color_combinacion, fecha_hora, tipo_ingreso, nro_correlativo
                        ";

                        // Ejecutar consulta final
                        $resultDetalle = ejecutarConsulta($sqlDetalleFinal);
                    $detalles = [];

                    while ($row = $resultDetalle->fetch_assoc()) {
                        $detalles[] = $row;
                    }
      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "colores" => $colores,
          "detalles" => $detalles
      ];
    }

        public function listar_fecha($fecha_inicio, $fecha_fin)
        {
                   // COMENZAA INTERACTUAR CON LAS TABLAS INVENTARIO Y PRODUCTO
      $sqlCabecera = "  SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_inventario d
                        JOIN inventario v ON v.idinventario = d.idinventario
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_corte d
                        JOIN corte v ON v.idcorte = d.idcorte
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_venta d
                        JOIN venta v ON v.idventa = d.idventa
                        JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                        JOIN producto p ON p.idproducto = c.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                    ";

        $sqlCabecera = "SELECT idproducto, producto FROM ($sqlCabecera) AS sub GROUP BY idproducto";

        $resultCabecera = ejecutarConsulta($sqlCabecera);
        $cabeceras = [];

        while ($row = $resultCabecera->fetch_assoc()) {
            $cabeceras[] = $row;
        }

      $sqlColor = "SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_inventario d
                    JOIN inventario v ON v.idinventario = d.idinventario
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_corte d
                    JOIN corte v ON v.idcorte = d.idcorte
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                    
                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        a.idcolor,
                        a.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_venta d
                    JOIN venta v ON v.idventa = d.idventa
                    JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                    JOIN producto p ON p.idproducto = c.idproducto
                    JOIN combinacion_color a ON a.idcombinacion_color = c.idcombinacion_color
                    JOIN color o ON o.idcolor = a.idcolor
                    JOIN color r ON a.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                    ";

                $sqlColor = "SELECT idproducto, producto, idcolor, color1, color, color_r FROM ($sqlColor) AS sub GROUP BY idproducto, idcolor, color1";

                $resultColor = ejecutarConsulta($sqlColor);
                $colores = [];

                while ($row = $resultColor->fetch_assoc()) {
                    $colores[] = $row;
                }

      // Obtener detalles de todos los almacenes en una sola consulta
        $sqlDetalle = "SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'IN' AS tipo_ingreso,
                                v.idinventario AS nro_correlativo,
                                'S/N' as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_inventario d
                            JOIN inventario v ON v.idinventario = d.idinventario
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_stock) AS fecha_hora,
                                p.nombre AS producto,
                                'CO' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                'S/N' as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_corte d
                            JOIN corte v ON v.idcorte = d.idcorte
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin'


                            UNION ALL

                            SELECT
                                c.idproducto,
                                l.idcolor,
                                l.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'VE' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                u.nombre as usuario,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_venta d
                            JOIN venta v ON v.idventa = d.idventa
                            JOIN usuario u ON v.idusuario= u.idusuario
                            JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                            JOIN producto p ON p.idproducto = c.idproducto 
                            JOIN talla t ON t.idtalla = c.idtalla
                            JOIN combinacion_color l ON l.idcombinacion_color = c.idcombinacion_color
                            JOIN color o ON o.idcolor = l.idcolor
                            LEFT JOIN color r ON r.idcolor = l.color1
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and d.tipo_salida='1'
                        ";

                        // Ahora agrupamos en una consulta externa
                        $sqlDetalleFinal = "
                            SELECT
                                idproducto,
                                idcolor,
                                color1,
                                fecha_hora,
                                producto,
                                tipo_ingreso,
                                nro_correlativo,
                                usuario,
                                color_combinacion,
                                GROUP_CONCAT(talla_cantidad ORDER BY nombre_talla SEPARATOR ', ') AS tallas_cantidades
                            FROM (
                                $sqlDetalle
                            ) AS sub
                            GROUP BY producto, color_combinacion, fecha_hora, tipo_ingreso, nro_correlativo
                        ";

                        // Ejecutar consulta final
                        $resultDetalle = ejecutarConsulta($sqlDetalleFinal);
                    $detalles = [];

                    while ($row = $resultDetalle->fetch_assoc()) {
                        $detalles[] = $row;
                    }
      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "colores" => $colores,
          "detalles" => $detalles
      ];
    }
  
  public function listar_fecha_ingreso($fecha_inicio, $fecha_fin)
  {
    // COMENZAA INTERACTUAR CON LAS TABLAS INVENTARIO Y PRODUCTO
      $sqlCabecera = "  SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_inventario d
                        JOIN inventario v ON v.idinventario = d.idinventario
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_corte d
                        JOIN corte v ON v.idcorte = d.idcorte
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                    ";

        $sqlCabecera = "SELECT idproducto, producto FROM ($sqlCabecera) AS sub GROUP BY idproducto";

        $resultCabecera = ejecutarConsulta($sqlCabecera);
        $cabeceras = [];

        while ($row = $resultCabecera->fetch_assoc()) {
            $cabeceras[] = $row;
        }

      $sqlColor = "SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_inventario d
                    JOIN inventario v ON v.idinventario = d.idinventario
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_corte d
                    JOIN corte v ON v.idcorte = d.idcorte
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin'";

                $sqlColor = "SELECT idproducto, producto, idcolor, color1, color, color_r FROM ($sqlColor) AS sub GROUP BY idproducto, idcolor, color1";

                $resultColor = ejecutarConsulta($sqlColor);
                $colores = [];

                while ($row = $resultColor->fetch_assoc()) {
                    $colores[] = $row;
                }

      // Obtener detalles de todos los almacenes en una sola consulta
      $sqlDetalle = "SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'I' AS tipo_ingreso,
                                v.idinventario AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_inventario d
                            JOIN inventario v ON v.idinventario = d.idinventario
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_stock) AS fecha_hora,
                                p.nombre AS producto,
                                'C' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_corte d
                            JOIN corte v ON v.idcorte = d.idcorte
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                        ";

                        // Ahora agrupamos en una consulta externa
                        $sqlDetalleFinal = "
                            SELECT
                                idproducto,
                                idcolor,
                                color1,
                                fecha_hora,
                                producto,
                                tipo_ingreso,
                                nro_correlativo,
                                color_combinacion,
                                GROUP_CONCAT(talla_cantidad ORDER BY nombre_talla SEPARATOR ', ') AS tallas_cantidades
                            FROM (
                                $sqlDetalle
                            ) AS sub
                            GROUP BY producto, color_combinacion, fecha_hora, tipo_ingreso, nro_correlativo
                        ";

                        // Ejecutar consulta final
                        $resultDetalle = ejecutarConsulta($sqlDetalleFinal);
                        $detalles = [];

                    while ($row = $resultDetalle->fetch_assoc()) {
                        $detalles[] = $row;
                    }
      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "colores" => $colores,
          "detalles" => $detalles
      ];
  }

  public function listar_fecha_producto_ingreso($fecha_inicio, $fecha_fin, $idproducto)
  {
    // COMENZAA INTERACTUAR CON LAS TABLAS INVENTARIO Y PRODUCTO
      $sqlCabecera = "  SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_inventario d
                        JOIN inventario v ON v.idinventario = d.idinventario
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_corte d
                        JOIN corte v ON v.idcorte = d.idcorte
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto'
                    ";

        $sqlCabecera = "SELECT idproducto, producto FROM ($sqlCabecera) AS sub GROUP BY idproducto";

        $resultCabecera = ejecutarConsulta($sqlCabecera);
        $cabeceras = [];

        while ($row = $resultCabecera->fetch_assoc()) {
            $cabeceras[] = $row;
        }

      $sqlColor = "SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_inventario d
                    JOIN inventario v ON v.idinventario = d.idinventario
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto'

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_corte d
                    JOIN corte v ON v.idcorte = d.idcorte
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto' ";

                $sqlColor = "SELECT idproducto, producto, idcolor, color1, color, color_r FROM ($sqlColor) AS sub GROUP BY idproducto, idcolor, color1";

                $resultColor = ejecutarConsulta($sqlColor);
                $colores = [];

                while ($row = $resultColor->fetch_assoc()) {
                    $colores[] = $row;
                }

      // Obtener detalles de todos los almacenes en una sola consulta
      $sqlDetalle = "SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'I' AS tipo_ingreso,
                                v.idinventario AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_inventario d
                            JOIN inventario v ON v.idinventario = d.idinventario
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_stock) AS fecha_hora,
                                p.nombre AS producto,
                                'C' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_corte d
                            JOIN corte v ON v.idcorte = d.idcorte
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto'
                        ";

                        // Ahora agrupamos en una consulta externa
                        $sqlDetalleFinal = "
                            SELECT
                                idproducto,
                                idcolor,
                                color1,
                                fecha_hora,
                                producto,
                                tipo_ingreso,
                                nro_correlativo,
                                color_combinacion,
                                GROUP_CONCAT(talla_cantidad ORDER BY nombre_talla SEPARATOR ', ') AS tallas_cantidades
                            FROM (
                                $sqlDetalle
                            ) AS sub
                            GROUP BY producto, color_combinacion, fecha_hora, tipo_ingreso, nro_correlativo
                        ";

                    $resultDetalle = ejecutarConsulta($sqlDetalleFinal);
                    $detalles = [];

                    while ($row = $resultDetalle->fetch_assoc()) {
                        $detalles[] = $row;
                    }
      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "colores" => $colores,
          "detalles" => $detalles
      ];
  }

   public function listar_fecha_producto_color_ingreso($fecha_inicio, $fecha_fin, $idproducto, $idcolor)
  {
    // COMENZAA INTERACTUAR CON LAS TABLAS INVENTARIO Y PRODUCTO
      $sqlCabecera = "  SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_inventario d
                        JOIN inventario v ON v.idinventario = d.idinventario
                        JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                        JOIN color o ON c.idcolor = o.idcolor
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto' and o.idcolor='$idcolor'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_corte d
                        JOIN corte v ON v.idcorte = d.idcorte
                        JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                        JOIN color o ON c.idcolor = o.idcolor
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto' and o.idcolor='$idcolor'
                    ";

        $sqlCabecera = "SELECT idproducto, producto FROM ($sqlCabecera) AS sub GROUP BY idproducto";

        $resultCabecera = ejecutarConsulta($sqlCabecera);
        $cabeceras = [];

        while ($row = $resultCabecera->fetch_assoc()) {
            $cabeceras[] = $row;
        }

      $sqlColor = "SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_inventario d
                    JOIN inventario v ON v.idinventario = d.idinventario
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto' and o.idcolor='$idcolor'

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_corte d
                    JOIN corte v ON v.idcorte = d.idcorte
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto' and o.idcolor='$idcolor' ";

                $sqlColor = "SELECT idproducto, producto, idcolor, color1, color, color_r FROM ($sqlColor) AS sub GROUP BY idproducto, idcolor, color1";

                $resultColor = ejecutarConsulta($sqlColor);
                $colores = [];

                while ($row = $resultColor->fetch_assoc()) {
                    $colores[] = $row;
                }

      // Obtener detalles de todos los almacenes en una sola consulta
      $sqlDetalle = "SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'I' AS tipo_ingreso,
                                v.idinventario AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_inventario d
                            JOIN inventario v ON v.idinventario = d.idinventario
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_stock) AS fecha_hora,
                                p.nombre AS producto,
                                'C' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_corte d
                            JOIN corte v ON v.idcorte = d.idcorte
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                        ";

                        // Ahora agrupamos en una consulta externa
                        $sqlDetalleFinal = "
                            SELECT
                                idproducto,
                                idcolor,
                                color1,
                                fecha_hora,
                                producto,
                                tipo_ingreso,
                                nro_correlativo,
                                color_combinacion,
                                GROUP_CONCAT(talla_cantidad ORDER BY nombre_talla SEPARATOR ', ') AS tallas_cantidades
                            FROM (
                                $sqlDetalle
                            ) AS sub
                            GROUP BY producto, color_combinacion, fecha_hora, tipo_ingreso, nro_correlativo
                        ";

                    $resultDetalle = ejecutarConsulta($sqlDetalleFinal);
                    $detalles = [];

                    while ($row = $resultDetalle->fetch_assoc()) {
                        $detalles[] = $row;
                    }
      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "colores" => $colores,
          "detalles" => $detalles
      ];
  }
  
  public function listar_fecha_total($fecha_inicio, $fecha_fin)
  {
    // COMENZAA INTERACTUAR CON LAS TABLAS INVENTARIO Y PRODUCTO
      $sqlCabecera = "  SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_inventario d
                        JOIN inventario v ON v.idinventario = d.idinventario
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_corte d
                        JOIN corte v ON v.idcorte = d.idcorte
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM movimiento_almacen d
                        JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'


                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_venta d
                        JOIN venta v ON v.idventa = d.idventa
                        JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                        JOIN producto p ON p.idproducto = c.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                    ";

        $sqlCabecera = "SELECT idproducto, producto FROM ($sqlCabecera) AS sub GROUP BY idproducto";

        $resultCabecera = ejecutarConsulta($sqlCabecera);
        $cabeceras = [];

        while ($row = $resultCabecera->fetch_assoc()) {
            $cabeceras[] = $row;
        }

      $sqlColor = "SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_inventario d
                    JOIN inventario v ON v.idinventario = d.idinventario
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_corte d
                    JOIN corte v ON v.idcorte = d.idcorte
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                    
                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM movimiento_almacen d
                    JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        a.idcolor,
                        a.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_venta d
                    JOIN venta v ON v.idventa = d.idventa
                    JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                    JOIN producto p ON p.idproducto = c.idproducto
                    JOIN combinacion_color a ON a.idcombinacion_color = c.idcombinacion_color
                    JOIN color o ON o.idcolor = a.idcolor
                    JOIN color r ON a.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                    ";

                $sqlColor = "SELECT idproducto, producto, idcolor, color1, color, color_r FROM ($sqlColor) AS sub GROUP BY idproducto, idcolor, color1";

                $resultColor = ejecutarConsulta($sqlColor);
                $colores = [];

                while ($row = $resultColor->fetch_assoc()) {
                    $colores[] = $row;
                }

      // Obtener detalles de todos los almacenes en una sola consulta
        $sqlDetalle = "SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'IN' AS tipo_ingreso,
                                v.idinventario AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_inventario d
                            JOIN inventario v ON v.idinventario = d.idinventario
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_stock) AS fecha_hora,
                                p.nombre AS producto,
                                'CO' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_corte d
                            JOIN corte v ON v.idcorte = d.idcorte
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'TR' AS tipo_ingreso,
                                v.idmovimiento AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM movimiento_almacen d
                            JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                l.idcolor,
                                l.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'VE' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_venta d
                            JOIN venta v ON v.idventa = d.idventa
                            JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                            JOIN producto p ON p.idproducto = c.idproducto 
                            JOIN talla t ON t.idtalla = c.idtalla
                            JOIN combinacion_color l ON l.idcombinacion_color = c.idcombinacion_color
                            JOIN color o ON o.idcolor = l.idcolor
                            LEFT JOIN color r ON r.idcolor = l.color1
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and d.tipo_salida='1'
                        ";

                        // Ahora agrupamos en una consulta externa
                        $sqlDetalleFinal = "
                            SELECT
                                idproducto,
                                idcolor,
                                color1,
                                fecha_hora,
                                producto,
                                tipo_ingreso,
                                nro_correlativo,
                                color_combinacion,
                                GROUP_CONCAT(talla_cantidad ORDER BY nombre_talla SEPARATOR ', ') AS tallas_cantidades
                            FROM (
                                $sqlDetalle
                            ) AS sub
                            GROUP BY producto, color_combinacion, fecha_hora, tipo_ingreso, nro_correlativo
                        ";

                        // Ejecutar consulta final
                        $resultDetalle = ejecutarConsulta($sqlDetalleFinal);
                    $detalles = [];

                    while ($row = $resultDetalle->fetch_assoc()) {
                        $detalles[] = $row;
                    }
      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "colores" => $colores,
          "detalles" => $detalles
      ];
  }
  
    public function listar_fecha_almacen_total($fecha_inicio, $fecha_fin,$idalmacen)
  {
    // COMENZAA INTERACTUAR CON LAS TABLAS INVENTARIO Y PRODUCTO
      $sqlCabecera = "  SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_inventario d
                        JOIN inventario v ON v.idinventario = d.idinventario
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_corte d
                        JOIN corte v ON v.idcorte = d.idcorte
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM movimiento_almacen d
                        JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                        AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))


                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_venta d
                        JOIN venta v ON v.idventa = d.idventa
                        JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                        JOIN producto p ON p.idproducto = c.idproducto
                        JOIN usuario u ON v.idusuario=u.idusuario
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and u.idalmacen='$idalmacen'
                    ";

        $sqlCabecera = "SELECT idproducto, producto FROM ($sqlCabecera) AS sub GROUP BY idproducto";

        $resultCabecera = ejecutarConsulta($sqlCabecera);
        $cabeceras = [];

        while ($row = $resultCabecera->fetch_assoc()) {
            $cabeceras[] = $row;
        }

      $sqlColor = "SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_inventario d
                    JOIN inventario v ON v.idinventario = d.idinventario
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen'

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_corte d
                    JOIN corte v ON v.idcorte = d.idcorte
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen'
                    
                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM movimiento_almacen d
                    JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                    AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        a.idcolor,
                        a.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_venta d
                    JOIN venta v ON v.idventa = d.idventa
                    JOIN usuario u ON v.idusuario=u.idusuario
                    JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                    JOIN producto p ON p.idproducto = c.idproducto
                    JOIN combinacion_color a ON a.idcombinacion_color = c.idcombinacion_color
                    JOIN color o ON o.idcolor = a.idcolor
                    JOIN color r ON a.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and u.idalmacen='$idalmacen'
                    ";

                $sqlColor = "SELECT idproducto, producto, idcolor, color1, color, color_r FROM ($sqlColor) AS sub GROUP BY idproducto, idcolor, color1";

                $resultColor = ejecutarConsulta($sqlColor);
                $colores = [];

                while ($row = $resultColor->fetch_assoc()) {
                    $colores[] = $row;
                }

      // Obtener detalles de todos los almacenes en una sola consulta
        $sqlDetalle = "SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'IN' AS tipo_ingreso,
                                v.idinventario AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_inventario d
                            JOIN inventario v ON v.idinventario = d.idinventario
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_stock) AS fecha_hora,
                                p.nombre AS producto,
                                'CO' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_corte d
                            JOIN corte v ON v.idcorte = d.idcorte
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                CASE 
                                    WHEN v.idalmacen_destino = '$idalmacen' THEN 'TRA' 
                                    WHEN v.idalmacen_origen = '$idalmacen' THEN 'TRS' 
                                    ELSE '' 
                                END AS tipo_ingreso,
                                v.idmovimiento AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM movimiento_almacen d
                            JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin'
                            AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))


                            UNION ALL

                            SELECT
                                c.idproducto,
                                l.idcolor,
                                l.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'VE' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_venta d
                            JOIN venta v ON v.idventa = d.idventa
                            JOIN usuario u ON v.idusuario=u.idusuario
                            JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                            JOIN producto p ON p.idproducto = c.idproducto 
                            JOIN talla t ON t.idtalla = c.idtalla
                            JOIN combinacion_color l ON l.idcombinacion_color = c.idcombinacion_color
                            JOIN color o ON o.idcolor = l.idcolor
                            LEFT JOIN color r ON r.idcolor = l.color1
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and d.tipo_salida='1' and u.idalmacen='$idalmacen'
                        ";

                        // Ahora agrupamos en una consulta externa
                        $sqlDetalleFinal = "
                            SELECT
                                idproducto,
                                idcolor,
                                color1,
                                fecha_hora,
                                producto,
                                tipo_ingreso,
                                nro_correlativo,
                                color_combinacion,
                                GROUP_CONCAT(talla_cantidad ORDER BY nombre_talla SEPARATOR ', ') AS tallas_cantidades
                            FROM (
                                $sqlDetalle
                            ) AS sub
                            GROUP BY producto, color_combinacion, fecha_hora, tipo_ingreso, nro_correlativo
                        ";

                        // Ejecutar consulta final
                        $resultDetalle = ejecutarConsulta($sqlDetalleFinal);
                    $detalles = [];

                    while ($row = $resultDetalle->fetch_assoc()) {
                        $detalles[] = $row;
                    }
      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "colores" => $colores,
          "detalles" => $detalles
      ];
  }

     public function listar_fecha_producto_total($fecha_inicio, $fecha_fin,$idalmacen,$idproducto)
  {
    // COMENZAA INTERACTUAR CON LAS TABLAS INVENTARIO Y PRODUCTO
      $sqlCabecera = "  SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_inventario d
                        JOIN inventario v ON v.idinventario = d.idinventario
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_corte d
                        JOIN corte v ON v.idcorte = d.idcorte
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto'

                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM movimiento_almacen d
                        JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                        JOIN producto p ON p.idproducto = d.idproducto
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto'
                        AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino)) 


                        UNION ALL

                        SELECT p.idproducto, p.nombre AS producto
                        FROM detalle_venta d
                        JOIN venta v ON v.idventa = d.idventa
                        JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                        JOIN producto p ON p.idproducto = c.idproducto
                        JOIN usuario u ON v.idusuario=u.idusuario
                        WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and u.idalmacen='$idalmacen' and p.idproducto='$idproducto'
                    ";

        $sqlCabecera = "SELECT idproducto, producto FROM ($sqlCabecera) AS sub GROUP BY idproducto";

        $resultCabecera = ejecutarConsulta($sqlCabecera);
        $cabeceras = [];

        while ($row = $resultCabecera->fetch_assoc()) {
            $cabeceras[] = $row;
        }

      $sqlColor = "SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_inventario d
                    JOIN inventario v ON v.idinventario = d.idinventario
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto'

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_corte d
                    JOIN corte v ON v.idcorte = d.idcorte
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto'
                    
                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        c.idcolor,
                        c.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM movimiento_almacen d
                    JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                    JOIN producto p ON p.idproducto = d.idproducto
                    JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                    JOIN color o ON c.idcolor = o.idcolor
                    JOIN color r ON c.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto'
                    AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))

                    UNION ALL

                    SELECT 
                        p.idproducto,
                        p.nombre AS producto,
                        a.idcolor,
                        a.color1,
                        o.nombre AS color,
                        r.nombre as color_r
                    FROM detalle_venta d
                    JOIN venta v ON v.idventa = d.idventa
                    JOIN usuario u ON v.idusuario=u.idusuario
                    JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                    JOIN producto p ON p.idproducto = c.idproducto
                    JOIN combinacion_color a ON a.idcombinacion_color = c.idcombinacion_color
                    JOIN color o ON o.idcolor = a.idcolor
                    JOIN color r ON a.color1 = r.idcolor
                    WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and u.idalmacen='$idalmacen' and p.idproducto='$idproducto'
                    ";

                $sqlColor = "SELECT idproducto, producto, idcolor, color1, color, color_r FROM ($sqlColor) AS sub GROUP BY idproducto, idcolor, color1";

                $resultColor = ejecutarConsulta($sqlColor);
                $colores = [];

                while ($row = $resultColor->fetch_assoc()) {
                    $colores[] = $row;
                }

      // Obtener detalles de todos los almacenes en una sola consulta
        $sqlDetalle = "SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'IN' AS tipo_ingreso,
                                v.idinventario AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_inventario d
                            JOIN inventario v ON v.idinventario = d.idinventario
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_stock) AS fecha_hora,
                                p.nombre AS producto,
                                'CO' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_corte d
                            JOIN corte v ON v.idcorte = d.idcorte
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_stock) BETWEEN '$fecha_inicio' AND '$fecha_fin' and v.idalmacen='$idalmacen' and p.idproducto='$idproducto'

                            UNION ALL

                            SELECT
                                c.idproducto,
                                c.idcolor,
                                c.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                CASE 
                                    WHEN v.idalmacen_destino = '$idalmacen' THEN 'TRA' 
                                    WHEN v.idalmacen_origen = '$idalmacen' THEN 'TRS' 
                                    ELSE '' 
                                END AS tipo_ingreso,
                                v.idmovimiento AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM movimiento_almacen d
                            JOIN movimiento v ON v.idmovimiento = d.idmovimiento
                            JOIN producto p ON p.idproducto = d.idproducto 
                            JOIN talla t ON t.idtalla = d.idtalla
                            JOIN combinacion_color c ON c.idcombinacion_color = d.idcombinacion_color
                            JOIN color o ON c.idcolor = o.idcolor
                            LEFT JOIN color r ON c.color1 = r.idcolor
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and p.idproducto='$idproducto'
                            AND ('$idalmacen' IN (v.idalmacen_origen, v.idalmacen_destino))


                            UNION ALL

                            SELECT
                                c.idproducto,
                                l.idcolor,
                                l.color1,
                                DATE(v.fecha_hora) AS fecha_hora,
                                p.nombre AS producto,
                                'VE' AS tipo_ingreso,
                                v.nrocorrelativo AS nro_correlativo,
                                CONCAT(o.nombre, ' / ', COALESCE(r.nombre, CONVERT('Sin combinación' USING utf8mb3))) AS color_combinacion,
                                CONCAT(t.idtalla, ' (', d.cantidad, ')') AS talla_cantidad,
                                t.nombre AS nombre_talla
                            FROM detalle_venta d
                            JOIN venta v ON v.idventa = d.idventa
                            JOIN usuario u ON v.idusuario=u.idusuario
                            JOIN almacen_central c ON c.idalmacen_central = d.idalmacen_central
                            JOIN producto p ON p.idproducto = c.idproducto 
                            JOIN talla t ON t.idtalla = c.idtalla
                            JOIN combinacion_color l ON l.idcombinacion_color = c.idcombinacion_color
                            JOIN color o ON o.idcolor = l.idcolor
                            LEFT JOIN color r ON r.idcolor = l.color1
                            WHERE DATE(v.fecha_hora) BETWEEN '$fecha_inicio' AND '$fecha_fin' and d.tipo_salida='1' and u.idalmacen='$idalmacen' and p.idproducto='$idproducto'
                        ";

                        // Ahora agrupamos en una consulta externa
                        $sqlDetalleFinal = "
                            SELECT
                                idproducto,
                                idcolor,
                                color1,
                                fecha_hora,
                                producto,
                                tipo_ingreso,
                                nro_correlativo,
                                color_combinacion,
                                GROUP_CONCAT(talla_cantidad ORDER BY nombre_talla SEPARATOR ', ') AS tallas_cantidades
                            FROM (
                                $sqlDetalle
                            ) AS sub
                            GROUP BY producto, color_combinacion, fecha_hora, tipo_ingreso, nro_correlativo
                        ";

                        // Ejecutar consulta final
                        $resultDetalle = ejecutarConsulta($sqlDetalleFinal);
                    $detalles = [];

                    while ($row = $resultDetalle->fetch_assoc()) {
                        $detalles[] = $row;
                    }
      // Retornar los resultados separados en JSON
      return [
          "cabeceras" => $cabeceras,
          "colores" => $colores,
          "detalles" => $detalles
      ];
  }





  

}