Пример #1
0
        /// <summary>
        /// Provede rezervaci na akci. Vyhazuje ReservationException s popisem chyby, pokud se na akci neni mozne zaregistrovat.
        /// Podle UC6: Rezrvace akce.
        /// </summary>
        /// <param name="actionId"></param>
        /// <param name="clientId"></param>
        public static void ReservationToAction(int actionId, int clientId)
        {
            // Nacteni akce z databaze
            DatabaseLibrary.Action action = new DatabaseLibrary.ActionTable().SelectOne(actionId);

            DatabaseLibrary.ActionReservationTable actResTable = new DatabaseLibrary.ActionReservationTable();

            // Overeni, zda je jeste volne misto
            int numOfRegClients = actResTable.SelectCountOfRegUser(actionId);

            // Overeni, zda je datum konani akce > aktualni datum
            if (action.action_date <= DateTime.Now)
                throw new ReservationException("Na tuto akci se j*z neni mozne rezervovat.");

            // Jestlize pocet registrovanych uzivatelu je mensi nez kapacita akce, muzeme provest registraci pokud j*z klient neni registrovan
            if (numOfRegClients < action.action_capacity)
            {
                // Zjisteni, zda j*z neni registrovan
                bool isReg = actResTable.IsUserRegisteredToAction(actionId, clientId);

                if (!isReg)
                {
                    DatabaseLibrary.ActionReservation actRes = new DatabaseLibrary.ActionReservation(actionId, clientId);

                    // Provedeme rezervaci - pokud dojde k vyhozeni vyjimky, klient j*z nema platne clenstvi.
                    try
                    {
                        actResTable.InsertActionReservation(actRes);
                    }
                    catch (DatabaseLibrary.MembershipExpiredException ex)
                    {
                        // Klientovi j*z skoncilo clenstvi. Registrovat se nemuze.
                        throw new ReservationException(ex.Message);
                        // Pozdeji by se misto toho mohl user presmerovat na stranku s prodluzovanim clenstvi.
                    }
                }
                else
                {
                    throw new ReservationException("Tuto akci jste j*z rezervoval.");
                }
            }
            else
            {
                throw new ReservationException("Akce je j*z zaplnena.");
            }
        }
Пример #2
0
        /// <summary>
        /// Zrusi rezervaci na akci. Vyhazuje ReservationException s popisem chyby, pokud se rezervaci nepodari zrusit.
        /// Podle UC9: Odhlaseni z akce.
        /// </summary>
        /// <param name="actionId"></param>
        /// <param name="clientId"></param>
        public static void CancelReservation(int actionId, int clientId)
        {
            DatabaseLibrary.ActionReservationTable actResTable = new DatabaseLibrary.ActionReservationTable();

            // Musime overit, zda je mozne se jeste odhlasit. Odhlasovat se je mozno nejpozdeji 1 den pred zacatkem akce. Spravnou hodnotu jsem v dokumentu
            // nenasel, proto jsem si rekl, ze to bude jeden den. To se da pripadne kdykoliv zmenit.
            // Nacteni akce z databaze
            DatabaseLibrary.Action action = new DatabaseLibrary.ActionTable().SelectOne(actionId);

            if (action.action_date <= DateTime.Now.AddDays(1))
                throw new ReservationException("Z teto akce se j*z neni mozne odhlasit. Muzete kontaktovat personal.");

            // Zruseni rezervace
            int res = actResTable.CancelClientReservation(actionId, clientId);

            if (res != 1)
                throw new ReservationException("Zruseni rezervace se nezdarilo.");
        }
        /// <summary>
        /// Rezervace na akci.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnActionReservation_Click(object sender, EventArgs e)
        {
            // Ziskani ID akce ze session
            int actionId = (int)Session["actionId"];

            // Nacteni akce z databaze (asi to neni nutne, lze predat skrze Session, ale nechce se  mi to delat, tohle je rychlejsi :))
            DatabaseLibrary.Action action = new DatabaseLibrary.ActionTable().SelectOne(actionId);

            //DatabaseLibrary.ActionReservationTable actResTable = new DatabaseLibrary.ActionReservationTable();

            // Overeni, zda je jeste volne misto
            int numOfRegClients = actResTable.SelectCountOfRegUser(actionId);

            // Jestlize pocet registrovanych uzivatelu je mensi nez kapacita akce, muzeme provest registraci pokudd j*z klient neni registrovan
            if (numOfRegClients < action.action_capacity)
            {
                int clientId = (int)Session["clientId"];

                // Zjisteni, zda j*z neni registrovan
                bool isReg = actResTable.IsUserRegisteredToAction(actionId, clientId);

                if (!isReg)
                {

                    DatabaseLibrary.ActionReservation actRes = new DatabaseLibrary.ActionReservation(actionId, clientId);

                    // Provedeme rezervaci
                    actResTable.InsertActionReservation(actRes);

                    // Zobrazime hlasku, ze rezervace probehla v poradku
                    LabelInfo.Text = "Rezervace probehla uspesne.";
                    BtnActionReservation.Visible = false;
                }
                else
                {
                    LabelInfo.Text = "Tuto akci jste j*z rezervoval.";
                }
            }
            else
            {
                // Zobrazime chybovou hlasku
                LabelInfo.Text = "Akce je j*z zaplnena.";
            }
        }