customersand list of
usersthat are team members.
organizationand also has a
rolefield which is used for access control.
locationsrelated to them. The
balancefield stores information about the customer's balance. If it's negative, represents their deposit or what the company owes them. The
access_tokenfield stores a hash used for secure login.
customerthey belong to. Customers'
jobscan be tied to specific locations but
invoiceare the key "work" data types.
Requestis a work request made by customers who are looking to get some services provided to them. It has fields for
end_datefor assessment and a boolean for whether or not an assessment is required. It also has a field for team members (users) assigned to do the assessment.
Quoteusually (but not necessarily) follows up work requests. In addition to other self-explanatory fields, it has the
job_convertsfield, which is a list of jobs based on the quote in question, a
change_requestsfield which is a list of changes requested by the customers, and
charge_groupthat handles the list of items/products/services to bill the customer.
visits: a list of
scheduleswhich are of type visit. They are specific to jobs and are created using API workflows.
visits_count: an integer that stores the number of visits. On job creation, this number is set even before all the visits are created in the back-end. This helps in UX such that a "loading state" is displayed where the repeating group of visits should be indicating that they are currently being created.
recurring_duration_mode: can be either week or month. The value determines which API workflow is used to create the visits in the backend as can be seen in the workflow for creating a new job.
recurring_duration: is a number that determines how many weeks or months the job lasts.
recurring_repeat: is a number that determines how often
recurring_durationof the job will take place. The
recurring_repeatis what gives the
schedule_text: is concatenated from the inputs where some of the values are pulled during the job creation. Example: Monthly on the 23rd of every month or Weekly on Fridays.
billing_type:This can either be visit or fixed and determines in part how invoices that include the job will be generated.
When it is visit, the user will need to select one or more visits. Each visit's charges (sum of charges) will be added to the total for that job at the point of invoice creation. For example for a job with weekly visits including two items of $10 each (total $20), two of these are selected during invoice creation (job selection) and added to the invoice called "Weekly Service" totaling $20 each.
When it is fixed, there will be no visits to select during job selection stage. On the invoice creation page, the default charges of that job will be listed in the line items. For example for a job with weekly visits whose default charges includes two items Clean ($10) and Cut ($15), when the job is selected during job selection stage of invoice creation, on the invoice creation page there will be two line items from it Clean ($10) and Cut ($15) totaling $25.
invoice_timing:it indicates when or how invoices should be generated. For both visit and fixed billing type it can be set to As needed, Once when job is completed or Monthly on the last day of the month. Additionally for visit type it can be set to After every visit.
invoice_reminders:is a list of reminders which are created when the
invoice_timingis set to Monthly on the last day of the month.
invoice_on_completion: is a boolean which when set to "yes" will prompt you to generate an invoice for the job when you mark it as completed. During job creation, it is set to "yes" when the
job_typeis onetime and on the user side (front end) there is the checkbox to remind you to invoice on completion. It is checked when the
job_typeis recurring and the dropdowns for
invoice_timingare set to Once when job is completed.
default_charge_lines: is a list of
charge_lines. Charge_lines are duplicates of the original charges that a job has. They are used in the creation of additional visits to display the same items the original job has, but allow you to edit the quantity or add extra items.
charge_group: is a bill which contains a list of charges, as well as discount and tax applied, however, in case of
jobsit doesn't include either tax or discount and the
sub_totalis the real Total. Charges are basically line items that contain an item, description, quantity, price, total.
Invoices are meant for customers and may or may not be based on existing jobs for the customers. The
amountfield has the same value as the
totalfield of the invoice's
balancefield starts out once the job was invoiced.It decreases as payments are received from the customer.
Schedules are to-dos that can be assigned to team members and have a
typeof either visit or task. They also have the following fields which are specific to visit type:
job: is the job that this schedule/visit is attached to.
charge_lines: are similar data types to
charges. Each of them takes one of the charges from the job the schedule is attached to and has a different
service_charge: is a special kind of charge. There are two types of
service_charge: Weekly Service and Monthly Service. They are used when the job has a visit
billing_type. This means when you select multiple visits to invoice, each will be reflected on the invoice charges as a separate Weekly/Monthly Service.
Reminders are invoice reminders created for jobs that are set to be billed monthly (recurring payment).
userfield containing the team member who performs the job. They can be attached to a job, otherwise the
titlewill be General.
chargeswith a total which is set in the
sub_totalfield and with some optional fields attached to them. The following fields apply to
charge_groupsused for invoices:
discount_numberwould be treated.
transactioncan have one of those 3 data types which can easily be known from the type field whose value is either payment, deposit or invoice.
levelfield used for access control (Limiting access to certain parts of the app for users on certain plans).
quotesthat have been sent to them.
organizationis created for the user with the
subscription_duedate set to 14 days of free trial period.
organizationis created for the user with the
subscription_duedate set to trial period of 14 days. A plan is also set for the organization.This plan can be specified from the plan parameter on the signup page url. If the parameter doesn't exist, the unlimited plan is set for the organization.
current. Then the value of the second part two = 214625. This is used to search and fetch the request and is passed to a workflow that handles the viewing of a request. In another example when you load the URL https://example.com/work/requests/new, the value of the first part one = requests but because part two = new, requests is not set as the value of the work sub menu custom state
current. Instead this triggers the show of the customer selection popup which handles the next steps for creating a new request.
current. Then the value of the second part two = 214625. This is used to search and fetch the request but because three = edit the fetched request is passed to a triggered workflow for editing the request object.
orgis the username or the organization. The organization with that username is searched and set as a state on the page when it is loaded.
maincan either be one of requests, quotes, jobs or invoices. It can also be login or confirmation when the customer is not logged in.
subwhen available is the ID of the data type specified in
The url of the customer center is made like this for data list view:website home url + customer-center + organization's username + data typeExample: https://servo.com/customer-centre/klinhomes/invoices
The url of the customer center is made like this for data detailed view:website home url + customer-center + organization's username + data type + object IDExample: https://servo.com/customer-centre/klinhomes/invoices/345299
invoices, there is search & filtering functionality. To make it work, a "base" repeating group is first used to filter the data with sorting and dates and then the main repeating group can further filter the first repeating group's data with statuses. The Search&Autocorrect plugin is used for search&autocorrect, and it has its datasource defined similarly to the main repeating group. When the search&autocorrect is in use, the main repeating group shows the result of the search&autocorrect's search.