CANCERYS\kw093 hace 2 meses
padre
commit
485b719514
Se han modificado 4 ficheros con 111 adiciones y 3 borrados
  1. +23
    -0
      src/app/api/pickOrder/actions.ts
  2. +1
    -1
      src/app/utils/formatUtil.ts
  3. +86
    -2
      src/components/FinishedGoodSearch/FinishedGoodSearch.tsx
  4. +1
    -0
      src/i18n/zh/pickOrder.json

+ 23
- 0
src/app/api/pickOrder/actions.ts Ver fichero

@@ -15,6 +15,7 @@ import {
} from ".";
import { PurchaseQcResult } from "../po/actions";
import { StringNullableChain } from "lodash";
// import { BASE_API_URL } from "@/config/api";

export interface SavePickOrderLineRequest {
@@ -986,3 +987,25 @@ export const fetchConsoStatus = cache(async (consoCode: string) => {
},
);
});

export interface ReleasedDoPickOrderResponse {
id: number;
storeId: string;
ticketNo: string;
pickOrderId: number;
ticketStatus: string;
doOrderId: number;
shopId: number;
handledBy: number;
ticketReleaseTime: string;
}

export const fetchReleasedDoPickOrders = async (): Promise<ReleasedDoPickOrderResponse[]> => {
const response = await serverFetchJson<ReleasedDoPickOrderResponse[]>(
`${BASE_API_URL}/doPickOrder/released`,
{
method: "GET",
},
);
return response;
};

+ 1
- 1
src/app/utils/formatUtil.ts Ver fichero

@@ -30,7 +30,7 @@ export const integerFormatter = new Intl.NumberFormat("en-HK", {});

export const INPUT_DATE_FORMAT = "YYYY-MM-DD";

export const OUTPUT_DATE_FORMAT = "YYYY/MM/DD";
export const OUTPUT_DATE_FORMAT = "YYYY-MM-DD";

export const INPUT_TIME_FORMAT = "HH:mm:ss";



+ 86
- 2
src/components/FinishedGoodSearch/FinishedGoodSearch.tsx Ver fichero

@@ -24,7 +24,7 @@ import NewCreateItem from "./newcreatitem";
import AssignAndRelease from "./AssignAndRelease";
import AssignTo from "./assignTo";
import { fetchAllItemsInClient, ItemCombo } from "@/app/api/settings/item/actions";
import { fetchPickOrderClient, autoAssignAndReleasePickOrder, autoAssignAndReleasePickOrderByStore } from "@/app/api/pickOrder/actions";
import { fetchPickOrderClient, autoAssignAndReleasePickOrder, autoAssignAndReleasePickOrderByStore, fetchReleasedDoPickOrders } from "@/app/api/pickOrder/actions";
import Jobcreatitem from "./Jobcreatitem";
import { useSession } from "next-auth/react";
import { SessionWithTokens } from "@/config/authConfig";
@@ -64,6 +64,19 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
);

const [fgPickOrdersData, setFgPickOrdersData] = useState<FGPickOrderResponse[]>([]);
const [releasedOrderCount, setReleasedOrderCount] = useState<number>(0);

const fetchReleasedOrderCount = useCallback(async () => {
try {
const releasedOrders = await fetchReleasedDoPickOrders();
// Count only orders that have a valid doOrderId
const validCount = releasedOrders.filter(order => order.doOrderId).length;
setReleasedOrderCount(validCount);
} catch (error) {
console.error("Error fetching released order count:", error);
setReleasedOrderCount(0);
}
}, []);

const handleDraft = useCallback(async () =>{
try{
@@ -105,6 +118,68 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
}
},[t, fgPickOrdersData]);

const handleAllDraft = useCallback(async () =>{
try {
const releasedOrders = await fetchReleasedDoPickOrders();

if(releasedOrders.length === 0) {
console.log("No released do_pick_order records found");
return;
}
console.log("Found released orders:", releasedOrders);

const confirmResult = await Swal.fire({
title: t("Confirm Print"),
text: t(`Do you want to print ${releasedOrders.length} draft(s)?`),
icon: "question",
showCancelButton: true,
confirmButtonText: t("Yes, print"),
cancelButtonText: t("Cancel"),
confirmButtonColor: "#3085d6",
cancelButtonColor: "#d33"
});

// If user cancels, exit the function
if (!confirmResult.isConfirmed) {
return;
}

for (const order of releasedOrders) {
const { doOrderId, pickOrderId } = order;

console.log(`Processing order - DO Order ID: ${doOrderId}, Pick order ID: ${pickOrderId}`);

const printRequest = {
printerId: 1,
printQty: 1,
isDraft: true,
numOfCarton: 0,
deliveryOrderId: doOrderId,
pickOrderId: pickOrderId
};

console.log("Printing draft with request:", printRequest)

const response = await printDN(printRequest);
if(!response.success) {
console.error(`Print failed for order ${order.ticketNo}:`, response.message);
}
}

Swal.fire({
position: "bottom-end",
icon: "success",
text: t(`Printed ${releasedOrders.length} draft(s) successfully.`),
showConfirmButton: false,
timer: 1500
});
} catch(error){
console.error("Error in handleAllDraft:",error);
}

},[t]);

const handleDN = useCallback(async () =>{
const askNumofCarton = await Swal.fire({
title: t("Enter the number of cartons: "),
@@ -319,6 +394,10 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
}
},[t, fgPickOrdersData]);

useEffect(() => {
fetchReleasedOrderCount();
}, [fetchReleasedOrderCount]);

useEffect(() => {
const onAssigned = () => {
localStorage.removeItem('hideCompletedUntilNext');
@@ -413,7 +492,6 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
setIsOpenCreateModal(false)
}, [])

useEffect(() => {
if (tabIndex === 3) {
@@ -629,6 +707,12 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
{/* ✅ Updated print buttons with completion status */}
<Grid item xs={6} display="flex" justifyContent="flex-end">
<Stack direction="row" spacing={1}>
<Button
variant="contained"
onClick={handleAllDraft}
>
{t("Print All Draft")} ({releasedOrderCount})
</Button>

<Button
variant="contained"


+ 1
- 0
src/i18n/zh/pickOrder.json Ver fichero

@@ -274,6 +274,7 @@
"Print Pick Order and DN Label":"列印提料單和送貨單標貼",
"Print Pick Order":"列印提料單",
"Print DN Label":"列印送貨單標貼",
"Print All Draft" : "列印全部草稿",
"If you confirm, the system will:":"如果您確認,系統將:",
"QR code verified.":"QR 碼驗證成功。",
"Order Finished":"訂單完成",


Cargando…
Cancelar
Guardar