From 14361a858e085e1ca7c2c4082dfaa6b4a8574596 Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Wed, 4 Oct 2023 22:47:42 -0300 Subject: [PATCH] =?UTF-8?q?Devoluciones:=20modelo=20y=20sync=20Lo=20agregu?= =?UTF-8?q?=C3=A9=20a=20la=20base=20de=20datos=20y=20se=20sincroniza=20con?= =?UTF-8?q?=20un=20modal=20que=20se=20abre=20desde=20la=20chismosa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/SubpedidoController.php | 11 +++ app/Http/Resources/SubpedidoResource.php | 4 +- app/Subpedido.php | 18 ++++- ...0_09_23_180334_create_subpedidos_table.php | 2 + resources/js/app.js | 16 +++++ resources/js/components/Chismosa.vue | 18 +++++ resources/js/components/DevolucionesModal.vue | 67 +++++++++++++++++++ resources/views/productos.blade.php | 1 + routes/api.php | 1 + 9 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 resources/js/components/DevolucionesModal.vue 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

+ + -{{ this.$root.pedido.devoluciones_total }} + + + + + Total total @@ -65,6 +78,11 @@ return this.$limpiarInt(this.$root.pedido.total) } }, + methods: { + modificarDevoluciones: function() { + Event.$emit("modificar-devoluciones"); + }, + } } diff --git a/resources/js/components/DevolucionesModal.vue b/resources/js/components/DevolucionesModal.vue new file mode 100644 index 0000000..9d4862f --- /dev/null +++ b/resources/js/components/DevolucionesModal.vue @@ -0,0 +1,67 @@ + + + \ No newline at end of file diff --git a/resources/views/productos.blade.php b/resources/views/productos.blade.php index e3a6bdb..fd29893 100644 --- a/resources/views/productos.blade.php +++ b/resources/views/productos.blade.php @@ -5,4 +5,5 @@ + @endsection diff --git a/routes/api.php b/routes/api.php index fafd824..8a56d63 100644 --- a/routes/api.php +++ b/routes/api.php @@ -40,6 +40,7 @@ Route::middleware('api')->group(function () { Route::get('{subpedido}','Api\SubpedidoController@show'); Route::post('/','Api\SubpedidoController@store'); Route::post('/{subpedido}/sync', 'Api\SubpedidoController@syncProductos'); + Route::post('/{subpedido}/sync_devoluciones', 'Api\SubpedidoController@syncDevoluciones'); }); Route::prefix('admin')->group(function () {