public ZwrotAnalizaDokHandlowyCollectionOld GetContainsPozycja(PozycjaZwrotuAnalizaOld pozycja)
        {
            ZwrotAnalizaDokHandlowyCollectionOld list = new ZwrotAnalizaDokHandlowyCollectionOld();

            foreach (ZwrotAnalizaDokHandlowyOld item in this.List)
            {
                if (item.Contains(pozycja))
                {
                    list.AddItem(item);
                }
            }
            return(list);
        }
Пример #2
0
        public ZwrotAnaliza AnalizujZwrot(Session session)
        {
            if (this.Kontrahent != null)
            {
                var kontrahent = this.Kontrahent.GetKontrahentEnova((EnovaContext)session.DataContext);
                if (kontrahent != null)
                {
                    ZwrotAnaliza analiza = new ZwrotAnaliza();

                    var pozycje = this.GetPozycjeEnova((EnovaContext)session.DataContext);

                    var hm = Enova.Old.Handel.HandelModule.GetInstance(session);

                    var defFV = hm.DefDokHandlowych.FakturaSprzedaży;

                    DateTime dateFrom = this.DataDodania.AddDays(-IloscDniAnalizy);

                    ZwrotAnalizaDokHandlowyCollectionOld dokumenty = new ZwrotAnalizaDokHandlowyCollectionOld();

                    foreach (var pozycja in pozycje)
                    {
                        pozycja.PozycjeDokHan = pozycja.Towar.PozycjeDokHandlowych.WgDefDokHan[defFV].WgDaty[dateFrom].WgKontrahenta[kontrahent]
                                                .WgStanuDokHan[StanDokumentuHandlowego.Zatwierdzony];

                        if (pozycja.PozycjeDokHan.Count() == 0)
                        {
                            var zamienniki = pozycja.Towar.ZamiennikiTowaru.Select(zt => zt.Zamiennik).ToList();
                            foreach (var z in zamienniki)
                            {
                                var pozDok = z.PozycjeDokHandlowych.WgDefDokHan[defFV].WgDaty[dateFrom].WgKontrahenta[kontrahent].WgStanuDokHan[StanDokumentuHandlowego.Zatwierdzony];
                                if (pozDok.Count() > 0)
                                {
                                    pozycja.Towar         = z;
                                    pozycja.PozycjeDokHan = pozDok;
                                    break;
                                }
                            }
                        }
                        else
                        {
                            var iloscPoKorektachSuma = pozycja.PozycjeDokHan.ToList().Sum(p => p.IloscPoKorektach);
                            if (iloscPoKorektachSuma < pozycja.Ilosc)
                            {
                                var zamienniki = pozycja.Towar.ZamiennikiTowaru.Select(zt => zt.Zamiennik).ToList();
                                foreach (var z in zamienniki)
                                {
                                    var pozDok = z.PozycjeDokHandlowych.WgDefDokHan[defFV].WgDaty[dateFrom].WgKontrahenta[kontrahent].WgStanuDokHan[StanDokumentuHandlowego.Zatwierdzony];
                                    if (pozDok.Count() > 0)
                                    {
                                        var iloscZamPoKorektachSuma = pozDok.ToList().Sum(p => p.IloscPoKorektach);
                                        if (iloscZamPoKorektachSuma >= pozycja.Ilosc)
                                        {
                                            pozycja.Towar         = z;
                                            pozycja.PozycjeDokHan = pozDok;
                                            break;
                                        }
                                    }
                                }
                            }
                        }



                        pozycja.DokHandlowe = pozycja.PozycjeDokHan.ToList().Select(p => p.Dokument);


                        foreach (var dh in pozycja.DokHandlowe)
                        {
                            dokumenty.Add(dh, pozycja);
                        }
                    }

                    dokumenty = dokumenty.GetOrderByDataDesc();

                    Type ptype = typeof(PozycjaZwrotuAnalizaOld);

                    foreach (var pozycja in pozycje)
                    {
                        pozycja.DokHandloweAnaliza = dokumenty.GetContainsPozycja(pozycja).GetOrderByDescIloscPozycji();

                        foreach (var dh in pozycja.DokHandlowe)
                        {
                            int idx = dokumenty.IndexOf(dh);
                            if (idx <= 9)
                            {
                                var pdh      = pozycja.PozycjeDokHan.WgDokument[dh].First();
                                var pkorekty = pdh.PozycjaKorygującaOstatnia;
                                var ilosc    = pkorekty != null ? pkorekty.IloscValue : pdh.IloscValue;
                                var pinfo    = ptype.GetProperty("Dokument" + idx.ToString());
                                var piinfo   = ptype.GetProperty("Dokument" + idx.ToString() + "Ilosc");
                                if (pinfo != null)
                                {
                                    pinfo.SetValue(pozycja, dh, null);
                                }
                                if (piinfo != null)
                                {
                                    piinfo.SetValue(pozycja, ilosc, null);
                                }
                            }
                        }
                    }

                    analiza.Dokumenty = dokumenty;
                    analiza.Pozycje   = pozycje;


                    return(analiza);
                }
            }
            return(null);
        }