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 ;
2022-01-07 18:02:48 -03:00
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' ];
2022-12-02 18:44:29 -03:00
public function grupoDeCompra ()
2021-12-30 13:12:14 -03:00
{
2022-12-02 18:44:29 -03:00
return $this -> belongsTo ( 'App\GrupoDeCompra' );
2021-12-30 13:12:14 -03:00
}
2022-12-02 18:44:29 -03:00
public function productos ()
2022-02-23 19:52:52 -03:00
{
2022-12-02 18:44:29 -03:00
return $this -> belongsToMany ( 'App\Producto' ) -> withPivot ([ " cantidad " , " total " ]);
2022-02-23 19:52:52 -03:00
}
2022-12-02 18:44:29 -03:00
private function subtotalSinBDT ()
2022-02-23 19:52:52 -03:00
{
2022-12-02 18:44:29 -03:00
return $this -> productos () -> sum ( 'total' );
2022-02-23 19:52:52 -03:00
}
2022-12-02 18:44:29 -03:00
private function productosQuePaganBDT ()
2021-12-30 13:12:14 -03:00
{
2022-12-02 18:44:29 -03:00
return $this -> productos () -> where ( 'paga_bono_de_transporte' , true );
2022-01-07 18:02:48 -03:00
}
2022-02-23 19:52:52 -03:00
//Subtotal de dinero de productos del pedido, sin bonos ni transporte
2022-12-02 18:44:29 -03:00
private function subtotalProductosQuePaganBDT ()
2022-02-23 19:52:52 -03:00
{
2022-12-02 18:44:29 -03:00
return $this -> productosQuePaganBDT () -> sum ( 'total' );
2022-02-23 19:52:52 -03:00
}
//Cantidad de bonos de transporte
public function cantidadBDT ()
{
2022-12-02 18:44:29 -03:00
return ceil ( $this -> subtotalProductosQuePaganBDT () / 500 );
2022-02-23 19:52:52 -03:00
}
//Subtotal de dinero de bonos de transporte
2022-12-02 18:44:29 -03:00
public function subtotalBDT ()
2022-02-23 19:52:52 -03:00
{
return $this -> cantidadBDT () * 15 ;
}
2022-12-02 18:44:29 -03:00
public function getTotal ()
2022-02-23 19:52:52 -03:00
{
2022-12-02 18:44:29 -03:00
return $this -> subtotalSinBDT () + $this -> subtotalBDT ();
2022-02-23 19:52:52 -03:00
}
2022-12-02 18:44:29 -03:00
//Permite que se apliquen los filtros al hacer una request (por ejemplo, de búsqueda)
public function scopeFiltrar ( $query , FiltroDeSubpedido $filtros )
2022-02-23 19:52:52 -03:00
{
2022-12-02 18:44:29 -03:00
return $filtros -> aplicar ( $query );
2022-02-23 19:52:52 -03:00
}
//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.
public function syncProducto ( Producto $producto , Int $cantidad ) {
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 ,
'total' => $cantidad * $producto -> precio
]
]);
} else {
//si la cantidad es 0, se elimina el producto del subpedido
$this -> productos () -> detach ( $producto -> id );
}
}
2022-06-08 22:19:44 -03:00
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 ();
}
2021-12-30 13:12:14 -03:00
}