private async Task <bool> CheckBudget(ProjectBudgetViewModel view) { Area area = await context.Areas .Include(p => p.Projects) .Where(p => p.ID == view.AreaID) .FirstOrDefaultAsync(); decimal budgetAmount = (decimal)area.Projects .Select(p => p.BudgetAmount) .DefaultIfEmpty() .Sum(); var budget = await context.Budgets .Where(b => b.Year == DateTime.Now.Year && b.AreaID == area.ID) .FirstOrDefaultAsync(); if (budget == null) { throw new Exception($"No hay presupuesto asignado en el área para este año."); } if (budgetAmount + view.Amount <= budget.Amount) { return(true); } else { throw new Exception($"Presupuesto excedido. El monto asigado al area es de ${budget.Amount}"); } }
public async Task <IActionResult> Budget(int id, ProjectBudgetViewModel view) { if (id != view.ProjectID) { return(NotFound()); } if (ModelState.IsValid) { try { if (await CheckBudget(view)) { Project project = await context.Projects.FindAsync(view.ProjectID); project.BudgetAmount = view.Amount; project.BudgetDescription = view.BudgetDescription; project.ResponsableBudgetID = view.ResponsableBudgetID; context.Update(project); await context.SaveChangesAsync(); return(RedirectToAction(nameof(PaymentPlan), new { id })); } } catch (DbUpdateConcurrencyException) { if (!ProjectExists(view.ProjectID)) { return(NotFound()); } else { throw; } } catch (Exception ex) { ModelState.AddModelError(string.Empty, ex.Message); } } view.Users = combosHelper.GetComboUsers(); return(View(view)); }
private ProjectBudgetViewModel ToProjectBudgetViewModel(Project project) { var model = new ProjectBudgetViewModel() { ProjectID = project.ID, ProjectName = project.Name, AreaID = project.AreaID, BudgetDescription = project.BudgetDescription, ResponsableBudgetID = project.ResponsableBudgetID, Users = combosHelper.GetComboUsers() }; if (project.BudgetAmount == null) { model.Amount = 0; } else { model.Amount = (decimal)project.BudgetAmount; } return(model); }