public IActionResult BeheerBestelling(BestellingEditViewModel evm, int id)
 {
     if (ModelState.IsValid)
     {
         try
         {
             McEditie editie = _editieRepository.GetById(id);
             if (editie == null)
             {
                 return(NotFound());
             }
             Bestelling bestelling = editie.GetBestelling(evm.BestellingId);
             if (bestelling == null)
             {
                 return(NotFound());
             }
             MapBestellingEditViewModelToBestelling(evm, bestelling);
             _editieRepository.SaveChanges();
             TempData["message"] = "U heeft de bestelling gewijzigd";
             SendConfirmationMail(bestelling);
         }
         catch (Exception e)
         {
             TempData["error"] = $"Sorry, er liep iets fout, de bestelling kon niet worden gewijzigd: {e.Message}";
         }
         return(RedirectToAction(nameof(Bestellingen), new { id }));
     }
     return(View(nameof(BeheerBestelling), evm));
 }
Beispiel #2
0
        [AcceptVerbs("Get", "Post")]    //REMOTE
        public IActionResult CheckAskedAmountOfTickets(int aantalTickets, Vereniging vereniging)
        {
            McEditie      editie               = _editieRepository.GetNextOrCurrentEditie();
            Verkoopmoment verkoopmoment        = editie.GetCurrentOrNextVerkoopMoment();
            int           maxTicketsVereniging = verkoopmoment.GetMaxTicketsVereniging(vereniging);
            int           maxTicketsLeft       = verkoopmoment.Editie.GetAmountTicketsRemaining();

            if (aantalTickets <= 0)
            {
                return(Json("Sorry, u moet een positief aantal tickets bestellen"));
            }
            if (aantalTickets > maxTicketsLeft)
            {
                return(Json($"Sorry, er zijn slechts {maxTicketsLeft} tickets meer beschikbaar"));
            }
            if (aantalTickets > maxTicketsVereniging)
            {
                return(Json($"Sorry, u kan maximaal maar {maxTicketsVereniging} tickets bestellen"));
            }
            //check if vereniging has an exception amount, limits stay the same
            if (vereniging.MaxTicketsException != null)
            {
                int amountAlreadyOrdered = editie.GetAmountTicketsOrderedByVereniging(vereniging);
                if (aantalTickets + amountAlreadyOrdered > vereniging.MaxTicketsException.Value)
                {
                    int ticketsLeft = vereniging.MaxTicketsException.Value - amountAlreadyOrdered;
                    return(Json($"Sorry, u kan nog maximaal maar {ticketsLeft} tickets bestellen"));
                }
            }
            return(Json(true));
        }
        public IActionResult StartNextEditieStatus(int id)
        {
            McEditie editie = _editieRepository.GetById(id);

            if (editie == null)
            {
                return(NotFound());
            }
            try
            {
                if (editie.Status == McEditie.McEditieStatusType.Verkoop)
                {
                    editie.StartDoorverkoop();
                }
                else
                {
                    editie.StartDownload();
                }
                _editieRepository.SaveChanges();
            } catch (Exception ex)
            {
                TempData["error"] = $"Something went wrong: {ex.Message}";
            }
            return(RedirectToAction(nameof(Edit), new { id }));
        }
        public IActionResult BestellingBetaaldConfirmation(int id, int bestellingId)
        {
            McEditie editie = _editieRepository.GetById(id);

            if (editie == null)
            {
                TempData["error"]   = "Oeps... Er ging iets mis, de gekozen editie bestaat niet (meer)!";
                ViewData["Edities"] = GetEditiesAsSelectList();
                return(RedirectToAction(nameof(Index)));
            }
            Bestelling bestelling = editie.GetBestelling(bestellingId);

            if (bestelling?.IsBetaald != false)
            {
                TempData["error"] = "Oeps... De gevraagde bestelling bestaat niet of is reeds als betaald aangeduid!";
                return(RedirectToAction(nameof(Bestellingen), new { id = editie.Id }));
            }
            try
            {
                bestelling.IsBetaald = true;
                _editieRepository.SaveChanges();
                SendMailPaymentConfirmation(bestelling);
            }
            catch (Exception e)
            {
                TempData["error"] = $"Er ging iets mis! Exception: {e.Message}";
            }
            TempData["message"] = $"U heeft succesvol de bestelling van {bestelling.Vereniging.GroepNaam} als betaald aangeduid!";
            return(RedirectToAction(nameof(Bestellingen), new { id = editie.Id }));
        }
Beispiel #5
0
        public IActionResult Index(Vereniging vereniging)
        {
            McEditie editie = _editieRepository.GetNextOrCurrentEditie();

            ViewData["ServerTime"] = DateTime.Now.ToString("dd MMM yyyy HH:mm");
            return(View(new VerkoopIndexViewModel(editie, vereniging)));
        }
        public IActionResult ApproveTradeResponseByOwnerConfirmation(int id)
        {
            McEditie editie = _editieRepository.GetNextOrCurrentEditieIncludeTrades();

            if (editie == null)
            {
                return(NotFound("Er is nog geen opkomende editie aangemaakt, als dit volgens u niet klopt, gelieve dan contact op te nemen met [email protected]"));
            }
            TradeResponse response = editie.GetTradeResponseById(id);

            if (response != null)
            {
                try
                {
                    response.Offer.ApproveResponse(response.Id);
                    _editieRepository.SaveChanges();
                    NotifyTradeResponseApproved(response);
                    TempData["message"] = $"U heeft succesvol de reactie van {response.Vereniging.GroepNaam} goedgekeurd!";
                }
                catch (Exception ex)
                {
                    TempData["error"] = $"Er ging iets mis: {ex.Message}";
                }
            }
            return(RedirectToAction(nameof(Doorverkoop)));
        }
        public IActionResult CheckInWithDetails(int id, TicketBarcodeVerenigingViewModel vm)
        {
            McEditie editie = _editieRepository.GetByIdWithTickets(id);

            if (editie == null)
            {
                return(NotFound());
            }
            if (ModelState.IsValid)
            {
                if (!IsValidEan8(vm.Barcode.Value))
                {
                    TempData["error"] = "ONGELDIGE BARCODE, GELIEVE OPNIEUW TE SCANNEN";
                    return(RedirectToAction(nameof(CheckIn), new { id }));
                }
                try
                {
                    int    barcodeWithoutChecksum = vm.Barcode.Value / 10;
                    Ticket ticket = editie.GetTicketByBarcode(barcodeWithoutChecksum);
                    if (ticket == null)
                    {
                        TempData["error"] = "ONBESTAAND TICKET - SCAN OPNIEUW - OF VALS TICKET?";
                        return(RedirectToAction(nameof(CheckIn), new { id }));
                    }
                    ticket.CheckIn();
                    _editieRepository.SaveChanges();
                    return(RedirectToAction(nameof(CheckInWithDetails), new { id, verenigingId = ticket.Vereniging.GroepId }));
                }
                catch (Exception e)
                {
                    TempData["redError"] = e.Message;
                }
            }
            return(RedirectToAction(nameof(CheckIn), new { id }));
        }
        public IActionResult PlaceTradeResponse(PlaceTradeResponseModel rm, Vereniging vereniging)
        {
            McEditie editie = _editieRepository.GetNextOrCurrentEditieIncludeTrades();

            if (editie == null)
            {
                return(NotFound("Er is nog geen opkomende editie aangemaakt, als dit volgens u niet klopt, gelieve dan contact op te nemen met [email protected]"));
            }
            if (ModelState.IsValid)
            {
                try
                {
                    TradeOffer offer = editie.GetTradeOfferById(rm.OfferId);
                    if (offer == null)
                    {
                        TempData["error"] = "Oeps er ging iets mis! Deze aanbieding bestaat niet meer!";
                        return(View(nameof(Doorverkoop), new TicketsDoorverkoopViewModel(editie, vereniging)));
                    }
                    offer.AddResponse(vereniging, rm.Amount);
                    _editieRepository.SaveChanges();
                    TempData["message"] = "U heeft succesvol een reactie geplaatst";
                }
                catch (Exception ex)
                {
                    TempData["error"] = $"Oeps! Er ging iets mis: {ex.Message}";
                }
                return(RedirectToAction(nameof(Doorverkoop)));
            }
            return(RedirectToAction(nameof(PlaceTradeResponse), new { id = rm.OfferId }));
        }
        public IActionResult Index()
        {
            McEditie nextOrCurrent                 = _editieRepository.GetNextOrCurrentEditieIncludeTickets();
            IEnumerable <McEditie> pastEdities     = _editieRepository.GetPastEdities();
            IEnumerable <McEditie> upcomingEdities = _editieRepository.GetUpComingWithoutCurrentOrNextEditie();

            if (nextOrCurrent != null)
            {
                //scanTime bepaald hoeveel uur voor de editie tickets kunnen gescanned worden
                int scanTime = nextOrCurrent.EnableTimeRestrictions ? -3 : -3;
                ViewData["NextIsNow"] = nextOrCurrent.StartDatum.AddHours(scanTime) <= DateTime.Now && nextOrCurrent.EindDatum >= DateTime.Now;
                //NextIsNow 3u voor effectieve editie zodat tickets kunnen gescanned worden, behalve als timeRestrictions uitstaan (testedities)
            }

            //Prevent scan tickets page if no tickets generated
            if (nextOrCurrent != null)
            {
                ViewData["ScanningAvailable"] = nextOrCurrent.Tickets.Count > 0;
            }
            else
            {
                ViewData["ScanningAvailable"] = false;
            }

            return(View(new EditieIndexViewModel(nextOrCurrent, pastEdities, upcomingEdities)));
        }
 public ApproveTradeOwnerModel(TradeResponse response, McEditie editie)
 {
     Amount         = response.Amount;
     VerenigingNaam = response.Vereniging.GroepNaam;
     VerenigingMail = response.Vereniging.Email;
     ResponseId     = response.Id;
     Price          = Amount * editie.TicketPrijs;
 }
Beispiel #11
0
 public CloseTradeModel(McEditie editie, TradeResponse response)
 {
     VerenigingNaam = response.Offer.Owner.GroepNaam;
     Amount         = response.Amount;
     Price          = response.Amount * editie.TicketPrijs;
     ResponseId     = response.Id;
     OfferId        = response.Offer.Id;
 }
 public TicketsDownloadViewModel(McEditie editie, Vereniging vereniging)
 {
     Naam                  = vereniging.GroepNaam;
     EditieStatus          = editie.Status;
     VerenigingHasTickets  = editie.VerenigingHasTickets(vereniging);
     TicketAmount          = editie.GetAmountTotalTicketsByVereniging(vereniging);
     TicketsDownloadedOnce = editie.Tickets.Any(t => t.Vereniging.GroepId == vereniging.GroepId);
 }
        public IActionResult CheckInWithDetails(int id, int verenigingId)
        {
            McEditie editie = _editieRepository.GetByIdWithTickets(id);

            ViewData["editieName"]        = editie.Naam;
            ViewData["amountTicketsSold"] = editie.Tickets.Count;
            ViewData["amountCheckedIn"]   = editie.GetAmountCheckedIn();
            return(View(new TicketBarcodeVerenigingViewModel(_verenigingRepository.GetById(verenigingId))));
        }
        public IActionResult CheckIn(int id)
        {
            McEditie editie = _editieRepository.GetByIdWithTickets(id);

            ViewData["editieName"]        = editie.Naam;
            ViewData["amountTicketsSold"] = editie.Tickets.Count;
            ViewData["amountCheckedIn"]   = editie.GetAmountCheckedIn();
            return(View());
        }
 public TicketsIndexViewModel(McEditie editie, Vereniging vereniging)
 {
     EditieNaam     = editie.Naam;
     DaysUntill     = editie.StartDatum.Subtract(DateTime.Now).Days;
     Bestellingen   = editie.GetBestellingenOfVereniging(vereniging).ToList();
     TradesSold     = editie.Trades.Where(t => t.From.GroepId == vereniging.GroepId).ToList();
     TradesReceived = editie.Trades.Where(t => t.To.GroepId == vereniging.GroepId).ToList();
     AantalTickets  = editie.GetAmountTotalTicketsByVereniging(vereniging);
 }
        public IActionResult Doorverkoop(Vereniging vereniging)
        {
            McEditie editie = _editieRepository.GetNextOrCurrentEditieIncludeTrades() ?? _editieRepository.GetLastIncludeBestellingenAndTrades();

            if (editie == null)
            {
                return(NotFound("Er zijn nog geen edities aangemaakt, als dit volgens u niet klopt, gelieve dan contact op te nemen met [email protected]"));
            }
            return(View(new TicketsDoorverkoopViewModel(editie, vereniging)));
        }
 private void MapEditieEditViewModelToEditie(EditieEditViewModel evm, McEditie editie)
 {
     editie.Naam              = evm.Naam;
     editie.StartDatum        = evm.StartDatum;
     editie.EindDatum         = evm.EindDatum;
     editie.Locatie           = evm.Locatie;
     editie.TicketPrijs       = evm.TicketPrijs;
     editie.KostPerMedewerker = evm.KostPerMedewerker;
     editie.MaxTickets        = evm.MaxTickets;
 }
Beispiel #18
0
        public VerkoopIndexViewModel(McEditie editie, Vereniging vereniging)
        {
            HasNextVerkoopmoment = false;
            if (editie != null)
            {
                EditieNaam = editie.Naam;
                Verkoopmoment verkoopmoment = editie.GetCurrentOrNextVerkoopMoment();
                if (verkoopmoment != null)
                {
                    HasNextVerkoopmoment = true;
                    BuyingPossible       = false; //enkel bij statuscode 0 op true latenkomen

                    if (vereniging.IsGroot)
                    {
                        MaxTickets = verkoopmoment.MaxTicketsGroot;
                        Grootte    = "Groot";
                    }
                    else
                    {
                        MaxTickets = verkoopmoment.MaxTicketsKlein;
                        Grootte    = "Klein";
                    }

                    KostPrijs          = editie.TicketPrijs;
                    MedewerkersTax     = editie.KostPerMedewerker;
                    StartVerkoopmoment = verkoopmoment.StartDatum;
                    EindVerkoopmoment  = verkoopmoment.EindDatum;

                    int status = verkoopmoment.CanVerenigingBuy(vereniging);
                    switch (status)
                    {
                    case 0:
                        Message        = "Joepie! Momenteel kunt u tickets bestellen!";
                        BuyingPossible = true;
                        break;

                    case 1:
                        Message = "Sorry, er zijn geen tickets meer beschikbaar voor deze editie :-(";
                        break;

                    case 2:
                        Message = "Gelieve later terug te keren, momenteel is er geen verkoopmoment bezig";
                        break;

                    case 3:
                        Message = "Sorry, u kunt slechts 1 keer per verkoopmoment tickets kopen...";
                        break;

                    default:
                        Message = $"Er liep iets fout, gelieve contact op te nemen met de webmaster als het probleem zich blijft voordoen (status code {status})";
                        break;
                    }
                }
            }
        }
        public IActionResult Edit(int id)
        {
            McEditie editie = _editieRepository.GetById(id);

            if (editie == null)
            {
                return(NotFound());
            }
            ViewData["IsEdit"] = true;
            return(View(new EditieEditViewModel(editie)));
        }
        public IActionResult Delete(int id)
        {
            McEditie editie = _editieRepository.GetById(id);

            if (editie == null)
            {
                return(NotFound());
            }
            ViewData["Naam"] = editie.Naam;
            return(View());
        }
 public EditieVereniging(Vereniging vereniging, McEditie editie)
 {
     Naam                   = vereniging.GroepNaam;
     IBAN                   = vereniging.IBAN;
     Mail                   = vereniging.Email;
     Konvent                = vereniging.Konvent != null ? vereniging.Konvent.GroepNaam : "/";
     AantalTickets          = editie.GetBestellingenOfVereniging(vereniging).Sum(b => b.AantalGereserveerdeTickets);
     AantalTicketsNaVerkoop = editie.GetAmountTotalTicketsByVereniging(vereniging);
     AantalMedewerkers      = editie.GetBestellingenOfVereniging(vereniging).Sum(b => b.AantalMedewerkers);
     IsGroot                = vereniging.IsGroot;
 }
        public IActionResult Bestellingen(int id, int sortByPaid = 0)
        {
            McEditie editie = _editieRepository.GetById(id);

            if (editie == null)
            {
                TempData["error"]   = "Oeps... Er ging iets mis, de gekozen editie bestaat niet (meer)!";
                ViewData["Edities"] = GetEditiesAsSelectList();
                return(RedirectToAction(nameof(Index)));
            }
            return(View(new PenningBestellingenViewModel(editie, sortByPaid)));
        }
        //id = responseId
        public IActionResult DeclineTradeResponse(int id)
        {
            McEditie editie = _editieRepository.GetNextOrCurrentEditieIncludeTrades();

            if (editie == null)
            {
                return(NotFound("Er is nog geen opkomende editie aangemaakt, als dit volgens u niet klopt, gelieve dan contact op te nemen met [email protected]"));
            }
            TradeResponse response = editie.GetTradeResponseById(id);

            return(View(response));
        }
        public IActionResult Bestellingen(int id)
        {
            McEditie editie = _editieRepository.GetById(id);

            if (editie == null)
            {
                return(NotFound());
            }
            ViewData["EditieNaam"] = editie.Naam;
            ViewData["EditieId"]   = editie.Id;
            return(View(editie.Verkoopmomenten.OrderBy(vm => vm.StartDatum)));
        }
        private Chart GenerateAmountVerenigingenBoughtTicketsChart(McEditie editie)
        {
            Chart chart = new Chart()
            {
                Type    = Enums.ChartType.Doughnut,
                Options = new Options()
                {
                    Title = new Title()
                    {
                        Display  = true,
                        Position = "top",
                        Text     = "Aantal verenigingen met tickets",
                        FontSize = 20
                    }
                }
            };

            ChartJSCore.Models.Data data = new ChartJSCore.Models.Data
            {
                Labels = new List <string>()
                {
                    "Verenigingen met tickets", "Verenigingen zonder tickets"
                },
                Datasets = new List <Dataset>()
            };

            int        verenigingenWithTicketsCount = _verenigingRepository.GetAllWhoHaveTickets(editie.Id).Count();
            int        verenigingenCount            = _verenigingRepository.GetAll().Count();
            PieDataset dataset = new PieDataset()
            {
                BackgroundColor = new List <ChartColor>()
                {
                    ChartColorSolid[2],
                    ChartColorSolid[3]
                },
                HoverBackgroundColor = new List <ChartColor>()
                {
                    ChartColorSolid[2],
                    ChartColorSolid[3]
                },
                Data = new List <double>()
                {
                    verenigingenWithTicketsCount,
                    verenigingenCount - verenigingenWithTicketsCount
                }
            };

            data.Datasets.Add(dataset);
            chart.Data = data;

            return(chart);
        }
        private Chart GenerateAmountTicketSoldChart(McEditie editie)
        {
            Chart chart = new Chart()
            {
                Type    = Enums.ChartType.Doughnut,
                Options = new Options()
                {
                    Title = new Title()
                    {
                        Display  = true,
                        Position = "top",
                        Text     = "Aantal verkochte tickets",
                        FontSize = 20
                    }
                }
            };

            ChartJSCore.Models.Data data = new ChartJSCore.Models.Data
            {
                Labels = new List <string>()
                {
                    "Aantal verkochte tickets", "Aantal beschikbare tickets"
                },
                Datasets = new List <Dataset>()
            };

            int        ticketsRemaining = editie.GetAmountTicketsRemaining();
            PieDataset dataset          = new PieDataset()
            {
                BackgroundColor = new List <ChartColor>()
                {
                    ChartColorSolid[2],
                    ChartColorSolid[3]
                },
                HoverBackgroundColor = new List <ChartColor>()
                {
                    ChartColorSolid[2],
                    ChartColorSolid[3]
                },
                Data = new List <double>()
                {
                    editie.MaxTickets - ticketsRemaining,
                    ticketsRemaining
                }
            };

            data.Datasets.Add(dataset);
            chart.Data = data;

            return(chart);
        }
        [AcceptVerbs("Get", "Post")]    //REMOTE
        public IActionResult CheckTicketsToOffer(int amount, Vereniging vereniging)
        {
            McEditie editie = _editieRepository.GetNextOrCurrentEditieIncludeTrades();

            if (editie == null)
            {
                return(Json("Er ging iets mis... Gelieve de pagina te herladen"));
            }
            if (editie.GetAmountTotalTicketsByVereniging(vereniging) < amount)
            {
                return(Json("U kan niet meer tickets aanbieden dan u beschikbaar heeft"));
            }
            return(Json(true));
        }
        public IActionResult StartTicketDownload(Vereniging vereniging, TicketsDownloadViewModel vm)
        {
            McEditie editie = _editieRepository.GetNextOrCurrentEditieIncludeTickets();

            if (editie == null)
            {
                return(NotFound("Er is nog geen opkomende editie aangemaakt, als dit volgens u niet klopt, gelieve dan contact op te nemen met [email protected]"));
            }
            string blankPDFpath;
            string ticketPath;

            try
            {
                string blankPDFname = _config.GetValue <string>("EmptyTicketName");
                ticketPath   = Path.Combine(Directory.GetCurrentDirectory(), "Tickets");
                blankPDFpath = Path.Combine(Directory.GetCurrentDirectory(), "Tickets", blankPDFname);
            }
            catch (Exception ex)
            {
                TempData["error"] = $"Oeps er ging iets mis, indien dit blijft voorkomen, stuur dan volgende tekst door naar [email protected]: {ex.Message}";
                return(RedirectToAction(nameof(Index)));
            }
            if (!editie.VerenigingHasTickets(vereniging))
            {
                TempData["error"] = "Sorry, u heeft geen tickets...";
                return(RedirectToAction(nameof(Index)));
            }

            //make newlines also possible
            string        memberNamesString = vm.MemberNames?.Replace(Environment.NewLine, ";");
            List <string> memberNames       = memberNamesString?.Split(";").ToList();

            editie.GenerateTicketsForVereniging(vereniging, blankPDFpath, ticketPath, memberNames);
            _editieRepository.SaveChanges();
            using (MemoryStream ms = new MemoryStream())
            {
                using (var archive = new ZipArchive(ms, ZipArchiveMode.Create, true))
                {
                    foreach (Ticket t in editie.GetAllTicketsOfVereniging(vereniging))
                    {
                        var    ZipArchiveEntry = archive.CreateEntry(t.TicketName, CompressionLevel.Fastest);
                        byte[] ticketBytes     = System.IO.File.ReadAllBytes(t.PdfPath);
                        using (var zipStream = ZipArchiveEntry.Open()) zipStream.Write(ticketBytes, 0, ticketBytes.Length);
                    }
                }
                Task.Run(() => editie.RemoveTicketsVereniging(vereniging, ticketPath));
                return(File(ms.ToArray(), "application/zip", "Tickets.zip"));
            }
        }
Beispiel #29
0
 public PenningBestellingenViewModel(McEditie editie, int sortByPaid = 0)
 {
     EditieId     = editie.Id;
     EditieNaam   = editie.Naam;
     Bestellingen = editie.Verkoopmomenten.SelectMany(v => v.Bestellingen).ToList();
     Bestellingen = sortByPaid == 1
         ? Bestellingen.OrderBy(b => b.IsBetaald)
                    .ThenBy(b => b.Vereniging.GroepNaam)
                    .ThenBy(b => b.Verkoopmoment.StartDatum)
                    .ToList()
         : Bestellingen.OrderBy(b => b.Vereniging.GroepNaam)
                    .ThenBy(b => b.Verkoopmoment.StartDatum)
                    .ToList();
     SortByPaid = (sortByPaid == 1);
 }
        public IActionResult PlaceTradeOffer(Vereniging vereniging)
        {
            McEditie editie = _editieRepository.GetNextOrCurrentEditieIncludeTrades();

            if (editie == null)
            {
                return(NotFound("Er is nog geen opkomende editie aangemaakt, als dit volgens u niet klopt, gelieve dan contact op te nemen met [email protected]"));
            }
            if (editie.TradeOffers.SingleOrDefault(o => o.Owner.GroepId == vereniging.GroepId) != null)
            {
                TempData["error"] = "Een vereniging kan slechts één aanbieding plaatsen";
                return(View(nameof(Doorverkoop), new TicketsDoorverkoopViewModel(editie, vereniging)));
            }
            return(View(new PlaceTradeOfferModel()));
        }