Example #1
0
        public async Task <IIdentifierResult> HandleAsync(ICreateSale command, ICorrelationContext context)
        {
            await Task.WhenAll(
                _agVerifier.AssertExists(command.AccountingGroupId),
                _userVerifier.AssertExists(command.UserId),
                _posVerifier.AssertExists(command.PointOfSaleId),
                _amVerifier.AssertExists(command.AuthenticationMeansId),
                _productVerifier.AssertExists(command.ProductId),
                _offerVerifier.AssertExists(command.OfferId)
                );

            var sale = new Domain.Sale(command.Id, command.Cost, command.Quantity, command.AccountingGroupId, command.UserId, command.AuthenticationMeansId, command.PointOfSaleId, command.ProductId, command.OfferId);
            var initialSaleStateChange = new Domain.SaleStateChange(Guid.NewGuid(), "Created", default(SaleState), command.PointOfSaleId, null);

            sale.AddStateChange(initialSaleStateChange);

            await _salesRepository.AddAsync(sale);

            try
            {
                await _salesRepository.SaveChanges();
            }
            catch (EntityAlreadyExistsException)
            {
                throw new BaristaException("sale_already_exists", $"A sale with the ID '{command.Id}' already exists.");
            }

            await _busPublisher.Publish(new SaleCreated(sale));

            await _busPublisher.Publish(new SaleStateChangeCreated(initialSaleStateChange.Id, sale.Id,
                                                                   initialSaleStateChange.Created, initialSaleStateChange.Reason, initialSaleStateChange.State.ToString(),
                                                                   initialSaleStateChange.CausedByPointOfSaleId, initialSaleStateChange.CausedByUserId));

            return(new IdentifierResult(sale.Id));
        }
Example #2
0
        public void TesteComissaoComVendaMenorDe10000()
        {
            // arrange
            decimal saleValue = 1000;
            Domain.Sale sale = new Domain.Sale(saleValue);
            decimal expectedComission = 50;

            // act
            decimal comission = sale.GetComission();

            // assert
            Assert.AreEqual(expectedComission, comission);
        }
Example #3
0
        public void TesteComissaoComVendaIguala10000()
        {
            // arrange
            decimal saleValue = 10000;

            Domain.Sale sale = new Domain.Sale(saleValue);
            decimal     expectedComission = 500;

            // act
            decimal comission = sale.GetComission();

            // assert
            Assert.AreEqual(expectedComission, comission);
        }
Example #4
0
 public SaleUpdated(Domain.Sale sale) : this(sale.Id, sale.Cost, sale.Quantity, sale.AccountingGroupId, sale.UserId, sale.AuthenticationMeansId, sale.PointOfSaleId, sale.OfferId, sale.ProductId)
 {
 }
Example #5
0
 public SaleDeleted(Domain.Sale sale) : this(sale.Id)
 {
 }