Ejemplo n.º 1
0
        public IActionResult Edit(EditSubscriptionCardInputModel model)
        {
            if (!ModelState.IsValid)
            {
                List <SelectListItem> cardTypes, validityCards;
                GetCardTypesAndValidityCards(out cardTypes, out validityCards);
                model.ValidityCards = validityCards;

                return(this.View(model));
            }

            var result = this.SubscriptionCardService.EditSubscriptionCard(model);

            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(this.RedirectToAction(nameof(Edit), new { id = model.Id }));
            }

            return(this.RedirectToAction(nameof(Index)));
        }
        public BaseModel EditSubscriptionCard(EditSubscriptionCardInputModel model)
        {
            var subscritionCard = this.Db.SubscriptionCards.FirstOrDefault(x => x.Id == model.Id);

            if (subscritionCard == null)
            {
                this.BaseModel.HasError = true;
                this.BaseModel.Message  = MessageConstants.InvalidCardId;
                return(this.BaseModel);
            }
            if (!Enum.TryParse(model.ValidityCard, out ValidityCard validityCard))
            {
                this.BaseModel.HasError = true;
                this.BaseModel.Message  = MessageConstants.InvalidValidityType;
                return(this.BaseModel);
            }

            var ticketId = GetTicketId(model.Price, subscritionCard.CountTrips);

            var customerCards = this.Db.CustomerCards
                                .Where(x => x.Type == subscritionCard.TypeCard &&
                                       x.CountTrips == subscritionCard.CountTrips)
                                .ToList();

            subscritionCard.Price        = model.Price;
            subscritionCard.ValidityCard = validityCard;
            subscritionCard.TicketId     = ticketId;

            try
            {
                this.Db.SubscriptionCards.Update(subscritionCard);
                this.Db.SaveChanges();

                this.BaseModel.HasError = false;
                this.BaseModel.Message  = MessageConstants.EditSubscriptionCard;
            }
            catch (Exception)
            {
                this.BaseModel.HasError = true;
                this.BaseModel.Message  = MessageConstants.NoEditSubscriptionCard;
                return(this.BaseModel);
            }

            if (customerCards.Any())
            {
                foreach (var customerCard in customerCards)
                {
                    customerCard.TicketId = ticketId;
                    switch (validityCard)
                    {
                    case ValidityCard.Day:
                        customerCard.ValidTo = customerCard.ValidFrom?.AddDays(1);
                        break;

                    case ValidityCard.Month:
                        customerCard.ValidTo = customerCard.ValidFrom?.AddMonths(1);
                        break;

                    case ValidityCard.Year:
                        customerCard.ValidTo = customerCard.ValidFrom?.AddYears(1);
                        break;

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

                    this.Db.CustomerCards.Update(customerCard);
                    this.Db.SaveChanges();
                }
            }
            return(this.BaseModel);
        }