ERP-node/WebContent/WEB-INF/view/purchaseOrder/salesBOMPurchaseOrderFormPo...

662 lines
21 KiB
Plaintext

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.pms.common.utils.*"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.*" %>
<%@include file= "/init.jsp" %>
<%
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
String userId = CommonUtils.checkNull(person.getUserId());
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%=Constants.SYSTEM_NAME%></title>
</head>
<script>
$(function() {
$(document).ready(function() {
$("#btnClose").click(function(){
self.close(0);
});
$("#btnReg").click(function(){
fn_save();
});
$("#btnAdd").click(function(){
//파트 추가를 위한 팝업을 호출한다.
fn_openPartPopUp();
});
$("#btnDelete").click(function(){
fn_deleteRow();
});
$("#btnDrawingDownload").click(function(){
fn_getDrawingDownload();
});
$("#PRODUCT_GROUP").change(function(){
$("#PRODUCT").empty();
if("" != this.value){
fnc_getCodeListAppend(this.value,"PRODUCT","${resultMap.PRODUCT}");
}
});
$(document).on("change", ".PARTNER_OBJID", function(){
var targetObjId = $(this).attr("data-OBJID");
var partnerPrice = $("option:selected",this).attr("data-PARTNER_PRICE");
$("#PARTNER_PRICE_"+targetObjId).val(partnerPrice);
});
fn_setPartnerList();
});
});
</script>
<script>
//파트에 해당하는 발주특성의 정보를 가져온다.
function fn_getOrderSpecMngList(partObjId){
var resultList = null;
$.ajax({
url:"/salesMng/getOrderSpecMngList.do",
type:"POST",
data:{"PART_OBJID":partObjId},
dataType:"json",
async:false,
success:function(data){
resultList = data
},
error: function(jqxhr, status, error){
}
});
return resultList;
}
function fn_setPartnerList(){
$(".TARGET_OBJID").each(function(i){
var targetObjId = $(this).val();
var targetPartObjId = $(this).attr("data-PART_OBJID");
var partnerObjId = $(this).attr("data-PARTNER_OBJID");
$("#PARTNER_OBJID_"+targetObjId).empty();
$("#PARTNER_OBJID_"+targetObjId).append("<option value=''>선택</option>");
var partnerList = fn_getOrderSpecMngList(targetPartObjId);
for (var i = 0; i < partnerList.length; i++) {
var codeId = fnc_checkNull(partnerList[i].PARTNER_OBJID);
var codeName = partnerList[i].PARTNER_NAME;
var codePrice = partnerList[i].PARTNER_PRICE;
if("" != codeId){
$("#PARTNER_OBJID_"+targetObjId).append("<option value='"+codeId+"' data-PARTNER_PRICE='"+codePrice+"'>"+codeName+"</option>");
}
}
if("" != partnerObjId){
$("#PARTNER_OBJID_"+targetObjId).val(partnerObjId);
}else{
$("#PARTNER_OBJID_"+targetObjId+" option:eq(1)").prop("selected", true);
$("#PARTNER_OBJID_"+targetObjId).trigger("change");
}
});
}
//금액계산
function fn_setSupplyUnitPriceCalculation(obj){
$("SUPPLY_UNIT_PRICE_"+targetObjId).empty();
var targetObjId = $(obj).attr("data-OBJID");
var supplyUnitPrice = 0;
var orderQty = fnc_checkNull($("#QTY_"+targetObjId).val());
var partnerPrice = fnc_checkNull($("#PARTNER_PRICE_"+targetObjId).val());
if((""!= orderQty && 0 < orderQty) && (""!= partnerPrice && 0 < partnerPrice)){
supplyUnitPrice = (Number(orderQty)*Number(partnerPrice));
}
$("#SUPPLY_UNIT_PRICE_"+targetObjId).val(supplyUnitPrice);
fn_setTotalAmount();
}
//금액계산
function fn_setTotalAmount(){
$("#TOTAL_AMOUNT").empty();
$("#TOTAL_AMOUNT_KR").empty();
var totalAmount = 0;
$("input[name=OBJID]").each(function(i) {
var targetObjId = $(this).val();
console.log(targetObjId);
var supplyUnitPrice = $("#SUPPLY_UNIT_PRICE_"+targetObjId).val();
if("" != supplyUnitPrice && null != supplyUnitPrice && 0 < supplyUnitPrice){
totalAmount = Number(totalAmount)+Number(supplyUnitPrice);
}
});
$("#TOTAL_AMOUNT_KR").append(num2han(totalAmount)+" 원정");
$("#TOTAL_AMOUNT").append(totalAmount);
}
//공급업체 정보목록을 가져온다.
function fn_getSupplyCodeListAppend(selectboxId,selectedVal){
$.ajax({
url:"/common/getSupplyCodeList.do",
type:"POST",
data:{},
dataType:"json",
async:false,
success:function(data){
var resultList = data;
$("#"+selectboxId).empty();
$("#"+selectboxId).append("<option value=''>선택</option>");
if(0 < resultList.length){
for (var i = 0; i < resultList.length; i++) {
var commonCodeId = resultList[i].CODE;
var commonCodeName = resultList[i].CODE_NAME;
$("#"+selectboxId).append("<option value='"+commonCodeId+"'>"+commonCodeName+"</option>");
}
$("#"+selectboxId).val(selectedVal);
}
},
error: function(jqxhr, status, error){
}
});
}
//공급업체 정보목록을 가져온다.
function fn_setSupplyInfoAppend(targetValue){
$("#PARTNER_TEL").empty();
$("#PARTNER_FAX").empty();
if("" != targetValue){
$.ajax({
url:"/common/getSupplyCodeList.do",
type:"POST",
data:{"SUPPLY_OBJID":targetValue},
dataType:"json",
async:false,
success:function(data){
var resultList = data;
if(0 < resultList.length){
for (var i = 0; i < resultList.length; i++) {
var supplyTelNo = resultList[i].SUPPLY_TEL_NO;
var supplyFaxNo = resultList[i].SUPPLY_FAX_NO;
$("#PARTNER_TEL").append(supplyTelNo);
$("#PARTNER_FAX").append(supplyFaxNo);
}
}
},
error: function(jqxhr, status, error){
}
});
}
}
function fn_setSupplyCodeInfo(targetAreaName,partnerObjId){
$.ajax({
url:"/common/getSupplyCodeList.do",
type:"POST",
data:{},
dataType:"json",
async:false,
success:function(data){
var resultList = data;
$("#"+selectboxId).empty();
$("#"+selectboxId).append("<option value=''>선택</option>");
if(0 < resultList.length){
for (var i = 0; i < resultList.length; i++) {
var commonCodeId = resultList[i].CODE_ID;
var commonCodeName = resultList[i].CODE_NAME;
$("#"+selectboxId).append("<option value='"+commonCodeId+"'>"+commonCodeName+"</option>");
}
$("#"+selectboxId).val(selectedVal);
}
},
error: function(jqxhr, status, error){
}
});
}
function fn_getPurchaseOrderTargetPartList(){
var appendText = "";
var requestStatus = $("#STATUS").val();
$("#partListArea").empty();
$.ajax({
url:"/purchaseOrder/getPurchaseOrderTargetPartList.do",
type:"POST",
data:{"PURCHASE_ORDER_MASTER_OBJID":"${resultMap.OBJID}"},
dataType:"json",
async:false,
success:function(data){
var resultData = data;
if(0 < resultData.length){
$.each(resultData, function(i){
var RNUM = fnc_checkNull(resultData[i].RNUM);
var OBJID = fnc_checkNull(resultData[i].OBJID);
var PART_OBJID = fnc_checkNull(resultData[i].PART_OBJID);
var PURCHASE_ORDER_MASTER_OBJID = fnc_checkNull(resultData[i].PURCHASE_ORDER_MASTER_OBJID);
var QTY = fnc_checkNull(resultData[i].ORDER_QTY);
var PARTNER_PRICE = fnc_checkNull(resultData[i].PARTNER_PRICE);
var REMARK = fnc_checkNull(resultData[i].REMARK);
var TARGET_TITLE = fnc_checkNull(resultData[i].TARGET_TITLE);
var UNIT_TITLE = fnc_checkNull(resultData[i].UNIT_TITLE);
var SUPPLY_UNIT_PRICE = 0;
if((""!= QTY && 0 < QTY) && (""!= PARTNER_PRICE && 0 < PARTNER_PRICE)){
SUPPLY_UNIT_PRICE = (QTY*PARTNER_PRICE);
}
appendText += " <tr class='dataTr' id='"+OBJID+"'>";
appendText += " <input type='hidden' name='OBJID' value='"+OBJID+"' class='TARGET_OBJID' data-PART_OBJID='"+PART_OBJID+"' data-PARTNER_OBJID='"+PARTNER_OBJID+"'>";
appendText += " <input type='hidden' name='PART_OBJID_"+OBJID+"' value='"+PART_OBJID+"'>";
appendText += " <td class='align_c'><input type='checkbox' name='OBJID_"+OBJID+"' value='"+OBJID+"' class='chkBox'></td>";
appendText += " <td title='"+RNUM+"' class='align_c'>"+RNUM+"</td>";
appendText += " <td class='align_l'>";
appendText += " <a href='#' onclick=\"fn_openPartPopup('"+PART_OBJID+"');\">"+TARGET_TITLE+"</a>";
appendText += " </td>";
appendText += " <td title='"+UNIT_TITLE+"' class='align_c'>"+UNIT_TITLE+"</td>";
appendText += " <td class='align_l'>";
appendText += " <input type='text' name='PARTNER_PRICE_"+OBJID+"' id='PARTNER_PRICE_"+OBJID+"' value='"+PARTNER_PRICE+"' onkeyUp='fn_setSupplyUnitPriceCalculation(this);' data-OBJID='"+OBJID+"'>";
appendText += " </td>";
appendText += " <td class='align_l'>";
appendText += " <input type='number' name='QTY_"+OBJID+"' id='QTY_"+OBJID+"' value='"+QTY+"' onkeyUp='fn_setSupplyUnitPriceCalculation(this);' data-OBJID='"+OBJID+"'>";
appendText += " </td>";
appendText += " <td class='align_l'>";
appendText += " <input type='text' name='SUPPLY_UNIT_PRICE_"+OBJID+"' id='SUPPLY_UNIT_PRICE_"+OBJID+"' value='"+SUPPLY_UNIT_PRICE+"' readonly>";
appendText += " </td>";
appendText += " <td class='align_l'>";
appendText += " <input type='text' name='REMARK_"+OBJID+"' id='REMARK_"+OBJID+"' value='"+REMARK+"'>";
appendText += " </td>";
appendText += " </tr>";
});
}else{
appendText += "<tr>";
appendText += "<td colspan='9'>조회된 내용이 없습니다.</td>";
appendText +="</tr>";
}
},
error: function(jqxhr, status, error){
}
});
$("#partListArea").append(appendText);
}
/* 파트 추가 시 그리드에 Row 추가 */
function fn_deleteRow(){
$(".chkBox:checked").length;
if(0 < $(".chkBox:checked").length){
if(confirm("선택된 내용을 삭제하시겠습니까?")){
$(".chkBox:checked").each(function(i){
var targetObjId = $(this).val();
$("#"+targetObjId).remove();
});
}
}else{
Swal.fire("선택된 내용이 없습니다.");
return false;
}
fn_setTotalAmount();
}
function fn_openPartPopUp(){
window.open("/partMng/partMngListPopUp.do?callBackFn=fn_addRow&callType=purchaseOrder", "tempPartListPopup", "width=1200, height=750, toolbar=no, status=no, menubar=no, location=no, scrollbars=yes, resizable=yes");
}
/* 파트 추가 시 그리드에 Row 추가 */
function fn_addRow(rowData){
var appendText = "";
if(0 == $(".TARGET_OBJID").length){
$("#partListArea").empty();
}
var RNUM = ($(".TARGET_OBJID").length+1);
var OBJID = fnc_checkNull(fnc_createObjId());
var PART_OBJID = fnc_checkNull(rowData.get("PART_OBJID"));
var QTY = "";
var PARTNER_PRICE = "";
var REMARK = "";
var PART_NAME = fnc_checkNull(rowData.get("PART_NAME"));
var PART_NO = fnc_checkNull(rowData.get("PART_NO"));
var MATERIAL = fnc_checkNull(rowData.get("MATERIAL"));
var SPEC = fnc_checkNull(rowData.get("SPEC"));
var TARGET_TITLE = PART_NAME+"("+MATERIAL+","+SPEC+")/"+PART_NO;
var UNIT_TITLE = fnc_checkNull(rowData.get("UNIT_TITLE"));
var SUPPLY_UNIT_PRICE = "";
appendText += " <tr class='dataTr' id='"+OBJID+"'>";
appendText += " <input type='hidden' name='OBJID' class='TARGET_OBJID' value='"+OBJID+"'>";
appendText += " <input type='hidden' name='PART_OBJID_"+OBJID+"' value='"+PART_OBJID+"'>";
appendText += " <td class='align_c'><input type='checkbox' name='OBJID_"+OBJID+"' value='"+OBJID+"' class='chkBox'></td>";
appendText += " <td title='' class='align_c'></td>";
appendText += " <td class='align_l'>";
appendText += " <a href='#' onclick=\"fn_openPartPopup('"+PART_OBJID+"');\">"+TARGET_TITLE+"</a>";
appendText += " </td>";
appendText += " <td title='"+UNIT_TITLE+"' class='align_c'>"+UNIT_TITLE+"</td>";
appendText += " <td class='align_l'>";
appendText += " <select name='PARTNER_OBJID_"+OBJID+"' id='PARTNER_OBJID_"+OBJID+"' class='PARTNER_OBJID' data-OBJID='"+OBJID+"'></select>";
appendText += " </td>";
appendText += " <td class='align_l'>";
appendText += " <input type='number' name='QTY_"+OBJID+"' id='QTY_"+OBJID+"' value='"+QTY+"' onkeyUp='fn_setSupplyUnitPriceCalculation(this);' data-OBJID='"+OBJID+"'>";
appendText += " </td>";
appendText += " <td class='align_l'>";
appendText += " <input type='text' name='PARTNER_PRICE_"+OBJID+"' id='PARTNER_PRICE_"+OBJID+"' value='"+PARTNER_PRICE+"' onkeyUp='fn_setSupplyUnitPriceCalculation(this);' data-OBJID='"+OBJID+"'>";
appendText += " </td>";
appendText += " <td class='align_l'>";
appendText += " <input type='text' name='REMARK_"+OBJID+"' id='REMARK_"+OBJID+"' value='"+REMARK+"'>";
appendText += " </td>";
appendText += " </tr>";
$("#partListArea").append(appendText);
var targetObjId = OBJID;
var targetPartObjId = PART_OBJID;
var partnerObjId = "";
$("#PARTNER_OBJID_"+targetObjId).empty();
$("#PARTNER_OBJID_"+targetObjId).append("<option value=''>선택</option>");
$.ajax({
url:"/salesMng/getSalesPartnerInfoList.do",
type:"POST",
data:{"PART_OBJID":targetPartObjId},
dataType:"json",
async:false,
success:function(data){
resultList = data
if(resultList != null && 0 < resultList.length){
for (var i = 0; i < resultList.length; i++) {
console.log("resultList[i]:"+resultList[i]);
var codeId = fnc_checkNull(resultList[i].PARTNER_OBJID);
var codeName = resultList[i].PARTNER_NAME;
var codePrice = resultList[i].PARTNER_PRICE;
if("" != codeId){
$("#PARTNER_OBJID_"+targetObjId).append("<option value='"+codeId+"' data-PARTNER_PRICE='"+codePrice+"'>"+codeName+"</option>");
}
}
$("#PARTNER_OBJID_"+targetObjId).val(partnerObjId);
}
},
error: function(jqxhr, status, error){
}
});
}
function fn_save(){
var formData = $("#form1").serialize();
if(confirm("저장하시겠습니까?")){
$.ajax({
type: "POST",
url: "/purchaseOrder/saveSalesBOMPurchaseOrder.do",
data: $("#form1").serialize(),
dataType:"json",
success:function(data){
Swal.fire(data.msg);
if(data.result){
self.close();
}
},
error: function(jqxhr, status, error){
}
});
}
}
function fn_getDrawingDownload(){
var gridData = $("#partListGrid").getRowData();
if(0 < gridData.length){
var targetPartList = [];
for(var i=0;i<gridData.length;i++){
targetPartList.push(gridData[i].PART_OBJID);
}
var form = document.form1;
form.TARGET_DRAWING_DOWNLOAD.value = targetPartList.join();
form.action = "/devMng/getDrawingDownload.do";
form.submit();
}else{
Swal.fire("일괄다운로드 대상 Part가 없습니다.");
return false;
}
}
function fn_openPartPopup(objId){
window.open("/partMng/partMngDetailPopUp.do?OBJID="+objId, "tempPartListPopup", "width=600, height=700, toolbar=no, status=no, menubar=no, location=no, scrollbars=yes, resizable=yes");
}
function num2han(num) {
num = parseInt((num + '').replace(/[^0-9]/g, ''), 10) + '';
// 숫자/문자/돈 을 숫자만 있는 문자열로 변환
if(num == '0')
return '영';
var number = ['영', '일', '이', '삼', '사', '오', '육', '칠', '팔', '구'];
var unit = ['', '만', '억', '조'];
var smallUnit = ['천', '백', '십', ''];
var result = [];
//변환된 값을 저장할 배열
var unitCnt = Math.ceil(num.length / 4);
//단위 갯수. 숫자 10000은 일단위와 만단위 2개이다.
num = num.padStart(unitCnt * 4, '0')
//4자리 값이 되도록 0을 채운다
var regexp = /[\w\W]{4}/g;
//4자리 단위로 숫자 분리
var array = num.match(regexp);
//낮은 자릿수에서 높은 자릿수 순으로 값을 만든다(그래야 자릿수 계산이 편하다)
for(var i = array.length - 1, unitCnt = 0; i >= 0; i--, unitCnt++)
{ var hanValue = _makeHan(array[i]);
//한글로 변환된 숫자
if(hanValue == '')
//값이 없을땐 해당 단위의 값이 모두 0이란 뜻.
continue;
result.unshift(hanValue + unit[unitCnt]);
//unshift는 항상 배열의 앞에 넣는다.
}
//여기로 들어오는 값은 무조건 네자리이다. 1234 -> 일천이백삼십사
function _makeHan(text) {
var str = '';
for (var i = 0; i < text.length; i++) {
var num = text[i];
if (num == '0')
continue;
str += number[num] + smallUnit[i];
}
return str;
}
return result.join('');
}
</script>
<style>
.input_title {border-left:1px solid #ccc;}
.input_sub_title {border-left:1px solid #ccc;}
.pmsPopupForm tr:last-child td{border-bottom:1px solid #ccc;}
</style>
<body>
<form name="form1" id="form1" action="" method="post">
<input type="hidden" name="PURCHASE_ORDER_MASTER_OBJID" id="PURCHASE_ORDER_MASTER_OBJID" value="${resultMap.OBJID}">
<input type="hidden" name="STATUS" id="STATUS" value="${resultMap.STATUS}">
<input type="hidden" name="TARGET_DRAWING_DOWNLOAD" id="TARGET_DRAWING_DOWNLOAD">
<input type="hidden" name="PURCHASE_ORDER_NO" id="PURCHASE_ORDER_NO" value="${resultMap.PURCHASE_ORDER_NO}">
<input type="hidden" name="MY_COMPANY_OBJID" id="MY_COMPANY_OBJID" value="${resultMap.MY_COMPANY_OBJID}">
<section>
<div class="plm_menu_name">
<h2>
<span>발주서 등록</span>
</h2>
</div>
<div id="businessPopupFormWrap" style="z-index:99;">
<div class="plm_btn_wrap">
<input type="button" value="추가" class="plm_btns" id="btnAdd">
<input type="button" value="삭제" class="plm_btns" id="btnDelete">
</div>
<table class="pmsPopupForm" style="margin-top:10px;">
<tr>
<td class="input_title">
<label for="">구매의뢰 부품</label>
</td>
</tr>
<tr>
<td>
<div class="in_table_scroll_wrap _table1" style="height:22px;width:99%;">
<table class="plm_table">
<colgroup>
<col width="25px" />
<col width="40px" /> <!-- No -->
<col width="*" /> <!-- 품명(재질,규격)/품번 -->
<col width="60px" /> <!-- 단위 -->
<col width="100px" /> <!-- 업체 -->
<col width="50px" /> <!-- 수량 -->
<col width="100px" /> <!-- 업체단가 -->
<col width="200px" /> <!-- 비고 -->
</colgroup>
<thead>
<tr class="plm_thead">
<td></td>
<td>No</td>
<td>품명(재질,규격)/품번</td>
<td>단위</td>
<td>업체</td>
<td>수량</td>
<td>단가</td>
<td>비고</td>
</tr>
</thead>
</table>
</div>
<div class="in_table_scroll_wrap _table2" style="height:650px;width:100%;">
<table class="plm_table">
<colgroup>
<col width="25px" />
<col width="40px" /> <!-- No -->
<col width="*" /> <!-- 품명(재질,규격)/품번 -->
<col width="60px" /> <!-- 단위 -->
<col width="100px" /> <!-- 업체 -->
<col width="50px" /> <!-- 수량 -->
<col width="100px" /> <!-- 업체단가 -->
<col width="200px" /> <!-- 비고 -->
</colgroup>
<tbody id="partListArea">
<c:choose>
<c:when test="${empty LIST}">
<tr style="text-align: center;">
<td align="center" colspan="18">조회된 데이터가 없습니다.</td>
</tr>
</c:when>
<c:otherwise>
<c:forEach var="item" items="${LIST}" varStatus="varStatus">
<tr class='dataTr' id="${item.OBJID}">
<input type="hidden" name="OBJID" class='TARGET_OBJID' value="${item.OBJID}" data-PART_OBJID='${item.PART_OBJID}' data-PARTNER_OBJID=''>
<input type="hidden" name="PART_OBJID_${item.OBJID}" value="${item.PART_OBJID}">
<td class='align_c'><input type='checkbox' name='OBJID_${item.OBJID}' value="${item.OBJID}" class='chkBox'></td>
<td class='align_c'></td>
<td class='align_l'>
<a href="#" onclick="fn_openPartPopup('${item.PART_OBJID}');">${item.PART_NAME} (${item.PART_NAME},${item.MATERIAL}) / ${item.PART_NO}</a>
</td>
<td title="${item.UNIT_TITLE}" class='align_c'>${item.UNIT_TITLE}</td>
<td class='align_l'>
<select name='PARTNER_OBJID_${item.OBJID}' id='PARTNER_OBJID_${item.OBJID}' class='PARTNER_OBJID' data-OBJID='${item.OBJID}'></select>
</td>
<td class='align_l'>
<input type='number' name='QTY_${item.OBJID}' id='QTY_${item.OBJID}' value='' onkeyUp='fn_setSupplyUnitPriceCalculation(this);' data-OBJID='${item.OBJID}'>
</td>
<td class='align_l'>
<input type='text' name='PARTNER_PRICE_${item.OBJID}' id='PARTNER_PRICE_${item.OBJID}' value='' onkeyUp='fn_setSupplyUnitPriceCalculation(this);' data-OBJID='${item.OBJID}'>
</td>
<td class='align_l'>
<input type='text' name='REMARK_${item.OBJID}' id='REMARK_${item.OBJID}' value=''>
</td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</td>
</tr>
</table>
</div>
<div class="btn_wrap">
<div class="plm_btn_wrap_center">
<input type="button" value="저장" class="plm_btns" id="btnReg">
<input type="button" value="닫기" id="btnClose" class="plm_btns">
</div>
</div>
</section>
</form>
</body>
</html>