From cd9aa8a6e0a4a7b3aa75042bc802ed187e70fdb0 Mon Sep 17 00:00:00 2001 From: M_Kececi Date: Mon, 23 Mar 2026 11:02:40 +0300 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ui/src/pages/OrderProductionUpdate.vue | 60 ++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/ui/src/pages/OrderProductionUpdate.vue b/ui/src/pages/OrderProductionUpdate.vue index ddc36dc..91638ea 100644 --- a/ui/src/pages/OrderProductionUpdate.vue +++ b/ui/src/pages/OrderProductionUpdate.vue @@ -213,6 +213,7 @@ import { computed, onMounted, ref, watch } from 'vue' import { useRoute } from 'vue-router' import { useQuasar } from 'quasar' import { useOrderProductionItemStore } from 'src/stores/OrderProductionItemStore' +import api from 'src/services/api' import { normalizeSearchText } from 'src/utils/searchText' const route = useRoute() @@ -436,6 +437,63 @@ function collectLinesFromRows (selectedRows) { return { errMsg: '', lines } } +function buildMailLineLabelFromRow (row) { + const item = String(row?.NewItemCode || row?.OldItemCode || '').trim().toUpperCase() + const color1 = String(row?.NewColor || row?.OldColor || '').trim().toUpperCase() + const color2 = String(row?.NewDim2 || row?.OldDim2 || '').trim().toUpperCase() + const desc = String(row?.NewDesc || row?.OldDesc || '').trim() + + if (!item) return '' + const colorPart = color2 ? `${color1}-${color2}` : color1 + return [item, colorPart, desc].filter(Boolean).join(' ') +} + +function buildProductionUpdateMailPayload (selectedRows) { + const updatedItems = [ + ...new Set( + (selectedRows || []) + .map(buildMailLineLabelFromRow) + .filter(Boolean) + ) + ] + + return { + operation: 'update', + deletedItems: [], + updatedItems, + addedItems: [] + } +} + +async function sendUpdateMailAfterApply (selectedRows) { + const orderId = String(orderHeaderID.value || '').trim() + if (!orderId) return + + try { + const payload = buildProductionUpdateMailPayload(selectedRows) + const res = await api.post('/order/send-market-mail', { + orderHeaderID: orderId, + operation: payload.operation, + deletedItems: payload.deletedItems, + updatedItems: payload.updatedItems, + addedItems: payload.addedItems + }) + + const sentCount = Number(res?.data?.sentCount || 0) + $q.notify({ + type: 'positive', + message: sentCount > 0 + ? `Guncelleme maili gonderildi (${sentCount} alici)` + : 'Guncelleme maili gonderildi' + }) + } catch (err) { + $q.notify({ + type: 'warning', + message: 'Guncelleme kaydedildi, mail gonderilemedi.' + }) + } +} + function buildGroupKey (item) { const parts = [ String(item?.OldItemCode || '').trim(), @@ -549,6 +607,7 @@ async function onBulkSubmit () { await store.applyUpdates(orderHeaderID.value, lines, true) await store.fetchItems(orderHeaderID.value) selectedMap.value = {} + await sendUpdateMailAfterApply(selectedRows) }) return } @@ -556,6 +615,7 @@ async function onBulkSubmit () { await store.applyUpdates(orderHeaderID.value, lines, false) await store.fetchItems(orderHeaderID.value) selectedMap.value = {} + await sendUpdateMailAfterApply(selectedRows) } catch (err) { console.error('[OrderProductionUpdate] onBulkSubmit failed', { orderHeaderID: orderHeaderID.value,