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" })); }
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); }