Compare commits

..

No commits in common. "82f58620635eb2e0971ce19746d736308d96cb42" and "b4ca119f9a87448d7f6ebaaddf0c7cfda122654f" have entirely different histories.

7 changed files with 13 additions and 61 deletions

View File

@ -79,7 +79,6 @@ class SubpedidoController extends Controller
$valid = request()->validate([ $valid = request()->validate([
'cantidad' => 'required|min:0', 'cantidad' => 'required|min:0',
'notas' => 'required',
'producto_id' => [ 'producto_id' => [
'required', 'required',
Rule::in(Producto::all()->pluck('id')), Rule::in(Producto::all()->pluck('id')),
@ -87,7 +86,7 @@ class SubpedidoController extends Controller
]); ]);
$producto = Producto::find($valid['producto_id']); $producto = Producto::find($valid['producto_id']);
$subpedido->syncProducto($producto, $valid['cantidad'], $valid['notas']); $subpedido->syncProducto($producto, $valid['cantidad']);
return new SubpedidoResource($subpedido); return new SubpedidoResource($subpedido);
} }

View File

@ -15,7 +15,7 @@ class Producto extends Model
public function subpedidos() public function subpedidos()
{ {
return $this->belongsToMany('App\Subpedido','productos_subpedidos')->withPivot(["cantidad", "notas"]); return $this->belongsToMany('App\Subpedido','productos_subpedidos')->withPivot(["cantidad"]);
} }
public function proveedor() public function proveedor()

View File

@ -15,7 +15,7 @@ class Subpedido extends Model
public function productos() public function productos()
{ {
return $this->belongsToMany('App\Producto')->withPivot(["cantidad","total", "notas"]); return $this->belongsToMany('App\Producto')->withPivot(["cantidad","total"]);
} }
//Bonos del MPS, Sororo, etc. NO devuelve bonos de transporte //Bonos del MPS, Sororo, etc. NO devuelve bonos de transporte
@ -84,14 +84,13 @@ class Subpedido extends Model
} }
//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. //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, string $notas) { public function syncProducto(Producto $producto, Int $cantidad) {
if ($cantidad){ if ($cantidad){
//si la cantidad es 1 o más se agrega el producto o actualiza la cantidad //si la cantidad es 1 o más se agrega el producto o actualiza la cantidad
$this->productos()->syncWithoutDetaching([ $this->productos()->syncWithoutDetaching([
$producto->id => [ $producto->id => [
'cantidad' => $cantidad, 'cantidad' => $cantidad,
'total' => $cantidad * $producto->precio, 'total' => $cantidad * $producto->precio
'notas' => $notas,
] ]
]); ]);
} else { } else {

View File

@ -1,34 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class NotasProducto extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('producto_subpedido', function (Blueprint $table) {
$table->string('notas');
$table->boolean('requiere-notas');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('producto_subpedido', function (Blueprint $table) {
$table->dropColumn('notas');
$table->dropColumn('requiere-notas');
});
}
}

9
resources/js/app.js vendored
View File

@ -72,10 +72,6 @@ const app = new Vue({
cantidad(producto) { cantidad(producto) {
let pedido = this.productos.some(p => p.id == producto.id) let pedido = this.productos.some(p => p.id == producto.id)
return pedido ? this.productos.find(p => p.id == producto.id).pivot.cantidad : 0 return pedido ? this.productos.find(p => p.id == producto.id).pivot.cantidad : 0
},
notas(producto) {
let pedido = this.productos.some(p => p.id == producto.id);
return pedido ? this.productos.find(p => p.id == producto.id).pivot.notas : "";
}, },
settearDevoluciones() { settearDevoluciones() {
axios.get(`/api/grupos-de-compra/${this.gdc}/devoluciones`) axios.get(`/api/grupos-de-compra/${this.gdc}/devoluciones`)
@ -104,15 +100,14 @@ const app = new Vue({
} }
}) })
}) })
Event.$on('sync-subpedido', (cantidad, id, notas) => { Event.$on('sync-subpedido', (cantidad, id) => {
if (this.pedido.aprobado) { if (this.pedido.aprobado) {
this.$toast('No se puede modificar un pedido ya aprobado', 2000); this.$toast('No se puede modificar un pedido ya aprobado', 2000);
return; return;
} }
axios.post("/api/subpedidos/" + this.pedido.id + "/sync", { axios.post("/api/subpedidos/" + this.pedido.id + "/sync", {
cantidad: cantidad, cantidad: cantidad,
producto_id: id, producto_id: id
notas: notas,
}).then((response) => { }).then((response) => {
this.pedido = response.data.data this.pedido = response.data.data
this.$toast('Pedido actualizado exitosamente') this.$toast('Pedido actualizado exitosamente')

View File

@ -8,13 +8,12 @@ export default {
return { return {
cantidad: this.producto.cantidad, cantidad: this.producto.cantidad,
enChismosa: this.producto.cantidad, enChismosa: this.producto.cantidad,
notas: this.producto.notas,
} }
}, },
mounted() { mounted() {
Event.$on('sync-subpedido', (cantidad, productoId, notas) => { Event.$on('sync-subpedido', (cantidad,productoId) => {
if (this.producto.id === productoId) if (this.producto.id === productoId)
this.sincronizar(cantidad, notas); this.sincronizar(cantidad);
}); });
}, },
methods: { methods: {
@ -25,21 +24,19 @@ export default {
this.cantidad += 1; this.cantidad += 1;
}, },
confirmar() { confirmar() {
Event.$emit('sync-subpedido', this.cantidad, this.producto.id, this.notas); Event.$emit('sync-subpedido', this.cantidad, this.producto.id);
}, },
borrar() { borrar() {
this.cantidad = 0; this.cantidad = 0;
this.confirmar(); this.confirmar();
}, },
sincronizar(cantidad, notas) { sincronizar(cantidad) {
this.cantidad = cantidad; this.cantidad = cantidad;
this.producto.cantidad = cantidad; this.producto.cantidad = cantidad;
this.enChismosa = cantidad; this.enChismosa = cantidad;
this.notas = notas;
this.producto.notas = notas;
}, },
hayCambios() { hayCambios() {
return this.cantidad != this.enChismosa || this.notas != this.producto.notas; return this.cantidad != this.enChismosa;
}, },
puedeBorrar() { puedeBorrar() {
return this.enChismosa > 0; return this.enChismosa > 0;
@ -96,7 +93,6 @@ export default {
</span> </span>
</button> </button>
</div> </div>
Notas: <input v-model="notas" />
</div> </div>
<div class="column"> <div class="column">
<p class="subtitle is-7 is-hidden-mobile" v-if="enChismosa !== 0">{{ enChismosa }} en chismosa</p> <p class="subtitle is-7 is-hidden-mobile" v-if="enChismosa !== 0">{{ enChismosa }} en chismosa</p>

View File

@ -37,10 +37,7 @@ export default {
params: this.params(filtro,valor) params: this.params(filtro,valor)
}).then(response => { }).then(response => {
this.productos = response.data.data; this.productos = response.data.data;
this.productos.forEach(p => { this.productos.forEach(p => p.cantidad = this.$root.cantidad(p))
p.cantidad = this.$root.cantidad(p);
p.notas = this.$root.notas(p);
});
}); });
this.visible = true; this.visible = true;
Event.$emit("migas-agregar",this.miga); Event.$emit("migas-agregar",this.miga);