diff --git a/src/components/ui/CardDescriptor.vue b/src/components/ui/CardDescriptor.vue index 43dc15e9b..e2f2e9436 100644 --- a/src/components/ui/CardDescriptor.vue +++ b/src/components/ui/CardDescriptor.vue @@ -17,6 +17,10 @@ const $props = defineProps({ type: Object, default: null, }, + userFilter: { + type: Object, + default: null, + }, title: { type: String, default: '', @@ -58,6 +62,7 @@ onBeforeMount(async () => { arrayData = useArrayData($props.dataKey, { url: $props.url, filter: $props.filter, + userFilter: $props.userFilter, skip: 0, }); store = arrayData.store; @@ -73,7 +78,7 @@ onBeforeMount(async () => { () => [$props.url, $props.filter], async () => { if (!isSameDataKey.value) await getData(); - } + }, ); }); @@ -108,7 +113,7 @@ const iconModule = computed(() => route.matched[1].meta.icon); const toModule = computed(() => route.matched[1].path.split('/').length > 2 ? route.matched[1].redirect - : route.matched[1].children[0].redirect + : route.matched[1].children[0].redirect, ); diff --git a/src/pages/Ticket/Card/BasicData/TicketBasicDataView.vue b/src/pages/Ticket/Card/BasicData/TicketBasicDataView.vue index aff351523..17d5c6c6e 100644 --- a/src/pages/Ticket/Card/BasicData/TicketBasicDataView.vue +++ b/src/pages/Ticket/Card/BasicData/TicketBasicDataView.vue @@ -6,6 +6,7 @@ import { useRoute, useRouter } from 'vue-router'; import TicketBasicData from './TicketBasicData.vue'; import TicketBasicDataForm from './TicketBasicDataForm.vue'; import { useVnConfirm } from 'composables/useVnConfirm'; +import { useArrayData } from 'composables/useArrayData'; import axios from 'axios'; import useNotify from 'src/composables/useNotify.js'; @@ -81,7 +82,7 @@ const getPriceDifference = async () => { }; const { data } = await axios.post( `tickets/${formData.value.id}/priceDifference`, - params + params, ); formData.value.ticket = data; }; @@ -109,12 +110,14 @@ const submit = async () => { const { data } = await axios.post( `tickets/${formData.value.id}/componentUpdate`, - params + params, ); if (!data) return; const ticketToMove = data.id; + const arrayData = useArrayData('ticketData'); + arrayData.fetch({}); notify(t('basicData.unroutedTicket'), 'positive'); router.push({ name: 'TicketSummary', params: { id: ticketToMove } }); }; @@ -136,7 +139,7 @@ const onNextStep = async () => { openConfirmationModal( t('basicData.negativesConfirmTitle'), t('basicData.negativesConfirmMessage'), - submitWithNegatives + submitWithNegatives, ); else await submit(); } diff --git a/src/pages/Ticket/Card/TicketDescriptor.vue b/src/pages/Ticket/Card/TicketDescriptor.vue index b2090be4e..22e982b58 100644 --- a/src/pages/Ticket/Card/TicketDescriptor.vue +++ b/src/pages/Ticket/Card/TicketDescriptor.vue @@ -117,7 +117,7 @@ const setData = (entity) => { {
-
Mana: {{ toCurrency(mana) }}
+
+ Mana: + +
{{ t('New price') }} - {{ toCurrency($props.newPrice) }} + {{ toCurrency($props.newPrice) }}A
diff --git a/src/pages/Ticket/Card/TicketRightTotals.vue b/src/pages/Ticket/Card/TicketRightTotals.vue new file mode 100644 index 000000000..c98104d61 --- /dev/null +++ b/src/pages/Ticket/Card/TicketRightTotals.vue @@ -0,0 +1,59 @@ + + diff --git a/src/pages/Ticket/Card/TicketSale.vue b/src/pages/Ticket/Card/TicketSale.vue index c9f37a9bf..0b8d3d4b5 100644 --- a/src/pages/Ticket/Card/TicketSale.vue +++ b/src/pages/Ticket/Card/TicketSale.vue @@ -3,6 +3,7 @@ import { onMounted, ref, computed, watch } from 'vue'; import { useI18n } from 'vue-i18n'; import { useRouter, useRoute } from 'vue-router'; import { useQuasar } from 'quasar'; +import { useState } from 'src/composables/useState'; import FetchData from 'components/FetchData.vue'; import FetchedTags from 'components/ui/FetchedTags.vue'; @@ -25,11 +26,15 @@ import VnTable from 'src/components/VnTable/VnTable.vue'; import VnUsesMana from 'src/components/ui/VnUsesMana.vue'; import VnConfirm from 'src/components/ui/VnConfirm.vue'; import VnCurrency from 'src/components/ui/VnCurrency.vue'; -import RightMenu from 'src/components/common/RightMenu.vue'; +import VnInputNumber from 'src/components/common/VnInputNumber.vue'; +import TicketRightTotals from './TicketRightTotals.vue'; const route = useRoute(); const router = useRouter(); const { t } = useI18n(); +const state = useState(); +const user = state.getUser(); + const { notify } = useNotify(); const { openConfirmationModal } = useVnConfirm(); const editPriceProxyRef = ref(null); @@ -132,8 +137,7 @@ const columns = computed(() => [ { align: 'left', label: t('globals.amount'), - name: 'amount', - format: (row) => parseInt(row.amount * row.quantity), + name: 'total', }, { align: 'left', @@ -163,20 +167,6 @@ const getConfig = async () => { ticketConfig.value = data; }; -const onSalesFetched = (salesData) => { - sales.value = salesData; - for (let sale of salesData) sale.amount = getSaleTotal(sale); -}; - -const getSaleTotal = (sale) => { - if (sale.quantity == null || sale.price == null) return null; - - const price = sale.quantity * sale.price; - const discount = (sale.discount * price) / 100; - - return price - discount; -}; - const resetChanges = async () => { arrayData.fetch({ append: false }); tableRef.value.reload(); @@ -262,7 +252,9 @@ const getUsesMana = async () => { }; const getMana = async () => { - const { data } = await axios.get(`Tickets/${route.params.id}/getSalesPersonMana`); + const { data } = await axios.get(`Tickets/${route.params.id}/getSalesPersonMana`, { + params: { isForeign: user.value.foreignCurrency }, + }); mana.value = data; await getUsesMana(); }; @@ -274,9 +266,12 @@ const selectedValidSales = computed(() => { const onOpenEditPricePopover = async (sale) => { await getMana(); + console.log('sale: ', sale, user.value.foreignCurrency); edit.value = { sale: JSON.parse(JSON.stringify(sale)), - price: sale.price, + price: user.value.foreignCurrency + ? (sale.foreignPrice ?? sale.price) + : sale.price, }; }; @@ -301,13 +296,18 @@ const updatePrice = async (sale) => { if (!canProceed.value) return; const newPrice = edit.value.price; if (newPrice != null && newPrice != sale.price) { - await axios.post(`Sales/${sale.id}/updatePrice`, { newPrice }); - sale.price = newPrice; + const { data } = await axios.post(`Sales/${sale.id}/updatePrice`, { + newPrice, + isForeign: user.value.foreignCurrency, + }); + sale.price = data.price; + sale.total = data.total; + sale.foreignPrice = data.foreignPrice; + sale.foreignTotal = data.foreignTotal; + arrayData.fetch({ append: false }); edit.value = { ...DEFAULT_EDIT }; notify('globals.dataSaved', 'positive'); } - - await getMana(); }; const changeDiscount = async (sale) => { @@ -331,7 +331,8 @@ const updateDiscount = async (sales, newDiscount = null) => { }; await axios.post(`Tickets/${route.params.id}/updateDiscount`, params); notify('globals.dataSaved', 'positive'); - for (let sale of sales) sale.discount = _newDiscount; + tableRef.value.reload(); + arrayData.fetch({ append: false }); edit.value = { ...DEFAULT_EDIT }; }; @@ -339,7 +340,10 @@ const getNewPrice = computed(() => { if (edit.value?.sale) { const sale = edit.value.sale; let newDiscount = sale.discount; - let newPrice = edit.value.price || sale.price; + let newPrice = user.value.foreignCurrency + ? (sale.foreignPrice ?? sale.price) + : sale.price; + // let newPrice = edit.value.price || sale.price; if (edit.value.discount != null) newDiscount = edit.value.discount; @@ -435,7 +439,7 @@ const updateItem = async (row) => { row.price = selectedItem.price; row.discount = 0; row.quantity = 0; - row.amount = row.price * row.quantity; + row.total = 0; } endNewRow(selectedItem); }; @@ -456,7 +460,7 @@ const addRow = (original = null) => { quantity: original.quantity, price: original.price, discount: original.discount, - amount: original.amount, + total: original.total, isNew: true, }; } @@ -619,56 +623,7 @@ watch( - - - + - + @@ -857,10 +808,9 @@ watch( :mana-code="manaCode" @save="changeDiscount(row)" > -
@@ -869,15 +819,11 @@ watch( {{ toPercentage(row.discount / 100) }} -