public void UpdateInvoice(Models.Data.SalesInvoice invoice) { var customer = FindSageCustomer(invoice.Customer); if (customer == null) { throw new AbortException($"Not found customer with Key: '{invoice.Customer.GlobalKey(actionSource)}'. Transaction aborted.", StatusCode.Fail); } var sageInvoice = FindInvoice(invoice.ReferenceNumber, customer.ID); if (sageInvoice == null) { throw new AbortException($"Not found invoice with ReferenceNumber: '{invoice.ReferenceNumber}' and CustomerId: '{customer.ID}'. Transaction aborted.", StatusCode.Ignored); } sageInvoice.CustomerReference = CreateOrUpdateCustomer(invoice.Customer); sageInvoice.PopulateFromModel(CompanyContext, invoice); sageInvoice.Save(); }
public void UpsertInvoice(Models.Data.SalesInvoice invoice) { var customer = FindSageCustomer(invoice.Customer); // if no exist Customer, goto CreateInvoice if (customer == null) { CreateInvoice(invoice); } else { var sageInvoice = FindInvoice(invoice.ReferenceNumber, customer.ID); if (sageInvoice == null) { CreateInvoice(invoice); } else { UpdateInvoice(invoice); } } }
public void CreateInvoice(Models.Data.SalesInvoice invoice) { var customer = FindSageCustomer(invoice.Customer); SalesInvoice sageInvoice; if (customer != null) { sageInvoice = FindInvoice(invoice.ReferenceNumber, customer.ID); if (sageInvoice != null) { throw new AbortException( $"Found invoice with ReferenceNumber: '{invoice.ReferenceNumber}' and CustomerId: '{customer.ID}'. Transaction aborted.", StatusCode.Ignored); } } // if no exist invoice, we can create new sageInvoice = CompanyContext.Factories.SalesInvoiceFactory.Create(); sageInvoice.CustomerReference = CreateOrUpdateCustomer(invoice.Customer); sageInvoice.PopulateFromModel(CompanyContext, invoice); sageInvoice.Save(); }
public static void PopulateFromModel(this SalesInvoice sageInvoice, Company companyContext, Models.Data.SalesInvoice invoice) { sageInvoice.ReferenceNumber = invoice.ReferenceNumber; sageInvoice.Date = invoice.Date; sageInvoice.Date = invoice.Date; sageInvoice.ShipDate = invoice.ShipDate; sageInvoice.CustomerNote = invoice.CustomerNote; sageInvoice.InternalNote = invoice.InternalNote; sageInvoice.TermsDescription = invoice.TermsDescription; sageInvoice.StatementNote = invoice.StatementNote; sageInvoice.ShipVia = invoice.ShipVia; sageInvoice.PrintCustomerNoteAfterLineItems = invoice.PrintCustomerNoteAfterLineItems; sageInvoice.FreightAmount = invoice.FreightAmount; sageInvoice.DropShip = invoice.DropShip; sageInvoice.DiscountDate = invoice.DiscountDate; sageInvoice.DiscountAmount = invoice.DiscountAmount; sageInvoice.DateDue = invoice.DateDue ?? DateTime.Now; sageInvoice.CustomerPurchaseOrderNumber = invoice.CustomerPurchaseOrderNumber; foreach (var sageInvoiceApplyToSalesLine in sageInvoice.ApplyToSalesLines) { sageInvoiceApplyToSalesLine.MarkForDeletion(); } foreach (var salesLine in invoice.SalesLines) { var sageSalesLine = sageInvoice.AddSalesLine(); sageSalesLine.Amount = salesLine.Amount; sageSalesLine.Quantity = salesLine.Quantity; sageSalesLine.SalesTaxType = salesLine.SalesTaxType; sageSalesLine.UnitPrice = salesLine.UnitPrice; sageSalesLine.Description = salesLine.Description; sageSalesLine.AccountReference = sageSalesLine.AccountReference.PopulateFromModel(salesLine.Account, companyContext); } sageInvoice.FreightAccountReference = sageInvoice.FreightAccountReference.PopulateFromModel(invoice.FreightAccount, companyContext); sageInvoice.ShipToAddress.PopulateFromModel(invoice.ShipToAddress); }