diff --git a/app/GrupoDeCompra.php b/app/GrupoDeCompra.php index 3395925..75c693a 100644 --- a/app/GrupoDeCompra.php +++ b/app/GrupoDeCompra.php @@ -177,121 +177,6 @@ class GrupoDeCompra extends Model PdfHelper::exportarPedidos($filepath, $barrios); } - static function filaVacia(string $product, int $columns): array - { - $fila = [$product]; - for ($i = 1; $i <= $columns; $i++) { - $fila[$i] = "0"; - } - return $fila; - } - - //Asume que los productos están gruadados en orden de fila - - /** - * @throws Exception - */ - public static function obtenerTemplateDeFilasVacias(int $columns): array - { - $productosFilaID = Producto::productosFilaID(); - $productosIDNombre = Producto::productosIDNombre(); - $num_fila = 1; - $template = []; - foreach ($productosFilaID as $fila => $id) { - for ($i = $num_fila; $i < $fila; $i++) { - $template[$i] = GrupoDeCompra::filaVacia("", $columns); - } - $template[$fila] = GrupoDeCompra::filaVacia($productosIDNombre[$id], $columns); - $num_fila = $fila + 1; - } - $template[TransporteHelper::filaTransporte()] = GrupoDeCompra::filaVacia("Bonos de transporte", $columns); - return $template; - } - - /** - * @throws Exception - */ - public function exportarPedidoEnCSV() - { - $records = $this->generarColumnaCantidades(); - - $fecha = now()->format('Y-m-d'); - CsvHelper::generarCsv('csv/exports/' . $this->nombre . '-' . $fecha . '.csv', $records); - } - - /** - * @throws Exception - */ - public function generarColumnaCantidades(): array - { - $productos_en_pedido = $this->productosPedidos(); - - //si no hay pedidos aprobados, salir - if ($productos_en_pedido->count() == 0) { - Log::debug("El grupo de compra " . $this->nombre . " no tiene pedidos aprobados."); - return []; - } - - $records = $this->obtenerTemplateDeFilasVacias(1); - $productos_id_fila = Producto::productosIDFila(); - foreach ($productos_en_pedido as $id => $producto_pedido) { - $fila = $productos_id_fila[$id]; - $records[$fila][1] = $producto_pedido->cantidad_pedida; - } - - $records[TransporteHelper::filaTransporte()][1] = $this->cantidadTransporte(); - - return $records; - } - - /** - * @throws Exception - */ - public function exportarPedidoConNucleosEnCSV() - { - $productos_en_pedido = $this->productosPedidos(); - - // si no hay pedidos aprobados, salir - if ($productos_en_pedido->count() == 0) { - Log::debug("El grupo de compra " . $this->nombre . " no tiene pedidos aprobados."); - return; - } - - $pedidos = $this->pedidosAprobados(); - // Generar tabla vacía con una columna por núcleo - $records = $this->obtenerTemplateDeFilasVacias($pedidos->count()); - $productos_id_fila = Producto::productosIDFila(); - - foreach ($productos_en_pedido as $id => $producto_pedido) { - $fila = $productos_id_fila[$id]; - $i = 1; - // Poner cantidad de cada producto para cada núcleo - foreach ($pedidos as $pedido) { - list($records, $i, $_) = $this->agregarCantidad($pedido, $id, $records, $fila, $i); - } - } - // Insertar lista de núcleos en la primera fila - $nucleos = [""]; - $i = 1; - foreach ($pedidos as $pedido) { - $nucleos[$i] = $pedido->nombre; - $i++; - } - array_splice($records, 0, 0, array($nucleos)); - - $fecha = now()->format('Y-m-d'); - CsvHelper::generarCsv('csv/exports/' . $this->nombre . '-completo-' . $fecha . '.csv', $records); - } - - public function agregarCantidad($pedido, $id, array $records, $fila, int $i): array - { - $producto = $pedido->productos()->find($id); - $cantidad = $producto == NULL ? 0 : $producto->pivot->cantidad; - $records[$fila][$i] = $cantidad; - $i++; - return array($records, $i, $cantidad); - } - public static function barriosMenosPrueba(): Builder { return self::where('nombre', '<>', 'PRUEBA') @@ -299,18 +184,6 @@ class GrupoDeCompra extends Model ->orderBy('nombre'); } - public static function transportePorBarrio(): array - { - $result = []; - $barrios = GrupoDeCompra::barriosMenosPrueba()->get(); - - foreach ($barrios as $barrio) { - $result[] = $barrio->cantidadTransporte(); - } - - return $result; - } - public function productosPedidos($excluirBonos = false, $orderBy = 'producto_nombre'): Collection { $query = DB::table('pedidos_aprobados') diff --git a/app/Producto.php b/app/Producto.php index b0ab3a4..0deffa6 100644 --- a/app/Producto.php +++ b/app/Producto.php @@ -57,77 +57,6 @@ class Producto extends Model return self::where('nombre', 'not like', '%barrial%'); } - static public function cantidadesPorBarrio(): Collection - { - $barrios = GrupoDeCompra::barriosMenosPrueba() - ->pluck('id', 'nombre'); - - $columnasBarrios = $barrios->map(function ($id, $nombre) { - return DB::raw(" - SUM(CASE WHEN subpedidos.grupo_de_compra_id = $id - AND subpedidos.aprobado = 1 - AND subpedidos.tipo_pedido_id = 1 - THEN producto_subpedido.cantidad - ELSE 0 END) - as `$nombre`"); - })->toArray(); - - return DB::table('productos') - ->where('productos.nombre', 'not like', '%barrial%') - ->leftJoin('producto_subpedido', 'productos.id', '=', 'producto_subpedido.producto_id') - ->leftJoin('subpedidos', 'subpedidos.id', '=', 'producto_subpedido.subpedido_id') - ->where('subpedidos.tipo_pedido_id', '=', 1) - ->select(array_merge( - ['productos.fila as fila'], - ['productos.nombre as producto'], - $columnasBarrios - )) - ->groupBy('productos.fila', 'productos.id', 'productos.nombre') - ->orderBy('productos.fila') - ->get(); - } - - /** - * @throws Exception - */ - static public function planillaTotales() - { - $headers = ['Producto']; - $barrios = GrupoDeCompra::barriosMenosPrueba()->pluck('nombre')->toArray(); - $headers = array_merge($headers, $barrios); - - $cantidadesPorBarrio = self::cantidadesPorBarrio(); - $transportePorBarrio = GrupoDeCompra::transportePorBarrio(); - $planilla = []; - $ultimaFila = 1; - $filaTransporte = TransporteHelper::filaTransporte(); - - foreach ($cantidadesPorBarrio as $productoCantidades) { - $fila = $productoCantidades->fila; - while ($fila - $ultimaFila > 1) { - $ultimaFila++; - if ($ultimaFila == $filaTransporte) { - $planilla[$ultimaFila] = ['Bono de transporte']; - } else { - $planilla[$ultimaFila] = ['---']; - } - } - $planilla[$fila] = [$productoCantidades->producto]; - foreach ($barrios as $barrio) { - $planilla[$fila][] = $productoCantidades->$barrio ?? 0; - } - $ultimaFila = $fila; - } - - foreach ($transportePorBarrio as $cantidad) { - $planilla[$filaTransporte][] = $cantidad; - } - - $fecha = now()->format('Y-m-d'); - $filePath = 'csv/exports/pedidos-por-barrio- ' . $fecha . '.csv'; - CsvHelper::generarCsv($filePath, $planilla, $headers); - } - public static function notasPorBarrio(): Collection { return DB::table('productos')