Drug order book
Backend
1. Variables
// order status variable
ensure var VarOrderStatus kind: setOfText
modules: ["Pharmacy", "Jewellery"]
deploy: fixedOnDeploy
value: "<root>
<node key='1'>Created</node>
<node key='2'>CreditCheck</node>
<node key='3'>Dispatched</node>
<node key='4'>Completed</node>
<node key='5'>Cancelled</node>
</root>"
// deeplink success message variable
ensure var VarDeeplinkSuccessMessage kind: paragraph
modules: ["Pharmacy"]
deploy: fixedOnDeploy
value: "Thank you, ${p1} for your purchase of ${p2} with us!"
paramSet: ["p1", "p2"]
2. DrugOrderBook
ensure spreadsheet: DrugOrderBook
withFields: [Date, CustomerName*, Address*, MobileNumber*]
ofTypes: [date, text, paragraph, mobileNumber]
modules: ["Pharmacy"]
readRoleSet: [Owner, $Public]
insertRoleSet: [Owner, $Public]
removeRoleSet: [Owner]
updateRoleSet: [Owner]
ensure form EntityDrugOrder
label: "Order"
modules: ["Pharmacy"]
commentRoleSet: [Owner, $Public]
allowToPrintForm: true
permissionMatrix: {
'$Public': 'write'
}
ensure section: Details
ensure field Date defaultValue: "now"
ensure field MobileNumber helperText: "+91xxxxxxxxxx"
ensure grid: Items
ensure field Quantity kind: counter min: 0 max: 99999 step: 1
ensure field ItemRef kind: ref
spreadsheet: DrugMaster
copyFieldMap: {
'Pack': 'Pack',
'Name': 'Name',
'Ingredient': 'Ingredient',
'DiscountedPrice': 'DiscountedPrice',
'Dose': 'Dose',
'MRP': 'MRP',
'Brand': 'Brand',
'ItemMasterRowId': '$RowId'
}
layoutSpreadsheet: ListLayout
overlayLayoutSpreadsheet.item.firstLine.caption.lineFields: [Quantity]
forceOpenOnFormCreate: true
forceOpenOnGridRowCreate: true
permissionMatrix: {
'defaultPermission': 'invisible'
}
ensure field Total kind: number
ensure field ItemMasterRowId
permissionMatrix: {
'defaultPermission': 'invisible'
}
ensure field DiscountedPrice prefix: "₹"
ensure field MRP prefix: "₹"
ensure layoutGrid ListLayout kind: list
firstLine.first.lineFields: [Name]
firstLine.caption.lineFields: [Quantity]
secondLine.first.lineFields: [Ingredient]
secondLine.first.showLabels: true
thirdLine.first.lineFields: [Brand]
thirdLine.first.showLabels: true
fourthLine.first.lineFields: [Dose, Pack]
fourthLine.first.showLabels: true
fifthLine.first.lineFields: [DiscountedPrice]
fifthLine.first.showLabels: true
ensure layoutGrid TableLayout kind: table
showComps: [Items.Name,
Ingredient,
Brand,
Dose,
Pack,
DiscountedPrice,
Quantity,
Items.Total
]
ensure grid: Items
layoutGridMap.asideDefaultLayout: ListLayout
ensure section: Summary
ensure field OrderStatus kind: pickText
sourceVar: VarOrderStatus
defaultOptionId: "1"
ensure field TotalBill kind: number disabled: true prefix: "₹"
ensure formula TotalFormula
assignToField: Items.Total
formula: "${f:Items.DiscountedPrice} * ${f:Items.Quantity}"
ensure formula TotalBillFormula
assignToField: TotalBill
formula: "SUM(${f:Items.Total})"
ensure spreadsheet DrugOrderBook
searchables: [Details.Name, Address, MobileNumber]
Frontend
1. Actions
a. AddDrugOrder
ensure action AddDrugOrder kind: rowInsert
label: "Add order"
modules: ["Pharmacy"]
icon: "AddRounded"
spreadsheet: DrugOrderBook
sendMessageToInbox: true
b. EditDrugOrderBook
ensure spreadsheet DrugOrderBook
ensure layoutSpreadsheet TableLayout kind: table
columnSizeSet: ["AutoSize"]
showCommentCount: true
showComps: [Date, Details.Name, Address, MobileNumber, TotalBill, Items]
masterDetailGridLayoutMap: {
'Items': 'TableLayout'
}
ensure action EditDrugOrderBook kind: spreadsheetEditor
label: "Order book"
modules: ["Pharmacy"]
icon: "AddShoppingCartRounded"
spreadsheet: DrugOrderBook
layoutSpreadsheet: TableLayout
2. Deeplinks
a. DeeplinkDrugOrderInsert
ensure deeplink DeeplinkDrugOrderInsert kind: spreadsheetInsert
modules: ["Pharmacy"]
visibilityConstraint: allowPublicSharing
creationRoles: [Owner]
expiry: noExpiry
showEnterpriseImageInLinkPreview: true
showHeader: true
showEnterprise: true
transparentHeader: false
spreadsheet: DrugOrderBook
showRepeatButton: true
repeatButtonLabel: "Order Again"
successMessageVar: {
'var': 'VarDeeplinkSuccessMessage',
'paramSet': [
'${f:Details.Name}',
'${f:Items.Name}'
]
}
b. DeeplinkDrugOrder
ensure form EntityDrugOrder
ensure layout DeeplinkLayout kind: content
direction: vertical
start.fields: [Date, Details.Name, Address, MobileNumber]
start.padding: thick
start.showBorderSet: ["top", "bottom"]
flexCenter.showPaddingSet: ["top", "bottom"]
flexCenter.gridLayouts: [Items.TableLayout]
flexCenter.padding: thick
end.fields: [TotalBill]
end.showBorderSet: ["top"]
end.showPaddingSet: ["top", "bottom"]
end.padding: thick
ensure layout Template kind: template
showEnterprise: true
showSeparator: true
paperSize: a4Size
ensure deeplink DeeplinkDrugOrder kind: spreadsheetRow
modules: ["Pharmacy"]
visibilityConstraint: enforceEnterpriseUserSignIn
creationRoles: [Owner]
expiry: noExpiry
showEnterpriseImageInLinkPreview: true
showHeader: false
spreadsheet: DrugOrderBook
formContentLayout: DeeplinkLayout
formTemplateLayout: Template
3. Group actions
ensure group DrugOrderBook
pinnedActions: [EditDrugOrderBook, AddDrugOrder]
hideActionMenu: true
actionPermission: {
'AddDrugOrder': {
'roles': [
'Owner',
'$Public'
]
},
'EditDrugOrderBook': {
'roles': [
'Owner'
]
}
}
Agent
1. Configure Drive folder
ensure root
driveSheetMap.driveFolderName: BleachPharma
2. DrugBrandMaster.xlsx
ensure driveSheet DrugBrandMaster
spreadsheet: DrugBrandMaster
roles: [Owner]
exportKindSet: ["xlsx"]
3. DrugDoseMaster.xlsx
ensure driveSheet DrugDoseMaster
spreadsheet: DrugDoseMaster
roles: [Owner]
exportKindSet: ["xlsx"]
4. DrugPackMaster.xlsx
ensure driveSheet DrugPackMaster
spreadsheet: DrugPackMaster
roles: [Owner]
exportKindSet: ["xlsx"]
5. DrugMaster.xlsx
ensure driveSheet DrugMaster
spreadsheet: DrugMaster
roles: [Owner]
exportKindSet: ["xlsx"]
6. DrugOrderBook.xlsx
a. Partition spreadsheet
Split the spreadsheet data into daily files and generate both .xlsx and .json formats for external accounting integration.
ensure driveSheet DrugOrderBook
spreadsheet: DrugOrderBook
partitionedData: true
roles: [Owner]
attachmentRoles: [Owner]
dataPartitionPeriod: daily
unit: months
value: 3
exportKindSet: ["xlsx", "json"]
b. Layout Details
ensure layout ExcelLayoutDetails
layoutFor: sectionOrGrid
composite: Details
textStyleSet: ["bold"]
borderSet: ["top", "bottom", "left", "right"]
textColor.value: black
bgColor.value: lightBlue
bgColor.shade: s50
c. Layout Summary
ensure layout ExcelLayoutSummary
layoutFor: sectionOrGrid
composite: Summary
textStyleSet: ["bold"]
borderSet: ["top", "bottom", "left", "right"]
textColor.value: black
bgColor.value: deepPurple
bgColor.shade: s50
d. Layout Items
ensure layout ExcelLayoutItems
layoutFor: sectionOrGrid
composite: Items
textStyleSet: ["bold"]
borderSet: ["top", "bottom", "left", "right"]
alignment: end
textColor.value: white
bgColor.value: black
c. Conditional Cell
// if Total > 1000 make the cell standout
ensure layout ExcelLayoutItemsTotal
layoutFor: field
field: Items.Total
fieldLayoutOn: column
borderSet: ["top", "bottom", "left", "right"]
conditionOperator: greaterThan
conditionValue: "${d:null.1000}"
bgColor.value: red
bgColor.shade: s500
textStyleSet: ["bold"]
textColor.value: white