Files
wace_plm/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_outsourcing.jsp

579 lines
17 KiB
Plaintext

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="com.pms.common.utils.*"%>
<%@ page import="java.util.*"%>
<%@include file="/init_jqGrid.jsp"%>
<%
Map info = (HashMap)(request.getAttribute("info"));
boolean isModify = true;
if(info!=null &&
( CommonUtils.checkNull(info.get("APPR_STATUS")).equals( "결재중" )
||CommonUtils.checkNull(info.get("APPR_STATUS")).equals( "결재완료" )
||CommonUtils.checkNull(info.get("STATUS")).equals( "cancel" )
)
){
isModify = false; //수정불가
}
String actType = (String)request.getAttribute("actType");
%>
<!DOCTYPE html>
<html>
<head>
<c:set var="now" value="<%=new java.util.Date() %>" />
<c:set var="sysYear"><fmt:formatDate value="${now}" pattern="yyyy" /></c:set>
<title><%=Constants.SYSTEM_NAME%> - 외주가공 발주서</title>
<style>
/* 외주가공 발주서 스타일 */
.po-container {
max-width: 1100px;
margin: 0 auto;
padding: 20px;
font-family: 'Malgun Gothic', sans-serif;
}
.po-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 20px;
border-bottom: 2px solid #333;
padding-bottom: 15px;
}
.po-logo {
width: 120px;
}
.po-title-area {
text-align: center;
flex-grow: 1;
}
.po-company-title {
font-size: 14px;
border: 1px solid #333;
padding: 5px 15px;
display: inline-block;
margin-bottom: 5px;
}
.po-title {
font-size: 28px;
font-weight: bold;
}
.approval-box {
border: 1px solid #333;
width: 200px;
}
.approval-box table {
width: 100%;
border-collapse: collapse;
}
.approval-box th, .approval-box td {
border: 1px solid #333;
text-align: center;
padding: 5px;
font-size: 12px;
}
.approval-box th {
background-color: #f0f0f0;
}
.po-info-table {
width: 100%;
border-collapse: collapse;
margin-bottom: 15px;
}
.po-info-table td {
padding: 8px;
border: 1px solid #ddd;
font-size: 13px;
}
.po-info-table .label {
background-color: #f5f5f5;
font-weight: bold;
width: 120px;
}
.po-manager-box {
border: 1px solid #333;
padding: 10px;
margin-bottom: 15px;
}
.po-manager-box .manager-title {
font-weight: bold;
margin-bottom: 5px;
text-align: center;
background-color: #f5f5f5;
padding: 5px;
}
.po-company-info {
margin-bottom: 15px;
padding: 10px;
border: 1px solid #333;
}
.po-company-name {
font-size: 18px;
font-weight: bold;
}
.po-company-address {
font-size: 12px;
color: #666;
}
.detail-label {
font-size: 12px;
color: #666;
margin-bottom: 5px;
}
/* 그리드 스타일 */
.ui-jqgrid-view {
max-height: 500px;
}
.ui-jqgrid-bdiv {
overflow-y: scroll !important;
max-height: 450px !important;
}
/* 그리드 헤더 스타일 - 노란색 배경 */
.ui-jqgrid .ui-jqgrid-htable th {
background-color: #fff9c4 !important;
}
.total-section {
margin-top: 15px;
border: 1px solid #333;
}
.total-section table {
width: 100%;
border-collapse: collapse;
}
.total-section td {
padding: 10px;
border: 1px solid #333;
font-size: 14px;
}
.total-section .label {
background-color: #f0f0f0;
font-weight: bold;
text-align: center;
}
.total-section .amount {
text-align: right;
font-weight: bold;
}
.confidential-notice {
margin-top: 20px;
padding: 10px;
border: 1px solid #ccc;
background-color: #f9f9f9;
font-size: 12px;
text-align: center;
color: #666;
}
</style>
<script type="text/javascript">
var grid;
$(document).ready(function(){
// 숫자 입력 필드 콤마 처리
$("input[numberOnly='']").each(function(){
$(this).css({'text-align':'right'})
})
.on("keyup", function() {
$(this).val(fnc_addComma($(this).val().replace(/[^0-9]/g,"")));
});
// 결재라인 가져오기
fn_getApprLine();
var unit_cd = $.parseJSON($("#unit_cd").val());
// 그리드 초기화 - 외주가공 발주서용 컬럼
grid = $("#grid1").jqGrid({
url: ""
,datatype: "local"
,data: $.parseJSON($("#gridDetailList").val())
,colNames: ["OBJID","PART_OBJID","No","발주번호","업체명","제품명","부품명","수량","단위","단가","합계","작업지시번호","부품품번","납기요청"]
,colModel: [
{name:"OBJID" , hidden: true, sortable:false, editable:false}
,{name:"PART_OBJID" , hidden: true, sortable:false, editable:false}
,{name:"ROW_NUM" , width:35, align:"center", sortable:false, editable:false}
,{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:"ORDER_QTY" , width:50, align:"right", sortable:false, editable:<%= isModify %>
,formatter:"integer", formatoptions:{thousandsSeparator:","}
,editoptions:{
dataInit: function(e){ e.style.textAlign = "right"; }
,dataEvents: [{type:"change", fn:function(e){ gridFn.calcRowAll(e); }}]
}
}
,{name:"UNIT" , width:40, align:"center", sortable:false, editable:<%= isModify %>
,edittype:"select", formatter:"select"
,editoptions:{ value: unit_cd }
}
,{name:"PARTNER_PRICE" , width:80, align:"right", sortable:false, editable:<%= isModify %>
,formatter:"integer", formatoptions:{thousandsSeparator:","}
,editoptions:{
dataInit: function(e){ e.style.textAlign = "right"; }
,dataEvents: [{type:"change", fn:function(e){ gridFn.calcRowAll(e); }}]
}
}
,{name:"SUPPLY_UNIT_PRICE" , width:90, align:"right", sortable:false, editable:false
,formatter:"integer", formatoptions:{thousandsSeparator:","}
}
,{name:"WORK_ORDER_NO" , width:100, align:"center", sortable:false, editable:<%= isModify %>}
,{name:"PART_NO" , width:90, align:"center", sortable:false, editable:false}
,{name:"DELIVERY_REQUEST_DATE", width:90, align:"center", sortable:false, editable:<%= isModify %>}
]
,rownumbers : false
,viewrecords : true
,height : '380'
,multiselect : <% if(isModify){ %>true<% }else{ %>false<% } %>
,shrinkToFit : false
,autowidth : true
,sortable : false
,rowNum : 10000
,forceFit : true
,jsonReader : {repeatitems: false}
,mtype :"POST"
,loadComplete: function(){
var gid = this.id;
setTimeout("fn_jqGrid_init($('#"+gid+"'), false);", 50);
// 행번호 자동 부여
var ids = $(this).jqGrid('getDataIDs');
for(var i = 0; i < ids.length; i++){
$(this).jqGrid('setCell', ids[i], 'ROW_NUM', i+2); // 2부터 시작 (PDF 양식 참고)
}
setTimeout(function(){ gridFn.footerSummary(); }, 100);
}
});
gridFn.opennEdit();
gridFn.footerSummary();
<% if(isModify){ %>
// 수정 가능 상태
$("#PARTNER_OBJID").prop("disabled","");
$("#DELIVERY_DATE").removeAttr("readonly");
// 공급업체 변경시
$("#PARTNER_OBJID").change(function(){
if($(this).val()!=""){
var list = fnc_getJsonAllDataListBySqlId({"sqlId":"purchaseOrder.purchaseOrderAdminSupplyInfo", "PARTNER_OBJID":$(this).val()});
if(fnc_checkNull(list)!=""){
// 수신업체 정보 갱신
}
}
});
// 버튼 이벤트
$("#btnAdd").click(function(){ fn_openPartMngListPopUp(); });
$("#btnDel").click(function(){ gridFn.delRow(); });
$("#btnSave").click(function(){ fn_save(); });
$("#btnAppr").click(function(){
if(fnc_valitate("form1")){
var objId = "${objId}";
if(""==grid.getRowData()){
Swal.fire('저장할 품목이 존재 하지 않습니다');
return;
}
var title = encodeURIComponent("외주가공 발주서");
window.open("/approval/registApproval.do?targetType=PURCHASE_ORDER_OUTSOURCING&targetObjId="+objId+"&approvalTitle="+title,"registApproval","width=700,height=700");
}
});
<% }else{ %>
$("#btnDown").click(function(){
document.form1.action = "/purchaseOrder/purchaseOrderFormPopup_outsourcing.do?actType=DOWN&PURCHASE_ORDER_MASTER_OBJID=${objId}";
document.form1.submit();
});
<% } %>
fnc_datepick();
$(".select2").select2();
gridFn.opennEdit();
gridFn.footerSummary();
});
// 결재라인 가져오기
function fn_getApprLine(){
if('${objId}'!=''){
$.ajax({
url:"/common/getApprovalLine.do",
type:"POST",
data:{"objId":"${objId}"},
dataType:"json",
async:false,
success:function(data){
$.each(data.RESULT, function(i,o){
if(i==0){
$("#appr_writer").html(o.WRITER);
}
if(i < 3){
$("#appr"+(i+1)).html(o.TARGET_USER_NAME +"<br/>"+ (o.PROC_DATE!=undefined?o.PROC_DATE:""));
}
});
}
});
}
}
// 행추가 팝업
function fn_openPartMngListPopUp(){
var url = "/partMng/partMngListPopUp.do?callbackFnc=fn_addRow&callType=purchaseOrder";
window.open(url,"purchaseOrderPartSelectListPopUp","width=1480,height=850");
}
// 행추가 콜백
function fn_addRow(rowData){
var v1 = Number(fnc_checkNullDefaultValue(rowData.map.ORDER_QTY, 0));
var v2 = Number(fnc_checkNullDefaultValue(rowData.map.PARTNER_PRICE, 0));
var _rowSum = v1 * v2;
var newId = grid.getGridParam("reccount")+1;
var addData = {
"PART_OBJID" : rowData.map.PART_OBJID
,"ROW_NUM" : newId + 1
,"PURCHASE_ORDER_NO" : "${info.PURCHASE_ORDER_NO}"
,"PARTNER_NAME" : $("#PARTNER_OBJID option:selected").text()
,"PRODUCT_NAME" : rowData.map.PART_NAME + " / " + rowData.map.SPEC
,"PART_NAME" : rowData.map.PART_NAME
,"ORDER_QTY" : v1
,"UNIT" : fnc_checkNullDefaultValue(rowData.map.UNIT, '0001400')
,"PARTNER_PRICE" : v2
,"SUPPLY_UNIT_PRICE" : _rowSum
,"WORK_ORDER_NO" : ""
,"PART_NO" : rowData.map.PART_NO
,"DELIVERY_REQUEST_DATE" : ""
};
grid.addRowData(newId, addData);
grid.jqGrid("editRow", newId);
gridFn.footerSummary();
}
// 저장
function fn_save(){
if(fnc_valitate("form1")){
if(""==grid.getRowData()){
Swal.fire('저장할 품목이 존재 하지 않습니다.');
return;
}
if(confirm("저장 하시겠습니까?")){
fn_save_process();
}
}
}
<% if(isModify){ %>
function fn_save_process(){
$("input[name*='PRICE']").each(function(){
$(this).val($(this).val().replace(/,/gi,""));
});
$("input[name*='QTY']").each(function(){
$(this).val($(this).val().replace(/,/gi,""));
});
gridFn.closeEdit();
$.ajax({
url:"/purchaseOrder/purchaseOrderFormPopup_outsourcingSave.do"
,type:"POST"
,data: $("#form1").serialize() + "&jqGrid="+ encodeURIComponent(JSON.stringify(grid.getRowData()))
,dataType:"json"
,success:function(data){
if(data && data.RESULT == 'S'){
alert("저장되었습니다.");
if(typeof opener.fn_search =="function"){ opener.fn_search() };
self.close();
}else{
alert(data.MSG);
}
}
,error: function(jqxhr, status, error){
alert('에러가 발생하였습니다. 시스템 관리자에게 문의하여 주세요.');
}
});
}
<% } %>
var gridFn = {
delRow : function(){
var selectedRowIds = grid.jqGrid("getGridParam","selarrrow");
if(selectedRowIds.length==0){
Swal.fire("삭제할 행을 선택해주십시오.");
return false;
}
for(var i = selectedRowIds.length - 1; i >= 0; i--){
grid.delRowData(selectedRowIds[i]);
}
// 행번호 재정렬
var ids = grid.jqGrid('getDataIDs');
for(var i = 0; i < ids.length; i++){
grid.jqGrid('setCell', ids[i], 'ROW_NUM', i+2);
}
gridFn.footerSummary();
}
,opennEdit : function() {
var ids = grid.jqGrid("getDataIDs");
for (var i = 0; i < ids.length; i++) {
grid.jqGrid("editRow",ids[i]);
}
}
,closeEdit : function() {
var ids = grid.jqGrid("getDataIDs");
for (var i = 0; i < ids.length; i++) {
grid.jqGrid("saveRow", ids[i], null, "clientArray");
}
}
,calcRowAll : function(e){
var $g = $("#grid1");
var rowId = e.target.id.split("_")[0];
var qty = Number(fnc_checkNullDefaultValue($g.find("#"+rowId+"_ORDER_QTY").val(), grid.jqGrid('getCell', rowId, "ORDER_QTY")).toString().replace(/,/g,""));
var unitPrice = Number(fnc_checkNullDefaultValue($g.find("#"+rowId+"_PARTNER_PRICE").val(), grid.jqGrid('getCell', rowId, "PARTNER_PRICE")).toString().replace(/,/g,""));
var supplyPrice = qty * unitPrice;
$g.jqGrid('setCell', rowId, "SUPPLY_UNIT_PRICE", supplyPrice);
this.footerSummary();
}
,footerSummary: function(){
var totalSupplyPrice = 0;
$.each($("#grid1").jqGrid('getDataIDs'), function(i, rowId){
var supplyPrice = grid.jqGrid('getCell', rowId, "SUPPLY_UNIT_PRICE");
supplyPrice = fnc_checkNullDefaultValue(supplyPrice, "0").toString().replace(/,/g,"");
if($.isNumeric(supplyPrice)){
totalSupplyPrice += Number(supplyPrice);
}
});
$("#TOTAL_SUPPLY_PRICE").val(numberWithCommas(totalSupplyPrice));
}
}
</script>
</head>
<body>
<form name="hiddenForm" id="hiddenForm" method="post">
<input type="hidden" name="OBJID" id="OBJID">
</form>
<form name="form1" id="form1" action="" method="post">
<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" />
<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;">
</div>
<div class="po-title-area">
<div class="po-company-title">㈜ 알피에스</div>
<div class="po-title">외주가공 발주서</div>
</div>
<div class="approval-box">
<table>
<tr>
<th>담당자</th>
<th>부사장</th>
<th>대표이사</th>
</tr>
<tr>
<td id="appr1" style="height:40px;">${info.MANAGER_NAME}</td>
<td id="appr2"></td>
<td id="appr3">전 결</td>
</tr>
</table>
</div>
</div>
<!-- 기본정보 + 담당자 영역 -->
<div style="display:flex; justify-content:space-between; margin-bottom:15px;">
<div style="width:45%;">
<table class="po-info-table">
<tr>
<td class="label">1. 발주번호 :</td>
<td><input type="text" name="PURCHASE_ORDER_NO" id="PURCHASE_ORDER_NO" value="${info.PURCHASE_ORDER_NO}" readonly style="border:none; width:100%;"/></td>
</tr>
<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;"/>
</td>
</tr>
<tr>
<td class="label">3. 수신업체 :</td>
<td>
<select name="PARTNER_OBJID" id="PARTNER_OBJID" class="select2" style="width:200px;" <% if(!isModify){ %>disabled<% } %>>
<option value="">선택</option>
${code_map.partner_cd}
</select>
</td>
</tr>
</table>
</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>
</div>
</div>
<!-- 상세내역 안내 -->
<div class="detail-label">[아래 상세내역 리스트 확인]</div>
<!-- 버튼 영역 -->
<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">
<% }else{ %>
<input type="button" value="발주서다운" class="plm_btns" id="btnDown" style="background:#dfeffc">
<% } %>
<input type="button" value="닫기" class="plm_btns" style="background:#dfeffc" onclick="window.close();">
</div>
<!-- 그리드 -->
<div id="plm_table_wrap1">
<table id="grid1"></table>
<textarea style="display:none;" id="gridDetailList">${gridDetailList}<c:if test="${empty gridDetailList}">[]</c:if></textarea>
</div>
<!-- 합계 영역 -->
<div class="total-section">
<table>
<tr>
<td class="label" style="width:80%;">총 공 급 가 액</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>
</div>
<!-- 보안문서 안내 -->
<div class="confidential-notice">
※ 보안문서(CONFIDENTIAL) : ㈜알피에스의 승인(APPROVAL) 없이 외부로 반출하거나 공유 할수 없습니다.
</div>
</div>
<textarea style="display:none;" id="unit_cd">${code_map.unit_cd}</textarea>
</form>
</body>
</html>