public IHttpActionResult Post(AddInvoiceModel model) { var order = ordersManager.GetById(model.orderId); double taxValue = CalculationHelper.CalculateTaxes(taxesManager); var invoice = new ProfiCraftsman.Contracts.Entities.Invoices() { Orders = order, TaxValue = taxValue, WithTaxes = order.Customers.WithTaxes, Discount = order.Discount ?? 0, CreateDate = DateTime.Now, ChangeDate = DateTime.Now, IsSellInvoice = model.isSell, PayInDays = 10, InvoicePositions = new List <InvoicePositions>() }; if (AddInvoicePositions(order, invoice)) { invoice.InvoiceNumber = numberProvider.GetNextInvoiceNumber(); invoicesManager.AddEntity(invoice); invoicesManager.SaveChanges(); } model.Id = invoice.Id; return(Ok(model)); }
public async Task <InvoiceInsertResponse> ValidateInvoiceCurrencies(AddInvoiceModel invoice) { var availableCurrencies = await _currencyRepository.GetAllAsync(); var invoiceCurrencyCodes = invoice.Items.Select(i => i.CurrencyCode).Distinct().ToList(); var availableCurrencyCodes = availableCurrencies.Select(c => c.Code).ToList(); var intersect = availableCurrencyCodes.Intersect <string>(invoiceCurrencyCodes); if (intersect.Count() != invoiceCurrencyCodes.Count()) { _response.ValidationResult.ErrorMessages.Add(_errorMessage); } return(await Task.FromResult(_response)); }
public async Task <IActionResult> Post([FromBody] AddInvoiceModel invoiceModel) { if (!ModelState.IsValid) { return(BadRequest()); } var response = await _invoiceService.InsertOneAsync(invoiceModel); if (response.ValidationResult.Status == ValidationStatus.Error) { foreach (var error in response.ValidationResult.ErrorMessages) { Log.Error(error); } return(BadRequest(response.ValidationResult.ErrorMessages)); } return(Created("api/Invoices", response.InvoiceNumber)); }
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)); }
private AddInvoiceModel GenerateNewInvoiceModel() { var customer = new Customer { City = "Paris", Country = "France", Name = "Customer Company" }; var issuer = new Customer { City = "Madrit", Country = "Spain", Name = "Issuer Company" }; var items = new InvoiceItem[] { new InvoiceItem { CurrencyCode = "USD", UnitCost = 2.43m, Quantity = 6, Amount = 14.58m }, new InvoiceItem { CurrencyCode = "EUR", UnitCost = 0.71m, Quantity = 4, Amount = 2.84m }, new InvoiceItem { CurrencyCode = "CHF", UnitCost = 70.12m, Quantity = 0.87m, Amount = 61.0044m } }; var invoiceModel = new AddInvoiceModel { BillTo = customer, Issuer = issuer, Items = items }; return(invoiceModel); }
public void Reset() { Invoice = GenerateNewInvoiceModel(); }
public InvoiceFixture() { Invoice = GenerateNewInvoiceModel(); }