public ActionResult ReminderPreview(ReminderJSON reminder) { var template = db.fees_templates.SingleOrDefault(x => x.id == reminder.templateid); if (template == null) { return(SendJsonErrorResponse("Template not found")); } var viewmodel = new Reminder(); viewmodel.Initialise(reminder); var liquid = new LiquidTemplate(template.body); liquid.AddParameters("reminder", viewmodel); var view = liquid.Render(); return(Json(view.ToJsonOKData())); }
public ActionResult ReminderSend(ReminderJSON reminder) { var template = db.fees_templates.SingleOrDefault(x => x.id == reminder.templateid); if (template == null) { return(SendJsonErrorResponse("Template not found")); } var viewmodel = new Reminder(); viewmodel.Initialise(reminder); var parent = repository.GetUser(reminder.parentid); if (parent == null) { return(SendJsonErrorResponse("Could not locate parent")); } if (reminder.useEmail && string.IsNullOrEmpty(parent.email)) { return(SendJsonErrorResponse("Selected parent has no email address. Select another parent.")); } if (reminder.useSMS && string.IsNullOrEmpty(parent.phone_cell)) { return(SendJsonErrorResponse("Selected parent has no cell phone number. Select another parent.")); } if (reminder.useEmail) { var liquid = new LiquidTemplate(template.body); liquid.AddParameters("reminder", viewmodel); var emailbody = liquid.Render(); new Thread(() => Email.SendMail(" School", "*****@*****.**", parent.ToName(false), parent.email, template.title, emailbody, false, null)).Start(); } // save reminder params into db foreach (var feeid in reminder.children.SelectMany(x => x.feeids)) { var dbentry = new fees_reminder(); dbentry.templatename = template.title; dbentry.created = DateTime.UtcNow; dbentry.paymentdue = reminder.date_due; dbentry.receiver = parent.id; dbentry.sender = sessionid.Value; dbentry.feeid = feeid; dbentry.uniqueid = viewmodel.uniqueid; db.fees_reminders.InsertOnSubmit(dbentry); } repository.Save(); // return view var view = this.RenderViewToString("Alerts", new[] { new LateFeeAlertSiblings( reminder.children.Select(x => x.studentid)) }).ToJsonOKData(); view.message = "Reminder sent successfully"; return(Json(view)); }
public void Initialise(ReminderJSON reminder) { date_today = DateTime.UtcNow; date_extended = reminder.date_due; using (var repository = new Repository()) { foreach (var entry in reminder.children) { var student = repository.GetUser(entry.studentid); if (student == null) { continue; } var child = new Children(); child.name = student.ToName(false); var klass = student.classes_students_allocateds.FirstOrDefault(x => x.year == reminder.date_due.Year); if (klass != null) { child.@class = klass.school_class.name; } children.Add(child); if (string.IsNullOrEmpty(name_parent)) { // we haven't populate parent info yet var parent = student.students_guardians.SingleOrDefault(x => x.parentid == reminder.parentid); if (parent != null) { name_parent = parent.user1.ToName(); } } } // calculate total fees and latest overdue fees var fees = repository.GetFees().Where(x => reminder.children.Where(y => y.selected).SelectMany(y => y.feeids).ToArray().Contains(x.id)); pay_total = fees.Sum(x => x.amount).ToString("n2"); // get date of most recent related letter if (fees.SelectMany(x => x.fees_reminders).Count() != 0) { date_reminders = fees.SelectMany(x => x.fees_reminders).Select(y => y.created).ToArray().Select(z => z.ToString(Constants.DATETIME_STANDARD)).Distinct(); date_expired = fees.SelectMany(x => x.fees_reminders).Max(y => y.paymentdue); } else { // no reminders been sent yet so take the largest due date date_expired = fees.Max(x => x.duedate); } // populate director name var director = repository.GetUsers(null, null, null, null, UserGroup.DIRECTOR, null, null, null, reminder.date_due.Year, null).FirstOrDefault(); if (director != null) { name_director = director.ToName(false); } } }