Office master
Feature
Allow Owner to manage offices.
Backend
1. OfficeMaster
Create an OfficeMaster spreadsheet to store office-related data.
// fields ending with "*" suffix are required
ensure spreadsheet: OfficeMaster
withFields: [
"Date*",
"Name*",
"OfficeNumber*",
"MobileNumber*",
"Active",
"Address",
"TeaPrice",
"CoffeePrice"
]
ofTypes: [date, text, text, mobileNumber, bool, paragraph, number, number]
readRoleSet: [Owner]
insertRoleSet: [Owner]
updateRoleSet: [Owner]
removeRoleSet: [Owner]
// make some fields queryable and searchable for faster access
ensure spreadsheet OfficeMaster
searchables: [Name, OfficeNumber, MobileNumber, Address]
queryables: [Date, Name, Active, MobileNumber]
// switch context to EntityOffice
ensure form EntityOffice
label: "Office"
chatLabelField: OfficeNumber
// switch context to Details
ensure composite Details
// modify generated fields
ensure field Date defaultValue: "now"
ensure field MobileNumber defaultValue: "+919898989898"
ensure field Address defaultValue: "1 Infinite loop, Cupertino, California."
ensure field TeaPrice min: 0 prefix: "₹ "
ensure field CoffeePrice min: 0 prefix: "₹ "
Frontend
1. Actions
a. AddOffice
Implement an AddOffice action to add a new office to the OfficeMaster spreadsheet.
ensure action AddOffice kind: rowInsert
spreadsheet: OfficeMaster
icon: "PersonAddAlt1Rounded"
defaultValueMap: {
'TeaPrice': {'value': 10},
'Active': {'value': true},
'CoffeePrice': {'value': 15}
}
sendMessageToInbox: true
b. EditOfficeMaster
Implement an EditOfficeMaster action to modify existing office details in the OfficeMaster spreadsheet.
// switch context to OfficeMaster
ensure spreadsheet OfficeMaster
// Attach List layout and Table layout to OfficeMaster
// to specify how the spreadsheet is displayed
//************
// List layout
//************
// Within list layout each list item is displayed as follows,
//
// FirstLine => Name Date
// SecondLine => MobileNumber OfficeNumber
// ThirdLine => TeaPrice, CoffeePrice
ensure layoutSpreadsheet ListLayout kind: list
filter.showSearchBar: true
firstLine.first.lineFields: [Name]
firstLine.caption.lineFields: [Date]
secondLine.first.lineFields: [MobileNumber]
secondLine.caption.lineFields: [OfficeNumber]
thirdLine.first.lineFields: [TeaPrice, CoffeePrice]
//*************
// Table layout
//*************
ensure layoutSpreadsheet TableLayout kind: table
showComps: [
Date,
Name,
OfficeNumber,
MobileNumber,
Active,
Address,
TeaPrice,
CoffeePrice
]
columnSizeSet: ["AutoSize"]
//******************************
// Action to expose OfficeMaster
//******************************
// this action update the existing office or add a new office
ensure action EditOfficeMaster kind: spreadsheetEditor
spreadsheet: OfficeMaster
icon: "EditNoteRounded"
defaultValueMap: {
'TeaPrice': {
'value': 10
},
'Active': {
'value': true
},
'CoffeePrice': {
'value': 15
}
}
layoutSpreadsheet: TableLayout
bulkInsertRoleSet: [Owner]
2. Group actions
Group these actions under a section named “OfficeMaster” for easy access.
ensure group OfficeMaster
allowPromptAssistant: false
hideActionMenu: true
pinnedActions: [AddOffice, EditOfficeMaster]
actionPermission: {
'AddOffice': {
'roles': ['Owner']
},
'EditOfficeMaster': {
'roles': ['Owner']
}
}