pedi2/app/Subpedido.php

126 lines
3.5 KiB
PHP
Raw Permalink Normal View History

2021-12-30 13:12:14 -03:00
<?php
namespace App;
use League\Csv\Reader;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Log;
use App\Filtros\FiltroDeSubpedido;
2021-12-30 13:12:14 -03:00
class Subpedido extends Model
{
public $timestamps = false;
protected $fillable = ['grupo_de_compra_id', 'aprobado', 'nombre', 'devoluciones_total', 'devoluciones_notas'];
2021-12-30 13:12:14 -03:00
public function productos()
{
2024-09-17 21:27:58 -03:00
return $this->belongsToMany('App\Producto')->withPivot(["cantidad","total", "notas"]);
2021-12-30 13:12:14 -03:00
}
//Bonos del MPS, Sororo, etc. NO devuelve bonos de transporte
private function bonos()
{
return $this->productos()->where('bono',1);
}
2022-09-06 21:38:01 -03:00
public function productosSinBonos()
{
return $this->productos()->where('bono',false);
}
2021-12-30 13:12:14 -03:00
public function grupoDeCompra()
{
return $this->belongsTo('App\GrupoDeCompra');
}
//Permite que se apliquen los filtros al hacer una request (por ejemplo, de búsqueda)
public function scopeFiltrar($query, FiltroDeSubpedido $filtros)
{
return $filtros->aplicar($query);
}
//Subtotal de dinero de productos del pedido, sin bonos ni transporte
public function totalSinBonos()
{
return $this->productosSinBonos()->sum('total');
}
2024-09-05 13:34:33 -03:00
public function totalParaTransporte() {
$total = 0;
foreach ($this->productos()->get() as $producto) {
if ($producto->pagaTransporte()) {
$total += $producto->precio * $producto->pivot->cantidad;
}
}
return ceil($total);
2024-09-05 13:34:33 -03:00
}
//Cantidad de bonos de transporte
public function cantidadBDT()
{
2024-09-05 13:34:33 -03:00
return ceil($this->totalParaTransporte() / 500);
}
//Subtotal de dinero de bonos de transporte
public function getSubtotalBDT()
{
return $this->cantidadBDT() * 15;
}
//Subtotal de dinero de bonos (MPS, Sororo, etc)
public function getSubtotalBonos()
{
return $this->bonos()->sum('total');
}
public function getTotal()
{
2023-10-05 12:58:03 -03:00
return $this->totalSinBonos() + $this->getSubtotalBDT() + $this->getSubtotalBonos();
}
public function getTotalMenosDevoluciones() {
return $this->getTotal() - $this->getDevoluciones();
}
//Actualiza el pedido, agregando o quitando del subpedido según sea necesario. Debe ser llamado desde el controlador de subpedidos, luego de validar que los parámetros $producto y $cantidad son correctos. También calcula el subtotal por producto.
2024-09-17 21:27:58 -03:00
public function syncProducto(Producto $producto, Int $cantidad, string $notas) {
if ($cantidad){
//si la cantidad es 1 o más se agrega el producto o actualiza la cantidad
$this->productos()->syncWithoutDetaching([
$producto->id => [
'cantidad' => $cantidad,
2024-09-17 21:27:58 -03:00
'total' => $cantidad * $producto->precio,
'notas' => $notas,
]
]);
} else {
//si la cantidad es 0, se elimina el producto del subpedido
$this->productos()->detach($producto->id);
}
}
public function toggleAprobacion(bool $aprobacion) {
$this->aprobado = $aprobacion;
$this->save();
}
2022-09-06 21:38:01 -03:00
public function generarHTML() {
$view = view("pdfgen.subpedido_tabla", ["subpedido" => $this]);
return $view->render();
}
2024-09-05 13:34:33 -03:00
public function getDevoluciones() {
return $this->devoluciones_total;
}
2024-09-05 13:34:33 -03:00
public function getNotasDevoluciones() {
return $this->devoluciones_notas;
}
public function syncDevoluciones(float $total, string $notas) {
$this->devoluciones_total = $total;
$this->devoluciones_notas = $notas;
$this->save();
}
2021-12-30 13:12:14 -03:00
}