Exemple #1
0
        public async Task SendAdminRsvpNotificationAsync(WeddingGuest guest, WeddingGuest oldResponse)
        {
            string body;
            string greeting = guest.UpdatedRsvp ? "Updated RSVP Notification: " : "RSVP Notification: ";

            greeting += string.Format("{0} {1}", guest.FirstName, guest.LastName);

            string oldRsvpHeader = "";
            string oldRsvpTable  = "";
            string newRsvpHeader = "";
            string newRsvpTable  = "";

            if (guest.UpdatedRsvp)
            {
                oldRsvpHeader = "<h4>Old RSVP Responses:</h4>";
                newRsvpHeader = "<h4>New RSVP Responses:</h4>";
                oldRsvpTable  = FormatRsvpTable(oldResponse);
            }
            else
            {
                newRsvpHeader = "<h4>RSVP Responses:</h4>";
            }

            newRsvpTable = FormatRsvpTable(guest);

            var message = new MailMessage();

            message.To.Add(new MailAddress("*****@*****.**"));
            message.From    = new MailAddress("*****@*****.**");
            message.Subject = greeting;
            using (var sr = new StreamReader(Server.MapPath("\\Templates\\") + "AdminRsvpNotificationEmailTemplate.html"))
            {
                body = await sr.ReadToEndAsync();
            }
            message.Body       = string.Format(body, greeting, oldRsvpHeader, oldRsvpTable, newRsvpHeader, newRsvpTable);
            message.IsBodyHtml = true;

            using (var smtp = new SmtpClient())
            {
                var credential = new NetworkCredential
                {
                    UserName = ConfigurationManager.AppSettings["MAIL_USER"],
                    Password = ConfigurationManager.AppSettings["MAIL_PASSWORD"]
                };
                smtp.Credentials = credential;
                smtp.Host        = "smtp.sendgrid.net";
                smtp.Port        = 587;
                smtp.EnableSsl   = true;
                await smtp.SendMailAsync(message);
            }
        }
Exemple #2
0
        public IActionResult RSVPWedding(int id)
        {
            if (HttpContext.Session.GetInt32("uuid") == null)
            {
                return(RedirectToAction("Index"));
            }
            WeddingGuest Guest = new WeddingGuest();

            Guest.GuestId   = HttpContext.Session.GetInt32("uuid").GetValueOrDefault();
            Guest.WeddingId = id;
            _context.WeddingGuests.Add(Guest);
            _context.SaveChanges();

            return(RedirectToAction("WeddingList"));
        }
        public IActionResult LeaveWedding(int weddingId)
        {
            var userId = _userManager.GetUserId(User);


            WeddingGuest weddingGuest = _context.WedddingGuests.Where(wg => wg.WeddingId == weddingId && wg.GuestId == userId).First();

            if (weddingGuest != null)
            {
                _context.WedddingGuests.Remove(weddingGuest);
                _context.SaveChanges();
            }


            return(RedirectToAction("Dashboard"));
        }
        public IActionResult UNRSVP(int id)
        {
            int?uId = HttpContext.Session.GetInt32("UserId");

            if (uId == null)
            {
                return(RedirectToAction("Index"));
            }
            WeddingGuest ToDelete = _context.WeddingGuests.FirstOrDefault(i => i.WeddingId == (int)id);

            if (ToDelete == null)
            {
                return(RedirectToAction("Dashboard"));
            }
            _context.Remove(ToDelete);
            _context.SaveChanges();
            return(RedirectToAction("Dashboard"));
        }
        public IActionResult UpdateGuestStatus(int weddingId, WeddingGuest.StatusOptions status)
        {
            string userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;

            _logger.LogInformation($"=== UpdateGuestStatus({weddingId},{userId},{status}) ===");
            WeddingGuest guest = _dbContext.WeddingGuests.Where(x => x.WeddingId == weddingId && x.IdentityUserId == userId).FirstOrDefault();

            if (guest != null)
            {
                guest.Status = status;
                _dbContext.WeddingGuests.Update(guest);
                _dbContext.SaveChanges();
            }
            ;

            TempData["userIdFilter"] = userId;
            return(View("Index", _dbContext));
        }
        public IActionResult RSVP(int id)
        {
            Wedding SelectedWedding = _wContext.weddings
                                      .Where(w => w.WeddingId == id)
                                      .SingleOrDefault();

            if (_wContext.wedding_guests.Where(g => g.UserId == ActiveUser.UserId).Where(w => w.WeddingId == SelectedWedding.WeddingId).Count() == 0)
            {
                WeddingGuest NewGuest = new WeddingGuest(SelectedWedding, ActiveUser);
                _wContext.Add(NewGuest);
                _wContext.SaveChanges();
            }
            else
            {
                WeddingGuest NewGuest = _wContext.wedding_guests
                                        .Where(g => g.UserId == ActiveUser.UserId)
                                        .Where(w => w.WeddingId == SelectedWedding.WeddingId)
                                        .SingleOrDefault();
            }
            return(RedirectToAction("Dashboard", "Wedding"));
        }
        public IActionResult AddGuest(int WeddingId, string Email, string Description)
        {
            _logger.LogInformation($"=== AddGuest(WeddingId={WeddingId}, Email={Email}, Description={Description}) ===");
            Wedding wedding = _dbContext.Weddings.Include(x => x.WeddingGuests).Where(x => x.WeddingId == WeddingId).FirstOrDefault();

            if (!_dbContext.WeddingGuests.Any(x => x.WeddingId == WeddingId && x.InvitedEmail == Email))
            {
                _logger.LogInformation($"=== AddGuest(WeddingId={WeddingId}, Adding new guest with Email={Email}) ===");
                WeddingGuest weddingGuest = new WeddingGuest();
                weddingGuest.WeddingId        = WeddingId;
                weddingGuest.InvitedEmail     = Email;
                weddingGuest.GuestDescription = Description;
                _dbContext.WeddingGuests.Add(weddingGuest);
                _dbContext.SaveChanges();
            }
            else
            {
                _logger.LogInformation($"=== AddGuest(WeddingId={WeddingId}, Guest ALREADY exists with Email={Email}) ===");
            }
            return(RedirectToAction($"EditWedding", new { weddingId = WeddingId }));
            //return View("EditWedding",model: new WeddingForm(wedding));
        }
Exemple #8
0
        public async Task SendRsvpEmailAsync(WeddingGuest guest)
        {
            string body;
            string greeting = guest.UpdatedRsvp ? "We received your updated RSVP info. " : "Thank you for your RSVP. ";

            if (guest.CanAttend == true)
            {
                greeting += "We're so glad you'll be able to join us";
                if (guest.PlusOneCanAtend == false && guest.PlusOneIsKnown)
                {
                    greeting += string.Format(", but we're sorry {0} won't be able to make it.", guest.FirstNamePlusOne);
                }
                else
                {
                    greeting += ".";
                }
            }
            else
            {
                greeting += "We're sorry you won't be able to join us.";
            }

            // format info table
            string infoTable = FormatRsvpTable(guest);
            //string infoTable = "";

            string instructions = guest.CanAttend != false ? "If this information is incorrect, or if you need to change your responses in the future, please use the following link:" : "If your plans change and you'd like to attend, please email Lisa and Russ as soon as possible at <a href = \"mailto:[email protected]?subject=Please Change My RSVP\">[email protected]</a>, and we'll do our best to accommodate you";
            var    callbackUrl  = Url.Action("RSVP", "WeddingGuests", new { userId = guest.Id }, protocol: Request.Url.Scheme);
            var    button       = guest.CanAttend != false?string.Format("<table border='0' cellpadding='0' cellspacing='12' width='100%'><tr><td align='center'><table border='0' cellpadding='0' cellspacing='0'><tr><td bgcolor='#853641' style='padding: 12px 18px 12px 18px; -webkit-border-radius: 3px; border-radius: 3px; background-color: #853641;' align='center'><a href='{0}' style='text-decoration: none; font-size: 18px; color: #ffffff; '>Update RSVP Info</a></td></tr></table></td></tr></table>", callbackUrl) : "";

            using (var sr = new StreamReader(Server.MapPath("\\Templates\\") + "RsvpConfirmationEmailTemplate.html"))
            {
                body = await sr.ReadToEndAsync();
            }
            string messageBody = string.Format(body, greeting, guest.FirstName, infoTable, instructions, button);
            string subject     = guest.UpdatedRsvp ? "Updated RSVP Confirmation--Russ and Lisa's Wedding" : "RSVP Confirmation--Russ and Lisa's Wedding";
            await UserManager.SendEmailAsync(guest.Id, subject, messageBody);
        }
        public IActionResult RSVP(int id, IndexWrapper Form)
        {
            int?uId = HttpContext.Session.GetInt32("UserId");

            if (uId == null)
            {
                return(RedirectToAction("Index"));
            }

            if (ModelState.IsValid)
            {
                WeddingGuest ToAdd = new WeddingGuest {
                    UserId    = (int)uId,
                    WeddingId = id
                };
                _context.Add(ToAdd);
                _context.SaveChanges();
                return(RedirectToAction("Dashboard"));
            }
            else
            {
                return(Dashboard());
            }
        }
Exemple #10
0
        public async Task <ActionResult> Invite(InviteWeddingGuestViewModel model)
        {
            InviteWeddingGuestViewModel viewModel = new InviteWeddingGuestViewModel();

            if (ModelState.IsValid)
            {
                var newUser = new WeddingGuest
                {
                    FirstName        = model.FirstName,
                    LastName         = model.LastName,
                    UserName         = model.Email,
                    Email            = model.Email,
                    PhoneNumber      = model.PhoneNumber,
                    IsActive         = true,
                    InviteDate       = DateTime.Now,
                    HasPlusOne       = model.HasPlusOne,
                    PlusOneIsKnown   = model.PlusOneIsKnown,
                    FirstNamePlusOne = model.FirstNamePlusOne,
                    LastNamePlusOne  = model.LastNamePlusOne,
                    InviteMessage    = model.InviteMessage
                };
                // set guest's password to their email address
                string password    = model.Email;
                var    adminresult = await UserManager.CreateAsync(newUser, password);

                string requestMessage = "";

                if (adminresult.Succeeded)
                {
                    // send invitation email to guest
                    string body;
                    string salutation;
                    string plusOneMessage = newUser.HasPlusOne && !newUser.PlusOneIsKnown ? "<h4>But wait, there's more... you get to bring a <i>PLUS ONE!</i> (so choose your guest wisely...)</h4>" : "";
                    string specialMessage = string.IsNullOrEmpty(newUser.InviteMessage) ? "" : "<hr /><p><strong>Special Message from The Honeys: </strong>" + newUser.InviteMessage + "</p><hr />";

                    if (newUser.PlusOneIsKnown)
                    {
                        salutation = newUser.FirstName + " and " + newUser.FirstNamePlusOne;
                    }
                    else
                    {
                        salutation = newUser.FirstName;
                    }

                    using (var sr = new StreamReader(Server.MapPath("\\Templates\\") + "InviteWeddingGuestEmailTemplate.html"))
                    {
                        body = await sr.ReadToEndAsync();
                    }
                    var code = await UserManager.GenerateEmailConfirmationTokenAsync(newUser.Id);

                    var    callbackUrl = Url.Action("RSVP", "WeddingGuests", new { userId = newUser.Id }, protocol: Request.Url.Scheme);
                    string messageBody = string.Format(body, salutation, plusOneMessage, specialMessage, callbackUrl);
                    await UserManager.SendEmailAsync(newUser.Id, "Please RSVP--You're invited to Russ and Lisa's Wedding!", messageBody);

                    //Add User to the selected Roles
                    var result = await UserManager.AddToRoleAsync(newUser.Id, "WeddingGuest");

                    if (!result.Succeeded)
                    {
                        ModelState.AddModelError("", result.Errors.First());
                        ViewBag.RoleId = new SelectList(await RoleManager.Roles.ToListAsync(), "Name", "Name");
                        return(View(viewModel));
                    }
                }
                else
                {
                    ModelState.AddModelError("", adminresult.Errors.First());
                    ViewBag.RoleId = new SelectList(await RoleManager.Roles.ToListAsync(), "Name", "Name");
                    return(View(viewModel));
                }
                Success("Wedding Guest was invited successfully. " + requestMessage, true);
                return(RedirectToAction("Index"));
            }
            return(View(viewModel));
        }
Exemple #11
0
        public string FormatRsvpTable(WeddingGuest model)
        {
            string rsvpTable = "<table border='0' cellpadding='6' cellspacing='0' width='100%'>";

            var attendMessage = string.Empty;

            switch (model.CanAttend)
            {
            case true:
                attendMessage = "Yes";
                break;

            case false:
                attendMessage = "No";
                break;

            case null:
                attendMessage = "Unsure";
                break;

            default:
                break;
            }
            rsvpTable += string.Format("<tr><td width = '25%' align = 'right' valign = 'top' >Can you attend?:</ td ><td width = '75%' align = 'left' valign = 'top' >{0}</ td ></ tr >", attendMessage);

            if (model.CanAttend == true)
            {
                rsvpTable += string.Format("<tr><td width = '25%' align = 'right' valign = 'top' >Would you like a meatless option?:</ td ><td width = '75%' align = 'left' valign = 'top' >{0}</ td ></ tr >", model.Meatless == true ? "Yes" : "No");
                rsvpTable += string.Format("<tr><td width = '25%' align = 'right' valign = 'top' >Would you like a vegan option?:</ td ><td width = '75%' align = 'left' valign = 'top' >{0}</ td ></ tr >", model.Vegan == true ? "Yes" : "No");
                rsvpTable += string.Format("<tr><td width = '25%' align = 'right' valign = 'top' >Dietary needs:</ td ><td width = '75%' align = 'left' valign = 'top' >{0}</ td ></ tr >", model.DietaryNotes);
                if (model.HasPlusOne)
                {
                    var PlusOneAttendMessage = string.Empty;
                    switch (model.PlusOneCanAtend)
                    {
                    case true:
                        PlusOneAttendMessage = "Yes";
                        break;

                    case false:
                        PlusOneAttendMessage = "No";
                        break;

                    case null:
                        PlusOneAttendMessage = "Unsure";
                        break;

                    default:
                        break;
                    }

                    rsvpTable += string.Format("<tr><td width = '25%' align = 'right' valign = 'top' >{0}:</ td ><td width = '75%' align = 'left' valign = 'top' >{1}</ td ></ tr >", model.PlusOneIsKnown ? string.Format("Will {0} be able to attend?", model.FirstNamePlusOne) : "Would you like to bring a 'plus one'?", PlusOneAttendMessage);
                    if (!model.PlusOneIsKnown == true && model.PlusOneCanAtend == true)
                    {
                        rsvpTable += string.Format("<tr><td width = '25%' align = 'right' valign = 'top' >Name of your 'plus one':</ td ><td width = '75%' align = 'left' valign = 'top' >{0}</ td ></ tr >", model.FirstNamePlusOne + " " + model.LastNamePlusOne);
                    }
                    if (model.PlusOneCanAtend == true)
                    {
                        rsvpTable += string.Format("<tr><td width = '25%' align = 'right' valign = 'top' >Would {0} like a meatless option?:</ td ><td width = '75%' align = 'left' valign = 'top' >{1}</ td ></ tr >", model.PlusOneIsKnown ? model.FirstNamePlusOne : "your 'plus one'", model.Meatless == true ? "Yes" : "No");
                        rsvpTable += string.Format("<tr><td width = '25%' align = 'right' valign = 'top' >Would {0} like a vegan option?:</ td ><td width = '75%' align = 'left' valign = 'top' >{1}</ td ></ tr >", model.PlusOneIsKnown ? model.FirstNamePlusOne : "your 'plus one'", model.Vegan == true ? "Yes" : "No");
                        rsvpTable += string.Format("<tr><td width = '25%' align = 'right' valign = 'top' >Dietary needs for {0}:</ td ><td width = '75%' align = 'left' valign = 'top' >{1}</ td ></ tr >", model.PlusOneIsKnown ? model.FirstNamePlusOne : "your 'plus one'", model.DietaryNotes);
                    }
                }
            }
            rsvpTable += "</table>";
            return(rsvpTable);
        }