Agregada lógica de cantidad de ollas

This commit is contained in:
Alejandro Tasistro 2025-06-23 22:49:28 -03:00
parent 5a1d95c636
commit a0ee4131c8
3 changed files with 51 additions and 21 deletions

View file

@ -1,14 +1,42 @@
<script> <script>
import { mapMutations, mapState } from "vuex"; import { mapActions, mapMutations, mapState } from "vuex";
export default { export default {
name: "CantidadOllas", name: "CantidadOllas",
methods: { methods: {
...mapMutations("ollas", ["incrementar", "decrementar"]), ...mapActions("ollas", ["actualizarCantidadOllas"]),
...mapMutations("pedido", ["setCantidadOllas"]),
incrementar() {
this.control += 1;
this.actualizarDebounced();
},
decrementar() {
this.control -= 1;
this.actualizarDebounced();
},
async actualizarDebounced() {
const params = { cantidad: this.control };
clearTimeout(this.debounceTimer);
this.debounceTimer = setTimeout(() => {
this.setCantidadOllas(params);
this.actualizarCantidadOllas(params);
}, 500);
}
}, },
computed: { computed: {
...mapState("ollas", ["cantidad_de_ollas"]) ...mapState("pedido", ["cantidad_de_ollas"])
},
data() {
return {
debounceTimer: null,
control: 0,
};
},
watch: {
cantidad_de_ollas() {
this.control = this.cantidad_de_ollas;
} }
},
} }
</script> </script>
@ -18,17 +46,17 @@ export default {
<div class="field has-addons is-justify-content-center contador"> <div class="field has-addons is-justify-content-center contador">
<div class="control"> <div class="control">
<button class="button is-small" <button class="button is-small"
:disabled="cantidad_de_ollas < 1" :disabled="control < 1"
@click.capture="decrementar"> @click.capture="decrementar">
<i class="fa fa-solid fa-minus"></i> <i class="fa fa-solid fa-minus"></i>
</button> </button>
</div> </div>
<div class="control"> <div class="control">
<input id="cantidad" <input id="cantidad"
v-model="cantidad_de_ollas" v-model="control"
class="input is-small" class="input is-small has-text-centered"
type="number" type="number"
style="text-align: center"> @input="actualizarDebounced">
</div> </div>
<div class="control"> <div class="control">
<button class="button is-small" @click="incrementar"> <button class="button is-small" @click="incrementar">

View file

@ -2,19 +2,12 @@ import axios from "axios";
const state = { const state = {
monto_por_olla: undefined, monto_por_olla: undefined,
cantidad_de_ollas: 0,
}; };
const mutations = { const mutations = {
setMontoPorOlla(state, parametros) { setMontoPorOlla(state, parametros) {
state.monto_por_olla = Number.parseInt(parametros.find(p => p.id === 'monto-olla').valor); state.monto_por_olla = Number.parseInt(parametros.find(p => p.id === 'monto-olla').valor);
}, },
incrementar(state) {
state.cantidad_de_ollas += 1;
},
decrementar(state) {
state.cantidad_de_ollas -= 1;
},
}; };
const actions = { const actions = {
@ -22,13 +15,18 @@ const actions = {
const response = await axios.get('/api/parametros'); const response = await axios.get('/api/parametros');
commit('setMontoPorOlla', response.data); commit('setMontoPorOlla', response.data);
}, },
async actualizarCantidadOllas({ rootState }, { cantidad: cantidad}) {
const barrio = rootState.pedido.grupo_de_compra.id;
const params = { cantidad : cantidad };
await axios.put(`/ollas/${barrio}/cantidad`, params);
}
}; };
const getters = { const getters = {
montoTotal() { montoTotal(state, _, rootState) {
return state.monto_por_olla * state.cantidad_de_ollas; return state.monto_por_olla * rootState.pedido.cantidad_de_ollas;
}, },
montoSuperado: (state, getters, rootState) => { montoSuperado: (_, getters, rootState) => {
return rootState.pedido.total > getters.montoTotal; return rootState.pedido.total > getters.montoTotal;
} }
}; };

View file

@ -39,6 +39,7 @@ const mutations = {
state.nombre = pedido.nombre; state.nombre = pedido.nombre;
state.productos = pedido.productos; state.productos = pedido.productos;
state.total = Number.parseFloat(pedido.total.replace(',','')); state.total = Number.parseFloat(pedido.total.replace(',',''));
state.cantidad_de_ollas = Number.parseInt(pedido.cantidad_de_ollas);
delete state.aprobado; delete state.aprobado;
delete state.total_transporte; delete state.total_transporte;
delete state.cantidad_transporte; delete state.cantidad_transporte;
@ -58,6 +59,9 @@ const mutations = {
state.total_sin_devoluciones = null; state.total_sin_devoluciones = null;
state.devoluciones_total = null; state.devoluciones_total = null;
state.devoluciones_notas = null; state.devoluciones_notas = null;
},
setCantidadOllas(state, { cantidad }) {
state.cantidad_de_ollas = cantidad;
} }
}; };
@ -109,7 +113,7 @@ const actions = {
commit('reset'); commit('reset');
}, },
async getPedidoDeOllas({ commit }) { async getPedidoDeOllas({ commit }) {
const response = await axios.get(`/api/ollas/${state.grupo_de_compra.id}`); const response = await axios.get(`/ollas/${state.grupo_de_compra.id}`);
commit('setPedidoDeOllas', response.data); commit('setPedidoDeOllas', response.data);
}, },
}; };