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())); } }
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); }