123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533 |
- BemsWebApplication.Formula = function (params, viewInfo) {
- "use strict";
- var FACILITY_TYPE_DEPTH = 2,
- FACILITY_DEPTH = 3,
- FORMULA_DEPTH = 4;
- var FNameForSearch = ko.observable(),
- PNameForSearch = ko.observable();
- var eq = BWA.DataUtil.constructEqualFilter;
- // hcLee 2016 01 15 확장
- var deferredForSearch = new $.Deferred();
- // hcLee 2016 01 15 확장
- var works = ko.observableArray();
- var facilityTypeDataSource = BemsWebApplication.db.createDataSource('BemsFacilityType'),
- facilityDataSource = BemsWebApplication.db.createDataSource('CmFacility', true),
- formulaBaseDataSource = BemsWebApplication.db.createDataSource('BemsFormulaBase'),
- formulaDataSource = BemsWebApplication.db.createDataSource('BemsFormula'),
- tableDataSource = BemsWebApplication.db.createDataSource('BemsFormulaTable'),
- parameterDataSource = BWA.DataUtil.createDataSource({
- dataSourceOptions: {
- select: [
- 'SiteId', 'FacilityTypeId', 'FacilityCode', 'FormulaId',
- 'ParameterId', 'ParameterFacilityCode', 'ParameterPropertyId',
- 'CmFacility/Name', 'BemsMonitoringPoint/Name',
- 'BemsMonitoringPoint/CmFacility/Name'
- ],
- expand: ['CmFacility', 'BemsMonitoringPoint', 'BemsMonitoringPoint/CmFacility'],
- extendOptions: {
- forceOriginalField: true,
- alterNames: {
- 'CmFacility/Name': 'FacilityName',
- 'BemsMonitoringPoint/Name': 'PointName',
- }
- }
- }
- }, 'BemsFormulaParameter'),
- formulaDataViewModel = new BWA.BemsFormulaViewModel(),
- factory = BemsWebApplication.Factory.PointLocationMapping,
- viewModel,
- formulaPointPopup = null,
- gridView,
- popupVisible = ko.observable(false),
- parameters = ko.observableArray(),
- facilityParameters = ko.observableArray(),
- selectedTreeItemData = ko.observable(null),
- selectedTreeItem = ko.observable(null), // 2015 11 12 hcLee 추가 기존 TreeItem -> TreeItemData 로 변경 하고 (위) 이거 추가함
- // selectedPoints = ko.observableArray(),
- pointDataSource = factory.getDataSource(),
- /*
- pointDataSource = BWA.DataUtil.createDataSource({
- dataSourceOptions: {
- select: [
- 'SiteId', 'FacilityTypeId', 'FacilityCode', 'PropertyId',
- 'BuildingId', 'FloorId', 'ZoneId',
- 'ValueType',
- //'IsAccumulated',
- 'Name', 'Description',
- 'CmFacility/Name', 'BemsServiceType/Name', 'BemsFacilityType/Name', 'BemsFuelType/Name'
- ],
- expand: ['CmFacility', 'BemsServiceType', 'BemsFacilityType', 'BemsFuelType'],
- extendOptions: {
- forceOriginalField: true
- //alterNames: {
- // 'CmFacility/Name': 'FacilityName',
- //}
- },
- filter: [
- ['SiteId', '=', BWA.UserInfo.SiteId()],
- 'and',
- ['FacilityTypeId', '<', 100]
- ]}, }, 'BemsMonitoringPoint'),
- */
- pointDataGridOptions = utils.datagrid.defaultOptions({
- // 중요 !!! hcLee 2016 01 15
- //dxDataSource: pointDataSource,
- dataSource: works,
- /*
- filter: [
- // ['SiteId', '=', BWA.UserInfo.SiteId()]
- eq('FacilityCode', 1002),
- ],
- */
- datagridId: 'pointDataGrid',
- dbId: 'BemsMonitoringPoint',
- width: '100%',
- height: 720,
- //selection: {
- // mode: 'multiple'
- //},
- columns: factory.getColumns([
- { dataField: 'CmFacility/Name', width: '30%' },
- { dataField: 'Name', width: '55%' },
- { dataField: 'ValueType', width: '15%' }
- ]),
- wordWrapEnabled: true,
- rowPrepared: function (rowElement, rowInfo) {
- if (rowInfo.rowType != 'data') {
- return;
- }
- rowElement
- .addClass('draggablePointRow')
- .data('data', rowInfo.data)
- .data('keyValue', rowInfo.key);
- },
- contentReadyAction: function (e) {
- e.element.find('.draggablePointRow').draggable({
- cursor: 'point',
- appendTo: '#mainContents',
- cursorAt: { right: 0, bottom: 0 },
- helper: function (e) {
- var div = $('<div>', {
- 'overflow': 'auto'
- });
- div.text('test');
- return div;
- },
- start: function (event, ui) {
- var $originalRow = $(this);
- var $originalRowCells = $originalRow.children();
- var key = $originalRow.data('keyValue');
- var data = $originalRow.data('data');
- ui.helper
- .data('keyValue', key)
- .data('data', data)
- //.text('{0} [{1}]'.formati(data.FacilityName(), data.Name()))
- .text('{0} [{1}]'.formati(data['CmFacility/Name'](), data.Name()))
- .addClass('drag-helper');
- //console.log(ui.helper);
- //var $originalRowCells = $originalRow.children(),
- // $clonedRowCells = $clonedRow.children();
- //$('<div>').text($clonedRowCells.get(1).text());
- ////var $originalRowCells = $originalRow.children(),
- //// $clonedRowCells = $clonedRow.children();
- ////for (var i = 0; i < $originalRowCells.length; i++)
- //// $($clonedRowCells.get(i)).width($($originalRowCells.get(i)).width());
- //$clonedRow
- // .width($originalRow.width())
- // .addClass('drag-helper');
- //console.log(ui.helper.offset());
- //var offset = ui.helper.offset();
- //ui.helper.appendTo($('#mainContents'));
- //ui.position.top = offset.top;
- //ui.position.left = offset.left;
- //console.log('after');
- //console.log(ui.helper.offset());
- ////ui.helper.offset(offset);
- //ui.helper.css({
- // left: offset.left,
- // top: offset.top
- //});
- //console.log(ui.helper.offset());
- }
- });
- },
- handleDataGridRowClick: function () {
- formulaPointPopup.handleDataGridRowClick.apply(this, arguments);
- },
- // : function (id, dataGrid, clickRow, popupVisible) {
- // viewModel.formulaPointPopup.show();
- //}
- }),
- parameterDataGridOptions = utils.datagrid.defaultOptions({
- dataSource: parameters,
- datagridId: 'parameterDataGrid',
- width: '100%',
- height: 320,
- pager: {
- showPageSizeSelector: false,
- allowedPageSizes: []
- },
- //selection: {
- // mode: 'multiple'
- //},
- columns: [
- { dataField: 'ParameterId', caption: $G('variable'), width: '10%' },
- //{ dataField: 'ParameterFacilityCode/CmFacility/Name', width: '30%' },
- // { dataField: 'FacilityName', caption: $G('facilityName'), width: '45%' },
- { dataField: 'BemsMonitoringPoint/CmFacility/Name', caption: $G('facilityName'), width: '45%' },
- { dataField: 'PointName', caption: $G('pointName'), width: '45%' },
- ],
- wordWrapEnabled: true,
- rowPrepared: function (rowElement, rowInfo) {
- if (rowInfo.rowType != 'data') {
- return;
- }
- rowElement
- .addClass('droppableParameterRow')
- .data('keyValue', rowInfo.key)
- .data('data', rowInfo.data);
- },
- contentReadyAction: function (e) {
- e.element.find('.droppableParameterRow').droppable({
- drop: function (event, ui) {
- var draggingRowKey = ui.draggable.data('keyValue');
- var draggingRowData = ui.draggable.data('data');
- var targetRowKey = $(this).data('keyValue');
- var draggingIndex = null,
- targetIndex = null;
- console.log(draggingRowKey);
- console.log(targetRowKey);
- var paramter = _.find(parameters(), function (x) {
- return x.ParameterId === targetRowKey.ParameterId;
- });
- paramter.FacilityKey = draggingRowKey;
- //paramter.FacilityName = draggingRowData.FacilityName();
- //hcLee 2016 03 02
- paramter['BemsMonitoringPoint/CmFacility/Name'] = draggingRowData['CmFacility/Name']();
- paramter.PointName = draggingRowData.Name();
- paramter.ParameterFacilityCode = draggingRowData.FacilityCode();
- paramter.ParameterPropertyId = draggingRowData.PropertyId();
- $('#parameterDataGrid').dxDataGrid('instance').refresh();
- console.log($('#parameterDataGrid').dxDataGrid('instance').option('hoverStateEnabled'));
- }
- });
- },
- handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
- },
- }),
- tableDataGridOptions = utils.datagrid.defaultOptions({
- dxDataSource: tableDataSource,
- datagridId: 'tableDataGrid',
- dbId: 'BemsFormulaTable',
- width: '100%',
- height: 240,
- pager: {
- showPageSizeSelector: false,
- allowedPageSizes: []
- },
- //selection: {
- // mode: 'multiple'
- //},
- columns: [
- { dataField: 'FunctionName', caption: $G('functionName'), width: '20%' },
- { dataField: 'Description', caption: $G('description'), width: '80%' },
- ],
- wordWrapEnabled: true,
- handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
- }
- });
- formulaDataViewModel.Name = ko.observable();
- // hcLee 2016 01 15 확장
- function handleViewShowing() {
- deferredForSearch.resolve();
- handleSearchInSearchView();
- }
- // hcLee 2016 01 15 확장
- function handleSearchInSearchView(filter) {
- var filterA = [];
- filterA.push(['SiteId', '=', BWA.UserInfo.SiteId()]);
- filterA.push(['FacilityTypeId', '<', 100]);
- _.each(filter, function (x) {
- filterA.push(x);
- });
- pointDataSource.filter(filterA);
- pointDataSource.load().done(function (result) {
- works(result);
- });
- }
- function refreshList() {
- }
- function handleClickTreeItem(element, data) {
- // 2015 11 16 hcLee 추가
- selectedTreeItem(data);
- var depth = data.depth;
- if (depth !== FORMULA_DEPTH) return;
- var parent = data.parentData;
- var data = data.data;
- selectedTreeItemData(data);
- var siteId = BWA.UserInfo.SiteId();
- var filter = [
- eq('SiteId', siteId),
- 'and',
- eq('FacilityTypeId', data.FacilityTypeId()),
- 'and',
- eq('FormulaId', data.FormulaId()),
- 'and',
- eq('FacilityCode', parent.data.FacilityCode()),
- ];
- formulaDataViewModel.SiteId(siteId);
- formulaDataViewModel.FacilityTypeId(data.FacilityTypeId());
- formulaDataViewModel.FacilityCode(parent.data.FacilityCode()); // parent 값을 가져올 수 있도록 treewidget를 수정 하자.
- formulaDataViewModel.FormulaId(data.FormulaId());
- formulaDataViewModel.Name(data.Name);
- formulaDataSource.filter(filter);
- formulaDataSource.load().done(function (result) {
- if (_.isEmpty(result)) {
- // BWA.DataUtil.resetViewModel(formulaDataViewModel);
- formulaDataViewModel.Formula('');
- parameters([]);
- return;
- }
- formulaDataViewModel.fromJS(result[0].toJS());
- formulaDataViewModel.Name(data.Name());
- parameterDataSource.filter([
- eq('SiteId', siteId),
- 'and',
- eq('FacilityTypeId', data.FacilityTypeId()),
- 'and',
- //eq('FacilityCode', parent.data.FacilityCode()),
- eq('FacilityCode', formulaDataViewModel.FacilityCode()),
- 'and',
- eq('FormulaId', data.FormulaId())
- ]);
- parameterDataSource.load().done(function (paramterArray) {
- // if (_.isEmpty(paramterArray) === false) {
- parameters(paramterArray);
- // }
- });
- });
- }
- function handleViewShown() {
- // 트리노드 선택 후 다른 화면으로 이동 한 경우,
- // 다시 현재 화면으로 들어왔을 때 이전에 선택되어 있던 트리노드가
- // 계속 선택된 상태로 표시되는 현상을 막기 위한 코드
- if (facilityDataSource._items.length != 0) {
- var data = selectedTreeItem();
- if (data != null) $('#formulaTreeView').cwTreeView('reload', selectedTreeItem().parentData);
- }
- var eq = BWA.DataUtil.constructEqualFilter;
- $('#formulaTreeView').cwTreeView({
- width: '40%',
- height: 'auto',
- onClickTreeItem: handleClickTreeItem,
- delegateDataSource: function (data, alterObj) {
- var id = data.id;
- var depth = data.depth;
- var promise = null;
- switch (depth) {
- case 0:
- var typeDeferred = new $.Deferred();
- promise = typeDeferred.promise();
- alterObj.IsFunction = false;
- typeDeferred.resolve([
- { Id: 99, Name: '등록설비' },
- { Id: 100, Name: '시스템' }
- ]);
- break;
- case 1:
- var filter;
- switch (data.data.Id) {
- case 99: filter = [['FacilityTypeId', '<', 99]]; break;
- case 100: filter = [['FacilityTypeId', '>', 99]]; break;
- }
- facilityTypeDataSource.filter(filter);
- promise = facilityTypeDataSource.load();
- break;
- case 2:
- facilityDataSource.filter([
- eq('SiteId', BWA.UserInfo.SiteId()),
- 'and',
- eq('FacilityTypeId', data.data.FacilityTypeId())
- ]);
- promise = facilityDataSource.load();
- break;
- case 3:
- formulaBaseDataSource.filter([
- eq('FacilityTypeId', data.data.FacilityTypeId())
- ]);
- promise = formulaBaseDataSource.load();
- break;
- }
- return promise;
- },
- });
- }
- function hanleRemoveSelectedParameter() {
- var gridView = $('#parameterDataGrid').dxDataGrid('instance');
- var rows = gridView.getSelectedRowsData();
- console.log(rows);
- }
- function getParametersFromFormula() {
- var regex = /\b[A-Z]\b/g;
- var match;
- // var ps = parameters();
- var list = [];
- while (match = regex.exec(formulaDataViewModel.Formula())) {
- var variable = match[0];
- if (_.some(list, function (x) {
- return x.ParameterId() === variable;
- })) continue;
- list.push({
- 'ParameterId': ko.observable(variable)
- });
- }
- return list;
- }
- function formulaValueChangeAction(e) {
- var savedParameters = parameters();
- var formulaParameters = getParametersFromFormula();
- console.log(savedParameters);
- console.log(formulaParameters);
- _.each(formulaParameters, function (p) {
- if (_.some(savedParameters, function (x) {
- return x.ParameterId() === p.ParameterId();
- })) return;
- parameters.push(p);
- });
- for (var i = 0 ; i < savedParameters.length ; i++) {
- var p = savedParameters[i];
- if (_.some(formulaParameters, function (x) {
- console.log(x.ParameterId() + ' !== ' + p.ParameterId());
- return x.ParameterId() === p.ParameterId();
- })) {
- continue;
- }
- parameters.splice(i, 1);
- i--;
- }
- }
- function saveFormula() {
- var formula = formulaDataViewModel.toJS();
- if (_.some(parameters(), function (x) {
- // 아래 코드에서 오류발생하여 변경
- //return _.isUndefined(x.ParameterFacilityCode) || _.isUndefined(x.ParameterFacilityCode());
- return _.isUndefined(x.ParameterFacilityCode);
- })) {
- utils.toast.show('관제점이 할당되지 않은 파라미터가 존재합니다.', 'error');
- return;
- }
- formula.Paramters = _.map(parameters(), function (x) {
- x = BWA.DataUtil.convertHybridViewModelToJS(x);
- x.SiteId = formula.SiteId;
- x.FacilityTypeId = formula.FacilityTypeId;
- x.FacilityCode = formula.FacilityCode;
- x.FormulaId = formula.FormulaId;
- return _.pick(x, 'SiteId', 'FacilityTypeId', 'FacilityCode',
- 'FormulaId', 'ParameterId',
- 'ParameterFacilityCode', 'ParameterPropertyId');
- });
- var promise = BWA.api.post('BemsFormula/PostBemsFormula', formula);
- promise.done(function () {
- utils.toast.show($G('successDatabaseProcessMsg'));
- });
- }
- FNameForSearch("");
- PNameForSearch("");
- var searchViewOptions = {
- searchViewItems: [
- { id: 'CmFacility/Name', value: FNameForSearch },
- { id: 'Name', value: PNameForSearch },
- ],
- promiseDataInSearchView: deferredForSearch.promise()
- };
- viewModel = {
- // viewShown: handleViewShown,
- refreshList: refreshList,
- saveFormula: saveFormula,
- pointDataGridOptions: pointDataGridOptions,
- parameterDataGridOptions: parameterDataGridOptions,
- tableDataGridOptions: tableDataGridOptions,
- formulaDataViewModel: formulaDataViewModel,
- formulaValueChangeAction: formulaValueChangeAction,
- hanleRemoveSelectedParameter: hanleRemoveSelectedParameter,
- // hcLee 2016 01 15 확장
- viewShowing: handleViewShowing,
- };
- formulaPointPopup = viewModel.formulaPointPopup = BWA.Popup.FormulaPointPopup.create(viewModel);
- // hcLee 2016 01 15 확장
- //return $.extend(BWA.CommonView.create(params, viewInfo, viewModel.options, null, handleViewShown), viewModel);
- return $.extend(BWA.CommonView.create(params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView), viewModel);
- };
|