Skip to content

Stock Level Monitoring Applet

Watch the quantity on hand at each location against an optimal and a maximum level you set per item category, and e-mail a list of people when anything falls below or rises above them. It is pure alerting: it reads stock balances and writes nothing back, creates no document and posts no journal — the warning half of Stock Replenishment, which acts. Nothing displays the result: the breach list lives on the run record and in the e-mail, and no screen shows what a run found, so the e-mail is the result.

Your job, and the screen for it

The jobScreen or tabRead
Set what to watch, where, and who is told — an item never received at a location is not checked thereLevel Monitoring Template: Category List, Locations, EntitiesApplet settings; Troubleshooting
Send an alert now or at a later time — only saving a new event schedules a run, not changing a saved one’s date; Recurring is never readLevel Monitoring Events › create, with the template picked firstLifecycle and effects
Re-run a check, or correct one run’s text, recipients or levelsLevel Monitoring Runs › the run view; SAVE, then RUNLifecycle and effects
See what a run found — only the e-mail shows it; a run with no breaches sends none, so silence proves nothingThe alert e-mail; the run’s Modified Date shows it ranLifecycle and effects
Find why an alert never came or reported nothingThe run’s Locations and Emails tabs; the template’s Category ListTroubleshooting
Set up categories, locations and recipients with e-mail addressesItem Maintenance and Organisation applets; the template’s Entities tabBefore you can use it

Overview

Think of it as the warning half of Stock Replenishment. The two applets share the same template → event → run shape and the same Rules Logic / Negation Logic controls (this applet’s own source says the controls were ported from there). Replenishment acts — it raises purchase orders and transfers. Monitoring only tells you.

Where it fits

UpstreamThis appletDownstream
Item categories (inventory labels) and the items carrying them, from Item MaintenanceTemplate — which categories to watch, at which optimal and maximum levels, and the e-mail subject and body to send—
Locations from the Organisation AppletTemplate and run scope — the run checks stock at its locations only. Companies can be picked on the template, event and run too, and are copied onto the run, but the check never reads them: a company narrows nothing—
Entities with e-mail addresses (customers, suppliers, contacts)The recipient listThe alert e-mail
The per-location stock balance the Stock Balance Applet reports onRun — reads the ledger quantity per item per location and records breachesAlert e-mail, and the run’s own record of what it found
—Event — a start date and, optionally, a templateOne queued run

Screens and menus

MenuRouteWhat it listsActions
Level Monitoring Runsstock-level-monitoringRun Name, Description, Created Date, Updated Date, Status+ (create a run by hand) and search on the listing; RUN (evaluate this run now), SAVE and Delete on the run view
Level Monitoring Eventsstock-level-monitoring-eventsEvent Name, Event Code, Created Date, Updated Date, StatusCreate, open, delete
Level Monitoring Templatestock-level-monitoring-templateTemplate Code, Template Name, Created Date, Updated Date, StatusCreate, open, delete
Settingssettings/field-settings, settings/default-selection, settings/release-notes, plus the shared Webhook, Feature Visibility and permission screensSee Configuration—
Personalizationpersonalization/personal-default-selection, personalization/sidebarPer-user defaults, sidebar—

The Template and Run screens each open into a view with a Details tab and four more: Locations, Companies, Category List, and Entities (template) or Emails (run). The Event view has Locations, Companies, Entities and Category List. The tabs appear in whatever order was last saved under Settings → Default Selection (see Applet settings); the order above is the one they ship in. Category List is the tab that carries numbers — one row per item category, with an editable Optimal Stock Value and Maximum Stock Value.

Both grids label those two columns "(MYR)". They are not money: they are compared with the stock balance’s ledger quantity. Read them as units.

Listings load a fixed window and extend it with a More action rather than paging.

Screenshots needed

Screenshots for this page are still to be captured. A capture session should take: the Template listing; a Template view showing the Category List grid with Optimal and Maximum values and the Negation Logic control; the Default Optimal / Maximum Stock Value pair with the inline warning callout; an Event view with Recurring ticked and the recurrence editor open; the Run view with the RUN button; and the run’s Emails section. A scratch tenant is required — the Emails section shows real entity e-mail addresses.

Configuration

Before you can use it

PrerequisiteWhereWhy
Item categories with items attachedItem MaintenanceA run resolves each category label to its item set; a category with no items contributes nothing.
Locations on the templateOrganisation AppletA run with no locations checks nothing and reports nothing, and nothing fails.
At least one optimal or maximum valueThe template’s Categories gridA category link with both values null is skipped.
Entities with an e-mail address linked to the runThe run’s Emails section, copied from the template’s entities when the run starts with noneAn entity whose record has no e-mail address is dropped; one whose e-mail box holds several addresses separated by commas or semicolons gets the alert at each of them. With no address left the alert is skipped and nobody is told, not even in the run.
Server-side permissionsSettings → Permission Set / Role PermissionSee below.

Applet settings

Settings are applet-local, and only one screen changes anything.

  • Settings → Field Settings is the unbound eight-toggle stub — Unit Discount, SST/VAT/GST, WHT, Blanket Order, Segment, G/L Dimension, Profit Center, Project — with no form group, no formControlName and a SAVE button with no click handler. The labels belong to a sales-document settings screen and have nothing to do with stock monitoring. No exposed control found.
  • Settings → Default Selection offers Default Branch and Default Location, and does save them — but nothing in the applet reads them, so nothing changes when you set them. The same screen also carries three Details Tab Ordering lists — Run View, Event View, Template View — which you drag into order and SAVE; each view then shows its tabs in that order for every user, and a tab added in a later build is appended to a saved order. There is no RESET button on this screen.
  • Personalization → Default Selection shows the same Default Branch / Default Location pair, but saves nothing: the first change errors (the screen is opened without the settings it needs) and SAVE goes nowhere (read from the code, not tried).
  • Settings → Release Notes shows the applet’s release notes.

Everything that actually changes behaviour lives on the template, the event and the run, not in Settings. That is the part to configure:

WhereSettingWhat it controlsDefault
Template → Category ListOptimal Stock Value per categoryA location whose ledger quantity is below this is reported as understockempty (no understock check for that category)
Template → Category ListMaximum Stock Value per categoryA location whose ledger quantity is above this is reported as overstockempty (no overstock check)
Template → Category ListDefault Optimal Stock Value, Default Maximum Stock ValueApplied to every category not listed, and only when Negation Logic is ENABLEDempty
Template / Event / Run → CompaniesCompany picksNothing. Copied from the template onto the run and never read; only the Locations tab decides where stock is checkedempty
Template / Event / RunNegation LogicDISABLED = monitor the categories you picked. ENABLED = monitor every other active category in the same lists, using the two default values aboveDISABLED
Template / Event / RunRules Logic (AND / OR)Nothing. The value is carried from template to event to run and logged, but every picked category is always evaluated independently — OR semantics. AND is not implemented.AND (and treated as OR)
TemplateEmail Subject, Email BodyCopied onto the run when the run is created, so editing the template later does not rewrite an alert that already went out. What arrives is described under The alert e-mailempty (subject becomes Stock Level Alert: N breach(es) detected)
EventCycle Start DateNow or in the past: the run happens inside the save, before the success message appears — and the message says created even when that run fails (see Lifecycle). In the future: it waits for the platform’s background sweep, which picks it up once the time has passednow
RunRUNEvaluates this run again inside the button press, with its own locations, categories, recipients, subject and body — save the run first so the button sees your edits—
Settings → Default SelectionDetails Tab Ordering (Run / Event / Template view)The order of the tabs on each view, for every userthe shipped order
Turning Negation Logic ENABLED without setting a Default Optimal or Default Maximum value produces a run that reports nothing at all. The applet shows an inline warning under the two fields when both are empty, and the backend logs the same thing — but the run still completes “successfully” with zero breaches.

Who can change what

The applet has no client-side permissions and checks no HIDE_* / SHOW_* keys, so the Feature Visibility screen has nothing to gate. Access is entirely server-side:

ScreenPermission
Level Monitoring TemplateAPI_STOCK_LEVEL_MONITORING_TEMPLATE_HDR_READ / _CREATE / _UPDATE / _DELETE
Level Monitoring EventsAPI_STOCK_LEVEL_MONITORING_EVENT_HDR_READ / _CREATE / _UPDATE / _DELETE
Level Monitoring RunsAPI_STOCK_LEVEL_MONITORING_RUN_READ / _CREATE / _UPDATE / _DELETE

Whoever may create an event or press RUN can send an e-mail to every recipient on the template, as often as they like. Decide who that is the way you decide who may send customer statements, and review the list when someone changes role.

Fields

Template → Create asks for a Template Code and a Template Name (both required), a Description, the Email Subject and Email Body, and a Status that starts as ACTIVE. The template view adds Creation Date, Created By, Modified Date and Modified By as read-only fields, plus the Locations, Companies, Entities and Categories sections.

What happens to those fields later is not on the form:

  • Neither the code nor the name is checked against other templates. Two templates can share a code. Search the listing before you create one.
  • The name becomes every run’s name. A run is called Run for template: ‘