Exemplo n.º 1
0
        /// <summary>СОБЫТИЕ Нажали на кнопку Обновить Страховые компании</summary>
        private void PART_ButtonLoadFile_Click(object sender, RoutedEventArgs e)
        {
            string _Tf_okato = "";
            int    _Smocod   = 0;
            string _Nam_smok = "";
            string _D_end    = "";
            string _Ogrn     = "";

            PRI_Context = new StarahReestrDataContext(MySql.MET_ConSql());
            ((Paragraph)PART_RichTextBox.Document.Blocks.FirstBlock).LineHeight = 2;
            XmlTextReader _TextReader = new XmlTextReader(PRI_FileName);

            while (_TextReader.Read())
            {
                if (_TextReader.NodeType == XmlNodeType.Element)
                {
                    switch (_TextReader.Name)
                    {
                    case "tf_okato":
                        _TextReader.Read();
                        _Tf_okato = _TextReader.Value;
                        break;

                    case "smocod":
                        _TextReader.Read();
                        _Smocod = Convert.ToInt32(_TextReader.Value);
                        break;

                    case "nam_smok":
                        _TextReader.Read();
                        _Nam_smok = _TextReader.Value;
                        break;

                    case "d_end":
                        _TextReader.Read();
                        _D_end = _TextReader.Value == "" ? "" : "old";

                        break;

                    case "Ogrn":
                        _TextReader.Read();
                        _Ogrn = _TextReader.Value;
                        break;
                    }
                }
                if (_TextReader.NodeType == XmlNodeType.EndElement && _TextReader.Name == "insCompany")
                {
                    // Связь с SQL, в принципе не очень то и нужен, только для разового сохраниения в  StrahFile
                    try
                    {
                        bool _Er = false;
                        PRI_StrahComp = PRI_Context.s_StrahComp.Single(n => n.KOD == _Smocod);
                        if (_Nam_smok != PRI_StrahComp.TKOD)
                        {
                            _Er = true;
                            PART_RichTextBox.AppendText("Несовпадает название:\n");
                        }
                        if (_Ogrn != PRI_StrahComp.OGRN)
                        {
                            _Er = true;
                            PART_RichTextBox.AppendText("Несовпадает ОГРН:\n");
                        }
                        if (_D_end != PRI_StrahComp.NewTKod)
                        {
                            _Er = true;
                            PART_RichTextBox.AppendText("Несовпадает дата закрытия:\n");
                        }
                        if (_Er)
                        {
                            PART_RichTextBox.AppendText(_Smocod + "\n");
                            PART_RichTextBox.AppendText("ОГРН старое/новое: " + PRI_StrahComp.OGRN + " / " + _Ogrn + "\n");
                            PART_RichTextBox.AppendText("Устаревшее старое/новое: " + PRI_StrahComp.NewTKod + " / " + _D_end + "\n");
                            PART_RichTextBox.AppendText("старое:" + PRI_StrahComp.TKOD + "\n");
                            PART_RichTextBox.AppendText("новое: " + _Nam_smok + "\n\n");
                            PRI_StrahComp.OGRN    = _Ogrn;
                            PRI_StrahComp.NewTKod = _D_end;
                            PRI_StrahComp.TKOD    = _Nam_smok;
                        }
                        //// Запись файла  StrahFile
                        //PRI_StrahFile = new StrahFile
                        //{
                        //    Cod = PRI_Context.StrahFile.Max(e => e.Cod + 1),
                        //    DateN = PROP_DateN,
                        //    DateK = PROP_DateK,
                        //    Korekt = PROP_Korekt,
                        //    StrahComp = (byte?)PRI_Strah,
                        //    SUMMAV = 0,
                        //    Tip = 1,
                        //    YEAR = PROP_DateK.Year,
                        //    MONTH = PROP_DateK.Month,
                        //    NSCHET = PROP_Schet,
                        //    DSCHET = PROP_DateSchet,
                        //    pHide = 0,
                        //    pParent = PROP_Parent
                        //};
                    }
                    catch (InvalidOperationException)
                    {
                        PART_RichTextBox.AppendText("Новая компания:\n");
                        PART_RichTextBox.AppendText(_Smocod + "  " + _Ogrn + "   " + _D_end + "\n");
                        PART_RichTextBox.AppendText(_Nam_smok + "\n");
                        PRI_StrahComp.KOD     = _Smocod;
                        PRI_StrahComp.OGRN    = _Ogrn;
                        PRI_StrahComp.NewTKod = _D_end;
                        PRI_StrahComp.TKOD    = _Nam_smok;
                        try
                        {
                            PRI_Oblast = PRI_Context.s_Oblast.Single(n => n.NewKod == _Tf_okato);
                            PART_RichTextBox.AppendText("ОКАТО: " + _Tf_okato + " область:" + PRI_Oblast.kod + " / " + PRI_Oblast.NAIM + "\n\n");
                        }
                        catch (InvalidOperationException)
                        {
                            PART_RichTextBox.AppendText("область НЕ найдена \n\n");
                        }
                    }
                    catch
                    {
                        //
                    }
                }
            }
            PART_RichTextBox.AppendText("Усё");
        }
Exemplo n.º 2
0
        /// <summary>МЕТОД 2. Запуск расчета</summary>
        private void MET_StartCalc()
        {
            // Сохраняем значение ProgressBar
            double _BarValue = 0;
            // Создание делегата и привязка к изменению свойства ProgressBar
            UpdateProgressBarDelegate _Progress = PART_ProgressBar.SetValue;

            // Ну начинаем
            PROP_ProgressLabel = "Подгружаем данные с сервера";
            // Всё больше форму НЕ трогаем, можем только закрыть
            PART_UserPage.IsEnabled = false;
            // Даем поток, для обновления формы
            Dispatcher.Invoke(_Progress, DispatcherPriority.Background, RangeBase.ValueProperty, _BarValue);
            // Связь с SQL, в принципе не очень то и нужен, только для разового сохраниения в  StrahFile
            try
            {
                PRI_Context = new StarahReestrDataContext(MySql.MET_ConSql());
                // Запись файла  StrahFile
                PRI_StrahFile = new StrahFile
                {
                    Cod       = PRI_Context.StrahFile.Max(e => e.Cod + 1),
                    DateN     = PROP_DateN,
                    DateK     = PROP_DateK,
                    Korekt    = 0,
                    StrahComp = 4,
                    VMP       = (byte?)PRI_TipReestr,
                    SUMMAV    = 0,
                    Tip       = 1,
                    YEAR      = PROP_DateK.Year,
                    MONTH     = PROP_DateK.Month,
                    NSCHET    = PROP_Schet,
                    DSCHET    = PROP_DateSchet,
                    pPaket    = PRI_MainCorrect == 1 ? (byte?)124 : (byte?)123,
                    pHide     = 0,
                    pParent   = PROP_ParentCod
                };
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

            // Стартовые номера для поля N_ZAP
            int.TryParse($"{PRI_TipReestr}{PROP_DateK.Month:00}00000", out PRI_ReeN_Zap);
            PRI_ReeNom_Zap = PRI_ReeN_Zap;

            DataRelation _DataRelation;

            DataColumn[] _ReStrahReestr = new DataColumn[]
            { MyGlo.DataSet.Tables["ReStrahReestr"].Columns["Cod"],
              MyGlo.DataSet.Tables["ReStrahReestr"].Columns["LPU_ST"] };

            if (PRI_TipReestr == 3 || PRI_TipReestr == 4)
            {
                // Поликлиника 1. Apac (только конечные посещения)
                MySql.MET_DsAdapterFill(MyQuery.ReApac_Select_4(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "ReApac");
                // Связываем по колонками
                DataColumn[] _ReApac = new DataColumn[]
                { MyGlo.DataSet.Tables["ReApac"].Columns["Cod"],
                  MyGlo.DataSet.Tables["ReApac"].Columns["LPU_ST"] };
                // Связь Реестр - Apac
                _DataRelation = new DataRelation("ReReestr_Apac", _ReStrahReestr, _ReApac, false);
                MyGlo.DataSet.Relations.Add(_DataRelation);

                // Поликлиника 2. (промежуточные посещения)
                MySql.MET_DsAdapterFill(MyQuery.ReApac_Select_5(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "RePol");
                // Связь Apac - Pol
                _DataRelation = new DataRelation("ReApac_Pol",
                                                 MyGlo.DataSet.Tables["ReApac"].Columns["NumberFirstTap"],
                                                 MyGlo.DataSet.Tables["RePol"].Columns["NumberFirstTap"], false); // Запретим создание ограничений, на "осиротевшие" записи в RePol
                MyGlo.DataSet.Relations.Add(_DataRelation);

                // Поликлиника 3. (консилиумы)
                MySql.MET_DsAdapterFill(MyQuery.ReApac_Select_6(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "RePolCons");
                // Связь Apac - PolCons
                _DataRelation = new DataRelation("ReApac_PolCons",
                                                 MyGlo.DataSet.Tables["ReApac"].Columns["Cod"],
                                                 MyGlo.DataSet.Tables["RePolCons"].Columns["Cod"], false); // Запретим создание ограничений, на "осиротевшие" записи в RePolCons
                MyGlo.DataSet.Relations.Add(_DataRelation);
            }

            // Стационар 1. Apstac
            MySql.MET_DsAdapterFill(MyQuery.ReApstac_Select_4(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "ReApstac");
            // Связываем по колонками
            DataColumn[] _ReApstac = new DataColumn[]
            { MyGlo.DataSet.Tables["ReApstac"].Columns["Ind"],
              MyGlo.DataSet.Tables["ReApstac"].Columns["LPU_ST"] };
            // Связь Реестр - Apstac
            _DataRelation = new DataRelation("ReReestr_Apstac", _ReStrahReestr, _ReApstac, false);
            MyGlo.DataSet.Relations.Add(_DataRelation);

            // Стационар 2. Ksg
            MySql.MET_DsAdapterFill(MyQuery.ReApstac_Select_5(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "ReKsg");
            // Связь Apstac - Ksg
            _DataRelation = new DataRelation("ReApstac_Ksg",
                                             MyGlo.DataSet.Tables["ReApstac"].Columns["Ind"],
                                             MyGlo.DataSet.Tables["ReKsg"].Columns["Ind"], false);
            MyGlo.DataSet.Relations.Add(_DataRelation);

            // Стационар 3. (консилиумы)
            MySql.MET_DsAdapterFill(MyQuery.ReApstac_Select_6(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "ReApstacCons");
            // Связь Apstac - ApstacCons
            _DataRelation = new DataRelation("ReApstac_ApstacCons",
                                             MyGlo.DataSet.Tables["ReApstac"].Columns["Ind"],
                                             MyGlo.DataSet.Tables["ReApstacCons"].Columns["Ind"], false);
            MyGlo.DataSet.Relations.Add(_DataRelation);

            if (PRI_TipReestr == 4)
            {
                // Параклиника 1. Par
                MySql.MET_DsAdapterFill(MyQuery.RePar_Select_2(PRI_TipReestr, PRI_MainCorrect, PROP_DateN, PROP_DateK), "RePar");
                // Связываем по колонками
                DataColumn[] _RePar = new DataColumn[]
                { MyGlo.DataSet.Tables["RePar"].Columns["Cod"],
                  MyGlo.DataSet.Tables["RePar"].Columns["LPU_ST"] };
                // Связь Реестр - RePar
                _DataRelation = new DataRelation("ReReestr_Par", _ReStrahReestr, _RePar, false);
                MyGlo.DataSet.Relations.Add(_DataRelation);
            }

            // Страховые компании. StrahComp
            if (MyGlo.DataSet.Tables["ReStrahComp"] == null)                // если ещё не загруженна
            {
                MySql.MET_DsAdapterFill(MyQuery.ReStrahComp_Select_1(), "ReStrahComp");
                DataTable _Table = MyGlo.DataSet.Tables["ReStrahComp"];
                _Table.PrimaryKey = new[] { _Table.Columns["Cod"] };
            }

            // Загружаем справочники StrahSpr
            PRI_N002 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N002"));
            PRI_N003 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N003"));
            PRI_N004 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N004"));
            PRI_N005 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N005"));
            PRI_N008 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N008"));
            PRI_N009 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N009"));
            PRI_N011 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N011"));
            PRI_N012 = new List <StrahSpr>(PRI_Context.StrahSpr.Where(e => e.Number > 0 && e.TableID == "N012"));

            PRI_StrahStacSv = new List <StrahStacSv>(PRI_Context.StrahStacSv);

            // Максимум ProgressBar
            PART_ProgressBar.Maximum = MyGlo.DataSet.Tables["ReStrahReestr"].Rows.Count;

            // Сохраним запись в StrahFile
            PRI_Context.StrahFile.InsertOnSubmit(PRI_StrahFile);
            PRI_Context.SubmitChanges();

            // Создаем файл с ошибками (шапачку там)
            PRI_ErrorToExcel = new MyExcel(PRI_StrahFile);

            // Перебераем все записи
            foreach (DataRow _Reestr in MyGlo.DataSet.Tables["ReStrahReestr"].Rows)
            {
                PRI_RowReestr   = _Reestr;
                PRI_StrahReestr = new StrahReestr();
                PRI_Sl          = new MySL();

                // Тип услуги
                PRI_TipUsl = (eTipUsl)m.MET_PoleInt("LPU_ST", PRI_RowReestr);

                PRI_ErrorRow = false;                                           // ошибок нет (ну это пока)

                // Заранее готовим информацию для будущей ошибки
                PRI_ErrorToExcel.PROP_StrahReestr = PRI_StrahReestr;
                PRI_ErrorToExcel.PROP_RowReestr   = PRI_RowReestr;
                PRI_ErrorToExcel.PROP_Nom++;
                PRI_ErrorToExcel.PROP_Tip = new[] { "", "Кр. Стационар", "Дн. Стационар", "Поликлиника", "Параклиника", "Гистология" }[(int)PRI_TipUsl];

                switch (PRI_TipUsl)
                {
                case eTipUsl.StacKr:
                case eTipUsl.StacDn:
                    MET_CalcStac();       // считаем стационар
                    break;

                case eTipUsl.Pol:
                    MET_CalcPol();        // считаем поликлинику
                    break;

                case eTipUsl.Par:
                case eTipUsl.Gist:
                    MET_CalcPar();        // считаем параклинику
                    break;
                }

                // Изменения прогресса
                PROP_ProgressLabel = $"Загружено: {++_BarValue} из {PART_ProgressBar.Maximum}";
                Dispatcher.Invoke(_Progress, DispatcherPriority.Background, RangeBase.ValueProperty, _BarValue);

                // Сохраним строку в StrahReestr (если ошибок нет)
                if (!PRI_ErrorRow)
                {
                    MET_SaveSql();
                }
            }

            // Для корректрирующих реестров пересчитаем нумерацию
            if (PROP_ParentCod > 0)
            {
                MySql.MET_QueryNo(MyQuery.StrahReestr_Update_2(PRI_StrahFile.Cod, PROP_ParentCod));
            }

            // Пересчитаем поле Сумму
            MySql.MET_QueryNo(MyQuery.StrahFile_Update_1(PRI_StrahFile.Cod));

            // Подчистим связи
            if (PRI_TipReestr == 3 || PRI_TipReestr == 4)
            {
                MyGlo.DataSet.Tables["ReApac"].ChildRelations.Clear();
                MyGlo.DataSet.Tables["RePol"].ChildRelations.Clear();
                MyGlo.DataSet.Tables["RePolCons"].ChildRelations.Clear();

                MyGlo.DataSet.Tables["RePol"].Clear();
                MyGlo.DataSet.Tables["RePolCons"].Clear();
                MyGlo.DataSet.Tables["ReApac"].Clear();
            }

            MyGlo.DataSet.Tables["ReApstac"].ChildRelations.Clear();
            MyGlo.DataSet.Tables["ReKsg"].ChildRelations.Clear();
            MyGlo.DataSet.Tables["ReApstacCons"].ChildRelations.Clear();

            MyGlo.DataSet.Tables["ReKsg"].Clear();
            MyGlo.DataSet.Tables["ReApstacCons"].Clear();
            MyGlo.DataSet.Tables["ReApstac"].Clear();

            if (PRI_TipReestr == 4)
            {
                MyGlo.DataSet.Tables["RePar"].Clear();
            }
            MyGlo.DataSet.Relations.Clear();
            // Усё
            MessageBox.Show(string.Format("Реестр №{0} сформирован!", PRI_StrahFile.Cod));
            // Показываем ошибки
            PRI_ErrorToExcel.MET_End();
        }