📁 Showcase
Drug Order Book

Drug order book

Backend

1. Variables

Create a VarOrderStatus variable to display the current status of the order placed by the customer, indicating its progress in the fulfillment process.

// order status variable
ensure var VarOrderStatus kind: setOfText
  modules: ["Pharmacy", "Jewelery"]
  deploy: fixedOnDeploy
  value: "<root>
      <node key='keyCreated'>Created</node>
      <node key='keyCreditCheck'>CreditCheck</node>
      <node key='keyDispatched'>Dispatched</node>
      <node key='keyCompleted'>Completed</node>
      <node key='keyCancelled'>Cancelled</node>
    </root>"

Create a VarDeeplinkSuccessMessage variable to display a success message to the customer once their order has been successfully placed through deeplink.

// deeplink success message variable
ensure var VarDeeplinkSuccessMessage kind: paragraph
  modules: ["Pharmacy"]
  deploy: fixedOnDeploy
  value: "Thank you, ${p1} for your purchase of ${p2} with us!"

Create a VarSequence variable.

ensure var VarSequence kind: sequence 
  deploy: fixedOnDeploy 
  value: 100

Create a VarTextPatternSeq pattern variable that utilizes the VarSequence.

ensure var VarTextPatternSeq kind: text 
  deploy: fixedOnDeploy 
  value: "${P}"

2. DrugOrderBook

Create a DrugOrderBook spreadsheet to store data related to drug orders.

ensure spreadsheet: DrugOrderBook
  withFields: ["RowId", "OrderNo", "Date", "Customer", "CustomerName*", "Address*", "Handle*"]
  ofTypes: [rowId, identifier, date, pickUser, text, paragraph, handle]
  modules: ["Pharmacy"]
  readRoleSet: [Owner, Customer, $Public]
  insertRoleSet: [Owner, Customer, $Public]
  removeRoleSet: [Owner]
  updateRoleSet: [Owner]

Configure the properties of form EntityDrugOrder form and its associated fields.

ensure form EntityDrugOrder
  label: "Order"
  modules: ["Pharmacy"]
  commentRoleSet: [Owner, $Public]
  allowToPrintForm: true
  permissionMatrix: {
    '$Public': 'write'
  }
ensure section: Details
ensure field RowId
  permissionMatrix: {
    'defaultPermission': 'invisible'
  }
ensure field Customer
  roleDataSource: [Customer]
  permissionMatrix: {
    'defaultPermission': 'invisible'
  }
ensure field Date defaultValue: "now"

Add an Items grid to the EntityDrugOrder form to capture and organize the drug item details, which will then be stored in the DrugOrderBook spreadsheet for further processing.

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: "₹"

Apply a ListLayout to the Items grid to display the data in a list format.

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

Apply a TableLayout to the Items grid to display the data in a tabular format.

ensure layoutGrid TableLayout kind: table
  showComps: [Items.Name,
    Ingredient,
    Brand,
    Dose,
    Pack,
    DiscountedPrice,
    Quantity,
    Items.Total
  ]

ensure grid: Items
  layoutGridMap.asideDefaultLayout: ListLayout

Add a Summary section to the EntityDrugOrder form to capture and present the overall, aggregated details of an order.

ensure section: Summary
ensure field OrderStatus kind: pickText
  sourceVar: VarOrderStatus
  defaultOptionId: "keyCreated"
ensure field TotalBill kind: number disabled: true prefix: "₹"
ensure field Orderlink kind: hyperlink
  permissionMatrix: {
    'defaultPermission': 'invisible'
  }

Set a formula to calculate the Total price of an item.

ensure formula TotalFormula
  assignToField: Items.Total
  formula: "${f:Items.DiscountedPrice} * ${f:Items.Quantity}"

Set a formula to calculate the TotalBill of an order.

ensure formula TotalBillFormula
  assignToField: TotalBill
  formula: "SUM(${f:Items.Total})"

Set the fields as searchable and/or queryable to enable search functionality on them.

ensure spreadsheet DrugOrderBook
  searchables: [CustomerName, Address, Handle]
  queryables: [RowId]

3. RepeatDrugOrderSheet

Create a RepeatDrugOrderSheet spreadsheet to store data related to repeat drug orders.

ensure spreadsheet: RepeatDrugOrderSheet 
  withFields: ["Order", "Customer"]
  ofTypes: [text, pickUser]
  readRoleSet: [Owner] 
  insertRoleSet: [Owner, Customer] 
  updateRoleSet: [Owner, Customer] 
  removeRoleSet: [Owner] 
  clearRoleSet: [Owner]

ensure form EntityRepeatDrugOrder
ensure section: Details
ensure field Customer roleDataSource: [Customer]

Frontend

1. Actions

a. AddDrugOrder

Implement an AddDrugOrder to insert a new orders into the DrugOrderBook spreadsheet.

ensure action AddDrugOrder kind: rowInsert
  label: "Add order"
  modules: ["Pharmacy"]
  icon: "AddRounded"
  spreadsheet: DrugOrderBook
  sendMessageToInbox: true

b. EditDrugOrderBook

Implement an EditDrugOrderBook to facilitate the modification and updating of existing order information within the DrugOrderBook spreadsheet.

ensure spreadsheet DrugOrderBook
ensure layoutSpreadsheet TableLayout kind: table
  columnSizeSet: ["AutoSize"]
  showCommentCount: true
  showComps: [Date, CustomerName, Address, Handle, TotalBill, Items]

ensure action EditDrugOrderBook kind: spreadsheetEditor
  label: "Order book"
  modules: ["Pharmacy"]
  icon: "AddShoppingCartRounded"
  spreadsheet: DrugOrderBook
  layoutSpreadsheet: TableLayout

c. AddRepeatOrder

Implement an AddRepeatOrder to insert a repeat order into the RepeatDrugOrderSheet spreadsheet.

ensure action AddRepeatOrder kind: rowInsert 
  spreadsheet: RepeatDrugOrderSheet

2. Deeplinks

a. DeeplinkDrugOrderInsert

Configure a DeeplinkDrugOrderInsert to enable a direct and efficient link for seamlessly adding a new drug order.

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.CustomerName}',
      '${f:Items.Name}'
    ]
  }

b. DeeplinkDrugOrder

Apply a DeeplinkLayout to the EntityDrugOrder form.

ensure form EntityDrugOrder

ensure layout DeeplinkLayout kind: content
  direction: vertical
  start.fields: [Date, Details.CustomerName, Address, Handle]
  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

Apply a Template layout to the EntityDrugOrder form.

ensure layout Template kind: template
  showEnterprise: true
  showSeparator: true
  paperSize: a4Size

Configure a DeeplinkDrugOrder to create a direct, streamlined link that allows for easy and efficient access to an order.

ensure deeplink DeeplinkDrugOrder kind: spreadsheetRow
  modules: ["Pharmacy"]
  visibilityConstraint: enforceEnterpriseUserSignIn
  creationRoles: [Owner]
  expiry: noExpiry
  showEnterpriseImageInLinkPreview: true
  showHeader: false
  spreadsheet: DrugOrderBook
  formContentLayout: DeeplinkLayout
  formTemplateLayout: Template

3. Prompt

Configure a PromptRepeatOrder to automatically repeat the customer's previous order, including all items and details.

ensure prompt PromptRepeatOrder 
  action: AddRepeatOrder 
  promptText: "repeat last order" 
  permissionRoles: [Customer, Owner]

4. Group actions

Group all these actions into a DrugOrderBook section for more convenient access.

ensure group DrugOrderBook
  pinnedActions: [EditDrugOrderBook, AddDrugOrder]
  hideActionMenu: true
  actionPermission: {
    'AddDrugOrder': {
      'roles': [
        'Owner',
        '$Public'
      ]
    },
    'EditDrugOrderBook': {
      'roles': [
        'Owner'
      ]
    },
    'AddRepeatOrder': {
      'roles': [
        'Owner',
        'Customer'
      ]
    }
  }

Agent

1. DrugOrderBook.xlsx

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"]