public async Task<ActionResult> Create(InvoiceViewModel invoiceVM) { if (ModelState.IsValid) { if(await Task.Run(() => _service.saveInvoice(invoiceVM))) { return RedirectToAction("Index"); } } //ViewBag.StudentID = new SelectList(db.Students, "StudentID", "NameOfChild", invoices.StudentID); return View(invoiceVM); }
/// <summary> /// validates invoice details data when description field is not null,also validates no invoice detail data /// </summary> /// <param name="invoiceVM">InvoiceviewModel</param> /// <returns>boolean true on success or false on validation failure</returns> public bool validateInvoice(InvoiceViewModel invoiceVM) { Boolean iserror = true; int Count = 0; for(var i=0;i < invoiceVM.InvoiceDetailsViewModel.Count;i++) { string desc = (invoiceVM.InvoiceDetailsViewModel[i].Description != null) ? invoiceVM.InvoiceDetailsViewModel[i].Description.Trim() : ""; //if description is not null checks all other details have valid values if (desc != "" ) { if(invoiceVM.InvoiceDetailsViewModel[i].Quantity <1) { _modelstate.AddModelError("InvoiceDetailsViewModel[" + i + "].Quantity", "less than one"); iserror = false; } if(invoiceVM.InvoiceDetailsViewModel[i].UnitPrice <1) { _modelstate.AddModelError("InvoiceDetailsViewModel[" + i + "].UnitPrice", "less than one"); iserror = false; } if(invoiceVM.InvoiceDetailsViewModel[i].Amount <1) { _modelstate.AddModelError("InvoiceDetailsViewModel[" + i + "].Amount", "less than one"); iserror = false; } //checks if atleast one record is added to invoice details, return false if data is empty Count = Count + 1; } } if (Count == 0) { iserror = false; _modelstate.AddModelError("", "No Records to add"); } return iserror; }
/// <summary> /// saves invoice data after validation checks /// </summary> /// <param name="invoiceVM">InvoiceViewModel</param> /// <returns>boolean on save success</returns> public bool saveInvoice(InvoiceViewModel invoiceVM) { if (!validateInvoice(invoiceVM)) { return false; } try { //remove empty invoice details record in invoice in reverse order //if you remove randomly, collection get changes, and error is thrown for (var i = invoiceVM.InvoiceDetailsViewModel.Count - 1; i >= 0; i--) { string desc = (invoiceVM.InvoiceDetailsViewModel[i].Description != null) ? invoiceVM.InvoiceDetailsViewModel[i].Description.Trim() : ""; if (desc == "") { invoiceVM.InvoiceDetailsViewModel.RemoveAt(i); } } Invoice addInvoice = Mapper.Map<Invoice>(invoiceVM); db.Invoices.Add(addInvoice); db.SaveChanges(); return true; } catch(Exception e) { _modelstate.AddModelError("", e.Message); return false; } }
/// <summary> /// This method is similar to saving data after report, here data is saved after report editing /// </summary> /// <param name="invoiceVM">invoice view model</param> /// <returns>booleand wheather data is saved or not</returns> public bool saveAfterEdit(InvoiceViewModel invoiceVM) { if (!validateInvoice(invoiceVM)) { return false; } try { for (var i = invoiceVM.InvoiceDetailsViewModel.Count - 1; i >= 0; i--) { string desc = (invoiceVM.InvoiceDetailsViewModel[i].Description != null) ? invoiceVM.InvoiceDetailsViewModel[i].Description.Trim() : ""; if (desc == "") { invoiceVM.InvoiceDetailsViewModel.RemoveAt(i); } } Invoice updateInvoice = Mapper.Map<Invoice>(invoiceVM); foreach(var invDetail in updateInvoice.InvoiceDetails) { if(invDetail.InvoiceDetailID !=0) { db.Entry(invDetail).State = EntityState.Modified; } else if(invDetail.InvoiceDetailID == 0) { invDetail.InvoiceRefID = invoiceVM.InvoiceID; db.Entry(invDetail).State = EntityState.Added; } } db.Entry(updateInvoice).State = EntityState.Modified; db.SaveChanges(); return true; } catch(Exception e) { _modelstate.AddModelError("", e.Message); return false; } }
public async Task<ActionResult> Edit(InvoiceViewModel invoiceVM) { if(ModelState.IsValid) { if(await Task.Run(() => _service.saveAfterEdit(invoiceVM))) { return RedirectToAction("Index"); } } return View(invoiceVM); }