BemsWebApplication.CenterMainDashboard = function (params, viewInfo) {
    "use strict";


    var CurrSiteData;
    var sitename = "";
    var CmSite;
    function refreshList() {
    }

    function handleViewShowing() {
        DevExpress.ui.themes.current('generic.dark');
        if (BWA.config["center-mode"]) {
            sitename = "통합관리센터";
        }
        CmSiteDataSource.filter([
            ['lat', '>=', 1]
        ]);
        CmSiteDataSource.sort({ getter: "lat", asc: true });
        CmSiteDataSource.load().done(function (result) {
            CmSite = result;
        });
    }

    function handleViewHidden() {
    }

    function handleViewDisposing() {
    }

    var timer;
    var gaugeDataOptions = {};

    var //ELECTRICITY_DAY_MAX = 50000, // 전기금일목표
        //ELECTRICITY_MONTH_MAX = 1000000, //전기이달목표
        ELECTRICITY_YEAR_MAX = 0,
        //ELECTRICITY_GOAL_YEAR = 101165200, // 백만kWh
        //GAS_DAY_MAX = 40000,
        //GAS_MONTH_MAX = 100000,
        GAS_YEAR_MAX = 0,
        WATER_YEAR_MAX = 0;
    //GAS_GOAL_YEAR = 3708099, // 

    var yearElectricityUsageValue = ko.observable(0),
        yearGasUsageValue = ko.observable(0);

    var CODE = $Code,
    FuelType = CODE.g_fuelTypes,
    FT = CODE.FacilityType,
    FC = CODE.FacilityCode,
    F = CODE.Formula,
    TIT = CODE.TimeIntervalType;

    var visiblePopup = ko.observable(false);

    var factorCo2 = null, factorToe = null, factorKcal = null;
    var serviceType = null;

    var fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'),
    factorCo2DataSource = BemsWebApplication.db.createDataSource('BemsFactorCo2'),
    serviceTypesDataSource = BemsWebApplication.db.createDataSource('BemsServiceType'),
    factorToeDataSource = BemsWebApplication.db.createDataSource('BemsFactorToe'),
    CmSiteDataSource = BemsWebApplication.db.createDataSource('CmSite');

    var mainChart = BWA.Chart.Instance('mainChart', 'dxChart');

    var energyUsageStatusGet = new BWA.Chart.PointHistoryServiceTypeGet(BWA.UserInfo.SiteId());
    //var energyUsageStatusGet = new BWA.Chart.PointHistoryServiceTypeGet(BWA.UserInfo.SiteId());
    //var energyUsageStatusGet = new BWA.Chart.PointHistoryServiceTypeGet(BWA.UserInfo.SiteId());
    var yearElectricityUsageGauge = BWA.Chart.Instance('yearElectricityUsageGauge', 'dxCircularGauge'),
    yearGasUsageGauge = BWA.Chart.Instance('yearGasUsageGauge', 'dxCircularGauge'),
    yearEnergyUsageGauge = BWA.Chart.Instance('yearEnergyUsageGauge', 'dxCircularGauge');

    var chartPieDaySU = BWA.Chart.Instance('chartPieDaySU_CM', 'dxPieChart');
    var chartBarDaySU = BWA.Chart.Instance('chartBarDaySU_CM', 'dxChart');

    var works = ko.observableArray();

    var initialized = false;

    function handleViewShown() {
        /*
        var tests = [];
        for (var i=0; i < 2; i++)
        {
            tests.push({
                site: '대구은행',
                today_kcal_24h: '대구은행',
                elec: 100,
                gas: 200,
                per_target : 300,
            });
        }
        works(tests);*/
        if (initialized === false) {

            var chartOption = BWA.ChartOptions.CenterMainDashboard;
            var chartOptionService = BWA.ChartOptions.ServiceEnergyUsageKC;
            //var chartOption2 = BWA.ChartOptions.RefrigeratorAnalysis;
            mainChart = mainChart(chartOption.getMainChartOptions());
            //mainChart = mainChart(chartOption2.getCopChartOptions($Code.TimeType.HOUR));
            yearElectricityUsageGauge = yearElectricityUsageGauge(chartOption.getYearElectricityUsageStatusChartOptions());
            yearGasUsageGauge = yearGasUsageGauge(chartOption.getYearGasUsageStatusChartOptions());
            yearEnergyUsageGauge = yearEnergyUsageGauge(chartOption.getYearTotalEnergyUsageStatusChartOptions());

            gaugeDataOptions[FT.ELECTRICITY] = {
                gauge: yearElectricityUsageGauge,
                max: ELECTRICITY_YEAR_MAX,
                value: yearElectricityUsageValue
            };
            gaugeDataOptions[FT.GAS] = {
                gauge: yearGasUsageGauge,
                max: GAS_YEAR_MAX,
                value: yearGasUsageValue
            };

            serviceTypesDataSource.filter([
                ['ServiceTypeId', '<', 100]
            ]);

            var whenPromise = $.when(fuelTypesDataSource.load(),
                   factorCo2DataSource.load(),
                   factorToeDataSource.load(),
                   serviceTypesDataSource.load())

            .then(function (dbfuelTypes, dbfactorsCo2, dbfactorsToe, dbServieType) {

                factorCo2 = BWA.Bems.refineFactorCo2DataArray(dbfactorsCo2[0]);
                factorToe = BWA.Bems.refineFactorToeDataArray(dbfactorsToe[0]);
                factorKcal = BWA.Bems.refineFactorKCalDataArray(dbfactorsToe[0]);
                serviceType = dbServieType[0];

                chartOptionService.MakeSeries(serviceType);

                chartPieDaySU = chartPieDaySU(chartOptionService.getPieChartDayOptions());
                chartBarDaySU = chartBarDaySU(chartOptionService.getBarChartDayOptions());

                visiblePopup(true);
                CenterDataLoad();

                timer = setInterval(function () {
                    var now = new Date();
                    if ((now.getMinutes() % 15 == 0) && (now.getSeconds() == 59)) {
                        //if (now.getSeconds() == 59) {
                        CenterDataLoad();
                        //SelectSite(CurrSiteData);
                    }
                }, 1000);


            });

            initialized = true;
        }


    }

    function loadCircularGaugeDatas(data) {
        // 파라미터 값들을 로드

        var startDateInYear = moment().startOf('year'),
            endDateInYear = moment();

        var param =
        {
            SiteId: data.site,
            BuildingId: 1, // 의미없음
            FuelType: 1, // 의미없음
            StartDate: startDateInYear,
            EndDate: endDateInYear
        };
        $.when(BWA.api.post('BemsMonitoringPointHistory/GetPrediction', param)) // 오늘,이달,금년 모두 한번에 온다
        .done(function (goals) {
            //ELECTRICITY_DAY_MAX = goals[0];
            //GAS_DAY_MAX = goals[1];
            //WATER_DAY_MAX = goals[2];

            //ELECTRICITY_MONTH_MAX = goals[3];
            //GAS_MONTH_MAX = goals[4];
            //WATER_MONTH_MAX = goals[5];

            ELECTRICITY_YEAR_MAX = goals[6];

            //2017 01 09  가스 목표량은 Kw 이다 해서 아래와 같이 처리한다 hcLee
            //GAS_YEAR_MAX = goals[7];
            GAS_YEAR_MAX = factorToe.calculate(goals[7], FC.ELECTRICITY) / factorToe[FC.GAS].pureFactor;


            WATER_YEAR_MAX = goals[8];

            gaugeDataOptions[FT.ELECTRICITY].max = ELECTRICITY_YEAR_MAX;
            gaugeDataOptions[FT.GAS].max = GAS_YEAR_MAX;
            //gaugeDataOptions[FT.WATER].max = WATER_YEAR_MAX;

            var promises = [];
            var param =
            {
                SiteId: data.site,
                TimeIntervalType: TIT.YEAR,
                FacilityTypeId: FT.ELECTRICITY,
                FacilityCode: FC.ELECTRICITY,
                FormulaId: F[FT.ELECTRICITY].TOTAL_ELECTRICITY_AMOUNT,
                StartDate: $G.dateTime(startDateInYear),
                EndDate: $G.dateTime(endDateInYear),
            };
            promises.push(BWA.api.get('BemsFormula/Calculation', param));

            param.FacilityTypeId = FT.GAS;
            param.FacilityCode = FC.GAS;
            param.FormulaId = F[FT.GAS].TOTAL_GAS_AMOUNT;
            promises.push(BWA.api.get('BemsFormula/Calculation', param));

            param.FacilityTypeId = FT.WATER;
            param.FacilityCode = FC.WATER;
            param.FormulaId = F[FT.WATER].TOTAL_WATER_AMOUNT;
            promises.push(BWA.api.get('BemsFormula/Calculation', param));

            $.when.apply(this, promises).done(function (e, g, w) {

                var V = (e[0].length == 1) ? e[0][0].Value : 0;

                gaugeDataOptions[FT.ELECTRICITY].gauge().value((V == 0) ? 0 : V / gaugeDataOptions[FT.ELECTRICITY].max * 100);
                gaugeDataOptions[FT.ELECTRICITY].value(V);

                V = (g[0].length == 1) ? g[0][0].Value : 0;
                gaugeDataOptions[FT.GAS].gauge().value((V == 0) ? 0 : V / gaugeDataOptions[FT.GAS].max * 100);
                gaugeDataOptions[FT.GAS].value(V);

                var maxCo2 = factorCo2.calculate(ELECTRICITY_YEAR_MAX, FC.ELECTRICITY) + factorCo2.calculate(GAS_YEAR_MAX, FC.GAS) + factorCo2.calculate(WATER_YEAR_MAX, FC.WATER);

                var Co2Electricity = factorCo2.calculate(yearElectricityUsageValue(), FC.ELECTRICITY);
                var Co2Gas = factorCo2.calculate(yearGasUsageValue(), FC.GAS);

                V = (w[0].length == 1) ? w[0][0].Value : 0;
                var Co2 = Co2Electricity + Co2Gas + factorCo2.calculate(V, FC.WATER);

                //if (V == 0) yearEnergyUsageGauge().value(0); // cyim 2016.12.08 데이타가 없으면 게이지 값을 초기화
                if (Co2 == 0 || maxCo2 == 0) yearEnergyUsageGauge().value(0); // 버그수정 hcLee 2017 02 16
                else yearEnergyUsageGauge().value(Co2 / maxCo2 * 100);

                $('#yearCO2').text(Math.round(Co2 * 100) / 100);
            });
        });
        //여기서 전체 Co2별도 계산 hcLee 2015 06 29
        //rateGauges[DAY_CO2_USAGE].setValue(1.1);
        //rateGauges[MONTH_CO2_USAGE].setValue(2.2);
        //rateGauges[YEAR_CO2_USAGE].setValue(3.3);
        //});
    }

    function loadTotalCo2Month(data) {

        var now = new Date();

        var startDate, endDate;

        var monthMoment;
        monthMoment = moment().month(now.getMonth());

        startDate = monthMoment.startOf('month');
        endDate = monthMoment.clone().endOf('month');

        var promises = [];
        var param =
        {
            SiteId: data.site,
            TimeIntervalType: TIT.MONTH,
            FacilityTypeId: FT.ELECTRICITY,
            FacilityCode: FC.ELECTRICITY,
            FormulaId: F[FT.ELECTRICITY].TOTAL_ELECTRICITY_AMOUNT,
            StartDate: $G.dateTime(startDate),
            EndDate: $G.dateTime(endDate),
        };
        promises.push(BWA.api.get('BemsFormula/Calculation', param));

        param.FacilityTypeId = FT.GAS;
        param.FacilityCode = FC.GAS;
        param.FormulaId = F[FT.GAS].TOTAL_GAS_AMOUNT;
        promises.push(BWA.api.get('BemsFormula/Calculation', param));

        param.FacilityTypeId = FT.WATER;
        param.FacilityCode = FC.WATER;
        param.FormulaId = F[FT.WATER].TOTAL_WATER_AMOUNT;
        promises.push(BWA.api.get('BemsFormula/Calculation', param));
        $.when.apply(this, promises).done(function (e, g, w) {

            var ee = (e[0].length == 1) ? e[0][0].Value : 0;
            var gg = (g[0].length == 1) ? g[0][0].Value : 0;
            var ww = (w[0].length == 1) ? w[0][0].Value : 0;

            var thisMonthCo2 = factorCo2.calculate(ee, FC.ELECTRICITY) + factorCo2.calculate(gg, FC.GAS) + factorCo2.calculate(ww, FC.WATER);
            $('#monthCO2').text(Math.round(thisMonthCo2 * 100) / 100);
            //yearEnergyUsageGauge().value(Co2 / maxCo2 * 100);
        });
    }

    function getChartDataFromDataSources2(loadedDataSources, barDataArray, pieDataArray, timeFormat) {

        var calculate = factorKcal.calculate;

        var sums = new Array(serviceType.length);
        for (var v = 0; v < sums.length; v++) sums[v] = 0;

        // 미리 준비한다.
        var Datas = new Array();
        _.each(loadedDataSources, function (array, i) {
            _.each(array, function (x) {
                if (i == 0) {
                    var data = {
                        DateTime: timeFormat == 'M' ? BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) : moment(x.DateTime).format(timeFormat),
                    };

                    var b = (function (data) {
                        var ret;
                        for (var d = 0; d < Datas.length; d++) {
                            if (Datas[d].DateTime == data.DateTime) return false;
                        }
                        return true;
                    })(data);

                    if (b) {
                        for (var s = 1; s < serviceType.length; s++) {
                            var fieldName = serviceType[s].Name();
                            data[fieldName] = 0;
                        }
                        Datas.push(data);
                    }
                }
                else
                    return false;
            });
        });

        _.each(loadedDataSources, function (array, i) {
            _.each(array, function (x) {

                var fieldName = serviceType[x.ServiceType].Name();

                _.each(Datas, function (d) {
                    if (timeFormat == 'M') {
                        if (d.DateTime == BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate())) {
                            d[fieldName] += x.Value;
                        }
                    }
                    else {
                        if (d.DateTime == moment(x.DateTime).format(timeFormat)) {
                            d[fieldName] += x.Value;
                        }
                    }
                });
                sums[x.ServiceType] += x.Value;
            });
        });

        _.each(Datas, function (x) {
            barDataArray.push(x);
        });

        _.each(sums, function (x, i) {
            if (i > 0)
                pieDataArray.push({
                    FuelTypeName: serviceType[i].Name(),
                    Value: x
                });
        });


    }
    function loadDailyEnergyUsage(sitedata, year, month) {
        var startDate, endDate;
        var monthMoment;

        monthMoment = moment(year).month(month - 1);

        startDate = monthMoment.startOf('month');
        endDate = monthMoment.clone().endOf('month');

        var commonParameters = {
            SiteId: sitedata.site,
            TimeIntervalType: TIT.DAY,
            StartDate: startDate,
            EndDate: endDate
        };
        var pointHistoryParameters = {
            BuildingId: 0,
            FloorId: null,
            ZoneId: null,
            FuelTypeId: null,
        };

        var promises = [];

        pointHistoryParameters.FuelTypeId = -1;
        //energyUsageStatusGet.siteId = sitedata.site;
        promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters)));

        $.when.apply(this, promises).done(function (v) {

            var barDataArray = [];
            var pieDataArray = [];
            getChartDataFromDataSources2(v, barDataArray, pieDataArray, 'D');

            var options = BWA.ChartOptions.ServiceEnergyUsageKC.getBarChartDayOptions();
            options.dataSource = barDataArray;
            chartBarDaySU().option(null);
            chartBarDaySU().option(options);

            chartPieDaySU().option('dataSource', pieDataArray);
            visiblePopup(false);

            $('#st1').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 사용 현황');
            $('#st2').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 전체 사용량 비율');
            $('#st3').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 사용량');

            $('#st4').text('kcal환산 용도별 사용 현황');
            $('#st5').text('kcal환산 용도별 전체 사용량 비율');
            $('#st6').text('kcal환산 용도별 사용량');

        })
        .fail(function (error) {
            visiblePopup(false);
        });
    }

    function loadDailyEnergyUsage_OLD(sitedata, year, month) {
        //2016 02 26
        var startDate, endDate;
        var monthMoment;

        monthMoment = moment(year).month(month - 1);

        startDate = monthMoment.startOf('month');
        endDate = monthMoment.clone().endOf('month');

        var promises = [];
        _.each(FuelType, function (x) {
            var param =
            {
                SiteId: sitedata.site,
                TimeIntervalType: TIT.DAY,
                StartDate: $G.dateTime(startDate),
                EndDate: $G.dateTime(endDate),
                BuildingId: 0,
                FloorId: null,
                ZoneId: null,
                FuelTypeId: x.FuelTypeId()
            };
            promises.push(BWA.api.get('BemsMonitoringPointHistory/ServiceType', param));
        });

        $.when.apply(this, promises).done(function () {

            var barDataArray = [];
            var pieDataArray = [];

            getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'D');

            //2015 11 23 차트 다시 그리지 않는 문제 
            //chartBarDay().option('dataSource', barDataArray); // 대신 아래3줄로 변경
            var options = BWA.ChartOptions.ServiceEnergyUsageKC.getBarChartDayOptions();
            options.dataSource = barDataArray;
            chartBarDaySU().option(null);
            chartBarDaySU().option(options);

            chartPieDaySU().option('dataSource', pieDataArray);
            visiblePopup(false);

            $('#st2_CM').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 전체 사용량 비율');
            $('#st3_CM').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 사용량');
        })
        .fail(function (error) {
            visiblePopup(false);
        });
    }

    function getChartDataFromDataSources(loadedDataSources, barDataArray, pieDataArray, timeFormat) {

        var calculate = factorKcal.calculate;

        _.each(loadedDataSources, function (array, i) {
            _.each(array[0], function (x) {
                x.Value = calculate(x.Value, FuelType[i].FuelTypeId());
            });
        });

        //var sums =new Number[8];
        var sums = new Array(serviceType.length);
        //var sums = new Array(8);
        for (var v = 0; v < sums.length; v++) sums[v] = 0;

        // 미리 준비한다.
        var Datas = new Array();
        _.each(loadedDataSources, function (array, i) {
            _.each(array[0], function (x) {
                if (i == 0) {
                    var data = {
                        //DateTime: moment(x.DateTime).format(timeFormat),
                        DateTime: timeFormat == 'M' ? BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) : moment(x.DateTime).format(timeFormat),
                    };

                    var b = (function (data) {
                        var ret;
                        for (var d = 0; d < Datas.length; d++) {
                            if (Datas[d].DateTime == data.DateTime) return false;
                        }
                        return true;
                    })(data);

                    if (b) {
                        for (var s = 1; s < serviceType.length; s++) {
                            var fieldName = serviceType[s].Name();
                            data[fieldName] = 0;
                        }
                        Datas.push(data);
                    }
                }
                else
                    return false;
            });
        });

        _.each(loadedDataSources, function (array, i) {
            _.each(array[0], function (x) {

                var fieldName = serviceType[x.ServiceType].Name();

                _.each(Datas, function (d) {
                    if (timeFormat == 'M') {
                        if (d.DateTime == BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate())) {
                            d[fieldName] += x.Value;
                        }
                    }
                    else {
                        if (d.DateTime == moment(x.DateTime).format(timeFormat)) {
                            d[fieldName] += x.Value;
                        }
                    }
                });
                sums[x.ServiceType] += x.Value;
                //barDataArray.push(data);
            });
        });

        _.each(Datas, function (x) {
            barDataArray.push(x);
        });

        //alert(serviceType[0].Name);
        _.each(sums, function (x, i) {
            if (i > 0)
                pieDataArray.push({
                    FuelTypeName: serviceType[i].Name(),
                    Value: x
                });
        });


    }
    function CenterDataLoad() {

        var siteDatas = [], tempsiteDatas = [];

        var startDateInYear = moment().startOf('year'), endDateInYear = moment();
        var param =
        {
            TimeIntervalType: TIT.YEAR,
            StartDate: $G.dateTime(startDateInYear),
            EndDate: $G.dateTime(endDateInYear)
        };

        $.when(BWA.api.post('BemsMonitoringPointHistory/GetCenterSiteData', param)) // 오늘,이달,금년 모두 한번에 온다
        .done(function (datas) {
            //console.log(datas);

            _.each(datas, function (s) {

                // 2017 01 11 
                var gasTarget = factorToe.calculate(s.gas_target, FC.ELECTRICITY) / factorToe[FC.GAS].pureFactor;

                var tt = (factorKcal.calculate(s.elec_current, FuelType[0].FuelTypeId()) + factorKcal.calculate(s.gas_current, FuelType[1].FuelTypeId())) /
                        (factorKcal.calculate(s.elec_target, FuelType[0].FuelTypeId()) + factorKcal.calculate(gasTarget, FuelType[1].FuelTypeId())) * 100;
                tt = 100 - tt;
                tt = Math.round(tt * 100) / 100;
                if (isNaN(tt)) tt = 0; // 정상코드
                //if (isNaN(tt)) tt = -10;

                var todaykcal = [];
                var i = 0;
                _.each(s.e_value_list, function (e) {
                    todaykcal.push({
                        DateTime: e.DateTime,
                        Value: Math.round((factorKcal.calculate(e.Value, FuelType[0].FuelTypeId()) + factorKcal.calculate(s.g_value_list[i].Value, FuelType[1].FuelTypeId())) * 100) / 100,
                    });
                    i++;
                });

                siteDatas.push({
                    site: s.siteid,
                    name: s.name,
                    //today_kcal_24h: '대구은행',
                    elec: $NumberFormat(s.elec_current),
                    gas: $NumberFormat(s.gas_current),
                    elec_target: s.elec_target,
                    gas_target: s.gas_target,
                    //total_target: Math.abs(100-tt),
                    total_target: tt,

                    //                        today_e_list: s.e_value_list,
                    //                        today_g_list: s.g_value_list,
                    today_value_list: todaykcal,
                });
            });
            for (var i = 0; i < CmSite.length; i++) {
                for (var j = 0; j < siteDatas.length; j++) {
                    if (CmSite[i].SiteId() == siteDatas[j].site) {
                        tempsiteDatas.push({
                            site: siteDatas[j].site,
                            name: siteDatas[j].name,
                            elec: siteDatas[j].elec,
                            gas: siteDatas[j].gas,
                            elec_target: siteDatas[j].elec_target,
                            gas_target: siteDatas[j].gas_target,
                            total_target: siteDatas[j].total_target,
                            today_value_list: siteDatas[j].today_value_list,
                        });
                        break;
                    }
                }
            }
            works(tempsiteDatas);
            if (CurrSiteData == undefined) CurrSiteData = tempsiteDatas[0];
            SelectSite(CurrSiteData);
        });
    }

    function setUpTitle(title) {
        $('#borad-title').html(title);
        $('#site-name').html(sitename);
    }

    function SelectSite(data) {

        setUpTitle(data.name);

        visiblePopup(true);

        var promises = [];
        var endDate = moment(); endDate.endOf('day')
        //return moment(date).subtract(number, unit).toDate();
        var startDate = moment().subtract(30, 'days'); startDate.startOf('day');
        //var lastWeekMoment = moment().subtract(7, 'days');
        var param =
        {
            SiteId: data.site,
            TimeIntervalType: TIT.DAY,
            FacilityTypeId: FT.ELECTRICITY,
            FacilityCode: FC.ELECTRICITY,
            FormulaId: F[FT.ELECTRICITY].TOTAL_ELECTRICITY_AMOUNT,
            StartDate: $G.dateTime(startDate),
            EndDate: $G.dateTime(endDate),
        };
        promises.push(BWA.api.get('BemsFormula/Calculation', param));

        var param =
        {
            SiteId: data.site,
            TimeIntervalType: TIT.DAY,
            FacilityTypeId: FT.GAS,
            FacilityCode: FC.GAS,
            FormulaId: F[FT.GAS].TOTAL_GAS_AMOUNT,
            StartDate: $G.dateTime(startDate),
            EndDate: $G.dateTime(endDate),
        };
        promises.push(BWA.api.get('BemsFormula/Calculation', param));
        $.when.apply(this, promises)
        //$.when(BWA.api.post('BemsFormula/Calculation', param)) // 오늘,이달,금년 모두 한번에 온다
        .done(function (e, g) {
            var dataArray = [];

            _.each(e[0], function (x) {
                dataArray.push({
                    DateTime: BWA.Chart.getCustermTimeArgumentAxisString(TIT.DAY, moment(x.DateTime).toDate()),
                    eValue: x.Value
                });
            });
            _.each(g[0], function (x) {
                dataArray.push({
                    DateTime: BWA.Chart.getCustermTimeArgumentAxisString(TIT.DAY, moment(x.DateTime).toDate()),
                    gValue: x.Value
                });
            });
            var options = BWA.ChartOptions.CenterMainDashboard.getMainChartOptions();
            options.dataSource = dataArray;
            mainChart().option(options);

            loadDailyEnergyUsage(data, endDate.toDate().getFullYear().toString(), (endDate.toDate().getMonth() + 1).toString());
            loadCircularGaugeDatas(data);
            loadTotalCo2Month(data);

        })


        //loadDailyEnergyUsage(data, $G.dateTime(endDate).getFullYear().toString(), ($G.dateTime(endDate).getMonth() + 1).toString());
    };

    var viewModel = $.extend(BWA.CommonView.create(
        params, viewInfo, null, null, handleViewShown), {

            workDataGridOptions: utils.datagrid.defaultOptions({

                onCellClick: function (object) {
                    if (object.columnIndex == 5 && object.rowType == 'data') {
                        var newWindow = window.open("about:blank");
                        switch (object.values[5]) {
                            case 1: //대구은행 제2본점
                                newWindow.location.href = 'http://10.10.30.3:8081';
                                break;
                            case 2://서울시립 보라매병원
                                newWindow.location.href = 'http://10.10.20.2:8081';
                                break;
                            case 6://아이파크몰
                                newWindow.location.href = 'http://10.10.60.3:8081';
                                break;
                            case 11://대구은행 제1본점
                                newWindow.location.href = 'http://10.10.80.4:8081';
                                break;
                            case 10://정선 파크로쉬
                                newWindow.location.href = 'http://10.10.50.2:8081';
                                break;
                        }
                    }
                },

                handleDataGridRowClick: function (id, dataGrid, clickRow) { // function () {
                    dataGrid.clearSelection();
                    CurrSiteData = clickRow.data;
                    //console.log(data);
                    SelectSite(CurrSiteData);
                },

                selection: {
                    mode: 'single'
                },

                rowAlternationEnabled: true,
                //useNumberColumn: true,
                dataSource: works,
                datagridId: 'gridContainerCD',

                paging: {
                    enabled: false,
                    pageSize: 6
                },

                pager: {
                    //allowedPageSizes: true,
                    showPageSizeSelector: false,
                    allowedPageSizes: [6],
                    visible: false
                },

                columns: [
                    { dataField: 'name', caption: '현장명', width: '25%', alignment: 'center' },
                    //{ caption: '에너지 사용량', width: '30%', alignment: 'center' },
                    {
                        width: '25%',
                        caption: "금일 에너지 사용량",
                        alignment: 'left',
                        //caption: "금일 전기 현황",
                        //width: 155,
                        cellTemplate: function (container, options) {
                            container.addClass("chart-cell");
                            $("<div />").dxSparkline({
                                dataSource: options.data.today_value_list,
                                argumentField: "DateTime",
                                valueField: "Value",
                                type: "line",
                                showMinMax: true,
                                lineColor: "#565077",
                                maxColor: "#f00",
                                minColor: "#2ab71b",
                                pointSize: 2,
                                size: {
                                    width: 'auto',
                                    height: 30
                                },
                                tooltip: {
                                    enabled: true
                                }
                            }).appendTo(container);
                        }
                    },
/*                    {
                        width: '20%',
                        //caption: "에너지 사용량",
                        caption: "금일 가스 현황",
                        //width: 155,
                        cellTemplate: function (container, options) {
                            container.addClass("chart-cell");
                            $("<div />").dxSparkline({
                                dataSource: options.data.today_g_list,
                                argumentField: "DateTime",
                                valueField: "Value",
                                type: "line",
                                showMinMax: true,
                                lineColor: "#565077",
                                maxColor: "#f00",
                                minColor: "#2ab71b",
                                pointSize: 2,
                                size: {
                                    width: 140,
                                    height: 30
                                },
                                tooltip: {
                                    enabled: true
                                }
                            }).appendTo(container);
                        }
                    },*/

                    { dataField: 'elec', caption: '금년 전기 (kWh)', width: '17%', alignment: 'right' },
                    { dataField: 'gas', caption: '금년 가스 (㎥)', width: '17%', alignment: 'right' },
                    { dataField: 'total_target', caption: '목표대비 (%)', width: '17%', alignment: 'center' },
                    {
                        dataField: 'site', caption: '이동', width: '10%', alignment: 'center',
                        customizeText: function (cellInfo) {
                            return "이동";
                        }

                        /*
                        cellTemplate: function (container, options) {
                            $("<div />").dxButton({
                                //text: options.data.name,
                                site: options.data.site,
                                text: '이동',
                                onClick: function (e) {
                                    var newWindow = window.open("about:blank");
                                    //원래 코드 2017 02 09에 막음, 각각의 사이트를 별도로 구성하기 때문에 쿠키및 자동로그인 기능 사용불가
                                    //newWindow.location.href = '/index.html#Login';
                                    //$.cookie('id', 'admin');
                                    //$.cookie('password', 'kanu123');
                                    //$.cookie('siteId', options.data.site);
                                    //$.cookie('fromCenter', true);
                                }
                            }).appendTo(container);
                        }*/
                    },

                ],

                onCellPrepared: function (options) {
                    if (options.columnIndex == 4 && options.rowType == 'data') {
                        var fieldData = options.value,
                            fieldHtml = "";

                        if (fieldData != 0) {
                            options.cellElement.addClass((fieldData < 0) ? "inc" : "dec");
                        }
                        fieldHtml += "<span class='current-value'>" +
                            "</span> <div class='diff-container'><span class='diff'>" +
                            Math.abs(fieldData) +
                            "</span></div>";
                        options.cellElement.html(fieldHtml);
                        /*
                                                    options.cellElement.addClass((fieldData < 0 ) ? "inc" : "dec");
                                                    //if (fieldData && fieldData > 0) {
                                                        //options.cellElement.addClass((fieldData.diff > 0) ? "inc" : "dec");
                                                        fieldHtml += "<span class='current-value'>" +
                                                            //Globalize.formatCurrency(fieldData.value, "USD") +
                                                            "</span> <span class='diff'>" +
                                                            Math.abs(fieldData) +
                                                            //fieldData +
                                                            //Math.abs(fieldData.diff).toFixed(2) +
                                                            "  </span>";
                                                    //} else {
                                                        //fieldHtml = fieldData.value;
                        
                                                    //}
                                                    options.cellElement.html(fieldHtml);*/
                    }

                },
            }),

            refreshList: refreshList,
            viewShowing: handleViewShowing,
            viewHidden: handleViewHidden,

            viewDisposing: handleViewDisposing,

        });

    $HourGlassPopup(viewModel, visiblePopup);

    return viewModel;
};