Built 24 Jun 2026 04:32 BST
Canvas app — tracks staff joining and leaving the branch. Four tab views (All / Admin / IX / IM), per-duty Set Today buttons, and a leaver lifecycle workflow. Wraps the existing Staff Movements SharePoint list.
Add this in the Data panel before pasting any YAML:
Staff MovementsThe existing Staff Movements list is used as-is. One new column must be added:
Staff Movements existing| Column name | Type | Notes |
|---|---|---|
DateCompleted | Date and Time (Date Only) | ADD THIS No space in name. Not Required. Used to calculate the 7-day archive window. |
| All other columns | — | Leave as-is. The app uses internal column names directly from the schema. |
Add_x0020_to_x0020_ACOS_x0020_Ex — displays as "Added/Removed Branch Execs Invites"Upgrade_x0020_M365_x0020_License — displays as "Upgrade M365 License"What_0Mailboxes — displays as "What 0Mailboxes are required?"Staff_x002f_ServiceNo — displays as "Staff/Service No or PUID"Paste into App → OnStart in Power Apps Studio. Do not put this inside any screen.
// Staff Movements — App.OnStart
// ─────────────────────────────────────────────────────────────
// TAB EMAIL MAPPINGS (edit these three strings to reassign tabs)
// IX = Allan Hamilton (allan.hamilton775@mod.gov.uk)
// IM = Dan Smith (dan.smith391@mod.gov.uk)
// Admin = Jackie Bishop (jackie.bishop133@mod.gov.uk)
// Anyone else falls through to "All" — the neutral, unprivileged view.
// varTab only ever picks which "pending duties" column is highlighted on
// the dashboard; it grants no extra access on its own. Real access control
// is the SharePoint list permissions, locked to the three names above. But
// an unrecognised user should never be silently handed the "Admin" tab by
// default, so the fallback here is deliberately "All", not "Admin".
// ─────────────────────────────────────────────────────────────
Set(varMyEmail, Lower(User().Email));
Set(
varTab,
Switch(
varMyEmail,
"allan.hamilton775@mod.gov.uk", "IX",
"dan.smith391@mod.gov.uk", "IM",
"jackie.bishop133@mod.gov.uk", "Admin",
"All"
)
);
Set(varSelectedRecord, Blank());
Set(varShowEditPanel, false);
Set(varShowLeaverPanel, false);
Set(varErrEditTitle, false);
Set(varErrEditMovType, false);
Set(varErrAddTitle, false);
Set(varErrAddMovType, false);
ClearCollect(colMovements, 'Staff Movements (LTD)')
Create a new blank screen for each one, then paste in this order. Each screen imports as a complete unit.
DatePicker@0.0.46 control, away from the flat square Classic/DatePicker. v2.4: fixed Start/Leaving Date showing simultaneously. v2.0: rebuilt as a 3-stage wizard.DatePicker@0.0.46, not the flat Classic boxes). Still the old pre-wizard styling otherwise — not yet brought in line with the new look. Add a new movement record: name, movement type, position, staff number, role, start date, notes.scrDashboard in App → StartScreen.Found a problem or need a change? Report it in the issues tracker.