示例#1
0
        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));
        }
示例#2
0
        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));
        }
示例#5
0
        public async Task SendSmsAsync(string number, string message)
        {
            number = await _nexmo.FormatPhoneNumber(number);

            await _nexmo.SendSms("VossHPK", number, message);
        }
示例#6
0
        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));
        }