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); import ItemProposal from './ItemProposal.vue'; -import { ref } from 'vue'; -const popupProxyRef = ref(null); import { useDialogPluginComponent } from 'quasar'; const emit = defineEmits([ 'onDialogClosed', @@ -12,8 +10,7 @@ const emit = defineEmits([ ]); defineExpose({ show: () => dialogRef.value.show(), hide: () => dialogRef.value.hide() }); -const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = - useDialogPluginComponent(); +const { dialogRef } = useDialogPluginComponent(); const $props = defineProps({ itemLack: { type: Object, @@ -41,21 +38,12 @@ const $props = defineProps({ - { emit('itemReplaced', data); - popupProxyRef.value.hide(); + dialogRef.hide(); } " > { }; const splitSelectedRows = async () => { const tickets = Array.isArray($props.ticket) ? $props.ticket : [$props.ticket]; - await split(tickets); + await split(tickets, splitDate.value); + emit('ticketTransfered', tickets); }; diff --git a/src/pages/Ticket/Card/components/split.js b/src/pages/Ticket/Card/components/split.js index 23812136a..afa1d5cd6 100644 --- a/src/pages/Ticket/Card/components/split.js +++ b/src/pages/Ticket/Card/components/split.js @@ -1,13 +1,13 @@ import axios from 'axios'; import notifyResults from 'src/utils/notifyResults'; -export default async function (data) { +export default async function (data, date) { const reducedData = data.reduce((acc, item) => { const existing = acc.find(({ ticketFk }) => ticketFk === item.id); if (existing) { existing.sales.push(item.saleFk); } else { - acc.push({ ticketFk: item.id, sales: [item.saleFk] }); + acc.push({ ticketFk: item.id, sales: [item.saleFk], date }); } return acc; }, []); diff --git a/src/pages/Ticket/Negative/TicketLackDetail.vue b/src/pages/Ticket/Negative/TicketLackDetail.vue index 99b4f57fc..462b00c46 100644 --- a/src/pages/Ticket/Negative/TicketLackDetail.vue +++ b/src/pages/Ticket/Negative/TicketLackDetail.vue @@ -13,9 +13,6 @@ import { useRoute } from 'vue-router'; import TicketLackTable from './TicketLackTable.vue'; import VnPopupProxy from 'src/components/common/VnPopupProxy.vue'; import ItemProposalProxy from 'src/pages/Item/components/ItemProposalProxy.vue'; -import FetchedTags from 'components/ui/FetchedTags.vue'; -import ItemDescriptorProxy from 'src/pages/Item/Card/ItemDescriptorProxy.vue'; -import VnImg from 'src/components/ui/VnImg.vue'; import { useQuasar } from 'quasar'; const quasar = useQuasar(); @@ -41,76 +38,27 @@ onUnmounted(() => { const entityId = computed(() => route.params.id); const item = ref({}); -const itemLackForm = ref(); - +const itemProposalSelected = ref(null); const reload = async () => { - itemLackForm.value.fetch(); + tableRef.value.tableRef.reload(); }; defineExpose({ reload }); -// FunciĆ³n de comparaciĆ³n -// function freeFirst({ alertLevel: a }, { alertLevel: b }) { -// const DEFAULT = 0; -// // Si el estado de 'a' es 'free' y el de 'b' no lo es, 'a' viene primero -// if (a === DEFAULT && b !== DEFAULT) { -// return -1; -// } -// // Si el estado de 'b' es 'free' y el de 'a' no lo es, 'b' viene primero -// if (b === DEFAULT && a !== DEFAULT) { -// return 1; -// } -// // En cualquier otro caso, no se cambia el orden -// return 0; -// } -// const { store } = useArrayData(URL_KEY); -// const handleRows = (rows) => { -// // rows.forEach((row) => (row.concept = item.value.name)); -// rows = rows.sort(freeFirst); -// if (showFree.value) return rows.filter(({ alertLevel }) => alertLevel === 0); -// return rows; -// }; -const someBasket = computed(() => selectedRows.value.some((row) => row.isBasket === 1)); const itemProposalEvt = (data) => { const { itemProposal, quantity } = data; itemProposalSelected.value = itemProposal; - // badgeLackRef.value.reload(); - itemLack.value.lack += +quantity; - tableRef.value.reload(); - // replaceItem(); + reload(); }; -const itemProposalSelected = ref(null); -// const replaceItem = () => { -// const rows = handleRows(originalRowDataCopy.value).sort((row) => row.quantity); -// for (const ticket of rows) { -// if (ticket.quantity > itemProposalSelected.value.available) continue; -// originalRowDataCopy.value.splice(originalRowDataCopy.value.indexOf(ticket)); -// ticket.itemFk = itemProposalSelected.value.id; -// selectedRows.value.push({ ticketFk: ticket.ticketFk }); -// itemProposalSelected.value.available -= ticket.quantity; -// itemLack.value.lack += ticket.quantity; -// const index = store.data.findIndex((t) => t.ticketFk === ticket.ticketFk); -// store.data.splice(index, 1); -// console.log(ticket); -// useArrayData('ItemsGetSimilar').store.data[1].available = -// itemProposalSelected.value.available; -// } -// }; + function onBuysFetched(data) { Object.assign(item.value, data[0]); } - -const closeDialogs = (refs, evt) => { - changeItemDialogRef.value.hide(); - changeQuantityDialogRef.value.hide(); - changeStateDialogRef.value.hide(); -}; - const showItemProposal = () => { quasar .dialog({ component: ItemProposalProxy, componentProps: { - itemLack: itemLack.value, + itemLack: tableRef.value.itemLack, replaceAction: true, sales: selectedRows.value, }, @@ -139,16 +87,7 @@ const filterTable = { stateFk: 0, warehouseFk: useState().getUser().value.wareho @on-fetch="onBuysFetched" auto-load /> - (itemLack = data[0])" - auto-load - /> - + row.id), }" + @ticket-transfered="reload" > - {{ t('itemProposal') }} @@ -238,27 +171,6 @@ const filterTable = { stateFk: 0, warehouseFk: useState().getUser().value.wareho /> - - - - - - - - - {{ item?.longName ?? item.name }} - - - - - -