Agregada funcion que genera tabla de totales por producto

This commit is contained in:
Alejandro Tasistro 2024-11-25 17:20:04 -03:00
parent c58f24d2d0
commit f5f9838fc3
3 changed files with 300 additions and 349 deletions

View File

@ -2,52 +2,77 @@
namespace App; namespace App;
use App\Filtros\FiltroDeProducto;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Filtros\FiltroDeProducto; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str; use Illuminate\Support\Str;
class Producto extends Model class Producto extends Model
{ {
public $timestamps = false; public $timestamps = false;
protected $fillable = [ "nombre", "precio", "presentacion", "stock", "categoria" ]; protected $fillable = ["nombre", "precio", "presentacion", "stock", "categoria"];
static $paginarPorDefecto = 10; static $paginarPorDefecto = 10;
public function subpedidos() public function subpedidos()
{ {
return $this->belongsToMany('App\Subpedido','productos_subpedidos')->withPivot(["cantidad", "notas"]); return $this->belongsToMany('App\Subpedido', 'productos_subpedidos')->withPivot(["cantidad", "notas"]);
} }
public function proveedor() public function proveedor()
{ {
return $this->belongsTo('App\Proveedor'); return $this->belongsTo('App\Proveedor');
} }
public function pagaTransporte() { public function pagaTransporte()
return !($this->bono || Str::contains($this->categoria, 'SUBSIDIADO')); {
} 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) //Este método permite que se apliquen los filtros al hacer una request (por ejemplo, de búsqueda)
public function scopeFiltrar($query, FiltroDeProducto $filtros) public function scopeFiltrar($query, FiltroDeProducto $filtros)
{ {
return $filtros->aplicar($query); return $filtros->aplicar($query);
} }
public static function getPaginar(Request $request) public static function getPaginar(Request $request)
{ {
return $request->has('paginar') && intval($request->input('paginar')) ? intval($request->input('paginar')) : self::$paginarPorDefecto; return $request->has('paginar') && intval($request->input('paginar')) ? intval($request->input('paginar')) : self::$paginarPorDefecto;
} }
public static function productosFilaID() { public static function productosFilaID()
return Producto::pluck('id', 'fila',)->all(); {
} return Producto::pluck('id', 'fila',)->all();
}
public static function productosIDFila() { public static function productosIDFila()
return Producto::pluck('fila', 'id',)->all(); {
} return Producto::pluck('fila', 'id',)->all();
}
public static function productosIDNombre() { public static function productosIDNombre()
return Producto::pluck('nombre', 'id',)->all(); {
} return Producto::pluck('nombre', 'id',)->all();
}
static public function cantidadesPorBarrio()
{
$barrios = DB::table('grupos_de_compra')
->where('nombre')
->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')
->join('producto_subpedido', 'productos.id', '=', 'producto_subpedido.producto_id')
->join('subpedidos', 'subpedidos.id', '=', 'producto_subpedido.subpedido_id')
->select(array_merge(
['productos.nombre as Product'],
$columnasBarrios
))
->groupBy('productos.id', 'productos.nombre')
->get();
}
} }

View File

@ -8,7 +8,7 @@
], ],
"license": "MIT", "license": "MIT",
"require": { "require": {
"php": "^7.3", "php": "^7.4",
"fideloper/proxy": "^4.4", "fideloper/proxy": "^4.4",
"fruitcake/laravel-cors": "^2.0", "fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^6.3.1|^7.0.1", "guzzlehttp/guzzle": "^6.3.1|^7.0.1",

556
composer.lock generated

File diff suppressed because it is too large Load Diff