📁 Showcase
Drug Order Book

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