This profile is a showcase of how to setup trackers to allow defining work orders in one tracker, and linked them to billable tasks from another one, allowing to define a custom price aside of the guide and get some of the items selected summed in another field of tracker1. The tracker also demonstrates how item link field currently allows to create and link items in a second tracker on the fly and get them stored while adding the new item in the first tracker.
These pages will be created:
Some tracker items are created for the price guide to ease the usage of the system.
YAML
permissions:
preferences:
feature_trackers: y
feature_search: y
feature_search_fulltext: n
feature_wiki_argvariable: y
feature_syntax_highlighter: y
unified_incremental_update: y
wikiplugin_tabs: y
wikiplugin_button: y
wikiplugin_param: y
wikiplugin_tracker: y
wikiplugin_trackerlist: y
wikiplugin_list: y
trackerfield_dropdownother: y
trackerfield_autoincrement: y
trackerfield_currency: y
trackerfield_dynamiclist: y
trackerfield_math: y
Tracker 1: Work Orders
YAML
objects:
-
type: tracker
ref: work_orders
data:
name: Work orders
description: >
This is where the work orders are stored
sort_default_order: desc
list_default_status: opc
hide_list_empty_fields: y
restrict_end: 0
form_classes:
section_format: tab
restrict_start: 0
show:
- status
-
type: tracker_field
ref: work_orders_general
data:
name: General
permname: general
tracker: $profileobject:work_orders$
options:
level: 3
toggle: o
type: header
order: 5
flags:
- public
-
type: tracker_field
ref: work_orders_WOID
data:
name: 'WO#'
permname: woWOID
tracker: $profileobject:work_orders$
options:
samerow: 1
autocomplete: n
exact: n
type: text_field
order: 10
flags:
- list
- searchable
- public
- mandatory
-
type: tracker_field
ref: work_orders_name
data:
name: Name
permname: woName
tracker: $profileobject:work_orders$
options:
samerow: 1
type: text_field
order: 20
flags:
- link
- list
- searchable
- public
- mandatory
-
type: tracker_field
ref: work_orders_status
data:
name: Status
permname: woStatus
tracker: $profileobject:work_orders$
options:
options:
- 0-Received from client
- 0-Received from client
- 1-Confirmed by us
- 2-Assigned to Account Manager
- 3-Bid by contractor
- 4-Assigned to contractor
- 5-Work done by contractor
- 6-Work accepted by our company
- 7-Invoice Received from Contractor
- 8-Contractor Paid
- 9-Client Invoiced
- 10-Client payment received
type: dropdown
order: 30
flags:
- list
- public
-
type: tracker_field
ref: work_orders_workPrice
data:
name: Work Price
permname: woWorkPrice
tracker: $profileobject:work_orders$
options:
trackerId: $profileobject:work_order_line_items$
displayFieldsList:
- $profileobject:work_order_line_items_workDescription$
- $profileobject:work_order_line_items_contractorPricePerUnit$
- $profileobject:work_order_line_items_overridePrice$
- $profileobject:work_order_line_items_woliKeywords$
displayFieldsListType: table
status: opc
addItems: Add
preSelectFieldMethod: exact
displayOneItem: multi
selectMultipleValues: 1
indexRemote:
- 0
type: item_link
order: 40
flags:
- list
- public
-
type: tracker_field
ref: work_orders_workPriceFinal
data:
name: Work Price, final
permname: woWorkPriceFinal
tracker: $profileobject:work_orders$
options:
calculation: |
(add
(for-each
(list
(split-list
(content woWorkPrice)
(separator ,)
(key id)
)
)
(formula
(tracker-field
(object "trackeritem" id)
(field woliOverridePrice)
)
)
)
)
recalculate: save
type: math
order: 50
flags:
- list
- public
-
type: tracker_field
ref: work_orders_location
data:
name: Location
permname: location
tracker: $profileobject:work_orders$
options:
level: 3
toggle: o
type: header
order: 60
flags:
- public
-
type: tracker_field
ref: work_orders_address
data:
name: Address
permname: woAddress
tracker: $profileobject:work_orders$
options:
samerow: 1
type: text_field
order: 70
flags:
- list
- public
-
type: tracker_field
ref: work_orders_zipCode
data:
name: Zip Code
permname: woZipCode
tracker: $profileobject:work_orders$
options:
samerow: 1
type: numeric
order: 80
flags:
- list
- public
-
type: tracker_field
ref: work_orders_map
data:
name: Map
permname: woMap
tracker: $profileobject:work_orders$
options:
use_as_item_location: 1
list_width: 200
list_height: 200
item_width: 500
item_height: 400
sourceFieldsList:
- >
$profileobject:work_orders_address$
sourceSearchEvent: indexalways
type: map
order: 100
flags:
- list
- public
-
type: tracker_field
ref: work_orders_otherInfos
data:
name: Other infos
permname: otherInfos
tracker: $profileobject:work_orders$
options:
level: 3
toggle: o
type: header
order: 200
flags:
- public
-
type: tracker_field
ref: work_orders_workOrderInstructions
data:
name: work order instructions
permname: woWorkOrderInstructions
tracker: $profileobject:work_orders$
options:
distinct: n
wysiwyg: n
samerow: 1
type: text_area
order: 210
flags:
- public
-
type: tracker_field
ref: work_orders_estimatedCompletionDate
data:
name: Estimated Completion Date
permname: woEstimatedCompletionDate
tracker: $profileobject:work_orders$
options:
datetime: d
blankdate: blank
type: datetime
order: 250
flags:
- list
- public
-
type: tracker_field
ref: work_orders_user
data:
name: user
permname: woUser
tracker: $profileobject:work_orders$
options:
type: user
order: 300
flags:
- public
-
type: tracker_option
ref: work_orders_sort_default_field
data:
tracker: $profileobject:work_orders$
name: sort_default_field
value: >
$profileobject:work_orders_WOID$
-
type: tracker_option
ref: work_orders_popup_fields
data:
tracker: $profileobject:work_orders$
name: popup_fields
value: >
$profileobject:work_orders_workOrderInstructions$
Tracker 2: Work Price Guide
YAML
objects:
-
type: tracker
ref: work_price_guide
data:
name: Work Price Guide
description:
list_default_status: opc
hide_list_empty_fields: y
restrict_end: 0
form_classes:
restrict_start: 0
-
type: tracker_field
ref: work_price_guide_workCategory
data:
name: Work category
permname: wpgWorkCategory
tracker: $profileobject:work_price_guide$
options:
options:
- |
Appliance - remove
- |
Appliance - replace
- Boarding
- |
Cap - dryer vent
- |
Cap - exposed drain
- |
Cap - exposed wire
- |
Cap - gas/water line
- |
Carpet - clean
- |
Clean - fireplace & chimney
- |
Clean - gutters
type: dropdown
order: 0
flags:
- list
- public
-
type: tracker_field
ref: work_price_guide_workDescription
data:
name: Work description
permname: wpgWorkDescription
tracker: $profileobject:work_price_guide$
options:
samerow: 1
type: text_field
order: 10
flags:
- link
- list
- public
- mandatory
-
type: tracker_field
ref: work_price_guide_uM
data:
name: U/M
permname: wpgUM
tracker: $profileobject:work_price_guide$
options:
options:
- Unit
- HRS
type: dropdown
order: 30
flags:
- list
- public
-
type: tracker_field
ref: work_price_guide_contractorPricePerUnit
data:
name: Contractor Price Per Unit
permname: wpgContractorPricePerUnit
tracker: $profileobject:work_price_guide$
options:
samerow: 1
size: 7
locale: en_US.UTF-8
currency: USD
symbol: i
all_symbol: 1
type: currency
order: 40
flags:
- list
- public
-
type: tracker_option
ref: work_price_guide_sort_default_field
data:
tracker: $profileobject:work_price_guide$
name: sort_default_field
value: modification
Tracker 3: Work Order Line Items
YAML
objects:
-
type: tracker
ref: work_order_line_items
data:
name: Work Order Line Items
description:
restrict_end: 0
form_classes:
restrict_start: 0
-
type: tracker_field
ref: work_order_line_items_workDescription
data:
name: Work description
permname: woliWorkDescription
tracker: $profileobject:work_order_line_items$
options:
trackerId: $profileobject:work_price_guide$
fieldId: $profileobject:work_price_guide_workDescription$
displayFieldsList:
- 0
displayFieldsListType: dropdown
status: opc
preSelectFieldMethod: exact
displayOneItem: multi
indexRemote:
- 0
type: item_link
order: 10
flags:
- link
- list
- public
- mandatory
-
type: tracker_field
ref: >
work_order_line_items_contractorPricePerUnit
data:
name: Contractor Price Per Unit
permname: woliContractorPricePerUnit
tracker: $profileobject:work_order_line_items$
options:
trackerId: $profileobject:work_price_guide$
filterFieldIdThere: $profileobject:work_price_guide_workDescription$
filterFieldIdHere: >
$profileobject:work_order_line_items_workDescription$
listFieldIdThere: $profileobject:work_price_guide_contractorPricePerUnit$
statusThere: opc
hideBlank: 1
type: item_list_dynamic
order: 20
flags:
- list
- searchable
- public
-
type: tracker_field
ref: work_order_line_items_overridePrice
data:
name: Override Price
permname: woliOverridePrice
tracker: $profileobject:work_order_line_items$
options:
samerow: 1
size: 7
locale: en_US.UTF-8
currency: USD
symbol: i
all_symbol: 1
type: currency
order: 30
flags:
- list
- searchable
- public
-
type: tracker_field
ref: work_order_line_items_woliKeywords
data:
name: Override Reason (Keywords)
permname: woliKeywords
tracker: $profileobject:work_order_line_items$
options:
samerow: 1
autocomplete: n
exact: n
type: text_field
order: 40
description: >
Free text to facilitate aggregating in a
later stage the work items with
overidden prices for a common reason
(contractor, type of work, special
promotion, etc.)
flags:
- list
- searchable
- public
-
type: tracker_option
ref: work_order_line_items_sort_default_field
data:
tracker: $profileobject:work_order_line_items$
name: sort_default_field
value: modification
Sample data
In Tracker1: Work orders
YAML
objects:
-
type: tracker_item
ref: wo_001
data:
tracker: $Work_Custom_Pricing:work_orders
status: open
values:
- [ $Work_Custom_Pricing:work_orders_WOID, 1 ]
- [ $Work_Custom_Pricing:work_orders_name, "Check current status of the abandoned house ABC (The first Work Order: take pics, etc)" ]
- [ $Work_Custom_Pricing:work_orders_status, "1-Confirmed by us" ]
-
type: tracker_item
ref: wo_002
data:
tracker: $Work_Custom_Pricing:work_orders
status: pending
values:
- [ $Work_Custom_Pricing:work_orders_WOID, 2 ]
- [ $Work_Custom_Pricing:work_orders_name, "Clean the house MNO" ]
- [ $Work_Custom_Pricing:work_orders_status, "0-Received from client" ]
-
type: tracker_item
ref: wo_003
data:
tracker: $Work_Custom_Pricing:work_orders
status: open
values:
- [ $Work_Custom_Pricing:work_orders_WOID, 3 ]
- [ $Work_Custom_Pricing:work_orders_name, "Extend Garage of house XYZ" ]
- [ $Work_Custom_Pricing:work_orders_status, "0-Received from client" ]
In Tracker2: Work Price Guide
YAML
objects:
-
type: tracker_item
ref: wpg_001
data:
tracker: $Work_Custom_Pricing:work_price_guide
status: open
values:
- [ $Work_Custom_Pricing:work_price_guide_workCategory, "Appliance - remove" ]
- [ $Work_Custom_Pricing:work_price_guide_workDescription, "Remove old appliances from the abandoned house" ]
- [ $Work_Custom_Pricing:work_price_guide_uM, "HRS" ]
- [ $Work_Custom_Pricing:work_price_guide_contractorPricePerUnit, "10" ]
-
type: tracker_item
ref: wpg_002
data:
tracker: $Work_Custom_Pricing:work_price_guide
status: open
values:
- [ $Work_Custom_Pricing:work_price_guide_workCategory, "Carpet - clean" ]
- [ $Work_Custom_Pricing:work_price_guide_workDescription, "Clear carpets of each room of the house" ]
- [ $Work_Custom_Pricing:work_price_guide_uM, "HRS" ]
- [ $Work_Custom_Pricing:work_price_guide_contractorPricePerUnit, "15" ]
-
type: tracker_item
ref: wpg_003
data:
tracker: $Work_Custom_Pricing:work_price_guide
status: open
values:
- [ $Work_Custom_Pricing:work_price_guide_workCategory, "Fix structures" ]
- [ $Work_Custom_Pricing:work_price_guide_workDescription, "Fix wooden fence at the garden" ]
- [ $Work_Custom_Pricing:work_price_guide_uM, "HRS" ]
- [ $Work_Custom_Pricing:work_price_guide_contractorPricePerUnit, "8" ]
Wiki pages
Add a page to allow adding items, and the instructions page
This will include:
Profile_Work_Custom_Pricing_page
YAML
instructions: Work Custom Pricing Instructions
preferences:
enable: [ feature_wiki ]
objects:
-
type: wiki_page
ref: wcp_page
data:
name: Work Orders
description: Interface to manage work orders
lang: en
content: wikicontent:Profile_Work_Custom_Pricing_page
-
type: wiki_page
ref: wcp_instructions_page
data:
name: Work Custom Pricing Instructions
description: Instructions on how to use this profile
lang: en
content: wikicontent:Profile_Work_Custom_Pricing_instructions_page