public async Task <IActionResult> Edit
            ([Bind(Prefix = nameof(UserDetailsViewModel.EditCustomerCard))] EditCustomerCardInputModel model, string id)
        {
            if (!ModelState.IsValid)
            {
                return(RedirectToAction(nameof(UserController.Details), "User", new { id = id, tab = "3" }));
            }

            var result = await this.CustomerCardService.EditCustomerCard(model, id);

            if (!result.HasError)
            {
                this.TempData.Put(MessageConstants.Name, new MessageModel
                {
                    Type    = MessageType.Success,
                    Message = result.Message
                });
            }
            else
            {
                this.TempData.Put(MessageConstants.Name, new MessageModel
                {
                    Type    = MessageType.Danger,
                    Message = result.Message
                });
            }

            return(RedirectToAction(nameof(UserController.Details), "User", new { id = id, tab = "3" }));
        }
        public async Task <BaseModel> EditCustomerCard(EditCustomerCardInputModel model, string id)
        {
            var user = await this.UserManager.FindByIdAsync(id);

            if (user == null)
            {
                this.BaseModel.HasError = true;
                this.BaseModel.Message  = MessageConstants.InvalidUserId;
                return(this.BaseModel);
            }
            if (!Enum.TryParse(model.TypeCard, out TypeCard type))
            {
                this.BaseModel.HasError = true;
                this.BaseModel.Message  = MessageConstants.InvalidCardType;
                return(this.BaseModel);
            }

            var card = this.Db.CustomerCards.FirstOrDefault(x => x.Id == model.Id && x.UserId == user.Id);

            if (card == null)
            {
                this.BaseModel.HasError = true;
                this.BaseModel.Message  = string.Format(MessageConstants.NoCustomerCard, user.UserName);
                return(this.BaseModel);
            }

            var subscriptionCard = this.Db.SubscriptionCards
                                   .Where(x => x.TypeCard == type && x.CountTrips == model.CountTrips)
                                   .Include(x => x.Ticket)
                                   .FirstOrDefault();

            if (subscriptionCard == null)
            {
                this.BaseModel.HasError = true;
                this.BaseModel.Message  = string.Format(MessageConstants.NoSubCard, model.TypeCard, model.CountTrips);

                return(this.BaseModel);
            }

            var customerCards = this.Db.CustomerCards.Include(x => x.User)
                                .Any(x => x.CustomerCardNumber == model.CustomerCardNumber && x.UserId != id);

            if (customerCards)
            {
                this.BaseModel.HasError = true;
                this.BaseModel.Message  = string.Format(MessageConstants.HaveCustomerCardNumber, model.CustomerCardNumber);
                return(this.BaseModel);
            }

            card.CustomerCardNumber = model.CustomerCardNumber;
            card.CountTrips         = model.CountTrips;
            card.Type      = type;
            card.ValidFrom = model.ValidateFrom;
            card.TicketId  = subscriptionCard.TicketId;

            var validityCard = subscriptionCard.ValidityCard;

            switch (validityCard)
            {
            case ValidityCard.Day:
                card.ValidTo = model.ValidateFrom.AddDays(1);
                break;

            case ValidityCard.Month:
                card.ValidTo = model.ValidateFrom.AddMonths(1);
                break;

            case ValidityCard.Year:
                card.ValidTo = model.ValidateFrom.AddYears(1);
                break;

            case ValidityCard.Indefinitely:
                card.ValidTo = DateTime.MaxValue;
                break;
            }

            try
            {
                this.Db.CustomerCards.Update(card);
                this.Db.SaveChanges();

                this.BaseModel.HasError = false;
                this.BaseModel.Message  = MessageConstants.EditCustomerCard;
            }
            catch (Exception)
            {
                this.BaseModel.HasError = true;
                this.BaseModel.Message  = MessageConstants.NoEditCustomerCard;
            }

            return(this.BaseModel);
        }
Example #3
0
        public async Task <UserDetailsViewModel> Details(string id, string tab)
        {
            var user = this.UserManager.Users
                       .Where(x => x.Id == id)
                       .Include(x => x.CustomerCard)
                       .FirstOrDefault();

            if (user == null)
            {
                return(null);
            }
            var subscriptionCards = this.Db.SubscriptionCards.Select(x => x.TypeCard.ToString()).Distinct().ToList();
            var cardTypes         = Enum.GetValues(typeof(TypeCard)).Cast <TypeCard>()
                                    .Select(x => new SelectListItem
            {
                Text  = Enum.GetName(typeof(TypeCard), x),
                Value = x.ToString()
            }).ToList();

            cardTypes = cardTypes.Where(x => subscriptionCards.Contains(x.Text)).ToList();

            var allRoles = this.RoleManager.Roles
                           .Select(x => new SelectListItem
            {
                Text  = x.Name,
                Value = x.Name
            })
                           .ToList();

            var userRoles = await this.UserManager.GetRolesAsync(user);

            var userEditModel = new EditUserInputModel
            {
                Email     = user.Email,
                FisrtName = user.FirstName,
                LastName  = user.LastName,
                Username  = user.UserName
            };

            var model = new UserDetailsViewModel
            {
                Id        = user.Id,
                UserEdit  = userEditModel,
                Roles     = allRoles,
                UserRoles = userRoles,
                CardTypes = cardTypes,
            };

            if (user.CustomerCard != null)
            {
                var updateCustomerCard = new EditCustomerCardInputModel
                {
                    Id                 = user.CustomerCardId.Value,
                    CountTrips         = user.CustomerCard.CountTrips,
                    CustomerCardNumber = user.CustomerCard.CustomerCardNumber,
                    TypeCard           = user.CustomerCard.Type.ToString(),
                    ValidateFrom       = user.CustomerCard.ValidFrom.Value,
                    ValidateTo         = user.CustomerCard.ValidTo.Value
                };

                model.EditCustomerCard = updateCustomerCard;
            }
            if (tab == null)
            {
                model.Tab = "0";
            }
            else
            {
                model.Tab = tab;
            }

            return(model);
        }