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); }
public static void SumEsAfaEsTermekdij(BizonylatDto bizonylatDto, List <BizonylatTetelDto> lstBizonylatTetelDto, List <BizonylatAfaDto> lstBizonylatAfaDto, List <BizonylatTermekdijDto> lstBizonylatTermekdijDto) { lstBizonylatAfaDto.Clear(); lstBizonylatTermekdijDto.Clear(); var mire = bizonylatDto.Penznem == "HUF" ? 1m : 0.01m; var afaBontas = lstBizonylatTetelDto.GroupBy(s => new { s.Afakulcskod, s.Afakulcs, s.Afamerteke }) .Select(t => new { t.Key.Afakulcskod, t.Key.Afakulcs, t.Key.Afamerteke, NETTO = t.Sum(k => k.Netto), AFA = t.Sum(k => k.Afa) }); foreach (var ab in afaBontas.OrderBy(s => s.Afakulcs)) { var bizonylatAfaDto = new BizonylatAfaDto { Afakulcskod = ab.Afakulcskod, Afakulcs = ab.Afakulcs, Afamerteke = ab.Afamerteke, Netto = Calc.RealRound(ab.NETTO, mire), Afa = Calc.RealRound(ab.AFA, mire) }; bizonylatAfaDto.Brutto = bizonylatAfaDto.Netto + bizonylatAfaDto.Afa; lstBizonylatAfaDto.Add(bizonylatAfaDto); } var termekdijBontas = lstBizonylatTetelDto .Where(s => s.Termekdijas) .GroupBy(s => new { s.Termekdijkod, s.Termekdijkt, s.Termekdijmegnevezes, s.Termekdijegysegar }) .Select(t => new { OSSZTOMEGKG = t.Sum(k => k.Ossztomegkg), t.Key.Termekdijkod, t.Key.Termekdijkt, t.Key.Termekdijmegnevezes, t.Key.Termekdijegysegar, TERMEKDIJ = t.Sum(k => k.Termekdij) }); foreach (var tb in termekdijBontas.OrderBy(s => s.Termekdijkt)) { lstBizonylatTermekdijDto.Add(new BizonylatTermekdijDto { Ossztomegkg = tb.OSSZTOMEGKG, Termekdijkod = (int)tb.Termekdijkod, Termekdijkt = tb.Termekdijkt, Termekdijmegnevezes = tb.Termekdijmegnevezes, Termekdijegysegar = (decimal)tb.Termekdijegysegar, //TERMEKDIJ = Calc.RealRound((decimal) tb.TERMEKDIJ, mire) //navfeltöltés miatt Termekdij = (decimal)tb.TERMEKDIJ }); } bizonylatDto.Netto = lstBizonylatAfaDto.Sum(s => s.Netto); bizonylatDto.Afa = lstBizonylatAfaDto.Sum(s => s.Afa); bizonylatDto.Brutto = lstBizonylatAfaDto.Sum(s => s.Brutto); bizonylatDto.Termekdij = lstBizonylatTermekdijDto.Sum(s => s.Termekdij); bizonylatDto.Azaz = Azaz.Szovegge(bizonylatDto.Brutto); }