Kaynağa Gözat

DO 放單 relate created need write in username

fix負數倉
CANCERYS\kw093 1 hafta önce
ebeveyn
işleme
05ebbf496e
5 değiştirilmiş dosya ile 36 ekleme ve 19 silme
  1. +7
    -15
      src/components/DoDetail/DoDetail.tsx
  2. +13
    -2
      src/components/DoSearch/DoSearch.tsx
  3. +11
    -1
      src/components/DoSearchWorkbench/DoSearchWorkbench.tsx
  4. +3
    -0
      src/i18n/en/do.json
  5. +2
    -1
      src/i18n/zh/do.json

+ 7
- 15
src/components/DoDetail/DoDetail.tsx Dosyayı Görüntüle

@@ -26,6 +26,7 @@ type Props = {
workbenchRelease?: boolean; workbenchRelease?: boolean;
} }


/** FP-MTMS Version Checklist | Functions Ref. No. 78 | v1.0.0 | 2026-09-08 */
const DoDetail: React.FC<Props> = ({ const DoDetail: React.FC<Props> = ({
defaultValues, defaultValues,
id, id,
@@ -57,22 +58,13 @@ const DoDetail: React.FC<Props> = ({
setSuccessMessage("") setSuccessMessage("")
if (id) { if (id) {
// Get current user ID from session
//const currentUserId = session?.id ? parseInt(session.id) : undefined;
//if (!currentUserId) {
// setServerError("User session not found. Please login again.");
// return;
//}
/*
const response = await releaseDo({
id: id,
//userId: currentUserId // Pass user ID from session
})
*/
if (!currentUserId) {
setServerError(t("User session not found"));
return;
}
const response = await startWorkbenchBatchReleaseAsyncSingleV2({ const response = await startWorkbenchBatchReleaseAsyncSingleV2({
doId: id, doId: id,
userId: currentUserId ?? 0
userId: currentUserId
}) })
if (response?.code === "STARTED") { if (response?.code === "STARTED") {
setSuccessMessage(t("DO released successfully! Pick orders created.")); setSuccessMessage(t("DO released successfully! Pick orders created."));
@@ -91,7 +83,7 @@ const DoDetail: React.FC<Props> = ({
} finally { } finally {
setIsUploading(false) setIsUploading(false)
} }
}, [id, formProps, t, setIsUploading, session]) // Add session to dependencies
}, [id, formProps, t, setIsUploading, session, currentUserId, router])


// UPDATE STORE-BASED ASSIGNMENT HANDLERS // UPDATE STORE-BASED ASSIGNMENT HANDLERS
const handleAssignByStore = useCallback(async (storeId: string) => { const handleAssignByStore = useCallback(async (storeId: string) => {


+ 13
- 2
src/components/DoSearch/DoSearch.tsx Dosyayı Görüntüle

@@ -81,6 +81,7 @@ function isTruckLaneSearchMissingEta(truckLanceCode: string, estimatedArrivalDat
return truckLanceCode.trim() !== "" && estimatedArrivalDate.trim() === ""; return truckLanceCode.trim() !== "" && estimatedArrivalDate.trim() === "";
} }


/** FP-MTMS Version Checklist | Functions Ref. No. 77 | v1.0.0 | 2026-09-08 */
const DoSearch: React.FC<Props> = ({ filterArgs, searchQuery, onDeliveryOrderSearch }) => { const DoSearch: React.FC<Props> = ({ filterArgs, searchQuery, onDeliveryOrderSearch }) => {
const apiRef = useGridApiRef(); const apiRef = useGridApiRef();


@@ -509,6 +510,16 @@ const DoSearch: React.FC<Props> = ({ filterArgs, searchQuery, onDeliveryOrderSea


const handleBatchRelease = useCallback(async (isWorkbench: boolean) => { const handleBatchRelease = useCallback(async (isWorkbench: boolean) => {
try { try {
if (!currentUserId) {
await Swal.fire({
icon: "error",
title: t("Error"),
text: t("User session not found"),
confirmButtonText: t("OK"),
didOpen: (popup) => applyMainContentAreaSwalOffset(popup),
});
return;
}
const tabFilter = resolveTabFilter(activeTab); const tabFilter = resolveTabFilter(activeTab);
const tabTruckKeyword = tabFilter.forceTruckKeyword ?? ""; const tabTruckKeyword = tabFilter.forceTruckKeyword ?? "";
const effectiveTruckLanceCode = tabTruckKeyword || currentSearchParams.truckLanceCode || ""; const effectiveTruckLanceCode = tabTruckKeyword || currentSearchParams.truckLanceCode || "";
@@ -659,12 +670,12 @@ const DoSearch: React.FC<Props> = ({ filterArgs, searchQuery, onDeliveryOrderSea
if(isWorkbench){ if(isWorkbench){
startRes = await startWorkbenchBatchReleaseAsyncV2({ startRes = await startWorkbenchBatchReleaseAsyncV2({
ids: idsToRelease, ids: idsToRelease,
userId: currentUserId ?? 1,
userId: currentUserId,
mergeExtraIntoLaneTicket, mergeExtraIntoLaneTicket,
}); });
} }
else{ else{
startRes = await startBatchReleaseAsync({ ids: idsToRelease, userId: currentUserId ?? 1 });
startRes = await startBatchReleaseAsync({ ids: idsToRelease, userId: currentUserId });
} }
//await startBatchReleaseAsync({ ids: idsToRelease, userId: currentUserId ?? 1 }); //await startBatchReleaseAsync({ ids: idsToRelease, userId: currentUserId ?? 1 });
const jobId = startRes?.entity?.jobId; const jobId = startRes?.entity?.jobId;


+ 11
- 1
src/components/DoSearchWorkbench/DoSearchWorkbench.tsx Dosyayı Görüntüle

@@ -61,6 +61,7 @@ function isTruckLaneSearchMissingEta(truckLanceCode: string, estimatedArrivalDat
return truckLanceCode.trim() !== "" && estimatedArrivalDate.trim() === ""; return truckLanceCode.trim() !== "" && estimatedArrivalDate.trim() === "";
} }


/** FP-MTMS Version Checklist | Functions Ref. No. 78 | v1.0.0 | 2026-09-08 */
const DoSearchWorkbench: React.FC<Props> = ({ const DoSearchWorkbench: React.FC<Props> = ({
filterArgs, filterArgs,
searchQuery, searchQuery,
@@ -538,6 +539,15 @@ const handleSearch = useCallback(async (query: SearchBoxInputs) => {


const handleBatchRelease = useCallback(async () => { const handleBatchRelease = useCallback(async () => {
try { try {
if (!currentUserId) {
await Swal.fire({
icon: "error",
title: t("Error"),
text: t("User session not found"),
confirmButtonText: t("OK"),
});
return;
}
if ( if (
isTruckLaneSearchMissingEta( isTruckLaneSearchMissingEta(
currentSearchParams.truckLanceCode ?? "", currentSearchParams.truckLanceCode ?? "",
@@ -657,7 +667,7 @@ const handleSearch = useCallback(async (query: SearchBoxInputs) => {
(result.value as { mergeExtraIntoLaneTicket?: boolean } | undefined)?.mergeExtraIntoLaneTicket ?? false; (result.value as { mergeExtraIntoLaneTicket?: boolean } | undefined)?.mergeExtraIntoLaneTicket ?? false;
const startRes = await startWorkbenchBatchReleaseAsyncV2({ const startRes = await startWorkbenchBatchReleaseAsyncV2({
ids: idsToRelease, ids: idsToRelease,
userId: currentUserId ?? 1,
userId: currentUserId,
mergeExtraIntoLaneTicket, mergeExtraIntoLaneTicket,
}); });
const startEntity = startRes?.entity as { jobId?: string } | undefined; const startEntity = startRes?.entity as { jobId?: string } | undefined;


+ 3
- 0
src/i18n/en/do.json Dosyayı Görüntüle

@@ -166,6 +166,9 @@
"Truck X": "Truck X", "Truck X": "Truck X",
"Truck lane search requires date message": "Truck lane search requires date message", "Truck lane search requires date message": "Truck lane search requires date message",
"Truck lane search requires date title": "Truck lane search requires date title", "Truck lane search requires date title": "Truck lane search requires date title",
"User session not found": "User session not found. Please login again.",
"Error": "Error",
"OK": "OK",
"Warning: Some delivery orders do not have matching trucks for the target date.": "Warning: Some delivery orders do not have matching trucks for the target date.", "Warning: Some delivery orders do not have matching trucks for the target date.": "Warning: Some delivery orders do not have matching trucks for the target date.",
"Workbench Batch Release": "Workbench Batch Release", "Workbench Batch Release": "Workbench Batch Release",
"code": "code", "code": "code",


+ 2
- 1
src/i18n/zh/do.json Dosyayı Görüntüle

@@ -221,5 +221,6 @@
"Replenishment demo note": "此為前端假資料回應;正式環境將呼叫後端 API。", "Replenishment demo note": "此為前端假資料回應;正式環境將呼叫後端 API。",
"Search Delivery Order": "搜尋送貨單", "Search Delivery Order": "搜尋送貨單",
"DO Replenishment": "送貨單補貨", "DO Replenishment": "送貨單補貨",
"Error": "錯誤"
"Error": "錯誤",
"User session not found": "找不到登入使用者,請重新登入。"
} }

Yükleniyor…
İptal
Kaydet