private void onConfigurationSelect(object sender, EventArgs e) { if (openFileMenuItem.DropDownItems.Count == 0) { return; } // Убираем флажки с других конфигураций foreach (var cfg in openFileMenuItem.DropDownItems) { ((ToolStripMenuItem)cfg).Checked = false; } string cfgFilePath = System.IO.Path.Combine(getApplicationDirectory(), CFG_DIRECTORY_NAME, ((ToolStripMenuItem)sender).Text); try { metersList.ReadFromXml(cfgFilePath); NotificationHelper.ShowInfo("Конфігурація успішно завантажена!"); // Отмечаем в меню выбранную конфигурацию ToolStripMenuItem item = (ToolStripMenuItem)sender; item.Checked = true; } catch (Exception ex) { NotificationHelper.ShowError(ex.Message); } }
private void monthLimit_Leave(object sender, EventArgs e) { TextBox currentTB = (TextBox)sender; try { double num = Convert.ToDouble(currentTB.Text); currentTB.Text = string.Format("{0:F3}", num); if (num.LT(0.0)) { throw new ArgumentException("Коеффіцієнт не може бути менше нуля."); } } catch (FormatException) { if (string.IsNullOrWhiteSpace(currentTB.Text)) { currentTB.Text = string.Format("{0:F3}", 0.0); } else { NotificationHelper.ShowError("Вводити можна лише числа!"); currentTB.Undo(); } } catch (ArgumentException ex) { NotificationHelper.ShowError(ex.Message); currentTB.Undo(); } CalculateCoeffsSum(); }
private void totalMoneySumTextBox_Leave(object sender, EventArgs e) { double enteredTotalMoneySum = Math.Round(0.0, TENDER_SUM_PRECISION); // Если пользователь ничего не ввёл, не выбрасывает никаких ошибок - будем считать что сумма ноль if (string.IsNullOrEmpty(totalMoneySumTextBox.Text)) { CalculateVolume(); return; } try { enteredTotalMoneySum = Convert.ToDouble(totalMoneySumTextBox.Text); } catch { NotificationHelper.ShowError("Ціна повинна бути числовим значенням!"); totalMoneySumTextBox.Undo(); } totalMoneySumTextBox.Text = enteredTotalMoneySum.ToString("F" + TENDER_SUM_PRECISION); try { CalculateVolume(); } catch (Exception ex) { NotificationHelper.ShowError(ex.Message); return; } }
private void calcLimitesButton_Click(object sender, EventArgs e) { double volume = 0.0; try { volume = CalculateVolume(); } catch (Exception ex) { NotificationHelper.ShowError(ex.Message); return; } //if (volume.EQ(0.0)) //{ // if(NotificationHelper.AskYesNo("Об'єм закупівлі дорівнює нулю. Ви впевнені, що хочете продовжити?") == System.Windows.Forms.DialogResult.No) // { // return; // } //} if (NotificationHelper.AskYesNo("Розпочати розрахунок?") == System.Windows.Forms.DialogResult.Yes) { if (!metersList.IsEverythingReady) { if (NotificationHelper.AskYesNo( "Для деяких ЛПЗ не встановлені коефіцієнти. Встановити для них значення за-умовчанням?") == System.Windows.Forms.DialogResult.Yes) { WaitForm wf = new WaitForm(this); wf.Show(); wf.Refresh(); Enabled = false; try { metersList.PrepareNotReadyMeters(); } catch (Exception ex) { NotificationHelper.ShowError(ex.Message); } finally { wf.Close(); Enabled = true; } WriteLimitsToExcelFile(); return; } else { return; } } WriteLimitsToExcelFile(); } }
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { if (e.Exception.GetType() == typeof(System.FormatException)) { NotificationHelper.ShowError("Для вводу дозволені лише числа!"); } else { NotificationHelper.ShowError(e.Exception.Message); } dataGridView1.CancelEdit(); }
private void saveFileMenuItem_Click(object sender, EventArgs e) { SaveFileDialog sd = new SaveFileDialog(); sd.Filter = "XML файл (*.xml)|*.xml"; sd.InitialDirectory = System.IO.Path.Combine(getApplicationDirectory(), CFG_DIRECTORY_NAME); sd.ShowDialog(); try { if (!string.IsNullOrWhiteSpace(sd.FileName)) { metersList.WriteToXml(sd.FileName); NotificationHelper.ShowInfo("Зміни успішно збережені!"); } } catch (Exception ex) { NotificationHelper.ShowError(ex.Message); } }
private void button1_Click(object sender, EventArgs e) { Waiter w = new Waiter(this); w.BeginWait(); Enabled = false; try { metersList.CalculateGeneralCoeffs(); } catch (Exception ex) { NotificationHelper.ShowError(ex.Message); } finally { Enabled = true; w.EndWait(); } }
private void saveSettingsButton_Click(object sender, EventArgs e) { if (metersList[0].GeneralCoefficient.NE(100.0)) { NotificationHelper.ShowError("Загальна сумма коефіцієнтів по закладам повинна бути рівна 100"); return; } if (CalculateCoeffsSum().NE(100.0)) { NotificationHelper.ShowError("Сумма коефіцієнтів повинная бути рівна 100"); return; } if (dataGridView1.SelectedCells.Count == 0 || ((dataGridView1.SelectedCells != null) && (dataGridView1.SelectedCells[0].RowIndex == 0))) { if (NotificationHelper.AskYesNo("Ви впевнені, що хочете встановити ці коефіцієнти для всіх ЛПЗ?") == System.Windows.Forms.DialogResult.Yes) { double[] coeffs = new double[12]; for (int i = 1; i <= 12; i++) { coeffs[i - 1] = Convert.ToDouble(Controls.Find("monthLimit" + i, true).First().Text); } WaitForm wf = new WaitForm(this); wf.Show(); wf.Refresh(); Enabled = false; try { metersList.SetDefaultCoeffs(coeffs); } catch (Exception ex) { NotificationHelper.ShowError(ex.Message); } finally { wf.Close(); Enabled = true; } } } else { if (NotificationHelper.AskYesNo( string.Format("Встановити данні коефіцієнти для {0}", metersList[dataGridView1.SelectedCells[0].RowIndex].Name) ) == System.Windows.Forms.DialogResult.Yes) { double[] coeffs = new double[12]; for (int i = 1; i <= 12; i++) { coeffs[i - 1] = Convert.ToDouble(Controls.Find("monthLimit" + i, true).First().Text); } metersList[dataGridView1.SelectedCells[0].RowIndex].MonthsCoefficients = coeffs; } } }
private void WriteLimitsToExcelFile() { try { metersList.SetSum(CalculateVolume()); } catch (Exception ex) { NotificationHelper.ShowError(ex.Message); return; } HeavyProcessProgressForm hpForm = new HeavyProcessProgressForm(this); hpForm.Show(); Enabled = false; Excel.Application xlApp = new Excel.Application(); if (xlApp == null) { NotificationHelper.ShowError("Помилка при завантаженні Excel."); Environment.Exit(0); } hpForm.ChangeProgress(null, 2); Excel.Workbook wb = xlApp.Workbooks.Open(System.IO.Path.Combine(getApplicationDirectory(), TEMPLATES_DIRECTORY_NAME, TEMPLATES_FILE_NAME)); if (wb == null) { xlApp.Quit(); xlApp = null; NotificationHelper.ShowError("Помилка при завантаженні файлу шаблону."); Environment.Exit(0); } hpForm.ChangeProgress(null, 2); Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1]; if (ws == null) { wb.Close(0); xlApp.Quit(); xlApp = null; NotificationHelper.ShowError("Помилка при завантаженні файлу шаблону."); Environment.Exit(0); } hpForm.ChangeProgress(null, 2); int progrStep = (int)Math.Floor((double)(hpForm.ProgressRest / (metersList.Count() - 1))); try { // Массив итогов по месяцам double[] monthTotals = new double[12]; // Массив итогов по кварталам double[] quartalsLimits = new double[QUARTER_LETTERS.Length]; // Общая мощность double totalPower = 0.0; // Итог по году double yearTotal = 0.0; for (int i = 1; i < metersList.Count; i++) { hpForm.ChangeProgress(string.Format("Заповнюємо ліміти по '{0}'...", metersList[i].Name), progrStep); ws.get_Range(POWER_COLUMN_LETTER + (NAME_COLUMN_INDEX + (i - 1))).Value = metersList[i].ConnectedPower; totalPower += metersList[i].ConnectedPower; ws.get_Range(POWER_COLUMN_LETTER + YEAR_BEGIN_INDEX).Value = Math.Round(totalPower, EnergyMeter.LIMIT_PRECISION); // Заполняем лимиты по месяцам for (int j = 0; j < metersList[i].MonthsLimits.Length; j++) { ws.get_Range(MONTHS_LETTERS[j] + (NAME_COLUMN_INDEX + (i - 1))).Value = metersList[i].MonthsLimits[j]; monthTotals[j] += metersList[i].MonthsLimits[j]; ws.get_Range(MONTHS_LETTERS[j] + YEAR_BEGIN_INDEX).Value = Math.Round(monthTotals[j], EnergyMeter.LIMIT_PRECISION); } // Вычисляем и заполняем значения за кварталы for (int j = 0; j < QUARTER_LETTERS.Length; j++) { double quartalValue = Math.Round((metersList[i].MonthsLimits[0 + (3 * j)] + metersList[i].MonthsLimits[1 + (3 * j)] + metersList[i].MonthsLimits[2 + (3 * j)]) , EnergyMeter.LIMIT_PRECISION); ws.get_Range(QUARTER_LETTERS[j] + (NAME_COLUMN_INDEX + (i - 1))).Value = quartalValue; quartalsLimits[j] += quartalValue; // Если на шаблон на формулах, то комментим ws.get_Range(QUARTER_LETTERS[j] + YEAR_BEGIN_INDEX).Value = Math.Round(quartalsLimits[j], EnergyMeter.LIMIT_PRECISION); } // ВСЁ ЧТО НИЖЕ МОЖНО ПРОСТО ПРОПИСАТЬ ФОРМУЛАМИ В ШАБЛОНЕ!! double yearMeterTotal = Math.Round(metersList[i].MonthsLimits.Sum(), EnergyMeter.LIMIT_PRECISION); ws.get_Range(YEAR_LETTER + (NAME_COLUMN_INDEX + (i - 1))).Value = yearMeterTotal; yearTotal += yearMeterTotal; ws.get_Range(YEAR_LETTER + YEAR_BEGIN_INDEX).Value = Math.Round(yearTotal, EnergyMeter.LIMIT_PRECISION); } hpForm.ChangeProgress("Зберігаємо зміни до файлу...", hpForm.ProgressRest); string fileNameToSave = System.IO.Path.Combine(getApplicationDirectory(), READY_FILE_NAME); string fName = System.IO.Path.GetFileNameWithoutExtension(fileNameToSave); int k = 0; while (System.IO.File.Exists(fileNameToSave)) { string fExtension = new System.IO.FileInfo(fileNameToSave).Extension; string newFName = fName + "-" + (k++) + fExtension; fileNameToSave = System.IO.Path.Combine(getApplicationDirectory(), newFName); } wb.SaveAs(fileNameToSave); NotificationHelper.ShowInfo("Все готово!"); } catch { NotificationHelper.ShowError("Помилка при заповненні файлу! Скоріше за все файл зайнятий іншою программою"); return; } finally { hpForm.Close(); Enabled = true; // Закрываем всё! wb.Close(0); xlApp.Quit(); xlApp = null; } }
private MetersList GetDataFromExelFile(string fileName, bool appStart) { MetersList mList = new MetersList(); // запуск процесса Excel Excel.Application xlApp = new Excel.Application(); if (xlApp == null) { NotificationHelper.ShowError("Помилка при завантаженні екземпляру Microsoft Excel!"); Environment.Exit(0); } // Загрузка книги Excel.Workbook wb = xlApp.Workbooks.Open(fileName); if (wb == null) { NotificationHelper.ShowError("Помилка при завантаженні книги Microsoft Excel!"); xlApp.Quit(); xlApp = null; Environment.Exit(0); } // Выбор листа с данными Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1]; if (ws == null) { NotificationHelper.ShowError("Помилка при завантаженні листа із книги Microsoft Excel!"); xlApp.Quit(); xlApp = null; Environment.Exit(0); } // Считывание данных с листа try { for (int i = 0; ; i++) { string name = ws.get_Range(NAME_COLUMN_LETTER + (NAME_COLUMN_INDEX + i)).Value; if (string.IsNullOrWhiteSpace(name)) { break; } if (appStart) { mList.Add( new EnergyMeter { Name = name, IsHeating = (name.EndsWith("(опал.)") || name.EndsWith("(оп.)") || name.EndsWith("(опалення)")), Number = (i + 1), ConnectedPower = ws.get_Range(POWER_COLUMN_LETTER + (NAME_COLUMN_INDEX + i)).Value }); } else { double[] mounthLimits = new double[12]; for (int j = 0; j < MONTHS_LETTERS.Count(); j++) { mounthLimits[j] = ws.get_Range(MONTHS_LETTERS[j] + (NAME_COLUMN_INDEX + i)).Value; } EnergyMeter newMeter = new EnergyMeter(ws.get_Range(YEAR_LETTER + (NAME_COLUMN_INDEX + i)).Value, mounthLimits); newMeter.Name = name; newMeter.Number = (i + 1); newMeter.ConnectedPower = ws.get_Range(POWER_COLUMN_LETTER + (NAME_COLUMN_INDEX + i)).Value; mList.Add(newMeter); } } } catch (Exception ex) { NotificationHelper.ShowError("Помилка при завантаженні данних!"); Environment.Exit(0); } finally { wb.Close(false); xlApp.Quit(); xlApp = null; //System.GC.Collect(); } return(mList); }