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"); }
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\""); }
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)); }
public IEnumerable <Booking> Load() { return(BookingHelper.Get()); }