public ActionResult Confirm(Guid id) { try { var registration = _registrationRepository.GetById(id); var eventItem = _eventRepository.GetById(registration.Event.Id); var visitor = _visitorRepository.GetById(registration.Visitor.Id); var ipAddress = GetIPAddress(); // Controleer of in dit event registraties zijn vanaf hetzelfde ip adres bool alreadyRegistered = false; var otherRegistrations = _registrationRepository.ListByEventAndIp(eventItem.Id, ipAddress); if (otherRegistrations.Count() > 0) // Er zijn registraties vanaf hetzelfe IP { foreach (var otherRegistration in otherRegistrations) { if (otherRegistration.Confirmed) { registration.RejectionReason = "Al geregistreerd (IP)"; _registrationRepository.Update(registration); // Dit was dezelfde bezoeker, dus pas dit aan visitor = otherRegistration.Visitor; alreadyRegistered = true; break; } } } if (!alreadyRegistered) { // Controleer of in dit event registraties zijn vanaf hetzelde email adres otherRegistrations = _registrationRepository.GetByVisitorAndEvent(visitor.Id, eventItem); if (otherRegistrations.Count() > 0) // Er zijn registraties vanaf hetzelfe E-mail adres { foreach (var otherRegistration in otherRegistrations) { if (otherRegistration.Confirmed) { registration.RejectionReason = "Al geregistreerd (Email)"; _registrationRepository.Update(registration); // Dit was dezelfde bezoeker, dus pas dit aan visitor = otherRegistration.Visitor; alreadyRegistered = true; break; } } } } // Controleer of de registratie buiten het termijn valt bool earlierRegistered = false; if (!alreadyRegistered) { var registrations = _registrationRepository.GetByVisitorAndNotEvent(visitor.Id, eventItem); if (registrations.Count() > 0) { DateTime legacyDate = eventItem.TimeRange.Start; switch (_settings.LegacyPeriod.Unit) { case Profilan.SharedKernel.Unit.Hours: legacyDate = eventItem.TimeRange.Start.AddHours(-1 * _settings.LegacyPeriod.Amount); break; case Profilan.SharedKernel.Unit.Minutes: legacyDate = eventItem.TimeRange.Start.AddMinutes(-1 * _settings.LegacyPeriod.Amount); break; case Profilan.SharedKernel.Unit.Seconds: legacyDate = eventItem.TimeRange.Start.AddSeconds(-1 * _settings.LegacyPeriod.Amount); break; case Profilan.SharedKernel.Unit.Days: legacyDate = eventItem.TimeRange.Start.AddDays(-1 * _settings.LegacyPeriod.Amount); break; case Profilan.SharedKernel.Unit.Months: legacyDate = eventItem.TimeRange.Start.AddMonths(-1 * _settings.LegacyPeriod.Amount); break; case Profilan.SharedKernel.Unit.Years: legacyDate = eventItem.TimeRange.Start.AddYears(-1 * _settings.LegacyPeriod.Amount); break; default: break; } // Haal de bezochte registraties op (bezocht of bevestigd?) var visitedRegistrations = _registrationRepository.GetVisitedByVisitor(visitor.Id); if (visitedRegistrations.Count() > 0) { var lastVisitedRegistration = visitedRegistrations.Last(); var lastEvent = _eventRepository.GetById(lastVisitedRegistration.Event.Id); if (lastEvent.TimeRange.Start >= legacyDate) { // Update de registratie met de reden van afwijzing lastVisitedRegistration.RejectionReason = "Eerder geregistreerd (E-mail)"; _registrationRepository.Update(lastVisitedRegistration); earlierRegistered = true; } } } } if (earlierRegistered) { return(RedirectToAction("EarlyRegistered")); } if (alreadyRegistered) { return(RedirectToAction("AlreadyRegistered")); } registration.Confirmed = true; registration.ConfirmationDate = DateTime.Now; _registrationRepository.Update(registration); string themeTitle = ""; if (eventItem.Theme != null) { Theme theme = _themeRepository.GetById(eventItem.Theme.Id); themeTitle = "[" + theme.Title + "]"; } var logoUrl = Request.Url.GetLeftPart(UriPartial.Authority) + "/img"; //var barcodeUrl = Request.Url.GetLeftPart(UriPartial.Authority) + "/fonts/Code39.woff"; //var barcodeUrl = @"https://www.barcodesinc.com/generator/image.php?code=" + registration.Id.ToString().ToUpper() + "&style=197&type=C39&width=590&height=100&xres=1&font=4"; var barcodeUrl = @"https://chart.googleapis.com/chart?chl=" + Uri.EscapeUriString(registration.Id.ToString()) + @"&chs=200x200&cht=qr&chld=H%7C0"; var fileName = eventItem.Id + ".pdf"; var temp = Path.GetTempPath(); var path = Path.Combine(temp, fileName); ConfirmationEmail email = new ConfirmationEmail() { To = visitor.Email, Name = visitor.Name, Date = eventItem.TimeRange.Start.ToString("dd-MM-yyyy"), TimeFrom = eventItem.TimeRange.Start.ToShortTimeString(), TimeTill = eventItem.TimeRange.End.ToShortTimeString(), NumberOfVisitors = registration.NumberOfVisitors, LogoUrl = logoUrl, BarcodeUrl = barcodeUrl, RegistrationId = registration.Id.ToString(), Disclaimer = _settings.EmailDisclaimer, ThemeTitle = themeTitle }; //email.GeneratePDF(path, visitor.Name, eventItem.TimeRange, registration.NumberOfVisitors); //email.Attach(new Attachment(path)); email.Send(); return(RedirectToAction("Confirmed")); } catch (Exception e) { throw new Exception(e.Message); } }
public IHttpActionResult Checkin(Guid id) { try { var registration = _registrationRepository.GetById(id); if (registration == null) { var message = new CheckinMessage() { Status = 602, Description = "Onbekende ticket" }; var response = new CheckinResponse() { Data = null, Message = message }; return(Content(HttpStatusCode.BadRequest, response)); } var visitor = _visitorRepository.GetById(registration.Visitor.Id); var eventItem = _eventRepository.GetById(registration.Event.Id); var currentDate = DateTime.Now; if (registration.Visited) { var scan = Scan.Create(DateTime.Now, "Ticket is al gebruikt", registration); registration.Scans.Add(scan); _registrationRepository.Update(registration); var body = new CheckinBody() { Name = visitor.Name, City = visitor.City, Email = visitor.Email, NumberOfVisitors = registration.NumberOfVisitors, Postcode = visitor.Postcode, TimeSlot = eventItem.TimeRange.ToString() }; var message = new CheckinMessage() { Status = 601, Description = "Ticket is al gebruikt" }; var response = new CheckinResponse() { Data = body, Message = message }; return(Content(HttpStatusCode.BadRequest, response)); } if (currentDate >= eventItem.TimeRange.Start && currentDate <= eventItem.TimeRange.End) { var scan = Scan.Create(DateTime.Now, "Geaccepteerd", registration); registration.Scans.Add(scan); var body = new CheckinBody() { Name = visitor.Name, City = visitor.City, Email = visitor.Email, NumberOfVisitors = registration.NumberOfVisitors, Postcode = visitor.Postcode, TimeSlot = eventItem.TimeRange.ToString() }; var message = new CheckinMessage() { Status = 200, Description = "Geaccepteerd" }; var response = new CheckinResponse() { Data = body, Message = message }; registration.Visited = true; _registrationRepository.Update(registration); return(Ok(response)); } else { var scan = Scan.Create(DateTime.Now, "Ticket valt buiten de toegestane timeslot", registration); registration.Scans.Add(scan); _registrationRepository.Update(registration); var body = new CheckinBody() { Name = visitor.Name, City = visitor.City, Email = visitor.Email, NumberOfVisitors = registration.NumberOfVisitors, Postcode = visitor.Postcode, TimeSlot = eventItem.TimeRange.ToString() }; var message = new CheckinMessage() { Status = 600, Description = "Ticket valt buiten de toegestane timeslot" }; var response = new CheckinResponse() { Data = body, Message = message }; return(Content(HttpStatusCode.BadRequest, response)); } } catch (Exception) { throw; } }
public ActionResult Index(string sortOrder, string currentFilter, string searchString, int?page, string startDate = null, string eventId = null, string state = "all") { ViewBag.CurrentSort = sortOrder; ViewBag.TimeRangeSortParm = String.IsNullOrEmpty(sortOrder) ? "timerange" : ""; if (searchString != null) { page = 1; } else { searchString = currentFilter; } ViewBag.CurrentFilter = searchString; int pageSize = 25; int pageNumber = (page ?? 1); DateTime start, end; if (String.IsNullOrEmpty(startDate)) { var currentDate = DateTime.Now; start = new DateTime(currentDate.Year, currentDate.Month, currentDate.Day); end = start.AddHours(24); } else { var currentDate = Convert.ToDateTime(startDate); start = new DateTime(currentDate.Year, currentDate.Month, currentDate.Day); end = start.AddHours(24); } ViewBag.StartDate = start.ToString("yyyy-MM-dd"); var items = _registrationRepository.List(sortOrder, searchString, start, end, eventId, state); var registrations = new List <RegistrationViewModel>(); foreach (var registration in items) { var visitor = _visitorRepository.GetById(registration.Visitor.Id); var eventItem = _eventRepository.GetById(registration.Event.Id); var date = eventItem.TimeRange.Start.ToString("yyyy-MM-dd"); var timeFrom = eventItem.TimeRange.Start.ToShortTimeString(); var timeTill = eventItem.TimeRange.End.ToShortTimeString(); registrations.Add(new RegistrationViewModel() { Id = registration.Id, Name = visitor.Name, Email = visitor.Email, City = visitor.City, Postcode = visitor.Postcode, EventId = eventItem.Id, Visited = registration.Visited, Confirmed = registration.Confirmed, Title = date + " " + timeFrom + "-" + timeTill, NumberOfVisitors = registration.NumberOfVisitors }); } ViewBag.TotalRegistrations = _registrationRepository.GetRegistrationTotal(start, end); ViewBag.TotalVisitors = _registrationRepository.GetVisitorTotal(start, end); ViewBag.State = state; return(View(registrations.ToPagedList(pageNumber, pageSize))); }
public ActionResult DownloadExcel(Guid id) { ExcelPackage ep = new ExcelPackage(); ExcelWorksheet sheet = ep.Workbook.Worksheets.Add("Report"); sheet.Cells["A1:N1"].Style.Font.Bold = true; sheet.Cells["A1"].Value = "Datum-Timeslot"; sheet.Cells["B1"].Value = "Naam"; sheet.Cells["C1"].Value = "E-mail"; sheet.Cells["D1"].Value = "Postcode"; sheet.Cells["E1"].Value = "Plaats"; sheet.Cells["F1"].Value = "Aantal personen"; sheet.Cells["G1"].Value = "Bevestigd"; sheet.Cells["H1"].Value = "Bezocht"; sheet.Cells["I1"].Value = "Aanmelding"; sheet.Cells["J1"].Value = "Bevestiging"; sheet.Cells["K1"].Value = "Scanning"; sheet.Cells["L1"].Value = "IP Adres"; sheet.Cells["M1"].Value = "Registratie pogingen"; sheet.Cells["N1"].Value = "Reden afwijzing"; var eventItem = _eventRepository.GetById(id); var dateTime = eventItem.TimeRange.Start.ToString("yyyy-MM-dd") + " " + eventItem.TimeRange.Start.ToShortTimeString() + "-" + eventItem.TimeRange.End.ToShortTimeString(); var registrations = _registrationRepository.GetByEvent(eventItem); int row = 2; foreach (var item in registrations) { var registration = _registrationRepository.GetById(item.Id); var visitor = _visitorRepository.GetById(item.Visitor.Id); var registrationTries = _registrationRepository.GetByVisitorAndEvent(visitor.Id, eventItem).Count(); sheet.Cells[string.Format("A{0}", row)].Value = dateTime; sheet.Cells[string.Format("B{0}", row)].Value = visitor.Name; sheet.Cells[string.Format("C{0}", row)].Value = visitor.Email; sheet.Cells[string.Format("D{0}", row)].Value = visitor.Postcode; sheet.Cells[string.Format("E{0}", row)].Value = visitor.City; sheet.Cells[string.Format("F{0}", row)].Value = registration.NumberOfVisitors; sheet.Cells[string.Format("G{0}", row)].Value = registration.Confirmed ? "Ja" : "Nee"; sheet.Cells[string.Format("H{0}", row)].Value = registration.Visited ? "Ja" : "Nee"; sheet.Cells[string.Format("I{0}", row)].Value = registration.Created.ToString("yyyy-MM-dd HH:mm:ss"); sheet.Cells[string.Format("J{0}", row)].Value = registration.ConfirmationDate > registration.Created ? registration.ConfirmationDate.ToString("yyyy-MM-dd HH:mm:ss") : ""; sheet.Cells[string.Format("K{0}", row)].Value = registration.Scans.Count > 0 ? registration.Scans.Last().Timestamp.ToString("yyyy-MM-dd HH:mm:ss") : ""; sheet.Cells[string.Format("L{0}", row)].Value = registration.IPAddress; sheet.Cells[string.Format("M{0}", row)].Value = registrationTries; sheet.Cells[string.Format("N{0}", row)].Value = registration.RejectionReason; //sheet.Cells[string.Format("K{0}", row)].Value = ""; row++; } sheet.Cells["A:AZ"].AutoFitColumns(); Response.Clear(); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment; filename=" + "Report " + dateTime + ".xlsx"); Response.BinaryWrite(ep.GetAsByteArray()); Response.End(); return(RedirectToAction("Index", "Event", new { date = eventItem.TimeRange.Start.ToString("yyyy-MM-dd") })); }