이봄리스트>이봄등록 csv 업로드시 항목수량 컬럼 업로드 안되는 버그수정
This commit is contained in:
@@ -434,17 +434,8 @@ var gridFn = {
|
||||
,datatype : "json"
|
||||
,postData:{"targetObjId":"${objid}","docType":"PART_EXCEL_IMPORT","OBJID":"${CONTRACT_OBJID}"}
|
||||
,loadComplete : function(data) {
|
||||
// CSV 파일에서만 LEVEL 값을 PARENT_PART_NO 컬럼에 표시
|
||||
if(data && data.rows) {
|
||||
for(var i = 0; i < data.rows.length; i++) {
|
||||
var row = data.rows[i];
|
||||
// CSV 파일이고 LEVEL 값이 있는 경우
|
||||
if(row.IS_CSV === 'Y' && row.LEVEL && row.LEVEL !== '') {
|
||||
// LEVEL 값을 PARENT_PART_NO 컬럼에 표시 (화면용)
|
||||
grid.jqGrid('setCell', row.id, 'PARENT_PART_NO', row.LEVEL);
|
||||
}
|
||||
}
|
||||
}
|
||||
// CSV 파일: 모품번을 그대로 표시 (수정 불필요)
|
||||
// PARENT_PART_NO 컬럼에 이미 모품번이 들어있음
|
||||
gridFn.footerSummary();
|
||||
}
|
||||
,gridComplete : function() {
|
||||
@@ -516,108 +507,103 @@ function fn_checkDuplicatePartNo(){
|
||||
function fn_save(){
|
||||
var ids = grid.jqGrid("getDataIDs");
|
||||
|
||||
// 필수 필드 검증 (제품구분, 품번, 품명)
|
||||
if(!fnc_valitate("form1")){
|
||||
return;
|
||||
}
|
||||
|
||||
// 품번 중복 검증 (PART_BOM_REPORT 테이블 - 헤더 품번)
|
||||
if(fn_checkDuplicatePartNo()){
|
||||
Swal.fire('입력한 품번이 이미 존재합니다. 다른 품번을 입력해주세요.');
|
||||
$('#bom_part_no').focus();
|
||||
return;
|
||||
}
|
||||
|
||||
// 그리드에 데이터가 있는 경우에만 검증 수행
|
||||
if(ids!=""){
|
||||
if(fnc_valitate("form1")){
|
||||
var valid = true;
|
||||
var existPart = true;
|
||||
var part = "";
|
||||
if (fnc_isEmpty(${bomInfo.OBJID})) {
|
||||
var partNo1 = "";
|
||||
|
||||
var valid = true;
|
||||
var existPart = true;
|
||||
var part = "";
|
||||
if (fnc_isEmpty(${bomInfo.OBJID})) {
|
||||
var partNo1 = "";
|
||||
|
||||
gridFn.closeEdit();
|
||||
$.each(grid.getRowData(), function(i, d) {
|
||||
if (i == 0) {
|
||||
partNo1 = d["PART_NO"];
|
||||
}
|
||||
var partType = d["PART_TYPE"];
|
||||
var partNo = d["PART_NO"];
|
||||
|
||||
if (partType == '0001788') {
|
||||
if (!fn_existPartNo(partNo)) {
|
||||
existPart = false;
|
||||
part = partNo;
|
||||
return false; // Exit the loop
|
||||
}
|
||||
}
|
||||
|
||||
if(!fnc_isEmpty(d["NOTE"])){
|
||||
valid = false;
|
||||
}
|
||||
});
|
||||
gridFn.opennEdit();
|
||||
|
||||
var project_no = $("#project_name").find("option:selected").text();
|
||||
if (partNo1.indexOf(project_no) < 0) {
|
||||
valid = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!existPart) {
|
||||
Swal.fire(part+'품번에 해당하는 구매품표준이 없습니다. 확인해 주세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!valid) {
|
||||
Swal.fire('1레벨 품번에 프로젝트번호가 없습니다. 확인해 주세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
// 품번 중복 검증 (PART_BOM_REPORT 테이블 - 헤더 품번)
|
||||
if(fn_checkDuplicatePartNo()){
|
||||
Swal.fire('입력한 품번이 이미 존재합니다. 다른 품번을 입력해주세요.');
|
||||
$('#bom_part_no').focus();
|
||||
return;
|
||||
}
|
||||
|
||||
var existsDup = false;
|
||||
var ARR_APPLICATION_PROJECT_NO = new Array();
|
||||
$(".APPLICATION_PROJECT_NO").each(function(){
|
||||
for(var i=0; i<ARR_APPLICATION_PROJECT_NO.length; i++){
|
||||
if(this.value != '' && ARR_APPLICATION_PROJECT_NO[i] == this.value){
|
||||
existsDup = true;
|
||||
break;
|
||||
gridFn.closeEdit();
|
||||
$.each(grid.getRowData(), function(i, d) {
|
||||
if (i == 0) {
|
||||
partNo1 = d["PART_NO"];
|
||||
}
|
||||
var partType = d["PART_TYPE"];
|
||||
var partNo = d["PART_NO"];
|
||||
|
||||
if (partType == '0001788') {
|
||||
if (!fn_existPartNo(partNo)) {
|
||||
existPart = false;
|
||||
part = partNo;
|
||||
return false; // Exit the loop
|
||||
}
|
||||
}
|
||||
ARR_APPLICATION_PROJECT_NO.push($(this).val());
|
||||
|
||||
if(!fnc_isEmpty(d["NOTE"])){
|
||||
valid = false;
|
||||
}
|
||||
});
|
||||
if(existsDup){
|
||||
Swal.fire('동시적용 프로젝트번호에 중복건이 존재합니다.');
|
||||
return;
|
||||
}
|
||||
gridFn.opennEdit();
|
||||
|
||||
if(confirm("저장 하시겠습니까?")){
|
||||
gridFn.closeEdit();
|
||||
$.ajax({
|
||||
url:"/partMng/partBomApplySave.do"
|
||||
,type:"POST"
|
||||
,data: $("#form1").serialize() + "&jqGrid="+ encodeURIComponent(JSON.stringify(grid.getRowData()))
|
||||
,dataType:"json"
|
||||
,success:function(data){
|
||||
/*
|
||||
if(data =="SUCCESS"){
|
||||
alert("저장되었습니다.");
|
||||
top.opener.fn_search();
|
||||
self.close();
|
||||
};
|
||||
*/
|
||||
console.log(data);
|
||||
if(data && data.RESULT == 'S'){
|
||||
alert("저장되었습니다.");
|
||||
if(typeof opener.fn_search =="function"){ opener.fn_search() };
|
||||
self.close();
|
||||
}else{
|
||||
alert(data.MSG);
|
||||
}
|
||||
}
|
||||
,error: function(jqxhr, status, error){
|
||||
alert('에러가 발생하였습니다. 시스템 관리자에게 문의하여 주세요.');
|
||||
}
|
||||
});
|
||||
var project_no = $("#project_name").find("option:selected").text();
|
||||
if (partNo1.indexOf(project_no) < 0) {
|
||||
valid = false;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
Swal.fire('저장할 데이터가 없습니다.');
|
||||
|
||||
if (!existPart) {
|
||||
Swal.fire(part+'품번에 해당하는 구매품표준이 없습니다. 확인해 주세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!valid) {
|
||||
Swal.fire('1레벨 품번에 프로젝트번호가 없습니다. 확인해 주세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
var existsDup = false;
|
||||
var ARR_APPLICATION_PROJECT_NO = new Array();
|
||||
$(".APPLICATION_PROJECT_NO").each(function(){
|
||||
for(var i=0; i<ARR_APPLICATION_PROJECT_NO.length; i++){
|
||||
if(this.value != '' && ARR_APPLICATION_PROJECT_NO[i] == this.value){
|
||||
existsDup = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
ARR_APPLICATION_PROJECT_NO.push($(this).val());
|
||||
});
|
||||
if(existsDup){
|
||||
Swal.fire('동시적용 프로젝트번호에 중복건이 존재합니다.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 저장 확인 (그리드 데이터가 없어도 저장 가능)
|
||||
if(confirm("저장 하시겠습니까?")){
|
||||
gridFn.closeEdit();
|
||||
$.ajax({
|
||||
url:"/partMng/partBomApplySave.do"
|
||||
,type:"POST"
|
||||
,data: $("#form1").serialize() + "&jqGrid="+ encodeURIComponent(JSON.stringify(grid.getRowData()))
|
||||
,dataType:"json"
|
||||
,success:function(data){
|
||||
console.log(data);
|
||||
if(data && data.RESULT == 'S'){
|
||||
alert("저장되었습니다.");
|
||||
if(typeof opener.fn_search =="function"){ opener.fn_search() };
|
||||
self.close();
|
||||
}else{
|
||||
alert(data.MSG);
|
||||
}
|
||||
}
|
||||
,error: function(jqxhr, status, error){
|
||||
alert('에러가 발생하였습니다. 시스템 관리자에게 문의하여 주세요.');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -403,12 +403,13 @@ function fn_delete() {
|
||||
var selectedData = _tabulGrid.getSelectedData();
|
||||
|
||||
var STATUS = fnc_checkNull(selectedData[0].STATUS);
|
||||
if('deploy' == STATUS || 'changeDesign' == STATUS){
|
||||
// 'Y' 상태만 삭제 가능 ('N', 'create' 등 작업중인 상태만 삭제 허용)
|
||||
if('Y' == STATUS || 'deploy' == STATUS || 'changeDesign' == STATUS){
|
||||
checkStatus = false;
|
||||
}
|
||||
|
||||
if(!checkStatus){
|
||||
Swal.fire('배포완료/설계변경미배포 건은 삭제 할 수 없습니다.');
|
||||
Swal.fire('배포완료 건은 삭제 할 수 없습니다.');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -434,10 +435,16 @@ function fn_delete() {
|
||||
data:{"checkArr":chkArray.join(",")},
|
||||
dataType:"json",
|
||||
success:function(data){
|
||||
Swal.fire(data.msg);
|
||||
fn_search();
|
||||
Swal.fire(data.msg).then(() => {
|
||||
// 검색 플래그 초기화 후 목록 새로고침
|
||||
isSearching = false;
|
||||
fn_search();
|
||||
});
|
||||
},
|
||||
error: function(jqxhr, status, error){
|
||||
Swal.fire('삭제 중 오류가 발생했습니다.');
|
||||
// 에러 시에도 플래그 초기화
|
||||
isSearching = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -3232,48 +3232,25 @@ public class PartMngService extends BaseService {
|
||||
AtomicInteger emptyColCnt = new AtomicInteger(0);
|
||||
String noteMsg = "";
|
||||
|
||||
int colIndex = 0;
|
||||
|
||||
// 각 컬럼 파싱 (CSV: 수준, 품번, 품명, 수량, ...)
|
||||
String level = getCsvValue(values, colIndex++, emptyColCnt); // 0: 수준
|
||||
String partNo = getCsvValue(values, colIndex++, emptyColCnt); // 1: 품번
|
||||
String partName = getCsvValue(values, colIndex++, emptyColCnt); // 2: 품명
|
||||
String qty = getCsvValue(values, colIndex++, emptyColCnt); // 3: 수량
|
||||
String itemQty = getCsvValue(values, colIndex++, emptyColCnt); // 4: 항목수량
|
||||
String material = getCsvValue(values, colIndex++, emptyColCnt); // 5: 재료
|
||||
String heatTreatmentHardness = getCsvValue(values, colIndex++, emptyColCnt); // 6: 열처리경도
|
||||
String heatTreatmentMethod = getCsvValue(values, colIndex++, emptyColCnt); // 7: 열처리방법
|
||||
String surfaceTreatment = getCsvValue(values, colIndex++, emptyColCnt); // 8: 표면처리
|
||||
String supplier = getCsvValue(values, colIndex++, emptyColCnt); // 9: 공급업체
|
||||
String partType = getCsvValue(values, colIndex++, emptyColCnt); // 10: 범주이름
|
||||
|
||||
// 수준으로부터 부모 품번 찾기
|
||||
String parentPartNo = "";
|
||||
if (!StringUtils.isBlank(level)) {
|
||||
// 숫자만 있는 경우 (1, 2, 3, 4 등)
|
||||
try {
|
||||
int currentDepth = Integer.parseInt(level);
|
||||
|
||||
// 현재 깊이의 품번 저장 (다음 행에서 참조할 수 있도록)
|
||||
if (!StringUtils.isBlank(partNo)) {
|
||||
currentDepthPartNoMap.put(currentDepth, partNo);
|
||||
}
|
||||
|
||||
// 부모 찾기: 바로 이전 깊이의 최신 품번
|
||||
if (currentDepth > 1) {
|
||||
int parentDepth = currentDepth - 1;
|
||||
if (currentDepthPartNoMap.containsKey(parentDepth)) {
|
||||
parentPartNo = currentDepthPartNoMap.get(parentDepth);
|
||||
}
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
// 숫자가 아닌 경우 (1.1, 1.4.1 등) - 기존 로직 사용
|
||||
String parentLevel = getParentLevel(level);
|
||||
if (!StringUtils.isBlank(parentLevel) && levelToPartNoMap.containsKey(parentLevel)) {
|
||||
parentPartNo = levelToPartNoMap.get(parentLevel);
|
||||
}
|
||||
}
|
||||
}
|
||||
int colIndex = 0;
|
||||
|
||||
// 각 컬럼 파싱 (CSV: 상태, 모품번, 품번, 품명, 수량, 항목수량, ...)
|
||||
String level = getCsvValue(values, colIndex++, emptyColCnt); // 0: 상태(수준)
|
||||
String parentPartNo = getCsvValue(values, colIndex++, emptyColCnt); // 1: 모품번
|
||||
String partNo = getCsvValue(values, colIndex++, emptyColCnt); // 2: 품번
|
||||
String partName = getCsvValue(values, colIndex++, emptyColCnt); // 3: 품명
|
||||
String qty = getCsvValue(values, colIndex++, emptyColCnt); // 4: 수량
|
||||
String itemQty = getCsvValue(values, colIndex++, emptyColCnt); // 5: 항목수량
|
||||
String material = getCsvValue(values, colIndex++, emptyColCnt); // 6: 재료
|
||||
String heatTreatmentHardness = getCsvValue(values, colIndex++, emptyColCnt); // 7: 열처리경도
|
||||
String heatTreatmentMethod = getCsvValue(values, colIndex++, emptyColCnt); // 8: 열처리방법
|
||||
String surfaceTreatment = getCsvValue(values, colIndex++, emptyColCnt); // 9: 표면처리
|
||||
String supplier = getCsvValue(values, colIndex++, emptyColCnt); // 10: 공급업체
|
||||
String partType = getCsvValue(values, colIndex++, emptyColCnt); // 11: 범주이름
|
||||
|
||||
// CSV에서 모품번을 직접 제공하므로 별도 처리 불필요
|
||||
// level은 상태(수준) 값으로 사용됨
|
||||
// parentPartNo는 이미 1번 컬럼에서 읽음
|
||||
|
||||
// 유효성 검증
|
||||
if(!StringUtils.isBlank(parentPartNo) && rowIndex > 2) {
|
||||
@@ -4446,28 +4423,29 @@ public class PartMngService extends BaseService {
|
||||
insertMap.put("OBJID", CommonUtils.createObjId());
|
||||
insertMap.put("BOM_REPORT_OBJID", objid);
|
||||
insertMap.put("PARENT_PART_NO", PARENT_PART_NO);
|
||||
insertMap.put("PART_NO", PART_NO);
|
||||
insertMap.put("PART_NAME", CommonUtils.checkNull((String)insertMap.get("PART_NAME")));
|
||||
insertMap.put("QTY", CommonUtils.checkNull((String)insertMap.get("QTY")));
|
||||
insertMap.put("UNIT", CommonUtils.checkNull((String)insertMap.get("UNIT")));
|
||||
insertMap.put("SPEC", CommonUtils.checkNull((String)insertMap.get("SPEC")));
|
||||
insertMap.put("MATERIAL", CommonUtils.checkNull((String)insertMap.get("MATERIAL")));
|
||||
insertMap.put("THICKNESS", CommonUtils.checkNull((String)insertMap.get("THICKNESS")));
|
||||
insertMap.put("WIDTH", CommonUtils.checkNull((String)insertMap.get("WIDTH")));
|
||||
insertMap.put("HEIGHT", CommonUtils.checkNull((String)insertMap.get("HEIGHT")));
|
||||
insertMap.put("OUT_DIAMETER", CommonUtils.checkNull((String)insertMap.get("OUT_DIAMETER")));
|
||||
insertMap.put("IN_DIAMETER", CommonUtils.checkNull((String)insertMap.get("IN_DIAMETER")));
|
||||
insertMap.put("LENGTH", CommonUtils.checkNull((String)insertMap.get("LENGTH")));
|
||||
insertMap.put("PART_TYPE", CommonUtils.checkNull((String)insertMap.get("PART_TYPE")));
|
||||
insertMap.put("REMARK", CommonUtils.checkNull((String)insertMap.get("REMARK")));
|
||||
insertMap.put("SUPPLY_CODE", CommonUtils.checkNull((String)insertMap.get("SUPPLY_CODE")));
|
||||
insertMap.put("MAKER", CommonUtils.checkNull((String)insertMap.get("MAKER")));
|
||||
insertMap.put("POST_PROCESSING", CommonUtils.checkNull((String)insertMap.get("POST_PROCESSING")));
|
||||
insertMap.put("HEAT_TREATMENT_HARDNESS", CommonUtils.checkNull((String)insertMap.get("HEAT_TREATMENT_HARDNESS")));
|
||||
insertMap.put("HEAT_TREATMENT_METHOD", CommonUtils.checkNull((String)insertMap.get("HEAT_TREATMENT_METHOD")));
|
||||
insertMap.put("SURFACE_TREATMENT", CommonUtils.checkNull((String)insertMap.get("SURFACE_TREATMENT")));
|
||||
insertMap.put("STATUS", "deploy"); // 엑셀 업로드 시 deploy 상태로 저장
|
||||
insertMap.put("WRITER", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID")));
|
||||
insertMap.put("PART_NO", PART_NO);
|
||||
insertMap.put("PART_NAME", CommonUtils.checkNull((String)insertMap.get("PART_NAME")));
|
||||
insertMap.put("QTY", CommonUtils.checkNull((String)insertMap.get("QTY")));
|
||||
insertMap.put("ITEM_QTY", CommonUtils.checkNull((String)insertMap.get("ITEM_QTY"))); // 항목수량 추가
|
||||
insertMap.put("UNIT", CommonUtils.checkNull((String)insertMap.get("UNIT")));
|
||||
insertMap.put("SPEC", CommonUtils.checkNull((String)insertMap.get("SPEC")));
|
||||
insertMap.put("MATERIAL", CommonUtils.checkNull((String)insertMap.get("MATERIAL")));
|
||||
insertMap.put("THICKNESS", CommonUtils.checkNull((String)insertMap.get("THICKNESS")));
|
||||
insertMap.put("WIDTH", CommonUtils.checkNull((String)insertMap.get("WIDTH")));
|
||||
insertMap.put("HEIGHT", CommonUtils.checkNull((String)insertMap.get("HEIGHT")));
|
||||
insertMap.put("OUT_DIAMETER", CommonUtils.checkNull((String)insertMap.get("OUT_DIAMETER")));
|
||||
insertMap.put("IN_DIAMETER", CommonUtils.checkNull((String)insertMap.get("IN_DIAMETER")));
|
||||
insertMap.put("LENGTH", CommonUtils.checkNull((String)insertMap.get("LENGTH")));
|
||||
insertMap.put("PART_TYPE", CommonUtils.checkNull((String)insertMap.get("PART_TYPE")));
|
||||
insertMap.put("REMARK", CommonUtils.checkNull((String)insertMap.get("REMARK")));
|
||||
insertMap.put("SUPPLY_CODE", CommonUtils.checkNull((String)insertMap.get("SUPPLY_CODE")));
|
||||
insertMap.put("MAKER", CommonUtils.checkNull((String)insertMap.get("MAKER")));
|
||||
insertMap.put("POST_PROCESSING", CommonUtils.checkNull((String)insertMap.get("POST_PROCESSING")));
|
||||
insertMap.put("HEAT_TREATMENT_HARDNESS", CommonUtils.checkNull((String)insertMap.get("HEAT_TREATMENT_HARDNESS")));
|
||||
insertMap.put("HEAT_TREATMENT_METHOD", CommonUtils.checkNull((String)insertMap.get("HEAT_TREATMENT_METHOD")));
|
||||
insertMap.put("SURFACE_TREATMENT", CommonUtils.checkNull((String)insertMap.get("SURFACE_TREATMENT")));
|
||||
insertMap.put("STATUS", "deploy"); // 엑셀 업로드 시 deploy 상태로 저장
|
||||
insertMap.put("WRITER", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID")));
|
||||
|
||||
insertMap.put("CONTRACT_OBJID", CommonUtils.checkNull((String)paramMap.get("CONTRACT_OBJID")));
|
||||
insertMap.put("PRODUCT_MGMT_OBJID", CommonUtils.checkNull((String)paramMap.get("product_mgmt_objid")));
|
||||
|
||||
Reference in New Issue
Block a user