From 055a0b875174bdf7df4e3d267f19d5ef089b4102 Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Fri, 31 Jan 2025 01:08:19 +0100 Subject: [PATCH] feat: refs #6321 updates --- src/pages/Item/components/ItemProposal.vue | 44 +++----- .../Item/components/ItemProposalProxy.vue | 16 +-- src/pages/Ticket/Card/TicketTransfer.vue | 4 +- src/pages/Ticket/Card/components/split.js | 4 +- .../Ticket/Negative/TicketLackDetail.vue | 102 ++---------------- src/pages/Ticket/Negative/TicketLackTable.vue | 68 +++++++----- 6 files changed, 70 insertions(+), 168 deletions(-) diff --git a/src/pages/Item/components/ItemProposal.vue b/src/pages/Item/components/ItemProposal.vue index 506c73430..144787b85 100644 --- a/src/pages/Item/components/ItemProposal.vue +++ b/src/pages/Item/components/ItemProposal.vue @@ -5,6 +5,8 @@ import ItemDescriptorProxy from 'src/pages/Item/Card/ItemDescriptorProxy.vue'; import { toCurrency } from 'filters/index'; import VnStockValueDisplay from 'src/components/ui/VnStockValueDisplay.vue'; import VnTable from 'src/components/VnTable/VnTable.vue'; +import axios from 'axios'; +import notifyResults from 'src/utils/notifyResults'; const MATCH_VALUES = [5, 6, 7, 8]; const { t } = useI18n(); @@ -12,8 +14,6 @@ const extractNumericValue = (percentageString) => { const match = percentageString.match(/(\d+(\.\d+)?)/); return match ? parseFloat(match[0]) : null; }; -const primaryColor = '#f5b351'; -const colorSpacer = '#ecf0f1'; const compatibilityItem = (value) => `${100 * (value / MATCH_VALUES.length)}%`; const gradientStyle = (value) => { let color = 'white'; @@ -157,7 +157,8 @@ const columns = computed(() => [ field: 'located', }, ]); -const isSelected = (row) => proposalSelected.value.some((item) => row.id === item.id); +const isSelected = (row) => + proposalSelected.value.some((item) => row.itemFk === item.itemFk); function change(row) { if (isSelected(row)) { confirm(row); @@ -165,29 +166,24 @@ function change(row) { } proposalSelected.value = [row]; } -async function confirm(row) { +async function confirm() { try { - // const params = { - // saleFk: saleFk.value, - // substitutionFk: proposalSelected.value[0].id, - // quantity: quantity.value, - // }; - // const { data } = await axios.post('Sales/replaceItem', params); - const params = [ - saleFk.value, - row ?? proposalSelected.value[0].id, - quantity.value, - ]; - // const { data } = await axios.post('Applications/sale_replaceItem/execute-proc', { - // schema: 'vn', - // params, - // }); - // proposalTableRef.value.reload(); + const substitutionFk = proposalSelected.value[0].itemFk; + const promises = $props.sales.map(({ saleFk, quantity }) => { + const params = { + saleFk, + substitutionFk, + quantity, + }; + return axios.post('Sales/replaceItem', params); + }); + const results = await Promise.allSettled(promises); + + notifyResults(results, 'saleFk'); emit('itemReplaced', { type: 'refresh', quantity: quantity.value, itemProposal: proposalSelected.value[0], - ...params, }); proposalSelected.value = []; } catch (error) { @@ -198,13 +194,9 @@ const filter = computed(() => ({ itemFk: $props.itemLack.itemFk, sales: saleFk.value, })); -function handleSelection(value, _) { - quantity.value = value.available; -} const isSelectionAvailable = (itemProposal) => { const { price2 } = itemProposal; const salePrice = sale.value.price; - // debugger; const byPrice = (100 * price2) / salePrice > 30; if (byPrice) { return byPrice; @@ -213,8 +205,6 @@ const isSelectionAvailable = (itemProposal) => { (100 * itemProposal.available) / Math.abs($props.itemLack.lack) < 30; return byQuantity; }; - -const isDisabled = (row) => !isSelectionAvailable(row); -