コード例 #1
0
            public static string fn_RenderCompanyWithLink(string ico, string missingCompanyName = "")
            {
                if (!string.IsNullOrEmpty(ico))
                {
                    HlidacStatu.Lib.Data.Firma o = HlidacStatu.Lib.Data.Firmy.instanceByIco.Get(ico);
                    if (o.Valid)
                    {
                        //var lbl = Lib.Analysis.KorupcniRiziko.KIndex.GetLastLabel(ico);
                        //string skidx = "";
                        //if (lbl != null && lbl.Item2 != Lib.Analysis.KorupcniRiziko.KIndexData.KIndexLabelValues.None)
                        //{
                        //    skidx = $"<a href='/kindex/detail/{ico}'>"
                        //        + $"<img src='{Lib.Analysis.KorupcniRiziko.KIndexData.KIndexLabelIconUrl(lbl.Item2)}' class='kindex' style='padding:0 3px;height:15px;width:auto' />"
                        //        + "</a>";
                        //}

                        return($"<span>"
                               //+ skidx //TODO KIDX
                               + $"<a href=\"{o.GetUrl(false)}\">{o.Jmeno}</a></span>");
                    }
                    else
                    {
                        return($"<span>{(string.IsNullOrEmpty(missingCompanyName)? ico : missingCompanyName)}</span>");
                    }
                }
                return(string.Empty);
            }
コード例 #2
0
        public static ReportDataSource TopListPerSum(bool platce)
        {
            string field = "prijemce.ico";

            if (platce)
            {
                field = "platce.ico";
            }

            int size = 300;
            AggregationContainerDescriptor <HlidacStatu.Lib.Data.Smlouva> aggs = new AggregationContainerDescriptor <HlidacStatu.Lib.Data.Smlouva>()
                                                                                 .Terms("perPrice", m => m
                                                                                        .Order(o => o.Descending("sumincome"))
                                                                                        .Field(field)
                                                                                        .Size(size)
                                                                                        .Aggregations(agg => agg
                                                                                                      .Sum("sumincome", s => s
                                                                                                           .Field(ff => ff.CalculatedPriceWithVATinCZK)
                                                                                                           )
                                                                                                      )
                                                                                        );

            var res = HlidacStatu.Lib.Data.Smlouva.Search.RawSearch("{\"query_string\": { \"query\": \"-id:pre*\" } }", 1, 0, anyAggregation: aggs);

            ReportDataSource rdsPerPrice = new ReportDataSource(new ReportDataSource.Column[]
            {
                new ReportDataSource.Column()
                {
                    Name       = "IČO",
                    HtmlRender = (s) => {
                        System.Tuple <string, string> data = (System.Tuple <string, string>)s;
                        return(string.Format("<a href='/subjekt/{0}'>{1}</a>", data.Item2, data.Item1.Replace("&", "&amp;")));
                    },
                    TextRender = (s) => { return(((System.Tuple <string, string>)s).Item1.ToString()); }
                },
                new ReportDataSource.Column()
                {
                    Name             = "Součet cen",
                    HtmlRender       = (s) => { return(HlidacStatu.Lib.Data.Smlouva.NicePrice((double?)s, html: true, shortFormat: true)); },
                    OrderValueRender = (s) => { return(HlidacStatu.Util.RenderData.OrderValueFormat((double?)s)); }
                },
            }
                                                                );;;

            foreach (Nest.KeyedBucket <object> val in ((BucketAggregate)res.Aggregations["perPrice"]).Items)
            {
                HlidacStatu.Lib.Data.Firma f = HlidacStatu.Lib.Data.Firmy.Get((string)val.Key);
                if (f != null && (!f.PatrimStatu() || platce))
                {
                    rdsPerPrice.AddRow(
                        new Tuple <string, string>(HlidacStatu.Lib.Data.Firmy.GetJmeno((string)val.Key), (string)val.Key),
                        val.Sum("sumincome").Value
                        );
                }
            }


            return(rdsPerPrice);
        }
コード例 #3
0
        public static ReportDataSource TopListPerCount(bool platce)
        {
            string field = "prijemce.ico";

            if (platce)
            {
                field = "platce.ico";
            }

            int size = 300;
            AggregationContainerDescriptor <HlidacStatu.Lib.Data.Smlouva> aggs = new AggregationContainerDescriptor <HlidacStatu.Lib.Data.Smlouva>()
                                                                                 .Terms("perIco", m => m
                                                                                        .Field(field)
                                                                                        .Size(size)
                                                                                        );

            var res = HlidacStatu.Lib.Data.Smlouva.Search.RawSearch("{\"query_string\": { \"query\": \"-id:pre*\" } }", 1, 0, anyAggregation: aggs);

            ReportDataSource rdsPerIco = new ReportDataSource(new ReportDataSource.Column[]
            {
                new ReportDataSource.Column()
                {
                    Name       = "IČO",
                    HtmlRender = (s) => {
                        System.Tuple <string, string> data = (System.Tuple <string, string>)s;
                        return(string.Format("<a href='/subjekt/{0}'>{1}</a>", data.Item2, data.Item1.Replace("&", "&amp;")));
                    },
                    TextRender = (s) => { return(((System.Tuple <string, string>)s).Item1.ToString()); }
                },
                new ReportDataSource.Column()
                {
                    Name             = "Počet smluv",
                    HtmlRender       = (s) => { return(HlidacStatu.Util.RenderData.NiceNumber(HlidacStatu.Util.ParseTools.ToDecimal((string)s) ?? 0, html: true)); },
                    OrderValueRender = (s) => { return(HlidacStatu.Util.RenderData.OrderValueFormat(HlidacStatu.Util.ParseTools.ToDecimal((string)s) ?? 0)); }
                },
            }
                                                              );

            foreach (Nest.KeyedBucket <object> val in ((BucketAggregate)res.Aggregations["perIco"]).Items)
            {
                HlidacStatu.Lib.Data.Firma f = HlidacStatu.Lib.Data.Firmy.Get((string)val.Key);
                if (f != null && (!f.PatrimStatu() || platce))
                {
                    rdsPerIco.AddRow(
                        new Tuple <string, string>(HlidacStatu.Lib.Data.Firmy.GetJmeno((string)val.Key), (string)val.Key),
                        val.DocCount.ToString()
                        );
                }
            }

            return(rdsPerIco);
        }
コード例 #4
0
 public static string fn_RenderCompanyName(string ico, string missingCompanyName = "")
 {
     if (!string.IsNullOrEmpty(ico))
     {
         HlidacStatu.Lib.Data.Firma o = HlidacStatu.Lib.Data.Firmy.instanceByIco.Get(ico);
         if (o.Valid)
         {
             return($"<span>{o.Jmeno}</span>");
         }
         else
         {
             return($"<span>{(string.IsNullOrEmpty(missingCompanyName) ? ico : missingCompanyName)}</span>");
         }
     }
     return(string.Empty);
 }
コード例 #5
0
 public static string fn_RenderCompanyWithLink(string ico)
 {
     if (!string.IsNullOrEmpty(ico))
     {
         HlidacStatu.Lib.Data.Firma o = HlidacStatu.Lib.Data.Firmy.instanceByIco.Get(ico);
         if (o.Valid)
         {
             return($"<span><a href=\"{o.GetUrl(false)}\">{o.Jmeno}</a></span>");
         }
         else
         {
             return($"<span>{ico}</span>");
         }
     }
     return(string.Empty);
 }
コード例 #6
0
 public static string fn_RenderCompanyStatistic(string ico, bool twoLines = false, string prefix = "", string postfix = "")
 {
     if (!string.IsNullOrEmpty(ico))
     {
         HlidacStatu.Lib.Data.Firma o = HlidacStatu.Lib.Data.Firmy.instanceByIco.Get(ico);
         if (o.Valid)
         {
             var stat = o.Statistic();
             return($"<span>{prefix}{stat.BasicStatPerYear.SummaryAfter2016().ToNiceString(o, true, customUrl: "/hledatSmlouvy?q=ico:" + o.ICO, twoLines: twoLines)}{postfix}</span>");
         }
         else
         {
             return($"");
         }
     }
     return(string.Empty);
 }
コード例 #7
0
        public void CheckSubjekt(Lib.Data.Smlouva.Subjekt d, Lib.Data.Smlouva item, ref List <Issue> issues)
        {
            List <Issue> tmpIss = new List <Issue>();

            bool   osoba = false;
            bool   isZahranicniSubjekt = false;
            string lnazev = d.nazev.ToLowerInvariant();

            isZahranicniSubjekt = (lnazev.Contains("ltd.") || lnazev.Contains("inc.") || lnazev.Contains("gmbh"));

            isZahranicniSubjekt = isZahranicniSubjekt || HlidacStatu.Util.DataValidators.IsZahranicniAdresa(d.adresa);

            //zjisti, zda nejde o 340/2015
            string dnazev = Devmasters.TextUtil.RemoveDiacritics(d.nazev).Trim();

            // obchodní tajemství
            string[] obchodni_taj_regex = new string[] {
                "340\\s* / \\s*2015",
                "(obchodni|bankovni|) \\s* (tajemstvi)",
                "nezverejnuje",
                "fyzicka \\s* osoba",
                "§ \\s* 5 \\s* odst.\\s*",
                "vylouceno \\s* z \\s* uverejneni"
            };
            bool obchodni_tajemstvi = false;

            foreach (var r in obchodni_taj_regex)
            {
                if (System.Text.RegularExpressions.Regex.IsMatch(dnazev, r, regexOptions))
                {
                    obchodni_tajemstvi = true;
                    break;
                }
            }


            bool hasIco = false;
            bool hasDS  = false;

            if (string.IsNullOrEmpty(d.ico))
            {
                //tmpIss.Add(new Issue(this,16, "Chybí IČO", string.Format("Neuvedeno IČO u dodavatele '{0}'", d.nazev)));
            }
            else if (Util.DataValidators.CheckCZICO(d.ico) == false && Util.DataValidators.IsZahranicniAdresa(d.ico) == false)
            {
                tmpIss.Add(new Issue(this, (int)IssueType.IssueTypes.Vadne_ICO, "Vadné IČO", string.Format("Subjekt '{0}' má neplatné IČO", d.nazev)));
            }
            else
            {
                hasIco = true;
            }

            if (hasIco && Util.DataValidators.IsZahranicniAdresa(d.ico) == false)
            {
                //check ICO in registers
                Lib.Data.Firma f = Lib.Data.Firma.FromIco(d.ico, true);
                if (!Lib.Data.Firma.IsValid(f))
                {
                    issues.Add(new Issue(this, (int)IssueType.IssueTypes.Neexistujici_ICO, "Neexistující IČO", string.Format("Subjekt '{0}' má neexistující IČO", d.nazev)));
                    hasIco = false;
                }
            }

            if (string.IsNullOrEmpty(d.datovaSchranka))
            {
                //tmpIss.Add(new Issue(this, "Chybí datová schránka", string.Format("Dodavatel '{0}' bez datove schránky", d.nazev)));
            }
            else
            {
                hasDS = true;
            }



            if (hasDS == false && hasIco == false && string.IsNullOrEmpty(d.nazev))
            {
                issues.Add(new Issue(this, (int)IssueType.IssueTypes.Zcela_Chybi_identifikace_smluvni_strany, "Chybí identifikace smluvní strany", "Smluvní strana není nijak identifikována"));
            }
            else if (hasDS == false && hasIco == false && !string.IsNullOrEmpty(d.nazev))
            {
                if (obchodni_tajemstvi)
                {
                    issues.Add(new Issue(this, (int)IssueType.IssueTypes.NeverejnyUdaj, "Identifikace smluvní strany", "Údaj není veřejný na základě § 5 odst. 6 zákona č. 340/2015 Sb., o registru smluv. Utajení smluvní strany je možné pouze v odůvodněných případech, což při této kontrole nehodnotíme."));
                }
                else if (isZahranicniSubjekt)
                {
                    issues.Add(new Issue(this, (int)IssueType.IssueTypes.Firma_Cizi_Stat, "Identifikace smluvní strany", string.Format("Smluvní strana '{0}' bez datove schránky a platného IČO. Jedná se pravděpodobně o zahraniční subjekt", d.nazev)));
                }
                else
                {
                    //zjisti, zda nejde o osobu
                    osoba = Lib.Validators.IsOsoba(dnazev);


                    if (osoba)
                    {
                        issues.Add(new Issue(this, (int)IssueType.IssueTypes.Osoba, "Identifikace smluvní strany", string.Format("Smluvní strana '{0}' bez datove schránky a platného IČO. Jedná se pravděpodobně o fyzickou osobu", d.nazev)));
                    }
                    else
                    {
                        issues.Add(new Issue(this, (int)IssueType.IssueTypes.Chybi_identifikace_smluvni_strany, "Chybí identifikace smluvní strany", string.Format("Smluvní strana '{0}' bez datove schránky a platného IČO.", d.nazev)));
                    }
                }
            }
            else
            {
                issues.AddRange(tmpIss);
            }


            //casove posloupnosti

            //datum vzniku firmy
            HlidacStatu.Lib.Data.Firma firma = null;
            if (hasIco)
            {
                firma = Lib.Data.Firma.FromIco(d.ico, true);
            }
            if (!Lib.Data.Firma.IsValid(firma) && hasDS)
            {
                firma = Lib.Data.Firma.FromDS(d.datovaSchranka, true);
            }

            if (Lib.Data.Firma.IsValid(firma))
            {
                if (firma.IsNespolehlivyPlatceDPH())
                {
                    var nespoleh = firma.NespolehlivyPlatceDPH();
                    if ((nespoleh.FromDate.HasValue && nespoleh.ToDate.HasValue &&
                         nespoleh.FromDate.Value <= item.datumUzavreni && item.datumUzavreni <= nespoleh.ToDate.Value
                         )
                        ||
                        (nespoleh.FromDate.HasValue && nespoleh.ToDate.HasValue == false &&
                         nespoleh.FromDate.Value <= item.datumUzavreni
                        )
                        )
                    {
                        issues.Add(new Issue(this,
                                             (int)IssueType.IssueTypes.SmlouvaUzavrena_s_NespolehlivymPlatcemDPH,
                                             "Smlouva uzavřena s nespolehlivým plátcem DPH.",
                                             string.Format("Smlouva byla uzavřena v den, kdy byl dodavatel {0} v registru nespolehlivých plátců DPH Finanční správy.", d.nazev)));
                    }
                }
            }

            if (Lib.Data.Firma.IsValid(firma) && firma.Datum_Zapisu_OR.HasValue)
            {
                double zalozeniPredPodpisem = (item.datumUzavreni - firma.Datum_Zapisu_OR.Value).TotalDays;

                if (zalozeniPredPodpisem < 0) //zalozeno po podpisu
                {
                    issues.Add(new Issue(this, (int)IssueType.IssueTypes.Firma_vznikla_az_po, "Firma vznikla až po podpisu smlouvy",
                                         string.Format("Firma {0} vznikla {1} dní po podpisu smlouvy", d.nazev, Math.Abs((int)zalozeniPredPodpisem)),
                                         null, new { days = (int)zalozeniPredPodpisem }
                                         ));
                }
                else if (zalozeniPredPodpisem < 60)
                {
                    issues.Add(new Issue(this, (int)IssueType.IssueTypes.Firma_vznikla_kratce_pred, "Firma vznikla krátce před podpisem smlouvy",
                                         string.Format("Firma {0} vznikla {1} dní před podpisem smlouvy", d.nazev, (int)zalozeniPredPodpisem),
                                         null, new { days = (int)zalozeniPredPodpisem }, false
                                         ));
                }
            }
        }