From a8057a2376b109a3279733371c8e50601449e009 Mon Sep 17 00:00:00 2001 From: ale Date: Tue, 9 Jul 2024 21:36:47 -0300 Subject: [PATCH] Interfaz simplificada + arreglos varios --- app/Models/Pedido.php | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/app/Models/Pedido.php b/app/Models/Pedido.php index c9f0d94..488f0c9 100644 --- a/app/Models/Pedido.php +++ b/app/Models/Pedido.php @@ -26,13 +26,13 @@ public function barrio(): BelongsTo { return $this->belongsTo(Barrio::class); } - function togglePagado() : bool { + public function togglePagado() : bool { $this->pagado = !$this->pagado; $this->save(); return $this->pagado; } - function toggleTerminado() : bool { + public function toggleTerminado() : bool { $this->terminado = !$this->terminado; $this->save(); return $this->terminado; @@ -45,11 +45,18 @@ public function productos(): BelongsToMany { return $this->belongsToMany(Producto::class)->withPivot(['cantidad']); } - function agregarProducto(Producto $producto, int $cantidad) { + public function productosConTransporte() { + return $this->productos()->where(['bono' => false, 'barrial' => false])->get(); + } + + public function agregarProducto(Producto $producto, int $cantidad) : Producto { $productoEnChismosa = $this->productos()->where('id', $producto->id)->first(); if ($productoEnChismosa) { $productoEnChismosa->pivot->cantidad += $cantidad; - $productoEnChismosa->save(); + if ($productoEnChismosa->pivot->cantidad != 0) + $productoEnChismosa->save(); + else + $this->quitarProducto($producto); return $productoEnChismosa; } else { $this->productos()->attach($producto, ['cantidad' => $cantidad]); @@ -57,7 +64,7 @@ function agregarProducto(Producto $producto, int $cantidad) { } } - function quitarProducto(Producto $producto) { + public function quitarProducto(Producto $producto) { $this->productos()->detach($producto); } @@ -65,8 +72,8 @@ function quitarProducto(Producto $producto) { * El total de los productos del pedido * sumado al total de los bonos de transporte */ - function totalChismosa() : float { - return $this->totalProductos() + $this->totalTransporte(); + public function totalATransferir() : float { + return $this->totalProductos() + $this->totalBonosDeTransporte(); } /** @@ -77,22 +84,21 @@ function totalChismosa() : float { * Si la colección es null o no se pasa ningún parámetro * se toman todos los productos del pedido. */ - function totalProductos($productos = null) : float { + private function totalProductos($productos = null) { if (!$productos) - $productos = $this->productos(); + $productos = $this->productos()->get(); - return $productos->sum(fn($p) => $p->price * $p->pivot->cantidad); + return $productos->map( + fn($producto) => $producto->precio * $producto->pivot->cantidad + )->sum(); } /** * El total de bonos de transporte del pedido */ - function totalBonosDeTransporte() : int { - return TransporteUtils::calcularTotal($this->productosConTransporte()); - } - - function totalATransferir() : float { - $productos = $this->productos()->where(['bono' => false, 'barrial' => false])->get(); - return $this->totalProductos($productos); + public function totalBonosDeTransporte() : int { + return TransporteUtils::calcularTotal( + $this->totalProductos($this->productosConTransporte()) + ); } }