(function () { 'use strict'; BWA.View = BWA.View || {}; BWA.View.Facility = BWA.View.Facility || {}; BWA.View.Facility.createCodeClassView = function (params, viewInfo, options) { var dbModelId = options.dbModelId, selectedClassNameTitle = options.selectedClassNameTitle, classIdFieldName = [options.classId, 'ClassId'].join(''), parentClassIdFieldName = ['Parent', options.classId, 'ClassId'].join(''), viewModelName = ['Fms', options.classId, 'CodeClassViewModel'].join(''); var initialized = false, shouldReload = false, dataViewModel = new BemsWebApplication[viewModelName](), isNewInPopup = ko.observable(false), isEditModeInPopup = ko.observable(false), viewModeInPopup = ko.observable(true), selectedClassName = ko.observable(selectedClassNameTitle), visibleCancelButton = ko.observable(false), selectedIds = [{}, {}, {}], selectedId = null, viewModel, hasnotModificationPermission, gridViews = [], popupVisible = ko.observable(false), disabledUpdateButton = ko.observable(true), disabledInsertButtons = [ko.observable(false), ko.observable(true), ko.observable(true)], dataSources = []; var selectedClassDepth = 0, backupSelectedClassDepth = 0; var isClass3 = ko.observable(false); var commandInsertButtonOptions = [{ id: 'create1', title: '대분류 등록', disabled: disabledInsertButtons[0], action: function () { setInsertPopupInfo(0, null); } }, { id: 'create2', title: '중분류 등록', disabled: disabledInsertButtons[1], action: function () { setInsertPopupInfo(1, selectedIds[0][classIdFieldName]); } }, { id: 'create3', title: '소분류 등록', disabled: disabledInsertButtons[2], action: function () { setInsertPopupInfo(2, selectedIds[1][classIdFieldName]); } }]; var commandUpdateButtonOption = { id: 'edit', title: '수정', disabled: disabledUpdateButton, action: function () { isNewInPopup(false); isClass3(selectedClassDepth === 2); popupVisible(true); } }; var FmsFacilityCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass'); var FmsMaterialCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass'); var FmsFacilityCodeClassInfo = ko.observableArray(); var FmsMaterialCodeClassInfo = ko.observableArray(); var RowName; function handleModification() { shouldReload = true; } function handleSelectionChanged(selectedRowsInfo) { //var id = $(selectedRowsInfo.element).attr('id'); //console.log(selectedRowsInfo.selectedRowKeys.length); //var isNotExistSelectedRow = (selectedRowsInfo.selectedRowKeys.length === 0); //var classDepth = Number(id.replace('gridContainer', '')) - 1; //if (classDepth < 2) { // disabledInsertButtons[classDepth + 1](isNotExistSelectedRow); //} refreshAllStatus(); } function refreshAllStatus() { var isSelected = false; var names = []; selectedClassDepth = 0; for (var i = 0 ; i < gridViews.length ; i++) { var rows = gridViews[i].getSelectedRowsData(); if (_.isEmpty(rows) === false) { var row = rows[0]; selectedClassDepth = i; isSelected = true; selectedIds[i].SiteId = row.SiteId(); selectedIds[i][classIdFieldName] = row[classIdFieldName](); if (i < 2) { disabledInsertButtons[i + 1](false); } names.push(row.Name()); } else { delete selectedIds[i].SiteId; delete selectedIds[i][classIdFieldName]; if (i < 2) { disabledInsertButtons[i + 1](true); } } } if (hasnotModificationPermission()) { for (var i = 0 ; i < 3 ; i++) { disabledInsertButtons[i](true); } disabledUpdateButton(true); } else { disabledUpdateButton(isSelected === false); } selectedClassName([selectedClassNameTitle, names.join(' /')].join(' ')); } function handleViewShown() { if (hasnotModificationPermission()) { for (var i = 0 ; i < 3 ; i++) { disabledInsertButtons[i](true); } disabledUpdateButton(true); } if (shouldReload) { shouldReload = false; refreshList(); //for (var i = 0 ; i < 3 ; i++) { // dataSources[i].pageIndex(0); // dataSources[i].load(); //} } if (initialized === false) { for (var j = 0 ; j < 3 ; j++) { var dataGridOptions = j == 2 ? { columns: [ { dataField: 'Abbreviation', caption: $G('abbreviation'), width: '20%', alignment: 'center' }, { dataField: 'Name', caption: $G('className'), width: '50%', alignment: 'center' }, utils.datagrid.columnIsUse('30%') ] } : { columns: [ { dataField: 'Abbreviation', caption: $G('abbreviation'), width: '30%', alignment: 'center' }, { dataField: 'Name', caption: $G('className'), width: '70%', alignment: 'center' } ] }; dataGridOptions.selectedSourceItem = dataViewModel; dataGridOptions.dbId = dbModelId; dataGridOptions.selectedId = selectedIds[j]; dataGridOptions.datagridId = 'gridContainer' + (j + 1); dataGridOptions.selectionChanged = handleSelectionChanged; dataGridOptions.handleDataGridRowClick = handleDataGridRowClick; var id = ['#', 'gridContainer', (j + 1)].join(''); dataGridOptions = utils.datagrid.defaultOptions(dataGridOptions); $(id).dxDataGrid(dataGridOptions); gridViews[j] = $(id).dxDataGrid('instance'); } $("#gridContainer1").dxDataGrid({ paging: { pageSize: 19 } }); $("#gridContainer2").dxDataGrid({ paging: { pageSize: 19 } }); $("#gridContainer3").dxDataGrid({ paging: { pageSize: 19 } }); refreshDataSource(0, null); initialized = true; } } function refreshDataSource(depth, parentId) { dataSources[depth].filter([parentClassIdFieldName, '=', parentId], 'and', ['SiteId', '=', BWA.UserInfo.SiteId()]); //**kgpark dataSources[depth].load().done(function (array) { gridViews[depth].option('dataSource', array); gridViews[depth].refresh(); }); } function handleDataGridRowClick(id, dataGrid, clickRow) { switch (id) { case 'gridContainer1': refreshDataSource(1, clickRow.data[classIdFieldName]()); refreshDataSource(2, -1); break; case 'gridContainer2': refreshDataSource(2, clickRow.data[classIdFieldName]()); break; case 'gridContainer3': break; } if (dbModelId == 'FmsFacilityCodeClass') { FmsFacilityCodeClassDataSource.filter([ ["SiteId", "=", BWA.UserInfo.SiteId()], "and", ["Depth", "=", clickRow.data.Depth()], "and", ["ParentFacilityClassId", "=", clickRow.data.ParentFacilityClassId()] ]); FmsFacilityCodeClassDataSource.load().done(function (result) { FmsFacilityCodeClassInfo(result); }); } else if (dbModelId == 'FmsMaterialCodeClass') { FmsMaterialCodeClassDataSource.filter([ ["SiteId", "=", BWA.UserInfo.SiteId()], "and", ["Depth", "=", clickRow.data.Depth()], "and", ["ParentMaterialClassId", "=", clickRow.data.ParentFacilityClassId()] ]); FmsMaterialCodeClassDataSource.load().done(function (result) { FmsMaterialCodeClassInfo(result); }); } RowName = clickRow.data.Name; } function handleViewDisposing() { BemsWebApplication.db[dbModelId].modified.remove(handleModification); } viewModel = BWA.CommonView.create(params, viewInfo, null, null, handleViewShown); hasnotModificationPermission = viewModel.hasnotModificationPermission; var dataSourceOptions = { store: BemsWebApplication.db[dbModelId], map: function (item) { return new BemsWebApplication[viewModelName](item); } }; for (var k = 0 ; k < 3 ; k++) { dataSources[k] = new DevExpress.data.DataSource(dataSourceOptions); dataSources[k].pageSize(30); } dataSources[0].filter([ ['SiteId', '=', BWA.UserInfo.SiteId()], 'and', [parentClassIdFieldName, '=', null] ]); dataSources[1].filter(parentClassIdFieldName, '=', -1); dataSources[2].filter(parentClassIdFieldName, '=', -1); function refreshList() { if (selectedClassDepth === 0) { refreshDataSource(0, null); } for (var i = Math.max(1, selectedClassDepth) ; i < 3 ; i++) { var classId = selectedIds[i - 1][classIdFieldName]; if (_.isUndefined(classId)) continue; refreshDataSource(i, selectedIds[i - 1][classIdFieldName]); } } function handlePopupShowing(e) { if (isNewInPopup() == false) { activePopupViewMode(); BemsWebApplication.db[dbModelId].byKey(selectedIds[selectedClassDepth]).done(function (data) { dataViewModel.fromJS(data); }); } else { //activePopupInsertMode(); clearDataModelValue(dataViewModel); } visibleCancelButton(false); } function clearDataModelValue(v) { $.each(v, function (name, value) { if (name !== parentClassIdFieldName && name !== 'Depth') { v[name](null); } }); v.SiteId(BWA.UserInfo.SiteId()); v.IsUse(true); // hcLee 2016 03 10 } BemsWebApplication.db[dbModelId].modified.add(handleModification); // TODO: 아래 breakpoint 에 대해 FmsBudgetCodeClass 의 분기가 필요 함 function handleConfirmDelete() { //alert(classIdFieldName); //alert(classIdFieldName.FacilityClassId); if (dbModelId == 'FmsBudgetCodeClass') { BWA.api.post('FmsBudgetCodeClass2/Delete', dataViewModel.toJS()).done(function () { refreshList(); utils.toast.show($G('successDatabaseDeleteMsg')); popupVisible(false); }); } else { var parameters = { SiteId: dataViewModel.SiteId(), Depth: dataViewModel.Depth() }; parameters[classIdFieldName] = dataViewModel[classIdFieldName](); // alert(classIdFieldName + parameters[classIdFieldName]); BemsWebApplication.api.delete(dbModelId, parameters).done(function () { refreshList(); utils.toast.show($G('successDatabaseDeleteMsg')); popupVisible(false); }); } } function update() { if (dbModelId == 'FmsBudgetCodeClass') { BWA.api.post('FmsBudgetCodeClass2/Update', dataViewModel.toJS()).done(function () { refreshList(); utils.toast.show($G('successDatabaseUpdateMsg')); popupVisible(false); }); } else if (dbModelId == 'FmsFacilityCodeClass') { BWA.api.post('FmsFacilityCodeClass/Update', dataViewModel.toJS()).done(function () { refreshList(); utils.toast.show($G('successDatabaseUpdateMsg')); popupVisible(false); }); } else { BemsWebApplication.db[dbModelId].update(selectedIds[selectedClassDepth], dataViewModel.toJS()).done(function () { refreshList(); utils.toast.show($G('successDatabaseUpdateMsg')); popupVisible(false); }); } } function insert() { if (dbModelId == 'FmsBudgetCodeClass') { BWA.api.post('FmsBudgetCodeClass2/Insert', dataViewModel.toJS()).done(function () { refreshList(); refreshAllStatus(); utils.toast.show($G('successDatabaseInsertionMsg')); popupVisible(false); }); } else { //if (dbModelId == 'FmsFacilityCodeClass') { // BWA.api.post('FmsFacilityCodeClass/Insert', dataViewModel.toJS()).done(function () { // refreshList(); // refreshAllStatus(); // utils.toast.show($G('successDatabaseInsertionMsg')); // popupVisible(false); // }); //} //else { BemsWebApplication.db[dbModelId].insert(dataViewModel.toJS()).done(function (values, newId) { refreshList(); refreshAllStatus(); utils.toast.show($G('successDatabaseInsertionMsg')); popupVisible(false); }); //} } } function activePopupEditMode() { viewModeInPopup(false); isEditModeInPopup(true); } function activePopupViewMode() { viewModeInPopup(true); isEditModeInPopup(false); } var tmpName, tmpAbbreviation; function handlePopupButtonEdit() { tmpName = dataViewModel.Name(); tmpAbbreviation = dataViewModel.Abbreviation(); activePopupEditMode(); visibleCancelButton(true); } function handlePopupButtonCancel() { dataViewModel.Name(tmpName); dataViewModel.Abbreviation(tmpAbbreviation); activePopupViewMode(); visibleCancelButton(false); } function popupInsertView() { activePopupEditMode(); popupVisible(true); } function handlePopupButtonSave() { // 필수 입력 조건 체크 // cyim 2015.12.28 : 설정-시설관리-시설등록-시설분류목록에 추가되는 항목에 입력 조건 추가 (약어,분류 명칭) //if (dbModelId == 'FmsFacilityCodeClass') { // if (BWA.DataUtil.isValidInputValue(dataViewModel.Abbreviation()) == false || BWA.DataUtil.isValidInputValue(dataViewModel.Name()) == false) { // utils.toast.show($G('Error_FmsFacilityCodeClass_NotInputData'), 'error'); // return; // } // // hcLee 2016 01 15 // // cyim 2015.12.30 : 설정-시설관리-시설등록-시설분류목록에 중복 입력 체크 // BWA.api.post('FmsFacilityCodeClass/Check', dataViewModel.toJS()).done(function (result) { // if (result == false) { // utils.toast.show($G('Error_SameInputData'), 'error'); // return; // } // if (isNewInPopup()) // insert(); // else // update(); // }); //} var isDuplicated = false; if (dbModelId == 'FmsFacilityCodeClass') { if (isNewInPopup()) { for (var i = 0; i < FmsFacilityCodeClassInfo().length; i++) { if (dataViewModel.Name() == FmsFacilityCodeClassInfo()[i].Name() || dataViewModel.Abbreviation() == FmsFacilityCodeClassInfo()[i].Abbreviation()) { isDuplicated = true; break; } } } else { for (var i = 0; i < FmsFacilityCodeClassInfo().length; i++) { if (RowName() != FmsFacilityCodeClassInfo()[i].Name() && (dataViewModel.Name() == FmsFacilityCodeClassInfo()[i].Name() || dataViewModel.Abbreviation() == FmsFacilityCodeClassInfo()[i].Abbreviation())) { isDuplicated = true; break; } } } if (!BWA.DataUtil.isValidInputValue(dataViewModel.Name()) || !BWA.DataUtil.isValidInputValue(dataViewModel.Abbreviation())) { utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error'); } else { if (isDuplicated) { utils.toast.show('이미 동일 정보가 존재합니다.', 'error'); } else { if (isNewInPopup()) insert(); else update(); } } } else if (dbModelId == 'FmsMaterialCodeClass') { if (isNewInPopup()) { for (var i = 0; i < FmsMaterialCodeClassInfo().length; i++) { if (dataViewModel.Name() == FmsMaterialCodeClassInfo()[i].Name() || dataViewModel.Abbreviation() == FmsMaterialCodeClassInfo()[i].Abbreviation()) { isDuplicated = true; break; } } } else { for (var i = 0; i < FmsMaterialCodeClassInfo().length; i++) { if (RowName() != FmsMaterialCodeClassInfo()[i].Name() && (dataViewModel.Name() == FmsMaterialCodeClassInfo()[i].Name() || dataViewModel.Abbreviation() == FmsMaterialCodeClassInfo()[i].Abbreviation())) { isDuplicated = true; break; } } } if (!BWA.DataUtil.isValidInputValue(dataViewModel.Name()) || !BWA.DataUtil.isValidInputValue(dataViewModel.Abbreviation())) { utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error'); } else { if (isDuplicated) { utils.toast.show('이미 동일 정보가 존재합니다.', 'error'); } else { if (isNewInPopup()) insert(); else update(); } } } else { // hcLee 2016 01 15 if (isNewInPopup()) insert(); else update(); } } function handlePopupButtonDelete() { DevExpress.ui.dialog.confirm($G('deleteConfirmMsg'), "삭제").then(function (result) { if (result) { handleConfirmDelete(); } else { // toast } }); } function handlePopupButtonClose() { popupVisible(false); } function setInsertPopupInfo(depth, parentClassId) { if (dbModelId == 'FmsFacilityCodeClass') { FmsFacilityCodeClassDataSource.filter([ ["SiteId", "=", BWA.UserInfo.SiteId()], "and", ["Depth", "=", depth], "and", ["ParentFacilityClassId", "=", parentClassId] ]); FmsFacilityCodeClassDataSource.load().done(function (result) { FmsFacilityCodeClassInfo(result); }); } else if (dbModelId == 'FmsMaterialCodeClass') { FmsMaterialCodeClassDataSource.filter([ ["SiteId", "=", BWA.UserInfo.SiteId()], "and", ["Depth", "=", depth], "and", ["ParentMaterialClassId", "=", parentClassId] ]); FmsMaterialCodeClassDataSource.load().done(function (result) { FmsMaterialCodeClassInfo(result); }); } isNewInPopup(true); activePopupEditMode(); dataViewModel[parentClassIdFieldName](parentClassId); dataViewModel.Depth(depth); selectedClassDepth = depth; isClass3(depth === 2); popupVisible(true); } var toolbarItems = [ { location: 'before', text: $G('detailInfo') }, { location: 'after', widget: 'button', options: { text: $G('edit'), icon: 'edit', visible: viewModeInPopup, clickAction: handlePopupButtonEdit } }, { location: 'after', widget: 'button', options: { text: $G('delete'), type: 'danger', icon: 'remove', visible: viewModeInPopup, clickAction: handlePopupButtonDelete } }, { location: 'after', widget: 'button', options: { text: $G('cancel'), icon: 'arrowleft', type: 'default', visible: visibleCancelButton, clickAction: handlePopupButtonCancel } }, { location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', visible: isEditModeInPopup, clickAction: handlePopupButtonSave } }, { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handlePopupButtonClose } } ]; var popupOptions = { width: '480px', height: 'auto', visible: popupVisible, closeOnOutsideClick: true, showingAction: handlePopupShowing, animation: { show: { type: "pop", duration: 200, from: { opacity: 1, scale: 0.4 }, to: { scale: 1 } }, hide: { type: "fade", duration: 200, from: 1, to: 0 } } }; return $.extend(viewModel, { dataModel: dataViewModel, refreshList: refreshList, //viewShowing: handleViewShowing , //viewShown: handleViewShown, viewDisposing: handleViewDisposing, popupInsertView: popupInsertView, viewModeInPopup: viewModeInPopup, isEditModeInPopup: isEditModeInPopup, isNewInPopup: isNewInPopup, popupOptions: popupOptions, commandInsertButtonOptions: commandInsertButtonOptions, commandUpdateButtonOption: commandUpdateButtonOption, selectedClassName: selectedClassName, toolbarItems: toolbarItems, isClass3: isClass3, }); }; })();