사라지기전에

This commit is contained in:
leeheejin
2025-11-13 16:52:18 +09:00
parent 849df44333
commit c2f2350b83
11 changed files with 468 additions and 72 deletions

View File

@@ -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,

View File

@@ -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로 시작하는 레코드 개수 */

View File

@@ -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%" /> <!-- 품번 -->

View File

@@ -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>

View File

@@ -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>

View File

@@ -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'},

View File

@@ -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>