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); }