Agregada funcion que genera planilla de totales por barrio

This commit is contained in:
Alejandro Tasistro 2024-11-25 21:44:03 -03:00
parent f5f9838fc3
commit d170f9e46e
1 changed files with 41 additions and 3 deletions

View File

@ -7,6 +7,8 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use League\Csv\CannotInsertRecord;
use League\Csv\Writer;
class Producto extends Model class Producto extends Model
{ {
@ -58,7 +60,7 @@ class Producto extends Model
static public function cantidadesPorBarrio() static public function cantidadesPorBarrio()
{ {
$barrios = DB::table('grupos_de_compra') $barrios = DB::table('grupos_de_compra')
->where('nombre') ->where('nombre', '<>', 'PRUEBA')
->pluck('id', 'nombre'); ->pluck('id', 'nombre');
$columnasBarrios = $barrios->map(function ($id, $nombre) { $columnasBarrios = $barrios->map(function ($id, $nombre) {
@ -66,13 +68,49 @@ class Producto extends Model
})->toArray(); })->toArray();
return DB::table('productos') return DB::table('productos')
->where('productos.nombre','not like','%barrial%')
->join('producto_subpedido', 'productos.id', '=', 'producto_subpedido.producto_id') ->join('producto_subpedido', 'productos.id', '=', 'producto_subpedido.producto_id')
->join('subpedidos', 'subpedidos.id', '=', 'producto_subpedido.subpedido_id') ->join('subpedidos', 'subpedidos.id', '=', 'producto_subpedido.subpedido_id')
->select(array_merge( ->select(array_merge(
['productos.nombre as Product'], ['productos.fila as fila'],
['productos.nombre as producto'],
$columnasBarrios $columnasBarrios
)) ))
->groupBy('productos.id', 'productos.nombre') ->groupBy('productos.fila','productos.id','productos.nombre')
->orderBy('productos.fila')
->get(); ->get();
} }
static public function planillaTotales() {
$headers = ['Producto'];
$barrios = DB::table('grupos_de_compra')->pluck('nombre')->toArray();
$headers = array_merge($headers, $barrios);
$cantidadesPorBarrio = Producto::cantidadesPorBarrio();
$planilla = [];
$ultimaFila = 1;
foreach ($cantidadesPorBarrio as $productoCantidades) {
$fila = $productoCantidades->fila;
while ($fila - $ultimaFila > 1) {
$producto = Producto::where('fila', $ultimaFila)->first();
$planilla[$ultimaFila] = [$producto ? $producto->nombre : ''];
$ultimaFila++;
}
$planilla[$fila] = [$productoCantidades->producto];
foreach ($barrios as $barrio) {
$planilla[$fila][] = $productoCantidades->$barrio ?? 0;
}
$ultimaFila = $fila;
}
// Guardar en un archivo .csv
try {
$writer = Writer::createFromPath(resource_path('csv/exports/total-pedidos.csv'), 'w');
$writer->insertOne($headers);
$writer->insertAll($planilla);
} catch (CannotInsertRecord $e) {
var_export($e->getRecords());
}
}
} }