V2025121801 #104

Merged
leeheejin merged 2 commits from V2025121801 into main 2025-12-18 00:46:06 +00:00
12 changed files with 679 additions and 241 deletions

View File

@@ -9434,4 +9434,97 @@ SELECT
ORDER BY SCM.REGDATE DESC
</select>
<!-- ==================== 소재 관리 (MATERIAL_MNG) ==================== -->
<!-- 소재 목록 조회 (그리드용) -->
<select id="getMaterialMngGridList" parameterType="map" resultType="map">
SELECT
OBJID,
MATERIAL_CODE,
MATERIAL_NAME,
MATERIAL_PART_NO,
SIZE_SPEC,
REMARK,
STATUS,
CASE UPPER(STATUS)
WHEN 'ACTIVE' THEN '활성'
WHEN 'INACTIVE' THEN '비활성'
ELSE STATUS
END AS STATUS_NAME,
WRITER,
TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REGDATE
FROM MATERIAL_MNG
WHERE 1=1
<if test="material_name != null and material_name != ''">
AND UPPER(MATERIAL_NAME) LIKE UPPER('%' || #{material_name} || '%')
</if>
<if test="material_code != null and material_code != ''">
AND UPPER(MATERIAL_CODE) LIKE UPPER('%' || #{material_code} || '%')
</if>
ORDER BY REGDATE DESC
</select>
<!-- 소재 상세 조회 -->
<select id="getMaterialMngInfo" parameterType="map" resultType="map">
SELECT
OBJID,
MATERIAL_CODE,
MATERIAL_NAME,
MATERIAL_PART_NO,
SIZE_SPEC,
REMARK,
STATUS,
WRITER,
TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REGDATE,
EDITER,
TO_CHAR(EDIT_DATE, 'YYYY-MM-DD') AS EDIT_DATE
FROM MATERIAL_MNG
WHERE OBJID = #{objid}
</select>
<!-- 소재 등록 -->
<insert id="insertMaterialMng" parameterType="map">
INSERT INTO MATERIAL_MNG (
OBJID,
MATERIAL_CODE,
MATERIAL_NAME,
MATERIAL_PART_NO,
SIZE_SPEC,
REMARK,
STATUS,
WRITER,
REGDATE
) VALUES (
#{objid},
#{material_code},
#{material_name},
#{material_part_no},
#{size_spec},
#{remark},
COALESCE(#{status}, 'ACTIVE'),
#{userId},
NOW()
)
</insert>
<!-- 소재 수정 -->
<update id="updateMaterialMng" parameterType="map">
UPDATE MATERIAL_MNG SET
MATERIAL_CODE = #{material_code},
MATERIAL_NAME = #{material_name},
MATERIAL_PART_NO = #{material_part_no},
SIZE_SPEC = #{size_spec},
REMARK = #{remark},
STATUS = #{status},
EDITER = #{userId},
EDIT_DATE = NOW()
WHERE OBJID = #{objid}
</update>
<!-- 소재 삭제 -->
<delete id="deleteMaterialMng" parameterType="map">
DELETE FROM MATERIAL_MNG
WHERE OBJID = #{objid}
</delete>
</mapper>

View File

@@ -2529,7 +2529,6 @@ SELECT option_objid::VARCHAR AS CODE
</select>
<select id="getPartInfo" parameterType="map" resultType="map">
SELECT
PART_NO
@@ -2717,24 +2716,48 @@ ORDER BY COALESCE(T.REVISION, '1.0')
WHERE OBJID::numeric = #{OBJID}::numeric
</select>
<select id="getmatersupplyselect" parameterType="map" resultType="map">
SELECT
OBJID::VARCHAR AS CODE
,SUPPLY_NAME AS NAME
,OBJID::VARCHAR AS CODE_ID
,SUPPLY_NAME AS CODE_NAME
,SUPPLY_CODE AS CODE_CD
,REG_NO
,CHARGE_USER_NAME
,SUPPLY_TEL_NO
,SUPPLY_FAX_NO
,PAYMENT_METHOD
,STATUS AS STATUS
,'' AS ID
,'' AS EXT_VAL
FROM ADMIN_SUPPLY_MNG
ORDER BY SUPPLY_NAME
</select>
<!-- 공급업체 목록 조회 (ADMIN_SUPPLY_MNG 테이블) -->
<select id="getmatersupplyselect" parameterType="map" resultType="map">
SELECT
OBJID::VARCHAR AS CODE
,SUPPLY_NAME AS NAME
,OBJID::VARCHAR AS CODE_ID
,SUPPLY_NAME AS CODE_NAME
,SUPPLY_CODE AS CODE_CD
,REG_NO
,CHARGE_USER_NAME
,SUPPLY_TEL_NO
,SUPPLY_FAX_NO
,PAYMENT_METHOD
,STATUS AS STATUS
,'' AS ID
,'' AS EXT_VAL
FROM ADMIN_SUPPLY_MNG
ORDER BY SUPPLY_NAME
</select>
<!-- 일반거래처 목록 조회 (CLIENT_MNG 테이블) - 발주서용 -->
<select id="getClientMngSupplySelect" parameterType="map" resultType="map">
SELECT
OBJID::VARCHAR AS CODE
,CLIENT_NM AS NAME
,OBJID::VARCHAR AS CODE_ID
,CLIENT_NM AS CODE_NAME
,CLIENT_CD AS CODE_CD
,BUS_REG_NO AS REG_NO
,CEO_NM AS CHARGE_USER_NAME
,TEL_NO AS SUPPLY_TEL_NO
,FAX_NO AS SUPPLY_FAX_NO
,EMAIL AS SUPPLY_EMAIL
,PAYMENT_TERM AS PAYMENT_METHOD
,USE_YN AS STATUS
,'' AS ID
,'' AS EXT_VAL
FROM CLIENT_MNG
WHERE 1=1
--AND USE_YN = 'Y'
ORDER BY CLIENT_NM
</select>
<select id="getsupCode" parameterType="map" resultType="map">
SELECT OBJID::VARCHAR SUPPLY_CODE
@@ -2761,6 +2784,16 @@ ORDER BY COALESCE(T.REVISION, '1.0')
-->
</select>
<!-- 프로젝트 목록 조회 (제품구분 포함) -->
<select id="getProjectNameListWithProduct" parameterType="map" resultType="map">
SELECT
OBJID::VARCHAR AS CODE
,PROJECT_NO AS NAME
,CODE_NAME(PRODUCT) AS PRODUCT_NAME
FROM PROJECT_MGMT
ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC
</select>
<select id="getCodeselectAllLevel" parameterType="map" resultType="map">
WITH RECURSIVE V_CODE AS (
SELECT CODE_ID
@@ -3293,4 +3326,20 @@ ORDER BY COALESCE(T.REVISION, '1.0')
</otherwise>
</choose>
</select>
<!-- 프로젝트 OBJID로 MBOM 파트 목록 조회 -->
<select id="getMbomPartListByProjectNo" parameterType="map" resultType="map">
SELECT PM.OBJID AS CODE
, PM.PART_NO || ' - ' || PM.PART_NAME AS NAME
, PM.OBJID AS CODE_ID
, PM.PART_NO || ' - ' || PM.PART_NAME AS CODE_NAME
, PM.PART_NO
, PM.PART_NAME
FROM MBOM_DETAIL MD
INNER JOIN MBOM_HEADER MH ON MH.OBJID = MD.MBOM_HEADER_OBJID
INNER JOIN PROJECT_MGMT PJ ON PJ.OBJID = MH.PROJECT_OBJID
INNER JOIN PART_MNG PM ON PM.OBJID::VARCHAR = MD.PART_OBJID
WHERE PJ.OBJID = #{PROJECT_NO}
ORDER BY PM.PART_NO
</select>
</mapper>

View File

@@ -1387,6 +1387,7 @@ INSERT INTO INVENTORY_MGMT_HISTORY
, CONTRACT_MGMT_OBJID
, PURCHASE_ORDER_MASTER_OBJID
, PURCHASE_ORDER_SUB_OBJID
, RECEIPT_DATE
)
VALUES
(
@@ -1400,6 +1401,7 @@ INSERT INTO INVENTORY_MGMT_HISTORY
, #{CONTRACT_MGMT_OBJID}
, #{PURCHASE_ORDER_MASTER_OBJID}
, #{PURCHASE_ORDER_SUB_OBJID}
, #{RECEIPT_DATE}
)
</update>

View File

@@ -2925,7 +2925,7 @@
-- 수량: PROJECT_MGMT 우선
COALESCE(PM.QUANTITY::numeric, CI.ORDER_QUANTITY::numeric, 0) AS QUANTITY,
-- 요청납기: CONTRACT_ITEM 우선
COALESCE(CI.DUE_DATE, PM.DUE_DATE, CM.req_del_date) AS REQ_DEL_DATE,
COALESCE(CI.DUE_DATE, PM.DUE_DATE, CM.REQ_DEL_DATE) AS REQ_DEL_DATE,
-- 고객요청사항: CONTRACT_ITEM에서 가져옴
COALESCE(CI.CUSTOMER_REQUEST, '') AS CUSTOMER_REQUEST,
-- E-BOM 정보: CI.PART_OBJID가 E-BOM OBJID를 가리킴
@@ -3960,48 +3960,50 @@
<!-- M-BOM 상세 리스트 조회 (이력용) -->
<select id="getMbomDetailList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
OBJID,
MBOM_HEADER_OBJID,
PARENT_OBJID,
CHILD_OBJID,
SEQ,
LEVEL,
PART_OBJID,
PART_NO,
PART_NAME,
QTY,
UNIT,
SUPPLY_TYPE,
MAKE_OR_BUY,
RAW_MATERIAL_PART_NO,
RAW_MATERIAL_SPEC,
RAW_MATERIAL,
RAW_MATERIAL_SIZE,
PROCESSING_VENDOR,
PROCESSING_DEADLINE,
GRINDING_DEADLINE,
REQUIRED_QTY,
ORDER_QTY,
PRODUCTION_QTY,
STOCK_QTY,
SHORTAGE_QTY,
NET_QTY,
PO_QTY,
VENDOR,
UNIT_PRICE,
TOTAL_PRICE,
CURRENCY,
LEAD_TIME,
MIN_ORDER_QTY,
PROPOSAL_DATE,
STATUS,
REMARK
MD.OBJID,
MD.MBOM_HEADER_OBJID,
MD.PARENT_OBJID,
MD.CHILD_OBJID,
MD.SEQ,
MD.LEVEL,
MD.PART_OBJID,
MD.PART_NO,
MD.PART_NAME,
MD.QTY,
MD.UNIT,
MD.SUPPLY_TYPE,
MD.MAKE_OR_BUY,
MD.RAW_MATERIAL_PART_NO,
MD.RAW_MATERIAL_SPEC,
MD.RAW_MATERIAL,
MD.RAW_MATERIAL_SIZE,
MD.PROCESSING_VENDOR,
COALESCE(CM.CLIENT_NM, MD.PROCESSING_VENDOR) AS PROCESSING_VENDOR_NAME,
MD.PROCESSING_DEADLINE,
MD.GRINDING_DEADLINE,
MD.REQUIRED_QTY,
MD.ORDER_QTY,
MD.PRODUCTION_QTY,
MD.STOCK_QTY,
MD.SHORTAGE_QTY,
MD.NET_QTY,
MD.PO_QTY,
MD.VENDOR,
MD.UNIT_PRICE,
MD.TOTAL_PRICE,
MD.CURRENCY,
MD.LEAD_TIME,
MD.MIN_ORDER_QTY,
MD.PROPOSAL_DATE,
MD.STATUS,
MD.REMARK
FROM
MBOM_DETAIL
MBOM_DETAIL MD
LEFT JOIN CLIENT_MNG CM ON MD.PROCESSING_VENDOR = CM.OBJID::VARCHAR
WHERE
MBOM_HEADER_OBJID = #{mbomHeaderObjid}
AND STATUS = 'ACTIVE'
ORDER BY SEQ
MD.MBOM_HEADER_OBJID = #{mbomHeaderObjid}
AND MD.STATUS = 'ACTIVE'
ORDER BY MD.SEQ
</select>
<!-- 저장된 M-BOM 트리 조회 (MBOM_DETAIL 테이블) -->
@@ -4187,7 +4189,7 @@
V.STOCK_QTY,
V.SHORTAGE_QTY,
V.VENDOR,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = V.VENDOR) AS VENDOR_NAME,
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = V.VENDOR) AS VENDOR_NAME,
V.UNIT_PRICE,
V.TOTAL_PRICE,
V.CURRENCY,
@@ -4402,4 +4404,239 @@
AND STATUS = 'Y'
</select>
<!-- 생산계획&실적관리 그리드 목록 조회 -->
<select id="prodPlanResultMgmtGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
PM.OBJID,
PM.PROJECT_NO,
CM.PRODUCT,
COALESCE(
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.PRODUCT LIMIT 1),
''
) AS PRODUCT_NAME,
CM.CATEGORY_CD AS CATEGORY_CODE,
-- 생산유형 (TODO: 실제 컬럼명 확인 필요)
'' AS PRODUCTION_TYPE,
'' AS PRODUCTION_TYPE_NAME,
CM.CUSTOMER_OBJID,
COALESCE(
CASE
WHEN CM.CUSTOMER_OBJID LIKE 'C_%' THEN
(SELECT CLIENT_NM FROM CLIENT_MNG AS C WHERE 'C_' || C.OBJID::VARCHAR = CM.CUSTOMER_OBJID LIMIT 1)
ELSE
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = CM.CUSTOMER_OBJID::VARCHAR LIMIT 1)
END,
''
) AS CUSTOMER_NAME,
-- 요청납기
COALESCE(CI.DUE_DATE, PM.DUE_DATE, CM.REQ_DEL_DATE) AS REQ_DEL_DATE,
-- 고객사요청사항
COALESCE(CI.CUSTOMER_REQUEST, '') AS CUSTOMER_REQUEST,
-- 품번/품명
COALESCE(CI.PART_NO, PM.PART_NO, '') AS PART_NO,
COALESCE(CI.PART_NAME, PM.PART_NAME, '') AS PART_NAME,
-- S/N
(SELECT
CASE
WHEN COUNT(*) = 0 THEN ''
WHEN COUNT(*) = 1 THEN MIN(CIS.SERIAL_NO)
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
END
FROM CONTRACT_ITEM_SERIAL CIS
WHERE CIS.ITEM_OBJID = CI.OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL) AS SERIAL_NO,
-- 수주수량
COALESCE(PM.QUANTITY::numeric, CI.ORDER_QUANTITY::numeric, 0) AS QUANTITY,
-- 추가생산수량 (TODO: 실제 테이블/컬럼 확인 필요)
0 AS EXTRA_PROD_QTY,
-- 총생산수량 (수주수량 + 추가생산수량)
COALESCE(PM.QUANTITY::numeric, CI.ORDER_QUANTITY::numeric, 0) AS TOTAL_PROD_QTY,
-- 완조립 수량 (TODO: 실제 테이블/컬럼 확인 필요)
0 AS ASSEMBLY_QTY,
-- 검사 수량 (TODO: 실제 테이블/컬럼 확인 필요)
0 AS INSPECTION_QTY,
-- 출하대기 수량 (TODO: 실제 테이블/컬럼 확인 필요)
0 AS SHIP_WAIT_QTY,
-- 장비조립WBS (TODO: 실제 테이블/컬럼 확인 필요)
'' AS EQUIPMENT_WBS,
-- 생산계획 OBJID (있으면 수정, 없으면 신규)
NULL AS PROD_PLAN_OBJID
FROM
PROJECT_MGMT PM
LEFT JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID
LEFT OUTER JOIN CONTRACT_ITEM CI ON PM.CONTRACT_OBJID = CI.CONTRACT_OBJID
AND PM.PART_OBJID = CI.PART_OBJID
AND CI.STATUS = 'ACTIVE'
WHERE 1=1
AND PM.PROJECT_NO IS NOT NULL
AND PM.PROJECT_NO != ''
<!-- 프로젝트번호 검색 -->
<if test="search_project_no != null and search_project_no != ''">
AND UPPER(PM.PROJECT_NO) LIKE '%' || UPPER(#{search_project_no}) || '%'
</if>
<!-- 제품구분 검색 -->
<if test="search_product_code != null and search_product_code != ''">
AND CM.PRODUCT = #{search_product_code}
</if>
<!-- 주문유형 검색 -->
<if test="search_category_code != null and search_category_code != ''">
AND CM.CATEGORY_CD = #{search_category_code}
</if>
<!-- 생산유형 검색 -->
<if test="search_production_type != null and search_production_type != ''">
AND 1=1 <!-- TODO: 생산유형 컬럼 확인 후 조건 추가 -->
</if>
<!-- 고객사 검색 -->
<if test="search_customer_objid != null and search_customer_objid != ''">
AND CM.CUSTOMER_OBJID = #{search_customer_objid}
</if>
<!-- 요청납기 검색 -->
<if test="search_req_del_date_from != null and search_req_del_date_from != ''">
AND COALESCE(CI.DUE_DATE, PM.DUE_DATE, CM.REQ_DEL_DATE) >= #{search_req_del_date_from}
</if>
<if test="search_req_del_date_to != null and search_req_del_date_to != ''">
AND COALESCE(CI.DUE_DATE, PM.DUE_DATE, CM.REQ_DEL_DATE) &lt;= #{search_req_del_date_to}
</if>
<!-- 품번 검색 -->
<if test="search_part_no != null and search_part_no != ''">
AND (
UPPER(PM.PART_NO) LIKE '%' || UPPER(#{search_part_no}) || '%'
OR UPPER(CI.PART_NO) LIKE '%' || UPPER(#{search_part_no}) || '%'
)
</if>
<!-- 품명 검색 -->
<if test="search_part_name != null and search_part_name != ''">
AND (
UPPER(PM.PART_NAME) LIKE '%' || UPPER(#{search_part_name}) || '%'
OR UPPER(CI.PART_NAME) LIKE '%' || UPPER(#{search_part_name}) || '%'
)
</if>
<!-- S/N 검색 -->
<if test="search_serial_no != null and search_serial_no != ''">
AND EXISTS (
SELECT 1 FROM CONTRACT_ITEM_SERIAL CIS
WHERE CIS.ITEM_OBJID = CI.OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND UPPER(CIS.SERIAL_NO) LIKE '%' || UPPER(#{search_serial_no}) || '%'
)
</if>
ORDER BY PM.REGDATE DESC, PM.PROJECT_NO DESC
</select>
<!-- 프로젝트 정보 조회 (생산계획 폼용) -->
<select id="getProdPlanProjectInfo" parameterType="map" resultType="map">
SELECT
PM.OBJID,
PM.PROJECT_NO,
COALESCE(CI.PART_NO, PM.PART_NO) AS PART_NO,
COALESCE(CI.PART_NAME, PM.PART_NAME) AS PART_NAME,
COALESCE(CM.PRODUCT, PM.PRODUCT) AS PRODUCT_CODE,
COALESCE(CM.CATEGORY_CD, '') AS CATEGORY_CODE,
COALESCE(CM.CUSTOMER_OBJID, PM.CUSTOMER_OBJID) AS CUSTOMER_OBJID,
COALESCE(CI.DUE_DATE, PM.DUE_DATE, CM.REQ_DEL_DATE) AS REQ_DEL_DATE,
PM.QUANTITY AS ORDER_QTY,
CM.CUSTOMER_REQUEST,
(
SELECT STRING_AGG(CIS.SERIAL_NO, ', ' ORDER BY CIS.SERIAL_NO)
FROM CONTRACT_ITEM_SERIAL CIS
WHERE CIS.ITEM_OBJID = CI.OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
) AS SERIAL_NO
FROM PROJECT_MGMT PM
LEFT JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID
LEFT JOIN CONTRACT_ITEM CI ON CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
AND CI.PART_OBJID = PM.PART_OBJID
AND CI.STATUS = 'ACTIVE'
WHERE PM.OBJID = #{projectObjid}
LIMIT 1
</select>
<!-- 생산계획 정보 조회 -->
<select id="getProdPlanInfo" parameterType="map" resultType="map">
SELECT
PP.OBJID,
PP.PROJECT_OBJID,
PP.PRODUCT_CODE,
PP.CATEGORY_CODE,
PP.PRODUCTION_TYPE,
PP.CUSTOMER_OBJID,
PP.REQ_DEL_DATE,
PP.PART_NO,
PP.PART_NAME,
PP.SERIAL_NO,
PP.ORDER_QTY,
PP.EXTRA_PROD_QTY,
PP.TOTAL_PROD_QTY,
PP.CUSTOMER_REQUEST,
PP.STATUS,
PP.REGDATE,
PP.WRITER
FROM PRODUCTION_PLAN PP
WHERE PP.OBJID = #{objid}
</select>
<!-- 생산계획 등록 -->
<insert id="insertProdPlan" parameterType="map">
INSERT INTO PRODUCTION_PLAN (
OBJID,
PROJECT_OBJID,
PRODUCT_CODE,
CATEGORY_CODE,
PRODUCTION_TYPE,
CUSTOMER_OBJID,
REQ_DEL_DATE,
PART_NO,
PART_NAME,
SERIAL_NO,
ORDER_QTY,
EXTRA_PROD_QTY,
TOTAL_PROD_QTY,
CUSTOMER_REQUEST,
STATUS,
REGDATE,
WRITER
) VALUES (
#{OBJID},
#{PROJECT_NO},
#{PRODUCT_CODE},
#{CATEGORY_CODE},
#{PRODUCTION_TYPE},
#{CUSTOMER_OBJID},
#{REQ_DEL_DATE},
#{PART_NO},
#{PART_NAME},
#{SERIAL_NO},
#{ORDER_QTY},
#{EXTRA_PROD_QTY},
#{TOTAL_PROD_QTY},
#{CUSTOMER_REQUEST},
'active',
NOW(),
#{userId}
)
</insert>
<!-- 생산계획 수정 -->
<update id="updateProdPlan" parameterType="map">
UPDATE PRODUCTION_PLAN SET
PROJECT_OBJID = #{PROJECT_NO},
PRODUCT_CODE = #{PRODUCT_CODE},
CATEGORY_CODE = #{CATEGORY_CODE},
PRODUCTION_TYPE = #{PRODUCTION_TYPE},
CUSTOMER_OBJID = #{CUSTOMER_OBJID},
REQ_DEL_DATE = #{REQ_DEL_DATE},
PART_NO = #{PART_NO},
PART_NAME = #{PART_NAME},
SERIAL_NO = #{SERIAL_NO},
ORDER_QTY = #{ORDER_QTY},
EXTRA_PROD_QTY = #{EXTRA_PROD_QTY},
TOTAL_PROD_QTY = #{TOTAL_PROD_QTY},
CUSTOMER_REQUEST = #{CUSTOMER_REQUEST},
MODDATE = NOW(),
MODIFIER = #{userId}
WHERE OBJID = #{OBJID}
</update>
</mapper>

View File

@@ -1115,6 +1115,14 @@
WHERE OBJID = (SELECT PURCHASE_ORDER_MASTER_OBJID FROM PURCHASE_ORDER_PART POP WHERE OBJID = #{PURCHASE_ORDER_PART_OBJID })
-->
</update>
<!-- 매입마감 처리: PURCHASE_CLOSE_DATE를 현재일자로 업데이트 -->
<update id="updatePurchaseCloseDate" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER
SET PURCHASE_CLOSE_DATE = TO_CHAR(NOW(), 'YYYY-MM-DD')
WHERE OBJID = #{OBJID}
</update>
<update id="updatePurchaseOrderMasterPriceAll" parameterType="map">
UPDATE PURCHASE_ORDER_MASTER SET
TOTAL_PRICE_TXT_ALL = NUM_TO_KOR((T.REAL_SUPPLY_PRICE_VAT)::varchar,'일금 ',' 원정 (₩ ') || TRIM(TO_CHAR((T.REAL_SUPPLY_PRICE_VAT), '999,999,999,999')) ||')'
@@ -4273,6 +4281,7 @@ SELECT POM.OBJID
,POM.TOTAL_PRICE
,POM.DISCOUNT_PRICE
,POM.TOTAL_SUPPLY_UNIT_PRICE
,POM.TOTAL_SUPPLY_PRICE
,POM.NEGO_RATE
,POM.MULTI_MASTER_YN
,POM.MULTI_YN
@@ -4282,6 +4291,7 @@ SELECT POM.OBJID
<!--,(SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY -->
,S1.CUR_DELIVERY_DATE
,S1.TOTAL_DELIVERY_QTY
,S1.TOTAL_DELIVERY_PRICE
<!-- ,(S1.TOTAL_PO_QTY - S1.TOTAL_DELIVERY_QTY - S1.TOTAL_DEFECT_QTY) AS NON_DELIVERY_QTY -->
,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY <!-- - S1.TOTAL_DEFECT_QTY --> )) AS NON_DELIVERY_QTY
<!-- ,S1.TOTAL_DEFECT_QTY -->
@@ -4299,6 +4309,7 @@ SELECT POM.OBJID
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.ORDER_TYPE_CD) AS ORDER_TYPE_CD_NAME
,(SELECT user_name(RECEIVER_ID) FROM ARRIVAL_PLAN AP WHERE AP.parent_objid = POM.OBJID ORDER BY AP.RECEIPT_DATE desc LIMIT 1) AS CUR_RECEIVER_NAME
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = POM.OBJID AND AF.DOC_TYPE = 'INSPECTION_FILE' AND UPPER(AF.STATUS) = 'ACTIVE') AS INSPECTION_FILE_CNT
,POM.PURCHASE_CLOSE_DATE
<!-- ,A.APPR_STATUS_NAME -->
FROM PURCHASE_ORDER_MASTER AS POM
<!-- LEFT OUTER JOIN(
@@ -4334,6 +4345,8 @@ SELECT POM.OBJID
,SUM(POP.ORDER_QTY::NUMERIC) AS TOTAL_PO_QTY
,MAX(DH.RECEIPT_DATE) AS CUR_DELIVERY_DATE
,SUM(DH.RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY
,SUM(pop.partner_price::NUMERIC * DH.RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_PRICE
<!-- ,SUM(DH.ERROR_QTY::NUMERIC) AS TOTAL_DEFECT_QTY -->
<!-- ,MAX(DH.DELIVERY_DATE) AS CUR_DELIVERY_DATE
,SUM(DH.DELIVERY_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY

View File

@@ -1802,6 +1802,13 @@
WHERE OBJID = #{OBJID}
</update>
<!-- 반제품검사 행 잠금 해제 (IS_LOCKED = 'N') -->
<update id="unlockSemiProductInspection" parameterType="map">
UPDATE PMS_QUALITY_SEMI_PRODUCT_INSPECTION
SET IS_LOCKED = 'N'
WHERE OBJID = #{OBJID}
</update>
<!-- 반제품검사 데이터 삭제 (OBJID로 단건 삭제) -->
<delete id="deleteSemiProductInspectionByObjId" parameterType="map">
DELETE FROM PMS_QUALITY_SEMI_PRODUCT_INSPECTION

View File

@@ -3378,7 +3378,6 @@ ORDER BY V.PATH2
VENDOR = #{VENDOR_PM},
UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
PROPOSAL_DATE = COALESCE(PROPOSAL_DATE, NOW()), -- 저장 시 품의서작성일 자동 설정 (기존 값 없으면 오늘 날짜)
EDITER = #{EDITER},
EDIT_DATE = NOW()
WHERE OBJID::VARCHAR = #{OBJID}
@@ -3393,7 +3392,6 @@ ORDER BY V.PATH2
VENDOR_PM = #{VENDOR_PM},
UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
PROPOSAL_DATE = COALESCE(PROPOSAL_DATE, NOW()), -- 저장 시 품의서작성일 자동 설정 (기존 값 없으면 오늘 날짜)
WRITER = #{EDITER}
WHERE OBJID::VARCHAR = #{OBJID}
</update>
@@ -3420,12 +3418,12 @@ ORDER BY V.PATH2
WHERE DOC_TYPE = 'PURCHASE_REQUEST' OR DOC_TYPE IS NULL
</select>
<!-- 다음 품의서 번호 생성 (RPS + YY + - + MMDD + - + 2자리 순번) 예: RPS25-0926-01 -->
<!-- 다음 품의서 번호 생성 (P + YYYYMMDD + - + 3자리 순번) - 품의서용 -->
<select id="getNextProposalNo" resultType="string">
SELECT 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'-'||LPAD((COALESCE(MAX(SUBSTR(REQUEST_MNG_NO,12,2)),'0')::INTEGER+1)::TEXT,2,'0')
SELECT 'P'||TO_CHAR(NOW(),'YYYYMMDD')||'-'||LPAD((COALESCE(MAX(SUBSTR(REQUEST_MNG_NO,11,3))::INTEGER, 0)+1)::TEXT,3,'0')
FROM SALES_REQUEST_MASTER
WHERE DOC_TYPE = 'PROPOSAL'
AND REQUEST_MNG_NO LIKE 'RPS'||TO_CHAR(NOW(),'YY')||'-'||TO_CHAR(NOW(),'MMDD')||'%'
AND REQUEST_MNG_NO LIKE 'P'||TO_CHAR(NOW(),'YYYYMMDD')||'%'
</select>
<!-- M-BOM에서 구매리스트 생성 - SALES_REQUEST_MASTER만 생성 (SALES_REQUEST_PART는 생성 안 함) -->
@@ -3832,7 +3830,7 @@ ORDER BY V.PATH2
) A ON SRM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
WHERE 1=1
AND SRM.STATUS IN ('create', 'approvalRequest', 'approvalComplete', 'reject')
-- AND SRM.DOC_TYPE = 'PROPOSAL' -- DOC_TYPE 컬럼 없음, 주석처리
AND SRM.DOC_TYPE = 'PROPOSAL'
<if test="SEARCH_PROPOSAL_NO != null and !''.equals(SEARCH_PROPOSAL_NO)">
AND SRM.REQUEST_MNG_NO LIKE '%${SEARCH_PROPOSAL_NO}%'
</if>
@@ -3970,7 +3968,7 @@ ORDER BY V.PATH2
SRP.UNIT_PRICE,
SRP.TOTAL_PRICE,
SRP.VENDOR_PM,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = SRP.VENDOR_PM) AS VENDOR_NAME,
(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = SRP.VENDOR_PM) AS VENDOR_NAME,
SRP.REMARK,
SRP.DELIVERY_REQUEST_DATE,
SRP.DELIVERY_REQUEST_DATE AS DELIVERY_REQUEST_DATE_TITLE

View File

@@ -982,50 +982,29 @@
)
)
</if>
<!-- 품번/품명 검색: CONTRACT_ITEM에서 검색 (외 N건 지원) -->
<if test="search_partObjId != null and search_partObjId != ''">
AND EXISTS (
SELECT 1 FROM CONTRACT_ITEM CI
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND CI.STATUS = 'ACTIVE'
AND CI.PART_OBJID = #{search_partObjId}
)
</if>
<if test="(search_partObjId == null or search_partObjId == '') and ((search_partNo != null and search_partNo != '') or (search_partName != null and search_partName != ''))">
AND EXISTS (
SELECT 1 FROM CONTRACT_ITEM CI
LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND CI.STATUS = 'ACTIVE'
AND (
<if test="search_partNo != null and search_partNo != ''">
COALESCE(PM.PART_NO, CI.PART_NO) LIKE '%' || #{search_partNo} || '%'
</if>
<if test="(search_partNo != null and search_partNo != '') and (search_partName != null and search_partName != '')">
OR
</if>
<if test="search_partName != null and search_partName != ''">
COALESCE(PM.PART_NAME, CI.PART_NAME) LIKE '%' || #{search_partName} || '%'
</if>
)
)
</if>
<!-- 시리얼 넘버 검색: CONTRACT_ITEM_SERIAL + shipment_log에서 검색 (외 N건 지원) -->
<if test="serialNo != null and serialNo != ''">
<!-- 품번/품명 검색: PART_NO 또는 PART_NAME으로 검색 (한글 포함) -->
<if test="(search_partNo != null and search_partNo != '') or (search_partName != null and search_partName != '')">
AND (
EXISTS (
SELECT 1 FROM CONTRACT_ITEM CI
JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND CI.STATUS = 'ACTIVE'
AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
AND UPPER(CIS.STATUS) = 'ACTIVE'
)
OR EXISTS (
SELECT 1 FROM shipment_log SL
WHERE SL.target_objid = T.PROJECT_NO
AND UPPER(SL.serial_no) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
)
<if test="search_partNo != null and search_partNo != ''">
T.PART_NO = #{search_partNo}
</if>
<if test="(search_partNo != null and search_partNo != '') and (search_partName != null and search_partName != '')">
OR
</if>
<if test="search_partName != null and search_partName != ''">
T.PART_NAME = #{search_partName}
</if>
)
</if>
<if test="serialNo != null and serialNo != ''">
AND EXISTS (
SELECT 1 FROM CONTRACT_ITEM CI
JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND CI.PART_OBJID = T.PART_OBJID
AND CI.STATUS = 'ACTIVE'
AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
AND UPPER(CIS.STATUS) = 'ACTIVE'
)
</if>
<if test="orderStatus != null and orderStatus != ''">
@@ -1062,28 +1041,13 @@
AND SR.project_no IS NOT NULL
AND SR.shipping_order_status = #{shippingStatus}
</if>
<!-- 출하일 검색: sales_registration + shipment_log에서 검색 (외 N건 지원) -->
<if test="shippingDateFrom != null and shippingDateFrom != ''">
AND (
(SR.shipping_date IS NOT NULL AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD'))
OR EXISTS (
SELECT 1 FROM shipment_log SL
WHERE SL.target_objid = T.PROJECT_NO
AND SL.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD')
)
)
AND SR.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD')
</if>
<if test="shippingDateTo != null and shippingDateTo != ''">
AND (
(SR.shipping_date IS NOT NULL AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD'))
OR EXISTS (
SELECT 1 FROM shipment_log SL
WHERE SL.target_objid = T.PROJECT_NO
AND SL.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD')
)
)
AND SR.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD')
</if>
<if test="shippingMethod != null and shippingMethod != ''">
AND SR.project_no IS NOT NULL
@@ -1175,50 +1139,29 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
)
)
</if>
<!-- 품번/품명 검색: CONTRACT_ITEM에서 검색 (외 N건 지원) -->
<if test="search_partObjId != null and search_partObjId != ''">
AND EXISTS (
SELECT 1 FROM CONTRACT_ITEM CI
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND CI.STATUS = 'ACTIVE'
AND CI.PART_OBJID = #{search_partObjId}
)
</if>
<if test="(search_partObjId == null or search_partObjId == '') and ((search_partNo != null and search_partNo != '') or (search_partName != null and search_partName != ''))">
AND EXISTS (
SELECT 1 FROM CONTRACT_ITEM CI
LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND CI.STATUS = 'ACTIVE'
AND (
<if test="search_partNo != null and search_partNo != ''">
COALESCE(PM.PART_NO, CI.PART_NO) LIKE '%' || #{search_partNo} || '%'
</if>
<if test="(search_partNo != null and search_partNo != '') and (search_partName != null and search_partName != '')">
OR
</if>
<if test="search_partName != null and search_partName != ''">
COALESCE(PM.PART_NAME, CI.PART_NAME) LIKE '%' || #{search_partName} || '%'
</if>
)
)
</if>
<!-- 시리얼 넘버 검색: CONTRACT_ITEM_SERIAL + shipment_log에서 검색 (외 N건 지원) -->
<if test="serialNo != null and serialNo != ''">
<!-- 품번/품명 검색: PART_NO 또는 PART_NAME으로 검색 (한글 포함) -->
<if test="(search_partNo != null and search_partNo != '') or (search_partName != null and search_partName != '')">
AND (
EXISTS (
SELECT 1 FROM CONTRACT_ITEM CI
JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND CI.STATUS = 'ACTIVE'
AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
AND UPPER(CIS.STATUS) = 'ACTIVE'
)
OR EXISTS (
SELECT 1 FROM shipment_log SL
WHERE SL.target_objid = T.PROJECT_NO
AND UPPER(SL.serial_no) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
)
<if test="search_partNo != null and search_partNo != ''">
T.PART_NO = #{search_partNo}
</if>
<if test="(search_partNo != null and search_partNo != '') and (search_partName != null and search_partName != '')">
OR
</if>
<if test="search_partName != null and search_partName != ''">
T.PART_NAME = #{search_partName}
</if>
)
</if>
<if test="serialNo != null and serialNo != ''">
AND EXISTS (
SELECT 1 FROM CONTRACT_ITEM CI
JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND CI.PART_OBJID = T.PART_OBJID
AND CI.STATUS = 'ACTIVE'
AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
AND UPPER(CIS.STATUS) = 'ACTIVE'
)
</if>
<if test="orderStatus != null and orderStatus != ''">
@@ -1258,37 +1201,20 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
AND SR.shipping_order_status = #{shippingStatus}
)
</if>
<!-- 출하일 검색: sales_registration + shipment_log에서 검색 (외 N건 지원) -->
<if test="shippingDateFrom != null and shippingDateFrom != ''">
AND (
EXISTS (
SELECT 1 FROM sales_registration SR
WHERE T.PROJECT_NO = SR.project_no
AND SR.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD')
)
OR EXISTS (
SELECT 1 FROM shipment_log SL
WHERE SL.target_objid = T.PROJECT_NO
AND SL.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD')
)
AND EXISTS (
SELECT 1 FROM sales_registration SR
WHERE T.PROJECT_NO = SR.project_no
AND SR.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD')
)
</if>
<if test="shippingDateTo != null and shippingDateTo != ''">
AND (
EXISTS (
SELECT 1 FROM sales_registration SR
WHERE T.PROJECT_NO = SR.project_no
AND SR.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD')
)
OR EXISTS (
SELECT 1 FROM shipment_log SL
WHERE SL.target_objid = T.PROJECT_NO
AND SL.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD')
)
AND EXISTS (
SELECT 1 FROM sales_registration SR
WHERE T.PROJECT_NO = SR.project_no
AND SR.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD')
)
</if>
<if test="shippingMethod != null and shippingMethod != ''">
@@ -1370,50 +1296,19 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
<if test="customer_objid != null and customer_objid != ''">
AND T.CUSTOMER_OBJID = #{customer_objid}
</if>
<!-- 시리얼 넘버 검색: CONTRACT_ITEM_SERIAL + shipment_log에서 검색 (외 N건 지원) -->
<if test="serialNo != null and serialNo != ''">
AND (
(SR.serial_no LIKE '%' || #{serialNo} || '%')
OR EXISTS (
SELECT 1 FROM CONTRACT_ITEM CI
JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND CI.STATUS = 'ACTIVE'
AND UPPER(CIS.SERIAL_NO) LIKE UPPER('%' || #{serialNo} || '%')
AND UPPER(CIS.STATUS) = 'ACTIVE'
)
OR EXISTS (
SELECT 1 FROM shipment_log SL
WHERE SL.target_objid = T.PROJECT_NO
AND UPPER(SL.serial_no) LIKE UPPER('%' || #{serialNo} || '%')
)
)
AND SR.serial_no LIKE '%' || #{serialNo} || '%'
</if>
<if test="poNo != null and poNo != ''">
AND EXISTS (SELECT 1 FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID AND CM.PO_NO LIKE '%' || #{poNo} || '%')
</if>
<!-- 출하일 검색: sales_registration + shipment_log에서 검색 (외 N건 지원) -->
<if test="shippingDateFrom != null and shippingDateFrom != ''">
AND (
(SR.shipping_date IS NOT NULL AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD'))
OR EXISTS (
SELECT 1 FROM shipment_log SL
WHERE SL.target_objid = T.PROJECT_NO
AND SL.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD')
)
)
AND SR.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD')
</if>
<if test="shippingDateTo != null and shippingDateTo != ''">
AND (
(SR.shipping_date IS NOT NULL AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD'))
OR EXISTS (
SELECT 1 FROM shipment_log SL
WHERE SL.target_objid = T.PROJECT_NO
AND SL.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD')
)
)
AND SR.shipping_date IS NOT NULL
AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD')
</if>
<if test="shippingMethod != null and shippingMethod != ''">
AND SR.shipping_method = #{shippingMethod}

View File

@@ -158,6 +158,20 @@ String loginUserId = CommonUtils.checkNull(person.getUserId());
background: #2b6cb0;
}
.btn_edit {
padding: 6px 20px;
background: #e67e22;
color: white;
border: none;
border-radius: 3px;
cursor: pointer;
font-size: 12px;
}
.btn_edit:hover {
background: #d35400;
}
.btn_close {
padding: 6px 20px;
background: #718096;
@@ -232,7 +246,8 @@ String loginUserId = CommonUtils.checkNull(person.getUserId());
<div class="btn_group">
<button type="button" class="btn_add" id="btnAddLeft">+ 행 추가</button>
<button type="button" class="btn_del" id="btnDelLeft">- 행 삭제</button>
<button type="button" class="btn_save" id="btnSaveLeft" style="margin-left:10px;">저장</button>
<button type="button" class="btn_save" id="btnSaveLeft" style="margin-left:10px;">행잠금</button>
<button type="button" class="btn_edit" id="btnEditLeft" style="margin-left:5px;">잠금해제</button>
</div>
</div>
<div class="panel_body">
@@ -247,7 +262,9 @@ String loginUserId = CommonUtils.checkNull(person.getUserId());
<div class="btn_group">
<button type="button" class="btn_add" id="btnAddRight">+ 행 추가</button>
<button type="button" class="btn_del" id="btnDelRight">- 행 삭제</button>
<!-- 불량상세 저장버튼 주석처리
<button type="button" class="btn_save" id="btnSaveRight" style="margin-left:10px;">저장</button>
-->
</div>
</div>
<div class="panel_body" id="rightPanelBody">
@@ -314,8 +331,9 @@ $(document).ready(function(){
// 버튼 이벤트
$("#btnSave").click(fn_save); // 하단 저장: 전체 DB 저장
$("#btnSaveLeft").click(fn_saveSelectedLeft); // 좌측 저장: UI 잠금만 (DB 저장 X)
$("#btnSaveRight").click(fn_saveSelectedRight); // 저장: UI 잠금만 (DB 저장 X)
$("#btnSaveLeft").click(fn_saveSelectedLeft); // 좌측 저장: 락 처리
$("#btnEditLeft").click(fn_editSelectedLeft); // 행수정: 락 해제
// $("#btnSaveRight").click(fn_saveSelectedRight); // 우측 저장: 주석처리
$("#btnClose").click(function(){ window.close(); });
$("#btnAddLeft").click(fn_addLeftRow);
$("#btnDelLeft").click(fn_delLeftRow);
@@ -478,9 +496,13 @@ function fn_initLeftGrid(){
selectable: 1, // 단일 선택
// 저장된 행 시각적 표시
rowFormatter: function(row){
if(row.getData().IS_SAVED){
var data = row.getData();
if(data.IS_SAVED || data.IS_LOCKED === 'Y'){
row.getElement().style.backgroundColor = "#e8f5e9"; // 연한 초록색
row.getElement().style.color = "#555";
} else {
row.getElement().style.backgroundColor = ""; // 원래 색상
row.getElement().style.color = "";
}
}
});
@@ -594,9 +616,13 @@ function fn_initRightGrid(){
selectable: true,
// 저장된 행 시각적 표시
rowFormatter: function(row){
if(row.getData().IS_SAVED){
var data = row.getData();
if(data.IS_SAVED || data.IS_LOCKED === 'Y'){
row.getElement().style.backgroundColor = "#e8f5e9"; // 연한 초록색
row.getElement().style.color = "#555";
} else {
row.getElement().style.backgroundColor = ""; // 원래 색상
row.getElement().style.color = "";
}
}
});
@@ -998,6 +1024,68 @@ function fn_loadData(objid, inspectionGroupId){
});
}
// =====================================================
// 좌측 행수정: 락이 걸린 행을 수정 가능하도록 해제
// =====================================================
function fn_editSelectedLeft(){
console.log("===== fn_editSelectedLeft 호출됨 =====");
if(!selectedLeftRowId){
Swal.fire({ icon: 'warning', title: '알림', text: '수정할 양품 정보를 선택해주세요.' });
return;
}
var selectedRow = leftGrid.getSelectedRows()[0];
if(!selectedRow){
Swal.fire({ icon: 'warning', title: '알림', text: '수정할 양품 정보를 선택해주세요.' });
return;
}
var rowData = selectedRow.getData();
// 락이 걸려있지 않으면 이미 수정 가능 상태
if(rowData.IS_LOCKED !== 'Y' && !rowData.IS_SAVED){
Swal.fire({ icon: 'info', title: '알림', text: '이미 수정 가능한 상태입니다.' });
return;
}
Swal.fire({
icon: 'question',
title: '행수정',
text: '선택한 행의 잠금을 해제하고 수정 가능하게 하시겠습니까?',
showCancelButton: true,
confirmButtonText: '확인',
cancelButtonText: '취소'
}).then((result) => {
if(result.isConfirmed){
var objId = rowData.OBJID;
// DB에 잠금 해제 요청
$.ajax({
url: "/quality/unlockSemiProductInspection.do",
type: "POST",
data: { objIds: JSON.stringify([objId]) },
dataType: "json",
success: function(result){
if(result.result){
// UI에서 잠금 해제
selectedRow.update({ IS_SAVED: false, IS_LOCKED: 'N' });
// 행 스타일 원래대로 (초록색 -> 기본색)
selectedRow.getElement().style.backgroundColor = "";
selectedRow.getElement().style.color = "";
Swal.fire({ icon: 'success', title: '완료', text: '잠금이 해제되어 수정 가능합니다.' });
} else {
Swal.fire({ icon: 'error', title: '오류', text: result.msg || '잠금 해제에 실패했습니다.' });
}
},
error: function(xhr, status, error){
Swal.fire({ icon: 'error', title: '오류', text: '잠금 해제 중 오류가 발생했습니다.' });
}
});
}
});
}
// =====================================================
// 좌측 행 저장+잠금: 선택된 양품 행을 DB에 저장하고 수정 불가로 변경
// =====================================================

View File

@@ -696,6 +696,15 @@ public class QualityController {
return service.lockSemiProductInspection(paramMap);
}
/**
* 반제품검사 잠금 해제
*/
@ResponseBody
@RequestMapping("/quality/unlockSemiProductInspection.do")
public Map unlockSemiProductInspection(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
return service.unlockSemiProductInspection(paramMap);
}
/**
* 반제품검사 엑셀 다운로드 (JSP 방식)
*/

View File

@@ -1802,6 +1802,13 @@
WHERE OBJID = #{OBJID}
</update>
<!-- 반제품검사 행 잠금 해제 (IS_LOCKED = 'N') -->
<update id="unlockSemiProductInspection" parameterType="map">
UPDATE PMS_QUALITY_SEMI_PRODUCT_INSPECTION
SET IS_LOCKED = 'N'
WHERE OBJID = #{OBJID}
</update>
<!-- 반제품검사 데이터 삭제 (OBJID로 단건 삭제) -->
<delete id="deleteSemiProductInspectionByObjId" parameterType="map">
DELETE FROM PMS_QUALITY_SEMI_PRODUCT_INSPECTION

View File

@@ -1086,6 +1086,46 @@ public class QualityService extends BaseService{
return resultMap;
}
/**
* 반제품검사 행 잠금 해제 (IS_LOCKED = 'N')
*/
public Map unlockSemiProductInspection(Map paramMap){
Map resultMap = new HashMap();
SqlSession sqlSession = null;
try{
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
String objIdsJson = CommonUtils.checkNull(paramMap.get("objIds"));
if(!objIdsJson.equals("") && !objIdsJson.equals("[]")){
org.json.simple.parser.JSONParser parser = new org.json.simple.parser.JSONParser();
org.json.simple.JSONArray objIdArr = (org.json.simple.JSONArray) parser.parse(objIdsJson);
for(int i = 0; i < objIdArr.size(); i++){
String objId = CommonUtils.checkNull(objIdArr.get(i));
if(!objId.equals("")){
Map unlockParam = new HashMap();
unlockParam.put("OBJID", objId);
sqlSession.update("quality.unlockSemiProductInspection", unlockParam);
}
}
}
sqlSession.commit();
resultMap.put("result", true);
resultMap.put("msg", "잠금 해제되었습니다.");
}catch(Exception e){
resultMap.put("result", false);
resultMap.put("msg", "잠금 해제에 실패했습니다.");
if(sqlSession != null) sqlSession.rollback();
e.printStackTrace();
}finally{
if(sqlSession != null) sqlSession.close();
}
return resultMap;
}
/**
* 반제품검사 삭제 (OBJID 목록으로 삭제)
*/