발주서 양식 변경 (외주가공)

This commit is contained in:
2025-12-10 16:15:31 +09:00
parent 49cd6ddda1
commit 3688414f89
4 changed files with 169 additions and 48 deletions

View File

@@ -230,7 +230,7 @@ $(document).ready(function(){
,{name:"PART_OBJID" , hidden: true, sortable:false, editable:false}
,{name:"PART_NO" , hidden: true, sortable:false, editable:false}
,{name:"ROW_NUM" , width:40, align:"center", sortable:false, editable:false}
,{name:"PART_NAME" , width:170, align:"left", sortable:false, editable:<%= isModify %>}
,{name:"PART_NAME" , width:170, align:"left", sortable:false, editable:false}
,{name:"SPEC" , width:180, align:"left", sortable:false, editable:<%= isModify %>}
,{name:"ORDER_QTY" , width:60, align:"right", sortable:false, editable:<%= isModify %>
,formatter:"integer", formatoptions:{thousandsSeparator:","}

View File

@@ -16,6 +16,14 @@
isModify = false; //수정불가
}
String actType = (String)request.getAttribute("actType");
// 담당자 목록
List userList = (List)request.getAttribute("userList");
if(userList == null) userList = new ArrayList();
// 현재 선택된 담당자 ID (SALES_MNG_USER_ID, SALES_MNG_USER_ID2에 저장)
String managerId = CommonUtils.checkNull(info != null ? info.get("SALES_MNG_USER_ID") : "");
String managerId2 = CommonUtils.checkNull(info != null ? info.get("SALES_MNG_USER_ID2") : "");
%>
<!DOCTYPE html>
<html>
@@ -36,9 +44,9 @@
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 20px;
/* margin-bottom: 20px; */
border-bottom: 2px solid #333;
padding-bottom: 15px;
/* padding-bottom: 15px; */
}
.po-logo {
width: 120px;
@@ -48,8 +56,7 @@
flex-grow: 1;
}
.po-company-title {
font-size: 14px;
border: 1px solid #333;
font-size: 16px;
padding: 5px 15px;
display: inline-block;
margin-bottom: 5px;
@@ -78,17 +85,17 @@
.po-info-table {
width: 100%;
border-collapse: collapse;
margin-bottom: 15px;
/* margin-bottom: 15px; */
}
.po-info-table td {
padding: 8px;
border: 1px solid #ddd;
/* border: 1px solid #ddd; */
font-size: 13px;
}
.po-info-table .label {
background-color: #f5f5f5;
/* background-color: #f5f5f5; */
font-weight: bold;
width: 120px;
width: 20%;
}
.po-manager-box {
border: 1px solid #333;
@@ -133,8 +140,9 @@
background-color: #fff9c4 !important;
}
.total-section {
margin-top: 15px;
/* margin-top: 15px; */
border: 1px solid #333;
width: 50%;
}
.total-section table {
width: 100%;
@@ -146,22 +154,29 @@
font-size: 14px;
}
.total-section .label {
background-color: #f0f0f0;
background-color: #e2efda;
font-weight: bold;
text-align: center;
width: 40%;
}
.total-section .amount {
text-align: right;
font-weight: bold;
}
.confidential-notice {
margin-top: 20px;
/* margin-top: 20px; */
padding: 10px;
border: 1px solid #ccc;
background-color: #f9f9f9;
/* border: 1px solid #ccc; */
/* background-color: #f9f9f9; */
font-size: 12px;
text-align: center;
color: #666;
text-align: right;
color: #cb3333;
}
input.date_icon {
border: 1px solid #aaa !important;
border-radius: 4px;
padding: 2px 5px;
box-sizing: border-box;
}
</style>
@@ -178,6 +193,24 @@ $(document).ready(function(){
$(this).val(fnc_addComma($(this).val().replace(/[^0-9]/g,"")));
});
// 담당자1 선택 시 전화번호/이메일 표시
$("#SALES_MNG_USER_ID").change(function(){
var $selected = $(this).find("option:selected");
var phone = $selected.data("phone") || "";
var email = $selected.data("email") || "";
$("#display_phone1").text(phone);
$("#display_email1").text(email);
});
// 담당자2 선택 시 전화번호/이메일 표시
$("#SALES_MNG_USER_ID2").change(function(){
var $selected = $(this).find("option:selected");
var phone = $selected.data("phone") || "";
var email = $selected.data("email") || "";
$("#display_phone2").text(phone);
$("#display_email2").text(email);
});
// 결재라인 가져오기
fn_getApprLine();
@@ -196,7 +229,7 @@ $(document).ready(function(){
,{name:"PURCHASE_ORDER_NO" , width:110, align:"center", sortable:false, editable:false}
,{name:"PARTNER_NAME" , width:80, align:"center", sortable:false, editable:false}
,{name:"PRODUCT_NAME" , width:160, align:"left", sortable:false, editable:<%= isModify %>}
,{name:"PART_NAME" , width:80, align:"center", sortable:false, editable:<%= isModify %>}
,{name:"PART_NAME" , width:80, align:"center", sortable:false, editable:false}
,{name:"ORDER_QTY" , width:50, align:"right", sortable:false, editable:<%= isModify %>
,formatter:"integer", formatoptions:{thousandsSeparator:","}
,editoptions:{
@@ -462,12 +495,15 @@ var gridFn = {
<input type="hidden" name="MASTER_OBJID" id="MASTER_OBJID" value="${objId}" />
<input type="hidden" name="PROPOSAL_OBJID" id="PROPOSAL_OBJID" value="${info.PROPOSAL_OBJID}" />
<input type="hidden" name="FORM_TYPE" id="FORM_TYPE" value="outsourcing" />
<input type="hidden" name="CONTRACT_MGMT_OBJID" id="CONTRACT_MGMT_OBJID" value="${info.CONTRACT_MGMT_OBJID}" />
<input type="hidden" name="SALES_REQUEST_OBJID" id="SALES_REQUEST_OBJID" value="${info.SALES_REQUEST_OBJID}" />
<input type="hidden" name="TYPE" id="TYPE" value="${info.TYPE}" />
<div class="po-container">
<!-- 헤더 영역 -->
<div class="po-header">
<div class="po-logo">
<img src="<%=request.getContextPath()%>/images/logo.png" alt="RPS Logo" style="max-width: 120px; height: auto;">
<img src="<%=request.getContextPath()%>/images/logo.png" alt="RPS Logo" style="max-width: 200px; height: auto;">
</div>
<div class="po-title-area">
<div class="po-company-title">㈜ 알피에스</div>
@@ -490,7 +526,7 @@ var gridFn = {
</div>
<!-- 기본정보 + 담당자 영역 -->
<div style="display:flex; justify-content:space-between; margin-bottom:15px;">
<div style="display:flex; justify-content:space-between; /* margin-bottom:15px; */">
<div style="width:45%;">
<table class="po-info-table">
<tr>
@@ -500,13 +536,13 @@ var gridFn = {
<tr>
<td class="label">2. 발주일자 :</td>
<td>
<input type="text" name="ORDER_DATE" id="ORDER_DATE" class="date_icon" value="${info.ORDER_DATE}" <% if(!isModify){ %>readonly<% } %> style="width:120px;"/>
<input type="text" name="PURCHASE_DATE" id="PURCHASE_DATE" class="date_icon" value="${info.PURCHASE_DATE}" <% if(!isModify){ %>readonly<% } %> style="width:100%;"/>
</td>
</tr>
<tr>
<td class="label">3. 수신업체 :</td>
<td>
<select name="PARTNER_OBJID" id="PARTNER_OBJID" class="select2" style="width:200px;" <% if(!isModify){ %>disabled<% } %>>
<select name="PARTNER_OBJID" id="PARTNER_OBJID" class="select2" style="width:100%;" <% if(!isModify){ %>disabled<% } %>>
<option value="">선택</option>
${code_map.partner_cd}
</select>
@@ -516,22 +552,84 @@ var gridFn = {
</div>
<div style="width:50%;">
<!-- 담당자 정보 -->
<div class="po-manager-box">
<div class="manager-title">담 당 자</div>
<div style="font-size:12px; line-height:1.8; padding:10px;">
${info.MANAGER_NAME} ${info.MANAGER_POSITION}<br/>
(${info.MANAGER_PHONE} / ${info.MANAGER_EMAIL})<br/>
${info.MANAGER_NAME2} ${info.MANAGER_POSITION2}<br/>
(${info.MANAGER_PHONE2} / ${info.MANAGER_EMAIL2})
</div>
</div>
<!-- 회사 정보 -->
<div class="po-company-info">
<div class="po-company-name">㈜알피에스 대표이사 이 동 헌</div>
<div class="po-company-address">대전광역시 유성구 국제과학10로8(둔곡동 402-4번지)</div>
</div>
<!-- 담당자 박스 (일반발주서와 동일한 테이블 형태) -->
<table style="width:100%; border-collapse:collapse; border:1px solid #000; font-size:10px;">
<tr>
<td rowspan="4" style="width:25%; text-align:center; font-weight:bold; border:1px solid #000; letter-spacing:3px; vertical-align:middle; font-size:11px; background-color:#d9d9d9;">담 당 자</td>
<td style="border:1px solid #000; padding:2px 6px; text-align:center;">
<% if(isModify){ %>
<select name="SALES_MNG_USER_ID" id="SALES_MNG_USER_ID" style="width:150px; font-size:10px;">
<option value="">선택</option>
<%
for(int u=0; u<userList.size(); u++){
Map userMap = (Map)userList.get(u);
String userId = CommonUtils.checkNull(userMap.get("user_id"));
if("".equals(userId)) userId = CommonUtils.checkNull(userMap.get("USER_ID"));
String userName = CommonUtils.checkNull(userMap.get("user_name"));
if("".equals(userName)) userName = CommonUtils.checkNull(userMap.get("USER_NAME"));
String positionName = CommonUtils.checkNull(userMap.get("position_name"));
if("".equals(positionName)) positionName = CommonUtils.checkNull(userMap.get("POSITION_NAME"));
String cellPhone = CommonUtils.checkNull(userMap.get("cell_phone"));
if("".equals(cellPhone)) cellPhone = CommonUtils.checkNull(userMap.get("CELL_PHONE"));
String email = CommonUtils.checkNull(userMap.get("email"));
if("".equals(email)) email = CommonUtils.checkNull(userMap.get("EMAIL"));
String selected = managerId.equals(userId) ? "selected" : "";
%>
<option value="<%=userId%>" data-name="<%=userName%>" data-position="<%=positionName%>" data-phone="<%=cellPhone%>" data-email="<%=email%>" <%=selected%>><%=userName%> <%=positionName%></option>
<% } %>
</select>
<% } else { %>
${info.MANAGER_NAME} ${info.MANAGER_POSITION}
<% } %>
</td>
</tr>
<tr>
<td style="border:1px solid #000; padding:2px 6px; text-align:center; position:relative;">
<span id="manager1_info">(<span id="display_phone1">${info.MANAGER_PHONE}</span> / <span id="display_email1">${info.MANAGER_EMAIL}</span>)</span>
<!-- 직인 이미지 -->
<img src="<%=request.getContextPath()%>/images/stamp_rps.png" alt="직인" style="position:absolute; right:5px; top:-10px; width:45px; height:45px; opacity:0.9;" onerror="this.style.display='none'">
</td>
</tr>
<tr>
<td style="border:1px solid #000; padding:2px 6px; text-align:center;">
<% if(isModify){ %>
<select name="SALES_MNG_USER_ID2" id="SALES_MNG_USER_ID2" style="width:150px; font-size:10px;">
<option value="">선택</option>
<%
for(int u=0; u<userList.size(); u++){
Map userMap = (Map)userList.get(u);
String uId = CommonUtils.checkNull(userMap.get("user_id"));
if("".equals(uId)) uId = CommonUtils.checkNull(userMap.get("USER_ID"));
String uName = CommonUtils.checkNull(userMap.get("user_name"));
if("".equals(uName)) uName = CommonUtils.checkNull(userMap.get("USER_NAME"));
String pName = CommonUtils.checkNull(userMap.get("position_name"));
if("".equals(pName)) pName = CommonUtils.checkNull(userMap.get("POSITION_NAME"));
String cPhone = CommonUtils.checkNull(userMap.get("cell_phone"));
if("".equals(cPhone)) cPhone = CommonUtils.checkNull(userMap.get("CELL_PHONE"));
String eMail = CommonUtils.checkNull(userMap.get("email"));
if("".equals(eMail)) eMail = CommonUtils.checkNull(userMap.get("EMAIL"));
String selected2 = managerId2.equals(uId) ? "selected" : "";
%>
<option value="<%=uId%>" data-name="<%=uName%>" data-position="<%=pName%>" data-phone="<%=cPhone%>" data-email="<%=eMail%>" <%=selected2%>><%=uName%> <%=pName%></option>
<% } %>
</select>
<% } else { %>
${info.MANAGER_NAME2} ${info.MANAGER_POSITION2}
<% } %>
</td>
</tr>
<tr>
<td style="border:1px solid #000; padding:2px 6px; text-align:center;">
<span id="manager2_info">(<span id="display_phone2">${info.MANAGER_PHONE2}</span> / <span id="display_email2">${info.MANAGER_EMAIL2}</span>)</span>
</td>
</tr>
<tr>
<td colspan="2" style="border:1px solid #000; border-bottom:none; padding:5px; text-align:center; font-size:14px; font-weight:bold;">㈜알피에스 대표이사 이 동 헌</td>
</tr>
<tr>
<td colspan="2" style="border:1px solid #000; border-top:none; padding:5px; text-align:center; font-size:11px; font-weight:bold;">대전광역시 유성구 국제과학10로8(둔곡동 402-4번지)</td>
</tr>
</table>
</div>
</div>
@@ -541,13 +639,13 @@ var gridFn = {
<!-- 버튼 영역 -->
<div style="text-align:right; margin-bottom:10px;">
<% if(isModify){ %>
<input type="button" value="행추가" class="plm_btns" id="btnAdd" style="background:#dfeffc">
<input type="button" value="행삭제" class="plm_btns" id="btnDel" style="background:#dfeffc">
<input type="button" value="저장" class="plm_btns" id="btnSave" style="background:#dfeffc">
<!-- <input type="button" value="행추가" id="btnAdd" style="background:#dfeffc; padding:5px 15px; cursor:pointer; font-size:14px; border-radius: 5px;">
<input type="button" value="행삭제" id="btnDel" style="background:#dfeffc; padding:5px 15px; cursor:pointer; font-size:14px; border-radius: 5px;"> -->
<input type="button" value="저장" id="btnSave" style="background:#dfeffc; padding:5px 15px; cursor:pointer; font-size:14px; border-radius: 5px;">
<% }else{ %>
<input type="button" value="발주서다운" class="plm_btns" id="btnDown" style="background:#dfeffc">
<input type="button" value="발주서다운" id="btnDown" style="background:#dfeffc; padding:5px 15px; cursor:pointer; font-size:14px; border-radius: 5px;">
<% } %>
<input type="button" value="닫기" class="plm_btns" style="background:#dfeffc" onclick="window.close();">
<input type="button" value="닫기" style="background:#dfeffc; padding:5px 15px; cursor:pointer; font-size:14px; border-radius: 5px;" onclick="window.close();">
</div>
<!-- 그리드 -->
@@ -557,10 +655,10 @@ var gridFn = {
</div>
<!-- 합계 영역 -->
<div class="total-section">
<div class="total-section" style="margin-left:auto;">
<table>
<tr>
<td class="label" style="width:80%;">총 공 급 가 액</td>
<td class="label">총 공 급 가 액</td>
<td class="amount"><input type="text" name="TOTAL_SUPPLY_PRICE" id="TOTAL_SUPPLY_PRICE" value="" readonly style="border:none; text-align:right; width:100%; font-weight:bold; font-size:16px;"/></td>
</tr>
</table>