belongsToMany('App\Subpedido', 'productos_subpedidos')->withPivot(["cantidad", "notas"]); } public function proveedor() { return $this->belongsTo('App\Proveedor'); } public function pagaTransporte() { return !($this->bono || Str::contains($this->categoria, 'SUBSIDIADO')); } //Este método permite que se apliquen los filtros al hacer una request (por ejemplo, de búsqueda) public function scopeFiltrar($query, FiltroDeProducto $filtros) { return $filtros->aplicar($query); } public static function getPaginar(Request $request) { return $request->has('paginar') && intval($request->input('paginar')) ? intval($request->input('paginar')) : self::$paginarPorDefecto; } public static function productosFilaID() { return Producto::pluck('id', 'fila',)->all(); } public static function productosIDFila() { return Producto::pluck('fila', 'id',)->all(); } public static function productosIDNombre() { return Producto::pluck('nombre', 'id',)->all(); } static public function cantidadesPorBarrio() { $barrios = DB::table('grupos_de_compra') ->where('nombre', '<>', 'PRUEBA') ->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 THEN producto_subpedido.cantidad ELSE 0 END) as `$nombre`"); })->toArray(); return DB::table('productos') ->where('productos.nombre','not like','%barrial%') ->join('producto_subpedido', 'productos.id', '=', 'producto_subpedido.producto_id') ->join('subpedidos', 'subpedidos.id', '=', 'producto_subpedido.subpedido_id') ->select(array_merge( ['productos.fila as fila'], ['productos.nombre as producto'], $columnasBarrios )) ->groupBy('productos.fila','productos.id','productos.nombre') ->orderBy('productos.fila') ->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()); } } }