public async Task <ActionResult> EditUser(string id, ApplicationUser input) { if (ModelState.IsValid) { var user = _context.Users.First(u => u.Id == id); user.Name = input.Name; user.Email = input.Email; input.PhoneNumber = await _nexmo.FormatPhoneNumber(input.PhoneNumber); user.PhoneNumber = input.PhoneNumber; user.IsPilot = input.IsPilot; user.IsAdmin = input.IsAdmin; _context.SaveChanges(); } return(View(input)); }
public async Task <IActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var phoneNumber = await _nexmo.FormatPhoneNumber(model.PhoneNumber); if (phoneNumber == null) { ModelState.AddModelError("PhoneNumber", "Please enter a valid phone number"); } else { model.PhoneNumber = phoneNumber; } } if (ModelState.IsValid) { var user = new ApplicationUser { Name = model.Name, PhoneNumber = model.PhoneNumber, UserName = model.Email, Email = model.Email, }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713 // Send an email with this link //var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); //var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme); //await _emailSender.SendEmailAsync(model.Email, "Confirm your account", // "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>"); await _signInManager.SignInAsync(user, isPersistent : false); _logger.LogInformation(3, "User created a new account with password."); return(RedirectToAction(nameof(HomeController.Index), "Home")); } AddErrors(result); } // If we got this far, something failed, redisplay form return(View(model)); }
public async Task <ActionResult> EditUser(string id, ApplicationUser user) { if (ModelState.IsValid) { var updateUser = _context.Users.First(u => u.Id == id); updateUser.Name = user.Name; updateUser.Email = user.Email; user.PhoneNumber = await _nexmo.FormatPhoneNumber(user.PhoneNumber); updateUser.PhoneNumber = user.PhoneNumber; updateUser.IsPilot = user.IsPilot; updateUser.IsAdmin = user.IsAdmin; updateUser.IZettlePaymentAccountId = user.IZettlePaymentAccountId; updateUser.VippsPaymentAccountId = user.VippsPaymentAccountId; _context.SaveChanges(); } return(EditUser(id)); }
public async Task <ActionResult> Create(CreateBookingViewModel input) { try { if (ModelState.IsValid) { if (input.Date == null) { ModelState.AddModelError("Date", "Please select a date"); return(View(input)); } //if phone number is provided, make sure it is valid. //if no phone number is provided, that's ok as well string phoneNumber = null; if (!string.IsNullOrEmpty(input.PhoneNumber)) { phoneNumber = await _nexmo.FormatPhoneNumber(input.PhoneNumber); if (phoneNumber == null) { ModelState.AddModelError("PhoneNumber", "Please enter a valid phone number"); return(View(input)); } } //Fetch primary booking if this is a clone Booking primaryBooking = null; if (input.PrimaryBookingId != null) { primaryBooking = _context.Bookings .FirstOrDefault(b => b.Id == input.PrimaryBookingId); } //create booking var booking = new Booking() { BookingDate = input.Date.Value.Date, DateRegistered = DateTime.UtcNow, PassengerEmail = input.Email, PassengerName = input.Name, PassengerWeight = input.Weight, PassengerPhone = phoneNumber, Comment = input.Comment, BookingEvents = new List <BookingEvent>(), PrimaryBooking = primaryBooking, PassengerFee = input.PassengerFee, }; _context.Add(booking); //assign pilot if (string.IsNullOrEmpty(input.PilotId)) { //if no pilot is selected, find a new one await _bookingService.AssignNewPilotAsync(booking); } else { //or use pilot as provided var pilot = await _userManager.FindByIdAsync(input.PilotId); _bookingService.AssignNewPilot(booking, pilot); } _context.SaveChanges(); await _messageService.SendNewBookingMessage(booking, new Booking[] {}, input.NotifyPassenger, input.NotifyPilot); //redirect to edit action return(RedirectToAction("Details", new { id = booking.Id })); } } catch (Exception ex) { _logger.LogError(0, $"Error creating booking, {ex.Message}, {ex}"); ModelState.AddModelError("", $"An unexpected error occured during booking, please contact the booking coordinator, {_bookingCoordinatorSettings.Name}, on {_bookingCoordinatorSettings.PhoneNumber}"); } return(View(input)); }
public async Task SendSmsAsync(string number, string message) { number = await _nexmo.FormatPhoneNumber(number); await _nexmo.SendSms("VossHPK", number, message); }
public async Task <ActionResult> Index(BookingViewModel input) { try { if (ModelState.IsValid) { //validate phone number var phoneNumber = await _nexmo.FormatPhoneNumber(input.IntlPhoneNumber); if (phoneNumber == null) { ModelState.AddModelError("PhoneNumber", "Please enter a valid phone number"); return(View(input)); } if (input.Date == null) { ModelState.AddModelError("Date", "Please select a date"); return(View(input)); } if (string.IsNullOrWhiteSpace(input.Name)) { ModelState.AddModelError("Name", "Please enter your name"); return(View(input)); } if (input.AdditionalPassengers?.Any(a => string.IsNullOrWhiteSpace(a.Name)) ?? false) { ModelState.AddModelError("AdditionalPassengers", "Please enter the name of the additional passengers"); return(View(input)); } var booking = new Booking() { BookingDate = input.Date.Value.Date, DateRegistered = DateTime.UtcNow, PassengerEmail = input.Email, PassengerName = input.Name, PassengerPhone = phoneNumber, PassengerWeight = input.Weight, PassengerFee = _bookingCoordinatorSettings.DefaultPassengerFee, Comment = input.Comment, BookingEvents = new List <BookingEvent>(), }; _context.Add(booking); var additionalPassengers = input.AdditionalPassengers ?.Select((a, i) => new { Name = a.Name, Weight = a.Weight, Index = i + 1, }) .ToList(); if (additionalPassengers?.Any() ?? false) { booking.Comment += $", booking 1/{additionalPassengers.Count() + 1}"; } //Create separate bookings for the additional passengers var additionalBookings = additionalPassengers?.Select(additionalPassenger => { var commentExtra = $"booking {additionalPassenger.Index + 1}/{additionalPassengers.Count() + 1}"; var additionalBooking = new Booking() { BookingDate = input.Date.Value.Date, PrimaryBooking = booking, DateRegistered = DateTime.UtcNow, PassengerEmail = input.Email, PassengerName = additionalPassenger.Name, PassengerWeight = additionalPassenger.Weight, PassengerPhone = phoneNumber, PassengerFee = booking.PassengerFee, Comment = $"{input.Comment}, {commentExtra}", BookingEvents = new List <BookingEvent>(), }; _context.Add(additionalBooking); return(additionalBooking); }).ToArray() ?? new Booking[] { }; //Assign pilots var bookings = new [] { booking }.Union(additionalBookings).ToList(); await _bookingService.AssignNewPilotAsync(bookings); _context.SaveChanges(); await _messageService.SendNewBookingMessage(booking, additionalBookings, true, true, true); return(RedirectToAction("Confirm", new { bookingId = booking.Id })); } } catch (Exception ex) { _logger.LogError(0, $"Error creating booking, {ex.Message}, {ex}"); ModelState.AddModelError("", $"An unexpected error occured during booking, please contact the booking coordinator, {_bookingCoordinatorSettings.Name}, on {_bookingCoordinatorSettings.PhoneNumber.AsPhoneNumber()}"); } return(View(input)); }