diff --git a/app/Http/Controllers/Api/SubpedidoController.php b/app/Http/Controllers/Api/SubpedidoController.php index a03e5ee..f2b25ed 100644 --- a/app/Http/Controllers/Api/SubpedidoController.php +++ b/app/Http/Controllers/Api/SubpedidoController.php @@ -97,5 +97,16 @@ class SubpedidoController extends Controller $subpedido->toggleAprobacion($valid['aprobacion']); return new SubpedidoResource($subpedido); } + + public function syncDevoluciones(Subpedido $subpedido) { + if ($subpedido->aprobado) return new SubpedidoResource($subpedido); + $valid = request()->validate([ + 'total' => 'required|min:0', + 'notas' => 'required', + ]); + $subpedido->syncDevoluciones($valid['total'], $valid['notas']); + + return new SubpedidoResource($subpedido); + } } diff --git a/app/Http/Resources/SubpedidoResource.php b/app/Http/Resources/SubpedidoResource.php index bd53b85..9115e40 100644 --- a/app/Http/Resources/SubpedidoResource.php +++ b/app/Http/Resources/SubpedidoResource.php @@ -24,7 +24,9 @@ class SubpedidoResource extends JsonResource 'total' => number_format($this->getTotal(),0), 'grupo_de_compra' => $this->grupoDeCompra, 'productos' => $this->productos, - 'aprobado' => (bool) $this->aprobado + 'aprobado' => (bool) $this->aprobado, + 'devoluciones_total' => (double) $this->devoluciones_total, + 'devoluciones_notas' => $this->devoluciones_notas ]; } } diff --git a/app/Subpedido.php b/app/Subpedido.php index 8b64a24..d5581dc 100644 --- a/app/Subpedido.php +++ b/app/Subpedido.php @@ -11,7 +11,7 @@ use App\Filtros\FiltroDeSubpedido; class Subpedido extends Model { public $timestamps = false; - protected $fillable = ['grupo_de_compra_id', 'aprobado', 'nombre']; + protected $fillable = ['grupo_de_compra_id', 'aprobado', 'nombre', 'devoluciones_total', 'devoluciones_notas']; public function productos() { @@ -66,7 +66,7 @@ class Subpedido extends Model public function getTotal() { - return $this->totalSinBonos() + $this->getSubtotalBDT() + $this->getSubtotalBonos(); + return $this->totalSinBonos() + $this->getSubtotalBDT() + $this->getSubtotalBonos() - $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. @@ -94,5 +94,17 @@ class Subpedido extends Model $view = view("pdfgen.subpedido_tabla", ["subpedido" => $this]); return $view->render(); } - + + public function getDevoluciones() { + return $this->devoluciones_total; + } + + public function getNotasDevoluciones() { + return $this->devoluciones_notas; + } + public function syncDevoluciones(float $total, string $notas) { + $this->devoluciones_total = $total; + $this->devoluciones_notas = $notas; + $this->save(); + } } diff --git a/database/migrations/2020_09_23_180334_create_subpedidos_table.php b/database/migrations/2020_09_23_180334_create_subpedidos_table.php index 7ef83f3..f116f33 100644 --- a/database/migrations/2020_09_23_180334_create_subpedidos_table.php +++ b/database/migrations/2020_09_23_180334_create_subpedidos_table.php @@ -18,6 +18,8 @@ class CreateSubpedidosTable extends Migration $table->string('nombre'); $table->foreignId('grupo_de_compra_id'); $table->boolean('aprobado')->default(false); + $table->double('devoluciones_total', 10, 2)->default(0); + $table->string('devoluciones_notas')->default(""); $table->timestamps(); }); diff --git a/resources/js/app.js b/resources/js/app.js index 9642940..1c3b1a6 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -98,6 +98,22 @@ const app = new Vue({ this.$toast('Pedido actualizado exitosamente') }); }); + // Actualizar monto y notas de devoluciones + Event.$on('sync-devoluciones', (total, notas) => { + if (this.pedido.aprobado) { + this.$toast('No se puede modificar un pedido ya aprobado', 2000); + return; + } + + axios.post("api/subpedidos/" + this.pedido.id + "/sync_devoluciones", { + total: total, + notas: notas, + }).then((response) => { + this.pedido = response.data.data; + this.$toast('Pedido actualizado'); + }); + }); + Event.$on('aprobacion-subpedido', (subpedidoId, aprobado) => { axios.post("/api/admin/subpedidos/" + subpedidoId + "/aprobacion", { aprobacion: aprobado diff --git a/resources/js/components/Chismosa.vue b/resources/js/components/Chismosa.vue index e03c79f..82b5f3f 100644 --- a/resources/js/components/Chismosa.vue +++ b/resources/js/components/Chismosa.vue @@ -25,6 +25,19 @@
Devoluciones
Devoluciones
+ ++ Total: + +
++ Notas: + +
+