示例#1
0
        private void Edit(AnalyticDisplayModel analyticDisplayModel)
        {
            AnalyticEditModel analytic = new AnalyticEditModel
            {
                FirstName   = analyticDisplayModel.FirstName,
                LastName    = analyticDisplayModel.LastName,
                PhoneNumber = analyticDisplayModel.PhoneNumber,
                Login       = analyticDisplayModel.Login
            };

            AnalyticInfoViewModel viewModel = new AnalyticInfoViewModel(analytic);
            AnalyticInfoControl   control   = new AnalyticInfoControl(viewModel);
            Window window = WindowFactory.CreateByContentsSize(control);

            viewModel.AnalyticEdited += (s, e) =>
            {
                AnalyticEditModel analyticEditModel = e.Analytic;
                AnalyticEditDTO   analyticEditDTO   = Mapper.Map <AnalyticEditModel, AnalyticEditDTO>(analyticEditModel);

                using (IAnalyticService service = factory.CreateAnalyticService())
                {
                    ServiceMessage serviceMessage = service.Update(analyticEditDTO);
                    RaiseReceivedMessageEvent(serviceMessage);

                    if (serviceMessage.IsSuccessful)
                    {
                        window.Close();
                        Notify();
                    }
                }
            };

            window.Show();
        }
        public async Task <ActionResult> Info()
        {
            CalculateAnalytics    analyticsClass = new CalculateAnalytics();
            AnalyticInfoViewModel avim           = new AnalyticInfoViewModel();

            List <Service>  services  = new List <Service>();
            List <Analytic> Analytics = new List <Analytic>();

            if (User.IsInRole("FuneralHome"))
            {
                var userId = User.Identity.GetUserId();
                services.AddRange(db.Services.Where(s => s.FuneralHome.UserId == userId).ToList());
                Analytics.AddRange(db.Analytics.Where(a => a.Video.Service.FuneralHome.UserId == userId).ToList());
            }
            else
            {
                services.AddRange(db.Services.Where(h => h.FuneralHome.DevHome == false).ToList());
                //Analytics.AddRange(db.Analytics.ToList());
            }

            avim = analyticsClass.GetAverageViewsPerService(Analytics, services);
            AnalyticInfoViewModel serviceInfo = new AnalyticInfoViewModel();

            serviceInfo = analyticsClass.GetServiceStats(services);
            avim.DaysBetweenDeathAndService = serviceInfo.DaysBetweenDeathAndService;
            avim.PopularServiceDay          = serviceInfo.PopularServiceDay;
            avim.PopularDeathDay            = serviceInfo.PopularDeathDay;
            avim.AvgAge = serviceInfo.AvgAge;
            return(View(avim));
        }
示例#3
0
        public AnalyticInfoViewModel GetServiceStats(List <Service> Services)
        {
            AnalyticInfoViewModel avim    = new AnalyticInfoViewModel();
            List <ServiceDetails> details = new List <ServiceDetails>();
            int serviceCount = 0;

            foreach (Service service in Services)
            {
                if (service.FuneralHome.DevHome == false)
                {
                    ServiceDetails detail = new ServiceDetails();
                    detail.Age = getYearsWithDecimalPrecision(service.Birthday, service.DeathDay);
                    detail.DaysDeathToService = (service.ServiceDate - service.DeathDay).TotalDays;
                    detail.DeathDay           = service.DeathDay.DayOfWeek.ToString();
                    detail.ServiceDay         = service.ServiceDate.DayOfWeek.ToString();
                    details.Add(detail);
                    serviceCount++;
                }
            }

            avim.DaysBetweenDeathAndService = Math.Round(details.Average(a => a.DaysDeathToService), 0);
            avim.AvgAge          = Math.Round(details.Average(a => a.Age), 2);
            avim.PopularDeathDay = details.GroupBy(d => d.DeathDay).Select(d => new
            {
                DeathDay = d.Key,
                Count    = d.Count()
            })
                                   .OrderByDescending(d => d.Count)
                                   .Select(d => d.DeathDay).First();
            avim.PopularServiceDay = details.GroupBy(d => d.ServiceDay).Select(d => new
            {
                ServiceDay = d.Key,
                Count      = d.Count()
            })
                                     .OrderByDescending(d => d.Count)
                                     .Select(d => d.ServiceDay).First();


            return(avim);
        }
示例#4
0
 public AnalyticInfoControl(AnalyticInfoViewModel viewModel)
 {
     InitializeComponent();
     this.DataContext = viewModel;
 }
示例#5
0
        public AnalyticInfoViewModel GetAverageViewsPerService(List <Analytic> Analytics, List <Service> Services)
        {
            List <int>             ServiceIds  = new List <int>();
            int                    devServices = 0;
            List <ServiceAnalytic> sa          = new List <ServiceAnalytic>();

            foreach (Analytic analytic in Analytics)
            {
                if (sa.Where(a => a.ServiceId == analytic.VideoId).Count() == 0)
                {
                    ServiceAnalytic serva = new ServiceAnalytic();

                    if (analytic.VideoId != null)
                    {
                        Service dbService = Services.Where(s => s.Id == analytic.VideoId).FirstOrDefault();
                        double  lifeSpan  = 0;
                        if (dbService != null)
                        {
                            if (dbService.FuneralHome.DevHome == true)
                            {
                                devServices++;
                            }
                            lifeSpan = dbService.DeathDay.Year - dbService.Birthday.Year;
                            double totaldays = (dbService.Birthday - dbService.DeathDay).TotalDays;

                            //Could've been a baby, but most likely bad data
                            if (lifeSpan > 1)
                            {
                                serva.Age = lifeSpan;
                            }
                            else
                            {
                                serva.Age = 0;
                            }
                        }
                        serva.ServiceId = analytic.VideoId;
                        serva.Views     = 1;

                        sa.Add(serva);
                    }
                }
                else
                {
                    ServiceAnalytic service = sa.Where(s => s.ServiceId == analytic.VideoId).FirstOrDefault();
                    if (service != null)
                    {
                        service.Views = service.Views + 1;
                    }
                }
            }
            double totalViews = sa.Sum(s => s.Views);

            double totalService        = sa.Count();
            double averageServiceViews = Math.Round(totalViews / totalService, 0);
            double bla = devServices;
            List <ServiceAnalytic> ServicesUnder30 = sa.Where(a => a.Age < 30 && a.Age != 0).ToList();
            List <ServiceAnalytic> ServicesUnder40 = sa.Where(a => a.Age < 40 && a.Age != 0).ToList();
            List <ServiceAnalytic> ServicesUnder50 = sa.Where(a => a.Age < 50 && a.Age != 0 && a.Age > 40).ToList();
            List <ServiceAnalytic> ServicesUnder60 = sa.Where(a => a.Age < 60 && a.Age != 0 && a.Age > 50).ToList();
            List <ServiceAnalytic> ServicesOver60  = sa.Where(a => a.Age != 0 && a.Age > 60).ToList();

            AnalyticInfoViewModel avim = new AnalyticInfoViewModel();

            avim.AllServiceAvgViews = Math.Round(totalViews / totalService, 0);
            avim.AvgViews30         = Math.Round(ServicesUnder30.Sum(s => s.Views) / (double)ServicesUnder30.Count());
            avim.AvgViews40         = Math.Round(ServicesUnder40.Sum(s => s.Views) / (double)ServicesUnder40.Count());
            avim.AvgViews50         = Math.Round(ServicesUnder50.Sum(s => s.Views) / (double)ServicesUnder50.Count());
            avim.AvgViews60         = Math.Round(ServicesUnder60.Sum(s => s.Views) / (double)ServicesUnder60.Count());
            avim.AvgViews70         = Math.Round(ServicesOver60.Sum(s => s.Views) / (double)ServicesOver60.Count());
            return(avim);
        }