/// <summary> /// Инициализация привязок /// </summary> private void InitBindings(ServiceIdle serviceIdle) { serviceIdleBindingSource.DataSource = serviceIdle; serviceIdleBindingSource.ResumeBinding(); // длительность простоя _duration = (serviceIdle.EndPeriod - serviceIdle.BeginPeriod).TotalMinutes; // количество пользователей, отключенных при этом _disabledUsersCount = serviceIdle.Service.User.Count; // количество администраторов, задействованных для этого _usedAdminsCount = serviceIdle.User.Count; // Годовой доход компанни CostIdleParams idleParams = null; try { // Попытка загрузки из файла idleParams = CostIdleParams.Load(); // При отсутсвтсвии файла данные берутся из БД if (idleParams == null) { idleParams = _ctx.GetIdleParamsFormDatabase(); } } catch { // в случае ошибки данные берутся из БД idleParams = _ctx.GetIdleParamsFormDatabase(); } finally { costIdleParamsBindingSource.DataSource = idleParams; costIdleParamsBindingSource.ResumeBinding(); } CalcIdleCost(); }
/// <summary> /// Обработчик события нажатия клавиши мыши на кнопку, /// который осуществляет сохранение изменений в параметрах простоя /// </summary> private void btn_OK_Click(object sender, EventArgs e) { var costIdleParams = costIdleParamsBindingSource.DataSource as CostIdleParams; if (costIdleParams == null) { MessageBox.Show("Не удалось получить параметры для расчета простоя!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (costIdleParams.YearIncome <= 0) { MessageBox.Show("Введите годовой валовой доход компании для расчета стоимости простоя!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (costIdleParams.TotalEmployeeCount <= 0) { MessageBox.Show("Введите общее число сотрудников для расчета стоимости простоя!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (costIdleParams.TotalEmployeeCount < (_disabledUsersCount + _usedAdminsCount)) { MessageBox.Show("Общее число сотрудников должно быть больше количества отключенных и задействованных!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (costIdleParams.AvgAdminSalary <= 0) { MessageBox.Show("Введите размер средней часовой оплаты труда администратора для расчета стоимости простоя!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (costIdleParams.AvgEmployeeSalary <= 0) { MessageBox.Show("Введите размер средней часовой оплаты труда работника для расчета стоимости простоя!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (_total <= 0) { MessageBox.Show("Не расчитана итоговая стоимость простоя!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } var result = MessageBox.Show("Полученная стоимость будет сохранена! Продолжить?", "Сохранение изменений", MessageBoxButtons.YesNo, MessageBoxIcon.Information); if (result == DialogResult.No) { return; } try { CostIdleParams.Save(costIdleParams); } catch { result = MessageBox.Show("Не удалось сохранить параметры для расчета! " + "\nПри новом расчете простоя придется снова ввести одовой валовой доход компании!" + "\nПродолжить сохранение?", "Ошибка", MessageBoxButtons.YesNo, MessageBoxIcon.Error); if (result == DialogResult.No) { return; } } try { _serviceIdle.Cost = _total; _ctx.UpdateServiceIdle(_serviceIdle); DialogResult = DialogResult.OK; MessageBox.Show("Полученный расчет простоя успешно сохранен!", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information); Close(); } catch { MessageBox.Show("Не удалось сохранить полученные расчеты!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } }