public async Task <UpsertModel> UpsertExpense(UpsertMode mode, ExpenseViewModel model) { var upsert = new UpsertModel(); try { Activity activity; string title; System.Text.StringBuilder builder; // Record previous values for comparison double amount = (Expense != null ? Expense.Amount : 0); string by = (Expense != null ? Expense.By : string.Empty); string desc = (Expense != null ? Expense.Description : string.Empty); int category = (Expense != null ? Expense.Category : 0); int changes = 0; // Apply changes Expense = model.ParseAsEntity(Expense); builder = new System.Text.StringBuilder(); if (model.ExpenseId == 0) { db.Expenses.Add(Expense); title = "Expense Created"; builder.Append(string.Format("A Expense record has been created for: {0}", model.By)).AppendLine(); } else { db.Entry(Expense).State = System.Data.Entity.EntityState.Modified; title = "Expense Updated"; builder.Append("The following changes have been made to the Expense details"); if (mode == UpsertMode.Admin) { builder.Append(" (by the Admin)"); } builder.Append(":").AppendLine(); } if (amount != Expense.Amount) { builder.AppendLine().AppendFormat("Amount: from '{0}' to '{1}'", amount, Expense.Amount); changes += 1; } if (by != Expense.By) { builder.AppendLine().AppendFormat("Expense By: from '{0}' to '{1}'", by, Expense.By); changes += 1; } if (desc != Expense.Description) { builder.AppendLine().AppendFormat("Description: from '{0}' to '{1}'", desc, Expense.Description); changes += 1; } if (category != Expense.Category) { var categoryValue = category == 0 ? "" : Expense.Categories()[category]; builder.AppendLine().AppendFormat("Category: from '{0}' to '{1}'", categoryValue, Expense.Categories()[model.Category]); changes += 1; } await db.SaveChangesAsync(); ExpenseId = Expense.ExpenseId; // Save activity now so we have a ExpenseId. Not ideal, but hey activity = CreateActivity(title, builder.ToString()); activity.UserId = ServiceUserId; await db.SaveChangesAsync(); if (model.ExpenseId == 0) { upsert.ErrorMsg = "Expense record created successfully"; } else { upsert.ErrorMsg = "Expense record updated successfully"; } upsert.RecordId = Expense.ExpenseId.ToString(); } catch (Exception ex) { upsert.ErrorMsg = ex.Message; } return(upsert); }
public async Task <UpsertModel> UpsertBank(UpsertMode mode, BankViewModel model) { var upsert = new UpsertModel(); try { Activity activity; string title; System.Text.StringBuilder builder; // Apply changes Bank = model.ParseAsEntity(Bank); builder = new System.Text.StringBuilder(); if (model.BankId == 0) { db.Banks.Add(Bank); title = "Bank Recorded"; builder.Append("A Bank record has been made").AppendLine(); } else { db.Entry(Bank).State = System.Data.Entity.EntityState.Modified; title = "Bank Updated"; builder.Append("The following changes have been made to the Bank details"); if (mode == UpsertMode.Admin) { builder.Append(" (by the Admin)"); } builder.Append(":").AppendLine(); } await db.SaveChangesAsync(); BankId = Bank.BankId; // Save activity now so we have a BankId. Not ideal, but hey activity = CreateActivity(title, builder.ToString()); activity.UserId = ServiceUserId; await db.SaveChangesAsync(); if (model.BankId == 0) { upsert.ErrorMsg = "Bank record created successfully"; } else { upsert.ErrorMsg = "Bank record updated successfully"; } upsert.RecordId = Bank.BankId.ToString(); } catch (Exception ex) { upsert.ErrorMsg = ex.Message; //RecordException("Update Bank Error", ex); } return(upsert); }
public async Task <UpsertModel> UpsertMessage(UpsertMode mode, MessageViewModel model) { var upsert = new UpsertModel(); try { // Apply changes Message = model.ParseAsEntity(Message); if (model.SendNow) { var term = db.Terms.FirstOrDefault(x => x.IsCurrentTerm); var parents = db.StudentParents.ToList().Where(x => x.Student.CurrentTermId == term.TermId && x.Parent.HasContact).ToList() /*.Select(m => m.Parent)*/; foreach (var parent in parents) { var result = sendTextMessage(parent.Parent.Contacts, model.MessageDescription); string msgTitle; System.Text.StringBuilder msgBuilder; if (result.Contains("1701")) { msgTitle = "Message Sent"; msgBuilder = new System.Text.StringBuilder() .Append("The following Message has been sent:") .AppendLine(); } else { msgTitle = "Message Sending Failed"; msgBuilder = new System.Text.StringBuilder() .Append("The following Message has failed to be sent:") .AppendLine(); } msgBuilder.AppendLine().AppendFormat("Message: {0}", Message.MessageDescription) .AppendLine().AppendFormat("Student: {0}", parent.Student.FullName) .AppendLine().AppendFormat("Parent: {0}", parent.Parent.FullName); // Record activity var msgActivity = CreateActivity(msgTitle, msgBuilder.ToString()); msgActivity.UserId = ServiceUserId; msgActivity.ParentId = parent.ParentId; msgActivity.StudentId = parent.StudentId; } Message.Sent = DateTime.Now; // make sure you create activity here after testing } Activity activity; string title; System.Text.StringBuilder builder; builder = new System.Text.StringBuilder(); if (model.MessageId == 0) { db.Messages.Add(Message); title = "Message Recorded"; builder.Append("A Message record has been made. ").AppendLine(); } else { db.Entry(Message).State = System.Data.Entity.EntityState.Modified; title = "Message Updated"; builder.Append("The following changes have been made to the Message details"); if (mode == UpsertMode.Admin) { builder.Append(" (by the Admin)"); } builder.Append(":").AppendLine(); } await db.SaveChangesAsync(); MessageId = Message.MessageId; // Save activity now so we have a MessageId. Not ideal, but hey activity = CreateActivity(title, builder.ToString()); activity.UserId = ServiceUserId; await db.SaveChangesAsync(); if (model.MessageId == 0) { upsert.ErrorMsg = "Message record created successfully"; } else { upsert.ErrorMsg = "Message record updated successfully"; } upsert.RecordId = Message.MessageId.ToString(); } catch (Exception ex) { upsert.ErrorMsg = ex.Message; //RecordException("Update Message Error", ex); } return(upsert); }
public async Task <UpsertModel> UpsertEvent(UpsertMode mode, EventViewModel model) { var upsert = new UpsertModel(); try { Activity activity; string title; System.Text.StringBuilder builder; // Apply changes Event = model.ParseAsEntity(Event); builder = new System.Text.StringBuilder(); if (model.EventId == 0) { db.Events.Add(Event); title = "Event Recorded"; builder.Append("An Event record has been made").AppendLine(); } else { db.Entry(Event).State = System.Data.Entity.EntityState.Modified; title = "Event Updated"; builder.Append("The following changes have been made to the Event details"); if (mode == UpsertMode.Admin) { builder.Append(" (by the Admin)"); } builder.Append(":").AppendLine(); } await db.SaveChangesAsync(); EventId = Event.EventId; //update students here if (model.IsGeneral && Event.EventStudents.ToList().Count() <= 0) { var currentTerm = db.Terms.ToList().FirstOrDefault(m => m.IsCurrentTerm); // take all students to be those of only the current term Event.EventStudents = db.Students.ToList().Where(m => !m.NoParents && m.CurrentTermId == currentTerm.TermId).ToList().Select(p => new StudentEvent(p.StudentId, Event.EventId)).ToList(); db.Entry(Event).State = System.Data.Entity.EntityState.Modified; } //if (model.IsGeneral && Event.EventStudents.Count() <= 0) //{ // var currentTerm = db.Terms.ToList().FirstOrDefault(m => m.IsCurrentTerm); // // take all students to be those of only the current term // var students = db.Students.ToList().Where(m => !m.NoParents && m.CurrentTermId == currentTerm.TermId).Select(p => new StudentEvent(p.StudentId, Event.EventId)).ToList(); // foreach (var student in students) // { // db.StudentEvents.Add(student); // } // //db.Entry(Event).State = System.Data.Entity.EntityState.Modified; //} // Save activity now so we have a EventId. Not ideal, but hey activity = CreateActivity(title, builder.ToString()); activity.UserId = ServiceUserId; await db.SaveChangesAsync(); if (model.EventId == 0) { upsert.ErrorMsg = "Event record created successfully"; } else { upsert.ErrorMsg = "Event record updated successfully"; } upsert.RecordId = Event.EventId.ToString(); } catch (Exception ex) { upsert.ErrorMsg = ex.Message; //RecordException("Update Event Error", ex); } return(upsert); }
public async Task <UpsertModel> UpsertParent(UpsertMode mode, ParentViewModel model) { var upsert = new UpsertModel(); try { Activity activity; string title; System.Text.StringBuilder builder; // Get Student //var student = db.Students.FirstOrDefault(x => x.StudentId == model.StudentId); // Apply changes Parent = model.ParseAsEntity(Parent); builder = new System.Text.StringBuilder(); if (model.ParentId == 0) { db.Parents.Add(Parent); title = "Parent Recorded"; builder.Append("A Parent record has been made : " + model.FirstName + " " + model.LastName).AppendLine(); } else { db.Entry(Parent).State = System.Data.Entity.EntityState.Modified; title = "Parent Updated"; builder.Append("The following changes have been made to the Parent details"); if (mode == UpsertMode.Admin) { builder.Append(" (by the Admin)"); } builder.Append(":").AppendLine(); } await db.SaveChangesAsync(); ParentId = Parent.ParentId; // update student parent relationship UpdateStudents(model.SelectedStudents); // Save activity now so we have a ParentId. Not ideal, but hey activity = CreateActivity(title, builder.ToString()); activity.UserId = ServiceUserId; await db.SaveChangesAsync(); if (model.ParentId == 0) { upsert.ErrorMsg = "Parent record created successfully"; } else { upsert.ErrorMsg = "Parent record updated successfully"; } upsert.RecordId = Parent.ParentId.ToString(); } catch (Exception ex) { upsert.ErrorMsg = ex.Message; //RecordException("Update Parent Error", ex); } return(upsert); }
public async Task <UpsertModel> UpsertPayment(UpsertMode mode, PaymentViewModel model) { var upsert = new UpsertModel(); try { Activity activity; string title; System.Text.StringBuilder builder; // Get Student var student = db.Students.Single(x => x.StudentId == model.StudentId); // get term var term = db.Terms.FirstOrDefault(x => x.TermId == model.TermId); // Apply changes Payment = model.ParseAsEntity(Payment); builder = new System.Text.StringBuilder(); if (model.PaymentId == 0) { student.Payments.Add(Payment); if (term.IsCurrentTerm) { // incase student hasn't been promoted, promote. Carry on debt if any if ((student.CurrentLevelId.HasValue && student.CurrentLevelId != Payment.ClassLevelId) || !student.CurrentLevelId.HasValue) { student.CurrentLevelId = Payment.ClassLevelId; db.Entry(student).State = System.Data.Entity.EntityState.Modified; } if (!student.CurrentTermId.HasValue || (student.CurrentTermId.HasValue && student.CurrentTermId != Payment.TermId)) { student.CurrentTermId = Payment.TermId; db.Entry(student).State = System.Data.Entity.EntityState.Modified; } } title = "Payment Recorded"; builder.Append("A Payment record has been made for: " + student.FullName).AppendLine(); } else { db.Entry(Payment).State = System.Data.Entity.EntityState.Modified; title = "Payment Updated"; builder.Append("The following changes have been made to the Payment details"); if (mode == UpsertMode.Admin) { builder.Append(" (by the Admin)"); } builder.Append(":").AppendLine(); } await db.SaveChangesAsync(); PaymentId = Payment.PaymentId; // change parent next reminder date if (!Payment.Student.NoParents) { var parents = Payment.Student.Parents.Select(x => x.Parent); DateTime?nextDate; if (Payment.Student.HasOutstanding) { nextDate = Payment.Date.AddDays(21); } else { nextDate = null; } foreach (var parent in parents) { if (Payment.Term.IsCurrentTerm) { parent.RemindDate = nextDate; db.Entry(parent).State = System.Data.Entity.EntityState.Modified; } } } // Save activity now so we have a PaymentId. Not ideal, but hey activity = CreateActivity(title, builder.ToString()); activity.UserId = ServiceUserId; await db.SaveChangesAsync(); if (model.PaymentId == 0) { upsert.ErrorMsg = "Payment record created successfully"; } else { upsert.ErrorMsg = "Payment record updated successfully"; } upsert.RecordId = Payment.PaymentId.ToString(); } catch (Exception ex) { upsert.ErrorMsg = ex.Message; //RecordException("Update Payment Error", ex); } return(upsert); }
public async Task <UpsertModel> UpsertEvent(UpsertMode mode, EventViewModel model) { var upsert = new UpsertModel(); try { Activity activity; string title; System.Text.StringBuilder builder; // Apply changes Event Event; if (model.EventId > 0) { Event = db.Events.Find(model.EventId); } else { Event = new Event(); } Event = model.ParseAsEntity(Event); builder = new System.Text.StringBuilder(); if (model.EventId == 0) { db.Events.Add(Event); title = "Event Added"; builder.AppendFormat("An Event record has been made for: {0} students' Parents", model.Data.Count()).AppendLine(); } else { db.Entry(Event).State = System.Data.Entity.EntityState.Modified; title = "Event Updated"; builder.Append("The following changes have been made to the Event details"); if (mode == UpsertMode.Admin) { builder.Append(" (by the Admin)"); } builder.Append(":").AppendLine(); } await db.SaveChangesAsync(); // update students here //Event.Students = model.Data.Select(p => new StudentEvent(p, Event.EventId)).ToList(); if (model.Students != null && Event.EventStudents.Count() <= 0) { if (model.Students.Count() > 0) { Event.EventStudents = model.Students.Select(p => new StudentEvent(p.StudentId, Event.EventId)).ToList(); db.Entry(Event).State = System.Data.Entity.EntityState.Modified; } } //if (model.Students != null && Event.EventStudents.Count() <= 0) //{ // if (model.Students.Count() > 0) // { // var students = model.Students.Select(p => new StudentEvent(p.StudentId, Event.EventId)).ToList(); // foreach (var student in students) // { // db.StudentEvents.Add(student); // } // //db.Entry(Event).State = System.Data.Entity.EntityState.Modified; // } //} // Save activity now so we have a StudentId. Not ideal, but hey activity = CreateActivity(title, builder.ToString()); activity.UserId = ServiceUserId; await db.SaveChangesAsync(); if (model.EventId == 0) { upsert.ErrorMsg = "Event record created successfully"; } else { upsert.ErrorMsg = "Event record updated successfully"; } upsert.RecordId = Event.EventId.ToString(); } catch (Exception ex) { upsert.ErrorMsg = ex.Message; } return(upsert); }
public async Task <UpsertModel> UpsertStudent(UpsertMode mode, StudentViewModel model) { var upsert = new UpsertModel(); try { Activity activity; string title; System.Text.StringBuilder builder; // Apply changes Student = model.ParseAsEntity(Student); if (model.Enroll) { var term = db.Terms.FirstOrDefault(p => p.IsCurrentTerm); if (term != null) { Student.CurrentTermId = term.TermId; } } builder = new System.Text.StringBuilder(); if (model.StudentId == 0) { db.Students.Add(Student); title = "Student Added"; builder.AppendFormat("A Student record has been made for: {0} {1}", model.FirstName, model.LastName).AppendLine(); } else { db.Entry(Student).State = System.Data.Entity.EntityState.Modified; title = "Student Updated"; builder.Append("The following changes have been made to the Student details"); if (mode == UpsertMode.Admin) { builder.Append(" (by the Admin)"); } builder.Append(":").AppendLine(); } await db.SaveChangesAsync(); StudentId = Student.StudentId; if (model.Dp != null) { UploadDp(model.Dp); } // Save activity now so we have a StudentId. Not ideal, but hey activity = CreateActivity(title, builder.ToString()); activity.UserId = ServiceUserId; await db.SaveChangesAsync(); if (model.StudentId == 0) { upsert.ErrorMsg = "Student record created successfully"; } else { upsert.ErrorMsg = "Student record updated successfully"; } upsert.RecordId = Student.StudentId.ToString(); } catch (Exception ex) { upsert.ErrorMsg = ex.Message; //RecordException("Update Student Error", ex); } return(upsert); }