public static string SummaryEmail()
        {
            var emails = EmailHelper.GetSummaryEmails();

            if (emails == null || !emails.Any())
            {
                return("No summary email recipients");
            }

            var bookings         = BookingHelper.Get();
            var nextWeekBookings = bookings.Where(booking =>
                                                  (booking.Confirmed || booking.Reserved) &&
                                                  booking.From >= DateTime.Now.AddDays(-1) &&
                                                  booking.From <= DateTime.Now.AddDays(7)).ToList();

            var weekNumber = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(DateTime.UtcNow,
                                                                               CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

            var emailBody = $"Kommende uke ({weekNumber}) \r\n\r\n";

            if (nextWeekBookings.Any())
            {
                foreach (var booking in nextWeekBookings.OrderBy(b => b.From))
                {
                    var str = $"Navn: {booking.Name}\r\n" +
                              $"Dato: {booking.From:dd.MM}" + (booking.From == booking.To
                                  ? "\r\n"
                                  : $" - {booking.To:dd.MM} \r\n") +
                              $"Område - {booking.Area} \r\n" +
                              $"Melding: {booking.Comment}\r\n\r\n";
                    emailBody += str;
                }
            }
            else
            {
                emailBody += "Ingen bookinger";
            }

            var sentEmails = 0;

            using (var client = new SmtpClient())
            {
                foreach (var recipient in emails)
                {
                    var mailMessage = new MailMessage
                    {
                        Subject      = $"Rensvik Samfunnshus, uke {weekNumber}",
                        Body         = emailBody,
                        BodyEncoding = System.Text.Encoding.UTF8,
                        From         = new MailAddress(EmailHelper.GetSmtpUsername(), "Rensvik Samfunnshus")
                    };
                    mailMessage.To.Add(recipient);

                    client.Send(mailMessage);
                    sentEmails++;
                }
            }

            return($"Sent {sentEmails} emails, to following list of recipients: {string.Join(", ", emails)}");
        }
        public static string NewBooking(int id)
        {
            var token = new Token
            {
                BookingId  = id,
                Expiration = DateTime.UtcNow.AddDays(1),
                Key        = RandomHelper.RandomString(14)
            };

            TokenHelper.Add(token);
            var booking = BookingHelper.Get(id);

            if (booking == null)
            {
                return("No valid booking registered");
            }

            var emailRecipientsList = EmailHelper.GetNewBookingEmails();

            var mailMessage = new MailMessage();

            mailMessage.From = new MailAddress(EmailHelper.GetSmtpUsername(), "Rensvik Samfunnshus");

            foreach (var emailRecipient in emailRecipientsList)
            {
                mailMessage.To.Add(emailRecipient);
            }
            mailMessage.Subject      = $"Ny booking ({DateTime.UtcNow:dd.MM HH:mm})";
            mailMessage.BodyEncoding = System.Text.Encoding.UTF8;

            var body = $"Navn: {booking.Name} \r\n";

            body += $"Telefon: {booking.Telephone} \r\n";
            body += $"Område: {booking.Area} \r\n";
            if (booking.From == booking.To)
            {
                body += $"Dato: {booking.From:dd.MM} \r\n";
            }
            else
            {
                body += $"Dato: {booking.From:dd.MM} - {booking.To:dd.MM} \r\n";
            }

            body += $"Tid: {booking.TimeOfDay} \r\n";
            body += $"Formål: {booking.Purpose} \r\n";
            body += $"Kommentar: {booking.Comment} \r\n";

            body += $"Marker denne bookingen som reservert ved å klikke lenken nedenfor\r\n";
            body += Settings.NewBookingEmailLinkTarget + $"?t={token.Key}&id={id}";

            mailMessage.Body = body;

            using (var client = new SmtpClient())
            {
                client.Send(mailMessage);
            }

            return("New booking actions complete");
        }
Esempio n. 3
0
        public string Reserver([Bind(Prefix = "t")] string token, int id)
        {
            if (TokenHelper.Validate(token, id))
            {
                var booking = BookingHelper.Get(id);
                if (booking != null)
                {
                    booking.Reserved = true;
                    BookingHelper.Save(booking);
                }
            }
            MemoryCache.Default.Remove("bookings");

            return("Bookingen har blitt markert som \"Reservert\"");
        }
Esempio n. 4
0
        public override ActionResult Index(RenderModel model)
        {
            var viewModel = new RentViewModel(model.Content, model.CurrentCulture);

            var currentBookings = BookingHelper.Get();

            var dateList = new List <Tuple <DateTime, bool> >();

            foreach (var booking in currentBookings.Where(booking => booking.Confirmed || booking.Reserved))
            {
                if (booking.From == booking.To || booking.From > booking.To)
                {
                    dateList.Add(new Tuple <DateTime, bool>(booking.From, booking.Confirmed));
                }
                else
                {
                    /*
                     * Bookings over multiple days requires custom handling. The easiest is
                     * to just start on the booking-start-date, and increment until we reach
                     * booking end date. If we've incremented more than N times, something is wrong.
                     */
                    var to           = booking.To;
                    var from         = booking.From;
                    var safeguard    = 0;
                    var tempDateList = new List <Tuple <DateTime, bool> >();
                    while (from <= to && safeguard < Settings.MaxBookingLength)
                    {
                        tempDateList.Add(new Tuple <DateTime, bool>(from, booking.Confirmed));
                        from = from.AddDays(1);
                        safeguard++;
                    }

                    if (safeguard <= Settings.MaxBookingLength)
                    {
                        dateList.AddRange(tempDateList);
                    }
                    else
                    {
                        Logger.Warn(typeof(RentController), $"There is a booking that exceeds Max Booking Length ({Settings.MaxBookingLength}).");
                    }
                }
            }

            viewModel.CurrentBookings = dateList;
            return(CurrentTemplate(viewModel));
        }
Esempio n. 5
0
 public IEnumerable <Booking> Load()
 {
     return(BookingHelper.Get());
 }