Compare commits

...

11 Commits

Author SHA1 Message Date
dba9a1ec63 반제품검사 관리 불량유형 검색 드롭박스 수정
- 검색 드롭박스를 등록팝업과 동일한 COMM_CODE 부모코드 0001820 기반 전체 목록으로 변경 (기존에는 PMS_QUALITY_SEMI_PRODUCT_INSPECTION에 등록된 DEFECT_TYPE만 distinct로 노출되어 선택지 부족)
- getSemiProductDefectTypeList 쿼리에도 COMM_CODE JOIN 추가하여 코드명 fallback 처리

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 10:54:32 +09:00
1dcda9a28e S/N '외 N건' 표시/검색/팝업 개선
- 영업관리(견적/주문서/판매) S/N 검색: '외 N건'에 숨은 시리얼도 CONTRACT_ITEM_SERIAL EXISTS로 매치되도록 OR 조건 추가
- 생산관리(M-BOM관리/생산계획&실적관리) S/N 컬럼: '첫S/N 외 N건' 표시 + 전체 목록 팝업 + 숨은 S/N 검색 지원, PROJECT_MGMT.CONTRACT_ITEM_OBJID로 직접 매칭하도록 통일
- 프로젝트관리(진행관리) S/N 표시/검색도 CONTRACT_ITEM_OBJID 기반으로 일치시켜 같은 품목 CI 중복 집계 방지

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 10:32:01 +09:00
978db17b31 구매담당자 검색조건 발주서의 구매담당자 -> 발주서 작성자 2026-04-21 09:34:25 +09:00
8cee2067bb E-bom 등록 등록일 검색 조건 수정 2026-04-20 18:38:01 +09:00
924f8c2781 진행관리 요청납기일 검색 오류 수정 2026-04-20 18:27:26 +09:00
6ad84230f5 정규식 오류로 인한 검색안되는 오류 수정 2026-04-20 18:10:39 +09:00
9d9a8ad7c5 주문서 하단 날짜시간 표시 제거
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 11:30:22 +09:00
d838c51144 contractMgmt 쿼리 개선 - 서브쿼리를 JOIN으로 리팩토링
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 11:26:28 +09:00
4981332dec Merge pull request '결재상신 취소 관련 수정' (#201) from V20260210 into main
Reviewed-on: #201
2026-04-06 00:44:05 +00:00
0348f57582 Merge pull request '견적/수주 팝업 폼 레이아웃 및 그리드 UX 개선' (#200) from ycplm_node into main
Reviewed-on: #200
2026-04-06 00:41:54 +00:00
e30d58a21b 결재상신 취소 관련 수정 2026-04-06 09:41:04 +09:00
11 changed files with 588 additions and 504 deletions

View File

@@ -267,7 +267,7 @@
<!-- 하단 부가세 구분 + 날짜 -->
<div style="display:flex; justify-content:space-between; padding:3px 5px; font-size:11px; border:1px solid #000; border-top:none;">
<span id="vatNote"></span>
<span id="regDatetime"></span>
<!-- <span id="regDatetime"></span> -->
</div>
</div>
@@ -370,7 +370,7 @@ function fn_renderOrderForm(info, items){
$("#summaryVat").text(vt > 0 ? fn_fmt(vt) : '');
$("#summaryTotal").text(ta > 0 ? fn_fmt(ta) : '');
$("#vatNote").text(fnc_checkNull(info.VAT_NOTE));
$("#regDatetime").text(fnc_checkNull(info.REG_DATETIME));
//$("#regDatetime").text(fnc_checkNull(info.REG_DATETIME));
}
function fn_fmt(n){

View File

@@ -199,11 +199,19 @@ var columns = [
// 11. S/N
{
headerHozAlign: 'center',
headerHozAlign: 'center',
hozAlign: 'center',
width: 100,
title: 'S/N',
field: 'SERIAL_NO'
field: 'SERIAL_NO',
formatter: function(cell, formatterParams, onRendered){
var value = fnc_checkNull(cell.getValue());
if(value === '') return '';
return '<a href="javascript:void(0);">' + value + '</a>';
},
cellClick:function(e, cell){
fn_showSerialNoPopup(fnc_checkNull(cell.getData().SERIAL_NO_LIST));
}
},
// 12. 수주수량
@@ -265,6 +273,32 @@ var columns = [
}
];
// S/N 팝업 (콤마 구분 문자열 → 번호 매겨진 목록)
function fn_showSerialNoPopup(serialNoString){
if(!serialNoString || serialNoString === ''){
Swal.fire("S/N 정보가 없습니다.");
return;
}
var serialNumbers = serialNoString.split(',').map(function(sn){ return sn.trim(); }).filter(function(sn){ return sn !== ''; });
if(serialNumbers.length === 0){
Swal.fire("S/N 정보가 없습니다.");
return;
}
var listHtml = '<div style="text-align: left; max-height: 400px; overflow-y: auto;">';
listHtml += '<ol style="padding-left: 20px; margin: 10px 0;">';
serialNumbers.forEach(function(sn){
listHtml += '<li style="padding: 5px 0; font-size: 14px;">' + sn + '</li>';
});
listHtml += '</ol></div>';
Swal.fire({
title: 'S/N 목록',
html: listHtml,
width: 500,
confirmButtonText: '확인',
confirmButtonColor: '#3085d6'
});
}
// 검색 함수
function fn_search(){
// showCheck를 false로 설정하여 자동 체크박스 제거 (columns에 이미 체크박스 정의되어 있음)

View File

@@ -204,11 +204,19 @@ var columns = [
// 11. S/N
{
headerHozAlign: 'center',
headerHozAlign: 'center',
hozAlign: 'center',
width: 80,
title: 'S/N',
field: 'SERIAL_NO'
field: 'SERIAL_NO',
formatter: function(cell, formatterParams, onRendered){
var value = fnc_checkNull(cell.getValue());
if(value === '') return '';
return '<a href="javascript:void(0);">' + value + '</a>';
},
cellClick:function(e, cell){
fn_showSerialNoPopup(fnc_checkNull(cell.getData().SERIAL_NO_LIST));
}
},
// 12. 수주수량
@@ -321,6 +329,32 @@ var columns = [
];
// 검색 함수
// S/N 팝업 (콤마 구분 문자열 → 번호 매겨진 목록)
function fn_showSerialNoPopup(serialNoString){
if(!serialNoString || serialNoString === ''){
Swal.fire("S/N 정보가 없습니다.");
return;
}
var serialNumbers = serialNoString.split(',').map(function(sn){ return sn.trim(); }).filter(function(sn){ return sn !== ''; });
if(serialNumbers.length === 0){
Swal.fire("S/N 정보가 없습니다.");
return;
}
var listHtml = '<div style="text-align: left; max-height: 400px; overflow-y: auto;">';
listHtml += '<ol style="padding-left: 20px; margin: 10px 0;">';
serialNumbers.forEach(function(sn){
listHtml += '<li style="padding: 5px 0; font-size: 14px;">' + sn + '</li>';
});
listHtml += '</ol></div>';
Swal.fire({
title: 'S/N 목록',
html: listHtml,
width: 500,
confirmButtonText: '확인',
confirmButtonColor: '#3085d6'
});
}
function fn_search(){
// multiple select 값을 콤마로 join해서 hidden input에 설정
var projectNos = $("#search_project_no").val();

View File

@@ -652,8 +652,8 @@ public class QualityController {
code_map.put("inspection_date", commonService.bizMakeOptionList("", (String)paramMap.get("search_inspection_date"), "quality.getSemiProductInspectionDateList"));
// 검사자 드롭박스
code_map.put("writer", commonService.bizMakeOptionList("", (String)paramMap.get("search_writer"), "quality.getSemiProductWriterList"));
// 불량유형 드롭박스
code_map.put("defect_type", commonService.bizMakeOptionList("", (String)paramMap.get("search_defect_type"), "quality.getSemiProductDefectTypeList"));
// 불량유형 드롭박스 (COMM_CODE 전체 목록 - 부모코드 0001820, 팝업과 동일)
code_map.put("defect_type", commonService.bizMakeOptionList("0001820", (String)paramMap.get("search_defect_type"), "common.getCodeselect"));
// 귀책부서 드롭박스
code_map.put("responsible_dept", commonService.bizMakeOptionList("", (String)paramMap.get("search_responsible_dept"), "quality.getSemiProductResponsibleDeptList"));
request.setAttribute("code_map", code_map);

View File

@@ -2925,10 +2925,10 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
AND T.PRODUCT_CD = #{product_cd}
</if>
<if test="search_fromDate != null and search_fromDate != ''">
AND REGDATE::DATE <![CDATA[ >= ]]> TO_DATE(#{search_fromDate}, 'YYYY-MM-DD')
AND T.REGDATE::DATE <![CDATA[ >= ]]> TO_DATE(#{search_fromDate}, 'YYYY-MM-DD')
</if>
<if test="search_toDate != null and search_toDate != ''">
AND REGDATE::DATE <![CDATA[ <= ]]> TO_DATE(#{search_toDate}, 'YYYY-MM-DD')
AND T.REGDATE::DATE <![CDATA[ <= ]]> TO_DATE(#{search_toDate}, 'YYYY-MM-DD')
</if>
<if test="customer_cd != null and customer_cd != ''">

View File

@@ -2911,7 +2911,7 @@
COALESCE(CI.PART_NO, PM.PART_NO, '') AS PART_NO,
COALESCE(CI.PART_NAME, PM.PART_NAME, '') AS PART_NAME,
CI.PART_OBJID,
-- S/N: 해당 품목의 시리얼 번호만 표시
-- S/N 표시: "첫S/N 외 N건" (PM.CONTRACT_ITEM_OBJID로 직접 매칭)
(SELECT
CASE
WHEN COUNT(*) = 0 THEN ''
@@ -2919,9 +2919,17 @@
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
END
FROM CONTRACT_ITEM_SERIAL CIS
WHERE CIS.ITEM_OBJID = CI.OBJID
WHERE CIS.ITEM_OBJID::VARCHAR = PM.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL) AS SERIAL_NO,
AND CIS.SERIAL_NO IS NOT NULL
AND CIS.SERIAL_NO != '') AS SERIAL_NO,
-- S/N 전체 목록 (팝업용 콤마 연결)
(SELECT STRING_AGG(CIS.SERIAL_NO, ', ' ORDER BY CIS.SERIAL_NO)
FROM CONTRACT_ITEM_SERIAL CIS
WHERE CIS.ITEM_OBJID::VARCHAR = PM.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL
AND CIS.SERIAL_NO != '') AS SERIAL_NO_LIST,
-- 수량: PROJECT_MGMT 우선
COALESCE(PM.QUANTITY::numeric, CI.ORDER_QUANTITY::numeric, 0) AS QUANTITY,
-- 요청납기: CONTRACT_ITEM 우선
@@ -3075,8 +3083,8 @@
<!-- 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
SELECT 1 FROM CONTRACT_ITEM_SERIAL CIS
WHERE CIS.ITEM_OBJID::VARCHAR = PM.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND UPPER(CIS.SERIAL_NO) LIKE '%' || UPPER(#{search_serial_no}) || '%'
)
@@ -4575,9 +4583,16 @@
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
END
FROM CONTRACT_ITEM_SERIAL CIS
WHERE CIS.ITEM_OBJID = CI.OBJID
WHERE CIS.ITEM_OBJID::VARCHAR = PM.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL) AS SERIAL_NO,
AND CIS.SERIAL_NO IS NOT NULL
AND CIS.SERIAL_NO != '') AS SERIAL_NO,
(SELECT STRING_AGG(CIS.SERIAL_NO, ', ' ORDER BY CIS.SERIAL_NO)
FROM CONTRACT_ITEM_SERIAL CIS
WHERE CIS.ITEM_OBJID::VARCHAR = PM.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL
AND CIS.SERIAL_NO != '') AS SERIAL_NO_LIST,
COALESCE(NULLIF(PM.QUANTITY, '')::numeric, NULLIF(CI.ORDER_QUANTITY, '')::numeric, 0) AS QUANTITY,
COALESCE(NULLIF(PP.EXTRA_PROD_QTY, '')::numeric, 0) AS EXTRA_PROD_QTY,
COALESCE(NULLIF(PM.QUANTITY, '')::numeric, NULLIF(CI.ORDER_QUANTITY, '')::numeric, 0) + COALESCE(NULLIF(PP.EXTRA_PROD_QTY, '')::numeric, 0) AS TOTAL_PROD_QTY,
@@ -4642,6 +4657,7 @@
COALESCE(PP.PART_NO, '') AS PART_NO,
COALESCE(PP.PART_NAME, '') AS PART_NAME,
COALESCE(PP.SERIAL_NO, '') AS SERIAL_NO,
COALESCE(PP.SERIAL_NO, '') AS SERIAL_NO_LIST,
COALESCE(NULLIF(PP.ORDER_QTY, '')::numeric, 0) AS QUANTITY,
COALESCE(NULLIF(PP.EXTRA_PROD_QTY, '')::numeric, 0) AS EXTRA_PROD_QTY,
COALESCE(NULLIF(PP.TOTAL_PROD_QTY, '')::numeric, 0) AS TOTAL_PROD_QTY,
@@ -4702,9 +4718,9 @@
<if test="search_part_name != null and search_part_name != ''">
AND UPPER(T.PART_NAME) LIKE '%' || UPPER(#{search_part_name}) || '%'
</if>
<!-- S/N 검색 -->
<!-- S/N 검색 (전체 S/N 리스트에서 매치) -->
<if test="search_serial_no != null and search_serial_no != ''">
AND UPPER(T.SERIAL_NO) LIKE '%' || UPPER(#{search_serial_no}) || '%'
AND UPPER(T.SERIAL_NO_LIST) LIKE '%' || UPPER(#{search_serial_no}) || '%'
</if>
<!-- 등록자 검색 -->
<if test="search_writer != null and search_writer != ''">

View File

@@ -3919,18 +3919,18 @@
,COALESCE(T.QUANTITY::numeric, 0) AS CONTRACT_QTY
,T.PART_NO AS PRODUCT_ITEM_CODE
,T.PART_NAME AS PRODUCT_ITEM_NAME
-- S/N: 해당 품목의 시리얼 번호 (여러 개일 경우 "S/N 외 N건" 형식)
-- S/N: 해당 CI의 시리얼 번호 (T.CONTRACT_ITEM_OBJID로 직접 매칭)
,(SELECT
CASE
WHEN COUNT(*) = 0 THEN ''
WHEN COUNT(*) = 1 THEN MIN(S.SERIAL_NO)
ELSE MIN(S.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
WHEN COUNT(*) = 1 THEN MIN(CIS.SERIAL_NO)
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
END
FROM CONTRACT_ITEM AS I
LEFT JOIN CONTRACT_ITEM_SERIAL AS S ON S.ITEM_OBJID = I.OBJID AND S.STATUS = 'ACTIVE'
WHERE I.CONTRACT_OBJID = T.CONTRACT_OBJID
AND I.PART_OBJID = T.PART_OBJID
AND S.SERIAL_NO IS NOT NULL) AS SERIAL_NO
FROM CONTRACT_ITEM_SERIAL CIS
WHERE CIS.ITEM_OBJID::VARCHAR = T.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL
AND CIS.SERIAL_NO != '') AS SERIAL_NO
-- 요청납기: CONTRACT_ITEM 우선, 없으면 PROJECT_MGMT.DUE_DATE, 없으면 CONTRACT_MGMT.due_date
,COALESCE(
(SELECT CI.DUE_DATE
@@ -4223,16 +4223,16 @@
<!-- 요청납기일 필터: REQ_DEL_DATE 로직과 동일하게 COALESCE 사용 -->
<if test="contract_start_date != null and !''.equals(contract_start_date)">
AND TO_DATE(COALESCE(
(SELECT CI.DUE_DATE FROM CONTRACT_ITEM CI WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID AND CI.PART_OBJID = T.PART_OBJID AND CI.STATUS = 'ACTIVE'),
(SELECT CI.DUE_DATE FROM CONTRACT_ITEM CI WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID AND CI.PART_OBJID = T.PART_OBJID AND CI.STATUS = 'ACTIVE' ORDER BY CI.OBJID DESC LIMIT 1),
T.DUE_DATE,
(SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)
(SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID LIMIT 1)
),'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{contract_start_date}, 'YYYY-MM-DD')
</if>
<if test="contract_end_date != null and !''.equals(contract_end_date)">
AND TO_DATE(COALESCE(
(SELECT CI.DUE_DATE FROM CONTRACT_ITEM CI WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID AND CI.PART_OBJID = T.PART_OBJID AND CI.STATUS = 'ACTIVE'),
(SELECT CI.DUE_DATE FROM CONTRACT_ITEM CI WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID AND CI.PART_OBJID = T.PART_OBJID AND CI.STATUS = 'ACTIVE' ORDER BY CI.OBJID DESC LIMIT 1),
T.DUE_DATE,
(SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)
(SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID LIMIT 1)
),'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{contract_end_date}, 'YYYY-MM-DD')
</if>
@@ -4267,14 +4267,13 @@
<if test="product_item_name != null and product_item_name != ''">
AND UPPER(T.PART_NAME) LIKE UPPER('%' || #{product_item_name} || '%')
</if>
<!-- S/N 필터 -->
<!-- S/N 필터 (T.CONTRACT_ITEM_OBJID로 직접 매칭) -->
<if test="serial_no != null and serial_no != ''">
AND EXISTS (
SELECT 1 FROM CONTRACT_ITEM AS I
LEFT JOIN CONTRACT_ITEM_SERIAL AS S ON S.ITEM_OBJID = I.OBJID AND S.STATUS = 'ACTIVE'
WHERE I.CONTRACT_OBJID = T.CONTRACT_OBJID
AND I.PART_OBJID = T.PART_OBJID
AND UPPER(S.SERIAL_NO) LIKE UPPER('%' || #{serial_no} || '%')
SELECT 1 FROM CONTRACT_ITEM_SERIAL CIS
WHERE CIS.ITEM_OBJID::VARCHAR = T.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND UPPER(CIS.SERIAL_NO) LIKE UPPER('%' || #{serial_no} || '%')
)
</if>
ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC, OVERHAUL_ORDER DESC NULLS LAST

View File

@@ -6473,7 +6473,7 @@ FROM(
AND POM.PARTNER_OBJID = REPLACE(#{partner_objid}, 'C_', '')
</if>
<if test="sales_mng_user_ids != null and sales_mng_user_ids != ''">
AND POM.SALES_MNG_USER_ID IN
AND POM.WRITER IN
<foreach item="value" collection="sales_mng_user_ids.split(',')" open="(" separator="," close=")">
#{value}
</foreach>
@@ -6712,7 +6712,7 @@ FROM(
AND POM.PARTNER_OBJID = REPLACE(#{partner_objid}, 'C_', '')
</if>
<if test="sales_mng_user_ids != null and sales_mng_user_ids != ''">
AND POM.SALES_MNG_USER_ID IN
AND POM.WRITER IN
<foreach item="value" collection="sales_mng_user_ids.split(',')" open="(" separator="," close=")">
#{value}
</foreach>

View File

@@ -1767,8 +1767,9 @@
<!-- 반제품검사 불량유형 드롭박스 목록 (CODE, NAME 형태) -->
<select id="getSemiProductDefectTypeList" parameterType="map" resultType="map">
SELECT DISTINCT SPI.DEFECT_TYPE AS CODE
, SPI.DEFECT_TYPE AS NAME
, COALESCE(CC.CODE_NAME, SPI.DEFECT_TYPE) AS NAME
FROM PMS_QUALITY_SEMI_PRODUCT_INSPECTION SPI
LEFT JOIN COMM_CODE CC ON CC.CODE_ID = SPI.DEFECT_TYPE
WHERE SPI.DEFECT_TYPE IS NOT NULL AND SPI.DEFECT_TYPE != ''
ORDER BY NAME
</select>

File diff suppressed because it is too large Load Diff

View File

@@ -1823,11 +1823,12 @@ public class ApprovalService {
if(existing != null){
String existingStatus = CommonUtils.checkNull(existing.get("STATUS"));
// 반려/삭제 건은 새 approKey로 신규 상신 (기존 approKey는 아마란스에 반려 문서로 남아있어 재사용 불가)
if("reject".equals(existingStatus) || "delete".equals(existingStatus)){
// 반려/삭제/임시보관(취소) 건은 새 approKey로 신규 상신
// - 아마란스가 기존 approKey의 원챔버 첨부파일(HTML)을 재사용하므로 수정 내용이 반영 안됨
if("reject".equals(existingStatus) || "delete".equals(existingStatus) || "create".equals(existingStatus)){
approKey = "UB_" + java.util.UUID.randomUUID().toString();
isNewRecord = false;
System.out.println("=== 반려/삭제 건 재상신 - 신규 approKey 생성: " + approKey + " (기존 상태: " + existingStatus + ") ===");
System.out.println("=== 재상신 - 신규 approKey 생성: " + approKey + " (기존 상태: " + existingStatus + ") ===");
} else {
approKey = CommonUtils.checkNull(existing.get("APPRO_KEY"));
isNewRecord = false;
@@ -2319,7 +2320,8 @@ public class ApprovalService {
// 하단 부가세 구분 + 날짜
html.append("<table style='width:100%; border-collapse:collapse; margin-top:-1px;'><tr>");
html.append("<td style='").append(S).append(" border-top:none;'>").append(vatNote).append("</td>");
html.append("<td style='").append(S).append(" border-top:none; text-align:right;'>").append(regDatetime).append("</td>");
//html.append("<td style='").append(S).append(" border-top:none; text-align:right;'>").append(regDatetime).append("</td>");
html.append("<td style='").append(S).append(" border-top:none; text-align:right;'></td>");
html.append("</tr></table>");
html.append("</div>");
@@ -2451,7 +2453,8 @@ public class ApprovalService {
// 하단 부가세 구분 + 날짜
html.append("<div style='display:flex; justify-content:space-between; padding:3px 5px; font-size:11px; border:1px solid #000; border-top:none;'>");
html.append("<span>").append(vatNote).append("</span>");
html.append("<span>").append(regDatetime).append("</span>");
//html.append("<span>").append(regDatetime).append("</span>");
html.append("<span></span>");
html.append("</div>");
html.append("</div>");
@@ -2943,6 +2946,7 @@ public class ApprovalService {
if("90".equals(docSts)) return "complete";
if("100".equals(docSts)) return "reject";
if("110".equals(docSts)) return "hold";
if("999".equals(docSts)) return "delete";
return "inProcess";
}
@@ -2956,6 +2960,7 @@ public class ApprovalService {
if("90".equals(docSts)) return "approvalComplete";
if("100".equals(docSts)) return "reject";
if("110".equals(docSts)) return "approvalRequest";
if("999".equals(docSts)) return "create";
return "";
}
@@ -3670,6 +3675,7 @@ public class ApprovalService {
if("90".equals(docSts)) return "종결";
if("100".equals(docSts)) return "반려";
if("110".equals(docSts)) return "보류";
if("999".equals(docSts)) return "삭제";
return "기타(" + docSts + ")";
}