Example #1
0
        public async Task <InvoiceInsertResponse> InsertOneAsync(AddInvoiceModel invoiceModel)
        {
            var invoiceValidator = new InvoiceValidator(_currencyRepository);
            var response         = await invoiceValidator.ValidateInvoiceCurrencies(invoiceModel);

            if (response.ValidationResult.Status == ValidationStatus.Error)
            {
                return(await Task.FromResult(response));
            }

            var invoice = _mapper.Map <Invoice>(invoiceModel);

            invoice.Number = await GenerateInvoiceNumberAsync();

            invoice.TotalAmount = await _calculator.CalculateTotalAmount(invoice.Items);

            await _invoiceRepository.InsertOneAsync(invoice);

            response.InvoiceNumber = invoice.Number;

            return(await Task.FromResult(response));
        }