0
0
Fork 0

feat: refs #7970 notify changes

This commit is contained in:
Jon Elias 2024-10-28 07:48:11 +01:00
parent fd72f4dd45
commit ca6547e174
2 changed files with 89 additions and 10 deletions

View File

@ -30,10 +30,10 @@ const props = defineProps({
},
});
defineEmits(['confirm', ...useDialogPluginComponent.emits]);
defineExpose({ show: () => dialogRef.value.show(), hide: () => dialogRef.value.hide() });
defineEmits([...useDialogPluginComponent.emits]);
const { dialogRef, onDialogOK } = useDialogPluginComponent();
const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } =
useDialogPluginComponent();
const title = props.title || t('Confirm');
const message =
@ -53,9 +53,13 @@ async function confirm() {
}
onDialogOK(props.data);
}
function cancel() {
onDialogCancel();
}
</script>
<template>
<QDialog ref="dialogRef">
<QDialog ref="dialogRef" @hide="onDialogHide">
<QCard class="q-pa-sm">
<QCardSection class="row items-center q-pb-none">
<QAvatar
@ -67,7 +71,14 @@ async function confirm() {
/>
<span class="text-h6">{{ title }}</span>
<QSpace />
<QBtn icon="close" :disable="isLoading" flat round dense v-close-popup />
<QBtn
icon="close"
:disable="isLoading"
flat
round
dense
@click="cancel()"
/>
</QCardSection>
<QCardSection class="q-pb-none">
<span v-if="message !== false" v-html="message" />
@ -81,7 +92,7 @@ async function confirm() {
color="primary"
:disable="isLoading"
flat
v-close-popup
@click="cancel()"
/>
<QBtn
:label="t('globals.confirm')"

View File

@ -2,6 +2,7 @@
import { onMounted, ref, computed, onUnmounted, watch } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRouter, useRoute } from 'vue-router';
import { useQuasar } from 'quasar';
import FetchData from 'components/FetchData.vue';
import FetchedTags from 'components/ui/FetchedTags.vue';
@ -23,6 +24,7 @@ import useNotify from 'src/composables/useNotify.js';
import axios from 'axios';
import VnTable from 'src/components/VnTable/VnTable.vue';
import VnUsesMana from 'src/components/ui/VnUsesMana.vue';
import VnConfirm from 'src/components/ui/VnConfirm.vue';
const route = useRoute();
const router = useRouter();
@ -32,7 +34,7 @@ const { notify } = useNotify();
const { openConfirmationModal } = useVnConfirm();
const editPriceProxyRef = ref(null);
const stateBtnDropdownRef = ref(null);
const quasar = useQuasar();
const arrayData = useArrayData('ticketData');
const { store } = arrayData;
const selectedRows = ref([]);
@ -51,6 +53,7 @@ const transfer = ref({
sales: [],
});
const tableRef = ref([]);
const canProceed = ref();
watch(
() => route.params.id,
@ -214,7 +217,9 @@ const addSale = async (sale) => {
}
};
const changeQuantity = (sale) => {
const changeQuantity = async (sale) => {
canProceed.value = await isSalePrepared(sale);
if (!canProceed.value) return;
if (
!sale.itemFk ||
sale.quantity == null ||
@ -226,6 +231,8 @@ const changeQuantity = (sale) => {
};
const updateConcept = async (sale) => {
canProceed.value = await isSalePrepared(sale);
if (!canProceed.value) return;
try {
const data = { newConcept: sale.concept };
await axios.post(`Sales/${sale.id}/updateConcept`, data);
@ -286,6 +293,8 @@ const onOpenEditDiscountPopover = async (sale) => {
};
const updatePrice = async (sale) => {
canProceed.value = await isSalePrepared(sale);
if (!canProceed.value) return;
try {
const newPrice = edit.value.price;
if (newPrice != null && newPrice != sale.price) {
@ -300,12 +309,18 @@ const updatePrice = async (sale) => {
}
};
const changeDiscount = (sale) => {
const changeDiscount = async (sale) => {
canProceed.value = await isSalePrepared(sale);
if (!canProceed.value) return;
const newDiscount = edit.value.discount;
if (newDiscount != null && newDiscount != sale.discount) updateDiscount([sale]);
};
const updateDiscount = async (sales, newDiscount = null) => {
for (const sale of sales) {
const canProceed = await isSalePrepared(sale);
if (!canProceed) return;
}
const saleIds = sales.map((sale) => sale.id);
const _newDiscount = newDiscount || edit.value.discount;
const params = {
@ -433,7 +448,9 @@ onUnmounted(() => (stateStore.rightDrawer = false));
const items = ref([]);
const newRow = ref({});
const updateItem = (row) => {
const updateItem = async (row) => {
canProceed.value = await isSalePrepared(row);
if (!canProceed.value) return;
const selectedItem = items.value.find((item) => item.id === row.itemFk);
if (selectedItem) {
row.item = selectedItem;
@ -476,6 +493,55 @@ const endNewRow = (row) => {
}
};
async function isSalePrepared(item) {
const filter = {
params: {
where: { ticketFk: route.params.id },
order: ['concept ASC', 'quantity DESC'],
},
};
const { data } = await axios.get(`SaleTrackings/${route.params.id}/filter`, {
params: {
filter: JSON.stringify(filter),
},
});
const matchingSale = data.find((sale) => sale.itemFk === item.itemFk);
if (!matchingSale) {
return true;
}
if (
matchingSale.hasSaleGroupDetail ||
matchingSale.isControled ||
matchingSale.isPrepared ||
matchingSale.isPrevious ||
matchingSale.isPreviousSelected
) {
try {
await new Promise((resolve, reject) => {
quasar
.dialog({
component: VnConfirm,
componentProps: {
title: t('Item prepared'),
message: t(
'This item is already prepared. Do you want to continue?'
),
data: item,
},
})
.onOk(() => resolve(true))
.onCancel(() => reject(new Error('cancelled')));
});
} catch (error) {
tableRef.value.reload();
return false;
}
}
return true;
}
watch(
() => newRow.value.itemFk,
(newItemFk) => {
@ -820,4 +886,6 @@ es:
You are going to delete lines of the ticket: Vas a eliminar lineas del ticket
Add item: Añadir artículo
Transfer lines: Transferir líneas
Item prepared: Artículo preparado
This item is already prepared. Do you want to continue?: Este artículo ya esta preparado. Desea continuar?
</i18n>