V2025101701 #3

Merged
geonhee merged 2 commits from V2025101701 into main 2025-10-21 00:26:59 +00:00
7 changed files with 491 additions and 112 deletions
Showing only changes of commit d9e06fe95d - Show all commits

View File

@@ -500,6 +500,11 @@
,EXCHANGE_RATE
,EST_PRICE
,EST_SUPPLY_PRICE
,ORDER_DATE
,ORDER_UNIT_PRICE
,ORDER_SUPPLY_PRICE
,ORDER_VAT
,ORDER_TOTAL_AMOUNT
,(SELECT COUNT(1) FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID) AS EST_STATUS
,(
SELECT IS_SEND
@@ -718,6 +723,13 @@
<if test="due_end_date != null and !''.equals(due_end_date)">
AND TO_DATE(DUE_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{due_end_date}, 'YYYY-MM-DD')
</if>
<if test="order_start_date != null and !''.equals(order_start_date)">
AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{order_start_date}, 'YYYY-MM-DD')
</if>
<if test="due_end_date != null and !''.equals(due_end_date)">
AND TO_DATE(ORDER_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{due_end_date}, 'YYYY-MM-DD')
</if>
ORDER BY REGDATE DESC
</select>
@@ -877,9 +889,7 @@
,CONTRACT_DEL_DATE
,CONTRACT_COMPANY
,CONTRACT_DATE
,PO_NO
,MANUFACTURE_PLANT
,CONTRACT_RESULT
,PROJECT_NAME
,SPEC_USER_ID
,SPEC_PLAN_DATE
@@ -900,14 +910,8 @@
,PART_NO
,PART_NAME
,SERIAL_NO
,QUANTITY
,CUSTOMER_REQUEST
,EXCHANGE_RATE
,ORDER_DATE
,ORDER_UNIT_PRICE
,ORDER_SUPPLY_PRICE
,ORDER_VAT
,ORDER_TOTAL_AMOUNT
)
VALUES
(
@@ -944,9 +948,7 @@
,#{contract_del_date}
,#{contract_company}
,#{contract_date}
,#{po_no}
,#{manufacture_plant}
,#{contract_result}
,#{project_name}
,#{spec_user_id}
,#{spec_plan_date}
@@ -967,14 +969,8 @@
,#{part_no}
,#{part_name}
,#{serial_no}
,#{quantity}
,#{customer_request}
,#{exchange_rate}
,#{order_date}
,#{unit_price}
,#{supply_price}
,#{vat}
,#{total_amount}
)
ON CONFLICT (OBJID) DO
UPDATE
@@ -1007,10 +1003,8 @@
,REQ_DEL_DATE = #{req_del_date}
,CONTRACT_DEL_DATE = #{contract_del_date}
,CONTRACT_COMPANY = #{contract_company}
,CONTRACT_DATE = #{contract_date}
,PO_NO = #{po_no}
,CONTRACT_DATE = #{contract_date}
,MANUFACTURE_PLANT = #{manufacture_plant}
,CONTRACT_RESULT = #{contract_result}
,PROJECT_NAME = #{project_name}
,SPEC_USER_ID = #{spec_user_id}
,SPEC_PLAN_DATE = #{spec_plan_date}
@@ -1031,14 +1025,8 @@
,PART_NO = #{part_no}
,PART_NAME = #{part_name}
,SERIAL_NO = #{serial_no}
,QUANTITY = #{quantity}
,CUSTOMER_REQUEST = #{customer_request}
,EXCHANGE_RATE = #{exchange_rate}
,ORDER_DATE = #{order_date}
,ORDER_UNIT_PRICE = #{unit_price}
,ORDER_SUPPLY_PRICE = #{supply_price}
,ORDER_VAT = #{vat}
,ORDER_TOTAL_AMOUNT = #{total_amount}
</update>
<update id="saveContractMgmtInfo_old" parameterType="map">

View File

@@ -0,0 +1,191 @@
<%@ 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 connector = person.getUserId();
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%=Constants.SYSTEM_NAME%></title>
<script>
$(document).ready(function(){
fnc_datepick();
//엔터키로 조회
$("input").keyup(function(e){
if(e.keyCode == 13){
$("#page").val("1");
fn_search();
}
});
$("#btnExcel").click(function() {
fn_excel();
});
$("#btnSearch").click(function(){
$("#page").val("1");
fn_search();
});
fn_search();
});
</script>
<script type="text/javascript">
var columns = [
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '프로젝트번호', field : 'PROJECT_NO'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '주문유형', field : 'ORDER_TYPE'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '제품구분', field : 'PRODUCT_TYPE'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '국내/해외', field : 'NATION'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '접수일', field : 'RECEIPT_DATE'},
{headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '고객사', field : 'CUSTOMER'},
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '유/무상', field : 'PAYMENT_TYPE'},
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '품번', field : 'PRODUCT_NO'},
{headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품명', field : 'PRODUCT_NAME'},
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : 'S/N', field : 'SERIAL_NO'},
{headerHozAlign : 'center', hozAlign : 'right', width : '80', title : '수량', field : 'QUANTITY'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '요청납기', field : 'REQUEST_DATE'},
{headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '고객사요청사항', field : 'CUSTOMER_REQUEST'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '수주상태', field : 'ORDER_STATUS'},
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '발주번호', field : 'PO_NO'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '발주일', field : 'ORDER_DATE'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '주문서첨부', field : 'ORDER_ATTACH'},
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '단가', field : 'UNIT_PRICE'},
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '공급가액', field : 'SUPPLY_PRICE'},
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '부가세', field : 'VAT'},
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '총액', field : 'TOTAL_AMOUNT'},
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '환종', field : 'CURRENCY'},
{headerHozAlign : 'center', hozAlign : 'right', width : '80', title : '환율', field : 'EXCHANGE_RATE'},
{headerHozAlign : 'center', hozAlign : 'center', width : '130', title : '출하대기 상태', field : 'SHIPPING_STATUS'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '출고일', field : 'SHIPPING_DATE'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '출고방법', field : 'SHIPPING_METHOD'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '담당자', field : 'MANAGER'},
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '판매수량', field : 'SALES_QUANTITY'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '인도조건', field : 'INCOTERMS'},
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '매출마감현황', field : 'SALES_STATUS'}
];
function fn_search(){
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/revenueMgmt/revenueGridList.do", columns, true);
}
function fn_excel() {
document.form1.actionType.value = "excel";
var form = document.form1;
form.action="/salesMgmt/salesMgmtList.do";
form.submit();
}
</script>
</head>
<body>
<form name="hiddenForm" id="hiddenForm">
<input type="hidden" name="objid">
<input type="hidden" name="actionType" id="actionType">
</form>
<form name="form1" id="form1" method="post">
<input type="hidden" name="actionType" id="actionType">
<div class="min_part_enroll">
<div class="content-box">
<div class="content-box-s">
<div class="plm_menu_name_gdnsi">
<h2>
<span>영업관리_매출관리</span>
</h2>
<div class="btnArea">
<input type="button" value="조회" class="plm_btns" id="btnSearch">
<input type="button" value="매출마감" class="plm_btns" id="btnDeadline">
</div>
</div>
<div id="plmSearchZon">
<table>
<colgroup>
<col width="120px">
<col width="20%">
<col width="120px">
<col width="20%">
<col width="120px">
<col width="20%">
<col width="120px">
<col width="*">
</colgroup>
<tr>
<td class="label"><label for="">주문유형</label></td>
<td><select name="orderType" class="select2" style="width:120px;"><option value="">전체</option>${codeMap.orderTypeList}</select></td>
<td class="label"><label for="">제품구분</label></td>
<td><select name="productType" class="select2" style="width:120px;"><option value="">전체</option>${codeMap.productTypeList}</select></td>
<td class="label"><label for="">국내/해외</label></td>
<td><select name="nation" class="select2" style="width:120px;"><option value="">전체</option>${codeMap.nationList}</select></td>
<td class="label"><label for="">유/무상</label></td>
<td>
<select name="paymentType" class="select2" style="width:120px;">
<option value="">전체</option>
<option value="N">유상</option>
<option value="Y">무상</option>
</select>
</td>
</tr>
<tr>
<td class="label"><label for="">고객사</label></td>
<td><input type="text" name="customer" /></td>
<td class="label"><label for="">품번</label></td>
<td><input type="text" name="productNo" /></td>
<td class="label"><label for="">품명</label></td>
<td><input type="text" name="productName" /></td>
<td class="label"><label for="">S/N</label></td>
<td><input type="text" name="serialNo" /></td>
</tr>
<tr>
<td class="label"><label for="">수주상태</label></td>
<td><select name="orderStatus" class="select2" style="width:120px;"><option value="">전체</option>${codeMap.orderStatusList}</select></td>
<td class="label"><label for="">발주번호</label></td>
<td><input type="text" name="poNo" /></td>
<td class="label"><label for="">담당자</label></td>
<td><select name="manager" class="select2" style="width:120px;"><option value="">전체</option>${codeMap.managerList}</select></td>
<td class="label"><label for="">인도조건</label></td>
<td>
<select name="incoterms" class="select2" style="width:120px;">
<option value="">전체</option>
<option value="EXW">EXW</option>
<option value="FOB">FOB</option>
<option value="CIF">CIF</option>
<option value="DDP">DDP</option>
</select>
</td>
</tr>
<tr>
<td class="label"><label for="">출하대기 상태</label></td>
<td><select name="shippingStatus" class="select2" style="width:120px;"><option value="">전체</option>${codeMap.shippingStatusList}</select></td>
<td class="label"><label for="">출고방법</label></td>
<td>
<select name="shippingMethod" class="select2" style="width:120px;">
<option value="">전체</option>
<option value="DIRECT">직납</option>
<option value="PARCEL">택배</option>
</select>
</td>
<td class="label"><label for="">요청납기</label></td>
<td colspan="3"><input type="date" name="requestDateFrom" /> ~ <input type="date" name="requestDateTo" /></td>
</tr>
<tr>
<td class="label"><label for="">발주일</label></td>
<td colspan="3"><input type="date" name="orderDateFrom" /> ~ <input type="date" name="orderDateTo" /></td>
<td class="label"><label for="">출고일</label></td>
<td colspan="3"><input type="date" name="shippingDateFrom" /> ~ <input type="date" name="shippingDateTo" /></td>
</tr>
</table>
</div>
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
</div>
</div>
</div>
</form>
</body>
</html>

View File

@@ -1,43 +1,48 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.pms.common.utils.*"%>
<%@ 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.*" %>
<%@ page import="java.util.*" %>
<%@include file= "/init.jsp" %>
<%
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
String connector = person.getUserId();
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%=Constants.SYSTEM_NAME%></title>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>판매 관리</title>
<script>
$(document).ready(function(){
fnc_datepick();
//엔터키로 조회
fnc_datepick(); // 날짜 선택기 초기화
$('.select2').select2(); // select2 초기화
// 엔터키로 조회
$("input").keyup(function(e){
if(e.keyCode == 13){
$("#page").val("1");
fn_search();
}
});
$("#btnExcel").click(function() {
fn_excel();
});
});
$("#btnSearch").click(function(){
$("#page").val("1");
fn_search();
});
// 초기 데이터 조회
fn_search();
// 판매등록 팝업
$("#btnRegisterSale").click(function(){
window.open("/salesMgmt/salesRegForm.do", "", "width=600, height=400, menubars=no, scrollbars=yes, resizable=yes");
});
});
</script>
<script type="text/javascript">
// 요청하신 컬럼 헤더에 맞게 테이블 컬럼 정의
var columns = [
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '프로젝트번호', field : 'PROJECT_NO'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '주문유형', field : 'ORDER_TYPE'},
@@ -67,28 +72,16 @@ var columns = [
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '출고방법', field : 'SHIPPING_METHOD'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '담당자', field : 'MANAGER'},
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '판매수량', field : 'SALES_QUANTITY'},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '인도조건', field : 'INCOTERMS'},
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '매출마감현황', field : 'SALES_STATUS'}
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '인도조건', field : 'INCOTERMS'}
];
// 데이터 조회 함수
function fn_search(){
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/salesMgmt/salesMgmtGridList.do", columns, true);
}
function fn_excel() {
document.form1.actionType.value = "excel";
var form = document.form1;
form.action="/salesMgmt/salesMgmtList.do";
form.submit();
}
</script>
</head>
</head>
<body>
<form name="hiddenForm" id="hiddenForm">
<input type="hidden" name="objid">
<input type="hidden" name="actionType" id="actionType">
</form>
<form name="form1" id="form1" method="post">
<input type="hidden" name="actionType" id="actionType">
<div class="min_part_enroll">
@@ -96,11 +89,12 @@ function fn_excel() {
<div class="content-box-s">
<div class="plm_menu_name_gdnsi">
<h2>
<span>영업관리_매출관리</span>
<span>판매 관리</span>
</h2>
<div class="btnArea">
<input type="button" value="조회" class="plm_btns" id="btnSearch">
<input type="button" value="매출마감" class="plm_btns" id="btnDeadline">
<input type="button" value="판매등록" class="plm_btns" id="btnRegisterSale">
<input type="button" value="엑셀" class="plm_btns" id="btnExcel">
</div>
</div>
<div id="plmSearchZon">
@@ -122,70 +116,65 @@ function fn_excel() {
<td><select name="productType" class="select2" style="width:120px;"><option value="">전체</option>${codeMap.productTypeList}</select></td>
<td class="label"><label for="">국내/해외</label></td>
<td><select name="nation" class="select2" style="width:120px;"><option value="">전체</option>${codeMap.nationList}</select></td>
<td class="label"><label for="">유/무상</label></td>
<td>
<select name="paymentType" class="select2" style="width:120px;">
<option value="">전체</option>
<option value="N">유상</option>
<option value="Y">무상</option>
</select>
</td>
</tr>
<tr>
<td class="label"><label for="">고객사</label></td>
<td class="label"><label for="">고객사</label></td>
<td><input type="text" name="customer" /></td>
<td class="label"><label for="">품번</label></td>
<td><input type="text" name="productNo" /></td>
<td class="label"><label for="">품명</label></td>
<td><input type="text" name="productName" /></td>
<td class="label"><label for="">S/N</label></td>
<td><input type="text" name="serialNo" /></td>
</tr>
<tr>
<td class="label"><label for="">유/무상</label></td>
<td>
<select name="paymentType" class="select2" style="width:120px;">
<option value="">전체</option>
<option value="N">유상</option>
<option value="Y">무상</option>
</select>
</td>
<td class="label"><label for="">품번품명S/N</label></td>
<td><input type="text" name="product_keyword" /></td>
<td class="label"><label for="">수주상태</label></td>
<td><select name="orderStatus" class="select2" style="width:120px;"><option value="">전체</option>${codeMap.orderStatusList}</select></td>
<td class="label"><label for="">발주번호</label></td>
<td><input type="text" name="poNo" /></td>
</tr>
<tr>
<td class="label"><label for="">요청납기</label></td>
<td><input type="date" name="requestDateFrom" /> ~ <input type="date" name="requestDateTo" /></td>
<td class="label"><label for="">발주일</label></td>
<td><input type="date" name="orderDateFrom" /> ~ <input type="date" name="orderDateTo" /></td>
<td class="label"><label for="">출하대기 상태</label></td>
<td><select name="shippingStatus" class="select2" style="width:120px;"><option value="">전체</option>${codeMap.shippingStatusList}</select></td>
<td class="label"><label for="">출고일</label></td>
<td><input type="date" name="shippingDateFrom" /> ~ <input type="date" name="shippingDateTo" /></td>
</tr>
<tr>
<td class="label"><label for="">출고방법</label></td>
<td>
<select name="shippingMethod" class="select2" style="width:120px;">
<option value="">전체</option>
<option value="DIRECT">직납</option>
<option value="PARCEL">택배</option>
</select>
</td>
<td class="label"><label for="">담당자</label></td>
<td><select name="manager" class="select2" style="width:120px;"><option value="">전체</option>${codeMap.managerList}</select></td>
<td class="label"><label for="">인도조건</label></td>
<td>
<select name="incoterms" class="select2" style="width:120px;">
<option value="">전체</option>
<option value="EXW">EXW</option>
<option value="FOB">FOB</option>
<option value="CIF">CIF</option>
<option value="DDP">DDP</option>
</select>
</td>
</tr>
<tr>
<td class="label"><label for="">출하대기 상태</label></td>
<td><select name="shippingStatus" class="select2" style="width:120px;"><option value="">전체</option>${codeMap.shippingStatusList}</select></td>
<td class="label"><label for="">출고방법</label></td>
<td>
<select name="shippingMethod" class="select2" style="width:120px;">
<option value="">전체</option>
<option value="DIRECT">직납</option>
<option value="PARCEL">택배</option>
</select>
</td>
<td class="label"><label for="">요청납기</label></td>
<td colspan="3"><input type="date" name="requestDateFrom" /> ~ <input type="date" name="requestDateTo" /></td>
</tr>
<tr>
<td class="label"><label for="">발주일</label></td>
<td colspan="3"><input type="date" name="orderDateFrom" /> ~ <input type="date" name="orderDateTo" /></td>
<td class="label"><label for="">출고일</label></td>
<td colspan="3"><input type="date" name="shippingDateFrom" /> ~ <input type="date" name="shippingDateTo" /></td>
</tr>
<select name="incoterms" class="select2" style="width:120px;">
<option value="">전체</option>
<option value="EXW">EXW</option>
<option value="FOB">FOB</option>
<option value="CIF">CIF</option>
<option value="DDP">DDP</option>
</select>
</td>
<td colspan="2"></td>
</tr>
</table>
</div>
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
</div>
</div>
</div>
</form>
</body>
</form>
</body>
</html>

View File

@@ -0,0 +1,114 @@
<%@ 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>
<script>
$(document).ready(function() {
// select2 초기화
$('.select2').select2();
// 달력 초기화
fnc_makeDatepick();
// 닫기 버튼
$("#btnClose").click(function() {
window.close();
});
// 저장 버튼
$("#btnSave").click(function() {
// 저장 로직은 추후 구현
alert("저장 기능은 구현 예정입니다.");
});
});
</script>
</head>
<body>
<form name="form1" id="form1" action="" method="post">
<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="serialNo">S/N</label></td>
<td class="input_sub_title">
<input type="text" name="serialNo" id="serialNo" style="width:100%;" />
</td>
<td class="input_title"><label for="shippingDate">* 출고일</label></td>
<td class="input_sub_title">
<input type="text" id="shippingDate" name="shippingDate" required reqTitle="출고일" class="date_icon" style="width: 100px !important;background-color:#fff;" autocomplete="off" />
</td>
</tr>
<tr>
<td class="input_title"><label for="shippingMethod">출고방법</label></td>
<td class="input_sub_title">
<select name="shippingMethod" id="shippingMethod" type="select" style="width:100%;" class="select2">
<option value="">선택</option>
<option value="D_D">내수/직납</option>
<option value="D_P">내수/택배</option>
<option value="D_E">내수/기타</option>
<option value="E">수출</option>
</select>
</td>
<td class="input_title"><label for="manager">담당자</label></td>
<td class="input_sub_title">
<select name="manager" id="manager" type="select" style="width:100%;" class="select2">
<option value="">선택</option>
${codeMap.managerList}
</select>
</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%;" />
</td>
<td class="input_title"><label for="incoterms">인도조건</label></td>
<td class="input_sub_title">
<select name="incoterms" id="incoterms" type="select" style="width:100%;" class="select2">
<option value="">선택</option>
<option value="FOB">FOB</option>
<option value="EXW">EXW</option>
<option value="CIF">CIF</option>
<option value="DDP">DDP</option>
<option value="DAP">DAP</option>
</select>
</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>

33
plan.md Normal file
View File

@@ -0,0 +1,33 @@
# 프로젝트: 판매 관리 기능 개발
## 개요
판매 관리 페이지의 UI를 개선하고, 판매 등록 및 조회 기능을 TDD(테스트 주도 개발) 원칙에 따라 개발합니다.
## 핵심 기능
1. 판매 관리 페이지 UI 구현
2. 판매 등록 팝업 기능
3. 판매 목록 조회 및 필터링
4. 데이터베이스 연동 및 CRUD 기능 구현
## 테스트 계획
### 1단계: UI 및 기본 기능
- [x] 판매 관리 페이지 기본 UI 생성
- [x] 필터 및 테이블 컬럼 구성
- [x] 컨트롤러 URL 매핑 및 이름 재정의
- [x] '판매등록' 버튼 추가
- [ ] **테스트 1**: '판매등록' 버튼 클릭 시 팝업창이 정상적으로 뜨는가?
- [ ] **테스트 2**: '출고방법' 드롭다운에 DB 데이터가 정상적으로 표시되는가?
- [ ] **테스트 3**: '인도조건' 드롭다운에 DB 데이터가 정상적으로 표시되는가?
### 2단계: 데이터 처리
- [ ] **테스트 4**: 판매 등록 팝업에서 '저장' 버튼 클릭 시 데이터가 DB에 저장되는가?
- [ ] **테스트 5**: 판매 목록 조회 시 DB에서 데이터를 가져와 그리드에 표시하는가?
- [ ] **테스트 6**: 검색 조건으로 필터링했을 때 결과가 정확히 조회되는가?
## 에러 처리 계획
- 필수 입력값 누락 시 유효성 검사 및 알림
- 데이터 저장 실패 시 에러 메시지 처리
## 진행 상태
- 완료된 테스트는 [x]로 표시합니다.
- 현재 진행 중인 테스트는 **[진행중]** 으로 표시합니다.

View File

@@ -99,8 +99,8 @@ public class SalesNcollectMgmtController {
* @param paramMap - 검색 정보
* @return String
*/
@RequestMapping(value = "/contractMgmt/salesMgmtList.do", method = RequestMethod.GET)
public String showSalesMgmtList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
@RequestMapping(value = "/revenueMgmt/revenueList.do", method = RequestMethod.GET)
public String showRevenueMgmtList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
try {
// 코드정보
Map<String, Object> codeMap = new HashMap<String, Object>();
@@ -143,6 +143,46 @@ public class SalesNcollectMgmtController {
} catch (Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesMgmt/revenueMgmtList";
}
/**
* <pre>
* 신규 매출관리 목록 페이지
* </pre>
* @param request
* @param paramMap - 검색 정보
* @return String
*/
@RequestMapping(value = "/contractMgmt/salesMgmtList.do", method = RequestMethod.GET)
public String showSalesMgmtList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
try {
// 코드정보 (기존 로직과 동일하게 설정 가능)
Map<String, Object> codeMap = new HashMap<String, Object>();
// 주문유형
codeMap.put("orderTypeList",
salesMgmtCommonService.bizMakeOptionList("GE", "", "salesMgmtCommon.getCodeList"));
// 제품구분
codeMap.put("productTypeList",
salesMgmtCommonService.bizMakeOptionList("", "", "salesMgmtCommon.getGoodsList"));
// 국내/해외
codeMap.put("nationList",
salesMgmtCommonService.bizMakeOptionList("AR", "", "salesMgmtCommon.getCodeList"));
// 수주상태
codeMap.put("orderStatusList",
commonService.bizMakeOptionList("0000932", "", "common.getCodeselect"));
// 출하대기 상태
codeMap.put("shippingStatusList",
salesMgmtCommonService.bizMakeOptionList("SH", "", "salesMgmtCommon.getCodeList"));
// 담당자
codeMap.put("managerList",
salesMgmtCommonService.bizMakeOptionList("", "", "salesMgmtCommon.getSalesmanList"));
request.setAttribute("codeMap", codeMap);
} catch (Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesMgmt/salesMgmtList";
}
@@ -155,7 +195,7 @@ public class SalesNcollectMgmtController {
* @return Map
*/
@ResponseBody
@RequestMapping(value = "/salesMgmt/salesMgmtGridList.do", method = RequestMethod.POST)
@RequestMapping(value = "/revenueMgmt/revenueGridList.do", method = RequestMethod.POST)
public Map<String, Object> salesMgmtGridList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
@@ -175,6 +215,30 @@ public class SalesNcollectMgmtController {
return resultMap;
}
/**
* <pre>
* 판매등록 폼 팝업
* </pre>
* @param request
* @param paramMap
* @return String
*/
@RequestMapping(value = "/salesMgmt/salesRegForm.do", method = RequestMethod.GET)
public String showSalesRegForm(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
try {
Map<String, Object> codeMap = new HashMap<String, Object>();
// 담당자
codeMap.put("managerList",
salesMgmtCommonService.bizMakeOptionList("", "", "salesMgmtCommon.getSalesmanList"));
request.setAttribute("codeMap", codeMap);
} catch (Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesMgmt/salesRegForm";
}
/**
* <pre>
* 계약관리 목록 조회