582 lines
18 KiB
Plaintext
582 lines
18 KiB
Plaintext
<%@ 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>
|
|
|
|
<c:set var="now" value="<%=new java.util.Date()%>" />
|
|
<c:set var="sysYear">
|
|
<fmt:formatDate value="${now}" pattern="yyyy" />
|
|
</c:set>
|
|
<c:set var="connector" value="<%=connector%>" />
|
|
|
|
|
|
<style type="text/css">
|
|
</style>
|
|
<script>
|
|
var _editable = true;
|
|
var grid;
|
|
var modifiedRows = [];
|
|
var newAddRows = [];
|
|
var _CHANGE_OPTION_LIST;
|
|
|
|
|
|
$(document)
|
|
.ready(
|
|
function() {
|
|
|
|
var defaultOptions = []; //[{"CODE_ID":'',"CODE_NAME":"선택"}];
|
|
_CHANGE_OPTION_LIST = defaultOptions.concat(fnc_getJsonAllDataListBySqlId({"sqlId":"common.getCusProjectNoList"}));
|
|
_UNIT_OPTION_LIST = defaultOptions.concat(fnc_getJsonAllDataListBySqlId({"sqlId":"common.getUnitCodeList"}));
|
|
_WORKER_OPTION_LIST = defaultOptions.concat(fnc_getJsonAllDataListBySqlId({"sqlId":"common.getUserselect"}));
|
|
|
|
|
|
$("#btnSearch").click(
|
|
function() {
|
|
$("#PAGE_T").val("1");
|
|
fn_search();
|
|
}
|
|
);
|
|
|
|
|
|
//체크박스 전체선택/전체해제
|
|
$("#allCheck").click(
|
|
function() {
|
|
if ($("#allCheck").prop("checked")) {
|
|
$("input[type=checkbox]").prop(
|
|
"checked", true);
|
|
} else {
|
|
$("input[type=checkbox]").prop(
|
|
"checked", false);
|
|
}
|
|
}
|
|
);
|
|
|
|
//엔터 조회
|
|
$("input").keyup(
|
|
function(e) {
|
|
if (e.keyCode == 13) {
|
|
$("#PAGE_T").val("1");
|
|
fn_search();
|
|
}
|
|
}
|
|
);
|
|
|
|
$("#btnDelete").click(
|
|
function() {
|
|
fn_delrow();
|
|
}
|
|
);
|
|
|
|
$("#btnAddrow").click(
|
|
function() {
|
|
fn_addrow();
|
|
}
|
|
);
|
|
|
|
$("#btnCopy").click(function() {
|
|
fn_copy();
|
|
});
|
|
|
|
|
|
$("#btnSave").click(
|
|
function() {
|
|
|
|
fn_save();
|
|
}
|
|
);
|
|
|
|
|
|
|
|
|
|
$('.select2').select2();
|
|
|
|
fnc_datepick();
|
|
|
|
fn_search();
|
|
|
|
setTimeout(function() {
|
|
fn_addrow();
|
|
}, 100);
|
|
|
|
grid.on("cellEdited", function(cell) {
|
|
// console.log("셀이 수정되었습니다.");
|
|
// console.log("수정된 셀의 열:", cell.getField());
|
|
// console.log("수정된 셀의 데이터:", cell.getData());
|
|
|
|
var cnt = 0;
|
|
var row = cell.getRow();
|
|
var rowData = row.getData();
|
|
var column = cell.getColumn();
|
|
var isValidationPassedCheck = true;
|
|
var row = cell.getRow();
|
|
var divisionValue = row.getData().DIVISION;
|
|
var SOURCING_TYPE = row.getData().SOURCING_TYPE;
|
|
var editedRowData = cell.getRow().getData();
|
|
|
|
|
|
if (cell.getField() === 'CONTRACT_OBJID') {
|
|
const rowIndex = row.getIndex();
|
|
const rowData = row.getData();
|
|
|
|
if (rowIndex === cell.getRow().getIndex()) {
|
|
|
|
var unitCodeCell = row.getCell("UNIT_CODE");
|
|
unitCodeCell.getColumn().getDefinition().editorParams.values =
|
|
fnc_getJsonAllDataListBySqlId({
|
|
"sqlId": "common.getUnitCodeList",
|
|
"CONTRACT_OBJID": rowData.CONTRACT_OBJID
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
if (cell.getField() === 'UNIT_CODE') {
|
|
var divisionValue = rowData.DIVISION;
|
|
var editable = row.getData().DIVISION !== 'non_project';
|
|
cell.getColumn().getDefinition().editorParams.editable = editable;
|
|
}
|
|
|
|
if (cell.getField() === 'DIVISION') {
|
|
updateEditors(row, divisionValue);
|
|
}
|
|
|
|
if (cell.getField() === 'SOURCING_TYPE') {
|
|
updateEditors(row, SOURCING_TYPE);
|
|
}
|
|
|
|
if (cell.getField() === 'sourcing_type') {
|
|
var row = cell.getRow();
|
|
var data = row.getData();
|
|
|
|
if (data.sourcing_type == 'outsourcing') {
|
|
grid.getColumns().forEach(function(column) {
|
|
if (column.getField() === 'worker_id') {
|
|
column.update({ editable: false });
|
|
}
|
|
});
|
|
} else {
|
|
grid.getColumns().forEach(function(column) {
|
|
if (column.getField() === 'worker_id') {
|
|
column.update({ editable: true });
|
|
}
|
|
});
|
|
}
|
|
}
|
|
rowData.GRID_STATUS = 'U';
|
|
rowData = row.getData();
|
|
|
|
console.log("data2" + JSON.stringify(rowData));
|
|
|
|
if (row.data !== rowData) {
|
|
if (modifiedRows.length >= 1) {
|
|
for (var i = 0; i < modifiedRows.length; i++) {
|
|
var currentRow = modifiedRows[i];
|
|
if ( !fnc_isEmpty(currentRow.objid) && currentRow.objid === rowData.objid ) {
|
|
modifiedRows[i] = currentRow;
|
|
return;
|
|
} else {
|
|
cnt++;
|
|
}
|
|
}
|
|
|
|
if (cnt > 0) {
|
|
modifiedRows.push(rowData);
|
|
}
|
|
} else {
|
|
modifiedRows.push(rowData);
|
|
}
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
|
|
</script>
|
|
<script>
|
|
|
|
|
|
|
|
|
|
function editCheck2 (cell) {
|
|
return _editable;
|
|
}
|
|
|
|
function fn_addrow() {
|
|
grid = fnc_tabul_addrow(_tabul_layout_fitDataStretch, grid, "/productionplanning/workDiaryGridList.do", columns, true); //, true
|
|
|
|
}
|
|
|
|
function fn_delrow() {
|
|
grid = fnc_tabul_delrow(_tabul_layout_fitDataStretch, grid, "/productionplanning/workDiaryGridList.do", columns, true); //, true
|
|
}
|
|
|
|
|
|
|
|
|
|
// 삭제
|
|
function fn_delete() {
|
|
var selectedRows = grid.getSelectedRows(); // 선택한 행의 인덱스 배열 가져오기
|
|
|
|
if (selectedRows.length === 0) {
|
|
alert("삭제할 행을 선택하세요.");
|
|
return;
|
|
}
|
|
|
|
var selectedData = selectedRows.map(function(row) {
|
|
return grid.getData()[row].data; // 선택한 행의 데이터 가져오기
|
|
});
|
|
|
|
var param = {
|
|
dataListJson: JSON.stringify(selectedData) // 선택한 행 데이터를 JSON 문자열로 변환
|
|
};
|
|
|
|
if (confirm("선택한 행을 삭제하시겠습니까?")) {
|
|
$.ajax({
|
|
url: "/productionplanning/workDiaryGridList.do",
|
|
type: "POST",
|
|
data: param,
|
|
dataType: "json",
|
|
success: function(data) {
|
|
Swal.fire(data.msg);
|
|
fn_search();
|
|
},
|
|
error: function(jqxhr, status, error) {
|
|
Swal.fire('서버 오류');
|
|
}
|
|
});
|
|
}
|
|
}
|
|
function fn_copy() {
|
|
var selectedRows = grid.getSelectedRows();
|
|
|
|
if (selectedRows.length === 0) {
|
|
alert("복사할 행을 선택해주세요.");
|
|
return;
|
|
}
|
|
|
|
selectedRows.forEach(function(row) {
|
|
var rowData = row.getData();
|
|
var newRowData = Object.assign({}, rowData);
|
|
|
|
// OBJID와 같은 고유 식별자는 제거하거나 새로운 값으로 설정
|
|
delete newRowData.OBJID;
|
|
|
|
// 필요한 경우 다른 필드도 초기화하거나 수정
|
|
newRowData.GRID_STATUS = 'I'; // 새로운 행임을 표시
|
|
|
|
// 새로운 행 추가
|
|
grid.addRow(newRowData);
|
|
});
|
|
|
|
// 변경사항 표시를 위해 그리드 새로고침
|
|
grid.redraw();
|
|
}
|
|
|
|
|
|
|
|
|
|
function fn_save(cell) {
|
|
|
|
var data = grid.getData();
|
|
|
|
for (var i = 0; i < data.length; i++) {
|
|
|
|
if (!data[i].DIVISION) {
|
|
alert('프로젝트 미입력');
|
|
return;
|
|
}
|
|
if (data[i].DIVISION === 'project' && (!data[i].CONTRACT_OBJID || data[i].CONTRACT_OBJID.trim() === '')) {
|
|
alert('프로젝트 번호 미입력');
|
|
return;
|
|
}
|
|
if (data[i].DIVISION === 'project' && (!data[i].UNIT_CODE || data[i].UNIT_CODE.trim() === '')) {
|
|
alert('유닛명 미입력');
|
|
return;
|
|
}
|
|
if (!data[i].WORK_START_DATE) {
|
|
alert('시작 날짜 미입력');
|
|
return;
|
|
}
|
|
if (!data[i].WORK_END_DATE) {
|
|
alert('종료 날짜 미입력');
|
|
return;
|
|
}
|
|
if (!data[i].WORK_HOUR) {
|
|
alert('작업시간 미입력');
|
|
return;
|
|
}
|
|
if (!data[i].SOURCING_TYPE) {
|
|
alert('구분 미등록');
|
|
return;
|
|
}
|
|
if (data[i].SOURCING_TYPE === 'insourcing' && (!data[i].WORKER_ID || data[i].WORKER_ID.trim() === '')) {
|
|
alert('작업자 미등록');
|
|
return;
|
|
}
|
|
}
|
|
|
|
Swal.fire({
|
|
title: '저장 확인',
|
|
text: '해당 내용을 저장하시겠습니까?',
|
|
icon: 'question',
|
|
showCancelButton: true,
|
|
confirmButtonColor: '#3085d6',
|
|
cancelButtonColor: '#d33',
|
|
confirmButtonText: '저장',
|
|
cancelButtonText: '취소'
|
|
}).then((result) => {
|
|
if (result.isConfirmed) {
|
|
var param = $("#form1").serializeObject();
|
|
console.log(modifiedRows);
|
|
param.dataListJson = JSON.stringify(grid.getData());
|
|
|
|
$.ajax({
|
|
url: "/productionplanning/saveWorkDiaryInfo.do",
|
|
type: "POST",
|
|
data: param,
|
|
dataType: "json",
|
|
success: function(data) {
|
|
Swal.fire({
|
|
title: '저장 완료',
|
|
text: '저장이 완료되었습니다.',
|
|
icon: 'success'
|
|
}).then(() => {
|
|
console.log("modifiedRows" + modifiedRows.length);
|
|
fn_search();
|
|
modifiedRows = [];
|
|
self.close(0);
|
|
});
|
|
},
|
|
error: function(jqxhr, status, error) {
|
|
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
function fn_search() {
|
|
columns = [
|
|
{
|
|
title: "구분",
|
|
field: "DIVISION",
|
|
headerHozAlign : 'center',
|
|
hozAlign : 'center',
|
|
width : '100',
|
|
editor: "select",
|
|
editorParams: {values: {"project": "프로젝트", "non_project": "비프로젝트"}},
|
|
formatter: function(cell) {
|
|
// 'insourcing'은 '자사'로, 'outsourcing'은 '외주'로 표시됩니다.
|
|
if (cell.getValue() === 'non_project') {
|
|
return '비프로젝트';
|
|
} else if (cell.getValue() === 'project') {
|
|
return '프로젝트';
|
|
} else {
|
|
return cell.getValue();
|
|
}
|
|
},
|
|
cellEdited: function(cell) {
|
|
// '구분' 값이 'non_project'로 변경되면 'UNIT_CODE'와 'contract_objid' 필드를 비웁니다.
|
|
if (cell.getValue() === 'non_project') {
|
|
var row = cell.getRow();
|
|
row.update({"UNIT_CODE": "", "CONTRACT_OBJID": ""});
|
|
}
|
|
}
|
|
},
|
|
{
|
|
title : '프로젝트번호',
|
|
field : 'CONTRACT_OBJID',
|
|
headerHozAlign : 'center',
|
|
hozAlign : 'left',
|
|
width : '100',
|
|
editor: fnc_customSelectEditor
|
|
,formatter:fnc_customSelectFormatter
|
|
,editorParams: {valueId:"CODE", labelId:"NAME", values:_CHANGE_OPTION_LIST}
|
|
,formatterParams:{valueId:"CODE", labelId:"NAME", values:_CHANGE_OPTION_LIST}
|
|
|
|
,editable: function(row) {
|
|
// '구분' 값에 따라 편집 가능 여부를 반환합니다.
|
|
return row.getData().DIVISION !== 'non_project';
|
|
},
|
|
cellEdited: function(cell) {
|
|
// 프로젝트가 변경되면 유닛명을 초기화합니다.
|
|
var row = cell.getRow();
|
|
row.update({"UNIT_CODE": ""});
|
|
}
|
|
},
|
|
{
|
|
title: "유닛명",
|
|
field: "UNIT_CODE",
|
|
headerHozAlign : 'left',
|
|
hozAlign : 'left',
|
|
width: '150',
|
|
editor: fnc_customSelectEditor,
|
|
formatter:fnc_customSelectFormatter,
|
|
editorParams: function(cell) {
|
|
// 'contract_objid' 필드의 현재 값을 기반으로 에디터 파라미터 생성
|
|
var CONTRACT_OBJID = cell.getData().CONTRACT_OBJID;
|
|
console.log("현재 CONTRACT_OBJID 값:", CONTRACT_OBJID);
|
|
return {valueId:"CODE", labelId:"NAME", values: fnc_getJsonAllDataListBySqlId({"sqlId":"common.getUnitCodeList", "project_objid": CONTRACT_OBJID})};
|
|
},
|
|
formatterParams:{valueId:"CODE", labelId:"NAME", values:_UNIT_OPTION_LIST},
|
|
|
|
editable: function(row) {
|
|
return row.getData().DIVISION !== 'non_project';
|
|
}
|
|
},
|
|
|
|
{
|
|
title : '작업내용',
|
|
field : 'TASK_NAME',
|
|
headerHozAlign : 'left',
|
|
hozAlign : 'left',
|
|
width : '300',
|
|
editor:"input", editorParams:{}, editable: editCheck2
|
|
},
|
|
{
|
|
title : '(From)',
|
|
field : 'WORK_START_DATE',
|
|
headerHozAlign : 'center',
|
|
hozAlign : 'center',
|
|
width : '120',
|
|
editor:"date"
|
|
},
|
|
{
|
|
title : '(TO)',
|
|
field : 'WORK_END_DATE',
|
|
headerHozAlign : 'center',
|
|
hozAlign : 'center',
|
|
width : '150',
|
|
editor:"date"
|
|
},
|
|
{
|
|
title : '작업시간(h) ',
|
|
field : 'WORK_HOUR',
|
|
headerHozAlign : 'center',
|
|
hozAlign : 'center',
|
|
width : '150',
|
|
editor:"input", editorParams:{}, editable: editCheck2
|
|
},
|
|
{
|
|
title: '구분',
|
|
field: 'SOURCING_TYPE',
|
|
headerHozAlign: 'center',
|
|
hozAlign: 'center',
|
|
width: '80',
|
|
editor: "select",
|
|
editorParams: {values: {"insourcing": "자사", "outsourcing": "외주"}},
|
|
formatter: function(cell) {
|
|
// 'insourcing'은 '자사'로, 'outsourcing'은 '외주'로 표시됩니다.
|
|
if (cell.getValue() === 'outsourcing') {
|
|
return '외주';
|
|
} else if (cell.getValue() === 'insourcing') {
|
|
return '자사';
|
|
} else {
|
|
return cell.getValue();
|
|
}
|
|
},
|
|
cellEdited: function(cell) {
|
|
// '구분' 값이 'outsourcing'로 변경되면 'WORKER_ID' 필드를 비웁니다.
|
|
if (cell.getValue() === 'outsourcing') {
|
|
var row = cell.getRow();
|
|
row.update({"WORKER_ID": "", });
|
|
}
|
|
}
|
|
},
|
|
{
|
|
title : '작업자',
|
|
field : 'WORKER_ID',
|
|
headerHozAlign : 'center',
|
|
hozAlign : 'center',
|
|
width : '150',
|
|
editor: fnc_customSelectEditor,
|
|
formatter:fnc_customSelectFormatter,
|
|
editorParams: {valueId:"CODE", labelId:"NAME", values:_WORKER_OPTION_LIST},
|
|
formatterParams:{valueId:"CODE", labelId:"NAME", values:_WORKER_OPTION_LIST},
|
|
editable: function(row) {
|
|
// '구분' 값에 따라 편집 가능 여부를 반환합니다.
|
|
return row.getData().SOURCING_TYPE !== 'outsourcing';
|
|
}
|
|
|
|
},
|
|
{
|
|
title: '조립/셋업',
|
|
field: 'PRODUCTION_TYPE',
|
|
headerHozAlign: 'center',
|
|
hozAlign: 'center',
|
|
width: '80',
|
|
editor: "select",
|
|
editorParams: {values: {"assembly": "조립", "setup": "셋업"}},
|
|
formatter: function(cell) {
|
|
if (cell.getValue() === 'assembly') {
|
|
return '조립';
|
|
} else if (cell.getValue() === 'setup') {
|
|
return '셋업';
|
|
} else {
|
|
return cell.getValue();
|
|
}
|
|
}
|
|
},
|
|
{
|
|
title : '특이사항',
|
|
field : 'REMARK',
|
|
headerHozAlign : 'left',
|
|
hozAlign : 'left',
|
|
width : '170',
|
|
editor:"input", editorParams:{}, editable: editCheck2
|
|
}
|
|
|
|
];
|
|
grid = fnc_tabul_search(_tabul_layout_fitDataStretch, grid, "/productionplanning/workDiaryGridList.do", columns, true, false, true);
|
|
}
|
|
|
|
|
|
window.addEventListener('unload', function() {
|
|
// 팝업 창이 닫힐 때 그리드를 새로 고치는 함수 호출
|
|
window.opener.fn_search();
|
|
});
|
|
</script>
|
|
</head>
|
|
<body style="overflow-x: hidden;">
|
|
<form name="hiddenForm" id="hiddenForm" action="" method="post">
|
|
<input type="hidden" name="TARGET_OBJID" id="TARGET_OBJID">
|
|
<input type="hidden" name="ORDER_CNT" id="ORDER_CNT">
|
|
<input type="hidden" name="CATEGORY_NAME" id="CATEGORY_NAME">
|
|
<input type="hidden" name="CONTRACT_OBJID" id="CONTRACT_OBJID">
|
|
<input type="hidden" name="OBJID" id="OBJID">
|
|
<input type="hidden" name="objId" id="objId">
|
|
</form>
|
|
|
|
<form name="form1" id="form1" action="" method="post" onsubmit="return false">
|
|
<input type="hidden" name="actionType" value="" />
|
|
<input type="hidden" name="objId" id="objId" value="${OBJID}">
|
|
<input type="hidden" name="OBJID" id="OBJID">
|
|
|
|
|
|
<div class="plm_menu_name_gdnsi">
|
|
<h2>
|
|
<span>작업일지 등록</span>
|
|
</h2>
|
|
<div class="btnArea">
|
|
<input type="button" value="한줄추가" class="plm_btns" id = "btnAddrow">
|
|
<input type="button" value="삭제" class="plm_btns" id="btnDelete">
|
|
<input type="button" value="복사" class="plm_btns" id = "btnCopy">
|
|
<input type="button" value="저장" class="plm_btns" id="btnSave">
|
|
</div>
|
|
</div>
|
|
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
|
|
</div>
|
|
</form>
|
|
</body>
|
|
</html> |