Exemple #1
0
        public StatusModel <HourStatisticsModel> GetHourStatistics(Area?area, DateTime startTime, DateTime endTime, HourStatisticsType hourStatisticsType)
        {
            var result = new StatusModel <HourStatisticsModel>(false, String.Empty, new HourStatisticsModel());

            try
            {
                using (var unitOfWork = new UnitOfWork <BelibaHomaDBEntities>())
                {
                    var tutorRepoistory = unitOfWork.GetRepository <ITutorRepository>();

                    var tutors = tutorRepoistory.GetAll().Where(t => !area.HasValue || t.User.Area == (int)area.Value);

                    var tutorSessions = tutors.SelectMany(t => t.TutorTrainee)
                                        .SelectMany(tt => tt.TutorReport)
                                        .SelectMany(tr => tr.TutorSession)
                                        .Where(ts => ts.MeetingDate >= startTime && ts.MeetingDate <= endTime);

                    var traineesCount = tutorSessions.GroupBy(ts => ts.TutorReport.TutorTrainee.Trainee).Count();

                    if (hourStatisticsType == HourStatisticsType.Sum)
                    {
                        result.Data.HourStatistics = tutorSessions.GroupBy(ts => ts.MeetingDate.Month).ToDictionary(ts => ts.Key,
                                                                                                                    tss => tss.Sum(ts => (ts.EndTime - ts.StartTime).TotalHours));
                    }
                    else
                    {
                        result.Data.HourStatistics = tutorSessions.GroupBy(ts => ts.MeetingDate.Month).ToDictionary(ts => ts.Key,
                                                                                                                    tss => tss.Sum(ts => (ts.EndTime - ts.StartTime).TotalHours) / traineesCount);
                    }

                    result.Success = true;
                }
            }
            catch (Exception ex)
            {
                result.Message = String.Format("Error getting Hour Statistics from DB");
                LogService.Logger.Error(result.Message, ex);
            }


            return(result);
        }
Exemple #2
0
        public ActionResult GetHourStatistics(HourStatisticsType hourStatisticsType, int?year, Area?area)
        {
            if (CurrentUser.UserRole == UserRole.Rackaz)
            {
                area = CurrentUser.Area;
            }
            if (!year.HasValue)
            {
                year = DateTime.Now.Year;
            }

            var startTime = new DateTime(year.Value, 10, 1);
            var endTime   = new DateTime(year.Value + 1, 10, 1);

            var result = _reportService.GetHourStatistics(area, startTime, endTime, hourStatisticsType);

            //TODO: dont show if no data exists:
            //if (result.Data == null)
            //{
            //    return Error(result);
            //}

            if (result.Success)
            {
                var series = new List <double>();

                for (var i = 1; i <= 12; i++)
                {
                    var hours = 0.0;
                    var month = (i + 8) % 12 + 1;

                    if (result.Data.HourStatistics.ContainsKey(month))
                    {
                        hours = result.Data.HourStatistics[month];
                    }

                    series.Add(Math.Round(hours, 2));
                }

                series = RemoveLastsZeros(series);

                var chartModel = new HighChartModel
                {
                    chart = new Chart
                    {
                        type = "line"
                    },
                    title = new Title
                    {
                        text = (area.HasValue ? string.Format(" סטטיסטיקת שעות חניכה באיזור {0}", area.Value.ToDescription()) : " סטטיסטיקת שעות חניכה"),
                        x    = -20
                    },
                    xAxis = new Xaxis
                    {
                        categories = new List <string>
                        {
                            "אוקטובר",
                            "נובמבר",
                            "דצמבר",
                            "ינואר",
                            "פברואר",
                            "מרץ",
                            "אפריל",
                            "מאי",
                            "יוני",
                            "יולי",
                            "אוגוסט",
                            "ספטמבר"
                        },
                        title = new Title1
                        {
                            text = string.Format("אוקטובר {0} - ספטמבר {1}", year, year + 1)
                                   //text = "אוקטובר שנה נבחרת עד ספטמבר שנה לאחר מכן"
                        }
                    },
                    yAxis = new Yaxis
                    {
                        title = new Title1
                        {
                            text = "סכום שעות החניכה"
                        },
                        plotLines = new List <Plotline> {
                            new Plotline
                            {
                                color     = "red",
                                dashStyle = "Solid",
                                // TODO : Change to real values from or
                                value = hourStatisticsType == HourStatisticsType.Sum ? 100000 : 12,
                                width = 3
                            }
                        }
                    },
                    series = new List <Series>
                    {
                        new Series
                        {
                            data = series,
                            name = (hourStatisticsType == 0? string.Format("סכום שעות חניכה"): "ממוצע שעות חניכה"),
                        }
                    },
                    legend = new Legend
                    {
                        layout        = "vertical",
                        align         = "right",
                        verticalAlign = "middle",
                        borderWidth   = 0
                    },
                    tooltip = new Tooltip1()
                    {
                        headerFormat = "<span style='font-size:10px'>{point.key}</span><table>",
                        pointFormat  = "<tr><td style='color:{series.color};padding:0'>{series.name}: </td><td style='padding:0'><b>{point.y}</b></td></tr>",
                        footerFormat = "</table>",
                        shared       = true,
                        useHTML      = true
                    },
                    exporting = new Exporting
                    {
                        enabled = true
                    }
                };

                return(Json(chartModel));
            }
            return(Error(result));

            //return null;
        }