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); }
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; }