644 lines
28 KiB
Plaintext
644 lines
28 KiB
Plaintext
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
|
<%@ include file="/init.jsp" %>
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<title>판매 등록</title>
|
|
<link rel="stylesheet" href="/css/ions-basic.css">
|
|
<script type="text/javascript" src="/js/ions-common.js" ></script>
|
|
<style>
|
|
/* S/N 입력 필드 placeholder 색상 */
|
|
#serialNo::placeholder {
|
|
color: #999 !important;
|
|
opacity: 1;
|
|
}
|
|
|
|
#serialNo::-webkit-input-placeholder {
|
|
color: #999 !important;
|
|
}
|
|
|
|
#serialNo::-moz-placeholder {
|
|
color: #999 !important;
|
|
opacity: 1;
|
|
}
|
|
|
|
#serialNo:-ms-input-placeholder {
|
|
color: #999 !important;
|
|
}
|
|
</style>
|
|
<script>
|
|
// S/N 관리 전역 변수
|
|
var snList = [];
|
|
var snCounter = 1;
|
|
|
|
$(document).ready(function() {
|
|
// select2 초기화
|
|
$('.select2').select2();
|
|
|
|
// 달력 초기화
|
|
fnc_makeDatepick();
|
|
|
|
// 기존 담당자 값 설정
|
|
var managerValue = "${saleInfo.MANAGER}";
|
|
if(managerValue) {
|
|
$("#manager").val(managerValue).trigger('change');
|
|
}
|
|
|
|
// S/N 필드 클릭 이벤트
|
|
$("#serialNo").click(function() {
|
|
fn_openSnManagePopup();
|
|
});
|
|
|
|
// 초기 S/N 데이터 로드
|
|
fn_loadSnList();
|
|
|
|
// 닫기 버튼
|
|
$("#btnClose").click(function() {
|
|
window.close();
|
|
});
|
|
|
|
// 저장 버튼
|
|
$("#btnSave").click(function() {
|
|
fn_save();
|
|
});
|
|
});
|
|
|
|
// 판매공급가액 계산 함수
|
|
function fn_calculateSupplyPrice() {
|
|
var currency = $("#salesCurrency").val();
|
|
var exchangeRate = parseFloat($("#salesExchangeRate").val()) || 1;
|
|
var quantity = parseFloat($("#salesQuantity").val()) || 0;
|
|
var unitPrice = parseFloat($("#salesUnitPrice").val()) || 0;
|
|
|
|
// 외화 기준 금액 계산
|
|
var foreignSupplyPrice = quantity * unitPrice;
|
|
|
|
// KRW가 아니고 환율이 있으면 환율 적용
|
|
if(currency && currency !== 'KRW' && exchangeRate > 0) {
|
|
var krwSupplyPrice = Math.round(foreignSupplyPrice * exchangeRate);
|
|
$("#salesSupplyPrice").val(krwSupplyPrice);
|
|
} else {
|
|
$("#salesSupplyPrice").val(foreignSupplyPrice);
|
|
}
|
|
|
|
fn_calculateVat();
|
|
}
|
|
|
|
// 부가세 계산 함수
|
|
function fn_calculateVat() {
|
|
var supplyPrice = parseFloat($("#salesSupplyPrice").val()) || 0;
|
|
var vat = Math.round(supplyPrice * 0.1);
|
|
$("#salesVat").val(vat);
|
|
fn_calculateTotalAmount();
|
|
}
|
|
|
|
// 판매총액 계산 함수 (공급가액 + 부가세)
|
|
function fn_calculateTotalAmount() {
|
|
var supplyPrice = parseFloat($("#salesSupplyPrice").val()) || 0;
|
|
var vat = parseFloat($("#salesVat").val()) || 0;
|
|
var totalAmount = supplyPrice + vat;
|
|
$("#salesTotalAmount").val(totalAmount);
|
|
}
|
|
|
|
// 환율 변경 시 원화 금액 재계산
|
|
function fn_recalculateByExchangeRate() {
|
|
var currency = $("#salesCurrency").val();
|
|
var exchangeRate = parseFloat($("#salesExchangeRate").val()) || 1;
|
|
|
|
// KRW가 아닌 경우에만 환율 적용
|
|
if(currency && currency !== 'KRW' && exchangeRate > 0) {
|
|
var quantity = parseFloat($("#salesQuantity").val()) || 0;
|
|
var unitPrice = parseFloat($("#salesUnitPrice").val()) || 0;
|
|
|
|
// 외화 기준 금액 계산
|
|
var foreignSupplyPrice = quantity * unitPrice;
|
|
|
|
// 원화 환산 금액 계산
|
|
var krwSupplyPrice = Math.round(foreignSupplyPrice * exchangeRate);
|
|
var krwVat = Math.round(krwSupplyPrice * 0.1);
|
|
var krwTotalAmount = krwSupplyPrice + krwVat;
|
|
|
|
$("#salesSupplyPrice").val(krwSupplyPrice);
|
|
$("#salesVat").val(krwVat);
|
|
$("#salesTotalAmount").val(krwTotalAmount);
|
|
} else {
|
|
// KRW인 경우 일반 계산
|
|
fn_calculateSupplyPrice();
|
|
}
|
|
}
|
|
|
|
// S/N 목록 로드
|
|
function fn_loadSnList() {
|
|
var serialNoValue = $("#serialNo").val();
|
|
var serialNoListValue = $("#serialNoList").val();
|
|
|
|
console.log("초기 로드 - serialNo:", serialNoValue);
|
|
console.log("초기 로드 - serialNoList:", serialNoListValue);
|
|
|
|
snList = [];
|
|
|
|
if(serialNoListValue && serialNoListValue.trim() != '') {
|
|
// JSON 형태로 저장된 데이터가 있으면 파싱
|
|
try {
|
|
var loadedList = JSON.parse(serialNoListValue);
|
|
snList = loadedList;
|
|
console.log("JSON 파싱 성공:", snList);
|
|
// counter 재설정
|
|
if(snList.length > 0) {
|
|
var maxId = Math.max.apply(Math, snList.map(function(item) { return item.id; }));
|
|
snCounter = maxId + 1;
|
|
}
|
|
} catch(e) {
|
|
console.log("JSON 파싱 실패:", e);
|
|
// JSON 파싱 실패 시 기존 로직 사용
|
|
if(serialNoValue && serialNoValue.trim() != '') {
|
|
fn_parseSerialNoValue(serialNoValue);
|
|
}
|
|
}
|
|
} else if(serialNoValue && serialNoValue.trim() != '') {
|
|
// hidden 필드가 없고 display 필드만 있는 경우
|
|
console.log("display 필드만 있음, 파싱 시작");
|
|
fn_parseSerialNoValue(serialNoValue);
|
|
}
|
|
|
|
// 초기 로드 후 hidden 필드에 JSON 저장
|
|
if(snList.length > 0) {
|
|
$("#serialNoList").val(JSON.stringify(snList));
|
|
console.log("hidden 필드에 저장:", $("#serialNoList").val());
|
|
}
|
|
|
|
fn_updateSnDisplay();
|
|
}
|
|
|
|
// S/N 값 파싱 함수
|
|
function fn_parseSerialNoValue(serialNoValue) {
|
|
// "외 N개" 패턴 제거 및 콤마로 분리
|
|
var cleanValue = serialNoValue;
|
|
|
|
// "외 N개" 패턴 제거 (예: "20251021-007 외 2건" -> "20251021-007")
|
|
cleanValue = cleanValue.replace(/\s*외\s*\d+\s*건?\s*$/g, '').trim();
|
|
|
|
console.log("정제된 값:", cleanValue);
|
|
|
|
if(cleanValue != '') {
|
|
var snArray = cleanValue.split(',');
|
|
for(var i = 0; i < snArray.length; i++) {
|
|
var sn = snArray[i].trim();
|
|
if(sn != '') {
|
|
snList.push({
|
|
id: snCounter++,
|
|
value: sn
|
|
});
|
|
}
|
|
}
|
|
console.log("파싱 완료, snList:", snList);
|
|
}
|
|
}
|
|
|
|
// S/N 화면 표시 업데이트
|
|
function fn_updateSnDisplay() {
|
|
if(snList.length === 0) {
|
|
$("#serialNo").val('');
|
|
} else if(snList.length === 1) {
|
|
$("#serialNo").val(snList[0].value);
|
|
} else {
|
|
$("#serialNo").val(snList[0].value + ' 외 ' + (snList.length - 1) + '개');
|
|
}
|
|
}
|
|
|
|
// S/N 관리 팝업 열기
|
|
function fn_openSnManagePopup() {
|
|
console.log("=== 팝업 열기 시작 ===");
|
|
|
|
// 최신 데이터 다시 로드
|
|
var serialNoValue = $("#serialNo").val();
|
|
var serialNoListValue = $("#serialNoList").val();
|
|
|
|
console.log("팝업 - serialNo:", serialNoValue);
|
|
console.log("팝업 - serialNoList:", serialNoListValue);
|
|
|
|
if(serialNoListValue && serialNoListValue.trim() != '' && serialNoListValue != '[]') {
|
|
// JSON 데이터가 있으면 파싱
|
|
try {
|
|
snList = JSON.parse(serialNoListValue);
|
|
console.log("JSON 파싱 성공, S/N 개수:", snList.length);
|
|
if(snList.length > 0) {
|
|
var maxId = Math.max.apply(Math, snList.map(function(item) { return item.id; }));
|
|
snCounter = maxId + 1;
|
|
}
|
|
} catch(e) {
|
|
console.log("JSON 파싱 실패:", e);
|
|
// JSON 파싱 실패 시 display 필드 파싱
|
|
snList = [];
|
|
if(serialNoValue && serialNoValue.trim() != '') {
|
|
fn_parseSerialNoValue(serialNoValue);
|
|
}
|
|
}
|
|
} else if(serialNoValue && serialNoValue.trim() != '') {
|
|
// hidden 필드가 없으면 display 필드 파싱
|
|
console.log("hidden 필드 없음, display 필드 파싱");
|
|
snList = [];
|
|
fn_parseSerialNoValue(serialNoValue);
|
|
} else {
|
|
console.log("데이터 없음, 빈 배열로 시작");
|
|
snList = [];
|
|
}
|
|
|
|
console.log("최종 snList:", snList);
|
|
console.log("snList.length:", snList.length);
|
|
|
|
// 팝업 HTML 생성
|
|
var popupHtml = '<div style="padding:10px; color:#333;">';
|
|
popupHtml += ' <h3 style="margin:0 0 15px 0; text-align:center; color:#333;">S/N 관리</h3>';
|
|
popupHtml += ' <div id="snListContainer" style="margin-bottom:15px; max-height:300px; overflow-y:auto; color:#333;"></div>';
|
|
popupHtml += ' <div style="margin-bottom:15px; display:flex; gap:5px;">';
|
|
popupHtml += ' <input type="text" id="newSnInput" placeholder="S/N 입력" style="flex:1; padding:8px; border:1px solid #ddd; border-radius:4px; color:#333;">';
|
|
popupHtml += ' <button type="button" onclick="fn_addSn()" class="plm_btns">추가</button>';
|
|
popupHtml += ' </div>';
|
|
popupHtml += ' <div style="text-align:center; margin-top:20px; display:flex; gap:10px; justify-content:center;">';
|
|
popupHtml += ' <button type="button" onclick="fn_openSequentialSnPopup()" class="plm_btns">연속번호생성</button>';
|
|
popupHtml += ' <button type="button" onclick="fn_confirmSnList()" class="plm_btns">확인</button>';
|
|
popupHtml += ' <button type="button" onclick="fn_closeSnPopup()" class="plm_btns">취소</button>';
|
|
popupHtml += ' </div>';
|
|
popupHtml += '</div>';
|
|
|
|
// 팝업 오픈 (Swal 사용)
|
|
Swal.fire({
|
|
html: popupHtml,
|
|
width: '700px',
|
|
showConfirmButton: false,
|
|
showCloseButton: true,
|
|
customClass: {
|
|
popup: 'sn-manage-popup'
|
|
},
|
|
didOpen: function() {
|
|
setTimeout(function() {
|
|
fn_renderSnList();
|
|
// 엔터키로 추가
|
|
$(".swal2-html-container #newSnInput").keypress(function(e) {
|
|
if(e.which == 13) {
|
|
fn_addSn();
|
|
return false;
|
|
}
|
|
});
|
|
}, 50);
|
|
}
|
|
});
|
|
}
|
|
|
|
// S/N 목록 렌더링
|
|
function fn_renderSnList() {
|
|
var container = $(".swal2-html-container #snListContainer");
|
|
|
|
if(snList.length === 0) {
|
|
container.html('<div style="text-align:center; padding:20px; color:#999;">등록된 S/N이 없습니다.</div>');
|
|
return;
|
|
}
|
|
|
|
var html = '<div style="display:flex; flex-direction:column; gap:5px;">';
|
|
for(var i = 0; i < snList.length; i++) {
|
|
html += '<div style="display:flex; align-items:center; padding:8px; background:#f8f9fa; border-radius:4px; color:#333;">';
|
|
html += ' <span style="flex:1; color:#333;">' + snList[i].value + '</span>';
|
|
html += ' <button type="button" onclick="fn_deleteSn(' + snList[i].id + ')" class="plm_btns" style="padding:4px 8px; font-size:12px; background:#dc3545; color:#fff;">삭제</button>';
|
|
html += '</div>';
|
|
}
|
|
html += '</div>';
|
|
|
|
container.html(html);
|
|
}
|
|
|
|
// S/N 추가
|
|
function fn_addSn() {
|
|
var newSn = $(".swal2-html-container #newSnInput").val().trim();
|
|
|
|
if(newSn == '') {
|
|
alert('S/N을 입력해주세요.');
|
|
return;
|
|
}
|
|
|
|
// 중복 체크
|
|
for(var i = 0; i < snList.length; i++) {
|
|
if(snList[i].value == newSn) {
|
|
alert('이미 등록된 S/N입니다.');
|
|
return;
|
|
}
|
|
}
|
|
|
|
// 추가
|
|
snList.push({
|
|
id: snCounter++,
|
|
value: newSn
|
|
});
|
|
|
|
$(".swal2-html-container #newSnInput").val('');
|
|
fn_renderSnList();
|
|
}
|
|
|
|
// S/N 삭제
|
|
function fn_deleteSn(snId) {
|
|
for(var i = 0; i < snList.length; i++) {
|
|
if(snList[i].id == snId) {
|
|
snList.splice(i, 1);
|
|
break;
|
|
}
|
|
}
|
|
fn_renderSnList();
|
|
}
|
|
|
|
// 연속번호 생성 팝업 열기
|
|
function fn_openSequentialSnPopup() {
|
|
Swal.fire({
|
|
title: '연속번호 생성',
|
|
html:
|
|
'<div style="text-align:left; padding:5px; color:#333;">' +
|
|
'<div style="margin-bottom:10px;">' +
|
|
'<label style="display:block; margin-bottom:3px; font-size:13px; color:#333;">시작번호 <span style="color:red;">*</span></label>' +
|
|
'<input type="text" id="seqStartNo" placeholder="예: ITEM-001" style="width:100%; padding:6px; border:1px solid #ddd; border-radius:3px; font-size:13px; color:#333;">' +
|
|
'</div>' +
|
|
'<div style="margin-bottom:10px;">' +
|
|
'<label style="display:block; margin-bottom:3px; font-size:13px; color:#333;">생성개수 <span style="color:red;">*</span></label>' +
|
|
'<input type="number" id="seqCount" placeholder="예: 10" min="1" max="100" style="width:100%; padding:6px; border:1px solid #ddd; border-radius:3px; font-size:13px; color:#333;">' +
|
|
'</div>' +
|
|
'<div style="background:#f8f9fa; padding:8px; border-radius:3px; color:#666; font-size:11px; line-height:1.5;">' +
|
|
'예: ITEM-001, 개수 3 → ITEM-001, ITEM-002, ITEM-003<br>' +
|
|
'※ 최대 100개까지 생성 가능' +
|
|
'</div>' +
|
|
'</div>',
|
|
width: '400px',
|
|
showCancelButton: true,
|
|
confirmButtonText: '생성',
|
|
cancelButtonText: '취소',
|
|
preConfirm: () => {
|
|
var startNo = $("#seqStartNo").val().trim();
|
|
var count = parseInt($("#seqCount").val());
|
|
|
|
if(!startNo) {
|
|
Swal.showValidationMessage('시작번호를 입력해주세요.');
|
|
return false;
|
|
}
|
|
|
|
if(!count || count < 1) {
|
|
Swal.showValidationMessage('생성개수를 입력해주세요.');
|
|
return false;
|
|
}
|
|
|
|
if(count > 100) {
|
|
Swal.showValidationMessage('최대 100개까지 생성 가능합니다.');
|
|
return false;
|
|
}
|
|
|
|
return {startNo: startNo, count: count};
|
|
}
|
|
}).then((result) => {
|
|
if(result.isConfirmed && result.value) {
|
|
fn_generateSequentialSn(result.value.startNo, result.value.count);
|
|
} else {
|
|
fn_openSnManagePopup();
|
|
}
|
|
});
|
|
}
|
|
|
|
// 연속번호 생성 로직
|
|
function fn_generateSequentialSn(startNo, count) {
|
|
// 숫자 부분 추출 (마지막 연속된 숫자)
|
|
var match = startNo.match(/^(.*?)(\d+)$/);
|
|
|
|
if(!match) {
|
|
alert('올바른 형식이 아닙니다. 마지막에 숫자가 있어야 합니다. (예: ITEM-001)');
|
|
fn_openSequentialSnPopup();
|
|
return;
|
|
}
|
|
|
|
var prefix = match[1]; // 접두사
|
|
var startNum = parseInt(match[2]); // 시작 숫자
|
|
var numLength = match[2].length; // 숫자 자릿수
|
|
|
|
// 연속번호 생성
|
|
var addedCount = 0;
|
|
for(var i = 0; i < count; i++) {
|
|
var currentNum = startNum + i;
|
|
var paddedNum = String(currentNum).padStart(numLength, '0');
|
|
var newSn = prefix + paddedNum;
|
|
|
|
// 중복 체크
|
|
var isDuplicate = false;
|
|
for(var j = 0; j < snList.length; j++) {
|
|
if(snList[j].value == newSn) {
|
|
isDuplicate = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 중복이 아니면 추가
|
|
if(!isDuplicate) {
|
|
snList.push({
|
|
id: snCounter++,
|
|
value: newSn
|
|
});
|
|
addedCount++;
|
|
}
|
|
}
|
|
|
|
// S/N 목록 다시 열기
|
|
$("#serialNoList").val(JSON.stringify(snList));
|
|
fn_openSnManagePopup();
|
|
}
|
|
|
|
// S/N 목록 확인 및 적용
|
|
function fn_confirmSnList() {
|
|
// snList를 JSON 문자열로 변환하여 hidden 필드에 저장
|
|
$("#serialNoList").val(JSON.stringify(snList));
|
|
|
|
// 화면 표시 업데이트
|
|
fn_updateSnDisplay();
|
|
|
|
// 팝업 닫기
|
|
Swal.close();
|
|
}
|
|
|
|
// S/N 팝업 닫기 (취소)
|
|
function fn_closeSnPopup() {
|
|
Swal.close();
|
|
}
|
|
|
|
function fn_save() {
|
|
// 체크박스 상태에 따라 출하지시 상태 값 설정
|
|
var isChecked = $("#isShippingOrder").is(":checked");
|
|
$("#shippingOrderStatus").val(isChecked ? "출하지시" : "");
|
|
|
|
// S/N 데이터 최종 정리 (콤마로 구분된 문자열로 변환)
|
|
var serialNoValue = '';
|
|
if(snList.length > 0) {
|
|
serialNoValue = snList.map(function(item) { return item.value; }).join(',');
|
|
}
|
|
$("#serialNo").val(serialNoValue);
|
|
|
|
if(confirm("저장하시겠습니까?")) {
|
|
$.ajax({
|
|
url: "/salesMgmt/saveSales.do",
|
|
type: "POST",
|
|
data: $("#form1").serialize(),
|
|
dataType: "json",
|
|
success: function(data) {
|
|
alert(data.msg);
|
|
if (data.result) {
|
|
opener.fn_search(); // 부모창 그리드 새로고침
|
|
window.close(); // 팝업 닫기
|
|
}
|
|
},
|
|
error: function(jqxhr, status, error) {
|
|
console.error("Error:", error);
|
|
alert("저장에 실패했습니다.");
|
|
}
|
|
});
|
|
}
|
|
}
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<form name="form1" id="form1" action="" method="post">
|
|
<input type="hidden" name="orderNo" value="${param.orderNo}">
|
|
<input type="hidden" name="saleNo" value="${param.saleNo}">
|
|
<input type="hidden" name="serialNoList" id="serialNoList" value="${saleInfo.SERIAL_NO_LIST}" />
|
|
<section>
|
|
<div class="plm_menu_name">
|
|
<h2>
|
|
<span>판매 등록</span>
|
|
</h2>
|
|
</div>
|
|
|
|
<div id="businessPopupFormWrap" >
|
|
<table class="pmsPopupForm">
|
|
<colgroup>
|
|
<col width="15%"/>
|
|
<col width="35%"/>
|
|
<col width="15%"/>
|
|
<col width="35%"/>
|
|
</colgroup>
|
|
<tbody>
|
|
<tr>
|
|
<td colspan="4" style="height:15px;"></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="input_title">
|
|
<label for="isShippingOrder">출하지시</label>
|
|
</td>
|
|
<td class="input_sub_title" colspan="3">
|
|
<input type="checkbox" name="isShippingOrderCheck" id="isShippingOrder"
|
|
${saleInfo.SHIPPING_ORDER_STATUS == '출하지시' ? 'checked' : ''} />
|
|
<input type="hidden" name="shippingOrderStatus" id="shippingOrderStatus"
|
|
value="${saleInfo.SHIPPING_ORDER_STATUS != null ? saleInfo.SHIPPING_ORDER_STATUS : ''}" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="input_title"><label for="serialNo">S/N</label></td>
|
|
<td class="input_sub_title">
|
|
<input type="text" name="serialNo" id="serialNo"
|
|
placeholder="클릭하여 S/N 추가"
|
|
style="width:100%; cursor:pointer; background-color:#f8f9fa; color:#333 !important;"
|
|
value="${saleInfo.SERIAL_NO}"
|
|
readonly />
|
|
</td>
|
|
<td class="input_title"></td>
|
|
<td class="input_sub_title"></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="input_title"><label for="salesQuantity">판매수량</label></td>
|
|
<td class="input_sub_title">
|
|
<input type="number" name="salesQuantity" id="salesQuantity" style="width:100%;" value="${saleInfo.SALES_QUANTITY}" onchange="fn_calculateSupplyPrice()" />
|
|
</td>
|
|
<td class="input_title"><label for="shippingDate">출하일</label></td>
|
|
<td class="input_sub_title">
|
|
<input type="text" id="shippingDate" name="shippingDate" class="date_icon" style="width:100%; background-color:#fff;" value="${saleInfo.SHIPPING_DATE}" autocomplete="off" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="input_title"><label for="shippingMethod">출하방법</label></td>
|
|
<td class="input_sub_title">
|
|
<select name="shippingMethod" id="shippingMethod" style="width:100%;" class="select2">
|
|
<option value="">선택</option>
|
|
<option value="내수/직납" ${saleInfo.SHIPPING_METHOD == '내수/직납' ? 'selected' : ''}>내수/직납</option>
|
|
<option value="내수/택배" ${saleInfo.SHIPPING_METHOD == '내수/택배' ? 'selected' : ''}>내수/택배</option>
|
|
<option value="내수/기타" ${saleInfo.SHIPPING_METHOD == '내수/기타' ? 'selected' : ''}>내수/기타</option>
|
|
<option value="수출" ${saleInfo.SHIPPING_METHOD == '수출' ? 'selected' : ''}>수출</option>
|
|
</select>
|
|
</td>
|
|
<td class="input_title"><label for="manager">담당자</label></td>
|
|
<td class="input_sub_title">
|
|
<select name="manager" id="manager" style="width:100%;" class="select2">
|
|
<option value="">선택</option>
|
|
${codeMap.managerList}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="input_title"><label for="salesUnitPrice">판매단가</label></td>
|
|
<td class="input_sub_title">
|
|
<input type="number" name="salesUnitPrice" id="salesUnitPrice" style="width:100%;" value="${saleInfo.SALES_UNIT_PRICE}" onchange="fn_calculateSupplyPrice()" />
|
|
</td>
|
|
<td class="input_title"><label for="salesSupplyPrice">판매공급가액</label></td>
|
|
<td class="input_sub_title">
|
|
<input type="number" name="salesSupplyPrice" id="salesSupplyPrice" style="width:100%; background-color: #f0f0f0;" value="${saleInfo.SALES_SUPPLY_PRICE}" readonly />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="input_title"><label for="salesVat">판매부가세</label></td>
|
|
<td class="input_sub_title">
|
|
<input type="number" name="salesVat" id="salesVat" style="width:100%; background-color: #f0f0f0;" value="${saleInfo.SALES_VAT}" readonly />
|
|
</td>
|
|
<td class="input_title"><label for="salesTotalAmount">판매총액</label></td>
|
|
<td class="input_sub_title">
|
|
<input type="number" name="salesTotalAmount" id="salesTotalAmount" style="width:100%; background-color: #f0f0f0;" value="${saleInfo.SALES_TOTAL_AMOUNT}" readonly />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="input_title"><label for="salesCurrency">판매환종</label></td>
|
|
<td class="input_sub_title">
|
|
<select name="salesCurrency" id="salesCurrency" style="width:100%;" class="select2" onchange="fn_recalculateByExchangeRate()">
|
|
<option value="">선택</option>
|
|
<option value="KRW" ${saleInfo.SALES_CURRENCY == 'KRW' || empty saleInfo.SALES_CURRENCY ? 'selected' : ''}>KRW</option>
|
|
<option value="USD" ${saleInfo.SALES_CURRENCY == 'USD' ? 'selected' : ''}>USD</option>
|
|
<option value="EUR" ${saleInfo.SALES_CURRENCY == 'EUR' ? 'selected' : ''}>EUR</option>
|
|
<option value="JPY" ${saleInfo.SALES_CURRENCY == 'JPY' ? 'selected' : ''}>JPY</option>
|
|
<option value="CNY" ${saleInfo.SALES_CURRENCY == 'CNY' ? 'selected' : ''}>CNY</option>
|
|
</select>
|
|
</td>
|
|
<td class="input_title"><label for="salesExchangeRate">판매환율</label></td>
|
|
<td class="input_sub_title">
|
|
<input type="number" name="salesExchangeRate" id="salesExchangeRate" style="width:100%;" step="0.01" value="${saleInfo.SALES_EXCHANGE_RATE}" onchange="fn_recalculateByExchangeRate()" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="input_title"><label for="incoterms">인도조건</label></td>
|
|
<td class="input_sub_title">
|
|
<select name="incoterms" id="incoterms" style="width:100%;" class="select2">
|
|
<option value="">선택</option>
|
|
<option value="FOB" ${saleInfo.INCOTERMS == 'FOB' ? 'selected' : ''}>FOB</option>
|
|
<option value="EXW" ${saleInfo.INCOTERMS == 'EXW' ? 'selected' : ''}>EXW</option>
|
|
<option value="CIF" ${saleInfo.INCOTERMS == 'CIF' ? 'selected' : ''}>CIF</option>
|
|
<option value="DDP" ${saleInfo.INCOTERMS == 'DDP' ? 'selected' : ''}>DDP</option>
|
|
<option value="DAP" ${saleInfo.INCOTERMS == 'DAP' ? 'selected' : ''}>DAP</option>
|
|
</select>
|
|
</td>
|
|
<td class="input_title"></td>
|
|
<td class="input_sub_title"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4" style="height:15px;"></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="btn_wrap">
|
|
<div class="plm_btn_wrap_center">
|
|
<input type="button" value="저장" id="btnSave" class="plm_btns">
|
|
<input type="button" value="닫기" id="btnClose" class="plm_btns">
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</form>
|
|
</body>
|
|
</html>
|