Browse Source

Shrinking loaded columns lists in MYOB posters

Kenric Nugteren 1 year ago
parent
commit
a5419ec33f

+ 31 - 0
prs.shared/Posters/MYOB/CustomerMYOBPoster.cs

@@ -15,6 +15,7 @@ using Customer = Comal.Classes.Customer;
 using MYOBCustomer = MYOB.AccountRight.SDK.Contracts.Version2.Contact.Customer;
 using MYOBAddress = MYOB.AccountRight.SDK.Contracts.Version2.Contact.Address;
 using MYOB.AccountRight.SDK.Contracts.Version2.Sale;
+using InABox.Clients;
 
 namespace PRS.Shared.Posters.MYOB;
 
@@ -61,14 +62,44 @@ public class CustomerMYOBPoster : IMYOBPoster<Customer, CustomerMYOBPosterSettin
             table.IsDefault = false;
         }
         model.SetIsDefault<Customer>(true);
+        model.SetColumns<Customer>(RequiredColumns());
 
         return true;
     }
 
+    public static Columns<Customer> RequiredColumns()
+    {
+        return Columns.None<Customer>()
+            .Add(x => x.ID)
+            .Add(x => x.PostedReference)
+            .Add(x => x.DefaultContact.Name)
+            .Add(x => x.Name)
+            .Add(x => x.Code)
+            .Add(x => x.CustomerStatus.ID)
+            .Add(x => x.CustomerStatus.Active)
+            .Add(x => x.Delivery.Street)
+            .Add(x => x.Delivery.City)
+            .Add(x => x.Delivery.State)
+            .Add(x => x.Delivery.PostCode)
+            .Add(x => x.Postal.Street)
+            .Add(x => x.Postal.City)
+            .Add(x => x.Postal.State)
+            .Add(x => x.Postal.PostCode)
+            .Add(x => x.DefaultContact.Mobile)
+            .Add(x => x.DefaultContact.Telephone)
+            .Add(x => x.DefaultContact.Email)
+            .Add(x => x.DefaultContact.Name)
+            .Add(x => x.DefaultContact.Mobile)
+            .Add(x => x.ABN);
+    }
+
     public static Result<Exception> UpdateCustomer(MYOBConnectionData data, CustomerMYOBPosterSettings settings, Customer customer, MYOBCustomer myobCustomer, bool isNew)
     {
         // Documentation: https://developer.myob.com/api/myob-business-api/v2/contact/customer/
 
+        // Since this might be called from some other poster, we need to ensure we have the right columns.
+        Client.EnsureColumns(customer, RequiredColumns());
+
         SplitName(customer.DefaultContact.Name, out var firstName, out var lastName);
 
         myobCustomer.CompanyName = customer.Name.Truncate(50);

+ 34 - 3
prs.shared/Posters/MYOB/InvoiceMYOBPoster.cs

@@ -36,12 +36,46 @@ public class InvoiceMYOBPoster : IMYOBPoster<Invoice, InvoiceMYOBPosterSettings>
             table.IsDefault = false;
         }
         model.SetIsDefault<Invoice>(true);
+        model.SetColumns<Invoice>(RequiredInvoiceColumns());
+
         model.SetIsDefault<InvoiceLine>(true, alias: "Invoice_InvoiceLine");
+        model.SetColumns<InvoiceLine>(RequiredInvoiceLineColumns());
+
         model.SetIsDefault<Customer>(true, alias: "Invoice_Customer");
+        model.SetColumns<Customer>(RequiredCustomerColumns());
 
         return true;
     }
 
+    private static Columns<Invoice> RequiredInvoiceColumns()
+    {
+        return Columns.None<Invoice>()
+            .Add(x => x.ID)
+            .Add(x => x.PostedReference)
+            .Add(x => x.Number)
+            .Add(x => x.Date)
+            .Add(x => x.CustomerLink.ID)
+            .Add(x => x.Description);
+    }
+    private static Columns<InvoiceLine> RequiredInvoiceLineColumns()
+    {
+        return Columns.None<InvoiceLine>()
+            .Add(x => x.ID)
+            .Add(x => x.InvoiceLink.ID)
+            .Add(x => x.Description)
+            .Add(x => x.IncTax)
+            .Add(x => x.SellGL.ID)
+            .Add(x => x.SellGL.Code)
+            .Add(x => x.SellGL.PostedReference)
+            .Add(x => x.TaxCode.ID)
+            .Add(x => x.TaxCode.Code)
+            .Add(x => x.TaxCode.PostedReference);
+    }
+    private static Columns<Customer> RequiredCustomerColumns()
+    {
+        return CustomerMYOBPoster.RequiredColumns();
+    }
+
     public IPostResult<Invoice> Process(IDataModel<Invoice> model)
     {
         // Documentation: https://developer.myob.com/api/myob-business-api/v2/sale/invoice/invoice_service/
@@ -90,9 +124,6 @@ public class InvoiceMYOBPoster : IMYOBPoster<Invoice, InvoiceMYOBPosterSettings>
                 myobInvoice.Customer.UID = customerID;
             }
             // myobInvoice.PromisedDate = 
-            myobInvoice.BalanceDueAmount = (decimal)invoice.Balance;
-            // BalanceDueAmountForeign
-            // Status
             if(invoiceLines.TryGetValue(invoice.ID, out var lines))
             {
                 var newLines = new MYOBInvoiceLine[lines.Length];