-
-
- {{ t('order.summary.basket') }} #{{ entity?.id }} -
- {{ entity?.client?.name }} ({{ entity?.clientFk }})
-
-
-
- {{ t('order.summary.confirmLines') }}
-
-
-
-
-
-
-
-
-
-
-
-
- {{ dashIfEmpty(entity?.address?.nickname) }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ dashIfEmpty(entity?.address?.phone) }}
-
-
-
-
-
-
-
-
-
-
-
- {{ entity?.note }}
-
-
-
-
-
-
- {{ t('globals.subtotal') }}
-
-
- {{
- toCurrency(entity?.subTotal)
- }}
-
-
-
-
- {{ t('globals.vat') }}
-
-
- {{ toCurrency(entity?.VAT) }}
-
-
-
-
- {{ t('order.summary.total') }}
-
-
- {{ toCurrency(entity?.total) }}
-
-
-
-
-
-
-
-
- {{ t('globals.item') }}
- {{ t('globals.description') }}
- {{ t('globals.quantity') }}
- {{ t('globals.price') }}
- {{ t('order.summary.amount') }}
-
-
-
-
-
-
- {{ props.row.item?.id }}
-
-
-
-
-
-
- {{ props.row.item.name }}
-
- {{ props.row.item.subName }}
-
-
+
+
+ {{ t('order.summary.basket') }} #{{ entity?.id }} -
+ {{ entity?.client?.name }} ({{ entity?.clientFk }})
+
+
+
+ {{ t('order.summary.confirmLines') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ dashIfEmpty(entity?.address?.nickname) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ dashIfEmpty(entity?.address?.phone) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ entity?.note }}
+
+
+
+
+
+
+ {{ t('globals.subtotal') }}
+
+
+ {{ toCurrency(entity?.subTotal) }}
+
+
+
+
+ {{ t('globals.vat') }}
+
+
+ {{ toCurrency(entity?.VAT) }}
+
+
+
+
+ {{ t('order.summary.total') }}
+
+
+ {{ toCurrency(entity?.total) }}
+
+
+
+
+
+
+
+
+ {{ t('globals.item') }}
+ {{ t('globals.description') }}
+ {{ t('globals.quantity') }}
+ {{ t('globals.price') }}
+ {{ t('order.summary.amount') }}
+
+
+
+
+
+
+ {{ props.row.item?.id }}
+
+
+
+
+
+
+ {{ props.row.item.name }}
+
+ {{ props.row.item.subName }}
+
-
-
-
- {{ props.row.quantity }}
-
-
- {{ toCurrency(props.row.price) }}
-
-
- {{
- toCurrency(props.row?.quantity * props.row?.price)
- }}
-
-
-
-
-
-
-
-
+
+
+
+
+ {{ props.row.quantity }}
+
+
+ {{ toCurrency(props.row.price) }}
+
+
+ {{ toCurrency(props.row?.quantity * props.row?.price) }}
+
+
+
+
+
+
+
-
-
-es:
- New price: Nuevo precio
-
diff --git a/src/pages/Ticket/Card/TicketNotes.vue b/src/pages/Ticket/Card/TicketNotes.vue
index feb88bf84..a3e25d63e 100644
--- a/src/pages/Ticket/Card/TicketNotes.vue
+++ b/src/pages/Ticket/Card/TicketNotes.vue
@@ -38,7 +38,9 @@ function handleDelete(row) {
ticketNotesCrudRef.value.remove([row]);
}
-async function handleSave() {
+async function handleSave(e) {
+ if (e.shiftKey && e.key === 'Enter') return;
+ e.preventDefault();
if (!isSaving.value) {
isSaving.value = true;
await ticketNotesCrudRef.value?.saveChanges();
@@ -70,7 +72,7 @@ async function handleSave() {
-import { onMounted, ref, computed, watch } from 'vue';
+import { onMounted, ref, computed, watch, inject } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRouter, useRoute } from 'vue-router';
import { useQuasar } from 'quasar';
@@ -25,7 +25,7 @@ import VnTable from 'src/components/VnTable/VnTable.vue';
import VnConfirm from 'src/components/ui/VnConfirm.vue';
import TicketProblems from 'src/components/TicketProblems.vue';
import RightMenu from 'src/components/common/RightMenu.vue';
-
+const app = inject('app');
const route = useRoute();
const router = useRouter();
const { t } = useI18n();
@@ -45,7 +45,7 @@ const isTicketEditable = ref(false);
const sales = ref([]);
const editableStatesOptions = ref([]);
const selectedSales = ref([]);
-const manaCode = ref('mana');
+const componentId = ref(null);
const ticketState = computed(() => store.data?.ticketState?.state?.code);
const transfer = ref({
lastActiveTickets: [],
@@ -99,6 +99,7 @@ const columns = computed(() => [
align: 'left',
label: t('globals.quantity'),
name: 'quantity',
+ class: 'shrink',
format: (row) => toCurrency(row.quantity),
},
{
@@ -186,21 +187,27 @@ const getRowUpdateInputEvents = (sale) => {
};
const resetChanges = async () => {
- arrayData.fetch({ append: false });
- tableRef.value.reload();
+ await arrayData.fetch({ append: false });
+ tableRef.value.CrudModelRef.hasChanges = false;
+ await tableRef.value.reload();
+
selectedRows.value = [];
};
const changeQuantity = async (sale) => {
if (!sale.itemFk || sale.quantity == null || sale?.originalQuantity === sale.quantity)
return;
else sale.originalQuantity = sale.quantity;
- if (!sale.id) return addSale(sale);
+ try {
+ if (!sale.id) await addSale(sale);
+ } catch (e) {
+ app.config.errorHandler(e);
+ return;
+ }
if (await isSalePrepared(sale)) {
await confirmUpdate(() => updateQuantity(sale));
} else await updateQuantity(sale);
};
-
const updateQuantity = async (sale) => {
try {
let { quantity, id } = sale;
@@ -213,7 +220,7 @@ const updateQuantity = async (sale) => {
(s) => s.id === sale.id,
);
sale.quantity = quantity;
- throw e;
+ app.config.errorHandler(e);
}
};
@@ -222,24 +229,27 @@ const addSale = async (sale) => {
barcode: sale.itemFk,
quantity: sale.quantity,
};
+ try {
+ const { data } = await axios.post(`tickets/${route.params.id}/addSale`, params);
- const { data } = await axios.post(`tickets/${route.params.id}/addSale`, params);
+ if (!data) return;
- if (!data) return;
+ const newSale = data;
+ sale.id = newSale.id;
+ sale.image = newSale.item.image;
+ sale.subName = newSale.item.subName;
+ sale.concept = newSale.concept;
+ sale.quantity = newSale.quantity;
+ sale.discount = newSale.discount;
+ sale.price = newSale.price;
+ sale.item = newSale.item;
- const newSale = data;
- sale.id = newSale.id;
- sale.image = newSale.item.image;
- sale.subName = newSale.item.subName;
- sale.concept = newSale.concept;
- sale.quantity = newSale.quantity;
- sale.discount = newSale.discount;
- sale.price = newSale.price;
- sale.item = newSale.item;
-
- notify('globals.dataSaved', 'positive');
- sale.isNew = false;
- resetChanges();
+ notify('globals.dataSaved', 'positive');
+ sale.isNew = false;
+ resetChanges();
+ } catch (e) {
+ app.config.errorHandler(e);
+ }
};
const changeConcept = async (sale) => {
if (await isSalePrepared(sale)) {
@@ -248,10 +258,14 @@ const changeConcept = async (sale) => {
};
const updateConcept = async (sale) => {
- const data = { newConcept: sale.concept };
- await axios.post(`Sales/${sale.id}/updateConcept`, data);
- notify('globals.dataSaved', 'positive');
- resetChanges();
+ try {
+ const data = { newConcept: sale.concept };
+ await axios.post(`Sales/${sale.id}/updateConcept`, data);
+ notify('globals.dataSaved', 'positive');
+ resetChanges();
+ } catch (e) {
+ app.config.errorHandler(e);
+ }
};
const DEFAULT_EDIT = {
@@ -262,18 +276,6 @@ const DEFAULT_EDIT = {
oldQuantity: null,
};
const edit = ref({ ...DEFAULT_EDIT });
-const usesMana = ref(null);
-
-const getUsesMana = async () => {
- const { data } = await axios.get('Sales/usesMana');
- usesMana.value = data;
-};
-
-const getMana = async () => {
- const { data } = await axios.get(`Tickets/${route.params.id}/getDepartmentMana`);
- mana.value = data;
- await getUsesMana();
-};
const selectedValidSales = computed(() => {
if (!sales.value) return;
@@ -306,46 +308,59 @@ const changePrice = async (sale) => {
if (newPrice != null && newPrice != sale.price) {
if (await isSalePrepared(sale)) {
await confirmUpdate(() => updatePrice(sale, newPrice));
- } else updatePrice(sale, newPrice);
+ } else await updatePrice(sale, newPrice);
}
};
const updatePrice = async (sale, newPrice) => {
- await axios.post(`Sales/${sale.id}/updatePrice`, { newPrice });
- sale.price = newPrice;
- edit.value = { ...DEFAULT_EDIT };
- notify('globals.dataSaved', 'positive');
- resetChanges();
+ try {
+ await axios.post(`Sales/${sale.id}/updatePrice`, {
+ newPrice: newPrice,
+ componentId: componentId.value,
+ });
+ notify('globals.dataSaved', 'positive');
+ resetChanges();
+ } catch (e) {
+ app.config.errorHandler(e);
+ }
};
const changeDiscount = async (sale) => {
const newDiscount = edit.value.discount;
if (newDiscount != null && newDiscount != sale.discount) {
if (await isSalePrepared(sale))
- await confirmUpdate(() => updateDiscount([sale], newDiscount));
- else await updateDiscount([sale], newDiscount);
+ await confirmUpdate(() =>
+ updateDiscount([sale], newDiscount, componentId.value),
+ );
+ else await updateDiscount([sale], newDiscount, componentId.value);
}
};
-const updateDiscounts = async (sales, newDiscount) => {
+const updateDiscounts = async (sales, newDiscount, componentId) => {
const salesTracking = await fetchSalesTracking();
const someSaleIsPrepared = salesTracking.some((sale) =>
matchSale(salesTracking, sale),
);
- if (someSaleIsPrepared) await confirmUpdate(() => updateDiscount(sales, newDiscount));
- else updateDiscount(sales, newDiscount);
+ if (someSaleIsPrepared)
+ await confirmUpdate(() => updateDiscount(sales, newDiscount, componentId));
+ else updateDiscount(sales, newDiscount, componentId);
};
-const updateDiscount = async (sales, newDiscount = 0) => {
- const salesIds = sales.map(({ id }) => id);
- const params = {
- salesIds,
- newDiscount,
- manaCode: manaCode.value,
- };
- await axios.post(`Tickets/${route.params.id}/updateDiscount`, params);
- notify('globals.dataSaved', 'positive');
- resetChanges();
+const updateDiscount = async (sales, newDiscount, componentId) => {
+ try {
+ const salesIds = sales.map(({ id }) => id);
+ const params = {
+ salesIds,
+ newDiscount: newDiscount ?? 0,
+ componentId,
+ };
+ await axios.post(`Tickets/${route.params.id}/updateDiscount`, params);
+ notify('globals.dataSaved', 'positive');
+ resetChanges();
+ } catch (e) {
+ app.config.errorHandler(e);
+ return;
+ }
};
const getNewPrice = computed(() => {
@@ -367,30 +382,40 @@ const getNewPrice = computed(() => {
});
const newOrderFromTicket = async () => {
- const { data } = await axios.post(`Orders/newFromTicket`, {
- ticketFk: Number(route.params.id),
- });
- const routeData = router.resolve({ name: 'OrderCatalog', params: { id: data } });
- window.open(routeData.href, '_blank');
+ try {
+ const { data } = await axios.post(`Orders/newFromTicket`, {
+ ticketFk: Number(route.params.id),
+ });
+ const routeData = router.resolve({ name: 'OrderCatalog', params: { id: data } });
+ window.open(routeData.href, '_blank');
+ } catch (e) {
+ app.config.errorHandler(e);
+ }
};
const goToLog = (saleId) => {
router.push({
name: 'TicketLog',
- params: {
- originId: route.params.id,
- changedModel: 'Sale',
- changedModelId: saleId,
+ query: {
+ logs: JSON.stringify({
+ originFk: route.params.id,
+ changedModel: 'Sale',
+ changedModelId: saleId,
+ }),
},
});
};
const changeTicketState = async (val) => {
- stateBtnDropdownRef.value.hide();
- const params = { ticketFk: route.params.id, code: val };
- await axios.post('Tickets/state', params);
- notify('globals.dataSaved', 'positive');
- await resetChanges();
+ try {
+ stateBtnDropdownRef.value.hide();
+ const params = { ticketFk: route.params.id, code: val };
+ await axios.post('Tickets/state', params);
+ notify('globals.dataSaved', 'positive');
+ resetChanges();
+ } catch (e) {
+ app.config.errorHandler(e);
+ }
};
const removeSelectedSales = () => {
@@ -410,10 +435,14 @@ const removeSales = async () => {
.forEach((sale) => tableRef.value.CrudModelRef.formData.splice(sale.$index, 1));
if (params.sales.length == 0) return;
- await axios.post('Sales/deleteSales', params);
- removeSelectedSales();
- notify('globals.dataSaved', 'positive');
- resetChanges();
+ try {
+ await axios.post('Sales/deleteSales', params);
+ removeSelectedSales();
+ notify('globals.dataSaved', 'positive');
+ resetChanges();
+ } catch (e) {
+ app.config.errorHandler(e);
+ }
};
const setTransferParams = async () => {
@@ -767,7 +796,7 @@ watch(
{{ row?.item?.subName.toUpperCase() }}
-