コード例 #1
0
        public async Task <IActionResult> Create
            ([Bind(Prefix = nameof(UserDetailsViewModel.CreateCustomerCard))] CreateCustomerCardInputModel model, string id)
        {
            if (!ModelState.IsValid)
            {
                return(RedirectToAction(nameof(UserController.Details), "User", new { id = id, tab = "3" }));
            }

            var result = await this.CustomerCardService.CreateCustomerCard(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" }));
        }
コード例 #2
0
        public async Task <BaseModel> CreateCustomerCard(CreateCustomerCardInputModel 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 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.ToList();
            var cardNumber    = string.Empty;

            if (!customerCards.Any())
            {
                var yearNow = DateTime.Now.Year.ToString().Substring(2, 2);
                cardNumber = $"{yearNow}001";
            }
            else
            {
                var max = customerCards.Where(x => x.CustomerCardNumber != null)
                          .Select(x => int.Parse(x.CustomerCardNumber))
                          .Max();
                cardNumber = (max + 1).ToString();
            }

            var customerCard = new CustomerCard
            {
                CountTrips         = model.CountTrips,
                ValidFrom          = model.ValidateFrom,
                UserId             = user.Id,
                TicketId           = subscriptionCard.Id,
                Type               = type,
                CustomerCardNumber = cardNumber
            };
            var validityCard = subscriptionCard.ValidityCard;

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

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

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

            case ValidityCard.Indefinitely:
                customerCard.ValidTo = DateTime.MaxValue;
                break;
            }
            try
            {
                this.Db.CustomerCards.Add(customerCard);
                this.Db.SaveChanges();

                var cardId = this.Db.CustomerCards
                             .FirstOrDefault(x => x.CustomerCardNumber == customerCard.CustomerCardNumber).Id;
                user.CustomerCardId = cardId;

                this.Db.Update(user);
                this.Db.SaveChanges();

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

            return(this.BaseModel);
        }