Sample app: Weekly inventory check with reorder reports

This sample app helps small teams keep consumable supplies in stock. Users count items once a week, see what's below the minimum, and send a reorder report by email or open it as a PDF.

Sometimes you don’t need a full database. If your inventory list is small and stable, a lightweight weekly check can be faster, easier and more reliable. That’s what this sample app does: it lets a person count a short list of items, flags anything below its minimum and produces a clear reorder report.

The app is embedded below. You can open it and try it right away.

Usage

  1. Open the app once a week during inventory.
  2. Enter the on‑hand count for each item (the stepper buttons make this quick).
  3. Check the reorder report at the bottom.
  4. Press Email reorder report to send it to your team, or Open PDF report to view or print it.

How it works

The app is built around a short, fixed list of items stored in a hidden data screen. Each item has a minimum level. The user only enters on‑hand counts.

1. Items and minimums

The data is stored as two arrays:

{ "Gloves", "Spray suits", "Flagging tape", "Spray tips" }{ "Gloves"; "Spray suits"; "Flagging tape"; "Spray tips" }
{ 20, 5, 10, 25 }{ 20; 5; 10; 25 }

These can be edited in Calcapp Creator whenever the list changes.

2. On‑hand counts

The visible screen has one number field per item. For example:

Inventory!GlovesOnHandInventory!GlovesOnHand

Each number field uses a stepper (the +/- buttons) and turns red when its value is below the minimum.

3. Build the reorder report

In a hidden calculations screen, three arrays are computed:

OnHandOnHand
BelowMinBelowMin LowLinesLowLines

The key formula turns any low item into a readable line:

FILTER(ItemNames & " (" & OnHand & " on hand, min " & MinLevels & ")", BelowMin)FILTER(ItemNames & " (" & OnHand & " on hand, min " & MinLevels & ")"; BelowMin)

Then the full report is created with:

IF(SIZE(LowLines)=0, "You're all stocked up!", "Order: " & TEXTJOIN(", ", TRUE, LowLines))IF(SIZE(LowLines)=0; "You're all stocked up!"; "Order: " & TEXTJOIN(", "; TRUE; LowLines))

That report text is shown in the app and also reused when sending or opening the report.

Sending and opening reports

The app uses two action buttons:

  • Email reorder report uses EMAILREPORT and shows a banner when it’s done.
  • Open PDF report uses OPENREPORT to generate a PDF.

Both buttons use AWAIT so a success or error message can be shown after the action finishes.

Here’s the formula for emailing a report:

AWAIT(EMAILREPORT({ Inventory }, "office@example.com", SubjectLine: "Weekly inventory report", Body: ReportText), BANNER("Report sent"), OnFailure: ALERT("Could not send report: " & Error.Message, "Error"))AWAIT(EMAILREPORT({ Inventory }; "office@example.com"; SubjectLine: "Weekly inventory report"; Body: ReportText); BANNER("Report sent"); OnFailure: ALERT("Could not send report: " & Error,Message; "Error"))

Tips and variations

  • If you want users to add new items inside the app, you can add editable text fields and include them in the arrays.
  • To keep the report extra short, remove the on-hand numbers and only include item names.
  • If you prefer printing, you can hide the email button and just keep the PDF button.

That’s it — a small, fast app that solves a common real-world problem with a simple app built with Calcapp.

« Tip: Use initial values with formula-driven drop-downs Tip: Filter drop-downs with optional criteria »