private void MI_Financing_FromExcel_Click(object sender, RoutedEventArgs e) { DBSolom.Db db = new Db(Func.GetConnectionString); if (db.Lows.Include(i => i.Правовласник).FirstOrDefault(f => f.Видалено == false && f.Правовласник.Логін == Func.Login && f.Financing == true) is null) { MessageBox.Show("У вас відсутні права на виконання цієї операції!", "Maestro", MessageBoxButton.OK, MessageBoxImage.Stop); } else { if (MessageBox.Show("Увага!\nЦя операція є небезпечною та дуже затратною в часі, перевірте чи всі головні розпорядники є в базі, кекв та інші необхідні властивості.\nВи підтверджуєте виконання?", "Maestro", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Excel files (*.xlsx;*.xlsm;*.xls)|*.xlsx;*.xlsm;*.xls"; if (openFileDialog.ShowDialog() == true) { var Task = new Task(() => { //Потому что Finally Excel.Application application = null; Excel.Workbook workbook = null; Excel.Worksheet worksheet = null; Excel.Range range = null; User user = db.Users.First(f => f.Видалено == false && f.Логін == Func.Login); try { #region "Variables" application = new Excel.Application(); application.AskToUpdateLinks = false; application.DisplayAlerts = false; workbook = application.Workbooks.Open(openFileDialog.FileName); worksheet = workbook.Worksheets["Maestro_Data"]; double sum = 0; DateTime Проведено_Е = DateTime.Now; string main_manager = null; string microfond = null; long kfk_code = 0; long kekv_code = 0; Main_manager Main_Manager; KFK kFK; KEKB kEKB; MicroFoundation microFoundation; List <Financing> localFinancings = new List <Financing>(); List <string> errors = new List <string>(); #endregion for (int i = 2; i <= application.WorksheetFunction.CountA(worksheet.Columns[1]); i++) { #region "Variables" range = worksheet.Cells[i, 1]; Проведено_Е = Convert.ToDateTime(Convert.ToString(range.Value2)); range = worksheet.Cells[i, 2]; microfond = (string)range.Value2; microFoundation = db.MicroFoundations.Include(c => c.Фонд).First(f => f.Видалено == false && f.Повністю == microfond); range = worksheet.Cells[i, 3]; main_manager = (string)range.Value2; Main_Manager = db.Main_Managers.First(f => f.Видалено == false && f.Найменування == main_manager); range = worksheet.Cells[i, 4]; kfk_code = Convert.ToInt64(Convert.ToString(range.Value2)); kFK = db.KFKs.First(f => f.Видалено == false && f.Код == kfk_code); range = worksheet.Cells[i, 5]; kekv_code = Convert.ToInt64(Convert.ToString(range.Value2)); kEKB = db.KEKBs.First(f => f.Видалено == false && f.Код == kekv_code); range = worksheet.Cells[i, 6]; sum = Convert.ToDouble(Convert.ToString(range.Value2 ?? 0)); #endregion Financing financing = new Financing() { Створив = user, Змінив = user, Підписано = true, Проведено = Проведено_Е, Мікрофонд = microFoundation, Головний_розпорядник = Main_Manager, КФК = kFK, КЕКВ = kEKB, Сума = sum }; localFinancings.Add(financing); } foreach (var item in localFinancings) { var x = Func.GetCurrentPlanAndRemainderFromDBPerMonth(db, item.Проведено.Year, item.КФК, item.Головний_розпорядник, item.КЕКВ, item.Мікрофонд.Фонд); if ((x[TypeOfFinanceData.Remainders][item.Проведено.Month - 1] - item.Сума) < 0) { errors.Add($"[Дата: {item.Проведено.ToShortDateString()}] [Фонд: {item.Мікрофонд.Фонд.Код}]" + $" [КПБ: {item.КФК.Код}] [Головний розпорядник: {item.Головний_розпорядник.Найменування}]" + $" [КЕКВ: {item.КЕКВ.Код}] [Місяць: {Func.names_months[item.Проведено.Month - 1]}]" + $" [Остаток:{x[TypeOfFinanceData.Remainders][item.Проведено.Month - 1]}]"); } if (errors.Count == 0) { db.Financings.Local.Add(item); } else { break; } } if (errors.Count == 0) { db.SaveChanges(); MessageBox.Show("Готово!", "Maestro", MessageBoxButton.OK, MessageBoxImage.Information); } else { Dispatcher.Invoke(() => { Maestro.Sys.Errors er = new Maestro.Sys.Errors(errors); er.Show(); }); } } catch (Exception Exp) { MessageBox.Show(Exp.Message); } finally { worksheet = null; openFileDialog = null; if (workbook != null) { workbook.Close(false); workbook = null; } if (application != null) { application.Quit(); application = null; } } }); Task.Start(); } else { MessageBox.Show("Оберіть файл з листом Maestro_Data!", "Maestro", MessageBoxButton.OK, MessageBoxImage.Hand); } } } }
private void MI_Filling_FromExcel_Click(object sender, RoutedEventArgs e) { DBSolom.Db db = new Db(Func.GetConnectionString); if (db.Lows.Include(i => i.Правовласник).FirstOrDefault(f => f.Видалено == false && f.Правовласник.Логін == Func.Login && f.Filling == true) is null) { MessageBox.Show("У вас відсутні права на виконання цієї операції!", "Maestro", MessageBoxButton.OK, MessageBoxImage.Stop); } else { if (MessageBox.Show("Увага!\nЦя операція є небезпечною, перевірте чи всі головні розпорядники є в базі, кекв та інші необхідні властивості.\nВи підтверджуєте виконання?", "Maestro", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Excel files (*.xlsx;*.xlsm;*.xls)|*.xlsx;*.xlsm;*.xls"; if (openFileDialog.ShowDialog() == true) { var Task = new Task(() => { //Потому что Finally Excel.Application application = null; Excel.Workbook workbook = null; Excel.Worksheet worksheet = null; Excel.Range range = null; User user = db.Users.First(f => f.Видалено == false && f.Логін == Func.Login); try { #region "Variables" application = new Excel.Application(); application.AskToUpdateLinks = false; application.DisplayAlerts = false; workbook = application.Workbooks.Open(openFileDialog.FileName); worksheet = workbook.Worksheets["Maestro_Data"]; double[] months = new double[12]; DateTime Проведено_Е = DateTime.Now; int fond_code = 0; string main_manager = null; long kfk_code = 0; long kfb_code = 0; long kdb_code = 0; long kekv_code = 0; Foundation foundation; Main_manager Main_Manager; KFK kFK; KFB kFB; KDB kDB; KEKB kEKB; List <Filling> fillings = new List <Filling>(); #endregion for (int i = 2; i <= application.WorksheetFunction.CountA(worksheet.Columns[1]); i++) { #region "Variables" range = worksheet.Cells[i, 1]; Проведено_Е = Convert.ToDateTime(Convert.ToString(range.Value2)); range = worksheet.Cells[i, 2]; fond_code = Convert.ToInt32(Convert.ToString(range.Value2)); foundation = db.Foundations.First(f => f.Видалено == false && f.Код == fond_code); range = worksheet.Cells[i, 3]; main_manager = (string)range.Value2; Main_Manager = db.Main_Managers.First(f => f.Видалено == false && f.Найменування == main_manager); range = worksheet.Cells[i, 4]; kfk_code = Convert.ToInt64(Convert.ToString(range.Value2)); kFK = db.KFKs.First(f => f.Видалено == false && f.Код == kfk_code); range = worksheet.Cells[i, 5]; kfb_code = Convert.ToInt64(Convert.ToString(range.Value2)); kFB = db.KFBs.First(f => f.Видалено == false && f.Код == kfb_code); range = worksheet.Cells[i, 6]; kdb_code = Convert.ToInt64(Convert.ToString(range.Value2)); kDB = db.KDBs.First(f => f.Видалено == false && f.Код == kdb_code); range = worksheet.Cells[i, 7]; kekv_code = Convert.ToInt64(Convert.ToString(range.Value2)); kEKB = db.KEKBs.First(f => f.Видалено == false && f.Код == kekv_code); #endregion for (int k = 1; k <= 12; k++) { range = worksheet.Cells[i, 7 + k]; months[k - 1] = Convert.ToDouble(Convert.ToString(range.Value2 ?? 0)); } Filling filling = new Filling() { Створив = user, Змінив = user, Підписано = true, Проведено = Проведено_Е, Фонд = foundation, Головний_розпорядник = Main_Manager, КФК = kFK, КФБ = kFB, КДБ = kDB, КЕКВ = kEKB, Січень = months[0], Лютий = months[1], Березень = months[2], Квітень = months[3], Травень = months[4], Червень = months[5], Липень = months[6], Серпень = months[7], Вересень = months[8], Жовтень = months[9], Листопад = months[10], Грудень = months[11] }; fillings.Add(filling); } List <string> errors = new List <string>(); foreach (var item in fillings) { errors.AddRange(Func.ChangeFinDocIsAllow(db, item.Проведено, item.КФК, item.Головний_розпорядник, item.КЕКВ, item.Фонд)); if (errors.Count == 0) { db.Fillings.Local.Add(item); } else { break; } } if (errors.Count == 0) { db.SaveChanges(); MessageBox.Show("Готово!", "Maestro", MessageBoxButton.OK, MessageBoxImage.Information); } else { Dispatcher.Invoke(() => { Maestro.Sys.Errors er = new Maestro.Sys.Errors(errors); er.Show(); }); } } catch (Exception Exp) { MessageBox.Show(Exp.Message); } finally { if (workbook != null) { workbook.Close(false); } if (application != null) { application.Quit(); } application = null; openFileDialog = null; workbook = null; worksheet = null; } }); Task.Start(); } else { MessageBox.Show("Оберіть файл з листом Maestro_Data!", "Maestro", MessageBoxButton.OK, MessageBoxImage.Hand); } } } }