Esempio n. 1
0
        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));
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
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));
        }
        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();
 }