private void execute()
        {
            Logger.Info(String.Format("Launching SigmaMeasureFilterStart at {0}", DateTime.Now));

            SigmaMeasureFilterStart sigmaMeasureFilterStart = new SigmaMeasureFilterStart();
            sigmaMeasureFilterStart.Logger = Logger;
            sigmaMeasureFilterStart.SigmaMeasureService = _sigmaMeasureService;
            sigmaMeasureFilterStart.ISAPProv = ProvidersProvider.GetDependency<SAPProvider>();

            sigmaMeasureFilterStart.WebAPIURL = _webAPIURL;

            IWebAPIProvider IWebAPIProv = ProvidersProvider.GetDependency<IWebAPIProvider>();

            sigmaMeasureFilterStart.Plants = getPlants(IWebAPIProv);

            sigmaMeasureFilterStart.IWepAPIProv = IWebAPIProv;

            if (_referenceDate == null)
            {
                sigmaMeasureFilterStart.SigmaMeasureFilterBeginningDate = DateTime.Now.Date.AddDays(-_daysBeforeReferenceDate);
                sigmaMeasureFilterStart.SigmaMeasureFilterEndingDate = DateTime.Now.Date.AddDays(_daysAfterReferenceDate);
            }
            else
            {
                sigmaMeasureFilterStart.SigmaMeasureFilterBeginningDate = _referenceDate.Value.Date.AddDays(-_daysBeforeReferenceDate);
                sigmaMeasureFilterStart.SigmaMeasureFilterEndingDate = _referenceDate.Value.Date.AddDays(_daysAfterReferenceDate);
            }
            Logger.Info(String.Format("SigmaMeasureFilterStart.SigmaMeasureFilterBeginningDate  {0}", sigmaMeasureFilterStart.SigmaMeasureFilterBeginningDate.ToShortDateString()));
            Logger.Info(String.Format("SigmaMeasureFilterStart.SigmaMeasureFilterEndingDate {0}", sigmaMeasureFilterStart.SigmaMeasureFilterEndingDate.ToShortDateString()));

            sigmaMeasureFilterStart.ReattemptsToSendJSON = _reattemptsToSendJSON;

            //executing the instance of SigmaMeasureFilterStart
            sigmaMeasureFilterStart.StartExecution();
            Logger.Info(String.Format("SigmaMeasureFilterStart ended at {0}", DateTime.Now));
        }
        public void Can_Process_Plants()
        {
            IList<Plant> Plants = new List<Plant>() { new Plant() { Id = "AGUIR01", TimeZone = "Romance Standard Time" }, new Plant() { Id = "SOLVI02", TimeZone = "Romance Standard Time" } };
            string executionResume = "";
            DateTime execInitDatetime = DateTime.Now;
            Stopwatch sw = new Stopwatch();

            SigmaMeasureFilterStart sigmaMeasureFilterStart = new SigmaMeasureFilterStart();
            sigmaMeasureFilterStart.ISAPProv = ProvidersProvider.GetDependency<SAPProvider>();
            IWebAPIProvider IWebAPIProv = ProvidersProvider.GetDependency<IWebAPIProvider>();
            //configureSapConnection();

            string user = "******";
            string password = "******";
            string client = "100";
            string host = "192.168.1.234";
            string language = "ES";
            string systemNumber = "00";
            string peakConnectionLimit = "10";
            SapConnectionProvider.InitializeConnection(user, password, client, host, language, systemNumber, peakConnectionLimit);

            sigmaMeasureFilterStart.IWepAPIProv = IWebAPIProv;
            sigmaMeasureFilterStart.SigmaMeasureFilterBeginningDate = new DateTime(2013, 8, 12);
            sigmaMeasureFilterStart.SigmaMeasureFilterEndingDate = new DateTime(2013, 8, 13);
            //sigmaMeasureFilterStart.SigmaMeasureService = getDependency<ISigmaMeasureService>();
            sw.Start();

            sigmaMeasureFilterStart.ProcessPlants(Plants, executionResume);
            sw.Stop();
            DateTime execEndDatetime = DateTime.Now;
            //sigmaMeasureFilterStart.ProcessAndSendWiseReport(sigmaMeasureFilterStart._wiseReport.ToString(), execInitDatetime, sw, execEndDatetime);
        }
        public void Can_Get_Correct_Data_With_Missing_Periods()
        {
            var timezoneMock = new Mock<TimeZone>();

            timezoneMock.Setup(s => s.StandardName).Returns("Iran Standard Time");

            Plant p = new Plant()
            {
                Id = "PLT1",

                TimeZone = timezoneMock.Object.StandardName,

            };

            var isappMock = new Mock<ISAPProvider>();

            IList<Meter> meterList = new List<Meter>()
            {
                new Meter()
                {
                    IdMeter = "ABAGI01000",
                    LosingRate = 0,
                    Power = 50,
                    IdPlant = p.Id,
                    PowerPercentage = 1
                },
                new Meter()
                {
                    IdMeter = "ABAGI01001",
                    LosingRate = 0,
                    Power = 50,
                    IdPlant = p.Id,
                    PowerPercentage = 1
                }
            };

            isappMock.Setup(s => s.GetMeterListByPlant(p)).Returns(meterList);

            IList<SigmaMeasure> listSigmaMeasure = new List<SigmaMeasure>();

            DateTime date1 = new DateTime(2012, 9, 21);

            for (int i = 0; i < 24; i++)
            {
                SigmaMeasure sm = new SigmaMeasure()
                {
                    Id_Meter = "ABAGI01000",
                    NumPeriod = i + 1,
                    ProductionDate = date1,
                    ProductionValue = 50
                };

                if (sm.NumPeriod != 3)
                {
                    listSigmaMeasure.Add(sm);
                }

                sm = new SigmaMeasure()
                {
                    Id_Meter = "ABAGI01001",
                    NumPeriod = i + 1,
                    ProductionDate = date1,
                    ProductionValue = 40
                };

                if (sm.NumPeriod != 3)
                {
                    listSigmaMeasure.Add(sm);
                }
            }

            Mock<SigmaMeasureService> sigmaMeasureServMock = new Mock<SigmaMeasureService>(null);

            sigmaMeasureServMock.Setup(s => s.GetByMeterListInDateRange(meterList, date1, date1)).Returns(listSigmaMeasure);

            SigmaMeasureFilterStart smfs = new SigmaMeasureFilterStart();

            smfs.ISAPProv = isappMock.Object;

            smfs.SigmaMeasureService = sigmaMeasureServMock.Object;

            var webApiProvMock = new Mock<IWebAPIProvider>();

            webApiProvMock.Setup(s => s.PutJSONMeasureList(It.IsAny<string>(), It.IsAny<string>())).Returns(true);

            smfs.IWepAPIProv = webApiProvMock.Object;

            smfs.Plants = new List<Plant>() { p };

            smfs.SigmaMeasureFilterBeginningDate = date1;

            smfs.SigmaMeasureFilterEndingDate = date1;

            smfs.StartExecution();

            List<SMeasure> correctList = new List<SMeasure>();

            DateTime d2 = new DateTime(2012, 9, 21, 19, 30, 0, DateTimeKind.Utc);
            DateTime notIncludedDate = new DateTime(2012, 9, 20, 22, 30, 0, DateTimeKind.Utc);

            for (DateTime di = new DateTime(2012, 9, 20, 20, 30, 0, DateTimeKind.Utc); di <= d2; di = di.AddHours(1))
            {
                if (di != notIncludedDate)
                    correctList.Add(new SMeasure(p.Id, di, di.Hour, di.Minute, 90,1));
            }

            bool dif = false;

            if (smfs.ListOfSMeasures.Count != correctList.Count)
                dif = true;

            for (int i = 0; i < smfs.ListOfSMeasures.Count && !dif; i++)
            {
                SMeasure sm = smfs.ListOfSMeasures[i];
                if (!correctList.Contains(sm))
                {
                    dif = true;
                }
            }

            Assert.AreEqual(false, dif);
        }
        public void Can_Get_Correct_Data_In_Summer_Daylight_Time_Change_In_Rare_TimeZone()
        {
            var timezoneMock = new Mock<TimeZone>();

            timezoneMock.Setup(s => s.StandardName).Returns("Iran Standard Time");

            Plant p = new Plant()
            {
                Id = "PLT1",

                TimeZone = timezoneMock.Object.StandardName,

            };

            var isappMock = new Mock<ISAPProvider>();

            IList<Meter> meterList = new List<Meter>()
            {
                new Meter()
                {
                    IdMeter = "ABAGI01000",
                    LosingRate = 0,
                    Power = 50,
                    IdPlant = p.Id,
                    PowerPercentage = 1
                },
                new Meter()
                {
                    IdMeter = "ABAGI01001",
                    LosingRate = 0,
                    Power = 50,
                    IdPlant = p.Id,
                    PowerPercentage = 1
                }
            };

            isappMock.Setup(s => s.GetMeterListByPlant(p)).Returns(meterList);

            IList<SigmaMeasure> listSigmaMeasure = new List<SigmaMeasure>();

            DateTime date1 = new DateTime(2012, 9, 21);

            for (int i = 0; i < 24; i++)
            {
                SigmaMeasure sm = new SigmaMeasure()
                {
                    Id_Meter = "ABAGI01000",
                    NumPeriod = i + 1,
                    ProductionDate = date1,
                    ProductionValue = 50
                };

                listSigmaMeasure.Add(sm);

                sm = new SigmaMeasure()
                {
                    Id_Meter = "ABAGI01001",
                    NumPeriod = i + 1,
                    ProductionDate = date1,
                    ProductionValue = 40
                };

                listSigmaMeasure.Add(sm);
            }

            Mock<SigmaMeasureService> sigmaMeasureServMock = new Mock<SigmaMeasureService>(null);

            sigmaMeasureServMock.Setup(s => s.GetByMeterListInDateRange(meterList, date1, date1)).Returns(listSigmaMeasure);

            SigmaMeasureFilterStart smfs = new SigmaMeasureFilterStart();

            smfs.ISAPProv = isappMock.Object;

            smfs.SigmaMeasureService = sigmaMeasureServMock.Object;

            var webApiProvMock = new Mock<IWebAPIProvider>();

            webApiProvMock.Setup(s => s.PutJSONMeasureList(It.IsAny<string>(), It.IsAny<string>())).Returns(true);

            smfs.IWepAPIProv = webApiProvMock.Object;

            smfs.Plants = new List<Plant>() { p };

            smfs.SigmaMeasureFilterBeginningDate = date1;

            smfs.SigmaMeasureFilterEndingDate = date1;

            smfs.StartExecution();

            List<SMeasure> correctList = new List<SMeasure>();

            for (int i = 20; i < 24; i++)
            {
                correctList.Add(new SMeasure(p.Id, date1.AddDays(-1), i, 30, 90,1));
            }

            for (int i = 0; i < 20; i++)
            {
                correctList.Add(new SMeasure(p.Id, date1, i, 30, 90,1));
            }

            bool dif = false;

            if (smfs.ListOfSMeasures.Count != correctList.Count)
                dif = true;

            for (int i = 0; i < smfs.ListOfSMeasures.Count && !dif; i++)
            {
                SMeasure sm = smfs.ListOfSMeasures[i];
                if (!correctList.Contains(sm))
                {
                    dif = true;
                }
            }

            Assert.AreEqual(false, dif);
        }