示例#1
0
        public static Tuple <VazbyFiremNaUradyStat, VazbyFiremNaUradyStat> UradyObchodujiciSFirmami_NespolehlivymiPlatciDPH(bool showProgress = false)
        {
            var nespolehliveFirmy = StaticData.NespolehlivyPlatciDPH.Get();

            Dictionary <string, Analysis.BasicDataForSubject <List <Analysis.BasicData <string> > > > uradyData
                = new Dictionary <string, Analysis.BasicDataForSubject <List <Analysis.BasicData <string> > > >();

            Dictionary <string, Analysis.BasicDataForSubject <List <Analysis.BasicData <string> > > > nespolehliveFirmyKontrakty
                = new Dictionary <string, Analysis.BasicDataForSubject <List <Analysis.BasicData <string> > > >();

            var lockObj = new object();

            Devmasters.Batch.Manager.DoActionForAll <NespolehlivyPlatceDPH>(nespolehliveFirmy.Values,
                                                                            (nf) =>
            {
                var nespolehlivaFirma = Firmy.Get(nf.Ico);
                var ico     = nf.Ico;
                var smlouvy = SimpleSmlouvyForIco(ico, nf.FromDate, nf.ToDate);
                foreach (var s in smlouvy)
                {
                    var allIco = new List <string>(
                        s.Prijemce.Select(m => m.ico).Where(p => !string.IsNullOrEmpty(p))
                        );
                    allIco.Add(s.Platce.ico);
                    var urady = allIco.Select(i => Firmy.Get(i)).Where(f => f.PatrimStatu());

                    foreach (var urad in urady)
                    {
                        lock (lockObj)
                        {
                            if (!uradyData.ContainsKey(urad.ICO))
                            {
                                uradyData.Add(urad.ICO, new Analysis.BasicDataForSubject <List <Analysis.BasicData <string> > >()
                                {
                                    Item = urad.ICO
                                });
                            }
                            uradyData[urad.ICO].Add(1, s.CalculatedPriceWithVATinCZK);
                            if (!uradyData[urad.ICO].Detail.Any(m => m.Item == ico))
                            {
                                uradyData[urad.ICO].Detail.Add(new Analysis.BasicData <string>()
                                {
                                    Item = ico, CelkemCena = s.CalculatedPriceWithVATinCZK, Pocet = 1
                                });
                            }
                            else
                            {
                                var item = uradyData[urad.ICO].Detail.First(m => m.Item == ico);
                                item.Pocet++;
                                item.CelkemCena += s.CalculatedPriceWithVATinCZK;
                            }

                            //--------------
                            if (!nespolehliveFirmyKontrakty.ContainsKey(ico))
                            {
                                nespolehliveFirmyKontrakty.Add(ico, new Analysis.BasicDataForSubject <List <Analysis.BasicData <string> > >());
                                nespolehliveFirmyKontrakty[ico].Ico = ico;
                            }
                            nespolehliveFirmyKontrakty[ico].Add(1, s.CalculatedPriceWithVATinCZK);
                            if (!nespolehliveFirmyKontrakty[ico].Detail.Any(m => m.Item == urad.ICO))
                            {
                                nespolehliveFirmyKontrakty[ico].Detail.Add(new Analysis.BasicData <string>()
                                {
                                    Item = urad.ICO, CelkemCena = s.CalculatedPriceWithVATinCZK, Pocet = 1
                                });
                            }
                            else
                            {
                                var item = nespolehliveFirmyKontrakty[ico].Detail.First(m => m.Item == urad.ICO);
                                item.Add(1, s.CalculatedPriceWithVATinCZK);
                            }
                        }
                    }
                }

                return(new ActionOutputData());
            },
                                                                            showProgress ? Devmasters.Batch.Manager.DefaultOutputWriter : (Action <string>)null,
                                                                            showProgress ? new Devmasters.Batch.ActionProgressWriter().Write : (Action <ActionProgressData>)null,
                                                                            !System.Diagnostics.Debugger.IsAttached, maxDegreeOfParallelism: 5);

            VazbyFiremNaUradyStat ret = new VazbyFiremNaUradyStat();

            ret.StatniFirmy = uradyData
                              .Where(m => m.Value.Pocet > 0)
                              .Select(kv => kv.Value)
                              .OrderByDescending(o => o.Pocet)
                              .ToList();

            VazbyFiremNaUradyStat retNespolehliveFirmy = new VazbyFiremNaUradyStat();

            retNespolehliveFirmy.SoukromeFirmy = nespolehliveFirmyKontrakty
                                                 .Where(m => m.Value.Pocet > 0)
                                                 .Select(kv => kv.Value)
                                                 .OrderByDescending(o => o.Pocet)
                                                 .ToList();

            return(new Tuple <VazbyFiremNaUradyStat, VazbyFiremNaUradyStat>(ret, retNespolehliveFirmy));
        }
示例#2
0
        public static AnalysisCalculation.VazbyFiremNaUradyStat UradyObchodujiciSFirmami_s_vazbouNaPolitiky(Relation.AktualnostType aktualnost, bool showProgress = false)
        {
            HlidacStatu.Lib.Data.AnalysisCalculation.VazbyFiremNaPolitiky vazbyNaPolitiky = null;
            List <Sponzoring> sponzorujiciFirmy = null;

            QueryContainer qc = null;

            switch (aktualnost)
            {
            case HlidacStatu.Lib.Data.Relation.AktualnostType.Aktualni:
                vazbyNaPolitiky = StaticData.FirmySVazbamiNaPolitiky_aktualni_Cache.Get();
                qc = new QueryContainerDescriptor <HlidacStatu.Lib.Data.Smlouva>().Term(t => t.Field(f => f.SVazbouNaPolitikyAktualni).Value(true));
                sponzorujiciFirmy = StaticData.SponzorujiciFirmy_Nedavne.Get();
                break;

            case HlidacStatu.Lib.Data.Relation.AktualnostType.Nedavny:
                vazbyNaPolitiky = StaticData.FirmySVazbamiNaPolitiky_nedavne_Cache.Get();
                qc = new QueryContainerDescriptor <HlidacStatu.Lib.Data.Smlouva>().Term(t => t.Field(f => f.SVazbouNaPolitikyNedavne).Value(true));
                sponzorujiciFirmy = StaticData.SponzorujiciFirmy_Nedavne.Get();
                break;

            case HlidacStatu.Lib.Data.Relation.AktualnostType.Neaktualni:
            case HlidacStatu.Lib.Data.Relation.AktualnostType.Libovolny:
                vazbyNaPolitiky = StaticData.FirmySVazbamiNaPolitiky_vsechny_Cache.Get();
                qc = new QueryContainerDescriptor <HlidacStatu.Lib.Data.Smlouva>().Term(t => t.Field(f => f.SVazbouNaPolitiky).Value(true));
                sponzorujiciFirmy = StaticData.SponzorujiciFirmy_Vsechny.Get();
                break;
            }


            Func <int, int, Nest.ISearchResponse <Lib.Data.Smlouva> > searchFunc = null;

            searchFunc = (size, page) =>
            {
                return(Lib.ES.Manager.GetESClient().Search <Lib.Data.Smlouva>(a => a
                                                                              .TrackTotalHits(page * size == 0)
                                                                              .Size(size)
                                                                              .From(page * size)
                                                                              .Source(m => m.Excludes(e => e.Field(o => o.Prilohy)))
                                                                              .Query(q => qc)
                                                                              .Scroll("1m")
                                                                              ));
            };


            //TODO predelat z projeti vsech smluv na hledani pres vsechna ICO  v RS, vybrani statnich firem,
            //a dohlednai jejich statistiky vuci jednotlivym ostatnim firmam v RS
            Dictionary <string, Analysis.BasicDataForSubject <List <Analysis.BasicData <string> > > > uradyStatni = new Dictionary <string, Analysis.BasicDataForSubject <List <Analysis.BasicData <string> > > >();
            Dictionary <string, Analysis.BasicDataForSubject <List <Analysis.BasicData <string> > > > uradySoukr  = new Dictionary <string, Analysis.BasicDataForSubject <List <Analysis.BasicData <string> > > >();
            object lockObj = new object();

            Lib.Searching.Tools.DoActionForQuery <Lib.Data.Smlouva>(Lib.ES.Manager.GetESClient(), searchFunc,
                                                                    (hit, param) =>
            {
                Lib.Data.Smlouva s = hit.Source;
                List <string> icos = new List <string>();
                try
                {
                    var objednatelIco = s.Platce.ico;
                    if (!string.IsNullOrEmpty(objednatelIco))
                    {
                        Firma ff = Firmy.Get(objednatelIco);
                        if (!ff.Valid || !ff.PatrimStatu())
                        {
                            goto end;
                        }

                        //vsichni prijemci smlouvy statniho subjektu
                        icos.AddRange(s.Prijemce.Select(m => m.ico).Where(m => !string.IsNullOrEmpty(m)).Distinct());

                        lock (lockObj)
                        {
                            foreach (var ico in icos)
                            {
                                if (vazbyNaPolitiky.SoukromeFirmy.ContainsKey(ico) || sponzorujiciFirmy.Any(m => m.IcoDarce == ico))
                                {
                                    if (!uradySoukr.ContainsKey(objednatelIco))
                                    {
                                        uradySoukr.Add(objednatelIco, new Analysis.BasicDataForSubject <List <Analysis.BasicData <string> > >());
                                        uradySoukr[objednatelIco].Ico = objednatelIco;
                                    }
                                    uradySoukr[objednatelIco].Add(1, s.CalculatedPriceWithVATinCZK);
                                    if (!uradySoukr[objednatelIco].Detail.Any(m => m.Item == ico))
                                    {
                                        uradySoukr[objednatelIco].Detail.Add(new Analysis.BasicData <string>()
                                        {
                                            Item = ico, CelkemCena = s.CalculatedPriceWithVATinCZK, Pocet = 1
                                        });
                                    }
                                    else
                                    {
                                        var item = uradySoukr[objednatelIco].Detail.First(m => m.Item == ico);
                                        item.Add(1, s.CalculatedPriceWithVATinCZK);
                                    }
                                }
                                else if (vazbyNaPolitiky.StatniFirmy.ContainsKey(ico))
                                {
                                    if (!uradyStatni.ContainsKey(objednatelIco))
                                    {
                                        uradyStatni.Add(objednatelIco, new Analysis.BasicDataForSubject <List <Analysis.BasicData <string> > >());
                                        uradyStatni[objednatelIco].Ico = objednatelIco;
                                    }
                                    uradyStatni[objednatelIco].Add(1, s.CalculatedPriceWithVATinCZK);
                                    if (!uradyStatni[objednatelIco].Detail.Any(m => m.Item == ico))
                                    {
                                        uradyStatni[objednatelIco].Detail.Add(new Analysis.BasicData <string>()
                                        {
                                            Item = ico, CelkemCena = s.CalculatedPriceWithVATinCZK, Pocet = 1
                                        });
                                    }
                                    else
                                    {
                                        var item = uradyStatni[objednatelIco].Detail.First(m => m.Item == ico);
                                        item.Add(1, s.CalculatedPriceWithVATinCZK);
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    HlidacStatu.Util.Consts.Logger.Error("ERROR UradyObchodujiciSFirmami_s_vazbouNaPolitiky", e);
                }

                end:
                return(new Devmasters.Batch.ActionOutputData()
                {
                    CancelRunning = false, Log = null
                });
            }, null,
                                                                    showProgress ? Devmasters.Batch.Manager.DefaultOutputWriter : (Action <string>)null,
                                                                    showProgress ? new Devmasters.Batch.ActionProgressWriter().Write : (Action <ActionProgressData>)null
                                                                    , true
                                                                    , prefix: "UradyObchodujiciSFirmami_s_vazbouNaPolitiky " + aktualnost.ToNiceDisplayName()
                                                                    );


            AnalysisCalculation.VazbyFiremNaUradyStat ret = new VazbyFiremNaUradyStat();
            ret.SoukromeFirmy = uradySoukr
                                .Where(m => m.Value.Pocet > 0)
                                .Select(kv => kv.Value)
                                .OrderByDescending(o => o.Pocet);

            return(ret);
        }