발주서 양식 변경 (일반발주서)
This commit is contained in:
@@ -0,0 +1,766 @@
|
||||
<%@ 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");
|
||||
|
||||
// 담당자 목록
|
||||
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>
|
||||
<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>
|
||||
/* 일반 발주서 스타일 - PDF 양식과 동일하게 */
|
||||
body {
|
||||
font-family: 'Malgun Gothic', '맑은 고딕', sans-serif;
|
||||
font-size: 11px;
|
||||
margin: 0;
|
||||
padding: 5px;
|
||||
background-color: #fff;
|
||||
overflow-x: hidden;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
/* 날짜 입력창 테두리 셀렉트박스와 동일하게 */
|
||||
input.date_icon {
|
||||
border: 1px solid #aaa !important;
|
||||
border-radius: 4px;
|
||||
padding: 5px 8px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.po-main-table {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
border-collapse: collapse;
|
||||
border: 2px solid #000;
|
||||
}
|
||||
.po-main-table td {
|
||||
border: 1px solid #000;
|
||||
padding: 5px 8px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.po-main-table .no-border {
|
||||
border: none;
|
||||
}
|
||||
.po-main-table .border-right {
|
||||
border-right: 1px solid #000;
|
||||
}
|
||||
.po-main-table .border-bottom {
|
||||
border-bottom: 1px solid #000;
|
||||
}
|
||||
/* 헤더 영역 */
|
||||
.po-logo-cell {
|
||||
width: 120px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
border: none !important;
|
||||
}
|
||||
.po-title-cell {
|
||||
text-align: center;
|
||||
font-size: 28px;
|
||||
font-weight: bold;
|
||||
letter-spacing: 20px;
|
||||
border: none !important;
|
||||
}
|
||||
/* 결재란 */
|
||||
.approval-table {
|
||||
border-collapse: collapse;
|
||||
float: right;
|
||||
}
|
||||
.approval-table th, .approval-table td {
|
||||
border: 1px solid #000;
|
||||
text-align: center;
|
||||
padding: 3px 10px;
|
||||
font-size: 11px;
|
||||
width: 55px;
|
||||
}
|
||||
.approval-table th {
|
||||
background-color: #d9d9d9;
|
||||
font-weight: normal;
|
||||
}
|
||||
.approval-table td {
|
||||
height: 35px;
|
||||
}
|
||||
/* 기본정보 라벨 */
|
||||
.info-label {
|
||||
font-weight: bold;
|
||||
white-space: nowrap;
|
||||
}
|
||||
/* 담당자 박스 */
|
||||
.manager-box {
|
||||
border: 1px solid #000;
|
||||
padding: 0;
|
||||
}
|
||||
.manager-box-title {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
padding: 5px;
|
||||
border-bottom: 1px solid #000;
|
||||
letter-spacing: 10px;
|
||||
}
|
||||
.manager-box-content {
|
||||
padding: 8px;
|
||||
font-size: 11px;
|
||||
line-height: 1.6;
|
||||
position: relative;
|
||||
}
|
||||
/* 직인 이미지 */
|
||||
.stamp-image {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.company-name {
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid #000;
|
||||
text-align: center;
|
||||
}
|
||||
.company-address {
|
||||
font-size: 11px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
/* 요청사항 */
|
||||
/* .request-box {
|
||||
border: 1px solid #000;
|
||||
padding: 8px;
|
||||
margin-top: 5px;
|
||||
min-height: 60px;
|
||||
} */
|
||||
/* 그리드 스타일 */
|
||||
.ui-jqgrid-view {
|
||||
max-height: 400px;
|
||||
}
|
||||
.ui-jqgrid-bdiv {
|
||||
overflow-y: scroll !important;
|
||||
max-height: 350px !important;
|
||||
}
|
||||
/* 합계 테이블 */
|
||||
.total-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.total-table td {
|
||||
border: 1px solid #000;
|
||||
padding: 8px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.total-table .label {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
width: 60%;
|
||||
letter-spacing: 5px;
|
||||
|
||||
}
|
||||
.total-table .currency {
|
||||
width: 30px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
border-right: none !important;
|
||||
}
|
||||
.total-table .amount {
|
||||
text-align: right;
|
||||
font-weight: bold;
|
||||
}
|
||||
/* 버튼 영역 */
|
||||
.btn-area {
|
||||
text-align: left;
|
||||
margin: 10px 0;
|
||||
}
|
||||
.graycolor {
|
||||
background-color: #d9d9d9;
|
||||
}
|
||||
</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","PART_NO","No","품명","규격","수량","단위","배송지","단가","공급가액","비고"]
|
||||
,colModel: [
|
||||
{name:"OBJID" , hidden: true, sortable:false, editable:false}
|
||||
,{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:"SPEC" , width:180, align:"left", sortable:false, editable:<%= isModify %>}
|
||||
,{name:"ORDER_QTY" , width:60, 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:50, align:"center", sortable:false, editable:<%= isModify %>
|
||||
,edittype:"select", formatter:"select"
|
||||
,editoptions:{ value: unit_cd }
|
||||
}
|
||||
,{name:"PART_DELIVERY_PLACE" , width:80, align:"center", sortable:false, editable:<%= isModify %>}
|
||||
,{name:"PARTNER_PRICE" , width:90, 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:100, align:"right", sortable:false, editable:false
|
||||
,formatter:"integer", formatoptions:{thousandsSeparator:","}
|
||||
}
|
||||
,{name:"REMARK" , width:120, align:"left", sortable:false, editable:<%= isModify %>}
|
||||
]
|
||||
,rownumbers : false
|
||||
,viewrecords : true
|
||||
,height : '300'
|
||||
,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+1);
|
||||
}
|
||||
|
||||
setTimeout(function(){ gridFn.footerSummary(); }, 100);
|
||||
}
|
||||
});
|
||||
|
||||
gridFn.opennEdit();
|
||||
gridFn.footerSummary();
|
||||
|
||||
<% if(isModify){ %>
|
||||
// 수정 가능 상태
|
||||
$("#PARTNER_OBJID,#DELIVERY_PLACE_CD,#PAYMENT_METHOD").prop("disabled","");
|
||||
$("#DELIVERY_DATE,#REQUEST_CONTENT").removeAttr("readonly");
|
||||
|
||||
// 담당자1 선택 변경시
|
||||
$("#SALES_MNG_USER_ID").change(function(){
|
||||
var $selected = $(this).find("option:selected");
|
||||
var name = $selected.data("name") || "";
|
||||
var position = $selected.data("position") || "";
|
||||
var phone = $selected.data("phone") || "";
|
||||
var email = $selected.data("email") || "";
|
||||
|
||||
// hidden 필드에 저장
|
||||
$("#MANAGER_NAME").val(name);
|
||||
$("#MANAGER_POSITION").val(position);
|
||||
$("#MANAGER_PHONE").val(phone);
|
||||
$("#MANAGER_EMAIL").val(email);
|
||||
|
||||
// 화면에 표시
|
||||
$("#display_phone1").text(phone);
|
||||
$("#display_email1").text(email);
|
||||
});
|
||||
|
||||
// 담당자2 선택 변경시
|
||||
$("#SALES_MNG_USER_ID2").change(function(){
|
||||
var $selected = $(this).find("option:selected");
|
||||
var name = $selected.data("name") || "";
|
||||
var position = $selected.data("position") || "";
|
||||
var phone = $selected.data("phone") || "";
|
||||
var email = $selected.data("email") || "";
|
||||
|
||||
// hidden 필드에 저장
|
||||
$("#MANAGER_NAME2").val(name);
|
||||
$("#MANAGER_POSITION2").val(position);
|
||||
$("#MANAGER_PHONE2").val(phone);
|
||||
$("#MANAGER_EMAIL2").val(email);
|
||||
|
||||
// 화면에 표시
|
||||
$("#display_phone2").text(phone);
|
||||
$("#display_email2").text(email);
|
||||
});
|
||||
|
||||
// 공급업체 변경시
|
||||
$("#PARTNER_OBJID").change(function(){
|
||||
if($(this).val()!=""){
|
||||
var list = fnc_getJsonAllDataListBySqlId({"sqlId":"purchaseOrder.purchaseOrderAdminSupplyInfo", "PARTNER_OBJID":$(this).val()});
|
||||
if(fnc_checkNull(list)!=""){
|
||||
var row = list[0];
|
||||
// 수신업체 정보 갱신 (필요시)
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 버튼 이벤트
|
||||
$("#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($("#TITLE").val());
|
||||
window.open("/approval/registApproval.do?targetType=PURCHASE_ORDER_GENERAL&targetObjId="+objId+"&approvalTitle="+title,"registApproval","width=700,height=700");
|
||||
}
|
||||
});
|
||||
<% }else{ %>
|
||||
$("#btnDown").click(function(){
|
||||
document.form1.action = "/purchaseOrder/purchaseOrderFormPopup_general.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
|
||||
,"PART_NAME" : rowData.map.PART_NAME
|
||||
,"SPEC" : rowData.map.SPEC
|
||||
,"ORDER_QTY" : v1
|
||||
,"UNIT" : fnc_checkNullDefaultValue(rowData.map.UNIT, '0001400')
|
||||
,"PART_DELIVERY_PLACE" : "RPS"
|
||||
,"PARTNER_PRICE" : v2
|
||||
,"SUPPLY_UNIT_PRICE": _rowSum
|
||||
,"REMARK" : ""
|
||||
};
|
||||
|
||||
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_generalSave.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+1);
|
||||
}
|
||||
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);
|
||||
}
|
||||
});
|
||||
|
||||
var vat = Math.floor(totalSupplyPrice * 0.1);
|
||||
var totalWithVat = totalSupplyPrice + vat;
|
||||
|
||||
$("#TOTAL_SUPPLY_PRICE").val(numberWithCommas(totalSupplyPrice));
|
||||
$("#TOTAL_VAT").val(numberWithCommas(vat));
|
||||
$("#TOTAL_PRICE_ALL").val(numberWithCommas(totalWithVat));
|
||||
}
|
||||
}
|
||||
</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="general" />
|
||||
<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}" />
|
||||
|
||||
<!-- 메인 발주서 테이블 (PDF 양식과 동일) -->
|
||||
<table class="po-main-table">
|
||||
<!-- 1행: 로고 + 타이틀 + 결재란 -->
|
||||
<tr>
|
||||
<td colspan="2" class="po-logo-cell" style="width:15%; border-right:none;">
|
||||
<img src="<%=request.getContextPath()%>/images/logo.png" alt="RPS Logo" style="max-width: 100px; height: auto;">
|
||||
</td>
|
||||
<td colspan="3" class="po-title-cell" style="border-left:none; border-right:none;">
|
||||
발 주 서
|
||||
</td>
|
||||
<td colspan="2" style="border-left:none; padding:5px;">
|
||||
<table class="approval-table">
|
||||
<tr>
|
||||
<th>담당자</th>
|
||||
<th>부사장</th>
|
||||
<th>대표이사</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="appr1"></td>
|
||||
<td id="appr2">전결</td>
|
||||
<td id="appr3">전결</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 2행: 기본정보(좌) + 담당자(우) -->
|
||||
<tr>
|
||||
<td colspan="4" style="vertical-align:top; padding:10px; ">
|
||||
<!-- 좌측: 기본정보 -->
|
||||
<table style="width:100%; border:none;">
|
||||
<tr>
|
||||
<td class="info-label" style="width:120px; border:none;">1. 발 주 번 호 :</td>
|
||||
<td style="border:none;">
|
||||
<input type="text" name="PURCHASE_ORDER_NO" id="PURCHASE_ORDER_NO" value="${info.PURCHASE_ORDER_NO}" readonly style="border:none; width:200px; font-weight:bold;"/>
|
||||
<!-- <span style="color:#888; font-size:10px;">(자동생성)</span> -->
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="info-label" style="border:none;">2. 발 주 일 자 :</td>
|
||||
<td style="border:none;">
|
||||
<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="info-label" style="border:none;">3. 수 신 업 체 :</td>
|
||||
<td style="border:none;">
|
||||
<select name="PARTNER_OBJID" id="PARTNER_OBJID" class="select2" style="width:100%;" <% if(!isModify){ %>disabled<% } %>>
|
||||
<option value="">선택</option>
|
||||
${code_map.partner_cd}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="info-label" style="border:none;">4. 납 기 일 :</td>
|
||||
<td style="border:none;">
|
||||
<input type="text" name="DELIVERY_DATE" id="DELIVERY_DATE" class="date_icon" value="${info.DELIVERY_DATE}" <% if(!isModify){ %>readonly<% } %> style="width:100%;"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="info-label" style="border:none;">5. 납 품 장 소 :</td>
|
||||
<td style="border:none;">
|
||||
<select name="DELIVERY_PLACE" id="DELIVERY_PLACE" class="select2" style="width:100%;" <% if(!isModify){ %>disabled<% } %>>
|
||||
<option value="">선택</option>
|
||||
${code_map.delivery_place_cd}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="info-label" style="border:none;">6. 결 제 방 식 :</td>
|
||||
<td style="border:none;">
|
||||
<select name="PAYMENT_TERMS" id="PAYMENT_TERMS" class="select2" style="width:100%;" <% if(!isModify){ %>disabled<% } %>>
|
||||
<option value="">선택</option>
|
||||
${code_map.payment_terms_cd}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="info-label" style="border:none;">7. 합 계 금 액 :</td>
|
||||
<td style="border:none;"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td colspan="3" style="vertical-align:top; padding:10px;">
|
||||
<!-- 우측: 담당자 + 회사정보 + 요청사항 -->
|
||||
<!-- 담당자 박스 (PDF 양식과 동일한 테이블 형태) -->
|
||||
<table class="manager-table" style="width:100%; border-collapse:collapse; border:1px solid #000; font-size:10px;">
|
||||
<tr>
|
||||
<td rowspan="4" class="graycolor" style="width:50px; text-align:center; font-weight:bold; border:1px solid #000; letter-spacing:3px; vertical-align:middle; font-size:11px;">담 당 자</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>
|
||||
<input type="hidden" name="MANAGER_NAME" id="MANAGER_NAME" value="${info.MANAGER_NAME}"/>
|
||||
<input type="hidden" name="MANAGER_POSITION" id="MANAGER_POSITION" value="${info.MANAGER_POSITION}"/>
|
||||
<input type="hidden" name="MANAGER_PHONE" id="MANAGER_PHONE" value="${info.MANAGER_PHONE}"/>
|
||||
<input type="hidden" name="MANAGER_EMAIL" id="MANAGER_EMAIL" value="${info.MANAGER_EMAIL}"/>
|
||||
<% } 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>
|
||||
<input type="hidden" name="MANAGER_NAME2" id="MANAGER_NAME2" value="${info.MANAGER_NAME2}"/>
|
||||
<input type="hidden" name="MANAGER_POSITION2" id="MANAGER_POSITION2" value="${info.MANAGER_POSITION2}"/>
|
||||
<input type="hidden" name="MANAGER_PHONE2" id="MANAGER_PHONE2" value="${info.MANAGER_PHONE2}"/>
|
||||
<input type="hidden" name="MANAGER_EMAIL2" id="MANAGER_EMAIL2" value="${info.MANAGER_EMAIL2}"/>
|
||||
<% } 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" class="company-name">㈜알피에스 대표이사 이 동 헌</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="company-address">대전광역시 유성구 국제과학10로8(둔곡동 402-4번지)</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- 요청사항 박스 -->
|
||||
<div class="request-box">
|
||||
<span style="font-weight:bold;">요청사항 :</span><br/>
|
||||
<textarea name="REQUEST_CONTENT" id="REQUEST_CONTENT" style="width:100%; height:40px; border:none; resize:none; margin-top:5px;" <% if(!isModify){ %>readonly<% } %>>${info.REQUEST_CONTENT}</textarea>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<!-- 그리드 영역 -->
|
||||
<div id="plm_table_wrap1" style="width:100%; margin:0;">
|
||||
<table id="grid1"></table>
|
||||
<textarea style="display:none;" id="gridDetailList">${gridDetailList}<c:if test="${empty gridDetailList}">[]</c:if></textarea>
|
||||
</div>
|
||||
|
||||
<!-- 합계 테이블 -->
|
||||
<table class="total-table" style="width:100%; margin:10px 0 0 0;">
|
||||
<tr>
|
||||
<td class="label">공 급 가 액</td>
|
||||
<td class="currency" style="border-right:none;">₩</td>
|
||||
<td class="amount" style="border-left:none;"><input type="text" name="TOTAL_SUPPLY_PRICE" id="TOTAL_SUPPLY_PRICE" value="" readonly style="border:none; text-align:right; width:100%; font-weight:bold;"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="label">부 가 세</td>
|
||||
<td class="currency" style="border-right:none;">₩</td>
|
||||
<td class="amount" style="border-left:none;"><input type="text" name="TOTAL_VAT" id="TOTAL_VAT" value="" readonly style="border:none; text-align:right; width:100%; font-weight:bold;"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="label graycolor">총 결 제 금 액 (VAT포함)</td>
|
||||
<td class="currency" style="border-right:none;">₩</td>
|
||||
<td class="amount" style="border-left:none;"><input type="text" name="TOTAL_PRICE_ALL" id="TOTAL_PRICE_ALL" value="" readonly style="border:none; text-align:right; width:100%; font-weight:bold; font-size:14px;"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- 버튼 영역 (하단) -->
|
||||
<div style="width:100%; margin:15px 0; text-align:right;">
|
||||
<% if(isModify){ %>
|
||||
<input type="button" value="저장" class="dtn" id="btnSave" style="background:#dfeffc; padding:5px 15px; cursor:pointer; font-size:14px; border-radius: 5px;">
|
||||
<% }else{ %>
|
||||
<input type="button" value="발주서다운" class="" id="btnDown" style="background:#dfeffc; padding:5px 15px; cursor:pointer; font-size:14px; border-radius: 5px;">
|
||||
<% } %>
|
||||
<input type="button" value="닫기" class="" style="background:#dfeffc; padding:5px 15px; cursor:pointer; font-size:14px; border-radius: 5px;" onclick="window.close();">
|
||||
</div>
|
||||
|
||||
<textarea style="display:none;" id="unit_cd">${code_map.unit_cd}</textarea>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,578 @@
|
||||
<%@ 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>
|
||||
@@ -17,6 +17,14 @@ String menuName = CommonUtils.getMenuName(menuObjId, "기본메뉴명");
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title><%=Constants.SYSTEM_NAME%></title>
|
||||
<style>
|
||||
body, html {
|
||||
overflow-x: hidden;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<link rel="stylesheet" href="/css/selectMulti.css">
|
||||
@@ -290,6 +298,7 @@ var columns = [
|
||||
{title:'ROUTE_OBJID',field:'ROUTE_OBJID', visible:false, frozen:true},
|
||||
{title:'MULTI_MASTER_OBJID',field:'MULTI_MASTER_OBJID', visible:false, frozen:true},
|
||||
{title:'SALES_REQUEST_OBJID',field:'SALES_REQUEST_OBJID', visible:false, frozen:true},
|
||||
{title:'FORM_TYPE',field:'FORM_TYPE', visible:false, frozen:true},
|
||||
|
||||
{headerHozAlign:'center', hozAlign:'center', width:120, title:'품의서 No', field:'PROPOSAL_NO', frozen:true,
|
||||
formatter:fn_createGridAnchorTag,
|
||||
@@ -307,12 +316,13 @@ var columns = [
|
||||
var MULTI_MASTER_YN = cell.getData().MULTI_MASTER_YN;
|
||||
var MULTI_MASTER_OBJID = cell.getData().MULTI_MASTER_OBJID;
|
||||
var targetStatus = fnc_checkNull(cell.getData().APPR_STATUS).toUpperCase();
|
||||
var formType = fnc_checkNull(cell.getData().FORM_TYPE, 'general');
|
||||
|
||||
var objId = fnc_checkNull(cell.getData().OBJID);
|
||||
if(MULTI_YN == 'Y' && MULTI_MASTER_YN == 'N' && targetStatus != 'COMPLETE'){
|
||||
objId = MULTI_MASTER_OBJID;
|
||||
}else{
|
||||
fn_formPopUp(objId);
|
||||
fn_formPopUp(objId, null, formType);
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -472,13 +482,35 @@ function fn_searchOld(){
|
||||
}
|
||||
|
||||
//등록,수정,뷰
|
||||
function fn_formPopUp(objId, copy){
|
||||
function fn_formPopUp(objId, copy, formType){
|
||||
var popup_width = 1460;
|
||||
var popup_height = 1050;
|
||||
|
||||
var popup_height = 1050;
|
||||
|
||||
// 양식 타입에 따라 다른 팝업 열기
|
||||
formType = fnc_checkNull(formType, 'general');
|
||||
|
||||
var hiddenForm = document.hiddenForm;
|
||||
var target = "purchaseOrderFormPopup_new";
|
||||
var url = "/purchaseOrder/purchaseOrderFormPopup_new.do";
|
||||
var target = "";
|
||||
var url = "";
|
||||
|
||||
if(formType == 'outsourcing'){
|
||||
// 외주가공 발주서 양식
|
||||
target = "purchaseOrderFormPopup_outsourcing";
|
||||
url = "/purchaseOrder/purchaseOrderFormPopup_outsourcing.do";
|
||||
popup_width = 1200;
|
||||
popup_height = 900;
|
||||
} else if(formType == 'general'){
|
||||
// 일반 발주서 양식
|
||||
target = "purchaseOrderFormPopup_general";
|
||||
url = "/purchaseOrder/purchaseOrderFormPopup_general.do";
|
||||
popup_width = 1000;
|
||||
popup_height = 900;
|
||||
} else {
|
||||
// 기존 발주서 양식 (FORM_TYPE이 없거나 기존 데이터)
|
||||
target = "purchaseOrderFormPopup_new";
|
||||
url = "/purchaseOrder/purchaseOrderFormPopup_new.do";
|
||||
}
|
||||
|
||||
fn_centerPopup(popup_width, popup_height, "", target);
|
||||
|
||||
hiddenForm.PURCHASE_ORDER_MASTER_OBJID.value = objId;
|
||||
|
||||
@@ -111,7 +111,7 @@ $(document).ready(function(){
|
||||
}
|
||||
});
|
||||
|
||||
// 발주서생성
|
||||
// 발주서생성 - 양식 선택 팝업
|
||||
$("#btnCreatePO").click(function(){
|
||||
var selectedRowIds = _tabulGrid.getSelectedData();
|
||||
if(selectedRowIds.length < 1){
|
||||
@@ -125,48 +125,74 @@ $(document).ready(function(){
|
||||
return false;
|
||||
}
|
||||
|
||||
// 발주서 양식 선택 팝업
|
||||
Swal.fire({
|
||||
title: '발주서를 작성 하시겠습니까?',
|
||||
text: '',
|
||||
icon: 'warning',
|
||||
|
||||
showCancelButton: true, // cancel버튼 보이기. 기본은 원래 없음
|
||||
confirmButtonColor: '#3085d6', // confrim 버튼 색깔 지정
|
||||
cancelButtonColor: '#d33', // cancel 버튼 색깔 지정
|
||||
confirmButtonText: '확인', // confirm 버튼 텍스트 지정
|
||||
cancelButtonText: '취소', // cancel 버튼 텍스트 지정
|
||||
reverseButtons: false, // 버튼 순서 거꾸로
|
||||
|
||||
}).then(result => {
|
||||
// 만약 Promise리턴을 받으면,
|
||||
if (result.isConfirmed) { // 만약 모달창에서 confirm 버튼을 눌렀다면
|
||||
console.log("=== 발주서 생성 API 호출 ===");
|
||||
console.log("selectedRowIds:", selectedRowIds);
|
||||
$.ajax({
|
||||
url:"/purchaseOrder/purchaseOrder_salesRequest_Save.do"
|
||||
,type:"POST"
|
||||
,data: $("#form1").serialize() + "&jqGrid="+ encodeURIComponent(JSON.stringify(selectedRowIds))
|
||||
,dataType:"text"
|
||||
,success:function(data){
|
||||
console.log("발주서 생성 응답:", data);
|
||||
if(data =="SUCCESS"){
|
||||
alert("저장되었습니다.");
|
||||
} else {
|
||||
alert("발주서 생성 결과: " + data);
|
||||
}
|
||||
/* if(typeof opener.fn_search =="function"){ opener.fn_search() }; */
|
||||
fn_search();
|
||||
//self.close();
|
||||
}
|
||||
,error: function(jqxhr, status, error){
|
||||
console.log("발주서 생성 에러:", status, error);
|
||||
alert("발주서 생성 중 오류가 발생했습니다: " + error);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
title: '발주서 양식을 선택하세요',
|
||||
html: '<div style="margin: 20px 0;">' +
|
||||
'<button onclick="window.openGeneralPO()" class="swal2-confirm swal2-styled" style="margin: 0 10px; background-color: #3085d6; min-width: 140px;">일반 발주서</button>' +
|
||||
'<button onclick="window.openOutsourcingPO()" class="swal2-confirm swal2-styled" style="margin: 0 10px; background-color: #28a745; min-width: 140px;">외주가공 발주서</button>' +
|
||||
'</div>',
|
||||
showConfirmButton: false,
|
||||
showCancelButton: true,
|
||||
cancelButtonText: '취소',
|
||||
cancelButtonColor: '#d33'
|
||||
});
|
||||
|
||||
// 일반 발주서 양식으로 발주서 자동 생성
|
||||
window.openGeneralPO = function() {
|
||||
Swal.close();
|
||||
fn_createPurchaseOrder(selectedRowIds, "general");
|
||||
};
|
||||
|
||||
// 외주가공 발주서 양식으로 발주서 자동 생성
|
||||
window.openOutsourcingPO = function() {
|
||||
Swal.close();
|
||||
fn_createPurchaseOrder(selectedRowIds, "outsourcing");
|
||||
};
|
||||
});
|
||||
|
||||
// 발주서 자동 생성 (기존 로직 + 양식 타입 추가)
|
||||
function fn_createPurchaseOrder(selectedRowIds, formType) {
|
||||
Swal.fire({
|
||||
title: '발주서 생성',
|
||||
text: '선택한 품의서로 ' + (formType == 'general' ? '일반' : '외주가공') + ' 발주서를 생성하시겠습니까?',
|
||||
icon: 'question',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: '생성',
|
||||
cancelButtonText: '취소'
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
// 선택된 품의서 목록을 JSON으로 변환
|
||||
var jqGridData = JSON.stringify(selectedRowIds);
|
||||
|
||||
$.ajax({
|
||||
url: "/purchaseOrder/purchaseOrder_salesRequest_Save.do",
|
||||
type: "POST",
|
||||
data: {
|
||||
jqGrid: jqGridData,
|
||||
FORM_TYPE: formType // 양식 타입 추가
|
||||
},
|
||||
success: function(result) {
|
||||
if(result == "SUCCESS") {
|
||||
Swal.fire({
|
||||
title: '완료',
|
||||
text: '발주서가 생성되었습니다.',
|
||||
icon: 'success'
|
||||
}).then(() => {
|
||||
fn_search(); // 목록 새로고침
|
||||
});
|
||||
} else {
|
||||
Swal.fire('오류', '발주서 생성 중 오류가 발생했습니다.', 'error');
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
Swal.fire('오류', '서버 통신 중 오류가 발생했습니다.', 'error');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fn_search();
|
||||
_fnc_datepick();
|
||||
});
|
||||
|
||||
@@ -414,11 +414,15 @@ public class PurchaseOrderController {
|
||||
String type = CommonUtils.checkNull(paramMap.get("TYPE"));
|
||||
//System.out.println("type::"+type);
|
||||
|
||||
if("0001069".equals(type) || "0001787".equals(type)){ //일반부품 //구매품표준
|
||||
purchaseOrderService.saveDeliveryInfo(request, paramMap);
|
||||
}else{
|
||||
purchaseOrderService.saveDeliveryETCInfo(request, paramMap);
|
||||
}
|
||||
// if("0001069".equals(type) || "0001787".equals(type)){ //일반부품 //구매품표준
|
||||
// purchaseOrderService.saveDeliveryInfo(request, paramMap);
|
||||
// }else{
|
||||
// purchaseOrderService.saveDeliveryETCInfo(request, paramMap);
|
||||
// }
|
||||
|
||||
// 무조건 saveDeliveryInfo로 처리 (자재 생성 포함)
|
||||
purchaseOrderService.saveDeliveryInfo(request, paramMap);
|
||||
|
||||
resultMap.put("message", "저장되었습니다.");
|
||||
}catch(Exception e){
|
||||
resultMap.put("message", "오류가 발생하였습니다.");
|
||||
@@ -670,6 +674,349 @@ public class PurchaseOrderController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 일반 발주서 양식 팝업
|
||||
*/
|
||||
@RequestMapping("/purchaseOrder/purchaseOrderFormPopup_general.do")
|
||||
public String purchaseOrderFormPopup_general(HttpSession session, HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
Map code_map = new HashMap();
|
||||
Map info = new HashMap();
|
||||
List detailList = new ArrayList();
|
||||
HashMap oemInfo = new HashMap();
|
||||
|
||||
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
|
||||
String objId = CommonUtils.checkNull(paramMap.get("PURCHASE_ORDER_MASTER_OBJID"), "");
|
||||
String proposalObjId = CommonUtils.checkNull(paramMap.get("PROPOSAL_OBJID"), "");
|
||||
String writer = CommonUtils.checkNull(person.getUserId());
|
||||
String writerName = person.getUserName();
|
||||
|
||||
try{
|
||||
oemInfo = (HashMap)adminService.getSupMngInfo("-1130201617"); // RPS
|
||||
|
||||
if(objId.equals("")){
|
||||
request.setAttribute("actType", "C"); // 등록 Create
|
||||
objId = CommonUtils.createObjId();
|
||||
info.put("actType", "C");
|
||||
info.put("OBJID", objId);
|
||||
info.put("PROPOSAL_OBJID", proposalObjId);
|
||||
info.put("SALES_MNG_USER_ID", writer);
|
||||
// 발주번호 자동생성
|
||||
info.put("PURCHASE_ORDER_NO", "RPS25-" + new java.text.SimpleDateFormat("MMdd").format(new java.util.Date()) + "-01");
|
||||
// 발주일자 기본값 오늘
|
||||
info.put("ORDER_DATE", new java.text.SimpleDateFormat("yyyy년 MM월 dd일").format(new java.util.Date()));
|
||||
// 담당자 정보 기본값
|
||||
info.put("MANAGER_NAME", "안동윤");
|
||||
info.put("MANAGER_POSITION", "팀장");
|
||||
info.put("MANAGER_PHONE", "010-2313-2702");
|
||||
info.put("MANAGER_EMAIL", "ady1225@rps-korea.com");
|
||||
info.put("MANAGER_NAME2", "서동민");
|
||||
info.put("MANAGER_POSITION2", "주임");
|
||||
info.put("MANAGER_PHONE2", "010-9538-9513");
|
||||
info.put("MANAGER_EMAIL2", "sdm0927@rps-korea.com");
|
||||
|
||||
// 품의서(PROPOSAL) 품목 데이터 조회하여 그리드에 자동 세팅
|
||||
if(!"".equals(proposalObjId)){
|
||||
Map proposalParam = new HashMap();
|
||||
proposalParam.put("PROPOSAL_OBJID", proposalObjId);
|
||||
List proposalPartList = commonService.selectList("salesMng.getProposalPartList", request, proposalParam);
|
||||
if(proposalPartList != null && proposalPartList.size() > 0){
|
||||
// 품의서 품목을 발주서 그리드 형식으로 변환
|
||||
for(int i = 0; i < proposalPartList.size(); i++){
|
||||
Map partRow = (Map)proposalPartList.get(i);
|
||||
Map detailRow = new HashMap();
|
||||
detailRow.put("OBJID", "");
|
||||
|
||||
// 대소문자 모두 체크
|
||||
String partObjId = CommonUtils.checkNull(partRow.get("PART_OBJID"));
|
||||
if("".equals(partObjId)) partObjId = CommonUtils.checkNull(partRow.get("part_objid"));
|
||||
detailRow.put("PART_OBJID", partObjId);
|
||||
|
||||
detailRow.put("ROW_NUM", i + 1);
|
||||
|
||||
String partName = CommonUtils.checkNull(partRow.get("PART_NAME"));
|
||||
if("".equals(partName)) partName = CommonUtils.checkNull(partRow.get("part_name"));
|
||||
detailRow.put("PART_NAME", partName);
|
||||
|
||||
String spec = CommonUtils.checkNull(partRow.get("SPEC"));
|
||||
if("".equals(spec)) spec = CommonUtils.checkNull(partRow.get("spec"));
|
||||
detailRow.put("SPEC", spec);
|
||||
|
||||
// 수량 (대소문자 모두 체크)
|
||||
Object qtyObj = partRow.get("QTY");
|
||||
if(qtyObj == null) qtyObj = partRow.get("qty");
|
||||
String qtyStr = CommonUtils.checkNull(qtyObj, "0").toString().replaceAll(",", "");
|
||||
int qty = 0;
|
||||
try { qty = (int)Double.parseDouble(qtyStr.equals("") ? "0" : qtyStr); } catch(Exception e) { qty = 0; }
|
||||
detailRow.put("ORDER_QTY", qty);
|
||||
|
||||
// 단위 (대소문자 모두 체크)
|
||||
String unit = CommonUtils.checkNull(partRow.get("UNIT"));
|
||||
if("".equals(unit)) unit = CommonUtils.checkNull(partRow.get("unit"));
|
||||
detailRow.put("UNIT", "".equals(unit) ? "0001400" : unit);
|
||||
|
||||
// 배송지
|
||||
detailRow.put("DELIVERY_PLACE", "RPS");
|
||||
|
||||
// 단가 (대소문자 모두 체크)
|
||||
Object priceObj = partRow.get("UNIT_PRICE");
|
||||
if(priceObj == null) priceObj = partRow.get("unit_price");
|
||||
String priceStr = CommonUtils.checkNull(priceObj, "0").toString().replaceAll(",", "");
|
||||
int unitPrice = 0;
|
||||
try { unitPrice = (int)Double.parseDouble(priceStr.equals("") ? "0" : priceStr); } catch(Exception e) { unitPrice = 0; }
|
||||
detailRow.put("PARTNER_PRICE", unitPrice);
|
||||
|
||||
// 공급가액 = 수량 * 단가
|
||||
detailRow.put("SUPPLY_UNIT_PRICE", qty * unitPrice);
|
||||
|
||||
// 비고 (대소문자 모두 체크)
|
||||
String remark = CommonUtils.checkNull(partRow.get("REMARK"));
|
||||
if("".equals(remark)) remark = CommonUtils.checkNull(partRow.get("remark"));
|
||||
detailRow.put("REMARK", remark);
|
||||
|
||||
detailList.add(detailRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
info = purchaseOrderService.getPurchaseOrderMasterInfo(request, paramMap);
|
||||
paramMap.put("MULTI_MASTER_OBJID", objId);
|
||||
detailList = commonService.selectList("purchaseOrder.getPURCHASE_ORDER_PART", request, paramMap);
|
||||
}
|
||||
|
||||
// 공급업체
|
||||
code_map.put("partner_cd", commonService.bizMakeOptionList("", (String)info.get("PARTNER_OBJID"),"common.getClientMngSupplySelect"));
|
||||
|
||||
// 단위
|
||||
Map param = new HashMap();
|
||||
param.put("code","0001399");
|
||||
code_map.put("unit_cd", commonService.getJqGridSelectBoxJsonData2("common.getCodeselect", param, "선택", "CODE", "NAME"));
|
||||
|
||||
// 결제조건
|
||||
code_map.put("payment_terms_cd", commonService.bizMakeOptionList("0001074", (String)info.get("PAYMENT_TERMS"),"common.getCodeselect"));
|
||||
|
||||
// 납품장소
|
||||
code_map.put("delivery_place_cd", commonService.bizMakeOptionList("0001146", (String)info.get("DELIVERY_PLACE"),"common.getCodeselect"));
|
||||
|
||||
request.setAttribute("oemInfo", oemInfo);
|
||||
request.setAttribute("info", info);
|
||||
request.setAttribute("gridDetailList", JsonUtil.ListToJson(detailList));
|
||||
request.setAttribute("code_map", code_map);
|
||||
request.setAttribute("objId", objId);
|
||||
request.setAttribute("writer", writer);
|
||||
request.setAttribute("writerName", writerName);
|
||||
|
||||
// 담당자 목록 (사원 목록)
|
||||
Map userParam = new HashMap();
|
||||
List userList = commonService.selectList("common.getUserList", request, userParam);
|
||||
request.setAttribute("userList", userList);
|
||||
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if(CommonUtils.checkNull(paramMap.get("actType")).equals("DOWN")){
|
||||
request.setAttribute("detailList", detailList);
|
||||
Map apprParam = new HashMap();
|
||||
apprParam.put("objId", objId);
|
||||
request.setAttribute("apprList", commonService.getApprovalLine(apprParam));
|
||||
return "/purchaseOrder/purchaseOrderFormPopup_generalDOWN";
|
||||
}else{
|
||||
return "/purchaseOrder/purchaseOrderFormPopup_general";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 일반 발주서 저장
|
||||
*/
|
||||
@RequestMapping("/purchaseOrder/purchaseOrderFormPopup_generalSave.do")
|
||||
@ResponseBody
|
||||
public Map purchaseOrderFormPopup_generalSave(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
try{
|
||||
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
|
||||
paramMap.put("WRITER", CommonUtils.checkNull(person.getUserId()));
|
||||
paramMap.put("FORM_TYPE", "general");
|
||||
|
||||
purchaseOrderService.savePurchaseOrder_new(request, paramMap);
|
||||
CommonUtils.setReqResult(request, "", "S", null, resultMap);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
CommonUtils.setReqResult(request, "", "F", e, resultMap);
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 외주가공 발주서 양식 팝업
|
||||
*/
|
||||
@RequestMapping("/purchaseOrder/purchaseOrderFormPopup_outsourcing.do")
|
||||
public String purchaseOrderFormPopup_outsourcing(HttpSession session, HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
Map code_map = new HashMap();
|
||||
Map info = new HashMap();
|
||||
List detailList = new ArrayList();
|
||||
HashMap oemInfo = new HashMap();
|
||||
|
||||
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
|
||||
String objId = CommonUtils.checkNull(paramMap.get("PURCHASE_ORDER_MASTER_OBJID"), "");
|
||||
String proposalObjId = CommonUtils.checkNull(paramMap.get("PROPOSAL_OBJID"), "");
|
||||
String writer = CommonUtils.checkNull(person.getUserId());
|
||||
String writerName = person.getUserName();
|
||||
|
||||
try{
|
||||
oemInfo = (HashMap)adminService.getSupMngInfo("-1130201617"); // RPS
|
||||
|
||||
if(objId.equals("")){
|
||||
request.setAttribute("actType", "C"); // 등록 Create
|
||||
objId = CommonUtils.createObjId();
|
||||
info.put("actType", "C");
|
||||
info.put("OBJID", objId);
|
||||
info.put("PROPOSAL_OBJID", proposalObjId);
|
||||
info.put("SALES_MNG_USER_ID", writer);
|
||||
// 발주번호 자동생성
|
||||
info.put("PURCHASE_ORDER_NO", "RPS25-" + new java.text.SimpleDateFormat("MMdd").format(new java.util.Date()) + "-01");
|
||||
// 발주일자 기본값 오늘
|
||||
info.put("ORDER_DATE", new java.text.SimpleDateFormat("yyyy년 MM월 dd일").format(new java.util.Date()));
|
||||
// 담당자 정보 기본값
|
||||
info.put("MANAGER_NAME", "안동윤");
|
||||
info.put("MANAGER_POSITION", "팀장");
|
||||
info.put("MANAGER_PHONE", "010-2313-2702");
|
||||
info.put("MANAGER_EMAIL", "ady1225@rps-korea.com");
|
||||
info.put("MANAGER_NAME2", "서동민");
|
||||
info.put("MANAGER_POSITION2", "주임");
|
||||
info.put("MANAGER_PHONE2", "010-9538-9513");
|
||||
info.put("MANAGER_EMAIL2", "sdm0927@rps-korea.com");
|
||||
|
||||
// 품의서(PROPOSAL) 품목 데이터 조회하여 그리드에 자동 세팅
|
||||
if(!"".equals(proposalObjId)){
|
||||
Map proposalParam = new HashMap();
|
||||
proposalParam.put("PROPOSAL_OBJID", proposalObjId);
|
||||
List proposalPartList = commonService.selectList("salesMng.getProposalPartList", request, proposalParam);
|
||||
if(proposalPartList != null && proposalPartList.size() > 0){
|
||||
// 품의서 품목을 외주가공 발주서 그리드 형식으로 변환
|
||||
for(int i = 0; i < proposalPartList.size(); i++){
|
||||
Map partRow = (Map)proposalPartList.get(i);
|
||||
Map detailRow = new HashMap();
|
||||
detailRow.put("OBJID", "");
|
||||
|
||||
// 대소문자 모두 체크
|
||||
String partObjId = CommonUtils.checkNull(partRow.get("PART_OBJID"));
|
||||
if("".equals(partObjId)) partObjId = CommonUtils.checkNull(partRow.get("part_objid"));
|
||||
detailRow.put("PART_OBJID", partObjId);
|
||||
|
||||
detailRow.put("ROW_NUM", i + 1);
|
||||
|
||||
String vendorName = CommonUtils.checkNull(partRow.get("VENDOR_NAME"));
|
||||
if("".equals(vendorName)) vendorName = CommonUtils.checkNull(partRow.get("vendor_name"));
|
||||
detailRow.put("VENDOR_NAME", vendorName);
|
||||
|
||||
String partName = CommonUtils.checkNull(partRow.get("PART_NAME"));
|
||||
if("".equals(partName)) partName = CommonUtils.checkNull(partRow.get("part_name"));
|
||||
detailRow.put("PART_NAME", partName);
|
||||
|
||||
String spec = CommonUtils.checkNull(partRow.get("SPEC"));
|
||||
if("".equals(spec)) spec = CommonUtils.checkNull(partRow.get("spec"));
|
||||
detailRow.put("SPEC", spec);
|
||||
|
||||
// 수량 (대소문자 모두 체크)
|
||||
Object qtyObj = partRow.get("QTY");
|
||||
if(qtyObj == null) qtyObj = partRow.get("qty");
|
||||
String qtyStr = CommonUtils.checkNull(qtyObj, "0").toString().replaceAll(",", "");
|
||||
int qty = 0;
|
||||
try { qty = (int)Double.parseDouble(qtyStr.equals("") ? "0" : qtyStr); } catch(Exception e) { qty = 0; }
|
||||
detailRow.put("ORDER_QTY", qty);
|
||||
|
||||
// 단위 (대소문자 모두 체크)
|
||||
String unit = CommonUtils.checkNull(partRow.get("UNIT"));
|
||||
if("".equals(unit)) unit = CommonUtils.checkNull(partRow.get("unit"));
|
||||
detailRow.put("UNIT", "".equals(unit) ? "0001400" : unit);
|
||||
|
||||
// 단가 (대소문자 모두 체크)
|
||||
Object priceObj = partRow.get("UNIT_PRICE");
|
||||
if(priceObj == null) priceObj = partRow.get("unit_price");
|
||||
String priceStr = CommonUtils.checkNull(priceObj, "0").toString().replaceAll(",", "");
|
||||
int unitPrice = 0;
|
||||
try { unitPrice = (int)Double.parseDouble(priceStr.equals("") ? "0" : priceStr); } catch(Exception e) { unitPrice = 0; }
|
||||
detailRow.put("PARTNER_PRICE", unitPrice);
|
||||
|
||||
// 합계 = 수량 * 단가
|
||||
detailRow.put("SUPPLY_UNIT_PRICE", qty * unitPrice);
|
||||
|
||||
detailRow.put("WORK_ORDER_NO", "");
|
||||
|
||||
String partNo = CommonUtils.checkNull(partRow.get("PART_NO"));
|
||||
if("".equals(partNo)) partNo = CommonUtils.checkNull(partRow.get("part_no"));
|
||||
detailRow.put("PART_NO", partNo);
|
||||
|
||||
String deliveryDate = CommonUtils.checkNull(partRow.get("DELIVERY_REQUEST_DATE"));
|
||||
if("".equals(deliveryDate)) deliveryDate = CommonUtils.checkNull(partRow.get("delivery_request_date"));
|
||||
detailRow.put("DELIVERY_REQUEST_DATE", deliveryDate);
|
||||
|
||||
String remark = CommonUtils.checkNull(partRow.get("REMARK"));
|
||||
if("".equals(remark)) remark = CommonUtils.checkNull(partRow.get("remark"));
|
||||
detailRow.put("REMARK", remark);
|
||||
|
||||
detailList.add(detailRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
info = purchaseOrderService.getPurchaseOrderMasterInfo(request, paramMap);
|
||||
paramMap.put("MULTI_MASTER_OBJID", objId);
|
||||
detailList = commonService.selectList("purchaseOrder.getPURCHASE_ORDER_PART", request, paramMap);
|
||||
}
|
||||
|
||||
// 공급업체
|
||||
code_map.put("partner_cd", commonService.bizMakeOptionList("", (String)info.get("PARTNER_OBJID"),"common.getClientMngSupplySelect"));
|
||||
|
||||
// 단위
|
||||
Map param = new HashMap();
|
||||
param.put("code","0001399");
|
||||
code_map.put("unit_cd", commonService.getJqGridSelectBoxJsonData2("common.getCodeselect", param, "선택", "CODE", "NAME"));
|
||||
|
||||
request.setAttribute("oemInfo", oemInfo);
|
||||
request.setAttribute("info", info);
|
||||
request.setAttribute("gridDetailList", JsonUtil.ListToJson(detailList));
|
||||
request.setAttribute("code_map", code_map);
|
||||
request.setAttribute("objId", objId);
|
||||
request.setAttribute("writer", writer);
|
||||
request.setAttribute("writerName", writerName);
|
||||
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if(CommonUtils.checkNull(paramMap.get("actType")).equals("DOWN")){
|
||||
request.setAttribute("detailList", detailList);
|
||||
Map apprParam = new HashMap();
|
||||
apprParam.put("objId", objId);
|
||||
request.setAttribute("apprList", commonService.getApprovalLine(apprParam));
|
||||
return "/purchaseOrder/purchaseOrderFormPopup_outsourcingDOWN";
|
||||
}else{
|
||||
return "/purchaseOrder/purchaseOrderFormPopup_outsourcing";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 외주가공 발주서 저장
|
||||
*/
|
||||
@RequestMapping("/purchaseOrder/purchaseOrderFormPopup_outsourcingSave.do")
|
||||
@ResponseBody
|
||||
public Map purchaseOrderFormPopup_outsourcingSave(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
try{
|
||||
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
|
||||
paramMap.put("WRITER", CommonUtils.checkNull(person.getUserId()));
|
||||
paramMap.put("FORM_TYPE", "outsourcing");
|
||||
|
||||
purchaseOrderService.savePurchaseOrder_new(request, paramMap);
|
||||
CommonUtils.setReqResult(request, "", "S", null, resultMap);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
CommonUtils.setReqResult(request, "", "F", e, resultMap);
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 자재관리 - 발주관리 -발주서 저장
|
||||
*/
|
||||
|
||||
@@ -544,11 +544,13 @@
|
||||
EFFECTIVE_DATE,
|
||||
PAYMENT_TERMS,
|
||||
REMARK,
|
||||
REQUEST_CONTENT,
|
||||
WRITER,
|
||||
REGDATE,
|
||||
STATUS,
|
||||
SALES_REQUEST_OBJID,
|
||||
SALES_MNG_USER_ID
|
||||
SALES_MNG_USER_ID,
|
||||
SALES_MNG_USER_ID2
|
||||
,TITLE
|
||||
,PURCHASE_DATE
|
||||
,CONTRACT_MGMT_OBJID
|
||||
@@ -562,6 +564,7 @@
|
||||
,TOTAL_REAL_SUPPLY_PRICE
|
||||
,DISCOUNT_PRICE
|
||||
,TOTAL_PRICE
|
||||
,TOTAL_PRICE_ALL
|
||||
,NEGO_RATE
|
||||
,SUPPLY_BUS_NO
|
||||
,SUPPLY_USER_NAME
|
||||
@@ -597,11 +600,13 @@
|
||||
#{EFFECTIVE_DATE},
|
||||
#{PAYMENT_TERMS},
|
||||
#{REMARK},
|
||||
#{REQUEST_CONTENT},
|
||||
#{WRITER},
|
||||
NOW(),
|
||||
#{STATUS},
|
||||
#{SALES_REQUEST_OBJID},
|
||||
#{SALES_MNG_USER_ID}
|
||||
#{SALES_MNG_USER_ID},
|
||||
#{SALES_MNG_USER_ID2}
|
||||
,#{TITLE}
|
||||
,#{PURCHASE_DATE}
|
||||
,#{CONTRACT_MGMT_OBJID}::NUMERIC
|
||||
@@ -615,6 +620,7 @@
|
||||
,#{TOTAL_REAL_SUPPLY_PRICE}
|
||||
,#{DISCOUNT_PRICE }
|
||||
,#{TOTAL_PRICE }
|
||||
,#{TOTAL_PRICE_ALL }
|
||||
,#{NEGO_RATE }
|
||||
,#{SUPPLY_BUS_NO }
|
||||
,#{SUPPLY_USER_NAME }
|
||||
@@ -650,9 +656,11 @@
|
||||
EFFECTIVE_DATE = #{EFFECTIVE_DATE},
|
||||
PAYMENT_TERMS = #{PAYMENT_TERMS},
|
||||
REMARK = #{REMARK},
|
||||
REQUEST_CONTENT = #{REQUEST_CONTENT},
|
||||
WRITER = #{WRITER},
|
||||
STATUS = #{STATUS},
|
||||
SALES_MNG_USER_ID = #{SALES_MNG_USER_ID}
|
||||
SALES_MNG_USER_ID = #{SALES_MNG_USER_ID},
|
||||
SALES_MNG_USER_ID2 = #{SALES_MNG_USER_ID2}
|
||||
,TITLE = #{TITLE}
|
||||
,PURCHASE_DATE = #{PURCHASE_DATE}
|
||||
,CONTRACT_MGMT_OBJID = #{CONTRACT_MGMT_OBJID}::NUMERIC
|
||||
@@ -669,6 +677,7 @@
|
||||
,TOTAL_REAL_SUPPLY_PRICE = #{TOTAL_REAL_SUPPLY_PRICE}
|
||||
,DISCOUNT_PRICE = #{DISCOUNT_PRICE }
|
||||
,TOTAL_PRICE = #{TOTAL_PRICE }
|
||||
,TOTAL_PRICE_ALL = #{TOTAL_PRICE_ALL }
|
||||
,NEGO_RATE = #{NEGO_RATE }
|
||||
,SUPPLY_BUS_NO = #{SUPPLY_BUS_NO }
|
||||
,SUPPLY_USER_NAME = #{SUPPLY_USER_NAME }
|
||||
@@ -1157,6 +1166,7 @@
|
||||
,STOCK_QTY
|
||||
,REAL_ORDER_QTY
|
||||
,REAL_SUPPLY_PRICE
|
||||
,PART_DELIVERY_PLACE
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@@ -1196,6 +1206,7 @@
|
||||
,REPLACE(#{STOCK_QTY} ::VARCHAR, ',', '')
|
||||
,REPLACE(#{REAL_ORDER_QTY} ::VARCHAR, ',', '')
|
||||
,REPLACE(#{REAL_SUPPLY_PRICE} ::VARCHAR, ',', '')
|
||||
,#{PART_DELIVERY_PLACE}
|
||||
) ON CONFLICT (OBJID) DO
|
||||
UPDATE
|
||||
SET
|
||||
@@ -1223,6 +1234,7 @@
|
||||
,STOCK_QTY = REPLACE(#{STOCK_QTY} ::VARCHAR, ',', '')
|
||||
,REAL_ORDER_QTY = REPLACE(#{REAL_ORDER_QTY} ::VARCHAR, ',', '')
|
||||
,REAL_SUPPLY_PRICE = REPLACE(#{REAL_SUPPLY_PRICE} ::VARCHAR, ',', '')
|
||||
,PART_DELIVERY_PLACE = #{PART_DELIVERY_PLACE}
|
||||
</update>
|
||||
|
||||
<select id="getMyCompanyInfo" parameterType="map" resultType="map">
|
||||
@@ -1377,6 +1389,22 @@
|
||||
,(SELECT PURCHASE_ORDER_NO FROM PURCHASE_ORDER_MASTER SPOM WHERE SPOM.OBJID = POM.PURCHASE_ORDER_NO_ORG) PURCHASE_ORDER_NO_ORG_NO
|
||||
,POM.SALES_STATUS
|
||||
,POM.RECEPTION_STATUS
|
||||
|
||||
-- 담당자1 정보 (일반발주서용)
|
||||
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS MANAGER_NAME
|
||||
,(SELECT POSITION_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS MANAGER_POSITION
|
||||
,(SELECT CELL_PHONE FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS MANAGER_PHONE
|
||||
,(SELECT EMAIL FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS MANAGER_EMAIL
|
||||
|
||||
-- 담당자2 정보 (일반발주서용)
|
||||
,POM.SALES_MNG_USER_ID2
|
||||
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID2) AS MANAGER_NAME2
|
||||
,(SELECT POSITION_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID2) AS MANAGER_POSITION2
|
||||
,(SELECT CELL_PHONE FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID2) AS MANAGER_PHONE2
|
||||
,(SELECT EMAIL FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID2) AS MANAGER_EMAIL2
|
||||
|
||||
-- 요청사항
|
||||
,POM.REQUEST_CONTENT
|
||||
FROM
|
||||
PURCHASE_ORDER_MASTER POM
|
||||
|
||||
@@ -2059,6 +2087,7 @@
|
||||
WHERE OBJID = #{OBJID}
|
||||
</update>
|
||||
|
||||
<!-- 자재(RESOURCE_MNG) 생성 - 중복 시 무시 -->
|
||||
<insert id="insertResourceMasterMng" parameterType="map">
|
||||
INSERT INTO RESOURCE_MNG
|
||||
(
|
||||
@@ -2074,24 +2103,21 @@
|
||||
REGDATE,
|
||||
WRITER
|
||||
)
|
||||
SELECT
|
||||
VALUES
|
||||
(
|
||||
#{OBJID}::NUMERIC,
|
||||
#{PART_OBJID},
|
||||
#{LD_PART_OBJID},
|
||||
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE 1=1 AND PM.OBJID::VARCHAR = #{PART_OBJID}::VARCHAR),
|
||||
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = #{PART_OBJID}::VARCHAR),
|
||||
#{SPEC},
|
||||
(SELECT PM.MATERIAL FROM PART_MNG PM WHERE 1=1 AND PM.OBJID::VARCHAR = #{PART_OBJID}::VARCHAR),
|
||||
(SELECT PM.MATERIAL FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = #{PART_OBJID}::VARCHAR),
|
||||
#{MAKER},
|
||||
#{UNIT},
|
||||
(SELECT PM.WEIGHT FROM PART_MNG PM WHERE 1=1 AND PM.OBJID::VARCHAR = #{PART_OBJID}::VARCHAR),
|
||||
(SELECT PM.WEIGHT FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = #{PART_OBJID}::VARCHAR),
|
||||
NOW(),
|
||||
#{WRITER}
|
||||
WHERE
|
||||
NOT EXISTS(
|
||||
SELECT 1 FROM RESOURCE_MNG WHERE PART_OBJID = #{PART_OBJID}
|
||||
UNION ALL
|
||||
SELECT 1 FROM RESOURCE_MNG WHERE LD_PART_OBJID = #{LD_PART_OBJID}
|
||||
)
|
||||
)
|
||||
ON CONFLICT (PART_OBJID) DO NOTHING
|
||||
</insert>
|
||||
|
||||
<!-- 마지막 재고 정보를 가져온다. -->
|
||||
@@ -3192,6 +3218,7 @@ SELECT POM.OBJID
|
||||
,POM.MAIL_SEND_YN
|
||||
,POM.MAIL_SEND_DATE
|
||||
,POM.STATUS
|
||||
,COALESCE(POM.FORM_TYPE, 'general') AS FORM_TYPE
|
||||
,A.APPR_STATUS
|
||||
,CASE WHEN POM.STATUS = 'cancel' then '취소'
|
||||
ELSE COALESCE(A.APPR_STATUS_NAME,'작성중')
|
||||
@@ -3261,7 +3288,7 @@ SELECT POM.OBJID
|
||||
ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
|
||||
left outer join SALES_REQUEST_MASTER as SRM
|
||||
on POM.SALES_REQUEST_OBJID = SRM.OBJID
|
||||
-- and SRM.DOC_TYPE = 'PROPOSAL' -- DOC_TYPE 컬럼 없음, 주석처리
|
||||
and SRM.DOC_TYPE = 'PROPOSAL'
|
||||
<!-- 230907 outer join으로 변경
|
||||
,PROJECT_MGMT AS CM
|
||||
WHERE POM.CONTRACT_MGMT_OBJID = CM.OBJID
|
||||
|
||||
@@ -1533,8 +1533,10 @@ public class PurchaseOrderService {
|
||||
//ARR_STOCK_QTY[i] = (REAL_ORDER_QTY - ORDER_QTY) < 0 ? 0 : (REAL_ORDER_QTY - ORDER_QTY);
|
||||
ARR_STOCK_QTY[i] = STOCK_QTY;
|
||||
|
||||
String htmlString = (String)insertMap.get("PART_NO");//"<a href='someurl'>Link Text</a>";
|
||||
if(htmlString.indexOf("</a>") > -1) {
|
||||
// 대소문자 모두 체크
|
||||
String htmlString = CommonUtils.checkNull((String)insertMap.get("PART_NO"));
|
||||
if("".equals(htmlString)) htmlString = CommonUtils.checkNull((String)insertMap.get("part_no"));
|
||||
if(!"".equals(htmlString) && htmlString.indexOf("</a>") > -1) {
|
||||
/* java 1.8이상
|
||||
//<a> 태그에서 PART_NO만 추출
|
||||
//class='pointer'>" + rowObject.PART_NO + "</a>
|
||||
@@ -1811,6 +1813,10 @@ public class PurchaseOrderService {
|
||||
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
|
||||
String writer = CommonUtils.checkNull(person.getUserId());
|
||||
|
||||
// 발주서 양식 타입 (general: 일반, outsourcing: 외주가공)
|
||||
String formType = CommonUtils.checkNull(paramMap.get("FORM_TYPE"), "general");
|
||||
System.out.println("formType: " + formType);
|
||||
|
||||
// 선택된 구매요청서/품의서 목록
|
||||
List<Map<String, Object>> gridDataList = JsonUtil.JsonToList(CommonUtils.checkNull(paramMap.get("jqGrid")));
|
||||
System.out.println("gridDataList size: " + gridDataList.size());
|
||||
@@ -1862,11 +1868,15 @@ public class PurchaseOrderService {
|
||||
masterParam.put("PARTNER_OBJID", partnerObjid);
|
||||
masterParam.put("WRITER", writer);
|
||||
masterParam.put("STATUS", "create");
|
||||
masterParam.put("FORM_TYPE", formType); // 발주서 양식 타입 (general/outsourcing)
|
||||
masterParam.put("TYPE", "0001069"); // 일반부품 (기본값)
|
||||
|
||||
// 원본 데이터의 프로젝트 정보 등 복사
|
||||
masterParam.putAll(selectedItem);
|
||||
masterParam.put("OBJID", purchaseOrderMasterObjid); // OBJID는 새로 생성한 것으로
|
||||
masterParam.put("PARTNER_OBJID", partnerObjid); // PARTNER_OBJID 덮어쓰기
|
||||
masterParam.put("FORM_TYPE", formType); // FORM_TYPE 덮어쓰기 방지
|
||||
masterParam.put("TYPE", "0001069"); // TYPE 덮어쓰기 방지 (일반부품)
|
||||
|
||||
sqlSession.update("purchaseOrder.mergePurchaseOrderMasterBySalesRequest", masterParam);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user