영업관리 화면 수정 등...
This commit is contained in:
@@ -253,13 +253,13 @@ function fn_search(){
|
||||
_tabulGrid.on("renderComplete", function(){
|
||||
fn_calculateTotalFromGrid();
|
||||
// 그리드 렌더링 완료 후 높이 계산
|
||||
fnc_calculateContentHeight("gridDiv", 20);
|
||||
fnc_calculateContentHeight("gridDiv", 30);
|
||||
});
|
||||
}
|
||||
|
||||
// 윈도우 리사이즈 이벤트 (한 번만 등록)
|
||||
$(window).off("resize.gridHeight").on("resize.gridHeight", function() {
|
||||
fnc_calculateContentHeight("gridDiv", 20);
|
||||
fnc_calculateContentHeight("gridDiv", 30);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -33,11 +33,14 @@
|
||||
$(document).ready(function(){
|
||||
_fnc_datepick();
|
||||
|
||||
// 그리드 높이 동적 계산 (Total 합계 영역 + 여유 공간 80px)
|
||||
fnc_calculateContentHeight("gridDiv", 80);
|
||||
$(window).resize(function() {
|
||||
fnc_calculateContentHeight("gridDiv", 80);
|
||||
});
|
||||
// DOM 렌더링 완료 후 그리드 높이 계산
|
||||
setTimeout(function() {
|
||||
fnc_calculateContentHeight("gridDiv", 10);
|
||||
}, 100);
|
||||
|
||||
$(window).resize(function() {
|
||||
fnc_calculateContentHeight("gridDiv", 10);
|
||||
});
|
||||
|
||||
// select2가 로드되었을 때만 초기화
|
||||
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_DEADLINE_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 : 'center', width : '100', title : '제품구분', field : 'PRODUCT_TYPE'},
|
||||
{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',
|
||||
formatter: "money", formatterParams: {thousand: ",", symbolAfter: "", precision: 2}
|
||||
},
|
||||
{headerHozAlign : 'center', hozAlign : 'center', 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 : 'S/N', field : 'SERIAL_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 : '80', title : '유/무상', field : 'PAYMENT_TYPE'},
|
||||
|
||||
@@ -12,6 +12,14 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title><%=Constants.SYSTEM_NAME%></title>
|
||||
<style>
|
||||
body, html {
|
||||
overflow-x: hidden;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
// Excel 버튼 이벤트 등록 함수
|
||||
@@ -30,19 +38,14 @@
|
||||
_fnc_datepick(); // 날짜 선택기 초기화
|
||||
$('.select2').select2(); // select2 초기화
|
||||
|
||||
// 그리드 높이 동적 계산 (Total 합계 영역 + 여유 공간 80px)
|
||||
fnc_calculateContentHeight("gridDiv", 80);
|
||||
|
||||
// 디버그: 계산된 높이 확인
|
||||
console.log("=== 그리드 높이 디버그 ===");
|
||||
console.log("윈도우 높이:", $(window).height());
|
||||
console.log("#gridDiv 높이:", $('#gridDiv').height());
|
||||
console.log("#mainGrid 높이:", $('#mainGrid').height());
|
||||
|
||||
$(window).resize(function() {
|
||||
fnc_calculateContentHeight("gridDiv", 80);
|
||||
console.log("리사이즈 후 #gridDiv 높이:", $('#gridDiv').height());
|
||||
});
|
||||
// DOM 렌더링 완료 후 그리드 높이 계산
|
||||
setTimeout(function() {
|
||||
fnc_calculateContentHeight("gridDiv", 10);
|
||||
}, 100);
|
||||
|
||||
$(window).resize(function() {
|
||||
fnc_calculateContentHeight("gridDiv", 10);
|
||||
});
|
||||
|
||||
// 품번/품명 Select2 AJAX 초기화
|
||||
initPartSelect2Ajax("#search_partNo", "#search_partName", "#search_partObjId", {
|
||||
@@ -330,9 +333,9 @@ var columns = [
|
||||
{headerHozAlign : 'center', hozAlign : 'right', width : '100', title : '환율', field : 'SALES_EXCHANGE_RATE',
|
||||
formatter: "money", formatterParams: {thousand: ",", symbolAfter: "", precision: 2}
|
||||
},
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : 'S/N', field : 'SERIAL_NO'},
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '품번', field : 'PRODUCT_NO'},
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '거래명세서', field : 'TRANSACTION_STATEMENT',
|
||||
{headerHozAlign : 'center', hozAlign : 'left', width : '120', title : 'S/N', field : 'SERIAL_NO'},
|
||||
{headerHozAlign : 'center', hozAlign : 'left', width : '120', title : '품번', field : 'PRODUCT_NO'},
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '거래명세서', field : 'TRANSACTION_STATEMENT',
|
||||
formatter: function(cell) {
|
||||
var data = cell.getRow().getData();
|
||||
var projectNo = data.PROJECT_NO;
|
||||
|
||||
@@ -1201,12 +1201,13 @@ public class ProductionPlanningController extends BaseService {
|
||||
mbomDetailList = commonService.selectList("partMng.getBOMTreeList", request, bomParam);
|
||||
System.out.println("할당된 E-BOM 조회 - mbomDetailList size: " + (mbomDetailList != null ? mbomDetailList.size() : 0));
|
||||
} else if("ASSIGNED_MBOM".equals(bomDataType)) {
|
||||
// 할당된 M-BOM: MBOM_DETAIL 테이블에서 조회 (ORDER_QTY, PRODUCTION_QTY 포함)
|
||||
// 할당된 M-BOM: 구조만 조회 (생산 정보 제외)
|
||||
Map<String, Object> mbomParam = new HashMap<>();
|
||||
mbomParam.put("mbomHeaderObjid", bomReportObjid);
|
||||
List tempList = commonService.selectList("productionplanning.getSavedMbomTreeList", request, mbomParam);
|
||||
mbomDetailList = (List<Map<String, Object>>) (List<?>) CommonUtils.keyChangeUpperList(tempList);
|
||||
System.out.println("할당된 M-BOM 조회 - mbomDetailList size: " + (mbomDetailList != null ? mbomDetailList.size() : 0));
|
||||
List tempList = commonService.selectList("productionplanning.getMbomStructureOnly", request, mbomParam);
|
||||
// UpperKeyMap으로 이미 대문자 변환되어 오므로 keyChangeUpperList 불필요
|
||||
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
|
||||
</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 존재 여부 확인 -->
|
||||
<select id="checkMbomHeaderExists" parameterType="map" resultType="int">
|
||||
/* productionplanning.checkMbomHeaderExists - M-BOM 존재 확인 */
|
||||
|
||||
Reference in New Issue
Block a user