Exemple #1
0
 protected UcesnikFinala(Nullable<short> qualOrder, Nullable<float> qualScore,
     Nullable<short> qualRank, KvalifikacioniStatus kvalStatus)
 {
     _qualOrder = qualOrder;
     _qualScore = qualScore;
     _qualRank = qualRank;
     _kvalStatus = kvalStatus;
 }
 public UcesnikTakmicenja3(GimnasticarUcesnik gimnasticar, Sprava sprava,
     Nullable<short> qualOrder, Nullable<float> qualScore,
     Nullable<short> qualRank, KvalifikacioniStatus kvalStatus)
     : base(qualOrder, qualScore, qualRank, kvalStatus)
 {
     _gimnasticar = gimnasticar;
     _sprava = sprava;
 }
        //private string sqlGetId = "SELECT @@IDENTITY";
        public void insert(GimnasticarUcesnik gimnasticar, RezultatskoTakmicenje rezTak,
            Sprava sprava, KvalifikacioniStatus newKvalStatus)
        {
            SqlCeConnection conn = new SqlCeConnection(ConfigurationParameters.ConnectionString);
            SqlCeCommand cmd = new SqlCeCommand(insertSQL, conn);

            cmd.Parameters.Add("@rez_takmicenje_id", SqlDbType.Int).Value = rezTak.Id;
            cmd.Parameters.Add("@gimnasticar_id", SqlDbType.Int).Value = gimnasticar.Id;
            cmd.Parameters.Add("@sprava", SqlDbType.TinyInt).Value = sprava;
            cmd.Parameters.Add("@kval_status", SqlDbType.TinyInt).Value = newKvalStatus;

            SqlCeTransaction tr = null;
            try
            {
                conn.Open();
                tr = conn.BeginTransaction();
                cmd.Transaction = tr;
                int recordsAffected = cmd.ExecuteNonQuery();
                if (recordsAffected != 1)
                {
                    throw new InfrastructureException(Strings.DatabaseAccessExceptionMessage);
                }

                /*SqlCeCommand cmd2 = new SqlCeCommand(sqlGetId, conn, tr);
                object id = cmd2.ExecuteScalar();
                if (!Convert.IsDBNull(id))
                    entity.Id = Convert.ToInt32(id);*/

                tr.Commit(); // TODO: this can throw Exception and InvalidOperationException
            }
            catch (SqlCeException ex)
            {
                // in Open()
                if (tr != null)
                    tr.Rollback(); // TODO: this can throw Exception and InvalidOperationException
                throw new InfrastructureException(Strings.getFullDatabaseAccessExceptionMessage(ex), ex);
            }
            catch (InvalidOperationException ex)
            {
                // in ExecuteNonQuery(), ExecureScalar()
                if (tr != null)
                    tr.Rollback();
                throw new InfrastructureException(Strings.getFullDatabaseAccessExceptionMessage(ex), ex);
            }
            // za svaki slucaj
            catch (Exception)
            {
                if (tr != null)
                    tr.Rollback();
                throw;
            }
            finally
            {
                conn.Close();
            }
        }
        public static string toString(KvalifikacioniStatus status)
        {
            switch (status)
            {
                case KvalifikacioniStatus.None:
                    return String.Empty;

                case KvalifikacioniStatus.Q:
                    return "Q";

                case KvalifikacioniStatus.R:
                    return "R";

                default:
                    throw new ArgumentException("Nedozvoljena vrednost za kvalifikacioni status.");
            }
        }
        private void promeniKvalStatus(KvalifikacioniStatus kvalStatus)
        {
            RezultatSpravaFinaleKupa rez
                = spravaGridUserControl1.DataGridViewUserControl.getSelectedItem<RezultatSpravaFinaleKupa>();
            int selCount = spravaGridUserControl1.DataGridViewUserControl.getSelectedItems<RezultatSpravaFinaleKupa>().Count;
            if (selCount != 1 || rez.KvalStatus == kvalStatus)
                return;

            string msg = String.Empty;
            if (kvalStatus != KvalifikacioniStatus.None)
            {
                string msgFmt = "Da li zelite da oznacite sa \"{1}\" gimnasticara \"{0}\"?";
                msg = String.Format(msgFmt, rez.Gimnasticar, kvalStatus);
            }
            else
            {
                string msgFmt = "Da li zelite da ponistite oznaku \"{1}\" za gimnasticara \"{0}\"?";
                msg = String.Format(msgFmt, rez.Gimnasticar, rez.KvalStatus);
            }
            if (!MessageDialogs.queryConfirmation(msg, this.Text))
                return;

            // NOTE: Promena kval. statusa kod finala kupa namerno je implementirana da se cuva u posebnoj tabeli kao
            // update na postojece rezultate. Ako bih implementirao drugacije, tj. da se cuva u istoj tabeli gde su i rezultati,
            // tada bi se poredak snimio u bazu prilikom prvog otvaranja prozora, i ne bi se ponovo izracunavao prilikom
            // svakog sledeceg otvaranja prozora vec bi se ucitavao iz baze. U tom slucaju ne bih mogao da postignem da se
            // npr. promeni neki rezultat iz prvog i drugog kola i da ta promena automatski bude vidljiva kada se ponovo
            // otvori prozor za finale kupa.

            try
            {
                DataAccessProviderFactory factory = new DataAccessProviderFactory();
                dataContext = factory.GetDataContext();
                dataContext.BeginTransaction();

                insertRezultatSpravaFinaleKupaUpdate(rez.Gimnasticar, ActiveTakmicenje, ActiveSprava, kvalStatus);
                rez.KvalStatus = kvalStatus;
            }
            catch (Exception ex)
            {
                if (dataContext != null && dataContext.IsInTransaction)
                    dataContext.Rollback();
                MessageDialogs.showError(Strings.getFullDatabaseAccessExceptionMessage(ex), this.Text);
                Close();
                return;
            }
            finally
            {
                if (dataContext != null)
                    dataContext.Dispose();
                dataContext = null;
            }

            spravaGridUserControl1.DataGridViewUserControl.refreshItems();
            spravaGridUserControl1.DataGridViewUserControl.setSelectedItem<RezultatSpravaFinaleKupa>(rez);
        }
 private void insertRezultatSpravaFinaleKupaUpdate(GimnasticarUcesnik gimnasticar, RezultatskoTakmicenje rezTak,
     Sprava sprava, KvalifikacioniStatus newKvalStatus)
 {
     RezultatSpravaFinaleKupaDAO dao = new RezultatSpravaFinaleKupaDAO();
     if (!dao.postojiRezultatSpravaFinaleKupaUpdate(gimnasticar, rezTak, sprava))
         dao.insert(gimnasticar, rezTak, sprava, newKvalStatus);
     else
         dao.update(gimnasticar, rezTak, sprava, newKvalStatus);
 }
        private void promeniKvalStatus(KvalifikacioniStatus kvalStatus)
        {
            RezultatUkupno rez = dataGridViewUserControl1.getSelectedItem<RezultatUkupno>();
            if (rez == null || rez.KvalStatus == kvalStatus)
                return;

            string msg = String.Empty;
            if (kvalStatus != KvalifikacioniStatus.None)
            {
                string msgFmt = "Da li zelite da oznacite sa \"{1}\" gimnasticara \"{0}\"?";
                msg = String.Format(msgFmt, rez.Gimnasticar, kvalStatus);
            }
            else
            {
                string msgFmt = "Da li zelite da ponistite oznaku \"{1}\" za gimnasticara \"{0}\"?";
                msg = String.Format(msgFmt, rez.Gimnasticar, rez.KvalStatus);
            }
            if (!MessageDialogs.queryConfirmation(msg, this.Text))
                return;

            try
            {
                DataAccessProviderFactory factory = new DataAccessProviderFactory();
                dataContext = factory.GetDataContext();
                dataContext.BeginTransaction();

                rez.KvalStatus = kvalStatus;
                dataContext.Save(ActiveTakmicenje.getPoredakUkupno(deoTakKod));
                dataContext.Commit();
            }
            catch (Exception ex)
            {
                if (dataContext != null && dataContext.IsInTransaction)
                    dataContext.Rollback();
                MessageDialogs.showError(Strings.getFullDatabaseAccessExceptionMessage(ex), this.Text);
                Close();
                return;
            }
            finally
            {
                if (dataContext != null)
                    dataContext.Dispose();
                dataContext = null;
            }

            dataGridViewUserControl1.refreshItems();
            dataGridViewUserControl1.setSelectedItem<RezultatUkupno>(rez);
        }
        public void update(GimnasticarUcesnik gimnasticar, RezultatskoTakmicenje rezTak,
            Sprava sprava, KvalifikacioniStatus newKvalStatus)
        {
            SqlCeConnection conn = new SqlCeConnection(ConfigurationParameters.ConnectionString);
            SqlCeCommand cmd = new SqlCeCommand(updateSQL, conn);

            cmd.Parameters.Add("@rez_takmicenje_id", SqlDbType.Int).Value = rezTak.Id;
            cmd.Parameters.Add("@gimnasticar_id", SqlDbType.Int).Value = gimnasticar.Id;
            cmd.Parameters.Add("@sprava", SqlDbType.TinyInt).Value = sprava;
            cmd.Parameters.Add("@kval_status", SqlDbType.TinyInt).Value = newKvalStatus;

            SqlCeTransaction tr = null;
            try
            {
                conn.Open();
                tr = conn.BeginTransaction(); // zbog updateDependents, inace ne mora
                cmd.Transaction = tr;
                int recordsAffected = cmd.ExecuteNonQuery();
                if (recordsAffected != 1)
                {
                    // TODO: Ukoliko se radi optimistic offline lock, ova grana se
                    // ce se izvrsavati ako su podaci u bazi u medjuvremenu promenjeni,
                    // pa bi trebalo izbaciti izuzetak koji bi to signalizirao
                    // (npr. NHibernate ima izuzetak StaleObjectStateException).
                    // Generalno, i kod insert i kod update i kod delete bi
                    // slucajevi gde se komanda izvrsi bez problema ali se
                    // recordsAffected razlikuje od ocekivanog
                    // trebalo da se signaliziraju razlicitim tipom izuzetka

                    throw new InfrastructureException(Strings.DatabaseAccessExceptionMessage);
                }
                tr.Commit(); // TODO: this can throw Exception and InvalidOperationException
            }
            catch (SqlCeException ex)
            {
                // in Open()
                if (tr != null)
                    tr.Rollback(); // TODO: this can throw Exception and InvalidOperationException
                throw new InfrastructureException(Strings.getFullDatabaseAccessExceptionMessage(ex), ex);
            }
            catch (InvalidOperationException ex)
            {
                // in ExecuteNonQuery(), ExecureScalar()
                if (tr != null)
                    tr.Rollback();
                throw new InfrastructureException(Strings.getFullDatabaseAccessExceptionMessage(ex), ex);
            }
            // za svaki slucaj
            catch (Exception)
            {
                if (tr != null)
                    tr.Rollback();
                throw;
            }
            finally
            {
                conn.Close();
            }
        }