Selaa lähdekoodia

庫存品質檢測報告 add qc item select control, search date change from stock in line date to qc reuslt create date

庫存明細報告 improve speed

送貨訂單與倉存單位不符 excel 預計到貨→預計送貨
fix負數倉
CANCERYS\kw093 1 kuukausi sitten
vanhempi
commit
74c4129545
3 muutettua tiedostoa jossa 63 lisäystä ja 23 poistoa
  1. +14
    -13
      src/app/(main)/report/ItemQcReportFilters.tsx
  2. +29
    -2
      src/app/(main)/report/page.tsx
  3. +20
    -8
      src/config/reportConfig.ts

+ 14
- 13
src/app/(main)/report/ItemQcReportFilters.tsx Näytä tiedosto

@@ -8,10 +8,10 @@ import {
TextField,
} from "@mui/material";

export type QcItemFilter = "measurable" | "non_measurable";
export type QcItemFilter = "all" | "measurable";

export const REP010_DEFAULT_CRITERIA: Record<string, string> = {
qcItemFilter: "measurable",
qcItemScope: "all",
};

interface ItemQcReportFiltersProps {
@@ -21,18 +21,19 @@ interface ItemQcReportFiltersProps {

const gridSize = { xs: 12, sm: 6 };

/** FP-MTMS Version Checklist | Functions Ref. No. 64 | v1.0.0 | 2026-08-11 */
export default function ItemQcReportFilters({
criteria,
onFieldChange,
}: ItemQcReportFiltersProps) {
const qcItemFilter = (criteria.qcItemFilter || "measurable") as QcItemFilter;
const qcItemFilter = (criteria.qcItemScope || "all") as QcItemFilter;

return (
<Grid container spacing={3}>
<Grid item {...gridSize}>
<TextField
fullWidth
label="QC 檢測日期:由 Last In Date Start"
label="QC 檢測日期:由 QC Date Start"
type="date"
value={criteria.lastInDateStart || ""}
onChange={(e) => onFieldChange("lastInDateStart", e.target.value)}
@@ -42,7 +43,7 @@ export default function ItemQcReportFilters({
<Grid item {...gridSize}>
<TextField
fullWidth
label="QC 檢測日期:至 Last In Date End"
label="QC 檢測日期:至 QC Date End"
type="date"
value={criteria.lastInDateEnd || ""}
onChange={(e) => onFieldChange("lastInDateEnd", e.target.value)}
@@ -54,10 +55,10 @@ export default function ItemQcReportFilters({
fullWidth
select
label="QC 類型"
value={criteria.qcType || ""}
value={criteria.qcType || "all"}
onChange={(e) => onFieldChange("qcType", e.target.value)}
>
<MenuItem value="">全部</MenuItem>
<MenuItem value="all">全部</MenuItem>
<MenuItem value="IQC">IQC</MenuItem>
<MenuItem value="EPQC">EPQC</MenuItem>
</TextField>
@@ -75,17 +76,17 @@ export default function ItemQcReportFilters({
<TextField
fullWidth
select
label="溫濕度數據篩選"
value={qcItemFilter}
onChange={(e) => onFieldChange("qcItemFilter", e.target.value)}
label="QC 項目範圍"
value={qcItemFilter === "measurable" ? "measurable" : "all"}
onChange={(e) => onFieldChange("qcItemScope", e.target.value)}
>
<MenuItem value="all">全部 QC 項目</MenuItem>
<MenuItem value="measurable">只包含溫度濕度</MenuItem>
<MenuItem value="non_measurable">不包含溫度濕度</MenuItem>
</TextField>
<FormHelperText>
{qcItemFilter === "measurable"
? "僅匯出已填寫實測值的溫度/濕度 QC 項目。"
: "僅匯出非溫度/濕度之其他 QC 檢驗項目。"}
? "僅匯出溫度/濕度 QC 項目(與 production 舊預設相同)。"
: "匯出全部 QC 檢驗項目(含溫度/濕度)。"}
</FormHelperText>
</Grid>
</Grid>


+ 29
- 2
src/app/(main)/report/page.tsx Näytä tiedosto

@@ -44,7 +44,7 @@ interface ItemCodeWithName {
}

/** FP-MTMS Version Checklist | Functions Ref. No. 39 | v1.0.0 | 2026-08-03 */
/** FP-MTMS Version Checklist | Functions Ref. No. 60 | v1.0.0 | 2026-08-10 */
/** FP-MTMS Version Checklist | Functions Ref. No. 60 | v1.0.1 | 2026-08-11 */
export default function ReportPage() {
const { data: session } = useSession() as { data: SessionWithTokens | null };
const includeGrnFinancialColumns =
@@ -74,7 +74,8 @@ export default function ReportPage() {
const handleSelectReport = (reportId: string) => {
if (reportId === selectedReportId) return;
setSelectedReportId(reportId);
setCriteria({});
// rep-010: default QC item scope to all (show label, not empty select)
setCriteria(reportId === 'rep-010' ? { qcType: 'all', qcItemScope: 'all' } : {});
};

const handleFieldChange = (name: string, value: string | string[]) => {
@@ -252,6 +253,28 @@ export default function ReportPage() {
return p.toString();
};

/** FP-MTMS Version Checklist | Functions Ref. No. 64 | v1.0.0 | 2026-08-11 */
/** rep-010:qcItemScope → includeMeasurable / includeOther;qcType=all 不傳篩選 */
const buildRep010QueryString = (): string => {
const p = new URLSearchParams();
Object.entries(criteria).forEach(([key, value]) => {
if (key === 'qcItemScope') return;
if (key === 'qcType' && String(value).trim().toLowerCase() === 'all') return;
if (value != null && String(value).trim() !== '') {
p.set(key, String(value));
}
});
const scope = (criteria.qcItemScope || 'all').trim().toLowerCase();
if (scope === 'measurable') {
p.set('includeMeasurable', 'true');
p.set('includeOther', 'false');
} else {
p.set('includeMeasurable', 'true');
p.set('includeOther', 'true');
}
return p.toString();
};

const handlePrint = async () => {
if (!currentReport) return;
if (!validateRequiredFields()) return;
@@ -293,6 +316,8 @@ export default function ReportPage() {
let queryParams =
currentReport.id === 'rep-012'
? buildRep012QueryString()
: currentReport.id === 'rep-010'
? buildRep010QueryString()
: new URLSearchParams(criteria).toString();
// rep-016: single-day UI — mirror dateStart to dateEnd for backend API.
if (currentReport.id === 'rep-016') {
@@ -359,6 +384,8 @@ export default function ReportPage() {
const queryParams =
currentReport.id === 'rep-012'
? buildRep012QueryString()
: currentReport.id === 'rep-010'
? buildRep010QueryString()
: new URLSearchParams(criteria).toString();
const url = `${currentReport.apiEndpoint}?${queryParams}`;



+ 20
- 8
src/config/reportConfig.ts Näytä tiedosto

@@ -207,6 +207,7 @@ export const REPORTS: ReportDefinition[] = [
{ label: "貨品編號 Item Code", name: "itemCode", type: "text", required: false},
]
},

{
id: "rep-014",
@@ -236,18 +237,29 @@ export const REPORTS: ReportDefinition[] = [
},

{ id: "rep-010",
/** FP-MTMS Version Checklist | Functions Ref. No. 64 | v1.0.0 | 2026-08-11 */
title: "庫存品質檢測報告",
apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-item-qc-fail`,
fields: [
{ label: "QC 檢測日期:由 Last In Date Start", name: "lastInDateStart", type: "date", required: false },
{ label: "QC 檢測日期:至 Last In Date End", name: "lastInDateEnd", type: "date", required: false },
{ label: "QC 檢測日期:由 QC Date Start", name: "lastInDateStart", type: "date", required: false },
{ label: "QC 檢測日期:至 QC Date End", name: "lastInDateEnd", type: "date", required: false },
{ label: "QC 類型", name: "qcType", type: "select", required: false,
options: [
{ label: "全部", value: "" },
{ label: "IQC", value: "IQC" },
{ label: "EPQC", value: "EPQC" },
{ label: "全部", value: "all" },
{ label: "IQC(採購)", value: "IQC" },
{ label: "EPQC(工單)", value: "EPQC" },
] },
{ label: "貨品編號 Item Code", name: "itemCode", type: "text", required: false},
{
label: "QC 項目範圍",
name: "qcItemScope",
type: "select",
required: false,
options: [
{ label: "全部 QC 項目", value: "all" },
{ label: "只包含溫度濕度", value: "measurable" },
],
},
]
},
{ id: "rep-013",
@@ -386,14 +398,14 @@ export const REPORTS: ReportDefinition[] = [
],
},
{
/** FP-MTMS Version Checklist | Functions Ref. No. 60 | v1.0.0 | 2026-08-10 */
/** FP-MTMS Version Checklist | Functions Ref. No. 60 | v1.0.1 | 2026-08-11 */
id: "rep-018",
title: "送貨訂單與倉存單位不符報告",
apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-do-inventory-uom-mismatch`,
responseType: "excel",
fields: [
{
label: "預計貨日期 Estimated Arrival Date",
label: "預計貨日期 Estimated Arrival Date",
name: "deliveryDate",
type: "date",
required: true,
@@ -405,7 +417,7 @@ export const REPORTS: ReportDefinition[] = [
type: "select",
required: false,
options: [
{ label: "全部 All (2F+4F)", value: "All" },
{ label: "全部", value: "All" },
{ label: "2F", value: "2F" },
{ label: "4F", value: "4F" },
],


Ladataan…
Peruuta
Tallenna