Beispiel #1
0
        public static async Task <int> StornoAsync(ossContext context, string sid, BizonylatDto dto)
        {
            SessionBll.Check(context, sid);
            await CsoportDal.JogeAsync(context, JogKod.BIZONYLATMOD);

            await BizonylatDal.Lock(context, dto.Bizonylatkod, dto.Modositva);

            //a fej/tételek/áfa lekérése/módosítása/hozzáadása lépésenként
            var stornozando = await BizonylatDal.GetAsync(context, dto.Bizonylatkod);

            if (stornozando.Bizonylatszam == null)
            {
                throw new Exception("Lezáratlan bizonylatot nem lehet stornozni!");
            }
            if (stornozando.Ezstornozott)
            {
                throw new Exception("A bizonylat már stornozott!");
            }

            //ha díjbekérő -> nem jön létre másik bizonylat
            if (stornozando.Bizonylattipuskod == (int)BizonylatTipus.DijBekero)
            {
                stornozando.Ezstornozott = true;
                await BizonylatDal.UpdateAsync(context, stornozando);

                return(0);
            }

            var stornozo = ObjectUtils.Clone(stornozando);

            stornozo.Bizonylatszam          = GenerateBizonylatszam(context, stornozo.Bizonylattipuskod);
            stornozo.Megjegyzesfej          = $"A(z) {stornozando.Bizonylatszam} számú bizonylat stornója.";
            stornozo.Netto                  = -stornozo.Netto;
            stornozo.Afa                    = -stornozo.Afa;
            stornozo.Brutto                 = -stornozo.Brutto;
            stornozo.Termekdij              = -stornozo.Termekdij;
            stornozo.Ezstornozo             = true;
            stornozo.Stornozottbizonylatkod = stornozando.Bizonylatkod;
            stornozo.Bizonylatkelte         = DateTime.Today;
            // Stornónál a teljesítés kelte és a fizetési határidő ugyanaz kell hogy maradjon!
            stornozo.Azaz = Azaz.Szovegge(stornozo.Brutto);

            await BizonylatDal.AddAsync(context, stornozo);

            //a tételek lekérése/másolása/módosítása/hozzáadása lépésenként
            var stornozoTetel = BizonylatTetelDal.Select(context, dto.Bizonylatkod);

            foreach (var t in stornozoTetel)
            {
                var tetel = ObjectUtils.Clone(t);

                tetel.Bizonylatkod = stornozo.Bizonylatkod;
                tetel.Mennyiseg    = -tetel.Mennyiseg;
                tetel.Netto        = -tetel.Netto;
                tetel.Afa          = -tetel.Afa;
                tetel.Brutto       = -tetel.Brutto;

                tetel.Ossztomegkg = -tetel.Ossztomegkg;
                tetel.Termekdij   = -tetel.Termekdij;

                await BizonylatTetelDal.AddAsync(context, tetel);
            }

            //az áfa lekérése/másolása/módosítása/hozzáadása lépésenként
            var stornozoAfa = BizonylatAfaDal.Select(context, dto.Bizonylatkod);

            foreach (var t in stornozoAfa)
            {
                var afa = ObjectUtils.Clone(t);

                afa.Bizonylatkod = stornozo.Bizonylatkod;
                afa.Netto        = -afa.Netto;
                afa.Afa          = -afa.Afa;
                afa.Brutto       = -afa.Brutto;

                await BizonylatAfaDal.AddAsync(context, afa);
            }

            //termékdíj másolása
            var stornozotermekdij = BizonylatTermekdijDal.Select(context, dto.Bizonylatkod);

            foreach (var t in stornozotermekdij)
            {
                var termekdij = ObjectUtils.Clone(t);

                termekdij.Bizonylatkod = stornozo.Bizonylatkod;
                termekdij.Ossztomegkg  = -termekdij.Ossztomegkg;
                termekdij.Termekdij    = -termekdij.Termekdij;

                await BizonylatTermekdijDal.AddAsync(context, termekdij);
            }

            //az eredetiben ennyi módosítás
            stornozando.Ezstornozott         = true;
            stornozando.Stornozobizonylatkod = stornozo.Bizonylatkod;
            await BizonylatDal.UpdateAsync(context, stornozando);

            return(stornozo.Bizonylatkod);
        }