품질관리 — vexplor_rps DB 컬럼명 정합 + 날짜/조인 타입 수정
Build and Push Images / build-and-push (push) Has been cancelled
Build and Push Images / build-and-push (push) Has been cancelled
vexplor_rps 의 purchase_order_master / sales_request_master / client_mng / code_info 가 wace_plm 의 컬럼명과 다른 부분을 정합. 수정: - pom.contract_objid → pom.contract_mgmt_objid - pom.product_cd → pom.product_code - pom.part_objid → 부재 (part_mng 조인 FALSE 처리, part_no/name 빈값) - srm.proposal_no → srm.request_mng_no - code_info: ci.objid 조인 → ci.code_value = pom.product_code - client_mng.partner_name → client.client_nm 날짜 컬럼 타입 차이 처리: - process_inspection_master.inspection_date (varchar) + inspector_id 빈값 → reg_date / writer fallback - pms_quality_semi_product_inspection.inspection_date (date) → COALESCE + TO_CHAR - incoming_inspection_detail.inspection_date (varchar) + reg_date fallback 데이터: - purchase_order_master 1행 waceplm → vexplor_rps 복사 (수입검사 요청 활성화) 수입검사 진행 필터에서 inspection_yn='검사' 하드코딩 제거(이전 커밋)로 '스킵' 행도 노출됨.
This commit is contained in:
@@ -37,17 +37,17 @@ router.get("/incoming-request", async (req: Request, res: Response) => {
|
|||||||
const params: any[] = [];
|
const params: any[] = [];
|
||||||
const add = (sql: string, ...v: any[]) => { v.forEach(x => params.push(x)); where.push(sql.replace(/\?/g, () => "$" + params.length)); };
|
const add = (sql: string, ...v: any[]) => { v.forEach(x => params.push(x)); where.push(sql.replace(/\?/g, () => "$" + params.length)); };
|
||||||
|
|
||||||
if (q.search_proposal_no) add("COALESCE(srm.proposal_no, '') ILIKE ?", `%${q.search_proposal_no}%`);
|
if (q.search_proposal_no) add("COALESCE(srm.request_mng_no, '') ILIKE ?", `%${q.search_proposal_no}%`);
|
||||||
if (q.search_purchase_order_no) add("pom.purchase_order_no ILIKE ?", `%${q.search_purchase_order_no}%`);
|
if (q.search_purchase_order_no) add("pom.purchase_order_no ILIKE ?", `%${q.search_purchase_order_no}%`);
|
||||||
if (q.project_no) add("COALESCE(cm.project_no, '') ILIKE ?", `%${q.project_no}%`);
|
if (q.project_no) add("COALESCE(cm.project_no, '') ILIKE ?", `%${q.project_no}%`);
|
||||||
if (q.search_part_no) add("COALESCE(pm.part_no, '') ILIKE ?", `%${q.search_part_no}%`);
|
if (q.search_part_no) add("COALESCE(pm.part_no, '') ILIKE ?", `%${q.search_part_no}%`);
|
||||||
if (q.search_part_name) add("COALESCE(pm.part_name, '') ILIKE ?", `%${q.search_part_name}%`);
|
if (q.search_part_name) add("COALESCE(pm.part_name, '') ILIKE ?", `%${q.search_part_name}%`);
|
||||||
if (q.search_partner) add("pom.partner_objid::text = ?", q.search_partner);
|
if (q.search_partner) add("pom.partner_objid::text = ?", q.search_partner);
|
||||||
if (q.search_product_cd) add("pom.product_cd::text = ?", q.search_product_cd);
|
if (q.search_product_cd) add("pom.product_code::text = ?", q.search_product_cd);
|
||||||
if (q.search_inspection_yn) add("COALESCE(iid.inspection_yn, '미요청') = ?", q.search_inspection_yn);
|
if (q.search_inspection_yn) add("COALESCE(iid.inspection_yn, '미요청') = ?", q.search_inspection_yn);
|
||||||
if (q.request_user_id) add("COALESCE(iid.request_user_id, pom.writer) = ?", q.request_user_id);
|
if (q.request_user_id) add("COALESCE(iid.request_user_id, pom.writer) = ?", q.request_user_id);
|
||||||
if (q.request_start_date) add("COALESCE(iid.request_date, pom.regdate::date) >= ?", q.request_start_date);
|
if (q.request_start_date) add("COALESCE(NULLIF(iid.request_date, ''), TO_CHAR(pom.regdate, 'YYYY-MM-DD')) >= ?", q.request_start_date);
|
||||||
if (q.request_end_date) add("COALESCE(iid.request_date, pom.regdate::date) <= ?", q.request_end_date);
|
if (q.request_end_date) add("COALESCE(NULLIF(iid.request_date, ''), TO_CHAR(pom.regdate, 'YYYY-MM-DD')) <= ?", q.request_end_date);
|
||||||
if (q.search_request_status) {
|
if (q.search_request_status) {
|
||||||
const s = q.search_request_status;
|
const s = q.search_request_status;
|
||||||
if (s === "미요청") where.push("iid.objid IS NULL");
|
if (s === "미요청") where.push("iid.objid IS NULL");
|
||||||
@@ -58,15 +58,15 @@ router.get("/incoming-request", async (req: Request, res: Response) => {
|
|||||||
const sql = `
|
const sql = `
|
||||||
SELECT
|
SELECT
|
||||||
pom.objid::text AS objid,
|
pom.objid::text AS objid,
|
||||||
COALESCE(srm.proposal_no, '') AS proposal_no,
|
COALESCE(srm.request_mng_no, '') AS proposal_no,
|
||||||
pom.purchase_order_no AS purchase_order_no,
|
pom.purchase_order_no AS purchase_order_no,
|
||||||
COALESCE(cm.project_no, '') AS project_no,
|
COALESCE(cm.project_no, '') AS project_no,
|
||||||
COALESCE(ci.code_name, '') AS product_name,
|
COALESCE(ci.code_name, '') AS product_name,
|
||||||
COALESCE(pm.part_no, '') AS part_no,
|
COALESCE(pm.part_no, '') AS part_no,
|
||||||
COALESCE(pm.part_name, '') AS part_name,
|
COALESCE(pm.part_name, '') AS part_name,
|
||||||
COALESCE(client.partner_name, '') AS partner_name,
|
COALESCE(client.client_nm, '') AS partner_name,
|
||||||
'-' AS delivery_status,
|
'-' AS delivery_status,
|
||||||
TO_CHAR(COALESCE(iid.request_date, pom.regdate::date), 'YYYY-MM-DD') AS request_date,
|
COALESCE(NULLIF(iid.request_date, ''), TO_CHAR(pom.regdate, 'YYYY-MM-DD')) AS request_date,
|
||||||
COALESCE(ui.user_name, '') AS request_user_name,
|
COALESCE(ui.user_name, '') AS request_user_name,
|
||||||
COALESCE(iid.inspection_yn, '-') AS inspection_yn,
|
COALESCE(iid.inspection_yn, '-') AS inspection_yn,
|
||||||
CASE
|
CASE
|
||||||
@@ -76,10 +76,11 @@ router.get("/incoming-request", async (req: Request, res: Response) => {
|
|||||||
END AS request_status
|
END AS request_status
|
||||||
FROM purchase_order_master pom
|
FROM purchase_order_master pom
|
||||||
LEFT JOIN sales_request_master srm ON srm.objid = pom.sales_request_objid
|
LEFT JOIN sales_request_master srm ON srm.objid = pom.sales_request_objid
|
||||||
LEFT JOIN contract_mgmt cm ON cm.objid = pom.contract_objid
|
LEFT JOIN contract_mgmt cm ON cm.objid = pom.contract_mgmt_objid
|
||||||
LEFT JOIN code_info ci ON ci.objid = pom.product_cd
|
LEFT JOIN code_info ci ON ci.code_value = pom.product_code
|
||||||
LEFT JOIN client_mng client ON client.objid = pom.partner_objid
|
LEFT JOIN client_mng client ON client.objid = pom.partner_objid
|
||||||
LEFT JOIN part_mng pm ON pm.objid = pom.part_objid
|
-- purchase_order_master 에 part_objid 가 없어 part_mng 직접 조인 불가. part_no/name 은 빈값으로 표시.
|
||||||
|
LEFT JOIN part_mng pm ON FALSE
|
||||||
LEFT JOIN incoming_inspection_detail iid ON iid.purchase_order_master_objid = pom.objid::text
|
LEFT JOIN incoming_inspection_detail iid ON iid.purchase_order_master_objid = pom.objid::text
|
||||||
LEFT JOIN user_info ui ON ui.user_id = COALESCE(iid.request_user_id, pom.writer)
|
LEFT JOIN user_info ui ON ui.user_id = COALESCE(iid.request_user_id, pom.writer)
|
||||||
WHERE ${where.join(" AND ")}
|
WHERE ${where.join(" AND ")}
|
||||||
@@ -108,16 +109,16 @@ router.get("/incoming-mgmt", async (req: Request, res: Response) => {
|
|||||||
const params: any[] = [];
|
const params: any[] = [];
|
||||||
const add = (sql: string, ...v: any[]) => { v.forEach(x => params.push(x)); where.push(sql.replace(/\?/g, () => "$" + params.length)); };
|
const add = (sql: string, ...v: any[]) => { v.forEach(x => params.push(x)); where.push(sql.replace(/\?/g, () => "$" + params.length)); };
|
||||||
|
|
||||||
if (q.search_proposal_no) add("COALESCE(srm.proposal_no, '') ILIKE ?", `%${q.search_proposal_no}%`);
|
if (q.search_proposal_no) add("COALESCE(srm.request_mng_no, '') ILIKE ?", `%${q.search_proposal_no}%`);
|
||||||
if (q.search_purchase_order_no) add("pom.purchase_order_no ILIKE ?", `%${q.search_purchase_order_no}%`);
|
if (q.search_purchase_order_no) add("pom.purchase_order_no ILIKE ?", `%${q.search_purchase_order_no}%`);
|
||||||
if (q.project_no) add("COALESCE(cm.project_no, '') ILIKE ?", `%${q.project_no}%`);
|
if (q.project_no) add("COALESCE(cm.project_no, '') ILIKE ?", `%${q.project_no}%`);
|
||||||
if (q.search_part_no) add("COALESCE(pm.part_no, '') ILIKE ?", `%${q.search_part_no}%`);
|
if (q.search_part_no) add("COALESCE(pm.part_no, '') ILIKE ?", `%${q.search_part_no}%`);
|
||||||
if (q.search_part_name) add("COALESCE(pm.part_name, '') ILIKE ?", `%${q.search_part_name}%`);
|
if (q.search_part_name) add("COALESCE(pm.part_name, '') ILIKE ?", `%${q.search_part_name}%`);
|
||||||
if (q.search_partner) add("pom.partner_objid::text = ?", q.search_partner);
|
if (q.search_partner) add("pom.partner_objid::text = ?", q.search_partner);
|
||||||
if (q.search_product_cd) add("pom.product_cd::text = ?", q.search_product_cd);
|
if (q.search_product_cd) add("pom.product_code::text = ?", q.search_product_cd);
|
||||||
if (q.inspector_id) add("iid.inspector_id = ?", q.inspector_id);
|
if (q.inspector_id) add("iid.inspector_id = ?", q.inspector_id);
|
||||||
if (q.inspection_start_date) add("iid.inspection_date >= ?", q.inspection_start_date);
|
if (q.inspection_start_date) add("COALESCE(NULLIF(iid.inspection_date, ''), TO_CHAR(iid.reg_date, 'YYYY-MM-DD')) >= ?", q.inspection_start_date);
|
||||||
if (q.inspection_end_date) add("iid.inspection_date <= ?", q.inspection_end_date);
|
if (q.inspection_end_date) add("COALESCE(NULLIF(iid.inspection_date, ''), TO_CHAR(iid.reg_date, 'YYYY-MM-DD')) <= ?", q.inspection_end_date);
|
||||||
if (q.search_inspection_status) {
|
if (q.search_inspection_status) {
|
||||||
const s = q.search_inspection_status;
|
const s = q.search_inspection_status;
|
||||||
if (s === "완료") where.push("iid.inspection_date IS NOT NULL AND COALESCE(iid.inspection_result, '') <> ''");
|
if (s === "완료") where.push("iid.inspection_date IS NOT NULL AND COALESCE(iid.inspection_result, '') <> ''");
|
||||||
@@ -127,16 +128,16 @@ router.get("/incoming-mgmt", async (req: Request, res: Response) => {
|
|||||||
const sql = `
|
const sql = `
|
||||||
SELECT
|
SELECT
|
||||||
iid.objid::text AS objid,
|
iid.objid::text AS objid,
|
||||||
TO_CHAR(iid.inspection_date, 'YYYY-MM-DD') AS inspection_date,
|
COALESCE(NULLIF(iid.inspection_date, ''), TO_CHAR(iid.reg_date, 'YYYY-MM-DD')) AS inspection_date,
|
||||||
COALESCE(ui_ins.user_name, '') AS inspector_name,
|
COALESCE(ui_ins.user_name, '') AS inspector_name,
|
||||||
COALESCE(srm.proposal_no, '') AS proposal_no,
|
COALESCE(srm.request_mng_no, '') AS proposal_no,
|
||||||
pom.purchase_order_no AS purchase_order_no,
|
pom.purchase_order_no AS purchase_order_no,
|
||||||
COALESCE(cm.project_no, '') AS project_no,
|
COALESCE(cm.project_no, '') AS project_no,
|
||||||
COALESCE(ci.code_name, '') AS product_name,
|
COALESCE(ci.code_name, '') AS product_name,
|
||||||
COALESCE(pm.product_name, '') AS model_name,
|
COALESCE(pm.product_name, '') AS model_name,
|
||||||
COALESCE(pm.part_no, '') AS part_no,
|
COALESCE(pm.part_no, '') AS part_no,
|
||||||
COALESCE(pm.part_name, '') AS part_name,
|
COALESCE(pm.part_name, '') AS part_name,
|
||||||
COALESCE(client.partner_name, '') AS partner_name,
|
COALESCE(client.client_nm, '') AS partner_name,
|
||||||
TO_CHAR(iid.reg_date, 'YYYY-MM-DD') AS delivery_date,
|
TO_CHAR(iid.reg_date, 'YYYY-MM-DD') AS delivery_date,
|
||||||
iid.inspection_qty AS delivery_qty,
|
iid.inspection_qty AS delivery_qty,
|
||||||
'-' AS delivery_status,
|
'-' AS delivery_status,
|
||||||
@@ -155,13 +156,13 @@ router.get("/incoming-mgmt", async (req: Request, res: Response) => {
|
|||||||
FROM incoming_inspection_detail iid
|
FROM incoming_inspection_detail iid
|
||||||
LEFT JOIN purchase_order_master pom ON pom.objid::text = iid.purchase_order_master_objid
|
LEFT JOIN purchase_order_master pom ON pom.objid::text = iid.purchase_order_master_objid
|
||||||
LEFT JOIN sales_request_master srm ON srm.objid = pom.sales_request_objid
|
LEFT JOIN sales_request_master srm ON srm.objid = pom.sales_request_objid
|
||||||
LEFT JOIN contract_mgmt cm ON cm.objid = pom.contract_objid
|
LEFT JOIN contract_mgmt cm ON cm.objid = pom.contract_mgmt_objid
|
||||||
LEFT JOIN code_info ci ON ci.objid = pom.product_cd
|
LEFT JOIN code_info ci ON ci.code_value = pom.product_code
|
||||||
LEFT JOIN client_mng client ON client.objid = pom.partner_objid
|
LEFT JOIN client_mng client ON client.objid = pom.partner_objid
|
||||||
LEFT JOIN part_mng pm ON pm.objid = pom.part_objid
|
LEFT JOIN part_mng pm ON pm.objid = pom.part_objid
|
||||||
LEFT JOIN user_info ui_ins ON ui_ins.user_id = iid.inspector_id
|
LEFT JOIN user_info ui_ins ON ui_ins.user_id = iid.inspector_id
|
||||||
WHERE ${where.join(" AND ")}
|
WHERE ${where.join(" AND ")}
|
||||||
ORDER BY iid.inspection_date DESC NULLS LAST, iid.objid DESC
|
ORDER BY COALESCE(NULLIF(iid.inspection_date, ''), TO_CHAR(iid.reg_date, 'YYYY-MM-DD')) DESC NULLS LAST, iid.objid DESC
|
||||||
LIMIT 500
|
LIMIT 500
|
||||||
`;
|
`;
|
||||||
const r = await pool.query(sql, params);
|
const r = await pool.query(sql, params);
|
||||||
@@ -183,8 +184,8 @@ router.get("/process-inspection", async (req: Request, res: Response) => {
|
|||||||
const params: any[] = [];
|
const params: any[] = [];
|
||||||
const add = (sql: string, ...v: any[]) => { v.forEach(x => params.push(x)); where.push(sql.replace(/\?/g, () => "$" + params.length)); };
|
const add = (sql: string, ...v: any[]) => { v.forEach(x => params.push(x)); where.push(sql.replace(/\?/g, () => "$" + params.length)); };
|
||||||
|
|
||||||
if (q.search_project_no) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 LEFT JOIN project_mgmt pj ON pj.objid = pid2.project_objid WHERE pid2.master_objid = pim.objid AND COALESCE(pj.project_no, '') ILIKE ?)", `%${q.search_project_no}%`);
|
if (q.search_project_no) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 LEFT JOIN project_mgmt pj ON pj.objid::text = NULLIF(pid2.project_objid, '') WHERE pid2.master_objid = pim.objid AND COALESCE(pj.project_no, '') ILIKE ?)", `%${q.search_project_no}%`);
|
||||||
if (q.productType) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 LEFT JOIN project_mgmt pj ON pj.objid = pid2.project_objid WHERE pid2.master_objid = pim.objid AND pj.product = ?)", q.productType);
|
if (q.productType) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 LEFT JOIN project_mgmt pj ON pj.objid::text = NULLIF(pid2.project_objid, '') WHERE pid2.master_objid = pim.objid AND pj.product::text = ?)", q.productType);
|
||||||
if (q.search_part_no) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 WHERE pid2.master_objid = pim.objid AND pid2.part_no ILIKE ?)", `%${q.search_part_no}%`);
|
if (q.search_part_no) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 WHERE pid2.master_objid = pim.objid AND pid2.part_no ILIKE ?)", `%${q.search_part_no}%`);
|
||||||
if (q.search_part_name) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 WHERE pid2.master_objid = pim.objid AND pid2.part_name ILIKE ?)", `%${q.search_part_name}%`);
|
if (q.search_part_name) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 WHERE pid2.master_objid = pim.objid AND pid2.part_name ILIKE ?)", `%${q.search_part_name}%`);
|
||||||
if (q.search_work_env_status) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 WHERE pid2.master_objid = pim.objid AND pid2.work_env_status = ?)", q.search_work_env_status);
|
if (q.search_work_env_status) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 WHERE pid2.master_objid = pim.objid AND pid2.work_env_status = ?)", q.search_work_env_status);
|
||||||
@@ -195,11 +196,13 @@ router.get("/process-inspection", async (req: Request, res: Response) => {
|
|||||||
if (q.search_inspection_result) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 WHERE pid2.master_objid = pim.objid AND pid2.inspection_result = ?)", q.search_inspection_result);
|
if (q.search_inspection_result) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 WHERE pid2.master_objid = pim.objid AND pid2.inspection_result = ?)", q.search_inspection_result);
|
||||||
if (q.search_process_cd) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 WHERE pid2.master_objid = pim.objid AND pid2.process_cd = ?)", q.search_process_cd);
|
if (q.search_process_cd) add("EXISTS (SELECT 1 FROM process_inspection_detail pid2 WHERE pid2.master_objid = pim.objid AND pid2.process_cd = ?)", q.search_process_cd);
|
||||||
|
|
||||||
|
// pim.inspection_date 가 varchar 이고 빈 문자열인 경우가 많아 reg_date 로 fallback.
|
||||||
|
// pid.project_objid 도 varchar 빈 문자열이 다수라 NULLIF + 안전 캐스트 필요.
|
||||||
const sql = `
|
const sql = `
|
||||||
SELECT
|
SELECT
|
||||||
pim.objid::text AS objid,
|
pim.objid::text AS objid,
|
||||||
TO_CHAR(pim.inspection_date, 'YYYY-MM-DD') AS inspection_date,
|
COALESCE(NULLIF(pim.inspection_date, ''), TO_CHAR(pim.reg_date, 'YYYY-MM-DD')) AS inspection_date,
|
||||||
COALESCE(ui.user_name, '') AS inspector_name,
|
COALESCE(ui_ins.user_name, ui_w.user_name, pim.writer, '') AS inspector_name,
|
||||||
COALESCE(MIN(pj.project_no), '') AS project_no,
|
COALESCE(MIN(pj.project_no), '') AS project_no,
|
||||||
COALESCE(MIN(ci.code_name), '') AS product_name,
|
COALESCE(MIN(ci.code_name), '') AS product_name,
|
||||||
COALESCE(MIN(pid.part_no), '') AS part_no,
|
COALESCE(MIN(pid.part_no), '') AS part_no,
|
||||||
@@ -216,12 +219,13 @@ router.get("/process-inspection", async (req: Request, res: Response) => {
|
|||||||
0 AS process_inspection_file_cnt
|
0 AS process_inspection_file_cnt
|
||||||
FROM process_inspection_master pim
|
FROM process_inspection_master pim
|
||||||
LEFT JOIN process_inspection_detail pid ON pid.master_objid = pim.objid
|
LEFT JOIN process_inspection_detail pid ON pid.master_objid = pim.objid
|
||||||
LEFT JOIN project_mgmt pj ON pj.objid = pid.project_objid
|
LEFT JOIN project_mgmt pj ON pj.objid::text = NULLIF(pid.project_objid, '')
|
||||||
LEFT JOIN code_info ci ON ci.objid::text = pj.product
|
LEFT JOIN code_info ci ON ci.objid::text = pj.product::text
|
||||||
LEFT JOIN user_info ui ON ui.user_id = pim.inspector_id
|
LEFT JOIN user_info ui_ins ON ui_ins.user_id = NULLIF(pim.inspector_id, '')
|
||||||
|
LEFT JOIN user_info ui_w ON ui_w.user_id = pim.writer
|
||||||
WHERE ${where.join(" AND ")}
|
WHERE ${where.join(" AND ")}
|
||||||
GROUP BY pim.objid, pim.inspection_date, ui.user_name
|
GROUP BY pim.objid, pim.inspection_date, pim.reg_date, pim.writer, ui_ins.user_name, ui_w.user_name
|
||||||
ORDER BY pim.inspection_date DESC NULLS LAST, pim.objid DESC
|
ORDER BY COALESCE(NULLIF(pim.inspection_date, ''), TO_CHAR(pim.reg_date, 'YYYY-MM-DD')) DESC NULLS LAST, pim.objid DESC
|
||||||
LIMIT 500
|
LIMIT 500
|
||||||
`;
|
`;
|
||||||
const r = await pool.query(sql, params);
|
const r = await pool.query(sql, params);
|
||||||
@@ -248,8 +252,9 @@ router.get("/semi-product-inspection", async (req: Request, res: Response) => {
|
|||||||
if (q.search_work_order_no) add("COALESCE(g.work_order_no, '') ILIKE ?", `%${q.search_work_order_no}%`);
|
if (q.search_work_order_no) add("COALESCE(g.work_order_no, '') ILIKE ?", `%${q.search_work_order_no}%`);
|
||||||
if (q.search_part_no) add("COALESCE(g.part_no, '') ILIKE ?", `%${q.search_part_no}%`);
|
if (q.search_part_no) add("COALESCE(g.part_no, '') ILIKE ?", `%${q.search_part_no}%`);
|
||||||
if (q.search_part_name) add("COALESCE(g.part_name, '') ILIKE ?", `%${q.search_part_name}%`);
|
if (q.search_part_name) add("COALESCE(g.part_name, '') ILIKE ?", `%${q.search_part_name}%`);
|
||||||
if (q.inspection_start_date) add("COALESCE(g.inspection_date, g.reg_date::date) >= ?", q.inspection_start_date);
|
// 반제품 inspection_date 는 date 타입 → reg_date 와 동일 도메인.
|
||||||
if (q.inspection_end_date) add("COALESCE(g.inspection_date, g.reg_date::date) <= ?", q.inspection_end_date);
|
if (q.inspection_start_date) add("COALESCE(g.inspection_date, g.reg_date::date) >= ?::date", q.inspection_start_date);
|
||||||
|
if (q.inspection_end_date) add("COALESCE(g.inspection_date, g.reg_date::date) <= ?::date", q.inspection_end_date);
|
||||||
if (q.search_writer) add("g.writer = ?", q.search_writer);
|
if (q.search_writer) add("g.writer = ?", q.search_writer);
|
||||||
if (q.search_defect_type) add("EXISTS (SELECT 1 FROM pms_quality_semi_product_inspection d2 WHERE d2.inspection_group_id = g.inspection_group_id AND d2.data_type = 'DEFECT' AND d2.defect_type = ?)", q.search_defect_type);
|
if (q.search_defect_type) add("EXISTS (SELECT 1 FROM pms_quality_semi_product_inspection d2 WHERE d2.inspection_group_id = g.inspection_group_id AND d2.data_type = 'DEFECT' AND d2.defect_type = ?)", q.search_defect_type);
|
||||||
if (q.search_responsible_dept) add("EXISTS (SELECT 1 FROM pms_quality_semi_product_inspection d2 WHERE d2.inspection_group_id = g.inspection_group_id AND d2.data_type = 'DEFECT' AND d2.responsible_dept = ?)", q.search_responsible_dept);
|
if (q.search_responsible_dept) add("EXISTS (SELECT 1 FROM pms_quality_semi_product_inspection d2 WHERE d2.inspection_group_id = g.inspection_group_id AND d2.data_type = 'DEFECT' AND d2.responsible_dept = ?)", q.search_responsible_dept);
|
||||||
@@ -257,7 +262,7 @@ router.get("/semi-product-inspection", async (req: Request, res: Response) => {
|
|||||||
const sql = `
|
const sql = `
|
||||||
SELECT
|
SELECT
|
||||||
g.objid::text AS objid,
|
g.objid::text AS objid,
|
||||||
TO_CHAR(g.inspection_date, 'YYYY-MM-DD') AS inspection_date,
|
TO_CHAR(COALESCE(g.inspection_date, g.reg_date::date), 'YYYY-MM-DD') AS inspection_date,
|
||||||
COALESCE(ui.user_name, g.writer, '') AS writer_name,
|
COALESCE(ui.user_name, g.writer, '') AS writer_name,
|
||||||
COALESCE(g.product_type, '') AS product_type,
|
COALESCE(g.product_type, '') AS product_type,
|
||||||
COALESCE(g.model_name, '') AS model_name,
|
COALESCE(g.model_name, '') AS model_name,
|
||||||
|
|||||||
Reference in New Issue
Block a user