private void btnSave_Click(object sender, EventArgs e) { try { if (isWorkTimeChange) { Work w = new Work(); w.IdEmployee = idEmployee; w.Date = date; w.StartTime = Convert.ToDateTime(tbWorkFrom.Text.ToString()); w.StopTime = Convert.ToDateTime(tbWorkTo.Text.ToString()); //to sprawdza czy godzina przyjścia jest mniejsza od godziny wyjścia if (w.StartTime.TimeOfDay > w.StopTime.TimeOfDay) { throw new WrongDateTimeException("Godzina wyjścia jest mniejsza od godziny przyjścia."); } w.Edit(w, ConnectionToDB.disconnect); } else { Polaczenia.BeginTransactionSerializable(); //usuwanie zamienianych danych z bazy switch (currentWorkType) { case WorkType.work: //praca WorkManager.DeleteWorkTime(WorkType.work, idEmployee, date, ConnectionToDB.notDisconnect); break; case WorkType.illness: //choroba WorkManager.DeleteWorkTime(WorkType.illness, idEmployee, date, ConnectionToDB.notDisconnect); break; case WorkType.dayOff: //urlop DayOff dayOff = WorkManager.GetDayOff(idEmployee, date, ConnectionToDB.notDisconnect); WorkManager.DeleteWorkTime(WorkType.dayOff, idEmployee, date, ConnectionToDB.notDisconnect); //dodaje urlop do puli urlopów z bazy danych if (dayOff.IdTypeDayOff == (int)DayOffType.halfDay) { dayOff.DayOffAddition("0.5", ConnectionToDB.notDisconnect); } if (dayOff.IdTypeDayOff == (int)DayOffType.rest) { dayOff.DayOffAddition("1", ConnectionToDB.notDisconnect); } break; } //Polaczenia.CommitTransaction(); //dodawanie nowych danych do bazy switch (changeForWhatWorkType) { case WorkType.work: //praca Work w = new Work(); w.IdEmployee = idEmployee; w.Date = date; w.StartTime = Convert.ToDateTime(tbWorkFrom.Text.ToString()); w.StopTime = Convert.ToDateTime(tbWorkTo.Text.ToString()); //to sprawdza czy godzina przyjścia jest mniejsza od godziny wyjścia if (w.StartTime.TimeOfDay > w.StopTime.TimeOfDay) { throw new WrongDateTimeException("Godzina wyjścia jest mniejsza od godziny przyjścia."); } WorkManager.AddWorkTime(w, ConnectionToDB.notDisconnect); break; case WorkType.illness: //choroba Illness illness = new Illness(); illness.IdEmployee = idEmployee; illness.Date = date; illness.IdIllnessType = Convert.ToInt32(cbType.SelectedValue); WorkManager.AddWorkTime(illness, ConnectionToDB.notDisconnect); break; case WorkType.dayOff: //urlop DayOff dayOff = new DayOff(); dayOff.IdEmployee = idEmployee; dayOff.Date = date; dayOff.IdTypeDayOff = Convert.ToInt32(cbType.SelectedValue); if (dayOff.Date.DayOfWeek != DayOfWeek.Sunday && dayOff.Date.DayOfWeek != DayOfWeek.Saturday && !Holidays.IsHoliday(dayOff.Date, ConnectionToDB.notDisconnect)) { WorkManager.AddWorkTime(dayOff, ConnectionToDB.notDisconnect); if (dayOff.IdTypeDayOff == (int)DayOffType.halfDay) { dayOff.DayOffSubtraction("0.5", ConnectionToDB.notDisconnect); } if (dayOff.IdTypeDayOff == (int)DayOffType.rest) { dayOff.DayOffSubtraction("1", ConnectionToDB.notDisconnect); } } else { throw new WrongDateTimeException(string.Format("Podawany dzień {0} jest dniem wolnym od pracy", dayOff.Date.ToShortDateString())); } break; } Polaczenia.CommitTransaction(); } } catch (WrongDateTimeException ex) { MessageBox.Show(ex.Message, "Błąd przy zmianie godzin.", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (CancelException ex) { MessageBox.Show(ex.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { Polaczenia.RollbackTransaction(); Polaczenia.OdlaczenieOdBazy(); MessageBox.Show(ex.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error); //log LogErr.DodajLogErrorDoBazy(new LogErr(Polaczenia.idUser, DateTime.Now, Polaczenia.ip, 0, NazwaTabeli.praca, "ZamianaRodzajuPracyForm.btnZatwierdz_Click()/n/n" + ex.Message)); } finally { this.Close(); } }
/// <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(); } } }