diff --git a/backend-node/src/services/mbomRequirementService.ts b/backend-node/src/services/mbomRequirementService.ts index 602bedc2..34a54e29 100644 --- a/backend-node/src/services/mbomRequirementService.ts +++ b/backend-node/src/services/mbomRequirementService.ts @@ -95,14 +95,14 @@ export async function getSemiRequirement(items: MbomRequirementInputItem[]): Pro SELECT MD.PART_NO, MD.PART_NAME, - COALESCE(NULLIF(MD.QTY, '')::INTEGER, 1) AS ITEM_QTY, + COALESCE(MD.QTY, 1)::INTEGER AS ITEM_QTY, P.PART_TYPE, COALESCE((SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = P.PART_TYPE LIMIT 1), '') AS CATEGORY_NAME, COALESCE(P.UNIT, '') AS UNIT, COALESCE(P.MATERIAL, '') AS MATERIAL, COALESCE(P.SPEC, '') AS SPEC FROM MBOM_DETAIL MD - INNER JOIN PART_MNG P ON P.OBJID::VARCHAR = MD.PART_OBJID + INNER JOIN PART_MNG P ON P.OBJID = MD.PART_OBJID WHERE MD.MBOM_HEADER_OBJID = $1 AND MD.STATUS = 'ACTIVE' AND (MD.PARENT_OBJID IS NOT NULL AND MD.PARENT_OBJID != '') @@ -162,11 +162,11 @@ export async function getRawRequirement(items: MbomRequirementInputItem[]): Prom SELECT MD.PART_NO, MD.PART_NAME, - COALESCE(NULLIF(MD.QTY, '')::INTEGER, 1) AS ITEM_QTY, + COALESCE(MD.QTY, 1)::INTEGER AS ITEM_QTY, COALESCE((SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = P.PART_TYPE LIMIT 1), '') AS CATEGORY_NAME, COALESCE(P.UNIT, '') AS UNIT FROM MBOM_DETAIL MD - INNER JOIN PART_MNG P ON P.OBJID::VARCHAR = MD.PART_OBJID + INNER JOIN PART_MNG P ON P.OBJID = MD.PART_OBJID WHERE MD.MBOM_HEADER_OBJID = $1 AND MD.STATUS = 'ACTIVE' AND (MD.PARENT_OBJID IS NOT NULL AND MD.PARENT_OBJID != '') @@ -207,7 +207,7 @@ export async function getRawRequirement(items: MbomRequirementInputItem[]): Prom SELECT MD.RAW_MATERIAL_PART_NO AS PART_NO, MD.RAW_MATERIAL AS PART_NAME, - COALESCE(NULLIF(MD.REQUIRED_QTY, '')::NUMERIC, 0) AS ITEM_QTY, + COALESCE(MD.REQUIRED_QTY, 0)::NUMERIC AS ITEM_QTY, MD.RAW_MATERIAL, MD.RAW_MATERIAL_SIZE FROM MBOM_DETAIL MD diff --git a/frontend/app/(main)/COMPANY_16/production/prod-plan-result-equip/page.tsx b/frontend/app/(main)/COMPANY_16/production/plan-result-equip/page.tsx similarity index 96% rename from frontend/app/(main)/COMPANY_16/production/prod-plan-result-equip/page.tsx rename to frontend/app/(main)/COMPANY_16/production/plan-result-equip/page.tsx index b1eaf102..6c40124c 100644 --- a/frontend/app/(main)/COMPANY_16/production/prod-plan-result-equip/page.tsx +++ b/frontend/app/(main)/COMPANY_16/production/plan-result-equip/page.tsx @@ -91,20 +91,20 @@ export default function ProdPlanResultEquipPage() { ); const GRID_COLUMNS: DataGridColumn[] = useMemo(() => ([ - { key: "project_no", label: "프로젝트번호", width: "w-[130px]" }, - { key: "product_name", label: "제품구분", width: "w-[100px]", align: "center" }, - { key: "category_code_name", label: "주문유형", width: "w-[100px]", align: "center" }, - { key: "production_type_name", label: "생산유형", width: "w-[100px]", align: "center" }, + { key: "project_no", label: "프로젝트번호", width: "w-[140px]" }, + { key: "product_name", label: "제품구분", width: "w-[110px]", align: "center" }, + { key: "category_code_name", label: "주문유형", width: "w-[110px]", align: "center" }, + { key: "production_type_name", label: "생산유형", width: "w-[110px]", align: "center" }, { key: "customer_name", label: "고객사", minWidth: "min-w-[160px]" }, - { key: "req_del_date", label: "요청납기", width: "w-[110px]", align: "center" }, + { key: "req_del_date", label: "요청납기", width: "w-[115px]", align: "center" }, { key: "customer_request", label: "고객사요청사항", minWidth: "min-w-[200px]" }, { key: "part_no", label: "품번", width: "w-[140px]" }, { key: "part_name", label: "품명", minWidth: "min-w-[180px]" }, { key: "serial_no", label: "S/N", width: "w-[110px]", align: "center" }, - { key: "prod_wbs_cnt", label: "생산WBS", width: "w-[90px]", align: "right", formatNumber: true }, - { key: "prod_progress_rate", label: "생산진척율(%)", width: "w-[120px]", align: "right" }, - { key: "delv_wbs_cnt", label: "납품WBS", width: "w-[90px]", align: "right", formatNumber: true }, - { key: "delv_progress_rate", label: "납품진척율(%)", width: "w-[120px]", align: "right" }, + { key: "prod_wbs_cnt", label: "생산WBS", width: "w-[110px]", align: "right", formatNumber: true }, + { key: "prod_progress_rate", label: "생산진척율(%)", width: "w-[140px]", align: "right" }, + { key: "delv_wbs_cnt", label: "납품WBS", width: "w-[110px]", align: "right", formatNumber: true }, + { key: "delv_progress_rate", label: "납품진척율(%)", width: "w-[140px]", align: "right" }, ]), []); const summary = useMemo(() => { @@ -173,7 +173,7 @@ export default function ProdPlanResultEquipPage() { showRowNumber showCheckbox emptyMessage="조건에 맞는 데이터가 없습니다." - gridId="production-prod-plan-result-equip" + gridId="production-plan-result-equip" pageSizeOptions={[25, 50, 100, 200, 500]} paginationStyle="range" serverPaging diff --git a/frontend/app/(main)/COMPANY_16/production/prod-plan-result/page.tsx b/frontend/app/(main)/COMPANY_16/production/plan-result/page.tsx similarity index 95% rename from frontend/app/(main)/COMPANY_16/production/prod-plan-result/page.tsx rename to frontend/app/(main)/COMPANY_16/production/plan-result/page.tsx index 527e5450..20ed8ced 100644 --- a/frontend/app/(main)/COMPANY_16/production/prod-plan-result/page.tsx +++ b/frontend/app/(main)/COMPANY_16/production/plan-result/page.tsx @@ -108,24 +108,24 @@ export default function ProdPlanResultPage() { }, []); const GRID_COLUMNS: DataGridColumn[] = useMemo(() => ([ - { key: "project_no", label: "프로젝트번호", width: "w-[130px]" }, - { key: "product_name", label: "제품구분", width: "w-[100px]", align: "center" }, - { key: "category_code_name", label: "주문유형", width: "w-[100px]", align: "center" }, - { key: "production_type_name",label: "생산유형", width: "w-[100px]", align: "center" }, + { key: "project_no", label: "프로젝트번호", width: "w-[140px]" }, + { key: "product_name", label: "제품구분", width: "w-[110px]", align: "center" }, + { key: "category_code_name", label: "주문유형", width: "w-[110px]", align: "center" }, + { key: "production_type_name",label: "생산유형", width: "w-[110px]", align: "center" }, { key: "customer_name", label: "고객사", minWidth: "min-w-[160px]" }, - { key: "req_del_date", label: "요청납기", width: "w-[110px]", align: "center" }, - { key: "customer_request", label: "고객사요청사항", minWidth: "min-w-[180px]" }, + { key: "req_del_date", label: "요청납기", width: "w-[115px]", align: "center" }, + { key: "customer_request", label: "고객사요청사항", minWidth: "min-w-[190px]" }, { key: "part_no", label: "품번", width: "w-[140px]" }, { key: "part_name", label: "품명", minWidth: "min-w-[180px]" }, { key: "serial_no", label: "S/N", width: "w-[110px]", align: "center", onClick: openSerial }, - { key: "quantity", label: "수주수량", width: "w-[90px]", align: "right", formatNumber: true }, - { key: "extra_prod_qty", label: "추가생산수량", width: "w-[110px]", align: "right", formatNumber: true }, - { key: "total_prod_qty", label: "총생산수량", width: "w-[100px]", align: "right", formatNumber: true }, - { key: "assembly_qty", label: "완조립", width: "w-[80px]", align: "right", formatNumber: true }, - { key: "inspection_qty", label: "검사", width: "w-[80px]", align: "right", formatNumber: true }, - { key: "ship_wait_qty", label: "포장", width: "w-[80px]", align: "right", formatNumber: true }, - { key: "writer_name", label: "등록자", width: "w-[80px]", align: "center" }, - { key: "regdate_title", label: "등록일", width: "w-[100px]", align: "center" }, + { key: "quantity", label: "수주수량", width: "w-[110px]", align: "right", formatNumber: true }, + { key: "extra_prod_qty", label: "추가생산수량", width: "w-[130px]", align: "right", formatNumber: true }, + { key: "total_prod_qty", label: "총생산수량", width: "w-[120px]", align: "right", formatNumber: true }, + { key: "assembly_qty", label: "완조립", width: "w-[95px]", align: "right", formatNumber: true }, + { key: "inspection_qty", label: "검사", width: "w-[85px]", align: "right", formatNumber: true }, + { key: "ship_wait_qty", label: "포장", width: "w-[85px]", align: "right", formatNumber: true }, + { key: "writer_name", label: "등록자", width: "w-[95px]", align: "center" }, + { key: "regdate_title", label: "등록일", width: "w-[105px]", align: "center" }, ]), [openSerial]); const summary = useMemo(() => { @@ -205,7 +205,7 @@ export default function ProdPlanResultPage() { showRowNumber showCheckbox emptyMessage="조건에 맞는 데이터가 없습니다." - gridId="production-prod-plan-result" + gridId="production-plan-result" pageSizeOptions={[25, 50, 100, 200, 500]} paginationStyle="range" serverPaging diff --git a/frontend/app/(main)/COMPANY_16/production/raw-material-requirement/page.tsx b/frontend/app/(main)/COMPANY_16/production/raw-material-req/page.tsx similarity index 99% rename from frontend/app/(main)/COMPANY_16/production/raw-material-requirement/page.tsx rename to frontend/app/(main)/COMPANY_16/production/raw-material-req/page.tsx index 1f66806e..488ac154 100644 --- a/frontend/app/(main)/COMPANY_16/production/raw-material-requirement/page.tsx +++ b/frontend/app/(main)/COMPANY_16/production/raw-material-req/page.tsx @@ -184,7 +184,7 @@ export default function RawMaterialRequirementPage() { loading={loading} showRowNumber emptyMessage="조회 결과가 없습니다." - gridId="production-raw-material-requirement" + gridId="production-raw-material-req" pageSizeOptions={[25, 50, 100, 200, 500]} paginationStyle="range" showColumnSettings diff --git a/frontend/app/(main)/COMPANY_16/production/semi-product-requirement/page.tsx b/frontend/app/(main)/COMPANY_16/production/semi-product-req/page.tsx similarity index 99% rename from frontend/app/(main)/COMPANY_16/production/semi-product-requirement/page.tsx rename to frontend/app/(main)/COMPANY_16/production/semi-product-req/page.tsx index 92f7dfb6..abd77c08 100644 --- a/frontend/app/(main)/COMPANY_16/production/semi-product-requirement/page.tsx +++ b/frontend/app/(main)/COMPANY_16/production/semi-product-req/page.tsx @@ -185,7 +185,7 @@ export default function SemiProductRequirementPage() { loading={loading} showRowNumber emptyMessage="조회 결과가 없습니다." - gridId="production-semi-product-requirement" + gridId="production-semi-product-req" pageSizeOptions={[25, 50, 100, 200, 500]} paginationStyle="range" showColumnSettings diff --git a/frontend/components/common/DataGrid.tsx b/frontend/components/common/DataGrid.tsx index e6286394..f4e47cc8 100644 --- a/frontend/components/common/DataGrid.tsx +++ b/frontend/components/common/DataGrid.tsx @@ -188,7 +188,7 @@ function SortableHeaderCell({ if (col.sortable !== false) onSort(col.key); }} > - {col.label} + {col.label} {isSorted && ( {sortDir === "asc" ? "↑" : "↓"} )}