영업관리 화면 수정 등...
This commit is contained in:
@@ -253,13 +253,13 @@ function fn_search(){
|
|||||||
_tabulGrid.on("renderComplete", function(){
|
_tabulGrid.on("renderComplete", function(){
|
||||||
fn_calculateTotalFromGrid();
|
fn_calculateTotalFromGrid();
|
||||||
// 그리드 렌더링 완료 후 높이 계산
|
// 그리드 렌더링 완료 후 높이 계산
|
||||||
fnc_calculateContentHeight("gridDiv", 20);
|
fnc_calculateContentHeight("gridDiv", 30);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 윈도우 리사이즈 이벤트 (한 번만 등록)
|
// 윈도우 리사이즈 이벤트 (한 번만 등록)
|
||||||
$(window).off("resize.gridHeight").on("resize.gridHeight", function() {
|
$(window).off("resize.gridHeight").on("resize.gridHeight", function() {
|
||||||
fnc_calculateContentHeight("gridDiv", 20);
|
fnc_calculateContentHeight("gridDiv", 30);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,11 +33,14 @@
|
|||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
_fnc_datepick();
|
_fnc_datepick();
|
||||||
|
|
||||||
// 그리드 높이 동적 계산 (Total 합계 영역 + 여유 공간 80px)
|
// DOM 렌더링 완료 후 그리드 높이 계산
|
||||||
fnc_calculateContentHeight("gridDiv", 80);
|
setTimeout(function() {
|
||||||
$(window).resize(function() {
|
fnc_calculateContentHeight("gridDiv", 10);
|
||||||
fnc_calculateContentHeight("gridDiv", 80);
|
}, 100);
|
||||||
});
|
|
||||||
|
$(window).resize(function() {
|
||||||
|
fnc_calculateContentHeight("gridDiv", 10);
|
||||||
|
});
|
||||||
|
|
||||||
// select2가 로드되었을 때만 초기화
|
// select2가 로드되었을 때만 초기화
|
||||||
if(typeof $.fn !== 'undefined' && typeof $.fn.select2 === 'function') {
|
if(typeof $.fn !== 'undefined' && typeof $.fn.select2 === 'function') {
|
||||||
@@ -200,7 +203,7 @@ var columns = [
|
|||||||
//{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '매출마감', field : 'SALES_STATUS'},
|
//{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '매출마감', field : 'SALES_STATUS'},
|
||||||
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '매출마감', field : 'SALES_DEADLINE_DATE'},
|
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '매출마감', field : 'SALES_DEADLINE_DATE'},
|
||||||
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '발주일', field : 'ORDER_DATE'},
|
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '발주일', field : 'ORDER_DATE'},
|
||||||
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '발주번호', field : 'PO_NO'},
|
{headerHozAlign : 'center', hozAlign : 'left', width : '120', title : '발주번호', field : 'PO_NO'},
|
||||||
{headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '고객사', field : 'CUSTOMER'},
|
{headerHozAlign : 'center', hozAlign : 'left', width : '150', title : '고객사', field : 'CUSTOMER'},
|
||||||
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '제품구분', field : 'PRODUCT_TYPE'},
|
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '제품구분', field : 'PRODUCT_TYPE'},
|
||||||
{headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품명', field : 'PRODUCT_NAME'},
|
{headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품명', field : 'PRODUCT_NAME'},
|
||||||
@@ -228,8 +231,8 @@ var columns = [
|
|||||||
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '환율', field : 'SALES_EXCHANGE_RATE',
|
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '환율', field : 'SALES_EXCHANGE_RATE',
|
||||||
formatter: "money", formatterParams: {thousand: ",", symbolAfter: "", precision: 2}
|
formatter: "money", formatterParams: {thousand: ",", symbolAfter: "", precision: 2}
|
||||||
},
|
},
|
||||||
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : 'S/N', field : 'SERIAL_NO'},
|
{headerHozAlign : 'center', hozAlign : 'left', width : '120', title : 'S/N', field : 'SERIAL_NO'},
|
||||||
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '품번', field : 'PRODUCT_NO'}
|
{headerHozAlign : 'center', hozAlign : 'left', width : '120', title : '품번', field : 'PRODUCT_NO'}
|
||||||
// 주석처리된 컬럼들 (필요없는 항목)
|
// 주석처리된 컬럼들 (필요없는 항목)
|
||||||
// {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '접수일', field : 'RECEIPT_DATE'},
|
// {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '접수일', field : 'RECEIPT_DATE'},
|
||||||
// {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '유/무상', field : 'PAYMENT_TYPE'},
|
// {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '유/무상', field : 'PAYMENT_TYPE'},
|
||||||
|
|||||||
@@ -12,6 +12,14 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
<title><%=Constants.SYSTEM_NAME%></title>
|
<title><%=Constants.SYSTEM_NAME%></title>
|
||||||
|
<style>
|
||||||
|
body, html {
|
||||||
|
overflow-x: hidden;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// Excel 버튼 이벤트 등록 함수
|
// Excel 버튼 이벤트 등록 함수
|
||||||
@@ -30,19 +38,14 @@
|
|||||||
_fnc_datepick(); // 날짜 선택기 초기화
|
_fnc_datepick(); // 날짜 선택기 초기화
|
||||||
$('.select2').select2(); // select2 초기화
|
$('.select2').select2(); // select2 초기화
|
||||||
|
|
||||||
// 그리드 높이 동적 계산 (Total 합계 영역 + 여유 공간 80px)
|
// DOM 렌더링 완료 후 그리드 높이 계산
|
||||||
fnc_calculateContentHeight("gridDiv", 80);
|
setTimeout(function() {
|
||||||
|
fnc_calculateContentHeight("gridDiv", 10);
|
||||||
// 디버그: 계산된 높이 확인
|
}, 100);
|
||||||
console.log("=== 그리드 높이 디버그 ===");
|
|
||||||
console.log("윈도우 높이:", $(window).height());
|
$(window).resize(function() {
|
||||||
console.log("#gridDiv 높이:", $('#gridDiv').height());
|
fnc_calculateContentHeight("gridDiv", 10);
|
||||||
console.log("#mainGrid 높이:", $('#mainGrid').height());
|
});
|
||||||
|
|
||||||
$(window).resize(function() {
|
|
||||||
fnc_calculateContentHeight("gridDiv", 80);
|
|
||||||
console.log("리사이즈 후 #gridDiv 높이:", $('#gridDiv').height());
|
|
||||||
});
|
|
||||||
|
|
||||||
// 품번/품명 Select2 AJAX 초기화
|
// 품번/품명 Select2 AJAX 초기화
|
||||||
initPartSelect2Ajax("#search_partNo", "#search_partName", "#search_partObjId", {
|
initPartSelect2Ajax("#search_partNo", "#search_partName", "#search_partObjId", {
|
||||||
@@ -330,9 +333,9 @@ var columns = [
|
|||||||
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '환율', field : 'SALES_EXCHANGE_RATE',
|
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '환율', field : 'SALES_EXCHANGE_RATE',
|
||||||
formatter: "money", formatterParams: {thousand: ",", symbolAfter: "", precision: 2}
|
formatter: "money", formatterParams: {thousand: ",", symbolAfter: "", precision: 2}
|
||||||
},
|
},
|
||||||
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : 'S/N', field : 'SERIAL_NO'},
|
{headerHozAlign : 'center', hozAlign : 'left', width : '120', title : 'S/N', field : 'SERIAL_NO'},
|
||||||
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '품번', field : 'PRODUCT_NO'},
|
{headerHozAlign : 'center', hozAlign : 'left', width : '120', title : '품번', field : 'PRODUCT_NO'},
|
||||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '거래명세서', field : 'TRANSACTION_STATEMENT',
|
{headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '거래명세서', field : 'TRANSACTION_STATEMENT',
|
||||||
formatter: function(cell) {
|
formatter: function(cell) {
|
||||||
var data = cell.getRow().getData();
|
var data = cell.getRow().getData();
|
||||||
var projectNo = data.PROJECT_NO;
|
var projectNo = data.PROJECT_NO;
|
||||||
|
|||||||
@@ -1201,12 +1201,13 @@ public class ProductionPlanningController extends BaseService {
|
|||||||
mbomDetailList = commonService.selectList("partMng.getBOMTreeList", request, bomParam);
|
mbomDetailList = commonService.selectList("partMng.getBOMTreeList", request, bomParam);
|
||||||
System.out.println("할당된 E-BOM 조회 - mbomDetailList size: " + (mbomDetailList != null ? mbomDetailList.size() : 0));
|
System.out.println("할당된 E-BOM 조회 - mbomDetailList size: " + (mbomDetailList != null ? mbomDetailList.size() : 0));
|
||||||
} else if("ASSIGNED_MBOM".equals(bomDataType)) {
|
} else if("ASSIGNED_MBOM".equals(bomDataType)) {
|
||||||
// 할당된 M-BOM: MBOM_DETAIL 테이블에서 조회 (ORDER_QTY, PRODUCTION_QTY 포함)
|
// 할당된 M-BOM: 구조만 조회 (생산 정보 제외)
|
||||||
Map<String, Object> mbomParam = new HashMap<>();
|
Map<String, Object> mbomParam = new HashMap<>();
|
||||||
mbomParam.put("mbomHeaderObjid", bomReportObjid);
|
mbomParam.put("mbomHeaderObjid", bomReportObjid);
|
||||||
List tempList = commonService.selectList("productionplanning.getSavedMbomTreeList", request, mbomParam);
|
List tempList = commonService.selectList("productionplanning.getMbomStructureOnly", request, mbomParam);
|
||||||
mbomDetailList = (List<Map<String, Object>>) (List<?>) CommonUtils.keyChangeUpperList(tempList);
|
// UpperKeyMap으로 이미 대문자 변환되어 오므로 keyChangeUpperList 불필요
|
||||||
System.out.println("할당된 M-BOM 조회 - mbomDetailList size: " + (mbomDetailList != null ? mbomDetailList.size() : 0));
|
mbomDetailList = (List<Map<String, Object>>) (List<?>) tempList;
|
||||||
|
System.out.println("할당된 M-BOM 구조만 조회 - size: " + (mbomDetailList != null ? mbomDetailList.size() : 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4095,6 +4095,166 @@
|
|||||||
ORDER BY V.PATH2
|
ORDER BY V.PATH2
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- M-BOM 구조만 조회 (할당용 - 생산 정보 제외) -->
|
||||||
|
<select id="getMbomStructureOnly" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||||
|
/* productionplanning.getMbomStructureOnly - M-BOM 구조만 조회 (생산 정보 제외) */
|
||||||
|
WITH RECURSIVE VIEW_BOM(
|
||||||
|
MBOM_HEADER_OBJID,
|
||||||
|
OBJID,
|
||||||
|
PARENT_OBJID,
|
||||||
|
CHILD_OBJID,
|
||||||
|
PART_OBJID,
|
||||||
|
PART_NO,
|
||||||
|
PART_NAME,
|
||||||
|
QTY,
|
||||||
|
ITEM_QTY,
|
||||||
|
QTY_TEMP,
|
||||||
|
REGDATE,
|
||||||
|
SEQ,
|
||||||
|
STATUS,
|
||||||
|
LEV,
|
||||||
|
PATH,
|
||||||
|
PATH2,
|
||||||
|
CYCLE,
|
||||||
|
UNIT,
|
||||||
|
WRITER
|
||||||
|
) AS (
|
||||||
|
SELECT
|
||||||
|
A.MBOM_HEADER_OBJID,
|
||||||
|
A.OBJID,
|
||||||
|
A.PARENT_OBJID,
|
||||||
|
A.CHILD_OBJID,
|
||||||
|
A.PART_OBJID,
|
||||||
|
A.PART_NO,
|
||||||
|
A.PART_NAME,
|
||||||
|
A.QTY,
|
||||||
|
A.QTY,
|
||||||
|
A.QTY,
|
||||||
|
A.REGDATE,
|
||||||
|
A.SEQ,
|
||||||
|
A.STATUS,
|
||||||
|
1,
|
||||||
|
ARRAY [A.CHILD_OBJID::TEXT],
|
||||||
|
ARRAY [A.SEQ::TEXT],
|
||||||
|
FALSE,
|
||||||
|
A.UNIT,
|
||||||
|
A.WRITER
|
||||||
|
FROM
|
||||||
|
MBOM_DETAIL A
|
||||||
|
WHERE 1=1
|
||||||
|
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
|
||||||
|
AND A.MBOM_HEADER_OBJID = #{mbomHeaderObjid}
|
||||||
|
AND A.STATUS = 'ACTIVE'
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
B.MBOM_HEADER_OBJID,
|
||||||
|
B.OBJID,
|
||||||
|
B.PARENT_OBJID,
|
||||||
|
B.CHILD_OBJID,
|
||||||
|
B.PART_OBJID,
|
||||||
|
B.PART_NO,
|
||||||
|
B.PART_NAME,
|
||||||
|
B.QTY,
|
||||||
|
B.QTY,
|
||||||
|
B.QTY,
|
||||||
|
B.REGDATE,
|
||||||
|
B.SEQ,
|
||||||
|
B.STATUS,
|
||||||
|
LEV + 1,
|
||||||
|
PATH||B.CHILD_OBJID::TEXT,
|
||||||
|
PATH2||B.SEQ::TEXT,
|
||||||
|
B.PARENT_OBJID = ANY(PATH),
|
||||||
|
B.UNIT,
|
||||||
|
B.WRITER
|
||||||
|
FROM
|
||||||
|
MBOM_DETAIL B
|
||||||
|
JOIN
|
||||||
|
VIEW_BOM
|
||||||
|
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
|
||||||
|
AND VIEW_BOM.MBOM_HEADER_OBJID = B.MBOM_HEADER_OBJID
|
||||||
|
AND B.STATUS = 'ACTIVE'
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
V.MBOM_HEADER_OBJID AS BOM_REPORT_OBJID,
|
||||||
|
V.OBJID,
|
||||||
|
V.PARENT_OBJID,
|
||||||
|
V.CHILD_OBJID,
|
||||||
|
V.PART_OBJID,
|
||||||
|
V.PART_OBJID AS LAST_PART_OBJID,
|
||||||
|
V.PART_OBJID AS BOM_LAST_PART_OBJID,
|
||||||
|
V.PART_NO,
|
||||||
|
V.PART_NAME,
|
||||||
|
V.QTY,
|
||||||
|
V.ITEM_QTY,
|
||||||
|
V.QTY_TEMP,
|
||||||
|
V.LEV AS LEVEL,
|
||||||
|
(SELECT COUNT(*) FROM MBOM_DETAIL WHERE PARENT_OBJID = V.CHILD_OBJID) AS SUB_PART_CNT,
|
||||||
|
V.SEQ,
|
||||||
|
V.STATUS,
|
||||||
|
V.UNIT,
|
||||||
|
V.WRITER,
|
||||||
|
TO_CHAR(V.REGDATE, 'YYYY-MM-DD HH24:MI:SS') AS REGDATE,
|
||||||
|
-- 생산 정보는 모두 NULL
|
||||||
|
NULL AS SUPPLY_TYPE,
|
||||||
|
NULL AS MAKE_OR_BUY,
|
||||||
|
NULL AS RAW_MATERIAL_NO,
|
||||||
|
NULL AS RAW_MATERIAL_SPEC,
|
||||||
|
NULL AS RAW_MATERIAL,
|
||||||
|
NULL AS SIZE,
|
||||||
|
NULL AS PROCESSING_VENDOR,
|
||||||
|
NULL AS PROCESSING_DEADLINE,
|
||||||
|
NULL AS GRINDING_DEADLINE,
|
||||||
|
NULL AS REQUIRED_QTY,
|
||||||
|
NULL AS ORDER_QTY,
|
||||||
|
NULL AS PRODUCTION_QTY,
|
||||||
|
NULL AS STOCK_QTY,
|
||||||
|
NULL AS SHORTAGE_QTY,
|
||||||
|
NULL AS VENDOR,
|
||||||
|
NULL AS UNIT_PRICE,
|
||||||
|
NULL AS TOTAL_PRICE,
|
||||||
|
NULL AS CURRENCY,
|
||||||
|
NULL AS LEAD_TIME,
|
||||||
|
NULL AS MIN_ORDER_QTY,
|
||||||
|
NULL AS EDITER,
|
||||||
|
NULL AS EDIT_DATE,
|
||||||
|
NULL AS REMARK,
|
||||||
|
-- E-BOM 호환 필드
|
||||||
|
NULL AS PARENT_PART_NO,
|
||||||
|
NULL AS CONTRACT_OBJID,
|
||||||
|
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS ROOT_OBJID,
|
||||||
|
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS SUB_ROOT_OBJID,
|
||||||
|
1 AS LEAF,
|
||||||
|
-- PART_MNG 테이블에서 파트 속성 정보
|
||||||
|
P.SPEC,
|
||||||
|
P.MATERIAL,
|
||||||
|
P.WEIGHT,
|
||||||
|
P.PART_TYPE,
|
||||||
|
P.REVISION,
|
||||||
|
P.MAKER,
|
||||||
|
P.THICKNESS,
|
||||||
|
P.WIDTH,
|
||||||
|
P.HEIGHT,
|
||||||
|
P.OUT_DIAMETER,
|
||||||
|
P.IN_DIAMETER,
|
||||||
|
P.LENGTH,
|
||||||
|
P.SOURCING_CODE,
|
||||||
|
P.HEAT_TREATMENT_HARDNESS,
|
||||||
|
P.HEAT_TREATMENT_METHOD,
|
||||||
|
P.SURFACE_TREATMENT,
|
||||||
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.UNIT) AS UNIT_TITLE,
|
||||||
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.PART_TYPE) AS PART_TYPE_TITLE,
|
||||||
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT,
|
||||||
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT,
|
||||||
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT,
|
||||||
|
V.LEV
|
||||||
|
FROM VIEW_BOM V
|
||||||
|
INNER JOIN PART_MNG P ON P.OBJID = V.PART_OBJID
|
||||||
|
WHERE 1=1
|
||||||
|
ORDER BY V.PATH2
|
||||||
|
</select>
|
||||||
|
|
||||||
<!-- MBOM_HEADER 테이블에 OBJID 존재 여부 확인 -->
|
<!-- MBOM_HEADER 테이블에 OBJID 존재 여부 확인 -->
|
||||||
<select id="checkMbomHeaderExists" parameterType="map" resultType="int">
|
<select id="checkMbomHeaderExists" parameterType="map" resultType="int">
|
||||||
/* productionplanning.checkMbomHeaderExists - M-BOM 존재 확인 */
|
/* productionplanning.checkMbomHeaderExists - M-BOM 존재 확인 */
|
||||||
|
|||||||
Reference in New Issue
Block a user