| @@ -77,12 +77,11 @@ export interface AssignByStoreResponse { | |||||
| } | } | ||||
| export interface PrintDeliveryNoteRequest{ | export interface PrintDeliveryNoteRequest{ | ||||
| deliveryOrderId: number; | |||||
| doPickOrderId: number; | |||||
| printerId: number; | printerId: number; | ||||
| printQty: number; | printQty: number; | ||||
| numOfCarton: number; | numOfCarton: number; | ||||
| isDraft: boolean; | isDraft: boolean; | ||||
| pickOrderId: number; | |||||
| } | } | ||||
| export interface PrintDeliveryNoteResponse{ | export interface PrintDeliveryNoteResponse{ | ||||
| @@ -91,10 +90,10 @@ export interface PrintDeliveryNoteResponse{ | |||||
| } | } | ||||
| export interface PrintDNLabelsRequest{ | export interface PrintDNLabelsRequest{ | ||||
| deliveryOrderId: number, | |||||
| printerId: number, | |||||
| printQty: number, | |||||
| numOfCarton: number | |||||
| doPickOrderId: number; | |||||
| printerId: number; | |||||
| printQty: number; | |||||
| numOfCarton: number; | |||||
| } | } | ||||
| export interface PrintDNLabelsRespone{ | export interface PrintDNLabelsRespone{ | ||||
| @@ -186,14 +185,13 @@ export const fetchDoSearch = cache(async (code: string, shopName: string, status | |||||
| export async function printDN(request: PrintDeliveryNoteRequest){ | export async function printDN(request: PrintDeliveryNoteRequest){ | ||||
| const params = new URLSearchParams(); | const params = new URLSearchParams(); | ||||
| params.append('deliveryOrderId', request.deliveryOrderId.toString()); | |||||
| params.append('doPickOrderId', request.doPickOrderId.toString()); | |||||
| params.append('printerId', request.printerId.toString()); | params.append('printerId', request.printerId.toString()); | ||||
| if (request.printQty !== null && request.printQty !== undefined) { | if (request.printQty !== null && request.printQty !== undefined) { | ||||
| params.append('printQty', request.printQty.toString()); | params.append('printQty', request.printQty.toString()); | ||||
| } | } | ||||
| params.append('numOfCarton', request.numOfCarton.toString()); | params.append('numOfCarton', request.numOfCarton.toString()); | ||||
| params.append('isDraft', request.isDraft.toString()); | params.append('isDraft', request.isDraft.toString()); | ||||
| params.append('pickOrderId', request.pickOrderId.toString()); | |||||
| const response = await serverFetchWithNoContent(`${BASE_API_URL}/do/print-DN?${params.toString()}`,{ | const response = await serverFetchWithNoContent(`${BASE_API_URL}/do/print-DN?${params.toString()}`,{ | ||||
| method: "GET", | method: "GET", | ||||
| @@ -204,7 +202,7 @@ export async function printDN(request: PrintDeliveryNoteRequest){ | |||||
| export async function printDNLabels(request: PrintDNLabelsRequest){ | export async function printDNLabels(request: PrintDNLabelsRequest){ | ||||
| const params = new URLSearchParams(); | const params = new URLSearchParams(); | ||||
| params.append('deliveryOrderId', request.deliveryOrderId.toString()); | |||||
| params.append('doPickOrderId', request.doPickOrderId.toString()); | |||||
| params.append('printerId', request.printerId.toString()); | params.append('printerId', request.printerId.toString()); | ||||
| if (request.printQty !== null && request.printQty !== undefined) { | if (request.printQty !== null && request.printQty !== undefined) { | ||||
| params.append('printQty', request.printQty.toString()); | params.append('printQty', request.printQty.toString()); | ||||
| @@ -77,7 +77,7 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => { | |||||
| const fetchReleasedOrderCount = useCallback(async () => { | const fetchReleasedOrderCount = useCallback(async () => { | ||||
| try { | try { | ||||
| const releasedOrders = await fetchReleasedDoPickOrders(); | const releasedOrders = await fetchReleasedDoPickOrders(); | ||||
| const validCount = releasedOrders.filter(order => order.doOrderId).length; | |||||
| const validCount = releasedOrders.length; | |||||
| setReleasedOrderCount(validCount); | setReleasedOrderCount(validCount); | ||||
| } catch (error) { | } catch (error) { | ||||
| console.error("Error fetching released order count:", error); | console.error("Error fetching released order count:", error); | ||||
| @@ -111,6 +111,11 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => { | |||||
| try{ | try{ | ||||
| if (fgPickOrdersData.length === 0) { | if (fgPickOrdersData.length === 0) { | ||||
| console.error("No FG Pick order data available"); | console.error("No FG Pick order data available"); | ||||
| Swal.fire({ | |||||
| title: "", | |||||
| text: t("Please take one pick order before printing the draft."), | |||||
| icon: "info" | |||||
| }) | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -121,8 +126,7 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => { | |||||
| printQty: 1, | printQty: 1, | ||||
| isDraft: true, | isDraft: true, | ||||
| numOfCarton: 0, | numOfCarton: 0, | ||||
| deliveryOrderId: currentFgOrder.deliveryOrderId, | |||||
| pickOrderId: currentFgOrder.pickOrderId | |||||
| doPickOrderId: currentFgOrder.doPickOrderId | |||||
| }; | }; | ||||
| console.log("Printing draft with request: ", printRequest); | console.log("Printing draft with request: ", printRequest); | ||||
| @@ -149,11 +153,16 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => { | |||||
| const handleAllDraft = useCallback(async () =>{ | const handleAllDraft = useCallback(async () =>{ | ||||
| try { | try { | ||||
| const releasedOrders = await fetchReleasedDoPickOrders(); | |||||
| const releasedOrders = await fetchReleasedDoPickOrders(); | |||||
| console.log('fgPickOrdersData length:' + releasedOrders.length) | |||||
| if(releasedOrders.length === 0) { | if(releasedOrders.length === 0) { | ||||
| console.log("No released do_pick_order records found"); | console.log("No released do_pick_order records found"); | ||||
| Swal.fire({ | |||||
| title: "", | |||||
| text: t("No released pick order records found."), | |||||
| icon: "info" | |||||
| }) | |||||
| return; | return; | ||||
| } | } | ||||
| console.log("Found released orders:", releasedOrders); | console.log("Found released orders:", releasedOrders); | ||||
| @@ -184,17 +193,16 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => { | |||||
| }); | }); | ||||
| for (const order of releasedOrders) { | for (const order of releasedOrders) { | ||||
| const { doOrderId, pickOrderId } = order; | |||||
| const doPickOrderId = order.id | |||||
| console.log(`Processing order - DO Order ID: ${doOrderId}, Pick order ID: ${pickOrderId}`); | |||||
| console.log(`Processing order - DoPickOrder ID: ${doPickOrderId}, Ticket No: ${order.ticketNo}`); | |||||
| const printRequest = { | const printRequest = { | ||||
| printerId: 1, | printerId: 1, | ||||
| printQty: 1, | printQty: 1, | ||||
| isDraft: true, | isDraft: true, | ||||
| numOfCarton: 0, | numOfCarton: 0, | ||||
| deliveryOrderId: doOrderId, | |||||
| pickOrderId: pickOrderId | |||||
| doPickOrderId: doPickOrderId | |||||
| }; | }; | ||||
| console.log("Printing draft with request:", printRequest) | console.log("Printing draft with request:", printRequest) | ||||
| @@ -216,7 +224,7 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => { | |||||
| console.error("Error in handleAllDraft:",error); | console.error("Error in handleAllDraft:",error); | ||||
| } | } | ||||
| },[t]); | |||||
| },[t, fgPickOrdersData]); | |||||
| @@ -371,10 +371,19 @@ const fetchFgPickOrdersData = useCallback(async () => { | |||||
| setFgPickOrders(fgPickOrders); | setFgPickOrders(fgPickOrders); | ||||
| if (onFgPickOrdersChange) { | |||||
| onFgPickOrdersChange(fgPickOrders); | |||||
| } | |||||
| } catch (error) { | } catch (error) { | ||||
| console.error("❌ Error fetching FG pick orders:", error); | console.error("❌ Error fetching FG pick orders:", error); | ||||
| setFgPickOrders([]); | setFgPickOrders([]); | ||||
| if (onFgPickOrdersChange) { | |||||
| onFgPickOrdersChange([]); | |||||
| } | |||||
| } finally { | } finally { | ||||
| setFgPickOrdersLoading(false); | setFgPickOrdersLoading(false); | ||||
| } | } | ||||
| @@ -111,8 +111,7 @@ const GoodPickExecutionRecord: React.FC<Props> = ({ filterArgs }) => { | |||||
| const formProps = useForm(); | const formProps = useForm(); | ||||
| const errors = formProps.formState.errors; | const errors = formProps.formState.errors; | ||||
| // ✅ Print handler functions | |||||
| const handleDN = useCallback(async (deliveryOrderId: number, pickOrderId: number) => { | |||||
| const handleDN = useCallback(async (doPickOrderId: number) => { | |||||
| const askNumofCarton = await Swal.fire({ | const askNumofCarton = await Swal.fire({ | ||||
| title: t("Enter the number of cartons: "), | title: t("Enter the number of cartons: "), | ||||
| icon: "info", | icon: "info", | ||||
| @@ -148,8 +147,7 @@ const GoodPickExecutionRecord: React.FC<Props> = ({ filterArgs }) => { | |||||
| printQty: 1, | printQty: 1, | ||||
| isDraft: false, | isDraft: false, | ||||
| numOfCarton: numOfCartons, | numOfCarton: numOfCartons, | ||||
| deliveryOrderId: deliveryOrderId, | |||||
| pickOrderId: pickOrderId | |||||
| doPickOrderId: doPickOrderId | |||||
| }; | }; | ||||
| console.log("Printing Delivery Note with request: ", printRequest); | console.log("Printing Delivery Note with request: ", printRequest); | ||||
| @@ -173,7 +171,7 @@ const GoodPickExecutionRecord: React.FC<Props> = ({ filterArgs }) => { | |||||
| } | } | ||||
| }, [t]); | }, [t]); | ||||
| const handleDNandLabel = useCallback(async (deliveryOrderId: number, pickOrderId: number) => { | |||||
| const handleDNandLabel = useCallback(async (doPickOrderId: number) => { | |||||
| const askNumofCarton = await Swal.fire({ | const askNumofCarton = await Swal.fire({ | ||||
| title: t("Enter the number of cartons: "), | title: t("Enter the number of cartons: "), | ||||
| icon: "info", | icon: "info", | ||||
| @@ -205,19 +203,18 @@ const GoodPickExecutionRecord: React.FC<Props> = ({ filterArgs }) => { | |||||
| const numOfCartons = askNumofCarton.value; | const numOfCartons = askNumofCarton.value; | ||||
| try{ | try{ | ||||
| const printDNRequest = { | const printDNRequest = { | ||||
| printerId: 1, | |||||
| printQty: 1, | |||||
| isDraft: false, | |||||
| numOfCarton: numOfCartons, | |||||
| deliveryOrderId: deliveryOrderId, | |||||
| pickOrderId: pickOrderId | |||||
| printerId: 1, | |||||
| printQty: 1, | |||||
| isDraft: false, | |||||
| numOfCarton: numOfCartons, | |||||
| doPickOrderId: doPickOrderId, | |||||
| }; | }; | ||||
| const printDNLabelsRequest = { | const printDNLabelsRequest = { | ||||
| printerId: 1, | printerId: 1, | ||||
| printQty: 1, | printQty: 1, | ||||
| numOfCarton: numOfCartons, | numOfCarton: numOfCartons, | ||||
| deliveryOrderId: deliveryOrderId | |||||
| doPickOrderId: doPickOrderId | |||||
| }; | }; | ||||
| console.log("Printing Labels with request: ", printDNLabelsRequest); | console.log("Printing Labels with request: ", printDNLabelsRequest); | ||||
| @@ -251,7 +248,7 @@ const GoodPickExecutionRecord: React.FC<Props> = ({ filterArgs }) => { | |||||
| } | } | ||||
| }, [t]); | }, [t]); | ||||
| const handleLabel = useCallback(async (deliveryOrderId: number) => { | |||||
| const handleLabel = useCallback(async (doPickOrderId: number) => { | |||||
| const askNumofCarton = await Swal.fire({ | const askNumofCarton = await Swal.fire({ | ||||
| title: t("Enter the number of cartons: "), | title: t("Enter the number of cartons: "), | ||||
| icon: "info", | icon: "info", | ||||
| @@ -286,7 +283,7 @@ const GoodPickExecutionRecord: React.FC<Props> = ({ filterArgs }) => { | |||||
| printerId: 1, | printerId: 1, | ||||
| printQty: 1, | printQty: 1, | ||||
| numOfCarton: numOfCartons, | numOfCarton: numOfCartons, | ||||
| deliveryOrderId: deliveryOrderId, | |||||
| doPickOrderId: doPickOrderId | |||||
| }; | }; | ||||
| console.log("Printing Labels with request: ", printRequest); | console.log("Printing Labels with request: ", printRequest); | ||||
| @@ -687,14 +684,12 @@ if (showDetailView && selectedDoPickOrder) { | |||||
| > | > | ||||
| {t("View Details")} | {t("View Details")} | ||||
| </Button> | </Button> | ||||
| {doPickOrder.fgPickOrders && doPickOrder.fgPickOrders.length > 0 && ( | |||||
| <> | <> | ||||
| <Button | <Button | ||||
| variant="contained" | variant="contained" | ||||
| onClick={() => handleDN( | onClick={() => handleDN( | ||||
| doPickOrder.fgPickOrders[0].deliveryOrderId, | |||||
| doPickOrder.fgPickOrders[0].pickOrderId | |||||
| doPickOrder.id | |||||
| )} | )} | ||||
| > | > | ||||
| {t("Print Pick Order")} | {t("Print Pick Order")} | ||||
| @@ -702,8 +697,7 @@ if (showDetailView && selectedDoPickOrder) { | |||||
| <Button | <Button | ||||
| variant="contained" | variant="contained" | ||||
| onClick={() => handleDNandLabel( | onClick={() => handleDNandLabel( | ||||
| doPickOrder.fgPickOrders[0].deliveryOrderId, | |||||
| doPickOrder.fgPickOrders[0].pickOrderId | |||||
| doPickOrder.id | |||||
| )} | )} | ||||
| > | > | ||||
| {t("Print DN & Label")} | {t("Print DN & Label")} | ||||
| @@ -711,13 +705,13 @@ if (showDetailView && selectedDoPickOrder) { | |||||
| <Button | <Button | ||||
| variant="contained" | variant="contained" | ||||
| onClick={() => handleLabel( | onClick={() => handleLabel( | ||||
| doPickOrder.fgPickOrders[0].deliveryOrderId | |||||
| doPickOrder.id | |||||
| )} | )} | ||||
| > | > | ||||
| {t("Print Label")} | {t("Print Label")} | ||||
| </Button> | </Button> | ||||
| </> | </> | ||||
| )} | |||||
| ) | |||||
| </CardActions> | </CardActions> | ||||
| </Card> | </Card> | ||||
| ))} | ))} | ||||
| @@ -403,5 +403,7 @@ | |||||
| "Select Date": "請選擇日期", | "Select Date": "請選擇日期", | ||||
| "Print DN & Label": "列印提料單和送貨單標籤", | "Print DN & Label": "列印提料單和送貨單標籤", | ||||
| "Print Label": "列印送貨單標籤", | "Print Label": "列印送貨單標籤", | ||||
| "Ticket Release Table": "查看提貨情況" | |||||
| "Ticket Release Table": "查看提貨情況", | |||||
| "Please take one pick order before printing the draft.": "請先從下方選取提料單,再列印草稿。", | |||||
| "No released pick order records found.": "目前沒有可用的提料單。" | |||||
| } | } | ||||