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