public async Task <ActionResult> CalculatePays(CalculatePayView view) { if (ModelState.IsValid) { if (view.DateStart <= view.DateEnd) { var recordTimes = await db.RecordTimes. Where(r => r.DateStart >= view.DateStart && r.DateStart <= view.DateEnd). OrderBy(r => r.EmployeeId). ToListAsync(); var calculatedSalaries = new List <CalculatedSalary>(); if (recordTimes.Count != 0) { int i = 0; while (i < recordTimes.Count) { int previousEmployee = recordTimes[i].EmployeeId; TimeSpan totalTime = new TimeSpan(); while (i < recordTimes.Count && previousEmployee == recordTimes[i].EmployeeId) { totalTime += recordTimes[i].Time; i++; } var employee = await db.Employees.FindAsync(previousEmployee); calculatedSalaries.Add(new CalculatedSalary { EmployeeId = previousEmployee, Employee = employee, TotalToPay = this.CalculateSalary(employee, totalTime), WorkedTime = totalTime, WorkedHours = totalTime.TotalHours, }); } System.Web.HttpContext.Current.Session["calculatedSalaries"] = calculatedSalaries; db.CalculatedSalaries.RemoveRange(db.CalculatedSalaries.ToList()); db.CalculatedSalaries.AddRange(calculatedSalaries); await db.SaveChangesAsync(); return(RedirectToAction("ShowResults")); } ModelState.AddModelError(string.Empty, "No hay registros para liquidar la nómina."); return(View(view)); } ModelState.AddModelError(string.Empty, "La fecha de fin debe ser mayor o igual a la fecha inicial."); } return(View(view)); }
public ActionResult CalculatePays() { var view = new CalculatePayView { DateStart = DateTime.Today, DateEnd = DateTime.Today, }; return(View(view)); }