V2025121801 #104
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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) <= #{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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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에 저장하고 수정 불가로 변경
|
||||
// =====================================================
|
||||
|
||||
@@ -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 방식)
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 목록으로 삭제)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user