public ActionResult Reminder(long[] studentids) { var children = db.fees.Where(x => x.status == FeePaymentStatus.UNPAID.ToString() && x.duedate < DateTime.Now && studentids.Contains(x.studentid)) .GroupBy(x => x.user); if (!children.Any()) { return(SendJsonErrorResponse("Cannot send reminder if fee is not overdue")); } var viewmodel = new ReminderViewModel(); foreach (var entry in children) { if (viewmodel.parents == null) { viewmodel.parents = entry.Key.students_guardians.Select(x => new SelectListItem() { Value = x.user1.id.ToString(), Text = x.user1.ToName(true) }); } var alert = new LateFeeAlert(); alert.studentname = entry.Key.ToName(false); alert.studentid = entry.Key.id; alert.overdueFees = entry.Select(x => x).ToModel(auth.perms); viewmodel.alerts.Add(alert); } // set next due date one week from largest prev date var prevDate = viewmodel.alerts.SelectMany(x => x.overdueFees).OrderByDescending(y => y.duedate).First().duedate; viewmodel.nextduedate = (prevDate.HasValue? prevDate.Value: DateTime.Now).AddDays(7).ToString(Constants.DATEFORMAT_DATEPICKER); // init tempaltes viewmodel.templates = db.fees_templates.OrderBy(x => x.title).Select(x => new SelectListItem() { Value = x.id.ToString(), Text = x.title }); var view = this.RenderViewToString("Reminder", viewmodel); return(Json(view.ToJsonOKData(), JsonRequestBehavior.AllowGet)); }
public ActionResult Index() { var viewmodel = new FinanceViewModel(baseviewmodel); viewmodel.schoolList = new[] { new SelectListItem() { Value = "", Text = "Select school ..." } }.Union( repository.GetSchools().Select(x => new SelectListItem() { Text = x.name, Value = x.id.ToString() })); // don't care about reminders, otherwise if reminder is > today then it will not show up // check if they are any overdue fees. grouped by var overdueStudents = db.fees.Where(x => x.status == FeePaymentStatus.UNPAID.ToString() && x.duedate < DateTime.Now) .OrderBy(x => x.duedate) .GroupBy(x => x.user); var alerts = new List <LateFeeAlert>(); foreach (var entry in overdueStudents) { var rel = entry.Key.students_guardians.SingleOrDefault(x => x.type.HasValue && x.type.Value == (byte)GuardianType.FATHER); if (rel == null) { rel = entry.Key.students_guardians.SingleOrDefault( x => x.type.HasValue && x.type.Value == (byte)GuardianType.MOTHER); } var parent = rel.user1; var alert = new LateFeeAlert { parentid = parent.id, parentname = parent.ToName(), studentname = entry.Key.ToName(false), studentid = entry.Key.id, overdueFees = entry.Select(x => x).ToModel(auth.perms) }; alerts.Add(alert); } // group by parent var parentGroups = alerts.GroupBy(x => new { x.parentid, x.parentname }); foreach (var entry in parentGroups) { var siblings = new LateFeeAlertSiblings(); siblings.children = entry.Select(x => x); viewmodel.alerts.Add(siblings); } // TODO: list most overdued groups first // get templates viewmodel.templates = db.fees_templates.OrderBy(x => x.title).ToRowModel(); return(View(viewmodel)); }