public static majitele GetMajitele(xmlSubjekt subj) { majitele t = new majitele(); if (Devmasters.TextUtil.IsNumeric(subj.ico)) { subj.ico = subj.ico.PadLeft(8, '0'); } t.ico = subj.ico; t.nazev_subjektu = subj.nazev; t.id = t.ico; var sekce = subj.udaje .Where(m => m.udajTyp.kod == "SKUTECNY_MAJITEL_SEKCE") .FirstOrDefault(); if (sekce == null) { return(null); } majitel_base[] _majitele = null; if (sekce.podudaje != null) { _majitele = sekce.podudaje.Where(m => m?.udajTyp?.kod == "PRIMY_SKUTECNY_MAJITEL" || m?.udajTyp?.kod == "SKUTECNY_MAJITEL") .Select(m => majitel_base.Get(m)).ToArray(); } if (_majitele?.Count() > 0) { for (int i = 0; i < _majitele.Count(); i++) { var maj = _majitele[i]; if (false && maj.osoba_datum_narozeni.Year < 1900) //nema datum tak ho dohledam v jinych castech, nyni vypnuto { //find osobu v celem zaznamu foreach (var blok in subj.udaje) { if (blok?.podudaje?.Any() == true) { foreach (xmlSubjektUdajUdaj udaj in blok.podudaje) { if (udaj.osoba != null && string.Compare(udaj.osoba.jmeno, maj.osoba_jmeno, true) == 0 && string.Compare(udaj.osoba.prijmeni, maj.osoba_prijmeni, true) == 0 && udaj.osoba.narozDatum.Year > 1900 ) { maj.osoba_datum_narozeni = udaj.osoba.narozDatum; } } } } } } t.skutecni_majitele = _majitele; return(t); } return(null); }
private static void ProcessXML(Devmasters.Args args, string name) { logger.Debug($"Starting {name}.xml"); if (System.IO.File.Exists(name + ".xml")) { if (args.Exists("/uselocal")) { //skip next, use local file } else if (force || (DateTime.Now - new System.IO.FileInfo(name + ".xml").LastWriteTime).TotalDays > 4) { logger.Debug($"downloading new {name}.xml"); Console.WriteLine($"Downloading new {name}"); DownloadFile(name); } } else { logger.Debug($"downloading new {name}.xml"); Console.WriteLine($"Downloading {name}"); DownloadFile(name); } if (!System.IO.File.Exists(name + ".xml")) { return; } rawXML d = null; Console.WriteLine($"Deserializing {name}"); logger.Debug($"Deserializing {name}.xml"); using (var xmlReader = new System.IO.StreamReader(name + ".xml")) { var serializer = new XmlSerializer(typeof(rawXML)); d = (rawXML)serializer.Deserialize(xmlReader); } Console.WriteLine($"{d.Subjekt?.Count()} subjects"); Devmasters.Batch.Manager.DoActionForAll <xmlSubjekt>(d.Subjekt //.Where(m=>m.ico== "3493661") //debug , subj => { majitele item = majitele.GetMajitele(subj); if (item != null && item?.skutecni_majitele?.Count() > 0) { if (!ds.ItemExists(item.ico) || force) { item.UpdateOsobaId(); ds.AddOrUpdateItem(item, HlidacStatu.Api.V2.Dataset.Typed.ItemInsertMode.rewrite); } else { //check change var old = ds.GetItem(item.ico); if (old != null) { var same = true; if (old.skutecni_majitele?.Count() != item.skutecni_majitele?.Count()) { same = false; } else if (item.skutecni_majitele?.Count() == old.skutecni_majitele?.Count() && item.skutecni_majitele?.Count() > 0) { foreach (var sm in item.skutecni_majitele) { same = same && old.skutecni_majitele.Any(m => m.osoba_jmeno == sm.osoba_jmeno && m.osoba_prijmeni == sm.osoba_prijmeni && m.osoba_datum_narozeni == sm.osoba_datum_narozeni && m.osoba_titul_pred == sm.osoba_titul_pred && m.osoba_titul_za == sm.osoba_titul_za && m.adresa_cast_obce == sm.adresa_cast_obce && m.adresa_cislo_ev == sm.adresa_cislo_ev && m.adresa_cislo_or == sm.adresa_cislo_or && m.adresa_cislo_po == sm.adresa_cislo_po && m.adresa_obec == sm.adresa_obec && m.adresa_okres == sm.adresa_okres && m.adresa_psc == sm.adresa_psc && m.adresa_stat_nazev == sm.adresa_stat_nazev && m.adresa_text == sm.adresa_text && m.adresa_ulice == sm.adresa_ulice && m.slovni_vyjadreni == sm.slovni_vyjadreni && m.podil == sm.podil && m.postaveni == sm.postaveni && !string.IsNullOrEmpty(m.osobaId) ); } } if (same == false) { item.UpdateOsobaId(); ds.AddOrUpdateItem(item, HlidacStatu.Api.V2.Dataset.Typed.ItemInsertMode.rewrite); } } } } return(new Devmasters.Batch.ActionOutputData()); }, Devmasters.Batch.Manager.DefaultOutputWriter, Devmasters.Batch.Manager.DefaultProgressWriter, !System.Diagnostics.Debugger.IsAttached, maxDegreeOfParallelism: 4, prefix: $"{name} ITEMS "); }