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" ? "↑" : "↓"}
)}