예제 #1
0
        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);
            }
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
        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)));
        }
예제 #4
0
        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") }));
        }