|
|
|
@@ -41,7 +41,9 @@ import dayjs, { Dayjs } from 'dayjs'; |
|
|
|
import { PrinterCombo } from "@/app/api/settings/printer"; |
|
|
|
import { Autocomplete } from "@mui/material"; |
|
|
|
import FGPickOrderTicketReleaseTable from "./FGPickOrderTicketReleaseTable"; |
|
|
|
import TruckRoutingSummaryTab from "./TruckRoutingSummaryTab"; |
|
|
|
import TruckRoutingSummaryTab, { TruckRoutingSummaryFilters } from "./TruckRoutingSummaryTab"; |
|
|
|
import { clientAuthFetch } from "@/app/utils/clientAuthFetch"; |
|
|
|
import { NEXT_PUBLIC_API_URL } from "@/config/api"; |
|
|
|
|
|
|
|
interface Props { |
|
|
|
pickOrders: PickOrderResult[]; |
|
|
|
@@ -75,6 +77,12 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders, printerCombo }) => { |
|
|
|
const [selectedPrinterForAllDraft, setSelectedPrinterForAllDraft] = useState<PrinterCombo | null>(null); |
|
|
|
const [selectedPrinterForDraft, setSelectedPrinterForDraft] = useState<PrinterCombo | null>(null); |
|
|
|
const [selectedPrinterForRecord, setSelectedPrinterForRecord] = useState<PrinterCombo | null>(null); |
|
|
|
const [truckRoutingFilters, setTruckRoutingFilters] = useState<TruckRoutingSummaryFilters>({ |
|
|
|
storeId: "", |
|
|
|
truckLanceCode: "", |
|
|
|
date: "", |
|
|
|
}); |
|
|
|
const [isPrintingRoutingSummary, setIsPrintingRoutingSummary] = useState(false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -279,6 +287,73 @@ const [selectedPrinterForDraft, setSelectedPrinterForDraft] = useState<PrinterCo |
|
|
|
|
|
|
|
},[t, fgPickOrdersData, selectedPrinterForAllDraft]); |
|
|
|
|
|
|
|
const handlePrintTruckRoutingSummary = useCallback(async () => { |
|
|
|
const { storeId, truckLanceCode, date } = truckRoutingFilters; |
|
|
|
if (!storeId || !truckLanceCode || !date) { |
|
|
|
Swal.fire({ |
|
|
|
position: "bottom-end", |
|
|
|
icon: "warning", |
|
|
|
text: "請先選擇 2/F 或 4/F、車線和日期", |
|
|
|
showConfirmButton: false, |
|
|
|
timer: 1800, |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
setIsPrintingRoutingSummary(true); |
|
|
|
try { |
|
|
|
if (!selectedPrinterForAllDraft) { |
|
|
|
Swal.fire({ |
|
|
|
position: "bottom-end", |
|
|
|
icon: "warning", |
|
|
|
text: t("Please select a printer first"), |
|
|
|
showConfirmButton: false, |
|
|
|
timer: 1500 |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
const qs = new URLSearchParams({ |
|
|
|
printerId: selectedPrinterForAllDraft.id.toString(), |
|
|
|
printQty: "1", |
|
|
|
storeId, |
|
|
|
truckLanceCode, |
|
|
|
date, |
|
|
|
}).toString(); |
|
|
|
const url = `${NEXT_PUBLIC_API_URL}/truck-routing-summary/print-direct?${qs}`; |
|
|
|
const response = await clientAuthFetch(url, { |
|
|
|
method: "GET", |
|
|
|
}); |
|
|
|
if (!response.ok) { |
|
|
|
const errorText = await response.text(); |
|
|
|
throw new Error(`HTTP ${response.status}: ${errorText}`); |
|
|
|
} |
|
|
|
Swal.fire({ |
|
|
|
position: "bottom-end", |
|
|
|
icon: "success", |
|
|
|
text: t("Printed Successfully."), |
|
|
|
showConfirmButton: false, |
|
|
|
timer: 1500 |
|
|
|
}); |
|
|
|
} catch (error) { |
|
|
|
console.error("Failed to print Truck Routing Summary", error); |
|
|
|
Swal.fire({ |
|
|
|
icon: "error", |
|
|
|
text: "列印送貨路線摘要失敗,請稍後再試。", |
|
|
|
}); |
|
|
|
} finally { |
|
|
|
setIsPrintingRoutingSummary(false); |
|
|
|
} |
|
|
|
}, [truckRoutingFilters, selectedPrinterForAllDraft, t]); |
|
|
|
|
|
|
|
const isTruckRoutingTab = tabIndex === 5; |
|
|
|
const canPrintTruckRoutingSummary = Boolean( |
|
|
|
truckRoutingFilters.storeId && |
|
|
|
truckRoutingFilters.truckLanceCode && |
|
|
|
truckRoutingFilters.date && |
|
|
|
!isPrintingRoutingSummary, |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
@@ -671,9 +746,14 @@ const handleAssignByLane = useCallback(async ( |
|
|
|
height: '40px', |
|
|
|
}, |
|
|
|
}} |
|
|
|
onClick={handleAllDraft} |
|
|
|
onClick={isTruckRoutingTab ? handlePrintTruckRoutingSummary : handleAllDraft} |
|
|
|
disabled={isTruckRoutingTab ? !canPrintTruckRoutingSummary : false} |
|
|
|
> |
|
|
|
{t("Print All Draft")} ({releasedOrderCount}) |
|
|
|
{isTruckRoutingTab |
|
|
|
? isPrintingRoutingSummary |
|
|
|
? "生成中..." |
|
|
|
: "列印報告" |
|
|
|
: `${t("Print All Draft")} (${releasedOrderCount})`} |
|
|
|
</Button> |
|
|
|
{/* |
|
|
|
<Button |
|
|
|
@@ -766,7 +846,9 @@ const handleAssignByLane = useCallback(async ( |
|
|
|
listScope="all" |
|
|
|
/> |
|
|
|
)} |
|
|
|
{tabIndex === 5 && <TruckRoutingSummaryTab />} |
|
|
|
{tabIndex === 5 && ( |
|
|
|
<TruckRoutingSummaryTab onFiltersChange={setTruckRoutingFilters} /> |
|
|
|
)} |
|
|
|
</Box> |
|
|
|
</Box> |
|
|
|
); |
|
|
|
|