Esempio n. 1
0
        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);
                    }
                }
            }
        }
Esempio n. 2
0
        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);
                    }
                }
            }
        }