private IEnumerable <string> _getPreviewTopValueFromItem(Newtonsoft.Json.Linq.JObject item, bool fromAllTopValues = false) { List <string> topTxts = new List <string>(); List <string> texts = new List <string>(); var props = GetMappingList("ICO"); foreach (var prop in props) { var o = item.SelectTokens(prop).FirstOrDefault(); string t = ""; if (o != null && o.GetType() == typeof(JValue)) { t = o.Value <string>() ?? ""; } //var t = ((string)Dynamitey.Dynamic.InvokeGetChain(item, prop)) ?? ""; if (HlidacStatu.Util.DataValidators.CheckCZICO(t)) { Firma f = Firmy.Get(t); if (f.Valid) { topTxts.Add(f.JmenoBezKoncovky() + ":"); if (!fromAllTopValues) { break; } } } } props = GetMappingList("Osobaid"); foreach (var prop in props) { var o = item.SelectTokens(prop).FirstOrDefault(); string t = ""; if (o != null && o.GetType() == typeof(JValue)) { t = o.Value <string>() ?? ""; } //var t = ((string)Dynamitey.Dynamic.InvokeGetChain(item, prop)) ?? ""; if (!string.IsNullOrEmpty(t)) { Osoba os = Osoby.GetByNameId.Get(t); if (os != null) { topTxts.Add(os.FullName() + ": "); if (!fromAllTopValues) { break; } } } } return(topTxts); }
public Calculator(string ico) { this.Ico = ico; this.urad = Firmy.Get(this.Ico); if (urad.Valid == false) { throw new ArgumentOutOfRangeException("invalid ICO"); } kindex = KIndexData.GetDirect(ico); }
private bool TryGetCompany(string id, out Firma firma, out ActionResult actionResult) { firma = null; if (string.IsNullOrWhiteSpace(id)) { actionResult = RedirectToAction("Index"); return(false); } string ico = Util.ParseTools.NormalizeIco(id); if (string.IsNullOrEmpty(ico)) { actionResult = RedirectToAction("Report", new { id = "1" });; return(false); } firma = Firmy.Get(ico); if (!Firma.IsValid(firma)) { if (Util.DataValidators.IsFirmaIcoZahranicni(ico)) { actionResult = View("Subjekt_zahranicni", new Firma() { ICO = ico, Jmeno = ico }); } else { if (!Util.DataValidators.CheckCZICO(ico)) { actionResult = View("Subjekt_err_spatneICO"); } else { actionResult = View("Subjekt_err_nezname"); } } return(false); } if (Util.DataValidators.IsFirmaIcoZahranicni(ico)) { actionResult = View("Subjekt_zahranicni", firma); return(false); } actionResult = View("Index", firma); return(true); }
public KIndexData.Annual FinalCalculationKIdx(KIndexData.Annual ret, bool forceCalculateAllYears) { decimal smlouvyZaRok = (decimal)urad.StatistikaRegistruSmluv()[ret.Rok].PocetSmluv; CalculateKIndex(ret); if ( ret.Statistika.PocetSmluvSeSoukromymSubj >= Consts.MinSmluvPerYear || ret.Statistika.CelkovaHodnotaSmluvSeSoukrSubj >= Consts.MinSumSmluvPerYear || (ret.Statistika.CelkovaHodnotaSmluvSeSoukrSubj + ret.Statistika.PrumernaHodnotaSmluvSeSoukrSubj * ret.Statistika.PocetSmluvBezCenySeSoukrSubj) >= Consts.MinSumSmluvPerYear ) { ret.KIndexReady = true; ret.KIndexIssues = null; } else if (Firmy.Get(this.Ico).MusiPublikovatDoRS() == false) { if (forceCalculateAllYears == false) { ret.KIndexReady = false; ret.KIndexIssues = new string[] { $"K-Index spočítán, ale organizace ze zákona nemusí do registru smluv publikovat. Publikuje pouze dobrovolně, proto K-Index nezveřejňujeme." }; } else { ret.KIndexReady = true; ret.KIndexIssues = new string[] { $"Organizace ze zákona nemusí do registru smluv publikovat. Publikuje pouze dobrovolně, nad rámec zákona." }; } } else { if (forceCalculateAllYears == false) { ret.KIndexReady = false; ret.KIndexIssues = new string[] { $"K-Index nespočítán. Méně než {Consts.MinSmluvPerYear} smluv za rok nebo malý objem smluv." }; } else { ret.KIndexReady = true; ret.KIndexIssues = new string[] { $"Organizace má méně smluv nebo objem smluv než určuje metodika. Pro výpočet a publikaci byla aplikována výjimka." }; } } ret.LastUpdated = DateTime.Now; return(ret); }
//todo: What are we going to do with this? public ActionResult Debug(string id, string ico = "", int?rok = null) { if (!Framework.HtmlExtensions.ShowKIndex(this.User)) { return(Redirect("/")); } if ( !(this.User.IsInRole("Admin") || this.User.IsInRole("KIndex")) ) { return(Redirect("/")); } if (string.IsNullOrEmpty(id)) { return(View("Debug.Start")); } if (Util.DataValidators.CheckCZICO(Util.ParseTools.NormalizeIco(id))) { KIndexData kdata = KIndex.Get(Util.ParseTools.NormalizeIco(id)); ViewBag.ICO = id; return(View("Debug", kdata)); } else if (id?.ToLower() == "porovnat") { List <KIndexData> kdata = new List <KIndexData>(); foreach (var i in ico.Split(new char[] { ' ', ',', ';' }, StringSplitOptions.RemoveEmptyEntries)) { var f = Firmy.Get(Util.ParseTools.NormalizeIco(i)); if (f.Valid) { var kidx = KIndex.Get(Util.ParseTools.NormalizeIco(i)); if (kidx != null) { kdata.Add(kidx); } } } return(View("Debug.Porovnat", kdata)); } else { return(NotFound()); } }
public static IEnumerable <string> AllIcoInRS(bool includedIcosInHoldings = false) { using (PersistLib p = new PersistLib()) { string sql = @"select ico from Firma where IsInRS = 1"; var res = p.ExecuteDataset(cnnStr, System.Data.CommandType.Text, sql, null); if (res.Tables.Count > 0 && res.Tables[0].Rows.Count > 0) { var allIcos = res.Tables[0] .AsEnumerable() .Where(r => Devmasters.TextUtil.IsNumeric((string)r["ICO"])) .Select(r => (string)r["ICO"]) .ToArray(); if (includedIcosInHoldings == false) { return(allIcos); } else { HashSet <string> holdingIcos = new HashSet <string>(); foreach (var i in allIcos) { if (!holdingIcos.Contains(i)) { holdingIcos.Add(i); } Firma f = Firmy.Get(i); foreach (var hi in f.IcosInHolding(Relation.AktualnostType.Nedavny)) { if (!holdingIcos.Contains(hi)) { holdingIcos.Add(hi); } } } return(holdingIcos); } } else { return new string[] { } }; } }
public ActionResult Porovnat(string id, int?rok = null) { if (!Framework.HtmlExtensions.ShowKIndex(this.User)) { //todo: přidat base view, kde pokud nebude žádná hodnota v id, tak zobrazíme základní porovnání return(Redirect("/")); } rok = Consts.FixKindexYear(rok); ViewBag.SelectedYear = rok; var results = new List <SubjectWithKIndexAnnualData>(); if (string.IsNullOrWhiteSpace(id)) { return(View(results)); } foreach (var i in id.Split(new char[] { ' ', ',', ';' }, StringSplitOptions.RemoveEmptyEntries)) { var f = Firmy.Get(Util.ParseTools.NormalizeIco(i)); if (f.Valid) { SubjectWithKIndexAnnualData data = new SubjectWithKIndexAnnualData() { Ico = f.ICO, Jmeno = f.Jmeno }; try { data.PopulateWithAnnualData(rok.Value); } catch (Exception) { // chybí ičo v objeku data continue; } results.Add(data); } } return(View(results)); }
public ActionResult RecalculateFeedback(string email, string txt, string url, string data) { // create a task, so user doesn't have to wait for anything System.Threading.Tasks.Task.Run(() => { var f = Firmy.Get(Util.ParseTools.NormalizeIco(data)); if (f.Valid) { try { //string connectionString = Devmasters.Config.GetWebConfigValue("RabbitMqConnectionString"); //if (string.IsNullOrWhiteSpace(connectionString)) // throw new Exception("Missing RabbitMqConnectionString"); //var message = new Q.Messages.RecalculateKindex() //{ // Comment = txt, // Created = DateTime.Now, // Ico = f.ICO, // User = this.User.Identity.Name //}; //Q.Publisher.QuickPublisher.Publish(message, connectionString); string body = $@" Žádost o rekalkulaci K-Indexu z hlidacstatu.cz. Pro firmu:{f.ICO} Od uzivatele:{email} [{this.User.Identity.Name}] (Emaily by se zde měli shodovat) ke stránce:{url} text zpravy: {txt}"; Util.SMTPTools.SendSimpleMailToPodpora("Žádost o rekalkulaci K-indexu", body, email); } catch (Exception ex) { Util.Consts.Logger.Fatal($"Problem with SMTP. Message={ex}"); } } }); return(Content("")); }
public JsonResult KindexForIco(string id, int?rok = null) { rok = Consts.FixKindexYear(rok); var f = Firmy.Get(Util.ParseTools.NormalizeIco(id)); if (f.Valid) { var kidx = KIndex.Get(Util.ParseTools.NormalizeIco(id)); if (kidx != null) { var radky = kidx.ForYear(rok.Value).KIndexVypocet.Radky .Select(r => new { VelicinaName = r.VelicinaName, Label = KIndexData.KindexImageIcon(KIndexData.DetailInfo.KIndexLabelForPart(r.VelicinaPart, r.Hodnota), "height: 25px", showNone: true, KIndexData.KIndexCommentForPart(r.VelicinaPart, kidx.ForYear(rok.Value))), Value = r.Hodnota.ToString("F2") }).ToList(); var result = new { UniqueId = Guid.NewGuid(), Ico = kidx.Ico, Jmeno = Devmasters.TextUtil.ShortenText(kidx.Jmeno, 55), Kindex = KIndexData.KindexImageIcon(kidx.ForYear(rok.Value).KIndexLabel, "height: 40px", showNone: true), Radky = radky, KindexReady = kidx.ForYear(rok.Value).KIndexReady }; return(Json(result, JsonRequestBehavior.AllowGet)); } } return(Json(null, JsonRequestBehavior.AllowGet)); }
public ActionResult TransparentniUctyFullExport() { string login = ""; List <BankovniPolozkaForExport> items = new List <BankovniPolozkaForExport>(); if (Framework.ApiAuth.IsApiAuth(this, parameters: new Framework.ApiCall.CallParameter[] { new Framework.ApiCall.CallParameter("TransparentniUctyFullExport", "") }).Authentificated) { if (!string.IsNullOrEmpty(this.User?.Identity?.Name)) { login = this.User?.Identity?.Name; } if (login == "*****@*****.**" || login == "*****@*****.**" || login == "*****@*****.**") { HlidacStatu.Lib.ES.SearchTools.DoActionForAll <HlidacStatu.Lib.Data.TransparentniUcty.BankovniPolozka>( (t, obj) => { var bp = t.Source; Osoba o = null; Firma f = null; if (bp.Comments.Any(m => m.Type == HlidacStatu.Lib.Data.TransparentniUcty.BankovniPolozka.Comment.Types.VazbaNaOsobu)) { o = Osoby.GetById.Get( bp.Comments .Where(m => m.Type == HlidacStatu.Lib.Data.TransparentniUcty.BankovniPolozka.Comment.Types.VazbaNaOsobu) .First() .ValueInt); } if (bp.Comments.Any(m => m.Type == HlidacStatu.Lib.Data.TransparentniUcty.BankovniPolozka.Comment.Types.VazbaNaFirmu)) { f = Firmy.Get( bp.Comments .Where(m => m.Type == HlidacStatu.Lib.Data.TransparentniUcty.BankovniPolozka.Comment.Types.VazbaNaFirmu) .First() .ValueInt); if (f.Valid == false) { f = null; } } BankovniPolozkaForExport bpe = new Controllers.ApiV1Controller.BankovniPolozkaForExport(); bpe.Transaction = bp; bpe.Transaction.Comments = null; if (o != null) { bpe.FoundPerson = new BankovniPolozkaForExport.xOsoba() { Jmeno = o.Jmeno, NameId = o.NameId, Narozeni = o.Narozeni, Prijmeni = o.Prijmeni, TitulPred = o.TitulPred, TitulPo = o.TitulPo } } ; if (f != null) { bpe.FoundCompany = new BankovniPolozkaForExport.xFirma() { ICO = f.ICO, Jmeno = f.Jmeno } } ; items.Add(bpe); return(new Devmasters.Core.Batch.ActionOutputData()); }, null, null, new Devmasters.Core.Batch.ActionProgressWriter(1f).Write, false, elasticClient: HlidacStatu.Lib.ES.Manager.GetESClient_Ucty(), blockSize: 50) ; } } return(Content(Newtonsoft.Json.JsonConvert.SerializeObject(items, Newtonsoft.Json.Formatting.None), "application/json")); }
public static Lib.Data.Firma FirmaInText(string text) { if (string.IsNullOrEmpty(text)) { return(null); } string value = Devmasters.TextUtil.RemoveDiacritics(TextUtil.NormalizeToBlockText(text).ToLower()); foreach (var k in Firma.Koncovky.Select(m => m.ToLower()).OrderByDescending(m => m.Length)) { if (value.Contains(k)) { value = value.Replace(k, k.Replace(' ', (char)160)); //nahrad mezery char(160) - non breaking space, aby to tvorilo 1 slovo } else if (k.EndsWith(".") && value.EndsWith(k.Substring(0, k.Length - 1))) { value = value.Replace(k.Substring(0, k.Length - 1), k.Replace(' ', (char)160)); //nahrad mezery char(160) - non breaking space, aby to tvorilo 1 slovo } } //find company name string[] words = value.Split(new char[] { ' ', ',', ';' }, StringSplitOptions.RemoveEmptyEntries); //get back space instead of #160 words = words.Select(m => m.Replace((char)160, ' ')).ToArray(); for (int firstWord = 0; firstWord < words.Length; firstWord++) { for (int skipWord = 0; skipWord < words.Length - firstWord; skipWord++) { string[] cutWords = words.Skip(firstWord) //preskoc slovo na zacatku .Reverse().Skip(skipWord).Reverse() // a ubirej od konce .ToArray(); string wordCombination = cutWords.Aggregate((f, s) => f + " " + s); string koncovka; string firmaBezKoncovky = Lib.Data.Firma.JmenoBezKoncovkyFull(wordCombination, out koncovka); string simpleName = Devmasters.TextUtil.RemoveDiacritics(firmaBezKoncovky).ToLower().Trim(); //+ "|" + koncovka; if (firmaBezKoncovky.Length > 3 && StaticData.FirmyNazvyOnlyAscii.Get().ContainsKey(simpleName) ) { //nasel jsem ico? foreach (var ico in StaticData.FirmyNazvyOnlyAscii.Get()[simpleName]) { Firma f = Firmy.Get(ico); //TODO StaticData.FirmyNazvyAscii.Get()[simpleName]); if (f.Valid) { var firmaFromText = TextUtil.ReplaceDuplicates(System.Text.RegularExpressions.Regex.Replace(wordCombination, @"[,;_""']", " ", defaultRegexOptions), ' '); var firmaFromDB = TextUtil.ReplaceDuplicates(System.Text.RegularExpressions.Regex.Replace(f.Jmeno, @"[,;_""']", " ", defaultRegexOptions), ' '); var rozdil = LevenshteinDistanceCompute( TextUtil.RemoveDiacritics(firmaFromDB).ToLower(), firmaFromText.ToLower() ); var fKoncovka = f.KoncovkaFirmy(); var nextWord = ""; if (firstWord + cutWords.Length < words.Length - 1) { nextWord = words[firstWord + cutWords.Length]; } if (string.IsNullOrEmpty(fKoncovka)) { return(f); } if (!string.IsNullOrEmpty(fKoncovka) && LevenshteinDistanceCompute(cutWords.Last(), fKoncovka) < 2) { return(f); } if (!string.IsNullOrEmpty(fKoncovka) && LevenshteinDistanceCompute(nextWord, fKoncovka) < 2) { return(f); } } } //looking for next //return null; } } } return(null); }
ComplexStatisticDefaultReportColumns <T>(HlidacStatu.Util.RenderData.MaxScale scale, int?minDateYear = null, int?maxDateYear = null, string query = null) { minDateYear = minDateYear ?? HlidacStatu.Lib.Analysis.BasicDataPerYear.UsualFirstYear; maxDateYear = maxDateYear ?? DateTime.Now.Year; var coreColumns = new List <ReportDataSource <KeyValuePair <string, Lib.Analytics.StatisticsPerYear <Data.Smlouva.Statistics.Data> > > .Column>(); coreColumns.Add( new ReportDataSource <KeyValuePair <string, Lib.Analytics.StatisticsPerYear <Data.Smlouva.Statistics.Data> > > .Column() { Id = "Title", Name = "Plátci", HtmlRender = (s) => { var f = Firmy.Get(s.Key); string html = string.Format("<a href='{0}'>{1}</a>", f.GetUrl(false), f.Jmeno); if (!string.IsNullOrEmpty(query)) { html += $" /<span class='small'>ukázat <a href='/hledat?q={System.Net.WebUtility.UrlEncode(Searching.Query.ModifyQueryAND("ico:" + f.ICO, query))}'>smlouvy</a></span>/"; } return(html); }, OrderValueRender = (s) => HlidacStatu.Lib.Data.Firmy.GetJmeno(s.Key), ValueRender = (s) => HlidacStatu.Lib.Data.Firmy.GetJmeno(s.Key), TextRender = (s) => HlidacStatu.Lib.Data.Firmy.GetJmeno(s.Key) }); for (int y = minDateYear.Value; y <= maxDateYear.Value; y++) { int year = y; coreColumns.Add( new ReportDataSource <KeyValuePair <string, Lib.Analytics.StatisticsPerYear <Data.Smlouva.Statistics.Data> > > .Column() { Id = "Cena_Y_" + year, Name = $"Smlouvy {year} v {scale.ToNiceDisplayName()} Kč", HtmlRender = (s) => HlidacStatu.Util.RenderData.ShortNicePrice(s.Value[year].CelkovaHodnotaSmluv, mena: "", html: true, showDecimal: HlidacStatu.Util.RenderData.ShowDecimalVal.Show, exactScale: scale, hideSuffix: true), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value[year].CelkovaHodnotaSmluv), TextRender = (s) => HlidacStatu.Util.RenderData.ShortNicePrice(s.Value[year].CelkovaHodnotaSmluv, mena: "", html: false, showDecimal: HlidacStatu.Util.RenderData.ShowDecimalVal.Show, exactScale: scale, hideSuffix: true), ValueRender = (s) => s.Value[year].CelkovaHodnotaSmluv, CssClass = "number" } ); coreColumns.Add( new ReportDataSource <KeyValuePair <string, Lib.Analytics.StatisticsPerYear <Data.Smlouva.Statistics.Data> > > .Column() { Id = "Pocet_Y_" + year, Name = $"Počet smluv v {year} ", HtmlRender = (s) => HlidacStatu.Util.RenderData.NiceNumber(s.Value[year].PocetSmluv, html: true), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value[year].PocetSmluv), TextRender = (s) => HlidacStatu.Util.RenderData.NiceNumber(s.Value[year].PocetSmluv, html: false), ValueRender = (s) => s.Value[year].PocetSmluv, CssClass = "number" } ); coreColumns.Add( new ReportDataSource <KeyValuePair <string, Lib.Analytics.StatisticsPerYear <Data.Smlouva.Statistics.Data> > > .Column() { Id = "PercentBezCeny_Y_" + year, Name = $"Smluv bez ceny za {year} v %", HtmlRender = (s) => s.Value[year].PercentSmluvBezCeny.ToString("P2"), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value[year].PercentSmluvBezCeny), ValueRender = (s) => (s.Value[year].PercentSmluvBezCeny * 100).ToString(HlidacStatu.Util.Consts.enCulture), TextRender = (s) => s.Value[year].PercentSmluvBezCeny.ToString("P2"), CssClass = "number" }); coreColumns.Add( new ReportDataSource <KeyValuePair <string, Lib.Analytics.StatisticsPerYear <Data.Smlouva.Statistics.Data> > > .Column() { Id = "PercentSPolitiky_Y_" + year, Name = $"% smluv s politiky v {year} ", HtmlRender = (s) => s.Value[year].PercentSmluvPolitiky.ToString("P2"), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value[year].PercentSmluvPolitiky), ValueRender = (s) => (s.Value[year].PercentSmluvPolitiky * 100).ToString(HlidacStatu.Util.Consts.enCulture), TextRender = (s) => s.Value[year].PercentSmluvPolitiky.ToString("P2"), CssClass = "number" }); coreColumns.Add( new ReportDataSource <KeyValuePair <string, Lib.Analytics.StatisticsPerYear <Data.Smlouva.Statistics.Data> > > .Column() { Id = "SumKcSPolitiky_Y_" + year, Name = $"Hodnota smluv s politiky za {year}", HtmlRender = (s) => s.Value[year].SumKcSmluvSponzorujiciFirmy.ToString("P2"), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value[year].SumKcSmluvSponzorujiciFirmy), ValueRender = (s) => (s.Value[year].SumKcSmluvSponzorujiciFirmy * 100).ToString(HlidacStatu.Util.Consts.enCulture), TextRender = (s) => s.Value[year].SumKcSmluvSponzorujiciFirmy.ToString("P2"), CssClass = "number" }); if (year > minDateYear) { coreColumns.Add( new ReportDataSource <KeyValuePair <string, Lib.Analytics.StatisticsPerYear <Data.Smlouva.Statistics.Data> > > .Column() { Id = "CenaChangePercent_Y_" + year, Name = $"Změna hodnoty smlouvy {year - 1}-{year}", HtmlRender = (s) => s.Value.ChangeBetweenYears(year, m => m.CelkovaHodnotaSmluv).percentage.HasValue? Util.RenderData.ChangeValueSymbol(s.Value.ChangeBetweenYears(year, m => m.CelkovaHodnotaSmluv).percentage.Value, true) : "", OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value.ChangeBetweenYears(year, m => m.CelkovaHodnotaSmluv).percentage ?? 0), ValueRender = (s) => s.Value.ChangeBetweenYears(year, m => m.CelkovaHodnotaSmluv).percentage.HasValue ? (s.Value.ChangeBetweenYears(year, m => m.CelkovaHodnotaSmluv).percentage.Value * 100).ToString(HlidacStatu.Util.Consts.enCulture) : "", TextRender = (s) => s.Value.ChangeBetweenYears(year, m => m.CelkovaHodnotaSmluv).percentage.HasValue ? (s.Value.ChangeBetweenYears(year, m => m.CelkovaHodnotaSmluv).percentage.Value).ToString("P2") : "", CssClass = "number" } ); } } ; coreColumns.Add( new ReportDataSource <KeyValuePair <string, Lib.Analytics.StatisticsPerYear <Data.Smlouva.Statistics.Data> > > .Column() { Id = "CenaCelkem", Name = $"Smlouvy 2016-{DateTime.Now.Year} v {scale.ToNiceDisplayName()} Kč", HtmlRender = (s) => HlidacStatu.Util.RenderData.ShortNicePrice(s.Value.Sum(m => m.CelkovaHodnotaSmluv), mena: "", html: true, showDecimal: HlidacStatu.Util.RenderData.ShowDecimalVal.Show, exactScale: scale, hideSuffix: true), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value.Sum(m => m.CelkovaHodnotaSmluv)), CssClass = "number" }); return(coreColumns); }
public IEnumerable <SmlouvyForIndex> GetSmlouvy(string query) { Func <int, int, Nest.ISearchResponse <Lib.Data.Smlouva> > searchFunc = (size, page) => { return(Lib.ES.Manager.GetESClient().Search <Lib.Data.Smlouva>(a => a .Size(size) .Source(ss => ss.Excludes(sml => sml.Field(ff => ff.Prilohy))) .From(page * size) .Query(q => Lib.Data.Smlouva.Search.GetSimpleQuery(query)) .Scroll("1m") )); }; List <smlouvaStat> smlStat = new List <smlouvaStat>(); Searching.Tools.DoActionForQuery <Lib.Data.Smlouva>(Lib.ES.Manager.GetESClient(), searchFunc, (h, o) => { Smlouva s = h.Source; if (s != null) { foreach (var prij in s.Prijemce) { if (prij.ico == s.Platce.ico) { continue; } Firma f = Firmy.Get(prij.ico); if (f.Valid && f.PatrimStatuAlespon25procent()) { continue; } string dodavatel = prij.ico; if (string.IsNullOrWhiteSpace(dodavatel)) { dodavatel = prij.nazev; } if (string.IsNullOrWhiteSpace(dodavatel)) { dodavatel = "neznamy"; } smlStat.Add(new smlouvaStat() { Id = s.Id, IcoDodavatele = dodavatel, CastkaSDPH = Math.Abs((decimal)s.CalculatedPriceWithVATinCZK / (decimal)s.Prijemce.Length), Podepsano = s.datumUzavreni, Rok = s.datumUzavreni.Year, ULimitu = s.Hint?.SmlouvaULimitu ?? 0, Obory = s.GetRelevantClassification() .OrderByDescending(oo => oo.ClassifProbability) .Select(m => m.TypeValue).ToArray() });; } } return(new Devmasters.Batch.ActionOutputData()); }, null, null, null, false, blockSize: 100); IEnumerable <SmlouvyForIndex> smlouvy = smlStat .Select(m => new SmlouvyForIndex(m.IcoDodavatele, m.CastkaSDPH, m.ULimitu, m.Obory)) .OrderByDescending(m => m.HodnotaSmlouvy) //just better debug .ToArray(); //just better debug return(smlouvy); }
public static IEnumerable <Statistics> Calculate(string[] forIcos = null, bool futureKIDX = false) { var client = ES.Manager.GetESClient_KIndex(); //if (!string.IsNullOrEmpty(Devmasters.Config.GetWebConfigValue("UseKindexTemp"))) if (futureKIDX) { client = ES.Manager.GetESClient_KIndexTemp(); } int[] calculationYears = Consts.ToCalculationYears; Func <int, int, Nest.ISearchResponse <Lib.Analysis.KorupcniRiziko.KIndexData> > searchfnc = null; if (forIcos != null) { searchfnc = (size, page) => { return(client.Search <Lib.Analysis.KorupcniRiziko.KIndexData>(a => a .Size(size) .From(page * size) .Query(q => q.Terms(t => t.Field(f => f.Ico).Terms(forIcos))) .Scroll("10m") )); }; } else { searchfnc = (size, page) => { return(client.Search <Lib.Analysis.KorupcniRiziko.KIndexData>(a => a .Size(size) .From(page * size) .Query(q => q.MatchAll()) .Scroll("10m") )); }; }; List <Lib.Analysis.KorupcniRiziko.KIndexData> data = new List <Analysis.KorupcniRiziko.KIndexData>(); Lib.Searching.Tools.DoActionForQuery <Lib.Analysis.KorupcniRiziko.KIndexData>(client, searchfnc, (hit, param) => { if (hit.Source.roky.Any(m => m.KIndexReady)) { data.Add(hit.Source); } return(new Devmasters.Batch.ActionOutputData() { CancelRunning = false, Log = null }); }, null, Devmasters.Batch.Manager.DefaultOutputWriter, Devmasters.Batch.Manager.DefaultProgressWriter, false, prefix: "GET data "); List <Statistics> stats = new List <Statistics>(); foreach (var year in calculationYears) { var datayear = data .Where(m => (forIcos == null || forIcos?.Contains(m.Ico) == true)) .Select(m => new { ic = m.Ico, data = m.ForYear(year) }) .Where(y => y != null && y.data != null && y.data.KIndexReady) .ToDictionary(k => k.ic, v => v.data); if (datayear.Count == 0) { continue; } var stat = new Statistics() { Rok = year }; //poradi stat.SubjektOrderedListKIndexAsc = datayear .Where(m => m.Value.KIndexReady) .Select(m => { var company = Firmy.Get(m.Key); return(m.Key, m.Value.KIndex, company.KrajId); }) .OrderBy(m => m.KIndex) .ToList(); foreach (KIndexData.KIndexParts part in Enum.GetValues(typeof(KIndexData.KIndexParts))) { stat.SubjektOrderedListPartsAsc.Add(part, datayear .Where(m => m.Value.KIndexReady) .Where(m => m.Value.KIndexVypocet.Radky.Any(r => r.VelicinaPart == part)) .Select(m => { var company = Firmy.Get(m.Key); return(m.Key, m.Value.KIndexVypocet.Radky.First(r => r.VelicinaPart == part).Hodnota, company.KrajId); }) .OrderBy(m => m.Hodnota) .ToList() ); } //prumery stat.AverageKindex = datayear.Average(m => m.Value.KIndex); stat.AverageParts = new KIndexData.VypocetDetail(); List <KIndexData.VypocetDetail.Radek> radky = new List <KIndexData.VypocetDetail.Radek>(); foreach (KIndexData.KIndexParts part in Enum.GetValues(typeof(KIndexData.KIndexParts))) { decimal val = datayear .Select(m => m.Value.KIndexVypocet.Radky .FirstOrDefault(r => r.Velicina == (int)part)) .Where(a => a != null) .Average(a => a.Hodnota); KIndexData.VypocetDetail.Radek radek = new KIndexData.VypocetDetail.Radek(part, val, KIndexData.DetailInfo.DefaultKIndexPartKoeficient(part)); radky.Add(radek); } stat.AverageParts = new KIndexData.VypocetDetail() { Radky = radky.ToArray() }; //percentily stat.PercentileKIndex = new Dictionary <int, decimal>(); stat.PercentileParts = new Dictionary <int, KIndexData.VypocetDetail>(); foreach (var perc in Percentiles) { stat.PercentileKIndex.Add(perc, HlidacStatu.Util.MathTools.PercentileCont(perc / 100m, datayear.Select(m => m.Value.KIndex)) ); radky = new List <KIndexData.VypocetDetail.Radek>(); foreach (KIndexData.KIndexParts part in Enum.GetValues(typeof(KIndexData.KIndexParts))) { decimal val = HlidacStatu.Util.MathTools.PercentileCont(perc / 100m, datayear .Select(m => m.Value.KIndexVypocet.Radky.FirstOrDefault(r => r.Velicina == (int)part)) .Where(m => m != null) .Select(m => m.Hodnota) ); KIndexData.VypocetDetail.Radek radek = new KIndexData.VypocetDetail.Radek(part, val, KIndexData.DetailInfo.DefaultKIndexPartKoeficient(part)); radky.Add(radek); } stat.PercentileParts.Add(perc, new KIndexData.VypocetDetail() { Radky = radky.ToArray() }); } stats.Add(stat); } //year return(stats); }
ComplexStatisticDefaultReportColumns <T>(HlidacStatu.Util.RenderData.MaxScale scale, int?minDateYear = null, int?maxDateYear = null) { minDateYear = minDateYear ?? HlidacStatu.Lib.Analysis.BasicDataPerYear.UsualFirstYear; maxDateYear = maxDateYear ?? DateTime.Now.Year; var coreColumns = new List <ReportDataSource <KeyValuePair <string, HlidacStatu.Lib.Analysis.ComplexStatistic <T> > > .Column>(); coreColumns.Add( new ReportDataSource <KeyValuePair <string, HlidacStatu.Lib.Analysis.ComplexStatistic <T> > > .Column() { Id = "Title", Name = "Plátci", HtmlRender = (s) => { var f = Firmy.Get(s.Key); return(string.Format("<a href='{0}'>{1}</a>", f.GetUrl(false), f.Jmeno)); }, OrderValueRender = (s) => HlidacStatu.Lib.Data.Firmy.GetJmeno(s.Key), ValueRender = (s) => HlidacStatu.Lib.Data.Firmy.GetJmeno(s.Key), TextRender = (s) => HlidacStatu.Lib.Data.Firmy.GetJmeno(s.Key) }); for (int y = minDateYear.Value; y <= maxDateYear.Value; y++) { int year = y; coreColumns.Add( new ReportDataSource <KeyValuePair <string, HlidacStatu.Lib.Analysis.ComplexStatistic <T> > > .Column() { Id = "Cena_Y_" + year, Name = $"Smlouvy {year} v {scale.ToNiceDisplayName()} Kč", HtmlRender = (s) => HlidacStatu.Util.RenderData.ShortNicePrice(s.Value.BasicStatPerYear[year].CelkemCena, mena: "", html: true, showDecimal: HlidacStatu.Util.RenderData.ShowDecimalVal.Show, exactScale: scale, hideSuffix: true), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value.BasicStatPerYear[year].CelkemCena), TextRender = (s) => HlidacStatu.Util.RenderData.ShortNicePrice(s.Value.BasicStatPerYear[year].CelkemCena, mena: "", html: false, showDecimal: HlidacStatu.Util.RenderData.ShowDecimalVal.Show, exactScale: scale, hideSuffix: true), ValueRender = (s) => s.Value.BasicStatPerYear[year].CelkemCena, CssClass = "number" } ); coreColumns.Add( new ReportDataSource <KeyValuePair <string, HlidacStatu.Lib.Analysis.ComplexStatistic <T> > > .Column() { Id = "Pocet_Y_" + year, Name = $"Počet smluv v {year} ", HtmlRender = (s) => HlidacStatu.Util.RenderData.NiceNumber(s.Value.BasicStatPerYear[year].Pocet, html: true), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value.BasicStatPerYear[year].Pocet), TextRender = (s) => HlidacStatu.Util.RenderData.NiceNumber(s.Value.BasicStatPerYear[year].Pocet, html: false), ValueRender = (s) => s.Value.BasicStatPerYear[year].Pocet, CssClass = "number" } ); coreColumns.Add( new ReportDataSource <KeyValuePair <string, HlidacStatu.Lib.Analysis.ComplexStatistic <T> > > .Column() { Id = "PercentBezCeny_Y_" + year, Name = $"Smluv bez ceny za {year} v %", HtmlRender = (s) => s.Value.RatingPerYear.Data[year].PercentBezCeny.ToString("P2"), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value.RatingPerYear.Data[year].PercentBezCeny), ValueRender = (s) => (s.Value.RatingPerYear.Data[year].PercentBezCeny * 100).ToString(HlidacStatu.Util.Consts.enCulture), TextRender = (s) => s.Value.RatingPerYear.Data[year].PercentBezCeny.ToString("P2"), CssClass = "number" }); coreColumns.Add( new ReportDataSource <KeyValuePair <string, HlidacStatu.Lib.Analysis.ComplexStatistic <T> > > .Column() { Id = "PercentSPolitiky_Y_" + year, Name = $"Smluv bez ceny za {year} v %", HtmlRender = (s) => s.Value.RatingPerYear.Data[year].PercentSPolitiky.ToString("P2"), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value.RatingPerYear.Data[year].PercentSPolitiky), ValueRender = (s) => (s.Value.RatingPerYear.Data[year].PercentSPolitiky * 100).ToString(HlidacStatu.Util.Consts.enCulture), TextRender = (s) => s.Value.RatingPerYear.Data[year].PercentSPolitiky.ToString("P2"), CssClass = "number" }); coreColumns.Add( new ReportDataSource <KeyValuePair <string, HlidacStatu.Lib.Analysis.ComplexStatistic <T> > > .Column() { Id = "SumKcSPolitiky_Y_" + year, Name = $"Smluv bez ceny za {year} v %", HtmlRender = (s) => s.Value.RatingPerYear.Data[year].SumKcSPolitiky.ToString("P2"), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value.RatingPerYear.Data[year].SumKcSPolitiky), ValueRender = (s) => (s.Value.RatingPerYear.Data[year].SumKcSPolitiky * 100).ToString(HlidacStatu.Util.Consts.enCulture), TextRender = (s) => s.Value.RatingPerYear.Data[year].SumKcSPolitiky.ToString("P2"), CssClass = "number" }); if (year > minDateYear) { coreColumns.Add( new ReportDataSource <KeyValuePair <string, HlidacStatu.Lib.Analysis.ComplexStatistic <T> > > .Column() { Id = "CenaChangePercent_Y_" + year, Name = $"Změna hodnoty smlouvy {year - 1}-{year}", HtmlRender = (s) => s.Value.BasicStatPerYear.YearChange(year).CenaChangePercentToSymbolString(true), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value.BasicStatPerYear.YearChange(year).CenaChangePerc), ValueRender = (s) => (s.Value.BasicStatPerYear.YearChange(year).CenaChangePerc * 100).ToString(HlidacStatu.Util.Consts.enCulture), TextRender = (s) => (s.Value.BasicStatPerYear.YearChange(year).CenaChangePerc).ToString("P2"), CssClass = "number" } ); } } ; coreColumns.Add( new ReportDataSource <KeyValuePair <string, HlidacStatu.Lib.Analysis.ComplexStatistic <T> > > .Column() { Id = "CenaCelkem", Name = $"Smlouvy 2016-18 v {scale.ToNiceDisplayName()} Kč", HtmlRender = (s) => HlidacStatu.Util.RenderData.ShortNicePrice(s.Value.BasicStatPerYear.Summary.CelkemCena, mena: "", html: true, showDecimal: HlidacStatu.Util.RenderData.ShowDecimalVal.Show, exactScale: scale, hideSuffix: true), OrderValueRender = (s) => HlidacStatu.Util.RenderData.OrderValueFormat(s.Value.BasicStatPerYear.Summary.CelkemCena), CssClass = "number" }); return(coreColumns); }