ComprasController + hice estáticos algunos métodos + primeros pasos hacia total de pedidos de los barrios

This commit is contained in:
Alejandro Tasistro 2024-08-27 20:57:11 -03:00
parent 48e1a04bae
commit 2beda0bf5b
2 changed files with 66 additions and 26 deletions

View File

@ -2,11 +2,11 @@
namespace App; namespace App;
use App\Producto;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Mpdf\Mpdf; use Mpdf\Mpdf;
use League\Csv\CannotInsertRecord; use League\Csv\CannotInsertRecord;
use League\Csv\Writer; use League\Csv\Writer;
use App\Producto;
use DB; use DB;
use League\Csv\Reader; use League\Csv\Reader;
@ -40,7 +40,8 @@ class GrupoDeCompra extends Model
$mpdf->Output($filename, "D"); $mpdf->Output($filename, "D");
} }
function filaVacia(string $product, int $columns) { static function filaVacia(string $product, int $columns): array
{
$fila = [$product]; $fila = [$product];
for ($i = 1; $i <= $columns; $i++) { for ($i = 1; $i <= $columns; $i++) {
$fila[$i] = "0"; $fila[$i] = "0";
@ -49,23 +50,23 @@ class GrupoDeCompra extends Model
} }
//Asume que los productos están gruadados en orden de fila //Asume que los productos están gruadados en orden de fila
public function obtenerTemplateDeFilasVacias(int $columns){ public static function obtenerTemplateDeFilasVacias(int $columns){
$productosFilaID = Producto::productosFilaID(); $productosFilaID = Producto::productosFilaID();
$productosIDNombre = Producto::productosIDNombre(); $productosIDNombre = Producto::productosIDNombre();
$num_fila = 1; $num_fila = 1;
$template = []; $template = [];
foreach ($productosFilaID as $fila => $id) { foreach ($productosFilaID as $fila => $id) {
for ($i = $num_fila; $i < $fila; $i++) { for ($i = $num_fila; $i < $fila; $i++) {
$template[$i] = $this->filaVacia("", $columns); $template[$i] = GrupoDeCompra::filaVacia("", $columns);
} }
$template[$fila] = $this->filaVacia($productosIDNombre[$id], $columns); $template[$fila] = GrupoDeCompra::filaVacia($productosIDNombre[$id], $columns);
$num_fila = $fila+1; $num_fila = $fila+1;
} }
$template[$this->obtenerFilaDeBonoTransporte()] = $this->filaVacia("Bonos de transporte", $columns); $template[GrupoDeCompra::obtenerFilaDeBonoTransporte()] = GrupoDeCompra::filaVacia("Bonos de transporte", $columns);
return $template; return $template;
} }
private function obtenerFilaDeBonoTransporte() { private static function obtenerFilaDeBonoTransporte() {
$csv = Reader::createFromPath(resource_path('csv/productos.csv'), 'r'); $csv = Reader::createFromPath(resource_path('csv/productos.csv'), 'r');
$csv->setDelimiter("|"); $csv->setDelimiter("|");
$csv->setEnclosure("'"); $csv->setEnclosure("'");
@ -105,10 +106,24 @@ class GrupoDeCompra extends Model
} }
public function exportarPedidoEnCSV(){ public function exportarPedidoEnCSV(){
$records = $this->generarColumnaCantidades();
try {
$writer = Writer::createFromPath(resource_path('csv/exports/'.$this->nombre.'.csv'), 'w');
$writer->insertAll($records);
} catch (CannotInsertRecord $e) {
var_export($e->getRecords());
}
}
public function generarColumnaCantidades() {
$productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id',$this->id)->get()->keyBy('producto_id'); $productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id',$this->id)->get()->keyBy('producto_id');
//si no hay pedidos aprobados, salir //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; } if ($productos_en_pedido->count() == 0) {
\Log::debug("El grupo de compra ". $this->nombre . " no tiene pedidos aprobados.");
return [];
}
$records = $this->obtenerTemplateDeFilasVacias(1); $records = $this->obtenerTemplateDeFilasVacias(1);
$productos_id_fila = Producto::productosIdFila(); $productos_id_fila = Producto::productosIdFila();
foreach ($productos_en_pedido as $id => $producto_pedido){ foreach ($productos_en_pedido as $id => $producto_pedido){
@ -118,19 +133,17 @@ class GrupoDeCompra extends Model
$records[$this->obtenerFilaDeBonoTransporte()][1] = $this->calcularCantidadBDT(); $records[$this->obtenerFilaDeBonoTransporte()][1] = $this->calcularCantidadBDT();
try { return $records;
$writer = Writer::createFromPath(resource_path('csv/exports/'.$this->nombre.'.csv'), 'w');
$writer->insertAll($records);
} catch (CannotInsertRecord $e) {
var_export($e->getRecords());
}
} }
public function exportarPedidoConNucleosEnCSV() { public function exportarPedidoConNucleosEnCSV() {
$productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id',$this->id)->get()->keyBy('producto_id'); $productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id',$this->id)->get()->keyBy('producto_id');
// si no hay pedidos aprobados, salir // 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; } if ($productos_en_pedido->count() == 0) {
\Log::debug("El grupo de compra ". $this->nombre . " no tiene pedidos aprobados.");
return;
}
$pedidos = $this->pedidosAprobados(); $pedidos = $this->pedidosAprobados();
// Generar tabla vacía con una columna por núcleo // Generar tabla vacía con una columna por núcleo
@ -167,6 +180,19 @@ class GrupoDeCompra extends Model
public static function exportarTodosLosPedidosEnCSV(){ public static function exportarTodosLosPedidosEnCSV(){
$gdcs = GrupoDeCompra::all(); $gdcs = GrupoDeCompra::all();
foreach ($gdcs as $gdc){ $gdc->exportarPedidoEnCSV(); } $planilla = GrupoDeCompra::obtenerTemplateDeFilasVacias($gdcs->count());
$barrios = [""];
foreach ($gdcs as $gdc) {
$barrios[] = $gdc->nombre;
}
array_splice($planilla, 0, 0, array($barrios));
// Guardar en un archivo .csv
try {
$writer = Writer::createFromPath(resource_path('csv/exports/total-pedidos.csv'), 'w');
$writer->insertAll($planilla);
} catch (CannotInsertRecord $e) {
var_export($e->getRecords());
}
} }
} }

View File

@ -0,0 +1,14 @@
<?php
namespace App\Http\Controllers;
use App\GrupoDeCompra;
class ComprasController
{
public function pedidos() {
GrupoDeCompra::exportarTodosLosPedidosEnCSV();
$file = resource_path('csv/exports/total-pedidos.csv');
return response()->download($file);
}
}