コード例 #1
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));
        }
コード例 #2
0
        public async Task <ObservableCollection <Reservering> > GetReserveringenByDateAsync(DateTime date)
        {
            if (_cachedReserveringen == null)
            {
                _cachedReserveringen = new ObservableCollection <Reservering>();
            }

            Vereniging vereniging = await _verenigingRepository.GetVerenigingAsync();

            List <Reservering> reserveringen = await _reserveringService.GetReserveringByDateAsync(vereniging.Id, date);

            foreach (Reservering reservering in reserveringen)
            {
                if (_cachedReserveringen.Count(r => r.Id == reservering.Id) == 0)
                {
                    reservering.Baan = await _baanRepository.GetBaanAsync(vereniging.Id, vereniging.AccommodatieId, reservering.BaanId.Value);

                    if (!_cachedReserveringen.Any(r => r.Id == reservering.Id))
                    {
                        _cachedReserveringen.Add(reservering);
                    }
                }
            }

            return(new ObservableCollection <Reservering>(_cachedReserveringen.Where(r => r.BeginTijd >= date.TimeOfDay || r.EindTijd >= date.TimeOfDay)));
        }
コード例 #3
0
        public async Task <Reservering> AddBaanToReserveringAsync(Guid baanId, TimeSpan beginTijd, TimeSpan duur)
        {
            if (_cachedReservering == null)
            {
                CreateEmptyReservering();
            }

            Vereniging vereniging = await _verenigingRepository.GetVerenigingAsync();

            Baan baan = await _baanRepository.GetBaanAsync(vereniging.Id, vereniging.AccommodatieId, baanId);

            if (_cachedReservering.Baan != baan || _cachedReservering.BaanId != baan.Id)
            {
                _cachedReservering.Baan      = baan;
                _cachedReservering.BaanId    = baan.Id;
                _cachedReservering.Datum     = DateTime.Now.Date;
                _cachedReservering.BeginTijd = beginTijd;
            }

            await CalCulateDuration(duur);

            RaiseBaanUpdated();

            return(_cachedReservering);
        }
コード例 #4
0
 public IActionResult BestelTickets(VerkoopBestelViewModel vm, Vereniging vereniging)
 {
     if (ModelState.IsValid)
     {
         Verkoopmoment verkoopmoment = _editieRepository.GetNextOrCurrentEditie()?.GetCurrentOrNextVerkoopMoment();
         Bestelling    bestelling;
         if (verkoopmoment == null)
         {
             TempData["error"] = "Sorry, u was net te laat met het bestellen van uw tickts... :(";
             return(RedirectToAction("Index", "Home"));
         }
         try
         {
             bestelling = verkoopmoment.PlaatsBestelling(vereniging, vm.AantalTickets);
             _editieRepository.SaveChanges();
             SendConfirmationMail(bestelling);
         } catch (Exception e)
         {
             TempData["error"] = $"Sorry, gelieve opnieuw te proberen! Error: {e.Message}";
             return(RedirectToAction(nameof(Index)));
         }
         return(RedirectToAction(nameof(BestellingConfirmation), new { id = bestelling.BestellingId }));
     }
     return(RedirectToAction(nameof(BestelTickets)));
 }
コード例 #5
0
 public Ticket(Vereniging vereniging, McEditie e, string blankPdf, string ticketsPath, string userName = null)
 {
     IsCheckedIn = false;
     Vereniging  = vereniging;
     Editie      = e;
     if (userName == "Simon")
     {
         Barcode = 12345678;
     }
     else
     {
         Barcode = GenerateBarcodeNumber();
     }
     //PdfPath example: ~/Tickets/3/5/VERNIGING-yyyyxxx.pdf      3=editideId, 5=verenigingId, dan ticketnaam
     if (userName != null)
     {
         string ticketName = $"{vereniging.NormalizedGroepNaam}-{userName.Replace(" ", string.Empty)}.pdf";
         PdfPath = Path.Combine(ticketsPath, e.Id.ToString(), vereniging.GroepId.ToString(), ticketName);
     }
     else
     {
         string ticketName = $"{vereniging.NormalizedGroepNaam}-{Barcode}.pdf";
         PdfPath = Path.Combine(ticketsPath, e.Id.ToString(), vereniging.GroepId.ToString(), ticketName);
     }
     //make sure directory exists, if dir already exists method does nothing
     Directory.CreateDirectory(Path.Combine(ticketsPath, e.Id.ToString(), vereniging.GroepId.ToString()));
     GenerateTicketPdf(blankPdf);
 }
コード例 #6
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)));
        }
コード例 #7
0
        public async Task <Vereniging> GetVerenigingByLocatieAsync(double Longitude, double Latitude)
        {
            Vereniging vereniging = new Vereniging {
                Id = Guid.NewGuid()
            };

            ClubCloud_Vereniging ccVereniging = await client.GetVerenigingByLocationAsync("00000000", Latitude, Longitude, false);

            if (ccVereniging != null)
            {
                vereniging = new Vereniging {
                    Id = ccVereniging.Id, Naam = ccVereniging.Naam, Nummer = ccVereniging.Nummer, AccommodatieId = ccVereniging.AccommodatieId.Value
                };
            }
            else
            {
                await Task.Delay(5000);

                if (vereniging == null)
                {
                    vereniging = await GetVerenigingByLocatieAsync(Longitude, Latitude);
                }
            }

            return(vereniging);
        }
コード例 #8
0
        private async Task UpdateBanenInfoAsync()
        {
            try
            {
                if (_vereniging == null)
                {
                    _vereniging = await _verenigingRepository.GetVerenigingAsync();
                }
                if (_afhang == null)
                {
                    _afhang = await _verenigingRepository.GetVerenigingSettingsAsync();
                }

                List <Baan> banen = await _baanRepository.GetBanenByDateAsync(_vereniging.Id, _vereniging.AccommodatieId, DateTime.Now);

                ResourceType banenResource = new ResourceType {
                    TypeName = "Banen"
                };

                foreach (Baan baan in banen)
                {
                    banenResource.ResourceCollection.Add(new Resource {
                        DisplayName = baan.Naam, ResourceName = baan.Naam, TypeName = "Banen"
                    });
                }

                Banen.Add(banenResource);
            }
            catch (Exception ex)
            {
                string message = ex.Message;
                throw;
            }
        }
        public async Task <IActionResult> OnPostAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }

            _logger.LogInformation("User with ID '{UserId}' asked for their personal data.", _userManager.GetUserId(User));

            // Only include personal data for download
            var personalData      = new Dictionary <string, string>();
            var personalDataProps = typeof(IdentityUser).GetProperties().Where(
                prop => Attribute.IsDefined(prop, typeof(PersonalDataAttribute)));

            foreach (var p in personalDataProps)
            {
                personalData.Add(p.Name, p.GetValue(user)?.ToString() ?? "null");
            }
            Vereniging vereniging = _verenigingRepository.GetByMail(user.Email);

            personalData.Add("EmailZeden", vereniging.EmailZeden);
            personalData.Add("IBAN", vereniging.IBAN);

            Response.Headers.Add("Content-Disposition", "attachment; filename=PersonalData.json");
            return(new FileContentResult(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(personalData)), "text/json"));
        }
コード例 #10
0
        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 }));
        }
コード例 #11
0
 public TradeResponse(Vereniging vereniging, TradeOffer offer, int amount)
 {
     Vereniging = vereniging;
     Amount     = amount;
     Status     = OfferStatusType.Pending;
     Offer      = offer;
 }
コード例 #12
0
        public async Task <IActionResult> OnGetAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }

            var userName = await _userManager.GetUserNameAsync(user);

            var email = await _userManager.GetEmailAsync(user);

            Vereniging vereniging = _verenigingRepository.GetByMail(email);

            Username = userName;

            Input = new InputModel
            {
                Email      = email,
                EmailZeden = vereniging.EmailZeden,
                IBAN       = vereniging.IBAN
            };

            return(Page());
        }
コード例 #13
0
        public async Task <ObservableCollection <Reservering> > GetReserveringenBySpelerAsync(Guid spelerId)
        {
            if (_cachedReserveringen == null || (_today == null || _today < DateTime.Today))
            {
                _cachedReserveringen = new ObservableCollection <Reservering>();

                Vereniging vereniging = await _verenigingRepository.GetVerenigingAsync();

                List <Reservering> reserveringen = await _reserveringService.GetReserveringenAsync(vereniging.Id);

                foreach (Reservering reservering in reserveringen)
                {
                    if (_cachedReserveringen.Count(r => r.Id == reservering.Id) == 0)
                    {
                        reservering.Baan = await _baanRepository.GetBaanAsync(vereniging.Id, vereniging.AccommodatieId, reservering.BaanId.Value);

                        _cachedReserveringen.Add(reservering);
                    }
                }
                _today = DateTime.Today;
            }

            ObservableCollection <Reservering> aankomende = new ObservableCollection <Reservering>(_cachedReserveringen.Where(r => r.BeginTijd >= DateTime.Now.TimeOfDay || r.EindTijd >= DateTime.Now.TimeOfDay));
            ObservableCollection <Reservering> gevonden   = new ObservableCollection <Reservering>();

            foreach (Reservering reservering in aankomende)
            {
                if (reservering.Spelers.Count(s => s.Id == spelerId) > 0)
                {
                    gevonden.Add(reservering);
                }
            }

            return(gevonden);
        }
コード例 #14
0
        private async Task UpdateBanenInfoAsync()
        {
            _vereniging = await _verenigingRepository.GetVerenigingAsync();

            _reservering = await _reserveringRepository.GetReserveringAsync();

            List <Baan> banen = await _baanRepository.GetBanenAsync(_vereniging.Id, _vereniging.AccommodatieId);

            ObservableCollection <BaanUserControlViewModel> UnorderedBanen = new ObservableCollection <BaanUserControlViewModel>();

            foreach (Baan baan in banen)
            {
                UnorderedBanen.Add(new BaanUserControlViewModel(baan, _baanRepository, _reserveringRepository, _verenigingRepository, _navigationService, _resourceLoader, _alertMessageService, _eventAggregator));
            }

            ObservableCollection <BaanUserControlViewModel> OrderedBanen = new ObservableCollection <BaanUserControlViewModel>(UnorderedBanen.OrderBy(b => b.BeginTijd).ThenByDescending(b => b.Duur).ThenBy(b => b.Nummer));

            Banen = new ObservableCollection <BaanUserControlViewModel>();

            foreach (BaanUserControlViewModel baan in OrderedBanen)
            {
                Banen.Add(baan);
            }

            /*
             * Banen = new ObservableCollection<BaanUserControlViewModel>();
             * foreach (Baan baan in banen)
             * {
             *  Banen.Add(new BaanUserControlViewModel(baan, _baanRepository, _reserveringRepository,_verenigingRepository, _navigationService, _resourceLoader, _alertMessageService, _eventAggregator));
             * }
             */
        }
コード例 #15
0
        public IActionResult VerifyEmail(int id, string email)
        {
            Vereniging vereniging = _verenigingRepository.GetByMail(email);

            return(vereniging?.Email.Equals(email) == true && vereniging.GroepId != id
                ? Json($"E-mailadres {email} is al in gebruik door een vereniging")
                : Json(true));
        }
コード例 #16
0
 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);
 }
コード例 #17
0
 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);
 }
コード例 #18
0
        private void FillWithDummyData()
        {
            Vereniging = new Vereniging {
                Id = Guid.NewGuid(), Naam = "Mijn ClubCloud Club Naam", Nummer = "00000"
            };
            PackageVersion version = Package.Current.Id.Version;

            Version = string.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build, version.Revision);
        }
コード例 #19
0
        //always run after generation of zipfile - safe space + security
        public void RemoveTicketsVereniging(Vereniging vereniging, string ticketsPath)
        {
            string path = Path.Combine(ticketsPath, Id.ToString(), vereniging.GroepId.ToString());

            if (Directory.Exists(path))
            {
                Directory.Delete(path, true);
            }
        }
コード例 #20
0
        private async Task UpdateSpelerImageAsync(Speler speler)
        {
            if (_foto == null)
            {
                _foto = new Models.Foto();
            }

            _foto.ContentData = null;

            if (speler == null)
            {
                _storageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/placeHolderSpeler.png"));

                try
                {
                    IBuffer readbuffer = await FileIO.ReadBufferAsync(_storageFile);

                    _foto.ContentData = readbuffer.ToArray();
                }
                catch (Exception ex)
                {
                    string message = ex.Message;
                }
                return;
            }

            if (speler.Id != Guid.Empty && _foto.ContentData == null)
            {
                try
                {
                    Vereniging vereniging = await _verenigingRepository.GetVerenigingAsync();

                    _foto = await _spelerRepository.GetFotoAsync(vereniging.Id, Id);
                }
                catch (Exception ex)
                {
                    string message = ex.Message;
                }
                return;
            }
            else
            {
                _storageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/placeHolderSpeler.png"));

                try
                {
                    IBuffer readbuffer = await FileIO.ReadBufferAsync(_storageFile);

                    _foto.ContentData = readbuffer.ToArray();
                }
                catch (Exception ex)
                {
                    string message = ex.Message;
                }
            }
        }
コード例 #21
0
 public Trade(int amount, Vereniging from, Vereniging to)
 {
     if (from.GroepId == to.GroepId)
     {
         throw new ArgumentException("To and From vereniging are the same");
     }
     Amount = amount;
     From   = from;
     To     = to;
 }
コード例 #22
0
        public IActionResult Details(int id)
        {
            Vereniging vereniging = _verenigingRepository.GetById(id);

            if (vereniging == null)
            {
                return(NotFound());
            }
            return(View(vereniging));
        }
コード例 #23
0
        public async void GetVerenigingByGeoLocatorAsync()
        {
            Geoposition position = await _locationService.GetLocationAsync();

            _cachedVereniging = await GetVerenigingByLocatieAsync(position.Coordinate.Point.Position.Longitude, position.Coordinate.Point.Position.Latitude);

            _verenigingId = _cachedVereniging.Id;
            _sessionStateService.SessionState[VerenigingIdKey] = _verenigingId;
            RaiseVerenigingUpdated();
        }
コード例 #24
0
        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)));
        }
コード例 #25
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;
                    }
                }
            }
        }
コード例 #26
0
        public IActionResult Delete(int id)
        {
            Vereniging vereniging = _verenigingRepository.GetById(id);

            if (vereniging == null)
            {
                return(NotFound());
            }
            ViewData[nameof(Vereniging.GroepNaam)] = _verenigingRepository.GetById(id).GroepNaam;
            return(View());
        }
コード例 #27
0
        public IActionResult BestelTickets(Vereniging vereniging)
        {
            Verkoopmoment verkoopmoment = _editieRepository.GetNextOrCurrentEditie()?.GetCurrentOrNextVerkoopMoment();
            int?          status        = verkoopmoment?.CanVerenigingBuy(vereniging);

            if (status != 0 || verkoopmoment == null)
            {
                return(NotFound("Deze pagina is momenteel niet beschikbaar, raadpleeg de https://www.massacantusgent.be/verkoop/ voor meer info"));
            }
            return(View(new VerkoopBestelViewModel(verkoopmoment)));
        }
 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;
 }
コード例 #29
0
        //gets the amount of tickets a vereniging has (from ordering AND TRADING)
        public int GetAmountTotalTicketsByVereniging(Vereniging vereniging)
        {
            int count = 0;

            count += GetAmountTicketsOrderedByVereniging(vereniging);
            //add tickets received from trades
            count += Trades.Where(t => t.To.GroepId == vereniging.GroepId).Sum(t => t.Amount);
            //removed tickets given away with trades
            count -= Trades.Where(t => t.From.GroepId == vereniging.GroepId).Sum(t => t.Amount);
            return(count);
        }
コード例 #30
0
 public int GetMaxTicketsVereniging(Vereniging vereniging)
 {
     if (vereniging.IsGroot)
     {
         return(MaxTicketsGroot);
     }
     else
     {
         return(MaxTicketsKlein);
     }
 }