📁 Showcase
Spreadsheet

Order spreadsheet

Backend

1. Variables

ensure var VarTextPatternOrderId kind: text
  deploy: fixedOnDeploy
  value: "Order-${p1}"

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

ensure var VarPatternOrderBubbleTitle kind: text
  deploy: fixedOnDeploy
  value: "${p1}"

ensure var VarSetOfTextOrderStatus kind: setOfText
  deploy: fixedOnDeploy
  value: "<root>
      <node key='1'>Created</node>
      <node key='2'>Dispatched</node>
      <node key='3'>In Transit</node>
      <node key='4'>Completed</node>
      <node key='5'>Cancelled</node>
    </root>"

2. OrderBook

ensure spreadsheet: OrderBook
  withFields: ["Date", "OrderId"]
  ofTypes: [date, identifier]
  removeRoleSet: [Owner]
  insertRoleSet: [Owner, Salesman]
  updateRoleSet: [Owner, Salesman]
  readRoleSet: [Owner]

ensure form EntityOrder
  label: "Order"
  // Employees can comment in the chat bubble
  commentRoleSet: [Employee]
  // Heading label of the chat bubble
  chatLabelPatternVar: {
      'var': 'VarTextPatternOrderId',
      'paramSet': [
        '${f:Details.OrderId}'
      ]
    }

a. Details

ensure section: Details
ensure field Date defaultValue: "now"
ensure field OrderId
  textPatternVar: {
      'var': 'VarTextPatternOrderId',
      'paramSet': [
        '${var:VarSequenceOrder}'
      ]
    }

ensure field VisitRef kind: ref
  spreadsheet: VisitBook
  layoutSpreadsheet: ListLayout
  copyFieldMap: {
      'VisitRowId': '$RowId',
      'CustomerName': 'CustomerName',
      'MobileNumber': 'MobileNumber',
      'GSTNo': 'GSTNo'
    }

ensure field Remarks kind: paragraph

b. Items

// grid declaration
ensure grid: Items
ensure field ItemRef kind: ref
  spreadsheet: ItemMaster
  copyFieldMap: {
      'ItemMasterRowId': '$RowId',
      'Price': 'Price',
      'Name': 'Name',
      'ItemSize': 'ItemSize',
      'ItemType': 'ItemType'
    }
  layoutSpreadsheet: ListLayout
ensure field Quantity kind: counter
ensure field Total kind: number
ensure field ItemRef
  overlayLayoutSpreadsheet.item.firstLine.caption.lineFields: [Quantity]

// grid layout - list
ensure layoutGrid ListLayout kind: list
  firstLine.first.lineFields: [Name]
  firstLine.caption.lineFields: [Quantity]
  secondLine.first.lineFields: [Price]
  secondLine.first.showLabels: true
  secondLine.caption.lineFields: [Total]

// grid layout - table
ensure layoutGrid TableLayout kind: table
  columnSizeSet: ["Flex", "AutoSize"]
  showComps: [Name, ItemType, ItemSize, Price, Quantity, Total]

// default grid layout - list
// user can toggle between list and table layouts through overlay menu
ensure grid: Items
  layoutGridMap.asideDefaultLayout: ListLayout

c. Summary

ensure section: Summary
ensure field TotalBill kind: number
  prefix: "₹"
  suffix: "/-"
ensure field OrderStatus kind: pickText
  permissionMatrix: {
      'defaultPermission': 'write',
      'Employee': 'read'
    }
  sourceVar: VarSetOfTextOrderStatus
  defaultOptionId: "1"

d. Formulas

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

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

Frontend

1. Actions

a. AddOrder

ensure var VarMappingVisitToOrder kind: mapping
  deploy: fixedOnDeploy
  fromForm: EntityVisit
  toForm: EntityOrder
  fieldMappingMap: {
      'map': {
        '${f:SysRowId}': 'VisitRowId',
        '${f:Details.CustomerName}': 'CustomerName',
        '${f:Details.MobileNumber}': 'MobileNumber',
        '${f:Details.GSTNo}': 'GSTNo'
      }
    }

ensure action AddOrder kind: rowInsert
  icon: "AddShoppingCartRounded"
  spreadsheet: OrderBook
  sendMessageToInbox: true

// attach action to EntityVisit's overlay menu on both form and chat bubble
ensure form EntityVisit
  actionPermission: {
    'AddOrder': {
      'mappingVar': 'VarMappingVisitToOrder',
      'roles': [
        'Salesman',
        'Owner'
      ],
      'groups': [
        'MyVisits'
      ]
    }
  }

b. EditOrderBook

// create Kanban layout on OrderBook spreadsheet
ensure spreadsheet OrderBook
ensure layoutSpreadsheet KanbanLayout kind: kanban
  kanbanField: Summary.OrderStatus
  showFields: [Date, OrderId, CustomerName, MobileNumber, TotalBill]
  showCommentCount: true
  showFooter: true

// on EditOrderBook click open KanbanLayout
ensure action EditOrderBook kind: spreadsheetEditor
  icon: "LibraryBooksRounded"
  spreadsheet: OrderBook
  layoutSpreadsheet: KanbanLayout

b. ShowOrderHistory

ensure action ShowOrderHistory kind: spreadsheetHistory 
  icon: "HistoryRounded" 
  spreadsheet: OrderBook

2. Group actions

Actions are grouped here for demo. Merging the grouped actions from Visit Sheet.

ensure group MyVisits
  pinnedActions: [AddVisit, AddOrder, EditOrderBook, ReportVisit]
  pinnedActionSetMobile: [AddVisit, AddOrder]
  actionPermission: {
      'AddVisit': {
        'menuGroup': '1',
        'roles': [
          'Salesman'
        ]
      },
      'AddOrder': {
        'menuGroup': '1',
        'roles': [
          'Salesman'
        ]
      },
      'EditVisitSheet': {
        'menuGroup': '2',
        'roles': [
          'Owner'
        ]
      },
      'EditOrderBook': {
        'menuGroup': '2',
        'roles': [
          'Owner'
        ]
      },
      'ReportVisit': {
        'menuGroup': '3',
        'roles': [
          'Owner'
        ]
      },
      'ShowOrderHistory': {
        'menuGroup': '3',
        'roles': [
          'Owner'
        ]
      }
    }