示例#1
0
        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);
        }
示例#2
0
        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));
        }