Intranet · Footfall (flows) & Yardi upload
Daily visitor-flow figures for the centre — footfall, cars, cinema admissions, plus day flags (open, bank holiday, comparable) — entered day by day or bulk-imported from a spreadsheet, with an optional Yardi upload.
| Area | Intranet |
| Routes | intranet.flows · intranet.flows.index · intranet.flows.import |
| Centre modules | flows · intranet · intranet-yardi |
| Staff levels | root · admin · manager · scmanager · owner |
| Models | intranet-flow · load · yardi-upload |
| UI label | title.header.footfall / menu.navbar.footfall |
| Coverage | 4 use cases · 2 happy · 5 failure |
How it works
selectNextDay makes sequential daily entry fast, and isValidate/total give immediate feedback. The import warns about a real data-quality trap in its own copy: every field must carry an amount, zero included, because blank cells are not treated as zero (intranet.flow.import_warning_errors). Date-range filtering validates ordering locally (intranet.flows.index.date-error). The Yardi upload is behind yardiIsEnabled with its own modal (openModalYardi/uploadYardi).
Use cases
Why someone opens this (4)
- Recording yesterday’s footfall, car-park entries and cinema admissions.
- Loading a month of footfall exported from the counting system.
- Marking bank holidays and comparable days so year-on-year analysis is fair.
- Pushing footfall to Yardi alongside sales.
Path map
flowchart LR F(["Footfall flows and Yardi upload"]):::feat F --> H1["Daily figures entered"]:::ok F --> H2["Month imported"]:::ok F -.-> X1["Blank cells in the import"]:::bad F -.-> X2["Date range reversed"]:::bad F -.-> X3["Save fails"]:::bad F -.-> X4["Yardi upload fails"]:::bad F -.-> X5["Module off"]:::bad classDef feat fill:#26688f,stroke:#26688f,color:#ffffff,font-weight:bold classDef ok fill:#e3f1ea,stroke:#0d6b42,color:#0d4a2e classDef bad fill:#f7e6e2,stroke:#9a2d1c,color:#6e1f13
Happy paths
Daily figures entered
- User opens Footfall and selects the date.
- Enters footfall, cars and cinema figures and ticks the day flags.
submitsaves andinfo.footfall.success.messageconfirms.selectNextDaymoves to the following day for the next entry.
Month imported
- User downloads the example, fills every numeric cell (zeros included) and imports.
- Columns map to date, footfall, cars, cinemas and the day flags.
- The import runs and the figures appear in the list.
Failure paths
Blank cells in the import
Cause — Fields left empty instead of 0.
What happens —
intranet.flow.import_warning_errorswarns before importing: ‘All fields must have an amount, even if it is 0’. Rows with blanks are rejected server-side.
Date range reversed
Cause — Date-from after date-to on the list filter.
What happens —
intranet.flows.index.date-error(‘Date from must be less than date to’).
Save fails
Cause — API error.
What happens —
res.errors?.lengthis inspected in the submit path, but there is no dedicated translated error message for a failed save.
Yardi upload fails
Cause — Yardi rejects the footfall file.
What happens —
informative-message.upload-yardi.error.
Module off
Cause —
flowsmodule disabled.What happens —
intranet-flow#canReadfalse; menu entry hidden.
QA checklist
Tick these off while regression-testing this feature. The boxes are plain Markdown, so progress is visible in git diffs.
- ✅ Daily figures entered
- ✅ Month imported
- ⛔ Blank cells in the import
- ⛔ Date range reversed
- ⛔ Save fails
- ⛔ Yardi upload fails
- ⛔ Module off
Implementation
app/controllers/intranet/flows/index.jsapp/controllers/intranet/flows/import.jsapp/routes/intranet/flows/*.jsapp/models/intranet-flow.jsapp/abilities/intranet-flow.jsapp/services/yardi.js
Translation keys (15)
Key English title.header.footfallFootfall menu.navbar.footfallFootfall footfallFootfall footfall.carsCars footfall.cinemasCinemas footfall.day-opensClosed footfall.day-bank-holidayHoliday footfall.day-comparableNot comparable footfall.day-opens.importOpen (O/NO) footfall.day-bank-holiday.importHoliday (H/NH) footfall.day-comparable.importComparable (C) info.footfall.success.messageSUCCESS - The Yardi upload for the month of {date} was successful intranet.flows.index.date-errorDate from must be less than date to intranet.flow.import_warning_errorsAll fields must have an amount, even if it is 0, fields cannot be left blank in excel. flows.dateDate
Related
- Same area — Store sales declaration & month closing · Sales status overview & Yardi export · Sales & audit-log CSV download · Annual sales statement · Intranet communications (threads, confirmations, authorisations) · Communication subtypes · Files management · SAFT-E - IntelliSales import · Utility consumptions
- Shares data with — Customer CSV import · Children CSV import · Store CSV import · Influence zones · CSV import engine
- Behind the same module — Store create & edit · Store sales declaration & month closing · Sales status overview & Yardi export · Annual sales statement
Generated from doc/feature-inventory.json · id intranet-footfall · commit 276788ca6