How Customers work in System Five
Windward System Five supports a single address for a billing or shipping customer in our database. Each record will have a CustomerUnique number which is associated to invoices as either the Billing or Shipping customer. This is a 1 to many relationship in the database. One customer can have many billing or shipping invoices associated with them.
If you require workflow to support different billing and shipping addresses. Then you would need to create customers with the same name with a different address and associate them to the sales orders being created. Best practice to avoid creating duplicate names and addresses would be to parse the customer lists to see if the customer already exists.
- Sample call requesting the first 1000 customers with limited fields such as names, address, phone and email to create a smaller payload:
Sample Customer Pseudocode
- Check if a customer exists by
- parse customer lists for existing name/address/phone/email matches using Customers/Customers/0 listing OR
- by email address using TServerMethodsWebAPI/Get_Customer_By_Email endpoint if duplicates are not a concern.
- store the Customer Unique number
- Else create a new customer using Customer/addCustomer
Sample Customer JSON
{ "Customers": [ { "Unique": 0, "Name": "string", "FirstName": "string", "LastName": "string", "Addr1": "string", "Addr2": "string", "City": "string", "Postal": "string", "State": "string", "Country": "string", "Phone1": "string", "Phone2": "string", "Phone3": "string", "APDiscount": 0, "APDiscountRule": 0, "APDiscountDays": 0, "Balances": { "C_BALANCE": 0, "C_DEPOSIT": 0, "C_SB_30": 0, "C_SB_60": 0, "C_SB_90": 0, "CN_BALANCE": 0, "CN_DEPOSIT": 0, "C_PO_BILLED": 0 }, "Duty": "string", "FedTax": "string", "AutoDiscount": "string", "DueDays": 0, "PriceSchedule": 0, "ContractDate": "string", "Salesman": 0, "CSType": "string", "Terms": "string", "Interest": 0, "TaxStatus": "string", "TaxNumber": "string", "BankInfo": "string", "ShipNo": 0, "CreditLimit": 0, "StandingPO": "string", "POExpiryDate": "string", "POMaximumValue": 0, "POBilledSoFar": 0, "GSTExempt": "string", "Department": 0, "TaxCode": "string", "Number": "string", "DisNv": 0, "DisStat": 0, "RetailType": "string", "Foreign": "string", "LastVisit": "string", "Email": "string", "WebComments": "string", "Password": "string", "EFTAccount": "string", "EFTBank": "string", "EFTName": "string", "TimeZone": 0, "ShippingAddress": "string", "Contacts": [ { "ContactId": 0, "FirstName": "string", "LastName": "string", "City": "string", "Country": "string", "State": "string", "Postal": "string", "Phone1": "string", "Phone2": "string", "Email": "string", "Address1": "string", "Address2": "string" } ], "FreeFormGroup": [ { "FreeFormData": "string", "FreeFormID": 0 } ], "ShipName": "string", "ShipAddr1": "string", "ShipAddr2": "string", "ShipCity": "string", "ShipPostal": "string", "ShipState": "string", "ShipCountry": "string", "ShipPhone1": "string" } ], "ConnectionInfo": { "TerminalNumber": 0 } }
Customer Contacts
The /addCustomer method supports Contacts as part of the data payload. The Contact Object has to be filled in to generate. Populating the First Name and Last Name alone do not constitute a Contact record and will not create the a Contact. This is to allow for usage that doesn't want Contact records to be created just because the Name is provided as FirstName / LastName. Those fields are part of the Customer JSON to support the variations of First, Last / Last, First as the business name, not to auto-generate Contact records.
The Swagger Documentation provides the developer with the map of the Contact Object which when completed will create contacts.
"Contacts": [ { "ContactId": 0, "FirstName": "string", "LastName": "string", "City": "string", "Country": "string", "State": "string", "Postal": "string", "Phone1": "string", "Phone2": "string", "Email": "string", "Address1": "string", "Address2": "string" }
Continue on to Adding an Invoice or back to Swagger Samples