private ShoppingFinalizationViewModel GenerateFinalizationModel(int orderId, int currentUserId) { var complexOrderInfo = _context.ComplexOrders .Where(co => co.Id == orderId) .Include(co => co.SCOTeamMemberAssignments) .Include(co => co.OrderElements) .AsNoTracking() .First(); var groupInfo = _context.Teams .Where(t => t.Id == complexOrderInfo.SCOTeamMemberAssignments.First().TeamId) .AsNoTracking() .First(); var singleOrderElementDescriptions = new List <string>(); foreach (var singleElement in complexOrderInfo.OrderElements) { singleOrderElementDescriptions.Add(singleElement.Title + " - " + singleElement.Amount + singleElement.Unit); } var userInformation = _context.Users .Where(u => complexOrderInfo.SCOTeamMemberAssignments.Any(sco => sco.UserId == u.Id)) .Select(u => new { u.Id, u.FullName }) .ToArray(); List <int> userIds = new List <int>(); List <string> userNames = new List <string>(); foreach (var userInfo in userInformation) { userIds.Add(userInfo.Id); userNames.Add(userInfo.FullName); } double initialValue = 0.00; var finalizationModel = new ShoppingFinalizationViewModel { Id = complexOrderInfo.Id, ExpenseCategory = complexOrderInfo.ExpenseCategory, Subject = complexOrderInfo.Subject, Value = initialValue, SingleElementDescriptions = singleOrderElementDescriptions.ToArray(), GroupId = groupInfo.Id, GroupName = groupInfo.Name, ParticipantIds = userIds.ToArray(), ParticipantNames = userNames.ToArray(), DidParticipantsPay = new bool[userNames.Count], IsCovered = false }; return(finalizationModel); }
public IActionResult FinalizeShopping([Bind("Id, Subject, Value, IsCovered, ExpenseCategory, GroupId, ParticipantIds, ParticipantsCharge, DidParticipantsPay")] ShoppingFinalizationViewModel sfvm) { //TODO:check validation after adding it if (ModelState.IsValid) { //TODO: change to currentuserId var currentUserId = 1; bool isCovered = sfvm.IsCovered ? true : sfvm.DidParticipantsPay.All(pc => pc == true); var totalExpense = new TotalExpense { Covered = isCovered, FinalizationDate = DateTime.Now, OwnerId = currentUserId, ExpenseCategory = sfvm.ExpenseCategory, Subject = sfvm.Subject, Value = sfvm.Value }; _context.TotalExpenses.Add(totalExpense); _context.SaveChanges(); var partialExpenses = new List <PartialExpense>(); for (int i = 0; i < sfvm.ParticipantIds.Length; i++) { partialExpenses.Add(new PartialExpense { Covered = sfvm.DidParticipantsPay[i], SettlementDate = sfvm.DidParticipantsPay[i] ? DateTime.Now : (DateTime?)null, TeamId = sfvm.GroupId, TotalExpenseId = totalExpense.Id, UserId = sfvm.ParticipantIds[i], Value = sfvm.ParticipantsCharge[i] }); } _context.PartialExpenses.AddRange(partialExpenses); _context.SaveChanges(); _context.ComplexOrders.Remove(new SingleComplexOrder { Id = sfvm.Id }); _context.SaveChanges(); return(RedirectToAction("Index", "BudgetManager", new { id = currentUserId })); } return(PartialView("_finalizeShoppingPartial", sfvm)); }