public async Task <SalesInvoice> CreateInvoiceAsync(DateTimeOffset dueDate, Guid?invoiceNoteId, List <SalesInvoiceItem> invoiceItems, Guid?customerId, Guid?salesOrderId) { NumberSequence numberSequence = await _numberSequenceRepository.GetSingleBySpecificationAsync(new NumberSequenceSpecification(typeof(SalesInvoice).Name)); int invoiceCount = await _salesInvoiceRepository.CountAllAsync(); string invoiceNumber = numberSequence.GenerateSequence(invoiceCount); Address billingAddress; Customer customer = await _customerRepository.GetSingleBySpecificationAsync(new CustomerSpecification(customerId.Value)); billingAddress = customer.BillingAddress; string invoiceNotes = string.Empty; if (invoiceNoteId.HasValue) { SalesInvoiceNote salesInvoiceNote = await _salesInvoiceNoteRepository.GetByIdAsync(invoiceNoteId.Value); invoiceNotes = salesInvoiceNote?.Description; } SalesInvoice invoice = new(invoiceNumber, dueDate, invoiceNotes, customerId, salesOrderId, billingAddress, invoiceItems); invoice = await _salesInvoiceRepository.AddAsync(invoice); return(invoice); }
public async Task ConvertToInvoiceAsync(Guid salesOrderId) { SalesOrder salesOrder = await _salesOrderRepository.GetSingleBySpecificationAsync(new SalesOrderSpecification(salesOrderId)); Address billingAddress; Customer customer = await _customerRepository.GetSingleBySpecificationAsync(new CustomerSpecification(salesOrder.CustomerId.Value)); billingAddress = customer.BillingAddress; List <SalesInvoiceItem> invoiceLines = salesOrder.SalesOrderItems.Select(salesOrderLine => { InvoicedItem invoicedItem = new (salesOrderLine.ItemOrdered.ItemId, salesOrderLine.ItemOrdered.ItemName, salesOrderLine.ItemOrdered.ItemDescription); SalesInvoiceItem invoiceLine = new(invoicedItem, salesOrderLine.UnitPrice, salesOrderLine.Units, null); return(invoiceLine); }).ToList(); NumberSequence numberSequence = await _numberSequenceRepository.GetSingleBySpecificationAsync(new NumberSequenceSpecification(typeof(SalesInvoice).Name)); int invoiceCount = await _salesInvoiceRepository.CountAllAsync(); string invoiceNumber = numberSequence.GenerateSequence(invoiceCount); SalesInvoiceNote invoiceNote = await _salesInvoiceNoteRepository.GetSingleBySpecificationAsync(new SalesInvoiceNoteSpecification()); SalesInvoice invoice = new SalesInvoice(invoiceNumber, DateTime.Now, invoiceNote?.Description, salesOrder.CustomerId, salesOrderId, billingAddress, invoiceLines); await _salesInvoiceRepository.AddAsync(invoice); }