예제 #1
0
 public OtvoriNalogCommandValidator()
 {
     RuleFor(x => x.DatumNaloga).GreaterThan(DateTime.MinValue).WithMessage("Datum naloga nije validan");
     RuleFor(x => x.IdTip).Must(x => TipNaloga.Get(x) != null).WithMessage("Nepoznat tip naloga");
     RuleFor(x => x.Stavke).NotEmpty().WithMessage("Stavke moraju biti definisane");
     RuleForEach(x => x.Stavke).SetValidator(new InlineValidator <StavkaDTO>()
     {
         v => v.RuleFor(x => x.IdKonto).GreaterThan(0).WithMessage("IdKonto nije validan"),
         v => v.RuleFor(x => x).Must(x => (x.Duguje != 0 && x.Potrazuje == 0) || (x.Duguje == 0 || x.Potrazuje != 0))
         .WithMessage("Dugovna ili potražna strana stavke mora biti definisana")
     });
 }
예제 #2
0
        public async Task <bool> Handle(IzmeniZaglavljeNalogaCommand cmd, CancellationToken cancellationToken)
        {
            var nalog = await nalogRepo.GetAsync(new FinNalogId(cmd.IdNaloga));

            if (nalog == null)
            {
                throw new NalogNePostojiException(cmd.IdNaloga);
            }

            var tip = TipNaloga.Get(cmd.IdTip);
            await nalogSvc.IzmeniZaglavljeAsync(nalog, tip, cmd.DatumNaloga, cmd.Opis);

            await nalogRepo.SaveAsync(nalog, cmd.CommandId, cmd.Version, cmd.UserId);

            return(true);
        }
예제 #3
0
        public async Task <bool> Handle(OtvoriNalogCommand cmd, CancellationToken cancellationToken)
        {
            var tip          = TipNaloga.Get(cmd.IdTip);
            var idPostojeceg = await nalogRepo.GetPostojeciAsync(tip, cmd.DatumNaloga);

            if (idPostojeceg != null)
            {
                throw new KnjizenjeException("Nalog sa istim zaglavljem već postoji");
            }

            var stavke = cmd.Stavke.Select(x => new FinStavka(x.IdKonto, x.Duguje, x.Potrazuje, x.Opis));
            var nalog  = new FinNalog(tip, cmd.DatumNaloga, cmd.Opis, stavke);
            await nalogRepo.SaveAsync(nalog, cmd.CommandId, cmd.Version, cmd.UserId);

            return(true);
        }
예제 #4
0
        public async Task VecPostoji_Greska()
        {
            var cmd           = new OtvoriNalogCommand(Guid.NewGuid(), "1", TipNaloga.UlazneFakture.Id, new DateTime(2018, 10, 20), "opis", new List <StavkaDTO>());
            var nalogIzBazeId = new Mock <FinNalogId>();

            nalogIzBazeId.CallBase = true;
            nalogIzBazeId.SetupGet(x => x.Id).Returns(Guid.NewGuid());
            var fakeNalogRepo = new Mock <IFinNalogRepository>();

            fakeNalogRepo.Setup(x => x.GetPostojeciAsync(TipNaloga.Get(cmd.IdTip), cmd.DatumNaloga)).ReturnsAsync(nalogIzBazeId.Object);
            var fakeLogger = new Mock <ILogger <OtvoriNalogCommandHandler> >();
            var handler    = new OtvoriNalogCommandHandler(fakeNalogRepo.Object, fakeLogger.Object);

            Func <Task> handle = async() => await handler.Handle(cmd, default);

            await Assert.ThrowsAsync <KnjizenjeException>(handle);
        }
예제 #5
0
        public async Task IzmeniZaglavlje_Korektno()
        {
            var nalogIzBaze = FinNalogHelper.NalogFromDb(callBase: false);

            nalogIzBaze.SetupGet(x => x.Tip).Returns(TipNaloga.Izvodi);
            nalogIzBaze.SetupGet(x => x.DatumNaloga).Returns(new DateTime(2018, 10, 20));
            nalogIzBaze.SetupGet(x => x.Opis).Returns("opis");
            var cmd           = new IzmeniZaglavljeNalogaCommand(Guid.NewGuid(), 0, "1", nalogIzBaze.Object.Id.Id, TipNaloga.UlazneFakture.Id, new DateTime(2018, 10, 21), "opis new");
            var fakeNalogRepo = new Mock <IFinNalogRepository>();

            fakeNalogRepo.Setup(x => x.GetAsync(nalogIzBaze.Object.Id)).ReturnsAsync(nalogIzBaze.Object);
            var fakeNalogSvc = new Mock <IFinNalogService>();
            var fakeLogger   = new Mock <ILogger <IzmeniZaglavljeNalogaCommandHandler> >();
            var handler      = new IzmeniZaglavljeNalogaCommandHandler(fakeNalogRepo.Object, fakeNalogSvc.Object, fakeLogger.Object);

            await handler.Handle(cmd, default);

            fakeNalogSvc.Verify(x => x.IzmeniZaglavljeAsync(nalogIzBaze.Object, TipNaloga.Get(cmd.IdTip), cmd.DatumNaloga, cmd.Opis));
            fakeNalogRepo.Verify(x => x.SaveAsync(nalogIzBaze.Object, cmd.CommandId, cmd.Version, cmd.UserId));
        }
        public async Task <bool> Handle(IzmeniNalogCommand cmd, CancellationToken cancellationToken)
        {
            var nalog = await nalogRepo.GetAsync(new FinNalogId(cmd.IdNaloga));

            if (nalog == null)
            {
                throw new NalogNePostojiException(cmd.IdNaloga);
            }

            var tip = TipNaloga.Get(cmd.IdTip);
            await nalogSvc.IzmeniZaglavljeAsync(nalog, tip, cmd.DatumNaloga, cmd.Opis);

            var zaBrisanje = nalog.Stavke.Where(x => !cmd.Stavke.Select(y => y.IdStavke).Contains(x.Id)).ToList();

            foreach (var item in cmd.Stavke)
            {
                if (!nalog.Stavke.Any(x => x.Id == item.IdStavke))
                {
                    nalog.ProknjiziStavku(new FinStavka(item.IdKonto, item.Duguje, item.Potrazuje, item.Opis));
                }
                if (item.Stornirana)
                {
                    var s = nalog.Stavke.SingleOrDefault(x => x.Id == item.IdStavke);
                    if (s != null)
                    {
                        nalog.StornirajStavku(s);
                    }
                }
            }
            foreach (var item in zaBrisanje)
            {
                nalog.UkloniStavku(item);
            }
            await nalogRepo.SaveAsync(nalog, cmd.CommandId, cmd.Version, cmd.UserId);

            return(true);
        }
예제 #7
0
 public IzmeniNalogCommandValidator()
 {
     RuleFor(x => x.IdNaloga).NotEqual(Guid.Empty).WithMessage("IdNaloga je obavezan podatak");
     RuleFor(x => x.DatumNaloga).GreaterThan(DateTime.MinValue).WithMessage("Datum naloga nije validan");
     RuleFor(x => x.IdTip).Must(x => TipNaloga.Get(x) != null).WithMessage("Nepoznat tip naloga");
 }