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