public static void Izvrsi(StornoCmd cmd) { IzvrsiInternal(cmd); }
private static Dictionary <string, List <string> > IzvrsiInternal(StornoCmd cmd, bool validacija = false) { var rezultat = new Dictionary <string, List <string> >(); using (var context = new ExchangeDbContext()) { var transakcija = context.Transakcije.FirstOrDefault(it => it.Id == cmd.IdTransakcije); if (transakcija == null) { DodajValidacionuGresku(rezultat, "", $"Transakcija sa Id-jem {cmd.IdTransakcije} ne postoji!!!"); if (validacija == false) { throw new Exception($"Transakcija sa Id-jem {cmd.IdTransakcije} ne postoji!!!"); } } else { transakcija.Stornirana = true; if (cmd.Opis != null) { transakcija.Opis = cmd.Opis; } var brojac = transakcija.FinansijskeTransakcije.Max(it => it.Redosled); var stornoFinansijskeTransakcije = transakcija.FinansijskeTransakcije.Select( it => new FinansijskaTransakcija { Redosled = ++brojac, Iznos = it.Iznos, Smer = (it.Smer == SmerFinansijskeTransakcije.Ulaz) ? SmerFinansijskeTransakcije.Izlaz : SmerFinansijskeTransakcije.Ulaz, SifraValuteRacunaBlagajne = it.SifraValuteRacunaBlagajne }).ToList(); foreach (var finansijskaTransakcija in stornoFinansijskeTransakcije) { var racun = context.RacuniBlagajne.FirstOrDefault(it => it.SifraValute.ToLower().Trim() == finansijskaTransakcija.SifraValuteRacunaBlagajne.ToLower().Trim()); if (racun == null) { DodajValidacionuGresku(rezultat, "", $"Ne postoji racun za valutu {finansijskaTransakcija.SifraValuteRacunaBlagajne}!!!"); if (validacija == false) { throw new Exception($"Ne postoji racun za valutu {finansijskaTransakcija.SifraValuteRacunaBlagajne}!!!"); } } else { if (racun.Stanje < finansijskaTransakcija.Iznos) { DodajValidacionuGresku(rezultat, "", $"Nema dovoljno sredstava na racunu {racun.SifraValute}!!!"); if (validacija == false) { throw new Exception($"Nema dovoljno sredstava na racunu {racun.SifraValute}!!!"); } } else { switch (finansijskaTransakcija.Smer) { case SmerFinansijskeTransakcije.Izlaz: racun.Stanje -= finansijskaTransakcija.Iznos; break; default: racun.Stanje += finansijskaTransakcija.Iznos; break; } transakcija.FinansijskeTransakcije.Add(finansijskaTransakcija); } } } if (validacija == false) { context.SaveChanges(); } } } return(rezultat); }
public static Dictionary <string, List <string> > Validiraj(StornoCmd cmd) { return(IzvrsiInternal(cmd)); }