사라지기전에
This commit is contained in:
@@ -4681,6 +4681,24 @@ WHERE
|
||||
OBJID,
|
||||
CONTRACT_NO,
|
||||
CUSTOMER_OBJID,
|
||||
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID = CONTRACT_MGMT.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME,
|
||||
-- 주문유형
|
||||
CATEGORY_CD,
|
||||
CODE_NAME(CATEGORY_CD) AS CATEGORY_NAME,
|
||||
-- 제품구분
|
||||
PRODUCT,
|
||||
CODE_NAME(PRODUCT) AS PRODUCT_NAME,
|
||||
-- 국내/해외
|
||||
AREA_CD,
|
||||
CODE_NAME(AREA_CD) AS AREA_NAME,
|
||||
-- 유/무상
|
||||
PAID_TYPE,
|
||||
-- 접수일 (이미 날짜 형식이면 그대로, YYYYMMDD 형식이면 변환)
|
||||
CASE
|
||||
WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_CHAR(TO_DATE(RECEIPT_DATE, 'YYYYMMDD'), 'YYYY-MM-DD')
|
||||
ELSE RECEIPT_DATE
|
||||
END AS RECEIPT_DATE,
|
||||
-- 환종/환율
|
||||
CONTRACT_CURRENCY,
|
||||
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME,
|
||||
EXCHANGE_RATE,
|
||||
|
||||
@@ -1645,6 +1645,24 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
|
||||
WHERE project_no LIKE #{orderNo} || '%'
|
||||
</select>
|
||||
|
||||
<!-- shipment_log에서 총 출하 수량 조회 -->
|
||||
<select id="getTotalShippedQuantity" parameterType="map" resultType="int">
|
||||
/* salesNcollectMgmt.getTotalShippedQuantity - shipment_log의 split_quantity 합계 */
|
||||
SELECT COALESCE(SUM(split_quantity), 0)
|
||||
FROM shipment_log
|
||||
WHERE target_objid = #{projectNo}
|
||||
</select>
|
||||
|
||||
<!-- 프로젝트 기본 정보 조회 (CONTRACT_OBJID 포함) -->
|
||||
<select id="getProjectInfo" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getProjectInfo - PROJECT_MGMT의 CONTRACT_OBJID 조회 (최신 1개) */
|
||||
SELECT CONTRACT_OBJID
|
||||
FROM PROJECT_MGMT
|
||||
WHERE PROJECT_NO = #{orderNo}
|
||||
ORDER BY REGDATE DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<!-- sales_registration 개수 조회 (분할 출하 순번용) -->
|
||||
<select id="getSaleRegistrationCount" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getSaleRegistrationCount - project_no로 시작하는 레코드 개수 */
|
||||
|
||||
@@ -1908,21 +1908,21 @@
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- 품목정보 영역 -->
|
||||
<div class="form_popup_title" style="margin-top:15px;">
|
||||
<span>품목정보</span>
|
||||
<button type="button" id="btnAddItem" class="plm_btns" style="float:right; margin-top:-5px;">품목 추가</button>
|
||||
</div>
|
||||
<table class="">
|
||||
<colgroup>
|
||||
<col width="100%" />
|
||||
</colgroup>
|
||||
<tr>
|
||||
<td>
|
||||
<div style="max-height:300px; overflow-y:auto;">
|
||||
<table class="pmsPopuptable" id="itemListTable">
|
||||
</table>
|
||||
|
||||
<!-- 품목정보 영역 -->
|
||||
<div class="form_popup_title" style="margin-top:15px;">
|
||||
<span>품목정보</span>
|
||||
<button type="button" id="btnAddItem" class="plm_btns" style="float:right; margin-top:-5px;">품목 추가</button>
|
||||
</div>
|
||||
<table class="">
|
||||
<colgroup>
|
||||
<col width="100%" />
|
||||
</colgroup>
|
||||
<tr>
|
||||
<td>
|
||||
<div style="max-height:300px; overflow-y:auto;">
|
||||
<table class="pmsPopuptable" id="itemListTable">
|
||||
<colgroup>
|
||||
<col width="4%" /> <!-- 번호 -->
|
||||
<col width="12%" /> <!-- 품번 -->
|
||||
|
||||
@@ -75,6 +75,32 @@ $(document).ready(function(){
|
||||
}
|
||||
});
|
||||
|
||||
//결재상신
|
||||
$("#btnApproval").click(function(){
|
||||
var selectedData = _tabulGrid.getSelectedData();
|
||||
if(selectedData.length<1){
|
||||
Swal.fire("결재상신할 행을 선택해주십시오.");
|
||||
return false;
|
||||
}else if(selectedData.length>1){
|
||||
Swal.fire("한번에 한개의 결재만 가능합니다.");
|
||||
return false;
|
||||
}else{
|
||||
|
||||
var targetStatus = fnc_checkNull(selectedData[0].APPR_STATUS);
|
||||
var status = fnc_checkNull(selectedData[0].STATUS);
|
||||
|
||||
if(targetStatus == "결재완료" || targetStatus == "결재중" || status == "cancel"){
|
||||
Swal.fire("작성중/결재반려인 상태만 결재상신 가능합니다.");
|
||||
return false;
|
||||
}else{
|
||||
if(confirm("결재상신 하시겠습니까?")){
|
||||
var objId = fnc_checkNull(selectedData[0].OBJID);
|
||||
var title = encodeURIComponent(fnc_checkNull(selectedData[0].CONTRACT_NO));
|
||||
window.open("/approval/registApproval.do?targetType=CONTRACT_ORDER&targetObjId="+objId+"&approvalTitle="+title,"registApproval","width=700,height=700");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//엔터 조회
|
||||
$("input").keyup(function(e){
|
||||
@@ -610,10 +636,11 @@ function openProjectFormPopUp(objId){
|
||||
<h2>
|
||||
<span>영업관리_주문서관리</span>
|
||||
</h2>
|
||||
<div class="btnArea">
|
||||
<input type="button" value="조회" class="plm_btns" id="btnSearch" name="btnSearch">
|
||||
<input type="button" value="수주등록" class="plm_btns btnRegist">
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
<input type="button" value="조회" class="plm_btns" id="btnSearch" name="btnSearch">
|
||||
<input type="button" value="수주등록" class="plm_btns btnRegist">
|
||||
<input type="button" value="결재상신" class="plm_btns" id="btnApproval">
|
||||
</div>
|
||||
</div>
|
||||
<div id="plmSearchZon">
|
||||
<table>
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ page import="com.pms.common.utils.*"%>
|
||||
<%@ page import="java.util.*"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@include file="/init_new.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>
|
||||
<style>
|
||||
.project-detail-container {
|
||||
padding: 20px;
|
||||
background: white;
|
||||
}
|
||||
.section-title {
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
padding: 10px;
|
||||
background: #f5f5f5;
|
||||
border: 1px solid #ddd;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.info-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.info-table td {
|
||||
padding: 8px;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
.info-label {
|
||||
background: #f9f9f9;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
width: 120px;
|
||||
}
|
||||
.item-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.item-table th, .item-table td {
|
||||
padding: 8px;
|
||||
border: 1px solid #ddd;
|
||||
text-align: center;
|
||||
}
|
||||
.item-table th {
|
||||
background: #f5f5f5;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<section class="business_popup_min_width">
|
||||
<div class="plm_menu_name">
|
||||
<h2><span>프로젝트 상세 정보</span></h2>
|
||||
</div>
|
||||
|
||||
<div class="project-detail-container">
|
||||
<!-- 프로젝트 정보 -->
|
||||
<div class="section-title">프로젝트정보</div>
|
||||
<table class="info-table">
|
||||
<tr>
|
||||
<td class="info-label">주문유형</td>
|
||||
<td>${info.CATEGORY_NAME}</td>
|
||||
<td class="info-label">제품구분</td>
|
||||
<td>${info.PRODUCT_NAME}</td>
|
||||
<td class="info-label">국내/해외</td>
|
||||
<td>${info.AREA_NAME}</td>
|
||||
<td class="info-label">고객사</td>
|
||||
<td>${info.CUSTOMER_NAME}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="info-label">유/무상</td>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${info.PAID_TYPE == 'paid'}">유상</c:when>
|
||||
<c:when test="${info.PAID_TYPE == 'free'}">무상</c:when>
|
||||
<c:otherwise>${info.PAID_TYPE}</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
<td class="info-label">접수일</td>
|
||||
<td>${info.RECEIPT_DATE}</td>
|
||||
<td class="info-label">견적환종</td>
|
||||
<td>${info.CONTRACT_CURRENCY_NAME}</td>
|
||||
<td class="info-label">견적환율</td>
|
||||
<td>${info.EXCHANGE_RATE}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- 품목정보 -->
|
||||
<div class="section-title">품목정보</div>
|
||||
<table class="item-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>품번</th>
|
||||
<th>품명</th>
|
||||
<th>S/N</th>
|
||||
<th>요청납기</th>
|
||||
<th>고객요청사항</th>
|
||||
<th>반납사유</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>${info.PART_NO}</td>
|
||||
<td>${info.PART_NAME}</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- 결재 라인 정보 -->
|
||||
<c:if test="${not empty approvalLine}">
|
||||
<div class="section-title">결재 정보</div>
|
||||
<table class="item-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>순번</th>
|
||||
<th>기안자</th>
|
||||
<th>기안일</th>
|
||||
<th>결재자</th>
|
||||
<th>결재일</th>
|
||||
<th>상태</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:forEach var="approval" items="${approvalLine}" varStatus="status">
|
||||
<tr>
|
||||
<td>${approval.SEQ}</td>
|
||||
<td>${approval.WRITER}</td>
|
||||
<td>${approval.REGDATE}</td>
|
||||
<td>${approval.TARGET_USER_NAME}</td>
|
||||
<td>${approval.PROC_DATE}</td>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${approval.STATUS == 'complete'}">승인</c:when>
|
||||
<c:when test="${approval.STATUS == 'reject'}">반려</c:when>
|
||||
<c:when test="${approval.STATUS == 'READY'}">대기</c:when>
|
||||
<c:otherwise>${approval.STATUS}</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
</table>
|
||||
</c:if>
|
||||
|
||||
<!-- 버튼 영역 -->
|
||||
<div style="text-align:center; margin-top:20px;">
|
||||
<input type="button" value="닫기" class="plm_btns" onclick="self.close();">
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
@@ -235,8 +235,8 @@ var columns = [
|
||||
formatter: fnc_createGridAnchorTag,
|
||||
cellClick: function(e, cell){
|
||||
var orderNo = cell.getData().PROJECT_NO;
|
||||
var saleNo = cell.getData().SALE_NO;
|
||||
fn_openSaleRegPopup(orderNo, saleNo);
|
||||
// 프로젝트 번호 클릭 시: 결재 정보 조회 모드 (saleNo에 "detail" 전달)
|
||||
fn_openSaleRegPopup(orderNo, "detail");
|
||||
}
|
||||
},
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '주문유형', field : 'ORDER_TYPE'},
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title><%=Constants.SYSTEM_NAME%></title>
|
||||
|
||||
<script type="text/javascript">
|
||||
// S/N 관리 전역 변수
|
||||
var snList = [];
|
||||
@@ -801,46 +802,75 @@ function fn_calculateSelectedItem() {
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 두번째 행: 판매수량 (잔량 표시), 출하일 -->
|
||||
<tr>
|
||||
<td class="input_title">
|
||||
<label for="salesQuantity">판매수량</label>
|
||||
<span style="color:#666; font-size:11px; display:block; margin-top:2px;">
|
||||
(잔량: ${saleInfo.REMAINING_QUANTITY != null ? saleInfo.REMAINING_QUANTITY : saleInfo.ORDER_QUANTITY}개)
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<input type="number" name="salesQuantity" id="salesQuantity"
|
||||
value="${saleInfo.SALES_QUANTITY != null && saleInfo.SALES_QUANTITY != '' && saleInfo.SALES_QUANTITY != 0 ? saleInfo.SALES_QUANTITY : ''}"
|
||||
onchange="fn_calculateSupplyPrice()"
|
||||
placeholder="판매할 수량 입력 (잔량: ${saleInfo.REMAINING_QUANTITY != null ? saleInfo.REMAINING_QUANTITY : saleInfo.ORDER_QUANTITY}개)" />
|
||||
</td>
|
||||
<td class="input_title"><label for="shippingDate">출하일</label></td>
|
||||
<td>
|
||||
<input type="text" id="shippingDate" name="shippingDate" class="date_icon" value="${saleInfo.SHIPPING_DATE}" autocomplete="off" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 세번째 행: 출하방법, 담당자 -->
|
||||
<tr>
|
||||
<td class="input_title"><label for="shippingMethod">출하방법</label></td>
|
||||
<td>
|
||||
<select name="shippingMethod" id="shippingMethod" 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>
|
||||
<select name="manager" id="manager" class="select2">
|
||||
<option value="">선택</option>
|
||||
${codeMap.managerList}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 두번째 행: 수주수량, 판매수량 -->
|
||||
<tr>
|
||||
<td class="input_title"><label for="orderQuantity">수주수량</label></td>
|
||||
<td>
|
||||
<input type="number" name="orderQuantity" id="orderQuantity"
|
||||
value="${saleInfo.ORDER_QUANTITY}"
|
||||
readonly style="background-color: #f5f5f5;" />
|
||||
</td>
|
||||
<c:choose>
|
||||
<c:when test="${param.saleNo != null && param.saleNo != ''}">
|
||||
<!-- 수정 모드: 판매수량만 표시 (읽기 전용) -->
|
||||
<td class="input_title"><label for="salesQuantity">판매수량</label></td>
|
||||
<td>
|
||||
<input type="number" name="salesQuantity" id="salesQuantity"
|
||||
value="${saleInfo.SALES_QUANTITY}"
|
||||
readonly style="background-color: #f5f5f5;" />
|
||||
</td>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<!-- 신규 등록 모드: 판매수량 입력 가능 + 잔량 표시 -->
|
||||
<td class="input_title">
|
||||
<label for="salesQuantity">판매수량</label>
|
||||
<span style="color:#666; font-size:11px; display:block; margin-top:2px;">
|
||||
(잔량: ${saleInfo.REMAINING_QUANTITY != null ? saleInfo.REMAINING_QUANTITY : saleInfo.ORDER_QUANTITY}개)
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<input type="number" name="salesQuantity" id="salesQuantity"
|
||||
value="${saleInfo.SALES_QUANTITY != null && saleInfo.SALES_QUANTITY != '' && saleInfo.SALES_QUANTITY != 0 ? saleInfo.SALES_QUANTITY : ''}"
|
||||
onchange="fn_calculateSupplyPrice()"
|
||||
placeholder="판매할 수량 입력 (잔량: ${saleInfo.REMAINING_QUANTITY != null ? saleInfo.REMAINING_QUANTITY : saleInfo.ORDER_QUANTITY}개)" />
|
||||
</td>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tr>
|
||||
|
||||
<!-- 세번째 행: 출하일, 출하방법 -->
|
||||
<tr>
|
||||
<td class="input_title"><label for="shippingDate">출하일</label></td>
|
||||
<td>
|
||||
<input type="text" id="shippingDate" name="shippingDate" class="date_icon" value="${saleInfo.SHIPPING_DATE}" autocomplete="off" />
|
||||
</td>
|
||||
<td class="input_title"><label for="shippingMethod">출하방법</label></td>
|
||||
<td>
|
||||
<select name="shippingMethod" id="shippingMethod" 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>
|
||||
<option value="기타" ${saleInfo.SHIPPING_METHOD == '기타' ? 'selected' : ''}>기타</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 네번째 행: 담당자, INCOTERMS -->
|
||||
<tr>
|
||||
<td class="input_title"><label for="manager">담당자</label></td>
|
||||
<td>
|
||||
<select name="manager" id="manager" class="select2">
|
||||
<option value="">선택</option>
|
||||
${codeMap.managerList}
|
||||
</select>
|
||||
</td>
|
||||
<td class="input_title"><label for="incoterms">INCOTERMS</label></td>
|
||||
<td>
|
||||
<input type="text" name="incoterms" id="incoterms" value="${saleInfo.INCOTERMS}" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</td>
|
||||
@@ -943,7 +973,8 @@ function fn_calculateSelectedItem() {
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
</form>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
@@ -248,6 +248,7 @@ public class SalesNcollectMgmtController {
|
||||
@RequestMapping(value = "/salesMgmt/salesRegForm.do", method = RequestMethod.GET)
|
||||
public String showSalesRegForm(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
try {
|
||||
|
||||
// URL 인코딩 처리: 한글 프로젝트 번호 디코딩
|
||||
if(paramMap.get("orderNo") != null) {
|
||||
String orderNo = paramMap.get("orderNo").toString();
|
||||
@@ -287,17 +288,62 @@ public class SalesNcollectMgmtController {
|
||||
System.out.println("saleNo: " + paramMap.get("saleNo"));
|
||||
System.out.println("remainingQuantity: " + paramMap.get("remainingQuantity"));
|
||||
|
||||
// saleNo가 있으면 기존 판매 데이터 수정 모드
|
||||
if(paramMap.get("saleNo") != null && !paramMap.get("saleNo").equals("")) {
|
||||
System.out.println("=== 기존 판매 데이터 수정 모드 ===");
|
||||
saleInfo = salesNcollectMgmtService.getSaleInfo(paramMap);
|
||||
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
|
||||
// saleNo가 "detail"이면 주문서 관리의 결재 정보 조회 모드
|
||||
if(paramMap.get("saleNo") != null && "detail".equals(paramMap.get("saleNo"))) {
|
||||
System.out.println("=== 주문서 관리 결재 정보 조회 모드 ===");
|
||||
|
||||
System.out.println("=== DB에서 조회한 saleInfo ===");
|
||||
System.out.println("ORDER_QUANTITY: " + saleInfo.get("ORDER_QUANTITY"));
|
||||
System.out.println("SALES_QUANTITY: " + saleInfo.get("SALES_QUANTITY"));
|
||||
System.out.println("SALES_UNIT_PRICE: " + saleInfo.get("SALES_UNIT_PRICE"));
|
||||
System.out.println("SALES_SUPPLY_PRICE: " + saleInfo.get("SALES_SUPPLY_PRICE"));
|
||||
// PROJECT_MGMT에서 CONTRACT_OBJID 조회
|
||||
Map<String, Object> projectInfo = salesNcollectMgmtService.getProjectInfo(paramMap);
|
||||
Object contractObjId = projectInfo != null ? projectInfo.get("contract_objid") : null;
|
||||
if(contractObjId == null && projectInfo != null) {
|
||||
contractObjId = projectInfo.get("CONTRACT_OBJID");
|
||||
}
|
||||
|
||||
System.out.println("CONTRACT_OBJID: " + contractObjId);
|
||||
|
||||
if(contractObjId != null) {
|
||||
// CONTRACT_MGMT 상세 정보 조회
|
||||
Map<String, Object> contractParam = new HashMap<String, Object>();
|
||||
contractParam.put("objId", contractObjId);
|
||||
Map<String, Object> contractInfo = commonService.selectOne("contractMgmt.getContractInfo", request, contractParam);
|
||||
|
||||
// 결재 라인 정보 조회
|
||||
Map<String, Object> approvalParam = new HashMap<String, Object>();
|
||||
approvalParam.put("objId", contractObjId);
|
||||
List<Map<String, Object>> approvalLine = commonService.selectList("approval.getApprovalLine", request, approvalParam);
|
||||
|
||||
request.setAttribute("info", contractInfo);
|
||||
request.setAttribute("approvalLine", approvalLine);
|
||||
|
||||
System.out.println("=== 주문서 관리 데이터 조회 완료 ===");
|
||||
System.out.println("CATEGORY_NAME: " + contractInfo.get("CATEGORY_NAME"));
|
||||
System.out.println("PRODUCT_NAME: " + contractInfo.get("PRODUCT_NAME"));
|
||||
System.out.println("결재 라인 개수: " + (approvalLine != null ? approvalLine.size() : 0));
|
||||
|
||||
// 별도의 JSP로 이동
|
||||
return "/salesmgmt/salesMgmt/projectDetailView";
|
||||
}
|
||||
}
|
||||
// saleNo가 있지만 "detail"이 아니면 프로젝트 기본 정보 조회 모드
|
||||
else if(paramMap.get("saleNo") != null && !paramMap.get("saleNo").equals("")) {
|
||||
System.out.println("=== 프로젝트 기본 정보 조회 모드 ===");
|
||||
Map<String, Object> orderDataParam = new HashMap<String, Object>();
|
||||
orderDataParam.put("orderNo", paramMap.get("orderNo"));
|
||||
saleInfo = salesNcollectMgmtService.getOrderDataByOrderNo(orderDataParam);
|
||||
|
||||
if(saleInfo != null) {
|
||||
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
|
||||
saleInfo.put("ORDER_QUANTITY", saleInfo.get("SALES_QUANTITY"));
|
||||
|
||||
Map<String, Object> shipmentParam = new HashMap<String, Object>();
|
||||
shipmentParam.put("projectNo", paramMap.get("orderNo"));
|
||||
Integer totalShipped = salesNcollectMgmtService.getTotalShippedQuantity(shipmentParam);
|
||||
saleInfo.put("SALES_QUANTITY", totalShipped != null ? totalShipped : 0);
|
||||
|
||||
System.out.println("=== 프로젝트 기본 정보 조회 완료 ===");
|
||||
System.out.println("ORDER_QUANTITY (수주수량): " + saleInfo.get("ORDER_QUANTITY"));
|
||||
System.out.println("SALES_QUANTITY (총 판매수량): " + saleInfo.get("SALES_QUANTITY"));
|
||||
}
|
||||
}
|
||||
// saleNo가 없으면 신규 판매 등록 모드 -> 수주 데이터만 조회
|
||||
else {
|
||||
|
||||
@@ -4681,6 +4681,24 @@ WHERE
|
||||
OBJID,
|
||||
CONTRACT_NO,
|
||||
CUSTOMER_OBJID,
|
||||
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID = CONTRACT_MGMT.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME,
|
||||
-- 주문유형
|
||||
CATEGORY_CD,
|
||||
CODE_NAME(CATEGORY_CD) AS CATEGORY_NAME,
|
||||
-- 제품구분
|
||||
PRODUCT,
|
||||
CODE_NAME(PRODUCT) AS PRODUCT_NAME,
|
||||
-- 국내/해외
|
||||
AREA_CD,
|
||||
CODE_NAME(AREA_CD) AS AREA_NAME,
|
||||
-- 유/무상
|
||||
PAID_TYPE,
|
||||
-- 접수일 (이미 날짜 형식이면 그대로, YYYYMMDD 형식이면 변환)
|
||||
CASE
|
||||
WHEN RECEIPT_DATE ~ '^\d{8}$' THEN TO_CHAR(TO_DATE(RECEIPT_DATE, 'YYYYMMDD'), 'YYYY-MM-DD')
|
||||
ELSE RECEIPT_DATE
|
||||
END AS RECEIPT_DATE,
|
||||
-- 환종/환율
|
||||
CONTRACT_CURRENCY,
|
||||
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME,
|
||||
EXCHANGE_RATE,
|
||||
|
||||
@@ -1645,6 +1645,24 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
|
||||
WHERE project_no LIKE #{orderNo} || '%'
|
||||
</select>
|
||||
|
||||
<!-- shipment_log에서 총 출하 수량 조회 -->
|
||||
<select id="getTotalShippedQuantity" parameterType="map" resultType="int">
|
||||
/* salesNcollectMgmt.getTotalShippedQuantity - shipment_log의 split_quantity 합계 */
|
||||
SELECT COALESCE(SUM(split_quantity), 0)
|
||||
FROM shipment_log
|
||||
WHERE target_objid = #{projectNo}
|
||||
</select>
|
||||
|
||||
<!-- 프로젝트 기본 정보 조회 (CONTRACT_OBJID 포함) -->
|
||||
<select id="getProjectInfo" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getProjectInfo - PROJECT_MGMT의 CONTRACT_OBJID 조회 (최신 1개) */
|
||||
SELECT CONTRACT_OBJID
|
||||
FROM PROJECT_MGMT
|
||||
WHERE PROJECT_NO = #{orderNo}
|
||||
ORDER BY REGDATE DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<!-- sales_registration 개수 조회 (분할 출하 순번용) -->
|
||||
<select id="getSaleRegistrationCount" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getSaleRegistrationCount - project_no로 시작하는 레코드 개수 */
|
||||
|
||||
@@ -1072,6 +1072,58 @@ public Map<String, Object> saveSaleRegistration(HttpServletRequest request, Map<
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* shipment_log에서 총 출하 수량 조회
|
||||
* </pre>
|
||||
* @param paramMap
|
||||
* @return Integer
|
||||
*/
|
||||
public Integer getTotalShippedQuantity(Map<String, Object> paramMap) {
|
||||
SqlSession sqlSession = null;
|
||||
Integer result = 0;
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
result = sqlSession.selectOne("salesNcollectMgmt.getTotalShippedQuantity", paramMap);
|
||||
if(result == null) result = 0;
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
result = 0;
|
||||
} finally {
|
||||
if(sqlSession != null) {
|
||||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 프로젝트 기본 정보 조회 (CONTRACT_OBJID 포함)
|
||||
* </pre>
|
||||
* @param paramMap
|
||||
* @return Map
|
||||
*/
|
||||
public Map<String, Object> getProjectInfo(Map<String, Object> paramMap) {
|
||||
SqlSession sqlSession = null;
|
||||
Map<String, Object> result = null;
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
result = sqlSession.selectOne("salesNcollectMgmt.getProjectInfo", paramMap);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if(sqlSession != null) {
|
||||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 출하일 상세 내역 조회
|
||||
* @param projectNo
|
||||
|
||||
Reference in New Issue
Block a user