Overview
The BuildOps to Viewpoint Vista integration provides real-time sync of essential business data between both platforms, ensuring accuracy and efficiency across your operations. This integration streamlines processes across modules like Job Costing (JC), Accounts Payable (AP), Accounts Receivable (AR), and Purchase Orders (PO), reducing manual data entry and errors. By bridging the gap between BuildOps and Vista, users benefit from simplified reporting, enhanced technician productivity, and a clear, up-to-date view of project and financial data.
Configurations Required
During the onboarding process, your implementation manager will work closely with you to complete a questionnaire that helps configure your connector for Vista. This questionnaire is designed to capture the specific settings and preferences needed to tailor the integration to your business needs. Below is a breakdown of the key areas covered in the questionnaire, along with the information we require to ensure a seamless setup of the connector.
Company
During the integration setup, we need to define specific company settings to ensure that data syncs correctly with Vista. This includes identifying the company or JC Company (JCCo) that the integration will operate under. We will also gather information on how you’d like transaction batches organized, whether by day or by day/department, as well as your preferences for syncing attachments and receiving sync notification emails.
Job
For job-related configurations, we will help you define how BuildOps jobs sync to Vista’s Job Cost (JC) module. This includes setting up your job numbering format, job number length, and template jobs that will standardize contract items, phases, and cost types. You can also specify a second template job for specific job types, as well as the default phase/cost type that should be used for purchase order receipts. More information on template jobs can be found in the next section.
Customer
The integration requires linking new customers created in BuildOps with the appropriate customer groups, tax groups, and receivable groups in Vista. You will also need to define the customer number range for new customer records. If your Vista environment includes custom user-defined (UD) fields, these can be mapped as well.
Purchasing
We’ll configure your default Ship To location for syncing purchase orders from BuildOps to Vista. If needed, we can also sync purchase order attachments, assigning them to a specific PO attachment type. Additionally, the integration can automatically post purchase order batches in Vista, eliminating manual steps in the approval process.
Accounts Receivable
For Accounts Receivable (AR) sync, we need to define key AR settings such as the AR attachment type, if applicable, and whether AR batches should be automatically posted in Vista. You will also provide information regarding your AR invoice number mask format and length to ensure that invoices are properly formatted and synced.
Vendors
When syncing vendor data from BuildOps to Vista, each vendor must be assigned to a vendor group in Vista. We will configure this group during onboarding to ensure that all new vendors created in BuildOps are properly categorized in your Vista system.
Template Jobs Configuration
When you create jobs or service agreement maintenances in BuildOps, you won’t need to manually create contract items, job phases, or job phase cost types. Instead, we work with you to set up ‘template’ or ‘archive’ jobs that contain a predefined list of these elements. These templates are stored within your Vista environment, giving you complete control to modify them for future jobs or maintenances. Even though BuildOps uses these templates, you can still update contract items, job phases, and cost types in Vista, and any changes you make will sync back into BuildOps.
The diagram below outlines the steps that BuildOps takes every time you create a job or maintenance.
AP Vendors
Configuration
For AP Vendors, you’ll need to designate a specific vendor group in Vista to ensure that all vendors synced from BuildOps are categorized correctly.
Data Flow and Trigger
Vista BuildOps
Trigger: When a new AP Vendor is created or updated in Vista.
Data Mapping
Vendor Create
Vista Fields | BuildOps Fields | Notes: |
ven.Name + " ( " + ven.Vendor + " ) " | name |
|
| type | (string)null |
ven.VendorGroup + "\" + ven.Vendor | accountRefID |
|
ven.Contact | primaryContact |
|
ven.Phone | phone |
|
ven.EMail |
| |
ven.Address | addressLine1 |
|
ven.Address1 | addressLine2 |
|
ven.City | city |
|
ven.State | state |
|
ven.zipcode | zipcode |
|
ven.ActiveYN EQUALS "Y" | isActive |
|
Vendor Update
Vista Fields | BuildOps Fields | Notes: |
| __key.id | Lookup Build Ops Vendor ID |
ven.Name + " ( " + ven.Vendor + " ) " | name |
|
| type | (string)null |
ven.VendorGroup + "\" + ven.Vendor | accountRefID |
|
ven.Contact | primaryContact |
|
ven.Phone | phone |
|
ven.EMail |
| |
ven.Address | addressLine1 |
|
ven.Address1 | addressLine2 |
|
ven.City | city |
|
ven.State | state |
|
ven.zipcode | zipcode |
|
ven.ActiveYN EQUALS "Y" | isActive |
|
HQ Tax Codes
Configuration
For HQ Tax Codes, you’ll need to specify the tax group that will be assigned to all customers synced from BuildOps.
Data Flow and Trigger
Vista BuildOps
Trigger: When a new HQ Tax Code is created or updated in Vista.
Data Mapping
Tax Code Create
Vista Fields | BuildOps Fields | Notes: |
Tax.TaxCode | name |
|
Tax.Description | description |
|
Tax.TaxGroup + "/ " + Tax.TaxCode | accountingRefID |
|
newRate *100 | taxRate | If not multilevel use "newRate" if Multi Level use Sum of Linked Tax "newRate" |
| accountType | Hardcoded to "Vista" |
| accountingApplication | NULL |
Tax Code Create
Vista Fields | BuildOps Fields | Notes: |
| __key.id | Lookup Build Ops Tax Code ID |
Tax.TaxCode | name |
|
Tax.Description | description |
|
Tax.TaxGroup + "/ " + Tax.TaxCode | accountingRefID |
|
newRate *100 | taxRate | If not multilevel use "newRate" if Multi Level use Sum of Linked Tax "newRate" |
| accountType | Hardcoded to "Vista" |
| accountingApplication | NULL |
Payment Terms
Data Flow and Trigger
Vista BuildOps
Trigger: When a new payment term is created or updated in Vista.
Data Mapping
Payment Term Create
Vista Fields | BuildOps Fields | Notes: |
pay.Description | name |
|
If pay.DaysTillDue IS NOT NULL then pay.DaysTillDue ELSE use pay DueDay | value |
|
| type | Hardcoded to "Both" |
pay.PayTerms | accountingRefID |
|
Payment Term Update
Vista Fields | BuildOps Fields | Notes: |
| __key.id | Lookup Build Ops Payment Terms ID |
pay.Description | name |
|
If pay.DaysTillDue IS NOT NULL then pay.DaysTillDue ELSE use pay DueDay | value |
|
| type | Hardcoded to "Both" |
General Ledger (GL) Accounts
Data Flow and Trigger
Vista BuildOps
Trigger: When a new GL account is created or updated in Vista.
Data Mapping
GL Account Create
Vista Fields | BuildOps Fields | Notes: |
GL.Description | name |
|
GL.GLAcct | accountNumber |
|
GL.AcctType | accountType | A = Assets, L = Liabilities, C = Capital, I = Income, E = Expense, S = Statistic, P = Profit/Loss |
GL.Active | isActive | "Y" |
GL.GLCo + "/ " GL.GLAcct | accountingRefID |
|
| accountingApplication | Hardcoded to "Vista" |
GL Account Update
Vista Fields | BuildOps Fields | Notes: |
| __key.id | Lookup Build Ops Ledger Account ID |
GL.Description | name |
|
GL.AcctType | accountType | A = Assets, L = Liabilities, C = Capital, I = Income, E = Expense, S = Statistic, P = Profit/Loss |
GL.Active | isActive | "Y" |
JC Jobs
Configuration
For Jobs, you’ll need to configure the JC Company in Vista where new jobs created in BuildOps will be synced, along with setting up the template job that defines the phase and cost type structure for all future job creations.
Data Flow and Trigger
BuildOps Vista
Trigger:
When a new Job is created or updated in BuildOps, a JC Job is created or updated in Vista. When a new Service Agreement is created or updated in BuildOps, a JC Job is created or updated in Vista.
Data Mapping
Job Create
BuildOps Fields | Vista Fields | Notes: |
| JCCo | Lookup based on value stored in jobCompanyCode config |
accountingJobNumber ELSE customIdentifier ELSE jobNumber | Job |
|
WHEN Custom Field Label == "Job Name (Accounting Only)" then use Value ELSE jobName.Value , IF jobName.Value IS NULL OR EMPTY USE issueDescription | Description | Trimmed to 60 Characters |
LookUp Contract in Vista | Contract |
|
LookUp Liability template in Vista | LiabTemplate |
|
WHEN Custom Field Label == PRStateCode Exist Use value ELSE Lookup PR State for Job in Vista | PRStateCode |
|
billingAddress.addressLine1 | MailAddress |
|
billingAddress.City | MailCity |
|
billingAddress.state | MailState |
|
billingAddress.country | MailCountry |
|
billingAddress.zip | MailZip |
|
billingAddress.addressLine2 | MailAddress2 |
|
companyAddresses.addressLine1 | ShipAddress |
|
companyAddresses.city | ShipCity |
|
companyAddresses.state | ShipState |
|
companyAddresses.zipCode | ShipZip |
|
companyAddresses.address2 | ShipAddress2 |
|
WHEN Custom Field Label == "Insurance Template" If Exsit Use value ELSE Lookup Insurance Template for Job in Vista | InsTemplate | The value stored in Custom Field Insurance Template will use the string before the "/" |
certifiedPayroll = "True" Then "Y" ELSE "N" | Certified |
|
LookUp Security Group in Vista | SecurityGroup |
|
certifiedPayroll = "True" Then set to Current Date ELSE NULL | CertGroup | Date Format yyyy-MM-dd |
IF Jobs.Owner is not NULL Then and contains an Email then LookUp ProjectMGR in Vista with matching Email ELSE NULL | ProjectMGR |
|
customerRep.cellPhone | JobPhone | First 20 Characters |
LookUp Lockphases in Vista | LockPhases |
|
LookUp SLCompGroup in Vista | SLCompGroup |
|
LookUp UpdateAPActualsYN in Vista | UpdateAPActualsYN |
|
WHEN Custom Field Label == "Reviewer Group" Exsit Use Value ELSE Lookup Reviewer Group for Job in Vist | RevGrpInv | The value stored in Custom Field Reviewer Group will use the string before the "/" |
WHEN Custom Field Label == ""PR Local Code"" THEN IF Value IN (""outside"" , ""OUTSIDE OF AREA"", """", NULL) NULL ELSE Value
| PRLocalCode |
|
When customFields IS NOT NULL AND vistaJobUdFieldForBuildOpsPrCounty IS NULL THEN udProjType from Template Job ELSE Not Mapped | __custom_fields.udProjType |
|
When customFields IS NOT NULL AND vistaJobUdFieldForBuildOpsPrCounty IS NOT NULL THEN __custom_fields Where Label == ""county"" ELSE Not Mapped | __custom_fields.ud | ud Field cofigured will be configured in vistaJobUdFieldForBuildOpsPrCounty |
LookUp RateTemplate in Vista | RateTemplate |
|
LookUp TaxCode in Vista if Tax Found Use TaxCode Else NULL | TaxCode |
|
Job Update
BuildOps Fields | Vista Fields | Notes: |
__key.id |
| LookUp Job in vista |
Rest of the fields are the same as the create. |
|
|
Service Agreement Create
BuildOps Fields | Vista Fields | Notes: |
LookUp JCCo | JCCo |
|
customIdentifier else acccountingjobNumber else JobNumber | Job |
|
issueDescription else NULL | Description |
|
LookUp Contract from agreementNumber | Contract |
|
LookUp Template Job in Vista "LiabTemplate" | LiabTemplate |
|
WHEN Custom Field Label == PRStateCode Exist Use value ELSE Lookup PR State for Job in Vista | PRStateCode |
|
billingAddress.addressLine1 | MailAddress |
|
billingAddress.City | MailCity |
|
billingAddress.state | MailState |
|
billingAddress.country | MailCountry |
|
billingAddress.zip | MailZip |
|
billingAddress.addressLine2 | MailAddress2 |
|
companyAddresses.addressLine1 | ShipAddress |
|
companyAddresses.city | ShipCity |
|
companyAddresses.state | ShipState |
|
companyAddresses.zipCode | ShipZip |
|
companyAddresses.address2 | ShipAddress2 |
|
WHEN Custom Field Label == "Insurance Template" If Exsit Use value ELSE Lookup Insurance Template for Job in Vista | InsTemplate | The value stored in Custom Field Insurance Template will use the string before the "/" |
certifiedPayroll = "True" Then "Y" ELSE "N" | Certified |
|
LookUp Security Group in Vista | SecurityGroup |
|
certifiedPayroll = "True" Then set to Current Date ELSE NULL | CertGroup | Date Format yyyy-MM-dd |
IF Jobs.Owner is not NULL Then and contains an Email then LookUp ProjectMGR in Vista with matching Email ELSE NULL | ProjectMGR |
|
customerRep.cellPhone | JobPhone | First 20 Characters |
LookUp Lockphases in Vista | LockPhases |
|
LookUp SLCompGroup in Vista | SLCompGroup |
|
LookUp UpdateAPActualsYN in Vista | UpdateAPActualsYN |
|
WHEN Custom Field Label == "Reviewer Group" Exsit Use Value ELSE Lookup Reviewer Group for Job in Vista | RevGrpInv |
|
"WHEN Custom Field Label == ""PR Local Code"" THEN IF Value IN (""outside"" , ""OUTSIDE OF AREA"", """", NULL) NULL ELSE Value" | PRLocalCode |
|
"When customFields IS NOT NULL AND vistaJobUdFieldForBuildOpsPrCounty IS NULL THEN udProjType from Template Job ELSE Not Mapped "
| __custom_fields.udProjType |
|
"When customFields IS NOT NULL AND vistaJobUdFieldForBuildOpsPrCounty IS NOT NULL THEN __custom_fields Where Label == ""county"" ELSE Not Mapped "
| __custom_fields.ud | ud Field cofigured will be configured in vistaJobUdFieldForBuildOpsPrCounty |
LookUp RateTemplate in Vista | RateTemplate |
|
LookUp TaxCode in Vista if Tax Found Use TaxCode Else NULL | TaxCode
|
|
Service Agreement Update
BuildOps Fields | Vista Fields | Notes: |
__key.id |
| LookUp Job in vista |
Rest of the fields are the same as the create. |
|
|
JC Contracts
Data Flow and Trigger
BuildOps Vista
Trigger:
When a new Service Agreement is created or updated in BuildOps, a JC Contract is created or updated in Vista.
When a new JC Contract is created or updated in Vista, a Contract is created in BuildOps.
Data Mapping
Service Agreement Create/Update
BuildOps Fields | Vista Fields | Notes: |
jobCompanyCode | JCCo | Value is looked up based on the configuration set in jobCompanyCode. |
agreementNumber | Contract |
|
agreementName | Description | Length 60 |
tagName | Department | Data before the “-” in tagName is used to map the department. |
Customer | Customer | Customer is looked up in Vista. If not found, a new customer is created. |
Contract Items | Item |
|
Description | Description |
|
UM | UM |
|
Tax.accountingRefId | TaxCode | The tax code is derived from the data stored after the “/” in accountingRefId. |
Payterms.accountingRefId | PayTerms |
|
Lookup SecurityGroup in Vista | SecurityGroup |
|
__Custom_Fields | __Custom_Fields | Custom fields in BuildOps are mapped to the corresponding custom fields in Vista. |
JBInfo.RecType | JBInfo | Record type is determined based on the contract template in Vista. |
JC Contract Create/Update - BuildOps Contracts
Vista Fields | BuildOps Fields | Notes: |
| id | LookUp JC Contracts id in BuildOps for Update. |
JCCo + "/" + Contract | accountingRefId |
|
Description + "(" + Contract + ")" | name |
|
Description | desciription |
|
isActive | isActive |
|
JC Contract Items Create/Update - BuildOps Contract Items
Vista Fields | BuildOps Fields | Notes: |
| id | LookUp Contract Items id in BuildOps for Update. |
JCCo + "/" + Contract + "/" + "/" + Item | accountingRefId |
|
Description + "(" + Item + ")" | name |
|
Description | desciription |
|
"true" | isActive |
|
| classId | LookUp Id for buildOps department |
| jcContractId | LookUp Contract id in BuildOps |
JC Job Phases
Data Flow and Trigger
Vista BuildOps
Trigger: When a new Job Phase, Cost Type is created or updated in Vista for a JC Job.
Data Mapping
Job Phase Create/Update
Vista Fields | BuildOps Fields | Notes: |
| id | LookUp id in BuildOps for Update. |
JCCo + "/" + Job + "/" + PhaseGroup + "/" + "Phase" | accountingRefId |
|
Description + "(" + Phase + ")" | name |
|
Description | description |
|
if ActiveYN = Y then "true" else "false" | isActive |
|
Cost Type Create/Update
Vista Fields | BuildOps Fields | Notes: |
| id | LookUp id in BuildOps for Update. |
if description is NOT NULL then description + "(" Cost_Type+ ")" else "No Description" + "(" Cost_Type+ ")" | name |
|
if description is NOT NULL then description else "No Description" | description |
|
if ActiveYN = "Y" then "true" else "false" | isActive |
|
JCCo + "/" + Job + "/" + PhaseGroup + "/" + Phase + "/" + CostType | accountingRefID |
|
AR Customers
Data Flow and Trigger
Vista BuildOps
Trigger: When a new customer is created or updated in BuildOps or Vista.
Data Mapping
Customer Create/Update from Vista to BuildOps
Vista Fields | BuildOps Fields | Notes: |
| id | Lookup id from accountingRefId Update. |
Lookup payTerms in BuildOps | paymentTermId |
|
cus.Customer | customerNumber |
|
cus.Name | customerName |
|
cus.EMail |
| |
if cus.Status = A then "true" Else "false" | isActive |
|
if cus.TaxCode is not null or blank then "true" else "false" | isTaxable |
|
cus.Phone | phonePrimary |
|
if cus.Status = A then "active" Else "inactive" | status |
|
cus.CustGroup + "\" + cus.Customer | accountingRefId |
|
Lookup taxRate in BuildOps | taxRateId |
|
| Company Addresses{} addressType = "businessAddress" |
|
cus.Address | addressLine1 |
|
cus.Address2 | addressLine2 |
|
cus.City | city |
|
cus.state | state |
|
cus.Zip | zipCode |
|
| country | "US" |
if cus.Status = A then "active" Else "inactive" | status |
|
if cus.Status = A then "true" Else "false" | isActive |
|
| Company Addresses{} addressType = "billingAddress" |
|
cus.BillAddress | addressLine1 |
|
cus.BillAddress2 | addressLine2 |
|
cus.BillCity | city |
|
cus.BillState | state |
|
cus.BillZip | zipCode |
|
| country | "US" |
if cus.Status = A then "active" Else "inactive" | status |
|
if cus.Status = A then "true" Else "false" | isActive |
|
Customer Create/Update from BuildOps to Vista
BuildOps Fields | Vista Fields | Notes: |
__Key |
| Lookup KeyID in Vista for customer |
Value contained in config "subscriberCompanyCode" | ARCo |
|
"var low = GetConfigValue(""customerNoRangeLow"")?.ToString(); var high = GetConfigValue(""customerNoRangeHigh"")?.ToString();
if(!String.IsNullOrEmpty(low) && !String.IsNullOrEmpty(high)) { return JObject.FromObject( new { @default = ""next_within_range"", range_low = int.Parse(low), range_high = int.Parse(high) }); } else { return Data.customerNumber.ToString(); }" | Customer |
|
customerName | Name |
|
| MailingAddress{} |
|
addressLine1 | MailingAddress.Address | if no addressLine1 where addressType = businessAddress and config enableCustomerMailingAddressDefault = True then addressLine1 where addressType = billingAddress will be used. |
addressLine2 | MailingAddress.Address2 | if no addressLine2 where addressType = businessAddress and config enableCustomerMailingAddressDefault = True then addressLine2 where addressType = billingAddress will be used. |
city | MailingAddress.City | if no city where addressType = businessAddress and config enableCustomerMailingAddressDefault = True then city where addressType = billingAddress will be used. |
state | MailingAddress.State |
|
zipcode | MailingAddress.Zip |
|
country | MailingAddress.Country |
|
| BillingAddress{} |
|
addressLine1 | BillingAddress.BillAddress | where address type = billingAddress |
addressLine2 | BillingAddress.BillAddress2 | where address type = billingAddress |
city | BillingAddress.BillCity | where address type = billingAddress |
state | BillingAddress.BillState | where address type = billingAddress |
zipcode | BillingAddress.BillZip | where address type = billingAddress |
country | BillingAddress.BillCountry | where address type = billingAddress |
| CompanyContact |
|
if status = "active" then "A" else "I" | Status |
|
id | Notes |
|
customerName | SortName |
|
new JObject(){ new JProperty(""udServiceOnly"", ""Y"") } | __custom_fields |
|
config recType | RecType |
|
LookUp Payment term in Vista from BuildOps Customer | PayTerms |
|
LookUp TaxCode in Vista from BuildOps Customer | TaxCode |
|
JC Departments
Data Flow and Trigger
Vista BuildOps
Trigger: When a new department is created or updated in Vista.
Data Mapping
JC Department Create/Update
Vista Fields | BuildOps Fields | Notes: |
| id | LookUp BuildOps Class for update. |
JCCo + "/" + Department | name |
|
| isActive | hardcoded to true |
Description + "(" Department + ")" | accountingRefId |
|
Purchase Order Receipts
Data Flow and Trigger
BuildOps Vista
Trigger: When a new purchase order receipt is created or updated in BuildOps, a corresponding purchase order is created in Vista.
Data Mapping
Purchase Order Receipt Create/Update - Vista Purchase Order Batch
BuildOps Fields | Vista Fields | Notes: |
Vista Company Code from the config subscriberCompanyCode | Co |
|
Current Month | Mth |
|
| Batch | Batch name is generated dynamically based on the local time zone and department configuration. |
Purchase Order Receipt Create/Update - Vista Purchase Order Batch Entry
BuildOps Fields | Vista Fields | Notes: |
Vista Company Code from the config subscriberCompanyCode | Co |
|
Current Month | Mth |
|
BatchId | BatchID |
|
receiptNumber | PO |
|
Look Up Vista Vendor from data after "/" in Ven.accountingRefId | Vendor |
|
description | Description |
|
createdDate | Order Date |
|
0 | Status | Hardcoded to 0 |
accountingRefId | JCCo | Looks up the JC Company using the data before the “/” in the accounting reference ID. |
accountingRefId | Job | Looks up the Job using the data after the “/” in the accounting reference ID. |
| LineItems[] |
|
description | LineItems Description |
|
1 | LineItems ItemType |
|
lineNumber | LineItems POItem |
|
accountingRefId | LineItems JCCo | Looks up the JC Company for line items using the data before the “/” in the accounting ref ID. |
accountingRefId | LineItems Job | Looks up the Job for line items using the data after the “/” in the accounting ref ID. |
| LineItems Phase |
|
jcCostTypeId | LineItems JCCType | Looks up the cost type in Vista using the JC Cost Type ID from BuildOps. If not found, returns “X”. |
| LineItems Amount {} |
|
UM | LineItems Amount unitsOfMeasure |
|
quantity | LineItems Amount OrigUnits |
|
unitCost | LineItems Amount OrigUnitsCost |
|
taxRate.accountingRefId | LineItems Tax | Maps the tax type and tax code based on whether the item is taxable, using the tax rate accounting reference. |
LookUp PayTerms in Vista | PayTerms |
|
Config "shipLoc" | ShipLoc |
|
Purchase Order Bills
Data Flow and Trigger
Vista BuildOps
Trigger: When a new AP Invoice is posted in Vista a Purchase Order Bill is created in BuildOps.
Data Mapping
AP Posted Invoice to Purchase Order Bill
Vista Fields | BuildOps Fields | Notes: |
inv.InvDate | transactionDate |
|
inv.description | description |
|
inv.MiscAmt | freight |
|
inv.TaxAmt | tax |
|
PO Receipt ID | purchaseOrderReceiptId | Looks up the Purchase Order receipt in BuildOps by receipt number and returns the receipt ID. If not found, returns null. |
Vendor | vendorId | Looks up the vendor associated with the Purchase Order receipt in BuildOps and returns the vendor ID. |
Job | jobId | Looks up the job ID linked to the PO receipt in BuildOps and returns the job ID. |
| billNumber | Retrieves the PO receipt number from BuildOps and maps it to the bill number field in Vista. |
inv.APRef | vendorDocumentNumber |
|
| billLines{} |
|
inv.Description | billLines.description |
|
inv.Units | billLines.quantity | If UOM (Unit of Measure) is “LS” (Lump Sum), sets the quantity to 1.00; otherwise, maps the actual units from BuildOps. |
inv.APLine | billLines.lineNumber |
|
inv.UnitCost | billLines.UnitCost | If UOM is “LS”, maps to inv.GrossAmt (total amount); otherwise, maps to the unit cost from BuildOps. |
Taxable | billLines.taxable | If the Tax Code is not empty or “Exempt”, the item is marked as taxable (“True”), otherwise it is “False.” |
Product | productId | Looks up the product ID from the PO receipt lines in BuildOps based on the line number and maps to Vista. |
AR Invoice
Data Flow and Trigger
BuildOps Vista
Trigger: When a new AR Invoice is created or updated in BuildOps a corresponding AR Invoice is created or updated in Vista.
Data Mapping
AR Invoice Create/Update
BuildOps Fields | Vista Fields | Notes: |
LookUp ARCo | Co |
|
Current Date | Mth | yyyy-MM-dd |
LookUp BatchId | BatchId |
|
LookUp CustGroup | CustGroup |
|
LookUp Vista AR Customer | Customer |
|
accountingRefId from BuildOps Contract | jCCo | value before "/" |
accountingRefId from BuildOps Contract | Contract | value after "/" |
invoiceNumber | Invoice |
|
invoiceNumber + cus.name | Description | first 30 characters |
issuedDate | Transdate | yyyy-MM-dd |
dueDate | DueDate |
|
| LineItems.LineType | Hardcoded to “C” for line item type. |
((JArray)(Step("lookup-contract-and-contract-items-in-buildops").Output[0].jcContract["jcContractItems"])).Where(c => c.Value<string>("id") == Data.jcContractItemId.ToString()).Select(s => s["accountingRefId"].ToString().Split('/')[2]).SingleOrDefault() ?? "X" | LineItems.item | Maps the contract item based on the lookup logic, splits the accounting reference ID, and returns the required value. |
description | LineItems.Description | If the description is null, it defaults to “No Line Description”. |
quantity | LineItems.ContractUnits |
|
if(Step("lookup-hq-tax-codes-in-vista").Output.Count == 1) { if(Data.taxable?.ToString() == "True" && Step("calculate-taxrate").Output[0].TaxRate != null) { return new { TaxCode = Step("lookup-hq-tax-codes-in-vista").Output[0].TaxCode.ToString() //TaxBasis = string.Format("{0:0.00}", Data.amount), //TaxAmount = string.Format("{0:0.00}", (decimal.Parse(Data.amount?.ToString()) * decimal.Parse(Step("lookup-hq-tax-codes-in-vista").Output[0].NewRate.ToString()))) }; } }
return new { TaxCode = (string)null }; | LineItems.Tax | Maps the tax code based on the taxability of the line item. If taxable, retrieves the tax code; otherwise, returns null. |
if(Data.lineItemType?.ToString() == "Discount") return (-1 * Decimal.Parse(Data.amount?.ToString())).ToString(); else return Data.amount?.ToString(); | LineItems.BaseAmount | Maps the base amount for the line item. If it’s a discount, the amount is negative. Otherwise, it maps the regular amount. |
AR Cash Receipts / AR Payment
Data Flow and Trigger
Vista BuildOps
Trigger: When a new AR cash receipt is created in Vista an AR Payment is created in BuildOps.
Data Mapping
AR Cash Receipts to AR Payment Mapping
Vista Fields | BuildOps Fields | Notes: |
CR.CMDeposit | paymentNumber |
|
CR.Amount | paymentAmount |
|
CR.TransDate | paymentDate |
|
CR.Customer | billingCustomerId |
|
