コード例 #1
0
        /// <summary>
        /// Przycisk zatwierdzania zmian dokonanych w formularzu
        /// zapisuje zmiany w bazie danych
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                CheckDataCorrectnessEmployee();

                DataAssignmentEmployee();

                //jeżeli zmienna "edycja" ma wartość true wpis o podanym idPracownwnika jest edytowany
                if (isEdit)
                {
                    //rozpoczęcie transakcji i blokowanie rekordu
                    Polaczenia.BeginTransactionSerializable();

                    //wprowadzanie zmian do bazy
                    if (editEmployee)
                    {
                        employeeManager.Edit(employee, ConnectionToDB.notDisconnect);
                    }

                    if (editRateRegular)
                    {
                        //sprawdzenie czy istnieje stawka z wybraną datą
                        //jeżeli istnieje to edycja stawki
                        if (employee.RateRegular.IsExist())
                        {
                            employee.RateRegular.DateFrom          = dtpRegularRateFromDate.Value;
                            employee.RateRegular.RateValue         = Convert.ToSingle(this.tbRateValue.Text);
                            employee.RateRegular.IsMonthlyOrHourly = (rbRateHourly.Checked ? RateType.hourly : RateType.monthly);
                            employee.EditRateRegular(ConnectionToDB.notDisconnect);
                        }
                        else
                        //jeżeli nie to dodanie nowej
                        {
                            employee.RateRegular = new RateRegular(dtpRegularRateFromDate.Value, Convert.ToSingle(this.tbRateValue.Text), rbRateHourly.Checked ? RateType.hourly : RateType.monthly);
                            employee.AddRateRegular(ConnectionToDB.notDisconnect);
                        }
                    }

                    if (editRateOvertime)
                    {
                        //sprawdzenie czy istnieje stawka z wybraną datą
                        //jeżeli istnieje to edycja stawki
                        if (employee.RateOvertime.IsExist())
                        {
                            employee.RateOvertime.DateFrom  = dtpOvertimeRateFromDate.Value;
                            employee.RateOvertime.RateValue = Convert.ToSingle(this.tbRateOvertimeValue.Text);
                            employee.EditRateOvertime(ConnectionToDB.notDisconnect);
                        }
                        else
                        {
                            //jeżeli nie to dodanie nowej
                            employee.RateOvertime = new RateOvertime(dtpOvertimeRateFromDate.Value, Convert.ToSingle(this.tbRateOvertimeValue.Text));
                            employee.AddRateOvertime(ConnectionToDB.notDisconnect);
                        }
                    }
                    Polaczenia.CommitTransaction();
                    Blokady.UsuwanieBlokady(Polaczenia.idUser, NazwaTabeli.pracownik);
                    Polaczenia.OdlaczenieOdBazy();
                    Employee.correctEmployee = true;
                    //zamykanie formularza
                    this.Close();
                }
                else//jeżeli nie edycja to dodaje nowego pracownika do bazy
                {
                    //rozpoczęcie transakcji
                    Polaczenia.BeginTransaction();
                    //dodanie pracownika
                    int idInsertedEmployee = employeeManager.AddReturnId(employee, ConnectionToDB.notDisconnect);

                    employee = employeeManager.GetEmployee(idInsertedEmployee, TableView.table, ConnectionToDB.notDisconnect);
                    //pobranie i przypisanie id ostatniego pracownika
                    employee.RateRegular  = new RateRegular(idInsertedEmployee, dtpRegularRateFromDate.Value, Convert.ToSingle(this.tbRateValue.Text), rbRateHourly.Checked ? RateType.hourly : RateType.monthly);
                    employee.RateOvertime = new RateOvertime(idInsertedEmployee, dtpOvertimeRateFromDate.Value, Convert.ToSingle(this.tbRateOvertimeValue.Text));
                    //dodanie stawki
                    employee.AddRateRegular(ConnectionToDB.notDisconnect);
                    //dodanie stawki za nadgodziny
                    employee.AddRateOvertime(ConnectionToDB.notDisconnect);
                    Polaczenia.CommitTransaction();
                    Polaczenia.OdlaczenieOdBazy();
                    //zamykanie formularza
                    this.Close();
                }
            }
            catch (EmptyStringException ex)
            {
                MessageBox.Show(ex.Message, "Błąd danych", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (WrongSizeStringException ex)
            {
                MessageBox.Show(ex.Message, "Błąd danych", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (NoNullException ex)
            {
                MessageBox.Show(ex.Message, "Błąd danych", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (OverflowException)
            {
                MessageBox.Show("Wprowadziłeś niepoprawną stawkę lub urlop.\n\nPopraw pola zaznaczone na czerwono.", "Błąd danych", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (SqlException eSQL)
            {
                MessageBox.Show(eSQL.Message, "Błąd SQL podczas wprowadzania danych", MessageBoxButtons.OK, MessageBoxIcon.Error);

                Polaczenia.RollbackTransaction();
                Polaczenia.OdlaczenieOdBazy();
                //log
                LogErr.DodajLogErrorDoBazy(new LogErr(Polaczenia.idUser, DateTime.Now, Polaczenia.ip, 0, NazwaTabeli.pracownik, "PracownikNowyForm.btnDodaj_Click()/n/n" + eSQL.Message));
            }
            catch (System.IO.FileNotFoundException ex)
            {
                MessageBox.Show(ex.Message, "Brak pliku konfiguracyjnego", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex2)
            {
                MessageBox.Show(ex2.Message, "Błąd podczas sprawdzania danych", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Polaczenia.RollbackTransaction();
                Polaczenia.OdlaczenieOdBazy();
                //log
                LogErr.DodajLogErrorDoBazy(new LogErr(Polaczenia.idUser, DateTime.Now, Polaczenia.ip, 0, NazwaTabeli.pracownik, "PracownikNowyForm.btnDodaj_Click()/n/n" + ex2.Message));
            }
            finally
            {
                //jeżeli edycja danych to usuwa blokade rekordu
                if (isEdit)
                {
                    Blokady.UsuwanieBlokady(Polaczenia.idUser, NazwaTabeli.pracownik);
                    Polaczenia.OdlaczenieOdBazy();
                }
            }
        }