コード例 #1
0
        public override async Task <IExecutionResult <bool> > HandleAsync(CartCheckoutCommand command, CancellationToken cancellationToken)
        {
            if (!command.IsValid())
            {
                return(ValidationErrors(command));
            }

            var cart = await _cartRepository.GetById(command.Id.ToString());

            if (cart == null)
            {
                return(ExecutionError(command, ErrorMessages.Cart.DoesNotExistsById));
            }

            var items = cart.Items.Select(x => new CartItem(x.Id)
            {
                Price        = x.Price,
                Scale        = x.Scale,
                CurrencyCode = x.CurrencyCode,
                Product      = _productRepository.GetById(x.Id.ToString()).Result
            }).ToList();

            cart.Items = items;

            var invoice          = new Invoice(command.XTeamControl, command.CurrencyCode);
            var invoiceAggregate = new InvoiceAggregate(invoice, cart);

            await Retry.DoAsync(async() => await _queueService.SendToSqsAsync(invoiceAggregate));

            var result = await _cartRepository.Checkout(command.Id.ToString());

            return(new SuccessExecutionResult <bool>(GetType(), result));
        }
コード例 #2
0
        public void IncludeUpdateTest()
        {
            var invoiceBuilder   = new InvoiceAggregateBuilder();
            var invoiceAggregate = invoiceBuilder.GetRandomInvoiceAggregate();
            var invoice          = InvoiceAggregate.Update(invoiceAggregate.Id, invoiceAggregate);

            invoiceAggregate.Should().BeEquivalentTo(invoice);
        }
コード例 #3
0
ファイル: InvoiceManager.cs プロジェクト: Gelller/Timesheets
        public async Task <Guid> Greate(Invoice request)
        {
            var invoice         = InvoiceAggregate.Create(request.ContractId, request.DateStart, request.DateEnd);
            var sheetsToInclude = await _invoiceAggregateRepo.GetSheets(invoice.ContractId, invoice.DateStart, invoice.DateEnd);

            invoice.IncludeSheets(sheetsToInclude);
            await _invoiceAggregateRepo.Add(invoice);

            return(invoice.Id);
        }
コード例 #4
0
        public void InvoiceAggregate_ShouldBeDeleted()
        {
            //Arrange
            var request = AggregatesRequestBuilder.CreateRandomInvoiceCreateRequest();
            var invoice = InvoiceAggregate.CreateFromRequest(request);

            //Act
            invoice.MarkAsDeleted();

            //Assert
            invoice.IsDeleted.Should().BeTrue();
        }
コード例 #5
0
        public void InvoiceAggregate_CreateFromRequest()
        {
            //Arrange
            var request = AggregatesRequestBuilder.CreateRandomInvoiceCreateRequest();

            //Act
            var invoice = InvoiceAggregate.CreateFromRequest(request);

            //Assert
            invoice.ContractId.Should().Be(request.ContractId);
            invoice.DateStart.Should().Be(request.DateStart);
            invoice.DateEnd.Should().Be(request.DateEnd);
            invoice.IsDeleted.Should().BeFalse();
        }
コード例 #6
0
ファイル: InvoiceManager.cs プロジェクト: Verm-V/TimeSheets
        public async Task <Guid> Create(InvoiceCreateRequest request)
        {
            //Создаем новую сущность счета
            var invoice = InvoiceAggregate.CreateFromRequest(request);

            //Устанавливаем список карточек связанных со счетом и рассчитываем сумму
            var sheets = await _invoiceRepo.GetSheets(
                request.ContractId,
                request.DateStart,
                request.DateEnd);

            //Добавляем карточки к счету и рассчитываем сумму оплаты
            invoice.IncludeSheets(sheets);

            //Закидываем новый счет в базу
            await _invoiceRepo.Add(invoice);

            return(invoice.Id);
        }
コード例 #7
0
            public async Task <InvoiceDto> Handle(AddInvoiceCommand request, CancellationToken cancellationToken)
            {
                Contract contract = await _contractsRepository.GetById(request.ContractId);

                if (contract != null)
                {
                    var invoiceAggregate = InvoiceAggregate.Create(contract.Id, request.Date, request.Description);

                    var tasks = await _tasksRepository.GetByIdList(request.Tasks);

                    invoiceAggregate.IncludeTasks(tasks, contract.HourCost);

                    var invoice = await _invoicesRepository.Create(invoiceAggregate);

                    _mapper.Map <InvoiceDto>(invoice);
                }

                return(null);
            }
コード例 #8
0
        public void InvoiceAggregate_CalculateSomeSum_AfterIncludeSomeSheets()
        {
            //Arrange
            var invoiceRequest = AggregatesRequestBuilder.CreateRandomInvoiceCreateRequest();
            var invoice        = InvoiceAggregate.CreateFromRequest(invoiceRequest);

            var sheets      = new List <SheetAggregate>();
            var sheetsCount = 3;

            for (int i = 0; i < sheetsCount; i++)
            {
                var sheetRequest = AggregatesRequestBuilder.CreateRandomSheetCreateRequest();
                sheets.Add(SheetAggregate.CreateFromRequest(sheetRequest));
            }

            //Act
            invoice.IncludeSheets(sheets);

            //Assert
            invoice.Sum.Amount.Should().BeGreaterThan(0);
            invoice.Sheets.Count.Should().Be(sheetsCount);
        }
コード例 #9
0
 public async Task Update(InvoiceAggregate item)
 {
     _context.Invoices.Update(item);
     await _context.SaveChangesAsync();
 }
コード例 #10
0
        public async Task Add(InvoiceAggregate item)
        {
            await _context.Invoices.AddAsync(item);

            await _context.SaveChangesAsync();
        }
コード例 #11
0
        public InvoiceAggregate GetRandomInvoiceAggregate()
        {
            var invoiceAggregate = InvoiceAggregate.Create(contractId, DateTime.Now, DateTime.Now.AddDays(numOfDays));

            return(invoiceAggregate);
        }
コード例 #12
0
ファイル: InvoiceRepo.cs プロジェクト: Gelller/Timesheets
 public Task Update(InvoiceAggregate item)
 {
     throw new NotImplementedException();
 }
コード例 #13
0
 public InvoiceAggregateTests()
 {
     _invoiceAggregate = InvoiceAggregate.Create(1, DateTime.Today, "Test");
 }