belongsTo('App\GrupoDeCompra'); } public function productos() { return $this->belongsToMany('App\Producto')->withPivot(["cantidad","total"]); } private function subtotalSinBDT() { return $this->productos()->sum('total'); } private function productosQuePaganBDT() { return $this->productos()->where('paga_bono_de_transporte', true); } //Subtotal de dinero de productos del pedido, sin bonos ni transporte private function subtotalProductosQuePaganBDT() { return $this->productosQuePaganBDT()->sum('total'); } //Cantidad de bonos de transporte public function cantidadBDT() { return ceil($this->subtotalProductosQuePaganBDT() / 500); } //Subtotal de dinero de bonos de transporte public function subtotalBDT() { return $this->cantidadBDT() * 15; } public function getTotal() { return $this->subtotalSinBDT() + $this->subtotalBDT(); } //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); } //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); } } public function toggleAprobacion(bool $aprobacion) { $this->aprobado = $aprobacion; $this->save(); } public function generarHTML() { $view = view("pdfgen.subpedido_tabla", ["subpedido" => $this]); return $view->render(); } }