Example #1
0
        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);
        }
Example #2
0
        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);
        }