コード例 #1
0
        public static void FixDispanser01042015(XDocument docD, string folderIn)
        {
            if (docD.Root != null)
            {
                var listProf2 = new ListProf(folderIn + "bez_prof.xml");
                var listDop   = codifiers_dop_disp_measures_tab1.GetList(folderIn + "codifiers_dop_disp_measures_tab1.xml");

                foreach (var zap in docD.Root.Elements("ZAP"))
                {
                    string numpol = Converter.GetNumPol(zap);

                    foreach (var sluch in zap.Elements("SLUCH"))
                    {
                        //в файле DM услуги с кодом 0631.. 0632.. у них если начало позже или = 01.04.2015 Только для них мы делаем:
                        var xdate1 = sluch.Element("DATE_1");
                        if (xdate1 != null)
                        {
                            DateTime date = Converter.GetDate(xdate1.Value);
                            if (date >= new DateTime(2015, 02, 01))
                            {
                                RemoveDopUsl061(sluch);
                                // 1) убираем все доп услуги 061

                                var usl = sluch.Elements("USL")
                                          .FirstOrDefault(X => X.Element("CODE_USL") != null &&
                                                          (X.Element("CODE_USL").Value.StartsWith("0631") ||
                                                           (X.Element("CODE_USL").Value.StartsWith("0632"))));
                                //main usl
                                if (usl != null)
                                {
                                    bool isRemoved = false;
                                    var  xCodeUsl  = usl.Element("CODE_USL");
                                    if (xCodeUsl != null)
                                    {
                                        var profs = listProf2.GetProfs(numpol, xCodeUsl.Value);

                                        if (!profs.Any())
                                        {
                                            Messenger.WriteMessage(
                                                String.Format(
                                                    "Совокупность полиса '{0}' и услуги '{1}' не нашлась в списке безпроф.",
                                                    numpol, xCodeUsl.Value));
                                        }

                                        //add dop uslugi na osnove bezprof.xml
                                        AddDopUslFromBezProf(usl, profs, folderIn);


                                        DateTime dateIn  = Converter.GetDate(usl.Element("DATE_IN").Value);
                                        DateTime dateOut = Converter.GetDate(usl.Element("DATE_OUT").Value);
                                        decimal  percent = CalculatePercentOfProfsInPeriod(profs, dateIn, dateOut);

                                        //3) ДЛЯ случаев где главная услуга 0631... и 0632... если % выполненных мероприятий в течении срока прохождения дд составляет < 85% то убирать главную услугу 0631.... или 0632...
                                        if (percent * 100 < 85)
                                        {
                                            usl.Remove();
                                            isRemoved = true;
                                        }
                                    }
                                    //.для всех услуг, которые начинаются с 0630:
                                    //- ставим тариф 0,00 - если НЕ убираем главную услугу 0631 или 0632
                                    ////- ставим тариф из Tarif - если Убираем главную услугу 0631 или 0632
                                    //string tarif = "0.00";
                                    //if (!isRemoved)
                                    //{
                                    //    tarif = usl.Element("TARIF").Value;
                                    //}

                                    foreach (var usl1 in sluch.Elements("USL").Where(X => X.Element("CODE_USL") != null
                                                                                     &&
                                                                                     X.Element("CODE_USL")
                                                                                     .Value.StartsWith("0630"))
                                             )
                                    {
                                        if (!isRemoved)
                                        {
                                            usl1.SetElementValue("TARIF", "0.00");
                                        }
                                        else
                                        {
                                            var tarif = codifiers_dop_disp_measures_tab1.GetTarif(listDop,
                                                                                                  usl1.Element("CODE_USL") != null
                                                    ? usl1.Element("CODE_USL").Value
                                                    : null);
                                            if (tarif == null)
                                            {
                                                throw new Exception("codeusl is null");
                                            }
                                            usl1.SetElementValue("TARIF", tarif);
                                            usl1.SetElementValue("SUMV_USL", tarif);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                Messenger.WriteMessage(String.Format("Добавлено {0} новых доп.услуг", counterNewUsl.GetCurrent()));
                Messenger.WriteMessage(String.Format("Удалено {0} услуг с кодом 061ххх", counterDelUsl.GetCurrent()));
            }
        }
コード例 #2
0
        public static XDocument FixDispanser(XDocument doc, string folderIn)
        {
            ListUSL  ListUsl   = new ListUSL(folderIn + "USL.csv");
            ListProf listProf1 = new ListProf(folderIn + "prof.xml");
            ListProf listProf2 = new ListProf(folderIn + "bez_prof.xml");
            int      counter1  = 0;
            int      countDel  = 0;


            if (doc.Root != null)
            {
                foreach (var zap in doc.Root.Elements("ZAP"))
                {
                    string numpol = GetNumPol(zap);

                    foreach (var sluch in zap.Elements("SLUCH"))
                    {
                        //Развернуть все услуги по диспансеризации
                        if (sluch.Elements("USL").Any())
                        {
                            var usl =
                                sluch.Elements("USL")
                                .FirstOrDefault(
                                    X =>
                                    X.Element("CODE_USL") != null
                                                ? ListUsl.HasCode(X.Element("CODE_USL").Value)
                                                : false); //Если какая либо услуга в списке

                            if (usl != null)
                            {
                                var xCodeUsl = usl.Element("CODE_USL");
                                if (xCodeUsl != null)
                                {
                                    var list = ListUsl.GetCodeList(xCodeUsl.Value);
                                    if (list != null)
                                    {
                                        int counter = 0;
                                        foreach (var newCode in list)
                                        {
                                            var newUsl  = new XElement(usl);
                                            var id_serv = newUsl.Element("IDSERV");
                                            if (id_serv != null)
                                            {
                                                id_serv.Value += (++counter).ToString();//просто прибавить счетчик
                                                //<IDSERV> получается в случаях одинаковые, а должны быть разными, в одном случае повторяться не должны
                                            }
                                            var sumv_usl = newUsl.Element("SUMV_USL");
                                            if (sumv_usl != null)
                                            {
                                                sumv_usl.Value = "0";  //1) <SUMV_USL> надо в дополнительных услугах приравнять к нулю
                                            }
                                            var code_usl = newUsl.Element("CODE_USL");
                                            if (code_usl != null)
                                            {
                                                code_usl.Value = newCode;
                                            }
                                            var tarif = newUsl.Element("TARIF");
                                            if (tarif != null)
                                            {
                                                tarif.Value = "0";
                                            }


                                            //расставляем дополнительным услугам врачей, даты и xprvs
                                            var newCodeUsl = newUsl.Element("CODE_USL");
                                            if (newCodeUsl != null)
                                            {
                                                string prvs     = newUsl.Element("PRVS").Value;
                                                string code_md  = newUsl.Element("CODE_MD").Value;
                                                string date_in  = newUsl.Element("DATE_IN").Value;
                                                string date_out = newUsl.Element("DATE_OUT").Value;

                                                string date = null;

                                                var prof = listProf1.GetProf(numpol, xCodeUsl.Value, newCodeUsl.Value);
                                                if (prof != null)
                                                {
                                                    prvs    = prof.Xprvs;
                                                    code_md = prof.Doctor_Id;
                                                    date    = prof.MeasureDate;
                                                }

                                                var prof1 = listProf2.GetProf(numpol, xCodeUsl.Value, newCodeUsl.Value);
                                                if (prof1 != null)
                                                {
                                                    prvs    = prof1.Xprvs;
                                                    code_md = prof1.Doctor_Id;
                                                    date    = prof1.MeasureDate;
                                                }

                                                if (!String.IsNullOrWhiteSpace(date) && date.Length == 10)
                                                {
                                                    date = String.Format("{0}-{1}-{2}",
                                                                         date.Substring(6, 4),
                                                                         date.Substring(3, 2),
                                                                         date.Substring(0, 2)); //формат гггг-мм-дд
                                                    date_in  = date.Replace(".", "-");
                                                    date_out = date.Replace(".", "-");
                                                }

                                                newUsl.Element("PRVS").Value     = prvs;
                                                newUsl.Element("CODE_MD").Value  = code_md;
                                                newUsl.Element("DATE_IN").Value  = date_in;
                                                newUsl.Element("DATE_OUT").Value = date_out;
                                            }

                                            counter1++;
                                            sluch.LastNode.AddBeforeSelf(newUsl);
                                        }

                                        bool replace = ListUsl.IsReplace(xCodeUsl.Value);
                                        if (replace)
                                        {
                                            usl.Remove();
                                            countDel++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            Messenger.WriteMessage(String.Format("Удалено {0} элементов", countDel));
            Messenger.WriteMessage(String.Format("Добавлено {0} элементов", counter1));
            return(doc);
        }