BemsWebApplication.FacilityTaskReport = function (params, viewInfo) { "use strict"; var initialized = false, shouldReload = false, dataSource; var CODE = $Code, FuelType = CODE.FuelType, FacilityType = CODE.FacilityType, FacilityCode = CODE.FacilityCode, F = CODE.Formula, TIT = CODE.TimeIntervalType; var useBusinessFiltering = ko.observable(false); var visiblePopup = ko.observable(false); //var barDataArray = []; var works = ko.observableArray(); var works2 = ko.observableArray(); var works3 = ko.observableArray(); // bar chart용 var works4 = ko.observableArray(); // bar chart용 var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter; //or = BWA.DataUtil.orFilter; var BFDataSource = BemsWebApplication.db.createDataSource('CmBusinessField'), progressDataSource = BemsWebApplication.db.createDataSource('FmsWorkCodeProgress'), chartPieDay = BWA.Chart.Instance('chartPieDayTReport', 'dxPieChart'), chartBarDay = BWA.Chart.Instance('chartBarDayTReport', 'dxChart'); //chartPieMonth = BWA.Chart.Instance('chartPieMonth', 'dxPieChart'), //chartBarMonth = BWA.Chart.Instance('chartBarMonth', 'dxChart'); var BF = ko.observableArray(), progresses = ko.observableArray(); var LCCViewGet = new BWA.Chart.PointHistory_LCCViewGet(BWA.UserInfo.SiteId()); var LCCViewPreSumGet = new BWA.Chart.PointHistory_LCCViewPreSumGet(BWA.UserInfo.SiteId()); var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForMonthOnly); var factorToe = null; var Toe = $Code.FuelType.WATER + 1; var fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'), fuelTypesForSearch = ko.observableArray(), timeTypesForSearch = ko.observableArray(), timeTypeIdForSearch = ko.observable(0), fuelTypeIdForSearch = ko.observable(), deferredForSearch = new $.Deferred(); var dataArray = ko.observableArray(), dataDayForPie = ko.observableArray(), dataMonthForPie = ko.observableArray(), dataDayForBar = ko.observableArray(), dataMonthForBar = ko.observableArray() ; var formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId()); timeTypesForSearch($G.TimeTypes); var m = moment(); /*dataDayForBar([ { DateTime: new Date(m.year(), m.month(), 1), PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 2), Value: 50, PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 3), Value: 60, PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 4), Value: 80, PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 5), Value: 100, PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 6), Value: 40, PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 7), Value: 120, PowerToe: 40, GasToe: 40, WaterToe: 40 }, { DateTime: new Date(m.year(), m.month(), 31), Value: 120, PowerToe: 40, GasToe: 40, WaterToe: 40 } ]); dataMonthForBar(dataDayForBar()); dataDayForPie([ { FuelTypeName: '전기', Value: 320 }, { FuelTypeName: '가스', Value: 350 }, { FuelTypeName: '수도', Value: 360 }, ]); dataMonthForPie(dataDayForPie()); */ var workDataSource = BWA.DataUtil.createDataSource({ dataSourceOptions: { select: [ 'SiteId', 'WorkRequestId', 'FmsWorkRequest/FmsWorkCodeType/Name', 'FmsWorkRequest/WorkTypeId', 'Title', 'OrderDate', 'FmsWorkRequest/WorkProgressId', 'CmUser/Name', // 작업지시자 'FmsWorkRequest/CmBusinessField/Name', 'BusinessFieldId', 'FmsWorkRequest/CmBusinessField/Name', 'FmsWorkRequest/BusinessFieldId' ], expand: ['FmsWorkRequest', 'FmsWorkResult', 'FmsWorkResult/CmUser', 'FmsWorkResult/IsConfirmed', 'FmsWorkResult/ConfirmedDate', 'FmsWorkRequest/FmsWorkCodeType', 'FmsWorkRequest/CmBusinessField', 'FmsWorkRequest/FmsWorkCodeProgress', 'CmBusinessField', 'CmUser'], extendOptions: { forceOriginalField: true, } }, }, 'FmsWorkOrder'); //}, 'FmsWorkRequest'); // 2016 05 11 추가 var workDataSource2 = BWA.DataUtil.createDataSource({ dataSourceOptions: { select: [ 'SiteId', 'WorkRequestId', 'StartDate', 'EndDate', 'ConfirmedDate', 'ConfirmedUserId', 'IsConfirmed', 'CauseClassId', 'Content', 'FmsWorkRequest/WorkTypeId', 'FmsWorkOrder/Title', 'FmsWorkOrder/OrderDate', 'FmsWorkRequest/WorkProgressId', 'CmUser/Name', // 작업자 'CmUser1/Name', // 승인자 'FmsWorkRequest/FmsWorkCodeType/Name', 'FmsWorkRequest/CmBusinessField/Name', 'FmsWorkRequest/FmsWorkCodeProgress/Name', 'FmsWorkOrder/BusinessFieldId', 'FmsWorkOrder/Content', 'FmsWorkRequest/Content', ], expand: [ 'FmsWorkRequest', 'FmsWorkOrder', 'FmsWorkRequest/FmsWorkCodeType', 'FmsWorkRequest/CmBusinessField', 'FmsWorkRequest/FmsWorkCodeProgress', 'FmsWorkOrder/CmBusinessField', 'CmUser', 'CmUser1'], extendOptions: { forceOriginalField: true } }, }, 'FmsWorkResult'); function handleViewShown() { if (initialized === false) { BFDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()),//**kgpark ]); $.when( BFDataSource.load(), progressDataSource.load() ).done(function (BFResult, progressResult) { BF = BFResult[0]; progresses = progressResult[0]; BWA.ChartOptions.FacilityTaskReport.MakeSeries(progresses); chartPieDay = chartPieDay(BWA.ChartOptions.FacilityTaskReport.getPieChartDayOptions()); chartBarDay = chartBarDay(BWA.ChartOptions.FacilityTaskReport.getBarChartDayOptions()); handleSearchInSearchView(); }); initialized = true; } else handleSearchInSearchView(); } function handleSearchInSearchView() { if (!useBusinessFiltering) { workDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()), and, eq('FmsWorkRequest/WorkProgressId', 3) // 대기 ]); } else { workDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()), and, eq('FmsWorkRequest/WorkProgressId', 3), // 대기 and, [eq('FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkRequest/BusinessFieldId', 1)]]); } workDataSource.load().done(function (workResult) { works(workResult); }); if (!useBusinessFiltering) { workDataSource2.filter([ eq('SiteId', BWA.UserInfo.SiteId()), and, [ eq('FmsWorkRequest/WorkProgressId', $Code.WorkProgress.WORKING), 'or', eq('FmsWorkRequest/WorkProgressId', $Code.WorkProgress.WORK_HOLD) ] ]); } else { workDataSource2.filter([ eq('SiteId', BWA.UserInfo.SiteId()), and, [eq('FmsWorkRequest/WorkProgressId', $Code.WorkProgress.WORKING), 'or', eq('FmsWorkRequest/WorkProgressId', $Code.WorkProgress.WORK_HOLD)], and, [eq('FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkRequest/BusinessFieldId', 1)]]); } workDataSource2.load().done(function (workResult) { works2(workResult); }); if (!useBusinessFiltering) { workDataSource.filter([ [ eq('SiteId', BWA.UserInfo.SiteId()), and, [eq('FmsWorkRequest/WorkProgressId', 3), 'or', eq('FmsWorkRequest/WorkProgressId', 4), 'or', eq('FmsWorkRequest/WorkProgressId', 5), 'or', eq('FmsWorkRequest/WorkProgressId', 7)], // 작업보류 추가 2016 05 10 ] ]); } else { workDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()), and, [ [eq('FmsWorkRequest/WorkProgressId', 3), 'or', eq('FmsWorkRequest/WorkProgressId', 4), 'or', eq('FmsWorkRequest/WorkProgressId', 5), 'or', eq('FmsWorkRequest/WorkProgressId', 7)], // 작업보류 추가 2016 05 10 ], and, [eq('FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkRequest/BusinessFieldId', 1)]]); } workDataSource.load().done(function (workResult) { works3(workResult); var now = new Date(); now = new Date(now.getFullYear(), now.getMonth(), 1, 0, 0, 0); //now = new Date(2015, 8, 1, 0, 0, 0); if (!useBusinessFiltering) { workDataSource.filter([ [ eq('SiteId', BWA.UserInfo.SiteId()), and, eq('FmsWorkRequest/WorkProgressId', 6), // 완료승인 and, eq('FmsWorkResult/IsConfirmed', true), and, ['FmsWorkResult/ConfirmedDate', ">=", now] ] ]); } else { workDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()), and, [ eq('FmsWorkRequest/WorkProgressId', 6), // 완료승인 and, eq('FmsWorkResult/IsConfirmed', true), and, ['FmsWorkResult/ConfirmedDate', ">=", now] ], and, [eq('FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkRequest/BusinessFieldId', 1)]]); } workDataSource.load().done(function (workResult2) { works4(workResult2); var pieDataArray = []; var barDataArray = []; _.each(BF, function (x) { barDataArray.push({ PType: x.Name(), 작업대기: getWorkProcessCount(workResult, 3, x.BusinessFieldId()), 작업진행: getWorkProcessCount(workResult, 4, x.BusinessFieldId()), 작업완료: getWorkProcessCount(workResult, 5, x.BusinessFieldId()), 작업승인: getWorkProcessCount(workResult2, 6, x.BusinessFieldId()), 작업보류: getWorkProcessCount(workResult, 7, x.BusinessFieldId()), }); }); //2015 11 24 차트 다시 그리지 않는 문제 //chartBarDay().option('dataSource', barDataArray); 대신 아래3줄로 변경 var options = BWA.ChartOptions.FacilityTaskReport.getBarChartDayOptions(); options.dataSource = barDataArray; chartBarDay().option(options); _.each(progresses, function (x) { if (x.WorkProgressId() >= 3) pieDataArray.push({ FuelTypeName: x.Name(), Value: (x.WorkProgressId() == 6) ? workResult2.length : getWorkProcessCount(workResult, x.WorkProgressId(), null) }) }); chartPieDay().option('dataSource', pieDataArray); }); }); $("#large-indicator").dxLoadIndicator({ height: 60, width: 60 }); } function handleViewHidden() { visiblePopup(false); } function handleViewShowing() { useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName); } function getWorkProcessCount(datas, type, bf) { var cnt = 0; _.each(datas, function (x) { if (x['SiteId']() == BWA.UserInfo.SiteId() && x['FmsWorkRequest/WorkProgressId']() == type && (bf == null || x['FmsWorkRequest/BusinessFieldId']() == bf)) //**kgpark //alert(x.BusinessFieldId()); //alert(x['FmsWorkRequest/WorkProgressId']()); //if (x.FmsWorkRequest/WorkProgressId() == type && x.BusinessFieldId() == bf) cnt++; }); return cnt; } function refreshList() { //dataSource.pageIndex(0); //dataSource.load(); } //var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView), { var viewModel = $.extend(BWA.CommonView.create(params, viewInfo, null, ko.observable(null), handleViewShown), { refreshList: refreshList, viewShowing: handleViewShowing, workDataGridOptions: utils.datagrid.defaultOptions({ rowClick: function (row) { //selData = row.data; /*fName(row.values[1]); Name(row.values[2]); Energy(row.values[3]); Type(row.values[4]); getValue(row.values[5]); setValue(row.values[6]); visiblePopup(true);*/ }, //rowAlternationEnabled: true, useNumberColumn: true, dataSource: works, datagridId: 'gridContainer', paging: { enabled: true, pageSize: 6 }, pager: { //allowedPageSizes: true, showPageSizeSelector: false, allowedPageSizes: [6], visible: true }, columns: [ { dataField: 'WorkRequestId', caption: $G('number'), width: '8%', alignment: 'center' }, { dataField: 'FmsWorkRequest/CmBusinessField/Name', caption: $G('businessFieldName'), width: '15%', alignment: 'center' }, { dataField: 'FmsWorkRequest/FmsWorkCodeType/Name', caption: $G('workTypeName'), width: '15%', alignment: 'center' }, { dataField: 'OrderDate', caption: $G('orderedDate'), width: '20%', alignment: 'center', sortOrder: 'desc', customizeText: function (cellInfo) { return $G.date(cellInfo.value); } }, { dataField: 'Title', caption: '작업명', width: '30%', alignment: 'center' }, //{ dataField: 'CmUser/Name', caption: '작업지시자', width: '8%', alignment: 'center' }, ], }), workDataGridOptions2: utils.datagrid.defaultOptions({ rowClick: function (row) { //selData = row.data; /*fName(row.values[1]); Name(row.values[2]); Energy(row.values[3]); Type(row.values[4]); getValue(row.values[5]); setValue(row.values[6]); visiblePopup(true);*/ }, //rowAlternationEnabled: true, dataSource: works2, datagridId: 'gridContainer2', useNumberColumn: true, paging: { enabled: true, pageSize: 6 }, pager: { //allowedPageSizes: true, showPageSizeSelector: false, allowedPageSizes: [6], visible: true }, columns: [ { dataField: 'WorkRequestId', caption: $G('number'), width: '8%', alignment: 'center' }, { dataField: 'FmsWorkRequest/CmBusinessField/Name', caption: $G('businessFieldName'), width: '10%', alignment: 'center' }, { dataField: 'FmsWorkRequest/FmsWorkCodeType/Name', caption: $G('workTypeName'), width: '10%', alignment: 'center' }, { dataField: 'FmsWorkOrder/OrderDate', caption: $G('orderedDate'), width: '15%', alignment: 'center', sortOrder: 'desc', customizeText: function (cellInfo) { return $G.date(cellInfo.value); } }, { dataField: 'EndDate', caption: '종료예정일', width: '15%', alignment: 'center', customizeText: function (cellInfo) { return $G.date(cellInfo.value); } }, { dataField: 'FmsWorkOrder/Title', caption: '작업명', width: '30%', alignment: 'center' }, { dataField: 'CmUser/Name', caption: '작업자', width: '10%', alignment: 'center' }, ], }) }); viewModel.timeBoxForSearch = timeBoxForSearch; viewModel.popupOptions = { width: 300, height: 100, contentTemplate: "info", showTitle: false, title: "메세지", visible: visiblePopup, dragEnabled: false, shading: false, closeOnOutsideClick: false }; return viewModel; };