瀏覽代碼

Merge branch 'production' of http://svn.2fi-solutions.com:8300/derek/FPSMS-frontend into production

production
CANCERYS\kw093 6 天之前
父節點
當前提交
819087108b
共有 7 個文件被更改,包括 17 次插入129 次删除
  1. +5
    -5
      src/app/api/shop/actions.ts
  2. +1
    -21
      src/components/DoWorkbench/WorkbenchGoodPickExecution.tsx
  3. +2
    -40
      src/components/DoWorkbench/WorkbenchGoodPickExecutionDetail.tsx
  4. +0
    -1
      src/components/FinishedGoodSearch/GoodPickExecution.tsx
  5. +1
    -60
      src/components/JoWorkbench/newJobPickExecution.tsx
  6. +4
    -1
      src/components/Shop/ShopDetail.tsx
  7. +4
    -1
      src/components/Shop/TruckLaneDetail.tsx

+ 5
- 5
src/app/api/shop/actions.ts 查看文件

@@ -25,7 +25,7 @@ export interface ShopAndTruck{
truckLanceCode: String;
DepartureTime: String;
LoadingSequence?: number | null;
districtReference: Number;
districtReference: string | null;
Store_id: Number;
remark?: String | null;
truckId?: number;
@@ -43,7 +43,7 @@ export interface Truck{
truckLanceCode: String;
departureTime: String | number[];
loadingSequence: number;
districtReference: Number;
districtReference: string | null;
storeId: Number | String;
remark?: String | null;
shopName?: String | null;
@@ -55,7 +55,7 @@ export interface SaveTruckLane {
truckLanceCode: string;
departureTime: string;
loadingSequence: number;
districtReference: number;
districtReference: string | null;
storeId: string;
remark?: string | null;
}
@@ -82,7 +82,7 @@ export interface SaveTruckRequest {
shopName: string;
shopCode: string;
loadingSequence: number;
districtReference?: number | null;
districtReference?: string | null;
remark?: string | null;
}

@@ -91,7 +91,7 @@ export interface CreateTruckWithoutShopRequest {
truckLanceCode: string;
departureTime: string;
loadingSequence?: number;
districtReference?: number | null;
districtReference?: string | null;
remark?: string | null;
}



+ 1
- 21
src/components/DoWorkbench/WorkbenchGoodPickExecution.tsx 查看文件

@@ -32,7 +32,6 @@ import {
AutoAssignReleaseResponse,
checkPickOrderCompletion,
PickOrderCompletionResponse,
checkAndCompletePickOrderByConsoCode,
fetchDoPickOrderDetail,
DoPickOrderDetail,
} from "@/app/api/pickOrder/actions";
@@ -947,26 +946,7 @@ const fetchFgPickOrdersData = useCallback(async () => {
});
}
// FIXED: Use the proper API function instead of direct fetch
if (newStatus === 'completed' && lot.pickOrderConsoCode) {
console.log(` Lot ${lot.lotNo} completed, checking if pick order ${lot.pickOrderConsoCode} is complete...`);
try {
// Use the imported API function instead of direct fetch
const completionResponse = await checkAndCompletePickOrderByConsoCode(lot.pickOrderConsoCode);
console.log(` Pick order completion check result:`, completionResponse);
if (completionResponse.code === "SUCCESS") {
console.log(`�� Pick order ${lot.pickOrderConsoCode} completed successfully!`);
} else if (completionResponse.message === "not completed") {
console.log(`⏳ Pick order not completed yet, more lines remaining`);
} else {
console.error(`❌ Error checking completion: ${completionResponse.message}`);
}
} catch (error) {
console.error("Error checking pick order completion:", error);
}
}
// Workbench completion is handled in backend scan-pick flow.
await fetchAllCombinedLotData();
console.log("Pick quantity submitted successfully!");


+ 2
- 40
src/components/DoWorkbench/WorkbenchGoodPickExecutionDetail.tsx 查看文件

@@ -38,7 +38,6 @@ import {
checkPickOrderCompletion,
fetchAllPickOrderLotsHierarchicalWorkbench,
PickOrderCompletionResponse,
checkAndCompletePickOrderByConsoCode,
updateSuggestedLotLineId,
updateStockOutLineStatusByQRCodeAndLotNo,
confirmLotSubstitution,
@@ -2839,15 +2838,6 @@ const handleSubmitPickQtyWithQty = useCallback(async (lot: any, submitQty: numbe
return next;
});
await refreshWorkbenchAfterScanPick();
if (canonicalLotForSol.pickOrderConsoCode) {
void checkAndCompletePickOrderByConsoCode(canonicalLotForSol.pickOrderConsoCode)
.then((completionResponse) => {
console.log(` Pick order completion check (workbench just complete):`, completionResponse);
})
.catch((error) => {
console.error("Error checking pick order completion:", error);
});
}
setTimeout(() => {
checkAndAutoAssignNext();
}, 1000);
@@ -2950,15 +2940,6 @@ const handleSubmitPickQtyWithQty = useCallback(async (lot: any, submitQty: numbe
return next;
});
await refreshWorkbenchAfterScanPick();
if (lot.pickOrderConsoCode) {
void checkAndCompletePickOrderByConsoCode(lot.pickOrderConsoCode)
.then((completionResponse) => {
console.log(` Pick order completion check (workbench submit):`, completionResponse);
})
.catch((error) => {
console.error("Error checking pick order completion:", error);
});
}
setTimeout(() => {
checkAndAutoAssignNext();
}, 1000);
@@ -3003,26 +2984,8 @@ const handleSubmitPickQtyWithQty = useCallback(async (lot: any, submitQty: numbe
// 注意:库存过账(hold->out)与 ledger 由后端 updateStatus 内部统一处理;
// 前端不再额外调用 updateInventoryLotLineQuantities(operation='pick'),避免 double posting。
// Check if pick order is completed when lot status becomes 'completed'
if (newStatus === 'completed' && lot.pickOrderConsoCode) {
console.log(` Lot ${lot.lotNo} completed, checking if pick order ${lot.pickOrderConsoCode} is complete...`);
try {
const completionResponse = await checkAndCompletePickOrderByConsoCode(lot.pickOrderConsoCode);
console.log(` Pick order completion check result:`, completionResponse);
if (completionResponse.code === "SUCCESS") {
console.log(` Pick order ${lot.pickOrderConsoCode} completed successfully!`);
} else if (completionResponse.message === "not completed") {
console.log(`⏳ Pick order not completed yet, more lines remaining`);
} else {
console.error(` Error checking completion: ${completionResponse.message}`);
}
} catch (error) {
console.error("Error checking pick order completion:", error);
}
}
// Workbench completion is handled in backend scan-pick flow.

void fetchAllCombinedLotData();
console.log("Pick quantity submitted successfully!");
@@ -3049,7 +3012,6 @@ const handleSubmitPickQtyWithQty = useCallback(async (lot: any, submitQty: numbe
refreshWorkbenchAfterScanPick,
combinedLotData,
workbenchScanPickQtyFromLot,
checkAndCompletePickOrderByConsoCode,
t,
]);



+ 0
- 1
src/components/FinishedGoodSearch/GoodPickExecution.tsx 查看文件

@@ -53,7 +53,6 @@ import GoodPickExecutionForm from "./GoodPickExecutionForm";
import FGPickOrderCard from "./FGPickOrderCard";
import FinishedGoodFloorLanePanel from "./FinishedGoodFloorLanePanel";
import FGPickOrderInfoCard from "./FGPickOrderInfoCard";
import GoodPickExecutiondetail from "./GoodPickExecutiondetail";
interface Props {
filterArgs: Record<string, any>;
onFgPickOrdersChange?: (fgPickOrders: FGPickOrderResponse[]) => void;


+ 1
- 60
src/components/JoWorkbench/newJobPickExecution.tsx 查看文件

@@ -41,7 +41,6 @@ import {
AutoAssignReleaseResponse,
checkPickOrderCompletion,
PickOrderCompletionResponse,
checkAndCompletePickOrderByConsoCode,
confirmLotSubstitution,
updateStockOutLineStatusByQRCodeAndLotNo, // ✅ 添加
} from "@/app/api/pickOrder/actions";
@@ -3053,20 +3052,6 @@ const JobPickExecution: React.FC<Props> = ({ filterArgs, onBackToList }) => {
return next;
});
await refreshWorkbenchAfterScanPick();
if (canonicalLotForSol.pickOrderConsoCode) {
void checkAndCompletePickOrderByConsoCode(
canonicalLotForSol.pickOrderConsoCode,
)
.then((completionResponse) => {
console.log(
` Pick order completion check (workbench just complete):`,
completionResponse,
);
})
.catch((error) => {
console.error("Error checking pick order completion:", error);
});
}
setTimeout(() => {
checkAndAutoAssignNext();
}, 1000);
@@ -3166,18 +3151,6 @@ const JobPickExecution: React.FC<Props> = ({ filterArgs, onBackToList }) => {
return next;
});
await refreshWorkbenchAfterScanPick();
if (lot.pickOrderConsoCode) {
void checkAndCompletePickOrderByConsoCode(lot.pickOrderConsoCode)
.then((completionResponse) => {
console.log(
` Pick order completion check (workbench submit):`,
completionResponse,
);
})
.catch((error) => {
console.error("Error checking pick order completion:", error);
});
}
setTimeout(() => {
checkAndAutoAssignNext();
}, 1000);
@@ -3219,38 +3192,7 @@ const JobPickExecution: React.FC<Props> = ({ filterArgs, onBackToList }) => {
);
}

if (newStatus === "completed" && lot.pickOrderConsoCode) {
console.log(
` Lot ${lot.lotNo} completed, checking if pick order ${lot.pickOrderConsoCode} is complete...`,
);

try {
const completionResponse =
await checkAndCompletePickOrderByConsoCode(
lot.pickOrderConsoCode,
);
console.log(
` Pick order completion check result:`,
completionResponse,
);

if (completionResponse.code === "SUCCESS") {
console.log(
` Pick order ${lot.pickOrderConsoCode} completed successfully!`,
);
} else if (completionResponse.message === "not completed") {
console.log(
`⏳ Pick order not completed yet, more lines remaining`,
);
} else {
console.error(
` Error checking completion: ${completionResponse.message}`,
);
}
} catch (error) {
console.error("Error checking pick order completion:", error);
}
}
// Workbench completion is handled in backend scan-pick flow.

void fetchJobOrderData(pickOrderIdForRefresh);
console.log("Pick quantity submitted successfully!");
@@ -3279,7 +3221,6 @@ const JobPickExecution: React.FC<Props> = ({ filterArgs, onBackToList }) => {
refreshWorkbenchAfterScanPick,
combinedLotData,
workbenchScanPickQtyFromLot,
checkAndCompletePickOrderByConsoCode,
pickQtyData,
tPick,
workbenchStoreId,


+ 4
- 1
src/components/Shop/ShopDetail.tsx 查看文件

@@ -291,7 +291,10 @@ const ShopDetail: React.FC = () => {
shopName: String(shopDetail!.name),
shopCode: String(shopDetail!.code),
loadingSequence: addLoadingSequence,
districtReference: Number(lane.districtReference) || 0,
districtReference:
lane.districtReference != null && String(lane.districtReference).trim() !== ""
? String(lane.districtReference)
: null,
remark: remarkValue,
});


+ 4
- 1
src/components/Shop/TruckLaneDetail.tsx 查看文件

@@ -301,7 +301,10 @@ const TruckLaneDetail: React.FC = () => {
truckLanceCode: String(row.truckLanceCode || ""),
departureTime: departureTimeStr,
loadingSequence: Number(row.loadingSequence) || 0,
districtReference: Number(row.districtReference) || 0,
districtReference:
row.districtReference != null && String(row.districtReference).trim() !== ""
? String(row.districtReference)
: null,
storeId: storeIdStr,
remark: remarkValue,
});


Loading…
取消
儲存