From 057da00fd2c35d802d447bba9e75450c4f090bd9 Mon Sep 17 00:00:00 2001 From: ThreadCount Date: Sun, 13 Sep 2026 11:16:36 +1000 Subject: [PATCH] ThreadCount Community edition Uniform stock management for healthcare linen rooms: the coordinator app, the phone counter and the staff app, for your own server. Built from e2d6d42 on 2026-09-13. Licensed under the Functional Source License (FSL-1.1-ALv2). --- .dockerignore | 17 + .env.example | 45 + .gitignore | 81 + COMMUNITY_VERSION | 1 + Dockerfile | 50 + LICENSE | 105 + README.md | 136 + android-staff/.gitignore | 101 + android-staff/app/.gitignore | 2 + android-staff/app/build.gradle | 108 + android-staff/app/capacitor.build.gradle | 19 + android-staff/app/proguard-rules.pro | 34 + .../myapp/ExampleInstrumentedTest.java | 26 + .../app/src/main/AndroidManifest.xml | 58 + .../tech/threadcount/staff/MainActivity.java | 265 + .../main/res/drawable-land-hdpi/splash.png | Bin 0 -> 2250 bytes .../main/res/drawable-land-mdpi/splash.png | Bin 0 -> 1210 bytes .../main/res/drawable-land-xhdpi/splash.png | Bin 0 -> 4320 bytes .../main/res/drawable-land-xxhdpi/splash.png | Bin 0 -> 6809 bytes .../main/res/drawable-land-xxxhdpi/splash.png | Bin 0 -> 10170 bytes .../main/res/drawable-port-hdpi/splash.png | Bin 0 -> 2890 bytes .../main/res/drawable-port-mdpi/splash.png | Bin 0 -> 1470 bytes .../main/res/drawable-port-xhdpi/splash.png | Bin 0 -> 5530 bytes .../main/res/drawable-port-xxhdpi/splash.png | Bin 0 -> 7891 bytes .../main/res/drawable-port-xxxhdpi/splash.png | Bin 0 -> 11370 bytes .../drawable-v24/ic_launcher_foreground.xml | 34 + .../res/drawable/ic_launcher_background.xml | 170 + .../app/src/main/res/drawable/splash.png | Bin 0 -> 7891 bytes .../app/src/main/res/drawable/splash_icon.png | Bin 0 -> 1096 bytes .../app/src/main/res/layout/activity_main.xml | 12 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 8 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 8 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1039 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 1087 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 1039 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 963 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 881 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 963 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 1027 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 1151 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 1027 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1462 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 1558 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 1462 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1233 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 1993 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 1233 bytes .../app/src/main/res/values-v31/styles.xml | 16 + .../app/src/main/res/values/colors.xml | 9 + .../res/values/ic_launcher_background.xml | 6 + .../app/src/main/res/values/strings.xml | 16 + .../app/src/main/res/values/styles.xml | 26 + .../main/res/xml/data_extraction_rules.xml | 18 + .../app/src/main/res/xml/file_paths.xml | 5 + .../app/src/main/res/xml/shortcuts.xml | 47 + .../getcapacitor/myapp/ExampleUnitTest.java | 18 + android-staff/build.gradle | 29 + android-staff/capacitor.settings.gradle | 8 + android-staff/gradle.properties | 22 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 63375 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + android-staff/gradlew | 248 + android-staff/gradlew.bat | 92 + android-staff/settings.gradle | 5 + android-staff/variables.gradle | 28 + android/.gitignore | 101 + android/app/.gitignore | 2 + android/app/build.gradle | 116 + android/app/capacitor.build.gradle | 21 + android/app/proguard-rules.pro | 44 + .../myapp/ExampleInstrumentedTest.java | 26 + android/app/src/main/AndroidManifest.xml | 56 + .../tech/threadcount/app/MainActivity.java | 219 + .../main/res/drawable-land-hdpi/splash.png | Bin 0 -> 2250 bytes .../main/res/drawable-land-mdpi/splash.png | Bin 0 -> 1210 bytes .../main/res/drawable-land-xhdpi/splash.png | Bin 0 -> 4320 bytes .../main/res/drawable-land-xxhdpi/splash.png | Bin 0 -> 6809 bytes .../main/res/drawable-land-xxxhdpi/splash.png | Bin 0 -> 10170 bytes .../main/res/drawable-port-hdpi/splash.png | Bin 0 -> 2890 bytes .../main/res/drawable-port-mdpi/splash.png | Bin 0 -> 1470 bytes .../main/res/drawable-port-xhdpi/splash.png | Bin 0 -> 5530 bytes .../main/res/drawable-port-xxhdpi/splash.png | Bin 0 -> 7891 bytes .../main/res/drawable-port-xxxhdpi/splash.png | Bin 0 -> 11370 bytes .../drawable-v24/ic_launcher_foreground.xml | 34 + .../res/drawable/ic_launcher_background.xml | 170 + android/app/src/main/res/drawable/splash.png | Bin 0 -> 7891 bytes .../app/src/main/res/drawable/splash_icon.png | Bin 0 -> 1096 bytes .../app/src/main/res/layout/activity_main.xml | 12 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1139 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 1369 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 1139 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 926 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1088 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 926 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 1205 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 1557 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 1205 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1422 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 1767 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 1422 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1721 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 2395 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 1721 bytes .../app/src/main/res/values-v31/styles.xml | 16 + android/app/src/main/res/values/colors.xml | 9 + .../res/values/ic_launcher_background.xml | 4 + android/app/src/main/res/values/strings.xml | 7 + android/app/src/main/res/values/styles.xml | 26 + .../main/res/xml/data_extraction_rules.xml | 18 + android/app/src/main/res/xml/file_paths.xml | 5 + .../getcapacitor/myapp/ExampleUnitTest.java | 18 + android/build.gradle | 29 + android/capacitor.settings.gradle | 12 + android/gradle.properties | 22 + android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 63375 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + android/gradlew | 248 + android/gradlew.bat | 92 + android/settings.gradle | 5 + android/variables.gradle | 30 + androidshell/error.html | 84 + androidshell/index.html | 334 ++ androidshell/media/welcome-poster.jpg | Bin 0 -> 41733 bytes androidshell/media/welcome.mp4 | Bin 0 -> 799159 bytes androidshell/media/wordmark-white.svg | 5 + app/.well-known/assetlinks.json/route.ts | 65 + app/api/2fa/route.ts | 121 + app/api/activity/route.ts | 58 + app/api/app-info/route.ts | 29 + app/api/auth/2fa/route.ts | 74 + app/api/auth/forgot/route.ts | 80 + app/api/auth/login/route.ts | 100 + app/api/auth/logout/route.ts | 22 + app/api/auth/reset/route.ts | 96 + app/api/auth/signup/route.ts | 93 + app/api/backup/route.ts | 25 + app/api/health/route.ts | 26 + app/api/logo/route.ts | 15 + app/api/lookup/route.ts | 80 + app/api/mutate/route.ts | 40 + app/api/photo/[id]/route.ts | 46 + app/api/requests/route.ts | 220 + app/api/rev/route.ts | 37 + app/api/staff/activate/route.ts | 132 + app/api/staff/decide/route.ts | 87 + app/api/staff/login/route.ts | 45 + app/api/staff/logout/route.ts | 23 + app/api/staff/mutate/route.ts | 56 + app/app/activity/page.tsx | 277 + app/app/help/page.tsx | 116 + app/app/issue/page.tsx | 501 ++ app/app/layout.tsx | 20 + app/app/orders/[id]/page.tsx | 374 ++ app/app/orders/page.tsx | 177 + app/app/page.tsx | 178 + app/app/report/page.tsx | 537 ++ app/app/requests/page.tsx | 862 +++ app/app/rounds/page.tsx | 73 + app/app/settings/page.tsx | 997 ++++ app/app/staff/[id]/page.tsx | 1002 ++++ app/app/staff/page.tsx | 417 ++ app/app/stock/[id]/page.tsx | 326 ++ app/app/stock/page.tsx | 284 + app/app/stocktake/page.tsx | 268 + app/auth/page.tsx | 40 + app/error.tsx | 43 + app/favicon.ico | Bin 0 -> 25931 bytes app/global-error.tsx | 70 + app/globals.css | 501 ++ app/layout.tsx | 46 + app/m/(app)/catalogue/[id]/page.tsx | 513 ++ app/m/(app)/catalogue/new/page.tsx | 155 + app/m/(app)/catalogue/page.tsx | 91 + app/m/(app)/count/[id]/page.tsx | 220 + app/m/(app)/count/[id]/variance/page.tsx | 171 + app/m/(app)/count/page.tsx | 78 + app/m/(app)/issue/[staffId]/page.tsx | 220 + app/m/(app)/issue/page.tsx | 45 + app/m/(app)/label/page.tsx | 124 + app/m/(app)/layout.tsx | 16 + app/m/(app)/loading.tsx | 54 + app/m/(app)/more/page.tsx | 43 + app/m/(app)/page.tsx | 104 + app/m/(app)/person/[id]/exchange/page.tsx | 101 + app/m/(app)/person/[id]/page.tsx | 117 + app/m/(app)/person/[id]/return/page.tsx | 131 + app/m/(app)/pickups/page.tsx | 75 + app/m/(app)/receive/page.tsx | 121 + app/m/(app)/reorder/page.tsx | 107 + app/m/(app)/rounds/page.tsx | 110 + app/m/(app)/search/page.tsx | 89 + app/m/(app)/settings/page.tsx | 111 + app/m/(app)/signed-in/page.tsx | 86 + app/m/(app)/stock/page.tsx | 67 + app/m/(app)/variance/page.tsx | 95 + app/m/layout.tsx | 39 + app/m/login/layout.tsx | 13 + app/m/login/page.tsx | 205 + app/m/signup/layout.tsx | 12 + app/m/signup/page.tsx | 11 + app/my/(app)/account/page.tsx | 11 + app/my/(app)/approvals/[id]/page.tsx | 17 + app/my/(app)/approvals/page.tsx | 43 + app/my/(app)/damage/page.tsx | 13 + app/my/(app)/kit/page.tsx | 12 + app/my/(app)/kitcheck/page.tsx | 16 + app/my/(app)/layout.tsx | 42 + app/my/(app)/loading.tsx | 55 + app/my/(app)/not-found.tsx | 28 + app/my/(app)/orders/[id]/messages/page.tsx | 15 + app/my/(app)/orders/[id]/page.tsx | 17 + app/my/(app)/orders/page.tsx | 24 + app/my/(app)/page.tsx | 67 + app/my/(app)/raise/page.tsx | 44 + app/my/(app)/request/page.tsx | 47 + app/my/(app)/round/page.tsx | 32 + app/my/(app)/shelf/page.tsx | 13 + app/my/(app)/waitlist/page.tsx | 15 + app/my/(app)/ward/page.tsx | 16 + app/my/approve/page.tsx | 116 + app/my/layout.tsx | 34 + app/my/signin/page.tsx | 229 + app/not-found.tsx | 11 + app/page.tsx | 6 + app/print/labels/page.tsx | 148 + app/print/order-form/page.tsx | 397 ++ app/print/page.tsx | 102 + app/reset/layout.tsx | 20 + app/reset/page.tsx | 186 + capacitor.config.ts | 84 + components/Analytics.tsx | 85 + components/AuthForm.tsx | 351 ++ components/AutoPrint.tsx | 34 + components/Camera.tsx | 63 + components/DemoBanner.tsx | 44 + components/ErrorReporting.tsx | 45 + components/MAuth.tsx | 121 + components/MPerson.tsx | 81 + components/MScan.tsx | 183 + components/MSignup.tsx | 169 + components/PlanBanner.tsx | 28 + components/PlanChoice.tsx | 32 + components/PlanTab.tsx | 138 + components/Shell.tsx | 157 + components/SsoSettings.tsx | 13 + components/Turnstile.tsx | 73 + components/TwoFactor.tsx | 187 + components/dialogs.tsx | 1159 ++++ components/m.tsx | 426 ++ components/my.tsx | 40 + components/screens/Account.tsx | 138 + components/screens/Approvals.tsx | 199 + components/screens/ApproveByLink.tsx | 196 + components/screens/Damage.tsx | 144 + components/screens/Desk.tsx | 352 ++ components/screens/Home.tsx | 215 + components/screens/Kit.tsx | 131 + components/screens/KitCheck.tsx | 181 + components/screens/ManagerNav.tsx | 44 + components/screens/Order.tsx | 194 + components/screens/Orders.tsx | 100 + components/screens/Request.tsx | 255 + components/screens/Review.tsx | 266 + components/screens/Round.tsx | 201 + components/screens/Shelf.tsx | 97 + components/screens/Thread.tsx | 110 + components/screens/Waitlist.tsx | 176 + components/screens/Ward.tsx | 66 + components/staffnav.tsx | 60 + components/staffui.tsx | 720 +++ components/ui.tsx | 325 ++ docker-compose.yml | 72 + docker/backup.sh | 18 + docs/banner.svg | 15 + docs/self-hosting.md | 124 + instrumentation.ts | 75 + lib/analytics.ts | 172 + lib/approvallink.ts | 153 + lib/audit.ts | 117 + lib/barcode.ts | 114 + lib/client.tsx | 84 + lib/compute.ts | 1243 ++++ lib/csrf.ts | 15 + lib/csv.ts | 79 + lib/cycledata.ts | 107 + lib/db.ts | 18 + lib/deskdata.ts | 188 + lib/edition.ts | 11 + lib/errors.ts | 47 + lib/feedback.ts | 85 + lib/glitchtip.ts | 162 + lib/links.ts | 8 + lib/live.ts | 135 + lib/mail.ts | 61 + lib/managerdata.ts | 197 + lib/nativescan.ts | 131 + lib/opencount.ts | 76 + lib/ops.ts | 3416 +++++++++++ lib/ops/alerts.ts | 7 + lib/photo.ts | 37 + lib/photostore.ts | 91 + lib/plan.ts | 142 + lib/print.ts | 57 + lib/ratelimit.ts | 64 + lib/reset.ts | 55 + lib/session.ts | 91 + lib/sets.ts | 293 + lib/snapshot.ts | 176 + lib/staffauth.ts | 80 + lib/staffclient.tsx | 111 + lib/staffdata.ts | 506 ++ lib/staffops.ts | 733 +++ lib/staffreq.ts | 238 + lib/staffsession.ts | 128 + lib/stripe.ts | 2 + lib/switches.ts | 56 + lib/totp.ts | 137 + lib/turnstile.ts | 58 + lib/twofactor.ts | 44 + lib/wakelock.ts | 45 + next.config.ts | 47 + package-lock.json | 5102 +++++++++++++++++ package.json | 43 + patches/@capacitor+android+6.2.2.patch | 17 + prisma.config.ts | 12 + .../20260827035001_init/migration.sql | 412 ++ .../20260828100000_update_wave/migration.sql | 48 + .../migration.sql | 13 + .../migration.sql | 4 + .../20260829010000_preloved/migration.sql | 34 + .../migration.sql | 18 + .../migration.sql | 3 + .../migration.sql | 3 + .../20260902100000_catalog_type/migration.sql | 3 + .../migration.sql | 20 + .../20260906120000_locations/migration.sql | 32 + .../migration.sql | 25 + .../20260907130000_audit_event/migration.sql | 16 + .../20260907140000_cost_history/migration.sql | 25 + .../migration.sql | 6 + .../20260907160000_two_factor/migration.sql | 21 + .../migration.sql | 34 + .../20260907190000_staff_app/migration.sql | 228 + .../20260907190500_request_seq/migration.sql | 3 + .../migration.sql | 30 + .../migration.sql | 3 + .../migration.sql | 4 + .../migration.sql | 51 + .../20260909005105_facility_rev/migration.sql | 6 + .../migration.sql | 5 + .../migration.sql | 16 + .../migration.sql | 41 + .../migration.sql | 11 + .../migration.sql | 26 + .../migration.sql | 55 + .../migration.sql | 22 + .../migration.sql | 19 + .../20260912030000_operators/migration.sql | 62 + .../migration.sql | 14 + .../migration.sql | 74 + .../migration.sql | 13 + .../migration.sql | 22 + .../20260913010000_facility_sso/migration.sql | 18 + .../20260913120000_plans/migration.sql | 22 + .../migration.sql | 99 + prisma/migrations/migration_lock.toml | 3 + prisma/schema.prisma | 1296 +++++ proxy.ts | 60 + public/.well-known/security.txt | 10 + scripts/approval-mint.cjs | 33 + scripts/build-counter-aab.sh | 99 + scripts/build-staff-aab.sh | 126 + scripts/check-barcode.ts | 40 + scripts/check-identity.sh | 48 + scripts/check-totp.ts | 76 + scripts/e2e-app.sh | 184 + scripts/e2e-audit.sh | 85 + scripts/e2e-bulk.sh | 90 + scripts/e2e-catalogue.sh | 101 + scripts/e2e-community.sh | 49 + scripts/e2e-cost.sh | 78 + scripts/e2e-delete.sh | 92 + scripts/e2e-mobile.sh | 93 + scripts/e2e-photos.sh | 75 + scripts/e2e-preflight.sh | 52 + scripts/e2e-preloved.sh | 119 + scripts/e2e-scan.sh | 242 + scripts/e2e-security.sh | 121 + scripts/e2e-sets.sh | 817 +++ scripts/e2e-staff.sh | 218 + scripts/e2e-staffapp.sh | 718 +++ scripts/e2e.sh | 206 + scripts/make-staff-icon.py | 96 + scripts/photos-to-disk.cjs | 60 + scripts/reset-mint.cjs | 39 + scripts/reset-token.cjs | 27 + scripts/schema-diff.sh | 17 + scripts/totp-code.ts | 14 + staffshell/error.html | 84 + staffshell/index.html | 335 ++ staffshell/media/welcome-poster.jpg | Bin 0 -> 41733 bytes staffshell/media/welcome.mp4 | Bin 0 -> 799159 bytes staffshell/media/wordmark-white.svg | 5 + tsconfig.json | 34 + 406 files changed, 47822 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 COMMUNITY_VERSION create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 android-staff/.gitignore create mode 100644 android-staff/app/.gitignore create mode 100644 android-staff/app/build.gradle create mode 100644 android-staff/app/capacitor.build.gradle create mode 100644 android-staff/app/proguard-rules.pro create mode 100644 android-staff/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java create mode 100644 android-staff/app/src/main/AndroidManifest.xml create mode 100644 android-staff/app/src/main/java/tech/threadcount/staff/MainActivity.java create mode 100644 android-staff/app/src/main/res/drawable-land-hdpi/splash.png create mode 100644 android-staff/app/src/main/res/drawable-land-mdpi/splash.png create mode 100644 android-staff/app/src/main/res/drawable-land-xhdpi/splash.png create mode 100644 android-staff/app/src/main/res/drawable-land-xxhdpi/splash.png create mode 100644 android-staff/app/src/main/res/drawable-land-xxxhdpi/splash.png create mode 100644 android-staff/app/src/main/res/drawable-port-hdpi/splash.png create mode 100644 android-staff/app/src/main/res/drawable-port-mdpi/splash.png create mode 100644 android-staff/app/src/main/res/drawable-port-xhdpi/splash.png create mode 100644 android-staff/app/src/main/res/drawable-port-xxhdpi/splash.png create mode 100644 android-staff/app/src/main/res/drawable-port-xxxhdpi/splash.png create mode 100644 android-staff/app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 android-staff/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 android-staff/app/src/main/res/drawable/splash.png create mode 100644 android-staff/app/src/main/res/drawable/splash_icon.png create mode 100644 android-staff/app/src/main/res/layout/activity_main.xml create mode 100644 android-staff/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 android-staff/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 android-staff/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android-staff/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 android-staff/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 android-staff/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android-staff/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 android-staff/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 android-staff/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android-staff/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 android-staff/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 android-staff/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android-staff/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 android-staff/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 android-staff/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android-staff/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 android-staff/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 android-staff/app/src/main/res/values-v31/styles.xml create mode 100644 android-staff/app/src/main/res/values/colors.xml create mode 100644 android-staff/app/src/main/res/values/ic_launcher_background.xml create mode 100644 android-staff/app/src/main/res/values/strings.xml create mode 100644 android-staff/app/src/main/res/values/styles.xml create mode 100644 android-staff/app/src/main/res/xml/data_extraction_rules.xml create mode 100644 android-staff/app/src/main/res/xml/file_paths.xml create mode 100644 android-staff/app/src/main/res/xml/shortcuts.xml create mode 100644 android-staff/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java create mode 100644 android-staff/build.gradle create mode 100644 android-staff/capacitor.settings.gradle create mode 100644 android-staff/gradle.properties create mode 100644 android-staff/gradle/wrapper/gradle-wrapper.jar create mode 100644 android-staff/gradle/wrapper/gradle-wrapper.properties create mode 100755 android-staff/gradlew create mode 100644 android-staff/gradlew.bat create mode 100644 android-staff/settings.gradle create mode 100644 android-staff/variables.gradle create mode 100644 android/.gitignore create mode 100644 android/app/.gitignore create mode 100644 android/app/build.gradle create mode 100644 android/app/capacitor.build.gradle create mode 100644 android/app/proguard-rules.pro create mode 100644 android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/java/tech/threadcount/app/MainActivity.java create mode 100644 android/app/src/main/res/drawable-land-hdpi/splash.png create mode 100644 android/app/src/main/res/drawable-land-mdpi/splash.png create mode 100644 android/app/src/main/res/drawable-land-xhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-land-xxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-land-xxxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-port-hdpi/splash.png create mode 100644 android/app/src/main/res/drawable-port-mdpi/splash.png create mode 100644 android/app/src/main/res/drawable-port-xhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-port-xxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-port-xxxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 android/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 android/app/src/main/res/drawable/splash.png create mode 100644 android/app/src/main/res/drawable/splash_icon.png create mode 100644 android/app/src/main/res/layout/activity_main.xml create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/values-v31/styles.xml create mode 100644 android/app/src/main/res/values/colors.xml create mode 100644 android/app/src/main/res/values/ic_launcher_background.xml create mode 100644 android/app/src/main/res/values/strings.xml create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/app/src/main/res/xml/data_extraction_rules.xml create mode 100644 android/app/src/main/res/xml/file_paths.xml create mode 100644 android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java create mode 100644 android/build.gradle create mode 100644 android/capacitor.settings.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.jar create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100755 android/gradlew create mode 100644 android/gradlew.bat create mode 100644 android/settings.gradle create mode 100644 android/variables.gradle create mode 100644 androidshell/error.html create mode 100644 androidshell/index.html create mode 100644 androidshell/media/welcome-poster.jpg create mode 100644 androidshell/media/welcome.mp4 create mode 100644 androidshell/media/wordmark-white.svg create mode 100644 app/.well-known/assetlinks.json/route.ts create mode 100644 app/api/2fa/route.ts create mode 100644 app/api/activity/route.ts create mode 100644 app/api/app-info/route.ts create mode 100644 app/api/auth/2fa/route.ts create mode 100644 app/api/auth/forgot/route.ts create mode 100644 app/api/auth/login/route.ts create mode 100644 app/api/auth/logout/route.ts create mode 100644 app/api/auth/reset/route.ts create mode 100644 app/api/auth/signup/route.ts create mode 100644 app/api/backup/route.ts create mode 100644 app/api/health/route.ts create mode 100644 app/api/logo/route.ts create mode 100644 app/api/lookup/route.ts create mode 100644 app/api/mutate/route.ts create mode 100644 app/api/photo/[id]/route.ts create mode 100644 app/api/requests/route.ts create mode 100644 app/api/rev/route.ts create mode 100644 app/api/staff/activate/route.ts create mode 100644 app/api/staff/decide/route.ts create mode 100644 app/api/staff/login/route.ts create mode 100644 app/api/staff/logout/route.ts create mode 100644 app/api/staff/mutate/route.ts create mode 100644 app/app/activity/page.tsx create mode 100644 app/app/help/page.tsx create mode 100644 app/app/issue/page.tsx create mode 100644 app/app/layout.tsx create mode 100644 app/app/orders/[id]/page.tsx create mode 100644 app/app/orders/page.tsx create mode 100644 app/app/page.tsx create mode 100644 app/app/report/page.tsx create mode 100644 app/app/requests/page.tsx create mode 100644 app/app/rounds/page.tsx create mode 100644 app/app/settings/page.tsx create mode 100644 app/app/staff/[id]/page.tsx create mode 100644 app/app/staff/page.tsx create mode 100644 app/app/stock/[id]/page.tsx create mode 100644 app/app/stock/page.tsx create mode 100644 app/app/stocktake/page.tsx create mode 100644 app/auth/page.tsx create mode 100644 app/error.tsx create mode 100644 app/favicon.ico create mode 100644 app/global-error.tsx create mode 100644 app/globals.css create mode 100644 app/layout.tsx create mode 100644 app/m/(app)/catalogue/[id]/page.tsx create mode 100644 app/m/(app)/catalogue/new/page.tsx create mode 100644 app/m/(app)/catalogue/page.tsx create mode 100644 app/m/(app)/count/[id]/page.tsx create mode 100644 app/m/(app)/count/[id]/variance/page.tsx create mode 100644 app/m/(app)/count/page.tsx create mode 100644 app/m/(app)/issue/[staffId]/page.tsx create mode 100644 app/m/(app)/issue/page.tsx create mode 100644 app/m/(app)/label/page.tsx create mode 100644 app/m/(app)/layout.tsx create mode 100644 app/m/(app)/loading.tsx create mode 100644 app/m/(app)/more/page.tsx create mode 100644 app/m/(app)/page.tsx create mode 100644 app/m/(app)/person/[id]/exchange/page.tsx create mode 100644 app/m/(app)/person/[id]/page.tsx create mode 100644 app/m/(app)/person/[id]/return/page.tsx create mode 100644 app/m/(app)/pickups/page.tsx create mode 100644 app/m/(app)/receive/page.tsx create mode 100644 app/m/(app)/reorder/page.tsx create mode 100644 app/m/(app)/rounds/page.tsx create mode 100644 app/m/(app)/search/page.tsx create mode 100644 app/m/(app)/settings/page.tsx create mode 100644 app/m/(app)/signed-in/page.tsx create mode 100644 app/m/(app)/stock/page.tsx create mode 100644 app/m/(app)/variance/page.tsx create mode 100644 app/m/layout.tsx create mode 100644 app/m/login/layout.tsx create mode 100644 app/m/login/page.tsx create mode 100644 app/m/signup/layout.tsx create mode 100644 app/m/signup/page.tsx create mode 100644 app/my/(app)/account/page.tsx create mode 100644 app/my/(app)/approvals/[id]/page.tsx create mode 100644 app/my/(app)/approvals/page.tsx create mode 100644 app/my/(app)/damage/page.tsx create mode 100644 app/my/(app)/kit/page.tsx create mode 100644 app/my/(app)/kitcheck/page.tsx create mode 100644 app/my/(app)/layout.tsx create mode 100644 app/my/(app)/loading.tsx create mode 100644 app/my/(app)/not-found.tsx create mode 100644 app/my/(app)/orders/[id]/messages/page.tsx create mode 100644 app/my/(app)/orders/[id]/page.tsx create mode 100644 app/my/(app)/orders/page.tsx create mode 100644 app/my/(app)/page.tsx create mode 100644 app/my/(app)/raise/page.tsx create mode 100644 app/my/(app)/request/page.tsx create mode 100644 app/my/(app)/round/page.tsx create mode 100644 app/my/(app)/shelf/page.tsx create mode 100644 app/my/(app)/waitlist/page.tsx create mode 100644 app/my/(app)/ward/page.tsx create mode 100644 app/my/approve/page.tsx create mode 100644 app/my/layout.tsx create mode 100644 app/my/signin/page.tsx create mode 100644 app/not-found.tsx create mode 100644 app/page.tsx create mode 100644 app/print/labels/page.tsx create mode 100644 app/print/order-form/page.tsx create mode 100644 app/print/page.tsx create mode 100644 app/reset/layout.tsx create mode 100644 app/reset/page.tsx create mode 100644 capacitor.config.ts create mode 100644 components/Analytics.tsx create mode 100644 components/AuthForm.tsx create mode 100644 components/AutoPrint.tsx create mode 100644 components/Camera.tsx create mode 100644 components/DemoBanner.tsx create mode 100644 components/ErrorReporting.tsx create mode 100644 components/MAuth.tsx create mode 100644 components/MPerson.tsx create mode 100644 components/MScan.tsx create mode 100644 components/MSignup.tsx create mode 100644 components/PlanBanner.tsx create mode 100644 components/PlanChoice.tsx create mode 100644 components/PlanTab.tsx create mode 100644 components/Shell.tsx create mode 100644 components/SsoSettings.tsx create mode 100644 components/Turnstile.tsx create mode 100644 components/TwoFactor.tsx create mode 100644 components/dialogs.tsx create mode 100644 components/m.tsx create mode 100644 components/my.tsx create mode 100644 components/screens/Account.tsx create mode 100644 components/screens/Approvals.tsx create mode 100644 components/screens/ApproveByLink.tsx create mode 100644 components/screens/Damage.tsx create mode 100644 components/screens/Desk.tsx create mode 100644 components/screens/Home.tsx create mode 100644 components/screens/Kit.tsx create mode 100644 components/screens/KitCheck.tsx create mode 100644 components/screens/ManagerNav.tsx create mode 100644 components/screens/Order.tsx create mode 100644 components/screens/Orders.tsx create mode 100644 components/screens/Request.tsx create mode 100644 components/screens/Review.tsx create mode 100644 components/screens/Round.tsx create mode 100644 components/screens/Shelf.tsx create mode 100644 components/screens/Thread.tsx create mode 100644 components/screens/Waitlist.tsx create mode 100644 components/screens/Ward.tsx create mode 100644 components/staffnav.tsx create mode 100644 components/staffui.tsx create mode 100644 components/ui.tsx create mode 100644 docker-compose.yml create mode 100755 docker/backup.sh create mode 100644 docs/banner.svg create mode 100644 docs/self-hosting.md create mode 100644 instrumentation.ts create mode 100644 lib/analytics.ts create mode 100644 lib/approvallink.ts create mode 100644 lib/audit.ts create mode 100644 lib/barcode.ts create mode 100644 lib/client.tsx create mode 100644 lib/compute.ts create mode 100644 lib/csrf.ts create mode 100644 lib/csv.ts create mode 100644 lib/cycledata.ts create mode 100644 lib/db.ts create mode 100644 lib/deskdata.ts create mode 100644 lib/edition.ts create mode 100644 lib/errors.ts create mode 100644 lib/feedback.ts create mode 100644 lib/glitchtip.ts create mode 100644 lib/links.ts create mode 100644 lib/live.ts create mode 100644 lib/mail.ts create mode 100644 lib/managerdata.ts create mode 100644 lib/nativescan.ts create mode 100644 lib/opencount.ts create mode 100644 lib/ops.ts create mode 100644 lib/ops/alerts.ts create mode 100644 lib/photo.ts create mode 100644 lib/photostore.ts create mode 100644 lib/plan.ts create mode 100644 lib/print.ts create mode 100644 lib/ratelimit.ts create mode 100644 lib/reset.ts create mode 100644 lib/session.ts create mode 100644 lib/sets.ts create mode 100644 lib/snapshot.ts create mode 100644 lib/staffauth.ts create mode 100644 lib/staffclient.tsx create mode 100644 lib/staffdata.ts create mode 100644 lib/staffops.ts create mode 100644 lib/staffreq.ts create mode 100644 lib/staffsession.ts create mode 100644 lib/stripe.ts create mode 100644 lib/switches.ts create mode 100644 lib/totp.ts create mode 100644 lib/turnstile.ts create mode 100644 lib/twofactor.ts create mode 100644 lib/wakelock.ts create mode 100644 next.config.ts create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 patches/@capacitor+android+6.2.2.patch create mode 100644 prisma.config.ts create mode 100644 prisma/migrations/20260827035001_init/migration.sql create mode 100644 prisma/migrations/20260828100000_update_wave/migration.sql create mode 100644 prisma/migrations/20260828160000_issue_cost_backorder_parent/migration.sql create mode 100644 prisma/migrations/20260828230000_demo_and_user_inactive/migration.sql create mode 100644 prisma/migrations/20260829010000_preloved/migration.sql create mode 100644 prisma/migrations/20260829020000_mobile_photos/migration.sql create mode 100644 prisma/migrations/20260829030000_handin_credited/migration.sql create mode 100644 prisma/migrations/20260902020000_barcode_lookup/migration.sql create mode 100644 prisma/migrations/20260902100000_catalog_type/migration.sql create mode 100644 prisma/migrations/20260905090000_contact_message/migration.sql create mode 100644 prisma/migrations/20260906120000_locations/migration.sql create mode 100644 prisma/migrations/20260907120000_password_reset/migration.sql create mode 100644 prisma/migrations/20260907130000_audit_event/migration.sql create mode 100644 prisma/migrations/20260907140000_cost_history/migration.sql create mode 100644 prisma/migrations/20260907150000_photo_on_disk/migration.sql create mode 100644 prisma/migrations/20260907160000_two_factor/migration.sql create mode 100644 prisma/migrations/20260907170000_staff_account/migration.sql create mode 100644 prisma/migrations/20260907190000_staff_app/migration.sql create mode 100644 prisma/migrations/20260907190500_request_seq/migration.sql create mode 100644 prisma/migrations/20260907191000_record_dispute/migration.sql create mode 100644 prisma/migrations/20260908095332_facility_timezone/migration.sql create mode 100644 prisma/migrations/20260908095400_staff_activate_code_at/migration.sql create mode 100644 prisma/migrations/20260908172613_request_lines/migration.sql create mode 100644 prisma/migrations/20260909005105_facility_rev/migration.sql create mode 100644 prisma/migrations/20260909070303_facility_barcode_seq/migration.sql create mode 100644 prisma/migrations/20260911000000_stamp_outstanding_activate_codes/migration.sql create mode 100644 prisma/migrations/20260911010000_uniform_entitlement/migration.sql create mode 100644 prisma/migrations/20260911020000_group_set_cap/migration.sql create mode 100644 prisma/migrations/20260911030000_approval_by_staff/migration.sql create mode 100644 prisma/migrations/20260912000000_allowance_routes/migration.sql create mode 100644 prisma/migrations/20260912010000_garment_groups/migration.sql create mode 100644 prisma/migrations/20260912020000_uniform_style/migration.sql create mode 100644 prisma/migrations/20260912030000_operators/migration.sql create mode 100644 prisma/migrations/20260912040000_operator_recovery/migration.sql create mode 100644 prisma/migrations/20260912050000_ops_ro_grants/migration.sql create mode 100644 prisma/migrations/20260912060000_ops_reveal_grants/migration.sql create mode 100644 prisma/migrations/20260912070000_platform_switches/migration.sql create mode 100644 prisma/migrations/20260913010000_facility_sso/migration.sql create mode 100644 prisma/migrations/20260913120000_plans/migration.sql create mode 100644 prisma/migrations/20260913160000_organisations/migration.sql create mode 100644 prisma/migrations/migration_lock.toml create mode 100644 prisma/schema.prisma create mode 100644 proxy.ts create mode 100644 public/.well-known/security.txt create mode 100644 scripts/approval-mint.cjs create mode 100755 scripts/build-counter-aab.sh create mode 100755 scripts/build-staff-aab.sh create mode 100644 scripts/check-barcode.ts create mode 100755 scripts/check-identity.sh create mode 100644 scripts/check-totp.ts create mode 100755 scripts/e2e-app.sh create mode 100644 scripts/e2e-audit.sh create mode 100644 scripts/e2e-bulk.sh create mode 100644 scripts/e2e-catalogue.sh create mode 100755 scripts/e2e-community.sh create mode 100644 scripts/e2e-cost.sh create mode 100755 scripts/e2e-delete.sh create mode 100644 scripts/e2e-mobile.sh create mode 100644 scripts/e2e-photos.sh create mode 100644 scripts/e2e-preflight.sh create mode 100644 scripts/e2e-preloved.sh create mode 100755 scripts/e2e-scan.sh create mode 100644 scripts/e2e-security.sh create mode 100755 scripts/e2e-sets.sh create mode 100755 scripts/e2e-staff.sh create mode 100755 scripts/e2e-staffapp.sh create mode 100644 scripts/e2e.sh create mode 100644 scripts/make-staff-icon.py create mode 100644 scripts/photos-to-disk.cjs create mode 100644 scripts/reset-mint.cjs create mode 100644 scripts/reset-token.cjs create mode 100644 scripts/schema-diff.sh create mode 100644 scripts/totp-code.ts create mode 100644 staffshell/error.html create mode 100644 staffshell/index.html create mode 100644 staffshell/media/welcome-poster.jpg create mode 100644 staffshell/media/welcome.mp4 create mode 100644 staffshell/media/wordmark-white.svg create mode 100644 tsconfig.json diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..38f1ef8 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,17 @@ +node_modules +.next +.deploy-prev +.photos +.git +.gitea +.claude +android +android-staff +androidshell +docs +patches/*.orig +*.aab +*.apk +.env +.env.* +!.env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..595977d --- /dev/null +++ b/.env.example @@ -0,0 +1,45 @@ +# Every variable the Community edition reads. docker-compose.yml passes this file to the app and +# fills DATABASE_URL, PORT and PHOTO_DIR itself. +# +# The variables beginning NEXT_PUBLIC_ are compiled into the browser bundle at build time, not read +# at runtime — set them before the first `docker compose up --build`, and rebuild if they change. + +# ---- required ---- +# Signs every session cookie. Generate one per instance (`openssl rand -base64 48`). The server +# refuses to start while it still says change-me. +SESSION_SECRET=change-me +# The bundled database's password (docker-compose.yml only). +POSTGRES_PASSWORD= +# The address people open the app at, e.g. https://uniforms.example.health. Used in emailed links. +NEXT_PUBLIC_SITE_URL=http://localhost:3000 +# Always "community" on your own server. +EDITION=community + +# ---- your documents ---- +# The staff sign-in and the account screens link to a terms page and a privacy notice. Point them +# at your own; until you do they point at threadcount.tech's, which describe the hosted service. +NEXT_PUBLIC_TERMS_URL= +NEXT_PUBLIC_PRIVACY_URL= + +# ---- transactional mail (optional) ---- +# With these unset nothing is sent: password resets and approval links are handled at the counter, +# and the screens say so rather than claiming otherwise. +SMTP_HOST= +SMTP_PORT=587 +SMTP_USER= +SMTP_PASS= +SMTP_FROM="ThreadCount " + +# ---- optional ---- +# 1 hides the create-account form and refuses the sign-up endpoint. Set it once your facility exists. +SIGNUPS_DISABLED= +# Cloudflare Turnstile on sign-in and sign-up. Set both to enforce it; leave both blank to rely on +# the per-address rate limits alone. +TURNSTILE_SECRET= +NEXT_PUBLIC_TURNSTILE_SITEKEY= +# Your own GlitchTip (Sentry-protocol) DSN for error reports. Blank = nothing is reported anywhere. +NEXT_PUBLIC_GLITCHTIP_DSN= +# Stamped on error reports so a fault can be tied to a build. +NEXT_PUBLIC_RELEASE= +# Host port docker-compose.yml publishes the app on (the container always listens on 3000). +APP_PORT=3000 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..18ed029 --- /dev/null +++ b/.gitignore @@ -0,0 +1,81 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# scripts/deploy.sh hardlinks the running build and node_modules in here so a failed deploy can be +# undone, and deletes it again when the deploy ends. While one is in flight it is ~100k untracked +# files sitting in the work tree, which would otherwise drown `git status` on the production box. +/.deploy-prev/ + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* +# written by scripts/deploy.sh on the box +.release.json + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts +.env +.env.* +!.env.example + +# Android / Capacitor build output. The project itself is committed; its build products are not. +android/.gradle/ +android/build/ +android/app/build/ +android/capacitor-cordova-android-plugins/build/ +android/local.properties +android/app/src/main/assets/public/ + +# The staff app's native project. Same rules: sources are committed, build output and the +# capacitor-copied web assets are not. +android-staff/.gradle/ +android-staff/build/ +android-staff/app/build/ +android-staff/capacitor-cordova-android-plugins/build/ +android-staff/local.properties +android-staff/app/src/main/assets/public/ +*.aab +*.apk +*.jks +*.keystore +keystore.properties + +# Photo storage: signatures and damage photographs live on disk, not in the repo or the database. +.photos/ +# session scratch, never committed +.scratch/ + +# scratch trees made by scripts/publish-community.sh +/.community-build.* diff --git a/COMMUNITY_VERSION b/COMMUNITY_VERSION new file mode 100644 index 0000000..915a761 --- /dev/null +++ b/COMMUNITY_VERSION @@ -0,0 +1 @@ +community 2026-09-13 e2d6d42 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..161e50a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,50 @@ +# ThreadCount, Community edition — one image, built where it runs. +# +# Built locally by `docker compose build` rather than pulled, and for a reason: everything that +# starts NEXT_PUBLIC_ is compiled into the browser bundle, so the address people will open the app +# at (NEXT_PUBLIC_SITE_URL) and the optional Turnstile site key have to be known at build time. +# docker-compose.yml passes them in from your .env as build arguments. +# +# Three stages: +# deps — node_modules from the lockfile (patch-package runs in postinstall). +# builder — the Prisma client and the Next build. Also the image `docker compose run migrate` +# uses, because it still has the Prisma CLI. +# runner — Next's standalone output only: no compiler, no CLI, a non-root user. + +FROM node:24-bookworm-slim AS deps +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends openssl ca-certificates && rm -rf /var/lib/apt/lists/* +COPY package.json package-lock.json ./ +COPY patches ./patches +RUN npm ci --ignore-scripts && npx patch-package + +FROM deps AS builder +WORKDIR /app +COPY . . +ARG NEXT_PUBLIC_SITE_URL=http://localhost:3000 +ARG NEXT_PUBLIC_TURNSTILE_SITEKEY= +ENV NEXT_PUBLIC_SITE_URL=$NEXT_PUBLIC_SITE_URL \ + NEXT_PUBLIC_TURNSTILE_SITEKEY=$NEXT_PUBLIC_TURNSTILE_SITEKEY \ + EDITION=community \ + NEXT_OUTPUT=standalone \ + NEXT_TELEMETRY_DISABLED=1 +RUN npx prisma generate && npm run build + +FROM node:24-bookworm-slim AS runner +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends openssl ca-certificates curl && rm -rf /var/lib/apt/lists/* \ + && groupadd -r threadcount && useradd -r -g threadcount -d /app threadcount \ + && mkdir -p /data/photos && chown -R threadcount:threadcount /data +ENV NODE_ENV=production \ + EDITION=community \ + PHOTO_DIR=/data/photos \ + PORT=3000 \ + HOSTNAME=0.0.0.0 \ + NEXT_TELEMETRY_DISABLED=1 +COPY --from=builder --chown=threadcount:threadcount /app/.next/standalone ./ +COPY --from=builder --chown=threadcount:threadcount /app/.next/static ./.next/static +COPY --from=builder --chown=threadcount:threadcount /app/public ./public +USER threadcount +EXPOSE 3000 +HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 CMD curl -fsS http://127.0.0.1:3000/api/health || exit 1 +CMD ["node", "server.js"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c8c21ca --- /dev/null +++ b/LICENSE @@ -0,0 +1,105 @@ +# Functional Source License, Version 1.1, ALv2 Future License + +## Abbreviation + +FSL-1.1-ALv2 + +## Notice + +Copyright 2026 ThreadCount (threadcount.tech) + +## Terms and Conditions + +### Licensor ("We") + +The party offering the Software under these Terms and Conditions. + +### The Software + +The "Software" is each version of the software that we make available under +these Terms and Conditions, as indicated by our inclusion of these Terms and +Conditions with the Software. + +### License Grant + +Subject to your compliance with this License Grant and the Patents, +Redistribution and Trademark clauses below, we hereby grant you the right to +use, copy, modify, create derivative works, publicly perform, publicly display +and redistribute the Software for any Permitted Purpose identified below. + +### Permitted Purpose + +A Permitted Purpose is any purpose other than a Competing Use. A Competing Use +means making the Software available to others in a commercial product or +service that: + +1. substitutes for the Software; + +2. substitutes for any other product or service we offer using the Software + that exists as of the date we make the Software available; or + +3. offers the same or substantially similar functionality as the Software. + +Permitted Purposes specifically include using the Software: + +1. for your internal use and access; + +2. for non-commercial education; + +3. for non-commercial research; and + +4. in connection with professional services that you provide to a licensee + using the Software in accordance with these Terms and Conditions. + +### Patents + +To the extent your use for a Permitted Purpose would necessarily infringe our +patents, the license grant above includes a license under our patents. If you +make a claim against any party that the Software infringes or contributes to +the infringement of any patent, then your patent license to the Software ends +immediately. + +### Redistribution + +The Terms and Conditions apply to all copies, modifications and derivatives of +the Software. + +If you redistribute any copies, modifications or derivatives of the Software, +you must include a copy of or a link to these Terms and Conditions and not +remove any copyright notices provided in or with the Software. + +### Disclaimer + +THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR +PURPOSE, MERCHANTABILITY, TITLE OR NON-INFRINGEMENT. + +IN NO EVENT WILL WE HAVE ANY LIABILITY TO YOU ARISING OUT OF OR RELATED TO THE +SOFTWARE, INCLUDING INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES, +EVEN IF WE HAVE BEEN INFORMED OF THEIR POSSIBILITY IN ADVANCE. + +### Trademarks + +Except for displaying the License Details and identifying us as the origin of +the Software, you have no right under these Terms and Conditions to use our +trademarks, trade names, service marks or product names. + +## Grant of Future License + +We hereby irrevocably grant you an additional license to use the Software under +the Apache License, Version 2.0 that is effective on the second anniversary of +the date we make the Software available. On or after that date, you may use the +Software under the Apache License, Version 2.0, in which case the following +will apply: + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. + +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d35adb6 --- /dev/null +++ b/README.md @@ -0,0 +1,136 @@ +

ThreadCount

+ +# ThreadCount + +Uniform stock management for hospital, aged-care and clinic linen rooms. It tracks what is on the +shelf, who was issued what, what each ward was charged, and the supplier orders and stocktakes in +between. It was written by a uniform coordinator for their own linen room. + +This is the Community edition: the same product that runs at [threadcount.tech](https://threadcount.tech), +packaged for a facility or health service that wants to run it on its own server. + +## What you get + +- **The coordinator app** at `/app`: catalogue, stock, issuing against entitlement, orders and + receiving, stocktakes, nine reports, CSV import and export, full JSON backup and restore. +- **The phone counter** at `/m`: camera barcode scanning, issue at the counter, count by shelf, + pickups and delivery rounds. +- **The staff app** at `/my`: staff see their own kit, request garments, managers approve. +- The two Android apps on Google Play can be pointed at your server (see below). + +Not included: the threadcount.tech website, multi-site health-service features, single sign-on, +and card payments. Those belong to the hosted service. + +## Requirements + +- A Linux server with Docker and Docker Compose (2 CPU, 2 GB RAM is plenty to start). +- A hostname pointing at it, with HTTPS in front (Caddy, nginx or Traefik). The app sets secure + cookies, so sign-in will not work over plain HTTP from another machine. + +## Install + +```sh +git clone https://github.com/pricehq/threadcount-community.git +cd threadcount-community +cp .env.example .env +``` + +Open `.env` and set these four. Everything else can stay blank. + +| Setting | What to put | +|---|---| +| `SESSION_SECRET` | A long random string. `openssl rand -base64 48` makes one. The server refuses to start with the placeholder. | +| `POSTGRES_PASSWORD` | Any long password. It is only used between the two containers. | +| `NEXT_PUBLIC_SITE_URL` | The address people will type, for example `https://uniforms.example.health`. | +| `EDITION` | `community` | + +Then build and start it: + +```sh +docker compose up -d --build +``` + +The first start takes a few minutes: it builds the image, creates the database and applies the +schema. When `docker compose ps` shows the `app` container as healthy, it is ready. + +By default the app listens on **port 3000** on the server (change it with `APP_PORT` in `.env`). +Point your HTTPS proxy at it. A Caddyfile for that is two lines: + +``` +uniforms.example.health { + reverse_proxy 127.0.0.1:3000 +} +``` + +## First run + +There is no default username or password. The first person to sign up creates the facility and +becomes its administrator. + +1. Open your address in a browser. `/` sends you to `/auth`, the sign-in page. +2. Click **Create account**. Enter your name, the facility name, your email and a password. +3. You are now signed in as the facility's admin and land on the dashboard. +4. Go to **Settings**. Name your staff groups first (for example Registered Nurse, Enrolled Nurse, + Support Services). Nothing can be issued until a facility has groups. +5. Still in Settings, open **Data** and load your catalogue, departments, staff register and + opening stock from CSV. Templates for each file are on that screen. +6. Add a second administrator under **Settings → Account → Users** before you sign out. If the + only admin forgets their password and no email is configured, nobody can get back in. +7. Once your facility exists, set `SIGNUPS_DISABLED=1` in `.env` and run `docker compose up -d` + again. Nobody else can create a facility on your server after that. + +Admins and issuers are both created under Settings → Account → Users. An admin can do everything; +an issuer works the counter but cannot change settings, reorder levels or barcodes. + +## Phones and the Android apps + +The phone counter and the staff app are the same server, on a phone: + +- `https://your-host/m` for the counter (camera scanning works in Chrome and Edge) +- `https://your-host/my` for staff + +The Play apps (**ThreadCount** for the counter, **ThreadCount Staff** for staff) can use your server +too. On the app's first screen tap "Server: threadcount.tech · Change", choose Self-hosted and enter +your hostname. The app checks it, saves it on that phone, and opens your server from then on. + +## Email + +Set the `SMTP_*` values in `.env` if you want password resets, manager approval links and +ready-to-collect notices by email. Without them the product still works; those things happen at +the counter, and the screens say so. + +## Backups + +`docker/backup.sh /path/to/backups` dumps the database and the photos into a dated folder and +keeps the last fourteen. Run it nightly from cron and copy the folder off the server. An admin can +also download the whole facility as one file from Settings → Data at any time. + +Restore steps are in [docs/self-hosting.md](docs/self-hosting.md). + +## Updating + +```sh +git pull +docker compose up -d --build +``` + +Schema changes are applied automatically before the new version starts. + +## Configuration + +Every setting is listed with a comment in `.env.example`. The ones most people touch: +`NEXT_PUBLIC_TERMS_URL` and `NEXT_PUBLIC_PRIVACY_URL` (point the product's terms and privacy links +at your own documents), `SMTP_*`, `SIGNUPS_DISABLED`, `APP_PORT`, and the two Turnstile keys if you +want Cloudflare's bot check on sign-in. + +## Licence + +Functional Source License 1.1 with Apache 2.0 as the future licence (FSL-1.1-ALv2). You can run +it for your own organisation, read it, change it and share your changes. You cannot offer it to +others as a competing uniform-management service. Each release becomes Apache 2.0 two years after +publication. Full text in [LICENSE](LICENSE). + +## Help + +Open an issue on this repository. If you would rather not run a server at all, the hosted service +is at [threadcount.tech](https://threadcount.tech). diff --git a/android-staff/.gitignore b/android-staff/.gitignore new file mode 100644 index 0000000..48354a3 --- /dev/null +++ b/android-staff/.gitignore @@ -0,0 +1,101 @@ +# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore + +# Built application files +*.apk +*.aar +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +# Uncomment the following line in case you need and you don't have the release build type files in your app +# release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml + +# Keystore files +# Uncomment the following lines if you do not want to check your keystore files in. +#*.jks +#*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild +.cxx/ + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +# lint/reports/ + +# Android Profiling +*.hprof + +# Cordova plugins for Capacitor +capacitor-cordova-android-plugins + +# Copied web assets +app/src/main/assets/public + +# Generated Config files +app/src/main/assets/capacitor.config.json +app/src/main/assets/capacitor.plugins.json +app/src/main/res/xml/config.xml diff --git a/android-staff/app/.gitignore b/android-staff/app/.gitignore new file mode 100644 index 0000000..043df80 --- /dev/null +++ b/android-staff/app/.gitignore @@ -0,0 +1,2 @@ +/build/* +!/build/.npmkeep diff --git a/android-staff/app/build.gradle b/android-staff/app/build.gradle new file mode 100644 index 0000000..13dc9df --- /dev/null +++ b/android-staff/app/build.gradle @@ -0,0 +1,108 @@ +apply plugin: 'com.android.application' + +// Release signing. The keystore and its password live in ~/threadcount-keys, outside the repo — +// nothing secret is ever committed. Without either file the release build is simply unsigned, so a +// fresh clone still builds. +// +// staff-keystore.properties wins if it exists, so this app can be given its own upload key later +// without touching the build; until then it shares the counter app's, which is what Play expects +// anyway — with Play App Signing the upload key only authenticates the upload, and two listings +// from one publisher sharing one is ordinary. Splitting them is a decision worth making +// deliberately, not by default. +def keystoreProps = new Properties() +def staffKeys = file("${System.getProperty('user.home')}/threadcount-keys/staff-keystore.properties") +def sharedKeys = file("${System.getProperty('user.home')}/threadcount-keys/keystore.properties") +def keystorePropsFile = staffKeys.exists() ? staffKeys : sharedKeys +if (keystorePropsFile.exists()) { + keystorePropsFile.withInputStream { keystoreProps.load(it) } +} + +android { + namespace "tech.threadcount.staff" + compileSdk rootProject.ext.compileSdkVersion + defaultConfig { + applicationId "tech.threadcount.staff" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + // Play permanently reserves a version code the moment a bundle is ingested, even into a + // discarded draft — it can never be reused. Bump this for EVERY upload, not every release. + // 1 was spent on the first bundle, before the sign-in rework, app links and the video. + // 2 was uploaded before the sign-out fixes. Play keeps a code the moment it ingests a + // bundle, so neither can ever be reused. + versionCode 8 + versionName "1.3" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + aaptOptions { + ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~' + } + } + signingConfigs { + release { + if (keystoreProps['storeFile']) { + storeFile file(keystoreProps['storeFile']) + storePassword keystoreProps['storePassword'] + keyAlias keystoreProps['keyAlias'] + keyPassword keystoreProps['keyPassword'] + } + } + } + buildTypes { + release { + if (keystoreProps['storeFile']) { + signingConfig signingConfigs.release + } + // R8 shrinks and obfuscates, and Gradle folds the resulting mapping.txt into the + // bundle, which is what lets Play symbolicate a stack trace instead of showing + // a.b.c(). Capacitor ships its plugin keep-rules as consumerProguardFiles, so the + // classes the bridge loads reflectively survive; proguard-rules.pro pins the rest. + // + // Resource shrinking is deliberately left off, as in the counter app: the bundled + // splash and welcome are plain files under assets/, which resource shrinking never + // inspects, so it would trade a real risk for almost no bytes. + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + + // This app ships no native code at all — the barcode scanner and its MLKit/CameraX + // .so files are stripped out by scripts/build-staff-aab.sh before the build. The + // block stays so that the day it does, the symbols go with it without anyone having + // to remember. + ndk { + debugSymbolLevel 'FULL' + } + } + } + // Devices from Android 15 can run 16 KB memory pages, and Play refuses uploads whose native + // libraries are only 4 KB-aligned. Uncompressed + page-aligned .so files satisfy both. + packaging { + jniLibs { + useLegacyPackaging false + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } +} + +repositories { + flatDir{ + dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs' + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" + implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion" + implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion" + // WebViewCompat / WebViewFeature, for MainActivity.giveTheSiteTheBridge(). The Capacitor + // module has this as an implementation dependency, which does not reach this module. + implementation "androidx.webkit:webkit:$androidxWebkitVersion" + implementation project(':capacitor-android') + testImplementation "junit:junit:$junitVersion" + androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" + androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" + implementation project(':capacitor-cordova-android-plugins') +} + +apply from: 'capacitor.build.gradle' diff --git a/android-staff/app/capacitor.build.gradle b/android-staff/app/capacitor.build.gradle new file mode 100644 index 0000000..4a7786f --- /dev/null +++ b/android-staff/app/capacitor.build.gradle @@ -0,0 +1,19 @@ +// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN + +android { + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } +} + +apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" +dependencies { + implementation project(':capacitor-browser') + +} + + +if (hasProperty('postBuildExtras')) { + postBuildExtras() +} diff --git a/android-staff/app/proguard-rules.pro b/android-staff/app/proguard-rules.pro new file mode 100644 index 0000000..d5a7685 --- /dev/null +++ b/android-staff/app/proguard-rules.pro @@ -0,0 +1,34 @@ +# R8 rules for the ThreadCount Staff shell. +# +# Capacitor's own AAR already contributes consumerProguardFiles that keep anything extending +# com.getcapacitor.Plugin and the @CapacitorPlugin / @PluginMethod members. These rules cover the +# things that sit outside that net — everything the bridge, the WebView or the manifest reaches by +# name rather than by a reference R8 can see. +# +# This app carries no plugins at all: scripts/build-staff-aab.sh strips the barcode scanner and +# haptics out of the generated gradle files and empties assets/capacitor.plugins.json after every +# sync, so there is nothing here to keep for them. Rules naming those packages were inherited from +# the counter app's copy and matched nothing. + +# The bridge, its WebView plumbing, and the annotations that drive plugin dispatch. +-keep class com.getcapacitor.** { *; } +-keep interface com.getcapacitor.** { *; } +-keep @interface com.getcapacitor.** { *; } + +# Anything the WebView calls from JavaScript. proguard-android.txt carries this rule too; it is +# repeated here because losing it silently breaks every call from the page into the app. +-keepclassmembers class * { + @android.webkit.JavascriptInterface ; +} + +# The activity is named in AndroidManifest.xml, and it subclasses BridgeWebViewClient to keep the +# back button honest and to follow an approval link into the right page. +-keep class tech.threadcount.staff.** { *; } + +# Keep source file and line numbers in stack traces, and tell Play's symbolicator where to look. +# Without these a crash report names the class but not the line that threw. +-keepattributes SourceFile,LineNumberTable +-renamesourcefileattribute SourceFile + +# Annotations drive both Capacitor's dispatch and AndroidX's lifecycle wiring. +-keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod diff --git a/android-staff/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java b/android-staff/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java new file mode 100644 index 0000000..f2c2217 --- /dev/null +++ b/android-staff/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.getcapacitor.myapp; + +import static org.junit.Assert.*; + +import android.content.Context; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + assertEquals("com.getcapacitor.app", appContext.getPackageName()); + } +} diff --git a/android-staff/app/src/main/AndroidManifest.xml b/android-staff/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..9f8baec --- /dev/null +++ b/android-staff/app/src/main/AndroidManifest.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android-staff/app/src/main/java/tech/threadcount/staff/MainActivity.java b/android-staff/app/src/main/java/tech/threadcount/staff/MainActivity.java new file mode 100644 index 0000000..84e950d --- /dev/null +++ b/android-staff/app/src/main/java/tech/threadcount/staff/MainActivity.java @@ -0,0 +1,265 @@ +package tech.threadcount.staff; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Bundle; +import android.util.Log; +import android.webkit.WebResourceRequest; +import android.webkit.WebResourceResponse; +import android.webkit.WebView; + +import androidx.activity.OnBackPressedCallback; +import androidx.webkit.WebViewCompat; +import androidx.webkit.WebViewFeature; + +import com.getcapacitor.Bridge; +import com.getcapacitor.BridgeActivity; +import com.getcapacitor.BridgeWebViewClient; +import com.getcapacitor.JSExport; +import com.getcapacitor.PluginHandle; + +import java.lang.reflect.Field; +import android.content.SharedPreferences; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * Back navigation. + * + * Capacitor 6 leaves the back button alone, and nothing else was handling it, so back finished the + * activity from wherever you were standing: halfway through a request, one back gesture and the + * app was gone. Here back walks the WebView's history instead — which includes the app's own + * client-side routing — and only leaves the app once there is nothing left to go back to. + * + * The callback's enabled flag is kept in step with canGoBack() rather than left permanently on, + * because Android 13+ reads that flag before the gesture starts to decide whether to animate. With + * it accurate, a back gesture at the root peels the app away to reveal the home screen (predictive + * back, switched on by android:enableOnBackInvokedCallback in the manifest); anywhere else it + * stays put and moves the app back one screen. + * + * Links into the app. + * + * The manifest claims https://threadcount.tech/my with autoVerify, and the launcher shortcuts are + * VIEW intents on three deeper pages, so Android hands this activity a URL rather than a bare + * launch. Nothing read it: Capacitor keeps it in Bridge.intentUri and only ever hands it out + * through the @capacitor/app plugin, which this app does not carry — so a manager tapping + * "Approve" in their email landed on the /my home screen with the token dropped, and the three + * shortcuts all opened the same page. Reading the intent here is a dozen lines against a plugin, + * an npm dependency and the plugin-stripping this app's build script already has to do. + * + * Both entry points matter: onCreate for a cold start, onNewIntent because launchMode is + * singleTask, so a tap while the app is in the background resumes this instance and delivers the + * URL there instead — which is the case that made the email link look completely dead. + */ +public class MainActivity extends BridgeActivity { + + /** The one host this app will follow a link into, and the one path prefix it owns. */ + private static final String SITE_HOST = "threadcount.tech"; + private static final String STAFF_PATH = "/my"; + /** Set on an intent once its link has been opened, so it is only ever followed once. */ + private static final String FOLLOWED = "tech.threadcount.staff.LINK_FOLLOWED"; + + private OnBackPressedCallback back; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // A device with no WebView never gets a bridge; there is nothing to navigate. + if (getBridge() == null) return; + + back = new OnBackPressedCallback(false) { + @Override + public void handleOnBackPressed() { + WebView web = getBridge().getWebView(); + if (web != null && web.canGoBack()) { + web.goBack(); + } else { + // Nothing left in this WebView: hand the gesture back to the system. + setEnabled(false); + } + } + }; + getOnBackPressedDispatcher().addCallback(this, back); + + // pushState, replaceState and ordinary navigations all land here, which is what makes the + // enabled flag above trustworthy in a single-page app. + getBridge().setWebViewClient(new BridgeWebViewClient(getBridge()) { + @Override + public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { + super.doUpdateVisitedHistory(view, url, isReload); + syncBack(view); + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + super.onPageStarted(view, url, favicon); + syncBack(view); + } + + /* The bundled welcome tells the shell which server to use by navigating to + * https://localhost/__server?origin=… — caught here, never loaded, and honoured only + * while the WebView is still on the app's own origin (a remote page pointing the app at + * another server would be the phishing route). */ + @Override + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + Uri u = request.getUrl(); + if (u != null && "localhost".equals(u.getHost()) && "/__server".equals(u.getPath())) { + String from = view.getUrl(); + if (from != null && from.startsWith("https://localhost")) setServer(u.getQueryParameter("origin")); + return true; + } + return super.shouldOverrideUrlLoading(view, request); + } + + /** + * Capacitor's own version swaps in the bundled "No connection." screen for any main + * frame response that isn't 2xx. That is the wrong diagnosis for most of them: the + * site answered, and its 404 and its branded 500 (which carries the reference someone + * reads out on the phone) are both better pages than a bundled one telling a nurse to + * go and check the ward's wifi. A gateway status is the exception — nothing is + * answering behind the proxy, which is what the offline screen actually describes. + */ + @Override + public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { + int status = errorResponse != null ? errorResponse.getStatusCode() : 0; + if (status == 502 || status == 503 || status == 504) { + super.onReceivedHttpError(view, request, errorResponse); + } + } + }); + + syncBack(getBridge().getWebView()); + + giveTheSiteTheBridge(); + + openLink(getIntent()); + } + + /** + * Put window.Capacitor on the live site. + * + * The shell opens on its bundled welcome at https://localhost and then hands the WebView to + * threadcount.tech. Capacitor 6 installs its JavaScript bridge with addDocumentStartJavaScript + * scoped to a single origin — the app's own — and, having done that, drops the request-proxy + * path that would otherwise have injected it into pages from the hosts in allowNavigation. So + * every /my page arrived with androidBridge (the message channel is registered for + * allowNavigation hosts too) but no window.Capacitor: the site took itself for a browser, so + * the legal rows promised "a new tab" and loaded the marketing site over the app instead of + * handing it to Chrome through the Browser plugin. Found on a Pixel 8 Pro running the Play + * build, 2026-09-12 — the same defect as the counter app's, fixed the same way. + * + * The identical script Bridge assembles is registered for the site's origin as well. On a + * WebView too old for document-start scripts Capacitor keeps its proxy injector, which already + * covers allowNavigation hosts. The plugin registry is read reflectively (proguard-rules.pro + * keeps com.getcapacitor.** intact); if anything fails the app is exactly as it was before. + */ + private void giveTheSiteTheBridge() { + Bridge bridge = getBridge(); + WebView web = bridge == null ? null : bridge.getWebView(); + if (web == null) return; + if (!WebViewFeature.isFeatureSupported(WebViewFeature.DOCUMENT_START_SCRIPT)) return; + Set origins = siteOrigins(); + try { + String script = bridgeScript(bridge); + WebViewCompat.addDocumentStartJavaScript(web, script, origins); + Log.i("ThreadCountStaff", "Capacitor bridge registered for " + origins); + } catch (Exception e) { + Log.e("ThreadCountStaff", "Could not register the Capacitor bridge for " + origins + "; the site will run as a browser page", e); + } + } + + private static final String PREFS = "threadcount"; + private static final String PREF_SERVER = "server"; + + /** The origins the shell hands over to: the hosted service, and the self-hosted server the + * welcome screen saved, if any. App Links and shared credentials stay with SITE_HOST. */ + private Set siteOrigins() { + Set s = new HashSet<>(); + s.add("https://" + SITE_HOST); + String own = getSharedPreferences(PREFS, MODE_PRIVATE).getString(PREF_SERVER, ""); + if (!own.isEmpty()) s.add(own); + return s; + } + + /** Remember a self-hosted server (https origin, host only) or, given nothing, go back to the + * hosted service; the bridge is registered for it at once. */ + private void setServer(String origin) { + SharedPreferences.Editor e = getSharedPreferences(PREFS, MODE_PRIVATE).edit(); + if (origin == null || origin.isEmpty()) { e.remove(PREF_SERVER).apply(); Log.i("ThreadCountStaff", "server reset to hosted"); return; } + Uri u = Uri.parse(origin); + if (!"https".equals(u.getScheme()) || u.getHost() == null || u.getHost().isEmpty() || (u.getPath() != null && !u.getPath().isEmpty() && !"/".equals(u.getPath()))) { + Log.w("ThreadCountStaff", "refused a server that is not a plain https origin"); + return; + } + String clean = "https://" + u.getHost() + (u.getPort() > 0 ? ":" + u.getPort() : ""); + e.putString(PREF_SERVER, clean).apply(); + Log.i("ThreadCountStaff", "server set to " + clean); + giveTheSiteTheBridge(); + } + + /** Bridge.getJSInjector(), piece for piece, using the public JSExport helpers it calls. */ + private String bridgeScript(Bridge bridge) throws Exception { + String globalJS = JSExport.getGlobalJS(this, bridge.getConfig().isLoggingEnabled(), bridge.isDevMode()); + String bridgeJS = JSExport.getBridgeJS(this); + String pluginJS = JSExport.getPluginJS(pluginsOf(bridge)); + String cordovaJS = JSExport.getCordovaJS(this); + String cordovaPluginsJS = JSExport.getCordovaPluginJS(this); + String cordovaPluginsFileJS = JSExport.getCordovaPluginsFileJS(this); + String localUrlJS = "window.WEBVIEW_SERVER_URL = '" + bridge.getLocalUrl() + "';"; + return globalJS + "\n\n" + localUrlJS + "\n\n" + bridgeJS + "\n\n" + pluginJS + "\n\n" + + cordovaJS + "\n\n" + cordovaPluginsFileJS + "\n\n" + cordovaPluginsJS; + } + + @SuppressWarnings("unchecked") + private static Collection pluginsOf(Bridge bridge) throws Exception { + Field f = Bridge.class.getDeclaredField("plugins"); + f.setAccessible(true); + Map plugins = (Map) f.get(bridge); + if (plugins == null || plugins.isEmpty()) throw new IllegalStateException("Bridge has no plugins registered"); + return plugins.values(); + } + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + openLink(intent); + } + + /** + * Navigates the WebView to a link this app owns. Anything else — another host, a path outside + * /my, a plain launch from the icon — is left alone, so the shell's own splash and welcome + * still run. + */ + private void openLink(Intent intent) { + String url = staffUrl(intent); + if (url == null || getBridge() == null) return; + // The launch intent reaches this method twice: BridgeActivity.load() routes it through + // onNewIntent while super.onCreate() is still running, and onCreate follows it again + // afterwards in case a future Capacitor stops doing that. Marking the intent means + // whichever arrives first wins and the other is a no-op, rather than the same page being + // loaded twice. A later tap is a different Intent, so it is followed as it should be. + if (intent.getBooleanExtra(FOLLOWED, false)) return; + intent.putExtra(FOLLOWED, true); + WebView web = getBridge().getWebView(); + if (web != null) web.loadUrl(url); + } + + private static String staffUrl(Intent intent) { + if (intent == null || !Intent.ACTION_VIEW.equals(intent.getAction())) return null; + Uri uri = intent.getData(); + if (uri == null) return null; + if (!"https".equals(uri.getScheme()) || !SITE_HOST.equals(uri.getHost())) return null; + String path = uri.getPath(); + if (path == null || !(path.equals(STAFF_PATH) || path.startsWith(STAFF_PATH + "/"))) return null; + return uri.toString(); + } + + private void syncBack(WebView view) { + if (back != null && view != null) back.setEnabled(view.canGoBack()); + } +} diff --git a/android-staff/app/src/main/res/drawable-land-hdpi/splash.png b/android-staff/app/src/main/res/drawable-land-hdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a9bb9123cf851148f28aecdbafa66dff21181c GIT binary patch literal 2250 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV0^&A1QfZHI&TpJ1II*97srr_Id88W-+Tf#E{rdS(WOf5#FS8IJIXF*uwVWsC;GXi6B(1*5rO lG#8BKg3(++)m-p~SvP=1`c3y<2Vfh8!PC{xWt~$(698B(OGy9# literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/drawable-land-mdpi/splash.png b/android-staff/app/src/main/res/drawable-land-mdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..6e839caf24b870d0b3d0fb2bb93bb71ec35bb150 GIT binary patch literal 1210 zcmeAS@N?(olHy`uVBq!ia0y~yV0-|?4jfECk=Ls%bQl;|8a-VcLn`LHy<#YMK!M@F zfgt&UAK{&hWk!FrPfXc({SU*7pYiMr1?d+U0@-*4Qb(!LAQ(*rqZxr}WkD%Jj~3JI U$b=tPfMpVcr>mdKI;Vst0AKzm$N&HU literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/drawable-land-xhdpi/splash.png b/android-staff/app/src/main/res/drawable-land-xhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..583fe699a9c2afd04668e448b9aa937c290d5f45 GIT binary patch literal 4320 zcmeAS@N?(olHy`uVBq!ia0y~yUPP<^u`nT+jsXS2Sj=R6hffPf{K?Y_9h6xD`Kz$wt2Y@0f5(z+3h{pg( zaqYcB+Ci7_T nV6@*f+C?1gJd-d^(8A1Y!}|NxbiF`eGm62})z4*}Q$iB}B*r%K literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/drawable-land-xxhdpi/splash.png b/android-staff/app/src/main/res/drawable-land-xxhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..9e9f85bc7d5b142fb7996dbc269a4ef35cfd0fc3 GIT binary patch literal 6809 zcmeAS@N?(olHy`uVBq!ia0y~yU~^z#U_QXX1QdDnOsSuNK`O!1#WAE}&f6P?f(H~B z4jc%QFZdDO$sA_%NBhK_jo1GGRWdAiRWA#o8O+(lKvd=^H5vq?sbDlCjFttX#o=g; zFj^aq)`p|C;b?6*S{shmhNHFNXl*!J8;;h7qqX5^Z8%yRj@E{wwc%)OI9eNy)`lat aHe{FZVZUu*c(M{y8+y9>xvXAET-=?FZB&=7E+P?~LT^_Vx6Klv(wvG)tz4qfiJHVGP>D)pBNCk` zuM>q*_yWW{`z190>Yd%}G&|3{^UIuVmg{kpM3UlSm~TnlN}5z}BD`7n8jqy;<08+t zk1jvQSzHfPr}cC1cjx6Px%eovx2yf-cKB3!xI64NgYS*bQZtxpC$80LD|SsEtB&hn zFKuR=FJ8C&JnX-^Xm0wTsWVI$zmC|1&A^tSUAQOGDmf;c1CB@u9ta+wO1A@e01uo4 zcmNNa19$)roC9tTxIG9lfCuov?EoIY1Lpu9zys$19>9YT19$)r+z#LYJa7)+0X%RH l-~l`cF@Oi~!0iAY{5ucsXWygU+qM3W*P~c1^P82?$seUbdF22A literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/drawable-port-hdpi/splash.png b/android-staff/app/src/main/res/drawable-port-hdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..d6de5624dc1a55404cb9563525a8f44f3ee3b943 GIT binary patch literal 2890 zcmeAS@N?(olHy`uVBq!ia0y~yV0^&9z^uT*1QaPbs20z_z%A(M;uumf=j|0k!2=2m z2Mz?u7yJnCWGplKqkUq^#_N9=Ui^$_XDCR&z!1pBE08)$jRwJJDj3ZOqh-NpaX4Bd mjMj#uwc%)OIIL>JQU;fQ#U`eK zSgkXOh(TQRN4)j8D<5~?_deXR>o-l^(gB!W%k2S*1XQ6V}B&Y2U&5_$jm>+2?ikDgpCJ7{v$P8N~#GK*d}N1!A;Gz%E{ZbZ!i2Mj1${7LepN z7KAs1Z-LE$-I8;GgOZVe8Hu5h@t9tqj3^_@h%%y#C?m>WMsUiqKR91jMQ2}I|vWB0g4zn*%foUrc8-l^1nl#}B2niZF zByDvas&7!9pe5nH1?Dp|lg+5f*?aEKH|uxr{cJHS$qzfhgOs%6MVvmft+ad^NH?`G zXg$6z_PdtvDsrw?zWiT(e7=1*l85Ktdf9Gne*Ru;(|9XSnn!U$>QtS5xh_PuUgfH` zW>N(yKKF7`bCO6&6|VC#h=AXNNI;Cl4lqh`0wvIyo1ybSOT#t`}v(DZ}|?$rAl U<%hSu_q8=C6y9}%bvv3I0WF)j1poj5 literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/android-staff/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..c7bd21d --- /dev/null +++ b/android-staff/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/android-staff/app/src/main/res/drawable/ic_launcher_background.xml b/android-staff/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..d5fccc5 --- /dev/null +++ b/android-staff/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android-staff/app/src/main/res/drawable/splash.png b/android-staff/app/src/main/res/drawable/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..de77831650313e0f2e8ed72824a935e7bce0beb2 GIT binary patch literal 7891 zcmeI%Aq&Dl7zW^1Cu58a1P!tv!(Sk1P%zwNqC*@aTE%FyYI8RKf*AY-f>;fQ#U`eK zSgkXOh(TQRN4)j8D<5~?_deXR>o-l^(gB!W%k2S*1XQ6V}B&Y2U&5_$jm>+2?ikDgpCJ7{v$P8N~#GK*d}N1!A;Gz%E{ZbZ!i2Mj1${7LepN z7KAs1Z-LE$-I8;GgOZVe8Hu5h@t9tqj3^_@h%%y#C?m> + + + + diff --git a/android-staff/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android-staff/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..a0fe943 --- /dev/null +++ b/android-staff/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/android-staff/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android-staff/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..a0fe943 --- /dev/null +++ b/android-staff/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/android-staff/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android-staff/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..f2967bfbf77cfc6a39c68519d5648bdf6b6d54ad GIT binary patch literal 1039 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2V7}(*;uumf=k3h1dCIOLZvLgA z)@J`^9#FErV8fJjTE&KCL5J=KkD0ps3{Hoc4YW5U8|G|!&U@=|nft$$>rNjkOH%FA zT35E)dQo4BrL^_c-=kv1Pb!|5xihQ-C$wvva29!@$n{BpwX&nh#>G)? zkpe%eu)#w4D-BGy>cTcfCQJVKso=;pqa$hOzujj!CNMFpI@&+G*CeumMQ``C>$eQ2 zfAbQ0;Bs((>LK}J-&6lYLVM+?mgh)ialBtbICr{k|ugFZ*vy{h1MX+=*q&wL5q27@RZOV%V>>^3~oM zx4z%3nWQ3eS#$sX>f_h*&qbbjo*}&FdibHKs+r3V^G~0?r~beC;)@-d)@)L>SNm}) zZL{Rkts<_C*FqOXSe&!`cODw%xkSVCFPcjt}u0V0ZqZS{6F4hwhaatX!y zFaM=?%W~oM*Ar7Cb0>W}=eS{3f@@&H+O?%k8EXTxL^;a;i7yop+;ulEce2TfqjQSq z%$=KfNknkvQ=cf88Gg&pui_HS^zT;nJd_()@b#PS^XKAED(h~<`?E}5mJ)gF`~6z) zX{k$I%P-iyD;@+(as~5p|zfuw@mZBWm0nN%Y+T; ztGx`*7OTl0_fe}{ppY0oF^8r1_~WpUz<^0?7B9;TquAq*XsO!o6?`u&@_NZct1z#L z&wt)sdrFVfYvr-LrtO^mm%_v6#K*k3n*&a%f)f7#il$tCli*T|$lnLH=O-|_QNrtInZPC)^a!~}o+wL7+iBhh`GYvFGt zmC#iSw5mJbhb`6(xz)VtLy*}kui!WT9nN6MK&biZaQ%erqdWfiPVEC`bOujXKbLh* G2~7YyQsJ=x literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android-staff/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..d7aab4cf4e63644463147e9e56eda33d444e928c GIT binary patch literal 1087 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iuz4M-mPBqq(kz{2L~;uumf=k1-1Mar%M$3Cu4 zzkWP&QmXX>4$n&N!`vUZzH^1MeCH8a?^LH5Bg*gKGI3(DNW?a8v!!!0nb!Adbv-EA zRJLvF|M(Q`SL<@WpXqbgWdxc|5;%S|i+zK>eUr?*CeJu)HibPO?jBihSHJJq=U-PQ z|5d-#vUuuKWAE5=_MX3PElmkpDSQ1mM|4N@Nt4MhFZpDtU*%uA=DX$m>%A%U54kU% zEh^l(d)HaPC!2-C@9mKCjC~vMP4wTvnY(A6QJE=wa9+9izx;C#Kl^QEW>Dc0R2Hnu zEZh8OonO%N%hs39zAGv}y_NZ9_z$NkTRhZP#;)3;{;=F@_sMnJawos@Dvz|DR(n+U zh<@moFr)A0sgtj-&N+HVed|?&%|*-RsQkTFZ?e~vvBK-2xbgH!>(u^T`s$Q-U;B@p z;0nDu_Y(g3hwEobR@*LU0|v+4`QBE0_w6e)=APZZ`}fhKt)9EgH@DyV$fNt_WAEZ|3G_T7CJZoOtr%$>5x^(%kpHqI;%$v3B zW=Nm%oLl^P`F|~w79SUHS>?TXcl7`JvQ`iK`d%tXGzNA^w0`g|{vS3=^{HUZ@tr>& z$C{iIC>Pl$aQAOWkn!xZvjq2;nopZlbWS~#nNy=kahJ->FRPcxUwi#E4&;LF^B$6$dgCCeMQ~p`s>v_Y*`kTzZ^-EdAMV`GA`3-0X~p+=1=0+00%7 z%>sIqeJrNjkOH%FA zT35E)dQo4BrL^_c-=kv1Pb!|5xihQ-C$wvva29!@$n{BpwX&nh#>G)? zkpe%eu)#w4D-BGy>cTcfCQJVKso=;pqa$hOzujj!CNMFpI@&+G*CeumMQ``C>$eQ2 zfAbQ0;Bs((>LK}J-&6lYLVM+?mgh)ialBtbICr{k|ugFZ*vy{h1MX+=*q&wL5q27@RZOV%V>>^3~oM zx4z%3nWQ3eS#$sX>f_h*&qbbjo*}&FdibHKs+r3V^G~0?r~beC;)@-d)@)L>SNm}) zZL{Rkts<_C*FqOXSe&!`cODw%xkSVCFPcjt}u0V0ZqZS{6F4hwhaatX!y zFaM=?%W~oM*Ar7Cb0>W}=eS{3f@@&H+O?%k8EXTxL^;a;i7yop+;ulEce2TfqjQSq z%$=KfNknkvQ=cf88Gg&pui_HS^zT;nJd_()@b#PS^XKAED(h~<`?E}5mJ)gF`~6z) zX{k$I%P-iyD;@+(as~5p|zfuw@mZBWm0nN%Y+T; ztGx`*7OTl0_fe}{ppY0oF^8r1_~WpUz<^0?7B9;TquAq*XsO!o6?`u&@_NZct1z#L z&wt)sdrFVfYvr-LrtO^mm%_v6#K*k3n*&a%f)f7#il$tCli*T|$lnLH=O-|_QNrtInZPC)^a!~}o+wL7+iBhh`GYvFGt zmC#iSw5mJbhb`6(xz)VtLy*}kui!WT9nN6MK&biZaQ%erqdWfiPVEC`bOujXKbLh* G2~7YyQsJ=x literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android-staff/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..835cd999cb58a6f7d22a8b17add81d5d4ac45ada GIT binary patch literal 963 zcmV;!13dhRP)P@U5QV?$p5d4pkekHINV-KF2ujY7T?{xYBg;TAp!{4QyPU%-2=!o*`b&Fr}7N3aXDxMEILSta8aILI` zKr)RPa%6*xc>c9YEE*?>fC1v^!>d+6rm;f(J;{1mcU>z;H$$!zCSve?7l3wjQ@Oh%E{~3#7Tmm zQz2C6`Wg@+&vVMMq<3*a6b03NEu3?7yIp$y{^Xd_Y*Y!eQ4vH0VMFz9W}U$Mn}@_Z z&rX{1&)M zc?h)8ot=~@ium;D(?&s-;rI8Ul7RP~cDv1+H@`D3Mhpk_vyioR;x<#uw8k-(Cv0tqC%wtQ5120e$Mgn4;;OEMZed(cNX$~(wM$``I5J9 z|De<9;JpVX8{k~k&9*s$M~O5|QSWOBhzMm_;+$Jq((?#%A?F;bN>LQ|9wqNRWm&G& zaqdE}sn=QJIxO=p1RbGPtA#O!G)?dA#NIjLIBq=bHASTh%|?m6y*+mK_9%<8!buck zE&slM&&BlOvkoK6(qCkMUvYGEBG5Pb`&E{m?-Xpiw0mB@(j$$9CLb>C7Wv-BsKKMbu;Kq)*}Ao7 z_u74Ln<(a4!l3lh_)Lz%B!$e2y9K_t%`E(Nc?HkXr2%PH?XF5K0S}Z)gWpHlNN=l~ z9k*`Rj{-s6i6!zy`;MLoYK>s{apS+{^@$EekL@_-{`>am#glu?->n!P+at63 zYBTu1?>Vk<`tSSMo{KcRx2(RJWjFsn*Ms+84{!ONWcFa+n)aKj4O?RLlpjngF=$Ch z+r}_6b@IB;`8Te!G^TC)o@)F1I;Z3kiPCJIKV%j)@CcuJjE^L(8t&|f!299F!$ zSGxA;r$>*(kIXpw?NRle$$ZN3OcgsKbS7D<$eKJ}p~L&+)1N;zJKz64ePAa)d6@#E4v_QU_l8$8{6!WSoG zKC9zPo_%NfS8E@uBvYxWf4{OH-k)ggW%bLqLhQN0HqG|7w^}bdc1SU?fBiYN`f%Bd zl9uf2@;wLDWKFz7Lq*+Q$+Z2Dbhm%mlmn^($UinN3kq zj(+XD__^=rX)3p`c4;2#t>3jx)l*Nb`}yCmpZ+Kvowif|b^e5sB_Atd9%S*CXa6vN z!#&lH literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android-staff/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..835cd999cb58a6f7d22a8b17add81d5d4ac45ada GIT binary patch literal 963 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 B1jGOU literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android-staff/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..d6dbadecd8ef5549014a757a23d98733598f82f2 GIT binary patch literal 1027 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U_RyP;uumf=k4t1yenQJuHQd8 zFL8?c;{21vkax#o$ENevB25Wg3W^`4SQ`(vsMIdzd;4G$zx*=gAB&G9RA>cAGg9|rV~3DjPx3Mh-S8?CR#Eu8eH4{XLfZq&uJ6k z1q|mxFDzR9LL#ul`IyUP2 z5_1$o`GOzje-6Zmm>#>%E#koWz=w7IDw+F=YQitp@;LGy(^O#pFu&`iOu8LsK9|hm z2By2VQIAdsz#Tfn@6fN?re=As@AZhba;e{|llGb|k(eCfd* zClW+7M3f}gt>Ov|bxheErCutcsI=m>)aIK!@9k=i+KVcT9MbdO8d*sc+A{aivsbwSwTm8oT3no0(TD<;#aUu>Ai0 z`|v&Xl*qPKt3Et>!J)`vlFKZ4AkpRawj12l7XNB`1elhp&zRe`N^4(yT$#U6=8wQo zle2jT9Yb9?8n;PrtK0A3yw&>Z9KYq(=k0TEUwXzk`S6ZqnF3A+E-yc?;XJ`a{ta`S_RKoeGXybK3O8xMk{pdd+Ro57++l`G=sNzklGgrwS}L_D%>q zdh@1a$ky+NEka!*r&-wB%eyT8-+xy?QoP?#cWNF`! zz59N(eBCW}!%euGDfMQnu;l3rizMzHyH_H=Ax3Y#c^VJn>8C{ndk^T%(r7xFl63FG zZj%+OlD0ck*5sT52Y>qn zS>Kxf2X$u6aLU=hKdD!3nSk`0=9I;qnn&1vE8NUT;@Wu7?!#gZc$!j?_VrOTyTSg_ zO<1^t_nYIUi$_F~nrjoJeE00wVNe@&6R6%mzG;oQ|Ct*J@-zGooy+@SG==z#1I}ch ag|E%tmwQ4gdowU|GkCiCxvXjchV)m^733 znd5b(LS{|h4a1Cz+Gf<5Q1W(n{{TPT`@{1*=X}m{p7T7<=W{-pK3;AhEdwnzH8l{@ z-PKoB@BbT`TU1$k;zN^~+U7*0E6gwM(TwEHHQ{Ofbmbc0W_Uh&sCNHNMatZSkt}M% z^ZJwNtwCvlh!7c0)_{dEDqn!iZW2w!xqLC==a-F%ooH9uc$TP}Ov}kG3w9jk%#*f$ zFRCvYSL?c$@(zA1%EY*7#}0o@O&fLf-5ZJ88#-?PXV^0*{&|!VzBc`VXi&26b+VQm#S;yl67ri`&!LqgpIRbjZcnbHTfLwT5(r ziw=8&0(+ph*15!Ub{`<<#%e61&$^_Il6y9B%}Bd9#n@JYVNx+JLx`L$WU`T#dUNDL zX1jbYTKt3q*7IHcScV+gE^zIVKmAj>Zx4~2X=*U3+2C^#5!8ozSsCRH)!18)B9Noi zf4JW7kEQYw&SNtoC<~gpL_VMICt}0j>En8M2aEbJ%$R}icVf|RM2!PQkx(&5ARd1l%0U!S$dm56HA z1{W3<-bQ|O`DIdfu(4{4Myr5qY0f5;z0$|bOqYjI(6m9}1$Um^E<_z60Ds`bF2n(D zoZ08w9hvJAoVy%IEU@ZoQuXJHFNOCWwlN32<~6X{W!AlZ7}A}3l;bi;`$(f*p5VMdGqW5=fRt$Jft=BG$rwx=Ok^3XgSI#Cn$bihL~Pl3DF8E2|Y~@J$}dMEy+&3rI?Xmfhfe z=`@t_sm`XfO$G4R{f+kmISGySb8^{vvK>jpGRjxw5ha5 zvew9FfKsW1BqIUFB%^jdzDmDT?{24z+(0Sd*7pb1H4Op@dskxU$9>4yLeayA!;tZB z(pTh^b)=($%@?b(^h-w?G2%vM`t??SE)XkGalm!w6o)$$G9g-$HbP8;H$>aSe+g@t zpSxK%xF6><@cw-Xy%P;J1uk=0{;>g9n+?a8)(mrNGOHEwbKYSflTbV!-(OT>oBHU* zr>~14(42E%MI0}S@b>oP16gAPJFw=IPU}x_{h7$xYC0^5bYOUljPP_ycR<2m5#rFg zKcarfk@YEe=x>$EI-{fUm0+FibDt&WKN4D!f<<8*XOU_JBbS8ovlyjt%4pj)^^x}I z;IB>Nel69f*eq5-atS!q-~FKd?OhGI+GQV1l_EGwf|JK9QWay*N$C(3-= zdM=TA#Ii-<)H%dd2m*FxtK?>L$Y&{UIb`ax9hxSk^x+?jqxN%sSrtxe-Jx^84I8y3 zw1@y8CyB7?4~DjRx76;tj%HN|ijtSB!*Bg9Y_Cv#C$L5Y2747;vrIF#Kc$+2vXFPJ zya3If(K!D3nEixISPHWMrk~qtT$p(OzdPC5Mt=t}9obACRr#?R65-`q4ZleI2cGl0 AKL7v# literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android-staff/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..e273d2ef37ea2833c035ab24fd8bdd84893bb5cf GIT binary patch literal 1558 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 AKL7v# literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android-staff/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1ab44209c0ee81e95f1271f6dfc84c90964154 GIT binary patch literal 1233 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zf+;V430R;uumf=k1+?>u!gLv|X&t zP+|+&<@?;VRz2Z>uo1(&xA(kK8-!jOc*KgjtPaXbxBed$bcJv3j~ctqb$gG$ejk6f zDd7H{UkneXu{fA83ivX(2s2!y7xQhwYvvy_3STonSUqdIT|<9{^ns=8Q8x6*j4%BEq7R>SPfoPJ*}76Tvz#Hv)r*Y-ZxplWnC+6+&gn| zUESwgAjNm}_3MDu3}UDG3ZyolQ*GEgE3~xc`~P*%H>5IzUZ4Bm&%68UM~0tU+EUt z&$_{CX8e53_Wb+DVoQL*aBRirpE1iXudMs~_Pfkm6teqWWJSgG`;AY->k z*ws(5=Ph5qeEIUP@gb&&^FjwMUk-kvccIwik;KOh#_XdYAN>vNxaF$JAZ2{}$VZ=@&cpEqfDvn&F#? z)J6WQwb`Nv=D8_L#aGBjv2M6=IK$;J_j~8l46AEF*~`sMC_Ol*s`W*4&5Yy=in44$rjF6*2UngB5d^{oH^ literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android-staff/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..e9663f02281df7696960dca34f281970a3d96bd1 GIT binary patch literal 1993 zcmd^7>*ZBd{ru7cuVDQ;#=q#_VNz=;JU4A6}~3WyXch}06T0tFPo3l_&k zMeE8Kb+Q1qK)Ds<-U0&J0-CNA1j?mKRSKHZwhc6{CjG(R5u38lYoou;@>~C}gF@A+ zft+2e?RW>pQR@LP+?B27LAbn2F3!m2=mYwPt$wlPNfS&TkbfFX+FC8Nk{Q*P5zbXQ z7TxGfFKX7rBxvqP3wIL&7igVVSk%ZZ<^BRq(X=#V$?j4u`&Hvf>10MClG~JOX+12u zzFYOsl}kB|MiJbPG240Ub=P;`ac;Z3+)B_}+w)n}&Kt*OOs_8L8l%Jvyfp^1E*&15 z*z&Z@Cyg4afPoQP9lhjTy2c>b5DV(IEBe#aPOa6M0ZBUANzo2>(KO18bMNQ~0)-@HYKD!(Aazjm<`EP2yvq3#DsQat?b#&8+8>5_d2pd41dym+Q&NUU<|X|?gT?Wwfo9hsU4%PFwL z9GACHK9BZ?LlB)F*>;tloWrkD^TzT^s5v5dPWqi->* z@%m`_VC?u7(`X8|RiX{JM8v;Fz0!+qk)Ajl1P!^U^R9KA3o+UZN4jyT)W{N!9^6`G zA)7i&ykzJ{1(J<`$NQuot3Ay!jRO zx8^b+sH!(CfHqe_GV?7I-kaA%DEdd9fAIJH+gAHbUv<7TelLWU+PBx066$7^!8++w zYIp!GP|Rs5T__o1&sC_ud}abOAFD>yYs%GF5Awit1m#S!!cOiCKtt*$tGbrUPf}<& zoF62bJf{fA98c;Brp)?ix#Muel5qQ*b6wCsJSB)eo=7B{w$PE2Am~JdpXl`b#^H{k zwIxvFcpvQ9=*Ku#aP7S8m7gb%5IrzKCV^ykYi`bC;z;O&awz3mha?W=&#Ny z6u#jv=E$8*l(O`deegF=>15V@X4tllqv9Ar{)JPsJcKa{#jn`ODJ4EW8~aMFsFOP* zl#W{NZ6xzp4M7nqX(83n&*tJ=kth2S0ifuA(%`Q}^TX=UwoIcIF_{B0NoB*``8a2R zQL0%+G79xPkhrD8;id!AB8Ygl_Sg$aC19K5;YW@z#4P(m+!aH|%}IMlJ;>?xXpKJ< zj&tf!IejnmQ#qN1c@H*E*mwuw8cq~YVL+*gqZX2u`bb8xN7wRnHR=CEqKs;W*%*Tk Tv{TgMl@EEk`QS=j@t6MsMVhc} literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android-staff/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1ab44209c0ee81e95f1271f6dfc84c90964154 GIT binary patch literal 1233 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zf+;V430R;uumf=k1+?>u!gLv|X&t zP+|+&<@?;VRz2Z>uo1(&xA(kK8-!jOc*KgjtPaXbxBed$bcJv3j~ctqb$gG$ejk6f zDd7H{UkneXu{fA83ivX(2s2!y7xQhwYvvy_3STonSUqdIT|<9{^ns=8Q8x6*j4%BEq7R>SPfoPJ*}76Tvz#Hv)r*Y-ZxplWnC+6+&gn| zUESwgAjNm}_3MDu3}UDG3ZyolQ*GEgE3~xc`~P*%H>5IzUZ4Bm&%68UM~0tU+EUt z&$_{CX8e53_Wb+DVoQL*aBRirpE1iXudMs~_Pfkm6teqWWJSgG`;AY->k z*ws(5=Ph5qeEIUP@gb&&^FjwMUk-kvccIwik;KOh#_XdYAN>vNxaF$JAZ2{}$VZ=@&cpEqfDvn&F#? z)J6WQwb`Nv=D8_L#aGBjv2M6=IK$;J_j~8l46AEF*~`sMC_Ol*s`W*4&5Yy=in44$rjF6*2UngB5d^{oH^ literal 0 HcmV?d00001 diff --git a/android-staff/app/src/main/res/values-v31/styles.xml b/android-staff/app/src/main/res/values-v31/styles.xml new file mode 100644 index 0000000..746ec9a --- /dev/null +++ b/android-staff/app/src/main/res/values-v31/styles.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/android-staff/app/src/main/res/values/colors.xml b/android-staff/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..c84a713 --- /dev/null +++ b/android-staff/app/src/main/res/values/colors.xml @@ -0,0 +1,9 @@ + + + + #201E1D + #201E1D + #EC3013 + #201E1D + #F3F2F2 + diff --git a/android-staff/app/src/main/res/values/ic_launcher_background.xml b/android-staff/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..175a9b9 --- /dev/null +++ b/android-staff/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,6 @@ + + + + #201E1D + diff --git a/android-staff/app/src/main/res/values/strings.xml b/android-staff/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..2f5e6e6 --- /dev/null +++ b/android-staff/app/src/main/res/values/strings.xml @@ -0,0 +1,16 @@ + + + ThreadCount Staff + ThreadCount Staff + tech.threadcount.staff + tech.threadcount.staff + + + Request + Request an item + My kit + What I\'m holding + Shelf + What\'s on the shelf + diff --git a/android-staff/app/src/main/res/values/styles.xml b/android-staff/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..c3e18ad --- /dev/null +++ b/android-staff/app/src/main/res/values/styles.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/android-staff/app/src/main/res/xml/data_extraction_rules.xml b/android-staff/app/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 0000000..07204fb --- /dev/null +++ b/android-staff/app/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + diff --git a/android-staff/app/src/main/res/xml/file_paths.xml b/android-staff/app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000..bd0c4d8 --- /dev/null +++ b/android-staff/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android-staff/app/src/main/res/xml/shortcuts.xml b/android-staff/app/src/main/res/xml/shortcuts.xml new file mode 100644 index 0000000..733a8a4 --- /dev/null +++ b/android-staff/app/src/main/res/xml/shortcuts.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + diff --git a/android-staff/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java b/android-staff/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java new file mode 100644 index 0000000..0297327 --- /dev/null +++ b/android-staff/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java @@ -0,0 +1,18 @@ +package com.getcapacitor.myapp; + +import static org.junit.Assert.*; + +import org.junit.Test; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} diff --git a/android-staff/build.gradle b/android-staff/build.gradle new file mode 100644 index 0000000..85a5dda --- /dev/null +++ b/android-staff/build.gradle @@ -0,0 +1,29 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + + repositories { + google() + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:8.2.1' + classpath 'com.google.gms:google-services:4.4.0' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +apply from: "variables.gradle" + +allprojects { + repositories { + google() + mavenCentral() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android-staff/capacitor.settings.gradle b/android-staff/capacitor.settings.gradle new file mode 100644 index 0000000..1098fa2 --- /dev/null +++ b/android-staff/capacitor.settings.gradle @@ -0,0 +1,8 @@ +// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN +include ':capacitor-android' +project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') + + +include ':capacitor-browser' +project(':capacitor-browser').projectDir = new File('../node_modules/@capacitor/browser/android') + diff --git a/android-staff/gradle.properties b/android-staff/gradle.properties new file mode 100644 index 0000000..2e87c52 --- /dev/null +++ b/android-staff/gradle.properties @@ -0,0 +1,22 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true diff --git a/android-staff/gradle/wrapper/gradle-wrapper.jar b/android-staff/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..033e24c4cdf41af1ab109bc7f253b2b887023340 GIT binary patch literal 63375 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≫L+crb^Bz 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/android-staff/gradlew.bat b/android-staff/gradlew.bat new file mode 100644 index 0000000..6689b85 --- /dev/null +++ b/android-staff/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android-staff/settings.gradle b/android-staff/settings.gradle new file mode 100644 index 0000000..3b4431d --- /dev/null +++ b/android-staff/settings.gradle @@ -0,0 +1,5 @@ +include ':app' +include ':capacitor-cordova-android-plugins' +project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') + +apply from: 'capacitor.settings.gradle' \ No newline at end of file diff --git a/android-staff/variables.gradle b/android-staff/variables.gradle new file mode 100644 index 0000000..3999b90 --- /dev/null +++ b/android-staff/variables.gradle @@ -0,0 +1,28 @@ +ext { + minSdkVersion = 23 + // Play requires new uploads to target a recent API. 36 matches the counter app. + compileSdkVersion = 36 + targetSdkVersion = 36 + androidxActivityVersion = '1.9.3' + androidxAppCompatVersion = '1.7.0' + androidxCoordinatorLayoutVersion = '1.2.0' + androidxCoreVersion = '1.15.0' + androidxFragmentVersion = '1.8.5' + coreSplashScreenVersion = '1.0.1' + androidxWebkitVersion = '1.12.1' + junitVersion = '4.13.2' + androidxJunitVersion = '1.2.1' + androidxEspressoCoreVersion = '3.6.1' + cordovaAndroidVersion = '10.1.1' + + // Kept in step with the counter app's pins even though this project builds without the + // barcode scanner: scripts/build-staff-aab.sh strips the plugin after `cap sync`, and if + // that ever stops happening the build should fail loudly on a missing version rather than + // quietly fall back to a CameraX whose .so files are only 4 KB-aligned. + mlkitBarcodeScanningVersion = '17.3.0' + playServicesMlkitBarcodeScanningVersion = '18.3.1' + androidxCameraCamera2Version = '1.4.2' + androidxCameraCoreVersion = '1.4.2' + androidxCameraLifecycleVersion = '1.4.2' + androidxCameraViewVersion = '1.4.2' +} diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..48354a3 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,101 @@ +# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore + +# Built application files +*.apk +*.aar +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +# Uncomment the following line in case you need and you don't have the release build type files in your app +# release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml + +# Keystore files +# Uncomment the following lines if you do not want to check your keystore files in. +#*.jks +#*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild +.cxx/ + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +# lint/reports/ + +# Android Profiling +*.hprof + +# Cordova plugins for Capacitor +capacitor-cordova-android-plugins + +# Copied web assets +app/src/main/assets/public + +# Generated Config files +app/src/main/assets/capacitor.config.json +app/src/main/assets/capacitor.plugins.json +app/src/main/res/xml/config.xml diff --git a/android/app/.gitignore b/android/app/.gitignore new file mode 100644 index 0000000..043df80 --- /dev/null +++ b/android/app/.gitignore @@ -0,0 +1,2 @@ +/build/* +!/build/.npmkeep diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..d75b2a4 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,116 @@ +apply plugin: 'com.android.application' + +// Release signing. The keystore and its password live in ~/threadcount-keys, outside the repo — +// nothing secret is ever committed. Without that file the release build is simply unsigned, so a +// fresh clone still builds a debug APK. +def keystorePropsFile = file("${System.getProperty('user.home')}/threadcount-keys/keystore.properties") +def keystoreProps = new Properties() +if (keystorePropsFile.exists()) { + keystorePropsFile.withInputStream { keystoreProps.load(it) } +} + + +android { + namespace "tech.threadcount.app" + compileSdk rootProject.ext.compileSdkVersion + defaultConfig { + applicationId "tech.threadcount.app" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + // Play permanently reserves a version code the moment a bundle is uploaded, even to a + // discarded draft — it can never be reused. Bump this for EVERY upload, not every release. + // 1 was spent on the build with the missing camera permission; 2 on the one before + // onboarding was bundled. 3, 4 and 5 went to Play as drafts — a code is reserved the + // moment Play ingests a bundle, warnings and all. 6 adds the mapping file and the native + // debug symbols Play asked for. + versionCode 10 + versionName "1.4" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + aaptOptions { + // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. + // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61 + ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~' + } + } + signingConfigs { + release { + if (keystoreProps['storeFile']) { + storeFile file(keystoreProps['storeFile']) + storePassword keystoreProps['storePassword'] + keyAlias keystoreProps['keyAlias'] + keyPassword keystoreProps['keyPassword'] + } + } + } + buildTypes { + release { + if (keystoreProps['storeFile']) { + signingConfig signingConfigs.release + } + // R8 shrinks and obfuscates, and Gradle folds the resulting mapping.txt into the + // bundle, which is what lets Play symbolicate a stack trace instead of showing + // a.b.c(). Capacitor ships its plugin keep-rules as consumerProguardFiles, so the + // classes the bridge loads reflectively survive; proguard-rules.pro pins the rest. + // + // Resource shrinking is deliberately left off: the onboarding splash and welcome are + // plain files under assets/, which resource shrinking never inspects, so it would + // trade a real risk for almost no bytes. + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + + // Play warns that a bundle with native code has no debug symbols. ThreadCount has no + // native code of its own: all three .so files arrive pre-stripped inside Google's + // MLKit and CameraX AARs, and llvm-objcopy --only-keep-debug pulls zero .debug_* and + // zero .symtab sections out of them. So this currently emits nothing, and there is + // nothing it could emit — the warning is unfixable rather than unfixed. It stays + // configured so that the day ThreadCount does ship its own native code, the symbols + // go with it without anyone having to remember. + ndk { + debugSymbolLevel 'FULL' + } + } + } + // Devices from Android 15 can run 16 KB memory pages, and Play refuses uploads whose native + // libraries are only 4 KB-aligned. Uncompressed + page-aligned .so files satisfy both. + packaging { + jniLibs { + useLegacyPackaging false + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } +} + +repositories { + flatDir{ + dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs' + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" + implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion" + implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion" + // WebViewCompat / WebViewFeature, for MainActivity.giveTheSiteTheBridge(). The Capacitor + // module has this as an implementation dependency, which does not reach this module. + implementation "androidx.webkit:webkit:$androidxWebkitVersion" + implementation project(':capacitor-android') + testImplementation "junit:junit:$junitVersion" + androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" + androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" + implementation project(':capacitor-cordova-android-plugins') +} + +apply from: 'capacitor.build.gradle' + +try { + def servicesJSON = file('google-services.json') + if (servicesJSON.text) { + apply plugin: 'com.google.gms.google-services' + } +} catch(Exception e) { + logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work") +} diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle new file mode 100644 index 0000000..f53529e --- /dev/null +++ b/android/app/capacitor.build.gradle @@ -0,0 +1,21 @@ +// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN + +android { + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } +} + +apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" +dependencies { + implementation project(':capacitor-mlkit-barcode-scanning') + implementation project(':capacitor-browser') + implementation project(':capacitor-haptics') + +} + + +if (hasProperty('postBuildExtras')) { + postBuildExtras() +} diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro new file mode 100644 index 0000000..2c30700 --- /dev/null +++ b/android/app/proguard-rules.pro @@ -0,0 +1,44 @@ +# R8 rules for the ThreadCount shell. +# +# Capacitor's own AAR already contributes consumerProguardFiles that keep anything extending +# com.getcapacitor.Plugin and the @CapacitorPlugin / @PluginMethod members. These rules cover the +# things that sit outside that net — everything the bridge, the WebView or the manifest reaches by +# name rather than by a reference R8 can see. +# +# The cost of getting this wrong is a build that installs and then fails the moment someone scans, +# so the bias here is deliberately towards keeping too much: the bundle is 15 MB of native +# libraries, and none of what follows is where the size is. + +# The plugins named in assets/capacitor.plugins.json. Capacitor resolves these by string at +# startup, so R8 sees no reference to them at all. +-keep class io.capawesome.capacitorjs.plugins.mlkit.barcodescanning.** { *; } +-keep class com.capacitorjs.plugins.haptics.** { *; } + +# The bridge, its WebView plumbing, and the annotations that drive plugin dispatch. +-keep class com.getcapacitor.** { *; } +-keep interface com.getcapacitor.** { *; } +-keep @interface com.getcapacitor.** { *; } + +# Anything the WebView calls from JavaScript. proguard-android.txt carries this rule too; it is +# repeated here because losing it silently breaks every call from the page into the app. +-keepclassmembers class * { + @android.webkit.JavascriptInterface ; +} + +# The activity is named in AndroidManifest.xml, and it subclasses BridgeWebViewClient to keep the +# back button honest. +-keep class tech.threadcount.app.** { *; } + +# MLKit resolves its barcode models and CameraX its implementation classes reflectively. Both ship +# consumer rules of their own; these are belt and braces on the paths that actually run here. +-keep class com.google.mlkit.** { *; } +-keep class com.google.android.gms.internal.mlkit_vision_barcode.** { *; } +-dontwarn com.google.mlkit.** + +# Keep source file and line numbers in stack traces, and tell Play's symbolicator where to look. +# Without these a crash report names the class but not the line that threw. +-keepattributes SourceFile,LineNumberTable +-renamesourcefileattribute SourceFile + +# Annotations drive both Capacitor's dispatch and AndroidX's lifecycle wiring. +-keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod diff --git a/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java b/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java new file mode 100644 index 0000000..f2c2217 --- /dev/null +++ b/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.getcapacitor.myapp; + +import static org.junit.Assert.*; + +import android.content.Context; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + assertEquals("com.getcapacitor.app", appContext.getPackageName()); + } +} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a05e561 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/java/tech/threadcount/app/MainActivity.java b/android/app/src/main/java/tech/threadcount/app/MainActivity.java new file mode 100644 index 0000000..8ce179c --- /dev/null +++ b/android/app/src/main/java/tech/threadcount/app/MainActivity.java @@ -0,0 +1,219 @@ +package tech.threadcount.app; + +import android.graphics.Bitmap; +import android.os.Bundle; +import android.webkit.WebResourceRequest; +import android.webkit.WebResourceResponse; +import android.webkit.WebView; + +import android.util.Log; + +import androidx.activity.OnBackPressedCallback; +import androidx.webkit.WebViewCompat; +import androidx.webkit.WebViewFeature; + +import com.getcapacitor.Bridge; +import com.getcapacitor.BridgeActivity; +import com.getcapacitor.BridgeWebViewClient; +import com.getcapacitor.JSExport; +import com.getcapacitor.PluginHandle; + +import android.content.SharedPreferences; +import android.net.Uri; + +import java.lang.reflect.Field; +import java.util.Collection; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * Back navigation. + * + * Capacitor 6 leaves the back button alone, and nothing else was handling it, so back finished the + * activity from wherever you were standing: three taps into a shelf count, one back gesture and + * ThreadCount was gone. Here back walks the WebView's history instead — which includes the app's + * own client-side routing — and only leaves the app once there is nothing left to go back to. + * + * The callback's enabled flag is kept in step with canGoBack() rather than left permanently on, + * because Android 13+ reads that flag before the gesture starts to decide whether to animate. With + * it accurate, a back gesture at the root peels the app away to reveal the home screen (predictive + * back, switched on by android:enableOnBackInvokedCallback in the manifest); anywhere else it + * stays put and moves the app back one screen. + */ +public class MainActivity extends BridgeActivity { + + private OnBackPressedCallback back; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // A device with no WebView never gets a bridge; there is nothing to navigate. + if (getBridge() == null) return; + + back = new OnBackPressedCallback(false) { + @Override + public void handleOnBackPressed() { + WebView web = getBridge().getWebView(); + if (web != null && web.canGoBack()) { + web.goBack(); + } else { + // Nothing left in this WebView: hand the gesture back to the system. + setEnabled(false); + } + } + }; + getOnBackPressedDispatcher().addCallback(this, back); + + // pushState, replaceState and ordinary navigations all land here, which is what makes the + // enabled flag above trustworthy in a single-page app. + getBridge().setWebViewClient(new BridgeWebViewClient(getBridge()) { + @Override + public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { + super.doUpdateVisitedHistory(view, url, isReload); + syncBack(view); + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + super.onPageStarted(view, url, favicon); + syncBack(view); + } + + /* The bundled welcome tells the shell which server to use by navigating to + * https://localhost/__server?origin=… — a navigation that never happens, because it is + * caught here, and one that only the bundled page may make: a remote page pointing the + * app at another server would be the phishing route, so the request is honoured only + * while the WebView is still on the app's own origin. */ + @Override + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + Uri u = request.getUrl(); + if (u != null && "localhost".equals(u.getHost()) && "/__server".equals(u.getPath())) { + String from = view.getUrl(); + if (from != null && from.startsWith("https://localhost")) setServer(u.getQueryParameter("origin")); + return true; + } + return super.shouldOverrideUrlLoading(view, request); + } + + /** + * Capacitor's own version swaps in the bundled "No connection." screen for any main + * frame response that isn't 2xx. That is the wrong diagnosis for most of them: the + * site answered, and its 404 and its branded 500 (which carries the reference someone + * reads out on the phone) are both better pages than a bundled one sending a counter + * off to check the ward's wifi over a problem that isn't the wifi. A gateway status is + * the exception — nothing is answering behind the proxy, which is what the offline + * screen actually describes. + */ + @Override + public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { + int status = errorResponse != null ? errorResponse.getStatusCode() : 0; + if (status == 502 || status == 503 || status == 504) { + super.onReceivedHttpError(view, request, errorResponse); + } + } + }); + + syncBack(getBridge().getWebView()); + + giveTheSiteTheBridge(); + } + + private void syncBack(WebView view) { + if (back != null && view != null) back.setEnabled(view.canGoBack()); + } + + /** Where the app goes unless told otherwise: the hosted service. */ + private static final String DEFAULT_ORIGIN = "https://threadcount.tech"; + private static final String PREFS = "threadcount"; + private static final String PREF_SERVER = "server"; + + /** The origins the shell hands over to: the hosted service, and the self-hosted server the + * welcome screen saved, if any (Community edition rooms run their own). */ + private Set siteOrigins() { + Set s = new HashSet<>(); + s.add(DEFAULT_ORIGIN); + String own = getSharedPreferences(PREFS, MODE_PRIVATE).getString(PREF_SERVER, ""); + if (!own.isEmpty()) s.add(own); + return s; + } + + /** Remember a self-hosted server (https origin, host only) or, given nothing, go back to the + * hosted service. The bridge is registered for the new origin at once so the first page it + * serves already has window.Capacitor. */ + private void setServer(String origin) { + SharedPreferences.Editor e = getSharedPreferences(PREFS, MODE_PRIVATE).edit(); + if (origin == null || origin.isEmpty()) { e.remove(PREF_SERVER).apply(); Log.i("ThreadCount", "server reset to hosted"); return; } + Uri u = Uri.parse(origin); + if (!"https".equals(u.getScheme()) || u.getHost() == null || u.getHost().isEmpty() || (u.getPath() != null && !u.getPath().isEmpty() && !"/".equals(u.getPath()))) { + Log.w("ThreadCount", "refused a server that is not a plain https origin"); + return; + } + String clean = "https://" + u.getHost() + (u.getPort() > 0 ? ":" + u.getPort() : ""); + e.putString(PREF_SERVER, clean).apply(); + Log.i("ThreadCount", "server set to " + clean); + giveTheSiteTheBridge(); + } + + /** + * Put window.Capacitor on the live site. + * + * The shell opens on its bundled welcome at https://localhost and then hands the WebView to + * threadcount.tech. Capacitor 6 installs its JavaScript bridge with addDocumentStartJavaScript + * scoped to a single origin — the app's own, https://localhost — and, having done that, drops + * the request-proxy path that would otherwise have injected it into pages from the hosts in + * allowNavigation. So every page the counter actually uses arrived with androidBridge (the + * message channel is registered for allowNavigation hosts too) but no window.Capacitor: the + * site took itself for a browser, scanned with Chromium's BarcodeDetector instead of MLKit, + * never buzzed, could not hand a link to Chrome, and offered a print button that cannot print + * here. Found on a Pixel 8 Pro running the Play build, 2026-09-12, by evaluating + * typeof window.Capacitor on /m/login: "undefined". + * + * This registers the identical script — the same seven pieces Bridge assembles, in the same + * order — for the site's origin as well. On a WebView too old for document-start scripts + * Capacitor keeps its proxy injector, which already covers allowNavigation hosts, so nothing + * is added there. + * + * The plugin registry is the one piece Bridge keeps private; it is read reflectively, and + * proguard-rules.pro keeps com.getcapacitor.** intact so the field name survives R8. If any + * of this fails the app is exactly as it was before — signed in, working, web scanner — and + * says why in logcat rather than crashing a counter mid-shift. + */ + private void giveTheSiteTheBridge() { + Bridge bridge = getBridge(); + WebView web = bridge == null ? null : bridge.getWebView(); + if (web == null) return; + if (!WebViewFeature.isFeatureSupported(WebViewFeature.DOCUMENT_START_SCRIPT)) return; + Set origins = siteOrigins(); + try { + String script = bridgeScript(bridge); + WebViewCompat.addDocumentStartJavaScript(web, script, origins); + Log.i("ThreadCount", "Capacitor bridge registered for " + origins); + } catch (Exception e) { + Log.e("ThreadCount", "Could not register the Capacitor bridge for " + origins + "; the site will run as a browser page", e); + } + } + + /** Bridge.getJSInjector(), piece for piece, using the public JSExport helpers it calls. */ + private String bridgeScript(Bridge bridge) throws Exception { + String globalJS = JSExport.getGlobalJS(this, bridge.getConfig().isLoggingEnabled(), bridge.isDevMode()); + String bridgeJS = JSExport.getBridgeJS(this); + String pluginJS = JSExport.getPluginJS(pluginsOf(bridge)); + String cordovaJS = JSExport.getCordovaJS(this); + String cordovaPluginsJS = JSExport.getCordovaPluginJS(this); + String cordovaPluginsFileJS = JSExport.getCordovaPluginsFileJS(this); + String localUrlJS = "window.WEBVIEW_SERVER_URL = '" + bridge.getLocalUrl() + "';"; + return globalJS + "\n\n" + localUrlJS + "\n\n" + bridgeJS + "\n\n" + pluginJS + "\n\n" + + cordovaJS + "\n\n" + cordovaPluginsFileJS + "\n\n" + cordovaPluginsJS; + } + + @SuppressWarnings("unchecked") + private static Collection pluginsOf(Bridge bridge) throws Exception { + Field f = Bridge.class.getDeclaredField("plugins"); + f.setAccessible(true); + Map plugins = (Map) f.get(bridge); + if (plugins == null || plugins.isEmpty()) throw new IllegalStateException("Bridge has no plugins registered"); + return plugins.values(); + } +} diff --git a/android/app/src/main/res/drawable-land-hdpi/splash.png b/android/app/src/main/res/drawable-land-hdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a9bb9123cf851148f28aecdbafa66dff21181c GIT binary patch literal 2250 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV0^&A1QfZHI&TpJ1II*97srr_Id88W-+Tf#E{rdS(WOf5#FS8IJIXF*uwVWsC;GXi6B(1*5rO lG#8BKg3(++)m-p~SvP=1`c3y<2Vfh8!PC{xWt~$(698B(OGy9# literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-land-mdpi/splash.png b/android/app/src/main/res/drawable-land-mdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..6e839caf24b870d0b3d0fb2bb93bb71ec35bb150 GIT binary patch literal 1210 zcmeAS@N?(olHy`uVBq!ia0y~yV0-|?4jfECk=Ls%bQl;|8a-VcLn`LHy<#YMK!M@F zfgt&UAK{&hWk!FrPfXc({SU*7pYiMr1?d+U0@-*4Qb(!LAQ(*rqZxr}WkD%Jj~3JI U$b=tPfMpVcr>mdKI;Vst0AKzm$N&HU literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-land-xhdpi/splash.png b/android/app/src/main/res/drawable-land-xhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..583fe699a9c2afd04668e448b9aa937c290d5f45 GIT binary patch literal 4320 zcmeAS@N?(olHy`uVBq!ia0y~yUPP<^u`nT+jsXS2Sj=R6hffPf{K?Y_9h6xD`Kz$wt2Y@0f5(z+3h{pg( zaqYcB+Ci7_T nV6@*f+C?1gJd-d^(8A1Y!}|NxbiF`eGm62})z4*}Q$iB}B*r%K literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/android/app/src/main/res/drawable-land-xxhdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..9e9f85bc7d5b142fb7996dbc269a4ef35cfd0fc3 GIT binary patch literal 6809 zcmeAS@N?(olHy`uVBq!ia0y~yU~^z#U_QXX1QdDnOsSuNK`O!1#WAE}&f6P?f(H~B z4jc%QFZdDO$sA_%NBhK_jo1GGRWdAiRWA#o8O+(lKvd=^H5vq?sbDlCjFttX#o=g; zFj^aq)`p|C;b?6*S{shmhNHFNXl*!J8;;h7qqX5^Z8%yRj@E{wwc%)OI9eNy)`lat aHe{FZVZUu*c(M{y8+y9>xvXAET-=?FZB&=7E+P?~LT^_Vx6Klv(wvG)tz4qfiJHVGP>D)pBNCk` zuM>q*_yWW{`z190>Yd%}G&|3{^UIuVmg{kpM3UlSm~TnlN}5z}BD`7n8jqy;<08+t zk1jvQSzHfPr}cC1cjx6Px%eovx2yf-cKB3!xI64NgYS*bQZtxpC$80LD|SsEtB&hn zFKuR=FJ8C&JnX-^Xm0wTsWVI$zmC|1&A^tSUAQOGDmf;c1CB@u9ta+wO1A@e01uo4 zcmNNa19$)roC9tTxIG9lfCuov?EoIY1Lpu9zys$19>9YT19$)r+z#LYJa7)+0X%RH l-~l`cF@Oi~!0iAY{5ucsXWygU+qM3W*P~c1^P82?$seUbdF22A literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-port-hdpi/splash.png b/android/app/src/main/res/drawable-port-hdpi/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..d6de5624dc1a55404cb9563525a8f44f3ee3b943 GIT binary patch literal 2890 zcmeAS@N?(olHy`uVBq!ia0y~yV0^&9z^uT*1QaPbs20z_z%A(M;uumf=j|0k!2=2m z2Mz?u7yJnCWGplKqkUq^#_N9=Ui^$_XDCR&z!1pBE08)$jRwJJDj3ZOqh-NpaX4Bd mjMj#uwc%)OIIL>JQU;fQ#U`eK zSgkXOh(TQRN4)j8D<5~?_deXR>o-l^(gB!W%k2S*1XQ6V}B&Y2U&5_$jm>+2?ikDgpCJ7{v$P8N~#GK*d}N1!A;Gz%E{ZbZ!i2Mj1${7LepN z7KAs1Z-LE$-I8;GgOZVe8Hu5h@t9tqj3^_@h%%y#C?m>WMsUiqKR91jMQ2}I|vWB0g4zn*%foUrc8-l^1nl#}B2niZF zByDvas&7!9pe5nH1?Dp|lg+5f*?aEKH|uxr{cJHS$qzfhgOs%6MVvmft+ad^NH?`G zXg$6z_PdtvDsrw?zWiT(e7=1*l85Ktdf9Gne*Ru;(|9XSnn!U$>QtS5xh_PuUgfH` zW>N(yKKF7`bCO6&6|VC#h=AXNNI;Cl4lqh`0wvIyo1ybSOT#t`}v(DZ}|?$rAl U<%hSu_q8=C6y9}%bvv3I0WF)j1poj5 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..c7bd21d --- /dev/null +++ b/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/android/app/src/main/res/drawable/ic_launcher_background.xml b/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..d5fccc5 --- /dev/null +++ b/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/res/drawable/splash.png b/android/app/src/main/res/drawable/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..de77831650313e0f2e8ed72824a935e7bce0beb2 GIT binary patch literal 7891 zcmeI%Aq&Dl7zW^1Cu58a1P!tv!(Sk1P%zwNqC*@aTE%FyYI8RKf*AY-f>;fQ#U`eK zSgkXOh(TQRN4)j8D<5~?_deXR>o-l^(gB!W%k2S*1XQ6V}B&Y2U&5_$jm>+2?ikDgpCJ7{v$P8N~#GK*d}N1!A;Gz%E{ZbZ!i2Mj1${7LepN z7KAs1Z-LE$-I8;GgOZVe8Hu5h@t9tqj3^_@h%%y#C?m> + + + + diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..8c5472d9d55e919605a8b45f0bec941ba4df9570 GIT binary patch literal 1139 zcmV-(1dRKMP){IdeH0Y%=M<45p%R=fX3zVfY7B{0|z!FG%5J2nh`>Py)Y#ii*ro zFeG?vpM8?G8Px1W`#nVS{dlQPHa+n(-ir_RQ`uq#@*AHPnFMq3me-7$xz^w!}hus#mT$X+H zq(+jqXXlix9^toyUVNCe1`0OTqbCbktALRht@)W6N#&>2svqIy&Of!z0Gyw<*@JiirsG`JA1d9e)1hSBAqOtJMne z$TP3Pdzsf-)9dv}l4Nay0FoqW^*-K$thN7X>)%TU%Siaon0D zuS(il%V01d(*9eyCP}B$)&zMyp@=Y@PBATi=5SWXm$aFOyoW%q*K4gv6cLOuEEbE# zV^_til8&N?=g}+!R_L`I=SYt?%gm>@UX)vxIUX}E4Yl{b8KH%}=Z@4`gH@b=` zCFJ>x-QD;3;m4m^+d^EIT7{x13XCaRbEwOh-S~`KYZ(%y5RpdrKUeXZ-c$KftCEhC zYJ3Gzmoe8>q5mImL0Oh@a&iht!#PNi=Q)$fq_LQF@T#O&%O(5!`{a4X=H{(N^Mw*& zu~@Rb{Z1#QnRg}K@AuJh+(w_udl*BSrme-lF5Z=NmSwd@j%##?$h9l!Hu26uaU9or zfYoZX*81kUc#ojTWI~>2h{ykKthJ0rBa$TPyrjy4ilX4H(TMx^zv8>6PZ*8Hl?p`> zAw4tiZ4urA%L&^kg8FL~T7;nZmKK^ni$AKhWo#_viD&=e*D7yw7=^PdXmw0oh`(1q1>? zu$~wn^{n`=O<;BJn%iXv0{v`^#kl%1N;~uYPw}+9nC$+v@6#+vV;P(-xOkbo<)#k+(r4hI{`nYk4 zNSvr#R$~43L2VR+W{UR2WSF-4=nvH`;=NBGa%VKFH;fD9@7BO??Tgp>xNu>4P0}@l z$KVQgi){@vT9X1X1tZ9Nqsqu@)SU^k4X^^5WAirfH-Xb=(xB0ZigReub;iq&9^Bh^ z5)GS_y_#CcaUXv<72`t>zLpyc$2C{{O7H9_T1H|2`khDT6E&ec0j9;OiAGD8Z9G|C0YJvbfzyZD%k_mQFB(5^O zhu@9zvv}@X$uUj2Rh9(jK_UK`!7kPYRAJ2dBk2_`_WjutoEKK2{Cun)V|pMkX{A`z zps(`oUxuY-ED4`IVmAv-O>&5N8>JO#MKZL^_6C-4ogWU0zHPm`VOIjIfFICVE4|IR z6oKfdDh_bNu#UA4M)?!mWUeqlMByavP97Aju`Zc-yr-5@OS1Z<(wJwS!%TC2+GrOg zA?oGU9893F_K+FDeY@lXLqluqmiU>vo$m0GS!PoP;Ar-={I4-KKiu4HF0Dw>OtCkp z<`D^JB)v|GIp@bck(xeNZ;T4f57`YnbzudFZ%1>QyT3v#m}m@QAne>>?R1q9H^W3n zv2fgJ4V@Y1iYWyU7YjHL?L7T(c>)Z_PZRPT<_4VOnA6Dja%6B{f(a|>KA)~^+Gik+z*}vH{G5G)wU55@dWa<_dXJEu(|C~1RsS| z<>~IojU{?CXQxgX`u>y#cyYR4Sn{G@dg#iLc2|87Bmll~VWdXs@{%PG+x9$3tcP!$ z)`lXN(XoOz7ZX)u3}>Ul_Lywj6~CH%8>_PMPqUX;>yOt~CdF(`+ncM@m=je}3x}fN zkaJCM_^qw2v@i09$NC}Q2Ta7MwmT-VjmVyRuT*Ir1)1}F%}|-ddWE0Af0-7zv4e4E z@8wS8O~a5PXdhjqUaYKLZ2egmGLsn}d z;;)dadC{b|!Y}g-%~cuAR) pQZ)CT-a=K)T-oqL4+wNb*a7m@;|BSKd{BIMV%>3=yXer={{SPlgF65K literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8c5472d9d55e919605a8b45f0bec941ba4df9570 GIT binary patch literal 1139 zcmV-(1dRKMP){IdeH0Y%=M<45p%R=fX3zVfY7B{0|z!FG%5J2nh`>Py)Y#ii*ro zFeG?vpM8?G8Px1W`#nVS{dlQPHa+n(-ir_RQ`uq#@*AHPnFMq3me-7$xz^w!}hus#mT$X+H zq(+jqXXlix9^toyUVNCe1`0OTqbCbktALRht@)W6N#&>2svqIy&Of!z0Gyw<*@JiirsG`JA1d9e)1hSBAqOtJMne z$TP3Pdzsf-)9dv}l4Nay0FoqW^*-K$thN7X>)%TU%Siaon0D zuS(il%V01d(*9eyCP}B$)&zMyp@=Y@PBATi=5SWXm$aFOyoW%q*K4gv6cLOuEEbE# zV^_til8&N?=g}+!R_L`I=SYt?%gm>@UX)vxIUX}E4Yl{b8KH%}=Z@4`gH@b=` zCFJ>x-QD;3;m4m^+d^EIT7{x13XCaRbEwOh-S~`KYZ(%y5RpdrKUeXZ-c$KftCEhC zYJ3Gzmoe8>q5mImL0Oh@a&iht!#PNi=Q)$fq_LQF@T#O&%O(5!`{a4X=H{(N^Mw*& zu~@Rb{Z1#QnRg}K@AuJh+(w_udl*BSrme-lF5Z=NmSwd@j%##?$h9l!Hu26uaU9or zfYoZX*81kUc#ojTWI~>2h{ykKthJ0rBa$TPyrjy4ilX4H(TMx^zv8>6PZ*8Hl?p`> zAw4tiZ4urA%L&^kg8CDQ~# z+$5EN6t1j-21shj-JO|}f~KJ;((aPWO9b#QSPTa{=bJs}pR=O|{l0LIrPm!mS#1E; ztqs7swErJ_soZJ#03r|ss32HGScN5V3~`(bkqzJ+)M~ib zzvEv00=4>NY?;y;MiKh)Q}m-xU^JSH-Jxs%5%7KF&p$BVe+O+J?2=Q-^Wa@Vwet`@ z{S2Zgb9%8F2y3XF2heJ-2B7i|!dju}#Q>5q^sYeMir&CzvStCP%+|!Sm-ou+?m07i6QJ*7OGhPEJnv>g#W~8V=DJc6paF z0Yn7P^SHdc-fH3 z>N$m4iR%DvK`ErQCXV9?KnZ8dbs?n`Q54bd_a`|z&tgiUZYf9+Aq+#dwzlR@pXV1Q+-D=IWTS_V7IOgEsfFFPQnIH(T)|LwRrV6=`a}JZH7-MDzFvehvnLEHd z6#_8EFdPo?eSc(-N0aCV)~3Yc2cx`#gT~gl3~LlZ`5+NRpIJr?b$s`PUjn zZl|@@c%E12fm-YT1S=xMaXepyIm%6;X*&^wVg4DQ6j#IHheDm&uDatKScGzWA>a48 zxVYf_{G7n|GtUAi!twDj?RFbu%v`oRt8%;1APnhtyL|b@=aXhG!%>X2ynOkJPNzef zrc2xP>nh|zVHmQrvqP)Z%50~dwWT`Cc~l5sG#c^t?ImfNX4>e~^H;I+Q)L2Ztx4jT zqoX5EPfrPJA>y)Xz_GWtN0KBfgDBL@1wnvc@MdllMJs&^h0XyHxz@vEUt)Nk_y0+u zsgzPwD#fmlR;_z~y}kihw>ALl)&^kRy7vJ80GUXI0667fE&u=k07*qoM6N<$f-s@J Av;Y7A literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..89cf6722236a2fdbbe8c38740da411ac9143f3c5 GIT binary patch literal 1088 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p|}=u&{f&IEGZrd3$?zzD%eH+lTje zX4Xoqf7+g6K9SkY#L>&yMf_x@!6HVk1?4l@{xf%comR5tik`CKrN)d+LSBMLGi4kF z%{|t*wA}x;ZsyJE_X}^7R-D+hcf+}vruY4C<&}TCJZERWr8T#JAZ~E+erGAe+QSds zf6It}QVWslxMrBqG9&gTR|mtc-|x&!k%~2KX6!yCtn7hjK@7-gQ zC%+Mk4C>ZrZD4m`I?!(O-{$SVe~zXMo{s9r7C6jeP(1&h`Ns!G``xZ$o169uY`y!o z?Lz0HtsIqpiVgmYmv!9Qb}p&DiN()Fh(W9Ah}F53B3eqEEYE_sRUUK^40*^{VHzoV zPW^ArB93d3XSkOwn!HrxWsCc)8S(po_zD?bFE-7q-_17ww#f&lakF)h3UN3v5 z9B?L9N#SB>5WBA&)A@gA{7U3L_kIcAo;USb`gd-_P4}$t*%bHgGH3t$WZqvZH{~Nm zEu0L0zr4Gt{RNmZw#odOB%;;p1oDwY9ZxdYY})N#A%!RgK}#;^Y1H))qDu z_HMK1t?E!<>0h}r^Ul87=cWwy*I$=rnn>x~$lRo3owfb8W9VL2Il;j9dqcFY+O!0m zQ2IL+=%*u=&xJxmA3QC$a&ehk{AiAL+VrRLK#wUgHi#dPj=jg_@Jo5mhcn!4S3RG{ ztXj45XrHsogE`KVR5E)u3Tzio->4J8(h#-wTkrR~@gb(GJeMCebNP4U-)YC)|4(5fkGRy*4aJZ@TIE&kLVxPCspBZ7n_f?6XSC3pr-)NwSLtlYpw? z;_CkX_)($OvcT}z!sn9G(y!O8U7Oo+Vrs>$lY1_IynK0i{2Tc<^(B&X`FaH(3kyfT ze*Jnq(~AWMbeDG<-M^L|dF^e9RTbx4zN->TLsmX0mro|gR=$1vR@?ZL4)-z!19S85 z8=}@uN$O#=IHYMi|NmCPDw-gL~n0z(KmTHPP?)u5S@owMwe-;J+LNrGTpwe`MB2oZ(j6>&_z5eBWZeNX3%s=4K;( zi3`;NYV;h%vkfzQgxpS7sK`E&*%I4`R8Wv z#D(h3abFNPr})+3#MeJRiyv23!UGmL{bt^iGQnXb>jYU~$-v<0>gTe~DWM4fbQAVI literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..5990912e0f93c6674c708d687f7e460a61406603 GIT binary patch literal 926 zcmV;P17ZA$P)CDQ~# z+$5EN6t1j-21shj-JO|}f~KJ;((aPWO9b#QSPTa{=bJs}pR=O|{l0LIrPm!mS#1E; ztqs7swErJ_soZJ#03r|ss32HGScN5V3~`(bkqzJ+)M~ib zzvEv00=4>NY?;y;MiKh)Q}m-xU^JSH-Jxs%5%7KF&p$BVe+O+J?2=Q-^Wa@Vwet`@ z{S2Zgb9%8F2y3XF2heJ-2B7i|!dju}#Q>5q^sYeMir&CzvStCP%+|!Sm-ou+?m07i6QJ*7OGhPEJnv>g#W~8V=DJc6paF z0Yn7P^SHdc-fH3 z>N$m4iR%DvK`ErQCXV9?KnZ8dbs?n`Q54bd_a`|z&tgiUZYf9+Aq+#dwzlR@pXV1Q+-D=IWTS_V7IOgEsfFFPQnIH(T)|LwRrV6=`a}JZH7-MDzFvehvnLEHd z6#_8EFdPo?eSc(-N0aCV)~3Yc2cx`#gT~gl3~LlZ`5+NRpIJr?b$s`PUjn zZl|@@c%E12fm-YT1S=xMaXepyIm%6;X*&^wVg4DQ6j#IHheDm&uDatKScGzWA>a48 zxVYf_{G7n|GtUAi!twDj?RFbu%v`oRt8%;1APnhtyL|b@=aXhG!%>X2ynOkJPNzef zrc2xP>nh|zVHmQrvqP)Z%50~dwWT`Cc~l5sG#c^t?ImfNX4>e~^H;I+Q)L2Ztx4jT zqoX5EPfrPJA>y)Xz_GWtN0KBfgDBL@1wnvc@MdllMJs&^h0XyHxz@vEUt)Nk_y0+u zsgzPwD#fmlR;_z~y}kihw>ALl)&^kRy7vJ80GUXI0667fE&u=k07*qoM6N<$f-s@J Av;Y7A literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0d4c0689f6567757ebc534f3b12a75efec783c42 GIT binary patch literal 1205 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..9a63a701c1860d9c93bf236d4643361e83654a77 GIT binary patch literal 1767 zcmd6ocTm#@6vuxcU{FQ^S7t>BLf`}ua0CKDFyerM3igByH(p8>M%4mV?D*2a*M-v9M_4v-*9iVJG`gn4K+(B8i;y85 zA6=;bcHsFc)iSAmoo9ypIG}!|&7e|~S@>Y`z6rG8#p7lPO(3d}uz$b7y?tj`XBhpP zbx$hhn4JS|C$u24*2FfuZdyLL+wK?712K)@j*3fOVXkmp`7c71wTr;jM&!dnQ*%!P zOH2X)g+|t@sRguNuE_L{(x$Za^}!oV$vw#~?=*@K1Q-|noKez7#4k%kaibT_-0toz zcm37Sn73O+u(q;w7HDhwRbs*1#| zn|{A>5DdG;Hp&h$W9;_bKVMxLMAVq$$ExDxfjwEES0LyC;~d~8L;0@_T)!#h&dwB6 z4foA9oI8VVIeb4M)D6TDC+b|GL9BgRXW%O=IqNdkwAZl(nCZc5MKb_O^x{*}#bC z?9Z4Cg+=6HRR^`4X{Yv*$=2$a$hd zgSpVp<#L_In$pEplmI)U4CipQ^s(apS+P|pt91sJqxrMRbQLMh{1CX=&^FuqSeHBX z#GGAJHSiBM{mZ}$xDN{GqRyVqWt}DM^u?sE<;F6sCm1%~djlcpP4pY!r952cE!og0 zC&?F+lP5Ma9A)R`#awL+oznd_x@c5zvlv1P(c!dS-a0Z!i(g&Qk3m0VFHV)kWpKyG zgON8`QDY)XS47YBLCdiH7z~D3k+C}CL~v9Gq7|zPl}}q}A+5#gANhRsP}bj+Tc*VZ z9EIpb5m<)R7>aWO10I?%W?{d7cfM7V_$BWYwYQOy-#@rXs!gZlH}RctQo+E64vcEj zXg+veMs@mH=Eu<|>(yg{>HHyS&_J7M?MCT!jr6f*2xN?yb6(#D;fd#&O=2Xlqstqr?_FIWPS5*y`E5i-lJHZ7Kd6AoxuT z^ZSVhjkuM?wHMcS>Ze)C#M>W8Pwq;WCC7hU!IA57`m6NNeV$c+rpeJm9w>@SaMmA0 CHr_`7 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd718c0be3f83d57445a7ce8f2ad39dafa9bd55 GIT binary patch literal 1422 zcmb_ceK^wz9G`BPyr+(=Y}95Ykr`S&x|&l*|dLC&jqu?pX zg^+VD%0lXQc|_hurECP36K$Il$@L~ciLDuwn?XP4J<{@)XXi;|T>2P&1A!#3`7#;W zGGnK_kGCdDGfIL!6v&4d^RTeE0qaQFbffF#0R z-?H+NPK8H5{=6JFwpJX$E-im)s$fwuE1yGXox@7{p;oRfIMN#Ebk4sxc zxZs{BQT&&yohK3VqBduQIklni@9WI+$YPC!=<3dx(>?EBbu+_(qovDMKadBGDp(e6 zR+Pg&6b1uoNYkd~3;)fTa4l1q~(Fs_6=n zd7FkZc+JN39K4H*FxlFDznc2#lQL3!URBmUpSNAGP1?(~;ENL3l3+=F4bQ3TvGpOA zVPkW1b#MVp`Kq?`bV>C?7TQC>mNpNGL^pifQ}D^r+q3KsiJj3xWCESe%J}4Tr#Ftd z6hYV_)Dtp47rMcKs{+&)TU?Lq%FkJ;eq0(98>2Xjx%o@oeRR2wg}h^#Nihw3%>mL} z`g|;+R`Gberze)~?okj#`?<{7+!PVjvsBs3LUrlh!TKg_$GfiCT*IJxy@mi48k$cs zZ)vP}BhSurcJ=GJQeW#WP8~TB)i)+Ws5Ik`Nv0^j}O>$PO5+xb7rxnHZE_q zp~b0ffwrFmvFQsD|D^DmIGGA)rdV%@UfRXJI_Q^D?jom2!= z@aLfgJS1uR4(kc3MFlpYwx%Hl|H-I4OQ^{&P{vL@m)g`1=N9Kf`Mgtr}6AYUft`VUHy z2X4J>ty51AyN?RAO@h|6NXE zFY%Kjzv0yh*$nr?kpI;~+=!^?I5b9rUP?8*tsw?UlBJ`gctPP|Nz<}y^f+q#FXrmT zRP$y&zcz7JMx5f4T!g7AG>4Ep)%Sf9O_*45d2)Ci=R>_G9B!w#PQzxO!dudHcE>Sk qf0{gr4fhCJAZD#}88{^=Zd^3H|f^ho@fpz||ng0TF7Kpt7 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7d538e4d373afbb201c8714eea3e28ff39284ced GIT binary patch literal 1721 zcmd6oe>l?#9LK+-CNjTrToif4ZQRk7mdH#|=JzvOenjYTmHezmV@Tl?r*lSrq!fnC zOvKd?<48h&lwWOTvT2(i8?pRoyY<}D^V}cZ{d@O3ug~Z6@8|P*zn{k)VF~~MPD0t+Vem!s%$8faqq~0=iF?^u4At1YIxV%ml{Y;t zVbO|i#2LAi9C+4tk7Ar18oUsuc!~CHNVL4js8Suh6CH$f2!7GzOMT(r-;1Jix~>_G zMY;4BZy;=wKCzYcFCqGOmA~_%rURZ>mOQX-57Zw29{_((03tEzWkX`9km!hZN>H6{ zm8d3In){PeM)lCm8L{61=D_jn8X9njbDWmwa-Jq@aa zS9XZN*iOt1eIu0BUDWdfF#Q8NBRo0HV`&xjod^hYcWc}?0zrdjhzB`dVxD_0z;Pw% zMbsS=RN*0~LlLk~n|bI1s^U;Jb09>Wj(4sSEO!)p>q2ZXKJintmqXwXF*~naPtGW0 zHS>cjyS|l|US@)VaaV5V%Q}T<3D^dHM}Mr}GLixWW`5y^IqZFOx{~Lf5o1!BrqJqB zRjTs+oRY!wW%NMgme4HpP&{IEe7wMa3tJ9Kg3eyMcO9n6bR>EVd~Y0lS*t7mZq*56L0z&cTimVeaufc4=|gqtW?-a9ZsaB z^&HR8NZTF=o2_O?Rnls(*dj8u=aO|(#JgIMqtr&7dn7QL@jLb0YTIGCq=WwgSFWIG z>{89v*&{7LH(a5kl4e2@5WGVh{Az^UzB{ypjYj5& zlxQVwlv5_i1)uEdFFp%)plzd((yl&XyMby4g;th>0``O83K__|&dzO>fakXy8}#BpwsN)*;tA`{6x+=MtwXqd7cnTz>% literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4b801a9d02258081dc9877bfbead1be5abe2b0b1 GIT binary patch literal 2395 zcmd^9Yc$(=8vaMyiL#}Cy+n1I?!=(MxKuluN<&vFq=JS)wVJ5K+Qy}fq^{NJv=YYH z61601ayrp5RA}mM8dGttB#3bdnsKR^R;UI+T!!5vC??F*=_^!jvm3NIG-^9@o#)Q2(*Iuug5lE;!z=k7 zv6KjI=AdE1{^cUy;FIH%9ohZ;tDGBsU&%l(XpQET(l+)}@Za(|-) z%Vk<MInjITj%0E@kal7i%zQfZbRS`0~_Gm56OU!TNCh2 zb}Gcn1hV5Ryw-b8xjTRNFML4V%cr}V5Yt^(rgRT}l1^tL5V;&&&U>(S$P(yqIpB7FmALMe;*> ztyd>UW3|3s=ZeHRE}VF48-r!`3KC~-+d=M-xEd@an?qs7D@Y)-HUHamA^jELwxkMtqWM*at zouD42$pr!d$&~sk$;p8cbK|GzdRx|aEaIy4`}#u(R(mVJOC(YeR=CDpT!dLQE>77E z4-emCg-%!c+aM8f1ULU@ZINQJo;ep8-~>kFLrl`&>-l)b&ZvhNT(A&%AYM`Db) zn%w9qMiKEL@$q$7r2X9oP(5wKo;-uVfpc;V)DClbAP&0O6r^Z*-tMdq05#745x2i= z$E4GF1Omam9jjC5*AC@w1{|$8weySVhH{ofp{kA;W^0Zwpe^sSW4pH8H}wW!KUCMb ziEfPha)kfn$&;szjg5ULMBNh=usSfG5CD{hn-0U0a^FLX3~4!B@W* zQui1gdS8;tNM_knyUOCAf*=$MFsr1vu*8P*gqROiNA4rk1o29xHD;+bR+6kbEdA*O@A2bBXUVP%F{8_v zIzQgBADq_=kT!dHDJvO|s5F|f0=?k>@Q1uv4xL_ARmH*GGS@b|fFIhzDsZ?uLOfJZ ztE#8}3C~b+ptlNY{Xy`aH=ckm`Fau@cPcp65~g3%q(b~RC;1QBu%Y8}Gg~#3$59;O zU=Z07cw}ZOs7!h`QXLUFyj0GP=!E{|JhF#6I=0=5_8|R;V@e|yi(Z+`iIUgE$XN{y z4iV`T!blME+<<$*RHZd~!$p|j{z&S7>C)i@O90q7+S|RO!lvxbSS|LXT1FFzcRdaMEiL>7_F6)S9q#@5Lw>aFT(sY%6 z>gm({13Z#|I@j6hf)5^w*8+g%(_4Dvjn8L_L~h6sAD&1=$m)UoCVT&L!PH&z*7P8j U99MIWwLP5MIS*|4AIP8m40#%I?*IS* literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..7d538e4d373afbb201c8714eea3e28ff39284ced GIT binary patch literal 1721 zcmd6oe>l?#9LK+-CNjTrToif4ZQRk7mdH#|=JzvOenjYTmHezmV@Tl?r*lSrq!fnC zOvKd?<48h&lwWOTvT2(i8?pRoyY<}D^V}cZ{d@O3ug~Z6@8|P*zn{k)VF~~MPD0t+Vem!s%$8faqq~0=iF?^u4At1YIxV%ml{Y;t zVbO|i#2LAi9C+4tk7Ar18oUsuc!~CHNVL4js8Suh6CH$f2!7GzOMT(r-;1Jix~>_G zMY;4BZy;=wKCzYcFCqGOmA~_%rURZ>mOQX-57Zw29{_((03tEzWkX`9km!hZN>H6{ zm8d3In){PeM)lCm8L{61=D_jn8X9njbDWmwa-Jq@aa zS9XZN*iOt1eIu0BUDWdfF#Q8NBRo0HV`&xjod^hYcWc}?0zrdjhzB`dVxD_0z;Pw% zMbsS=RN*0~LlLk~n|bI1s^U;Jb09>Wj(4sSEO!)p>q2ZXKJintmqXwXF*~naPtGW0 zHS>cjyS|l|US@)VaaV5V%Q}T<3D^dHM}Mr}GLixWW`5y^IqZFOx{~Lf5o1!BrqJqB zRjTs+oRY!wW%NMgme4HpP&{IEe7wMa3tJ9Kg3eyMcO9n6bR>EVd~Y0lS*t7mZq*56L0z&cTimVeaufc4=|gqtW?-a9ZsaB z^&HR8NZTF=o2_O?Rnls(*dj8u=aO|(#JgIMqtr&7dn7QL@jLb0YTIGCq=WwgSFWIG z>{89v*&{7LH(a5kl4e2@5WGVh{Az^UzB{ypjYj5& zlxQVwlv5_i1)uEdFFp%)plzd((yl&XyMby4g;th>0``O83K__|&dzO>fakXy8}#BpwsN)*;tA`{6x+=MtwXqd7cnTz>% literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/values-v31/styles.xml b/android/app/src/main/res/values-v31/styles.xml new file mode 100644 index 0000000..746ec9a --- /dev/null +++ b/android/app/src/main/res/values-v31/styles.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..c84a713 --- /dev/null +++ b/android/app/src/main/res/values/colors.xml @@ -0,0 +1,9 @@ + + + + #201E1D + #201E1D + #EC3013 + #201E1D + #F3F2F2 + diff --git a/android/app/src/main/res/values/ic_launcher_background.xml b/android/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..90ecd59 --- /dev/null +++ b/android/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #F3F2F2 + \ No newline at end of file diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..53848c1 --- /dev/null +++ b/android/app/src/main/res/values/strings.xml @@ -0,0 +1,7 @@ + + + ThreadCount + ThreadCount + tech.threadcount.app + tech.threadcount.app + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..c3e18ad --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/android/app/src/main/res/xml/data_extraction_rules.xml b/android/app/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 0000000..07204fb --- /dev/null +++ b/android/app/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/res/xml/file_paths.xml b/android/app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000..bd0c4d8 --- /dev/null +++ b/android/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java b/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java new file mode 100644 index 0000000..0297327 --- /dev/null +++ b/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java @@ -0,0 +1,18 @@ +package com.getcapacitor.myapp; + +import static org.junit.Assert.*; + +import org.junit.Test; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..85a5dda --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,29 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + + repositories { + google() + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:8.2.1' + classpath 'com.google.gms:google-services:4.4.0' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +apply from: "variables.gradle" + +allprojects { + repositories { + google() + mavenCentral() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle new file mode 100644 index 0000000..f38c8f8 --- /dev/null +++ b/android/capacitor.settings.gradle @@ -0,0 +1,12 @@ +// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN +include ':capacitor-android' +project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') + +include ':capacitor-mlkit-barcode-scanning' +project(':capacitor-mlkit-barcode-scanning').projectDir = new File('../node_modules/@capacitor-mlkit/barcode-scanning/android') + +include ':capacitor-browser' +project(':capacitor-browser').projectDir = new File('../node_modules/@capacitor/browser/android') + +include ':capacitor-haptics' +project(':capacitor-haptics').projectDir = new File('../node_modules/@capacitor/haptics/android') diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..2e87c52 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,22 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..033e24c4cdf41af1ab109bc7f253b2b887023340 GIT binary patch literal 63375 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≫L+crb^Bz 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 0000000..6689b85 --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..3b4431d --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,5 @@ +include ':app' +include ':capacitor-cordova-android-plugins' +project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') + +apply from: 'capacitor.settings.gradle' \ No newline at end of file diff --git a/android/variables.gradle b/android/variables.gradle new file mode 100644 index 0000000..7e7c38b --- /dev/null +++ b/android/variables.gradle @@ -0,0 +1,30 @@ +ext { + minSdkVersion = 23 + // Play requires new uploads to target a recent API. 36 is what ClearAudit had to move to. + compileSdkVersion = 36 + targetSdkVersion = 36 + androidxActivityVersion = '1.9.3' + androidxAppCompatVersion = '1.7.0' + androidxCoordinatorLayoutVersion = '1.2.0' + androidxCoreVersion = '1.15.0' + androidxFragmentVersion = '1.8.5' + coreSplashScreenVersion = '1.0.1' + androidxWebkitVersion = '1.12.1' + junitVersion = '4.13.2' + androidxJunitVersion = '1.2.1' + androidxEspressoCoreVersion = '3.6.1' + cordovaAndroidVersion = '10.1.1' + + // 16 KB page size: devices from Android 15 onward can use 16 KB memory pages, and Play + // rejects uploads whose native libraries aren't aligned for them. These are the versions + // that ship 16 KB-aligned .so files — the same pin ClearAudit needed. + mlkitBarcodeScanningVersion = '17.3.0' + playServicesMlkitBarcodeScanningVersion = '18.3.1' + // The MLKit plugin reads these four names individually — set them all, or it silently + // falls back to CameraX 1.1.0, whose libimage_processing_util_jni.so is only 4 KB-aligned + // and gets the upload rejected. + androidxCameraCamera2Version = '1.4.2' + androidxCameraCoreVersion = '1.4.2' + androidxCameraLifecycleVersion = '1.4.2' + androidxCameraViewVersion = '1.4.2' +} diff --git a/androidshell/error.html b/androidshell/error.html new file mode 100644 index 0000000..b1dfce4 --- /dev/null +++ b/androidshell/error.html @@ -0,0 +1,84 @@ + + + + + +No connection — ThreadCount + + + +

ThreadCount
+
+
+

No connection.

+
+

ThreadCount can’t reach the linen room’s records, so it won’t let you issue or count + anything right now — nothing is being saved up in the background.

+
    +
  • Check the ward’s wifi, or step somewhere with signal.
  • +
  • Nothing you had already recorded is lost. A count you hadn’t filed is still + on this phone and will be there when you get back.
  • +
  • If the wifi is fine and this keeps happening, it’s our end — the contact form + on threadcount.tech reaches the person who wrote it.
  • +
+
+ +
+ + + diff --git a/androidshell/index.html b/androidshell/index.html new file mode 100644 index 0000000..cc82102 --- /dev/null +++ b/androidshell/index.html @@ -0,0 +1,334 @@ + + + + + +ThreadCount + + + + +
+ +
ThreadCount
+

Uniform stock, counted
+
+ + + + + + + + + + diff --git a/androidshell/media/welcome-poster.jpg b/androidshell/media/welcome-poster.jpg new file mode 100644 index 0000000000000000000000000000000000000000..774153bc0bd52ff20bd3b7871a17454640355932 GIT binary patch literal 41733 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 g2p~PVT6hL_!9S%RfmT}zH2Q@FqK6~6T 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%0AQj&w$6Fhg2M%zHs!}E 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 z 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

  • Ad1ya$Qj2Eu8cb8`uVby9qL^uvlz6}Lj# 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

    +@6w3=eiglorC+n(1`Y> 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.q5l2W$~ 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 + ThreadCount + + + \ No newline at end of file diff --git a/app/.well-known/assetlinks.json/route.ts b/app/.well-known/assetlinks.json/route.ts new file mode 100644 index 0000000..c742ea9 --- /dev/null +++ b/app/.well-known/assetlinks.json/route.ts @@ -0,0 +1,65 @@ +import { NextResponse } from "next/server"; + +export const dynamic = "force-dynamic"; + +/* Digital Asset Links — what lets the staff app open threadcount.tech/my links itself. + * + * Without this file, tapping "Approve" in a manager's email opens Chrome rather than the app they + * installed. Android fetches it over HTTPS and checks that the certificate it names matches the + * one the installed app was signed with. + * + * The fingerprint has to be **Play's app-signing certificate**, not the upload key — with Play App + * Signing, Google re-signs the bundle, so the certificate on the device is theirs. Find it at + * Play Console → Test and release → Setup → App signing → "SHA-256 certificate fingerprint", and + * put it in the environment as ANDROID_APP_FINGERPRINTS. Several may be listed, comma-separated: + * both apps, or an old and a new key during a rotation. + * + * Served from an env var rather than a static file on purpose. The fingerprint is only knowable + * after the first upload, and a deploy is a cheaper way to add it than a code change — and if it + * is ever rotated, nothing here needs editing. + * + * With no fingerprint configured this returns an empty statement list, which is the honest answer: + * no app is authorised to handle these links yet, and Android falls back to the browser exactly as + * it does today. It never returns a malformed or guessed fingerprint. + */ +const PACKAGES: { name: string; label: string }[] = [ + { name: "tech.threadcount.staff", label: "ANDROID_APP_FINGERPRINTS_STAFF" }, + { name: "tech.threadcount.app", label: "ANDROID_APP_FINGERPRINTS_COUNTER" }, +]; + +function fingerprints(specific: string): string[] { + const raw = process.env[specific] || process.env.ANDROID_APP_FINGERPRINTS || ""; + return raw + .split(",") + .map((f) => f.trim().toUpperCase()) + // A SHA-256 fingerprint is 32 colon-separated hex pairs. Anything else is a paste error, and + // shipping it would just make Android's verification fail silently. + .filter((f) => /^([0-9A-F]{2}:){31}[0-9A-F]{2}$/.test(f)); +} + +export async function GET() { + const statements = PACKAGES.flatMap((p) => { + const fps = fingerprints(p.label); + if (!fps.length) return []; + return [{ + relation: [ + // Opens threadcount.tech/my links in the app instead of the browser. + "delegate_permission/common.handle_all_urls", + // Credential sharing: the site and the app are one account system, so a password saved on + // either autofills on the other. A staff member sets theirs once, on whichever surface the + // printed slip's link happened to open on, and shouldn't have to remember which. + "delegate_permission/common.get_login_creds", + ], + target: { namespace: "android_app", package_name: p.name, sha256_cert_fingerprints: fps }, + }]; + }); + + return NextResponse.json(statements, { + headers: { + "content-type": "application/json", + // Android caches this; an hour is short enough that adding a fingerprint takes effect the + // same day, and long enough that it isn't fetched on every link tap. + "cache-control": "public, max-age=3600", + }, + }); +} diff --git a/app/api/2fa/route.ts b/app/api/2fa/route.ts new file mode 100644 index 0000000..088df20 --- /dev/null +++ b/app/api/2fa/route.ts @@ -0,0 +1,121 @@ +import { NextRequest, NextResponse } from "next/server"; +import bcrypt from "bcryptjs"; +import QRCode from "qrcode"; +import { prisma } from "@/lib/db"; +import { currentUser } from "@/lib/session"; +import { sameOriginJson } from "@/lib/csrf"; +import { allow, clientIp } from "@/lib/ratelimit"; +import { + decryptSecret, encryptSecret, hashRecoveryCode, newRecoveryCodes, newTotpSecret, otpauthUrl, totpVerify, +} from "@/lib/totp"; +import { recordAuthEvent } from "@/lib/audit"; + +export const dynamic = "force-dynamic"; + +/* Turning a second factor on and off, for your own account only. + * + * Three steps rather than one, because a secret that is stored the moment it is generated leaves + * an account half-enrolled if the person never finishes — and then their next sign-in asks for + * codes from an app they never set up. + * + * setup — generate a secret and show the QR. Stored, but not yet in force. + * enable — prove a code from it works, then switch it on and hand back recovery codes. + * disable — password required, because turning a factor off is a privileged act. + */ +export async function GET() { + const user = await currentUser(); + if (!user) return NextResponse.json({ error: "Not signed in" }, { status: 401 }); + const u = await prisma.user.findUnique({ where: { id: user.id }, select: { totpEnabledAt: true } }); + const left = await prisma.recoveryCode.count({ where: { userId: user.id, usedAt: null } }); + return NextResponse.json({ enabled: !!u?.totpEnabledAt, enabledAt: u?.totpEnabledAt ?? null, recoveryLeft: left }); +} + +export async function POST(req: NextRequest) { + const csrf = sameOriginJson(req); + if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + const user = await currentUser(); + if (!user) return NextResponse.json({ error: "Not signed in" }, { status: 401 }); + + const ip = clientIp(req.headers); + if (!allow("2fa-manage:" + user.id, 30, 15 * 60 * 1000)) { + return NextResponse.json({ error: "Too many attempts — try again in a few minutes." }, { status: 429 }); + } + + // Turning a second factor on or off is one of the few changes to an account that leaves no trace + // in the records themselves, so it is one of the few worth recording on its own. + const actor = { + facilityId: user.facilityId, userId: user.id, + userName: `${user.first} ${user.last}`.trim() || user.email, + }; + + let body: { action?: unknown; code?: unknown; password?: unknown }; + try { body = await req.json(); } catch { return NextResponse.json({ error: "Bad request" }, { status: 400 }); } + const action = String(body.action ?? ""); + + const u = await prisma.user.findUnique({ + where: { id: user.id }, + select: { id: true, email: true, passwordHash: true, totpSecret: true, totpEnabledAt: true }, + }); + if (!u) return NextResponse.json({ error: "Not signed in" }, { status: 401 }); + + if (action === "setup") { + if (u.totpEnabledAt) return NextResponse.json({ error: "Two-factor is already on for this account." }, { status: 400 }); + const secret = newTotpSecret(); + await prisma.user.update({ where: { id: u.id }, data: { totpSecret: encryptSecret(secret) } }); + const url = otpauthUrl(secret, u.email); + // SVG, generated here rather than in the browser: it keeps a QR library out of the bundle that + // ward phones download, and the secret never has to be handed to client-side code to render. + const qr = await QRCode.toString(url, { type: "svg", margin: 1, width: 220, errorCorrectionLevel: "M" }); + recordAuthEvent(actor, "2fa:setup", ip); + return NextResponse.json({ ok: true, secret, url, qr }); + } + + if (action === "enable") { + if (u.totpEnabledAt) return NextResponse.json({ error: "Two-factor is already on." }, { status: 400 }); + const secret = decryptSecret(u.totpSecret); + if (!secret) return NextResponse.json({ error: "Start the setup again." }, { status: 400 }); + if (!totpVerify(secret, String(body.code ?? ""))) { + return NextResponse.json({ error: "That code isn't right. Use the current one from your app." }, { status: 400 }); + } + const codes = newRecoveryCodes(); + await prisma.$transaction(async (tx) => { + await tx.user.update({ where: { id: u.id }, data: { totpEnabledAt: new Date() } }); + await tx.recoveryCode.deleteMany({ where: { userId: u.id } }); + await tx.recoveryCode.createMany({ data: codes.map((c) => ({ userId: u.id, codeHash: hashRecoveryCode(c) })) }); + }); + recordAuthEvent(actor, "2fa:enable", ip); + // The only time these are ever readable. They are stored hashed, so there is no second chance. + return NextResponse.json({ ok: true, codes }); + } + + if (action === "disable") { + if (!u.totpEnabledAt) return NextResponse.json({ ok: true }); + const pw = String(body.password ?? ""); + if (!pw || !(await bcrypt.compare(pw, u.passwordHash))) { + return NextResponse.json({ error: "That password isn't right." }, { status: 401 }); + } + await prisma.$transaction(async (tx) => { + await tx.user.update({ where: { id: u.id }, data: { totpEnabledAt: null, totpSecret: "" } }); + await tx.recoveryCode.deleteMany({ where: { userId: u.id } }); + }); + recordAuthEvent(actor, "2fa:disable", ip); + return NextResponse.json({ ok: true }); + } + + if (action === "regenerate") { + if (!u.totpEnabledAt) return NextResponse.json({ error: "Two-factor isn't on." }, { status: 400 }); + const pw = String(body.password ?? ""); + if (!pw || !(await bcrypt.compare(pw, u.passwordHash))) { + return NextResponse.json({ error: "That password isn't right." }, { status: 401 }); + } + const codes = newRecoveryCodes(); + await prisma.$transaction(async (tx) => { + await tx.recoveryCode.deleteMany({ where: { userId: u.id } }); + await tx.recoveryCode.createMany({ data: codes.map((c) => ({ userId: u.id, codeHash: hashRecoveryCode(c) })) }); + }); + recordAuthEvent(actor, "2fa:regenerate", ip); + return NextResponse.json({ ok: true, codes }); + } + + return NextResponse.json({ error: "Unknown action" }, { status: 400 }); +} diff --git a/app/api/activity/route.ts b/app/api/activity/route.ts new file mode 100644 index 0000000..dfb4ead --- /dev/null +++ b/app/api/activity/route.ts @@ -0,0 +1,58 @@ +import { NextRequest, NextResponse } from "next/server"; +import { prisma } from "@/lib/db"; +import { currentUser } from "@/lib/session"; + +export const dynamic = "force-dynamic"; + +const PAGE = 100; + +/* The audit trail, read back. + * + * Admin only, and scoped to the caller's own facility by the query rather than by a filter the + * client sends — the client never gets to say which facility it wants. Paged by cursor rather + * than offset so a busy room's log doesn't shift under you as new rows land while you read. + * + * The cursor is (timestamp, id), not timestamp alone. Prisma stores DateTime at millisecond + * precision, and two events sharing a millisecond is ordinary rather than exotic — two coordinators + * saving at once, or two ops committed inside one transaction. A strict `at < cursor` dropped every + * row that shared the last one's millisecond, so the log looked complete with an event missing from + * it, which is the one failure an audit trail cannot have. + */ + +/** `|` — one opaque string, because the client only ever hands it straight back. */ +function readCursor(raw: string | null): { at: Date; id: string } | null { + if (!raw) return null; + const cut = raw.lastIndexOf("|"); + const iso = cut === -1 ? raw : raw.slice(0, cut); + const id = cut === -1 ? "" : raw.slice(cut + 1); + if (Number.isNaN(Date.parse(iso))) return null; + return { at: new Date(iso), id: id.slice(0, 40) }; +} + +export async function GET(req: NextRequest) { + const user = await currentUser(); + if (!user) return NextResponse.json({ error: "Not signed in" }, { status: 401 }); + // SessionUser.role is the database enum ("ADMIN"), not the snapshot's display form ("Admin"). + if (user.role !== "ADMIN") return NextResponse.json({ error: "Admin only" }, { status: 403 }); + + const cursor = readCursor(req.nextUrl.searchParams.get("before")); + + const rows = await prisma.auditEvent.findMany({ + where: { + facilityId: user.facilityId, + // Everything strictly older, plus the rest of the millisecond we stopped in the middle of. + ...(cursor ? { OR: [{ at: { lt: cursor.at } }, { at: cursor.at, id: { lt: cursor.id } }] } : {}), + }, + orderBy: [{ at: "desc" }, { id: "desc" }], + take: PAGE + 1, + select: { id: true, at: true, userName: true, op: true, target: true }, + }); + + const more = rows.length > PAGE; + const page = rows.slice(0, PAGE); + const last = page[page.length - 1]; + return NextResponse.json({ + events: page.map((r) => ({ id: r.id, at: r.at.toISOString(), who: r.userName, op: r.op, target: r.target })), + nextBefore: more && last ? `${last.at.toISOString()}|${last.id}` : null, + }); +} diff --git a/app/api/app-info/route.ts b/app/api/app-info/route.ts new file mode 100644 index 0000000..a9ca6e9 --- /dev/null +++ b/app/api/app-info/route.ts @@ -0,0 +1,29 @@ +import { NextResponse } from "next/server"; +import { readFileSync } from "fs"; +import path from "path"; +import { COMMUNITY } from "@/lib/edition"; + +export const dynamic = "force-dynamic"; + +/* What the Android apps ask a server before they will point at it. + * + * The apps open threadcount.tech unless told otherwise; a room running the Community edition types + * its own address into the app's first screen, and the app calls this first. It proves the address + * is a ThreadCount server (not a look-alike, not a typo), says which edition and build, and carries + * the oldest app version this build still works with, so an app can say "update me" instead of + * breaking quietly. Public and unauthenticated on purpose: nothing here is about a facility. */ +function version(): string { + try { return readFileSync(path.join(process.cwd(), "COMMUNITY_VERSION"), "utf8").trim(); } catch { /* hosted: no file */ } + return process.env.NEXT_PUBLIC_RELEASE || "hosted"; +} + +export async function GET() { + return NextResponse.json({ + product: "threadcount", + edition: COMMUNITY ? "community" : "hosted", + version: version(), + paths: { counter: "/m", staff: "/my" }, + // The oldest Play versionCode of each app this server still serves correctly. + minApp: { counter: 9, staff: 7 }, + }, { headers: { "cache-control": "no-store", "access-control-allow-origin": "*" } }); +} diff --git a/app/api/auth/2fa/route.ts b/app/api/auth/2fa/route.ts new file mode 100644 index 0000000..c812b13 --- /dev/null +++ b/app/api/auth/2fa/route.ts @@ -0,0 +1,74 @@ +import { NextRequest, NextResponse } from "next/server"; +import { prisma } from "@/lib/db"; +import { pwVersion, setSessionCookie } from "@/lib/session"; +import { sameOriginJson } from "@/lib/csrf"; +import { allow, clientIp } from "@/lib/ratelimit"; +import { decryptSecret, hashRecoveryCode, totpVerify } from "@/lib/totp"; +import { readTicket } from "@/lib/twofactor"; +import { recordAuthEvent } from "@/lib/audit"; + +export const dynamic = "force-dynamic"; + +/* Second step of sign-in: the code from the authenticator, or one recovery code. + * + * Rate limited hard. A six-digit code is one in a million per guess, which is only meaningful if + * guessing is expensive — unthrottled, a million tries is minutes of work. */ +export async function POST(req: NextRequest) { + const csrf = sameOriginJson(req); + if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + + const ip = clientIp(req.headers); + let body: { ticket?: unknown; code?: unknown }; + try { body = await req.json(); } catch { return NextResponse.json({ error: "Bad request" }, { status: 400 }); } + + const t = readTicket(String(body.ticket ?? "")); + if (!t) return NextResponse.json({ error: "That sign-in has expired. Start again." }, { status: 400 }); + + // Per account and per address: one stolen ticket can't be brute-forced, and one machine can't + // work through several accounts at once. + if (!allow("2fa-user:" + t.uid, 10, 15 * 60 * 1000) || !allow("2fa-ip:" + ip, 300, 15 * 60 * 1000)) { + return NextResponse.json({ error: "Too many attempts — try again in a few minutes." }, { status: 429 }); + } + + const u = await prisma.user.findUnique({ + where: { id: t.uid }, + select: { id: true, facilityId: true, email: true, first: true, last: true, role: true, inactive: true, passwordHash: true, totpSecret: true, totpEnabledAt: true }, + }); + if (!u || u.inactive || !u.totpEnabledAt) { + return NextResponse.json({ error: "That sign-in has expired. Start again." }, { status: 400 }); + } + // The password changed between the two steps — the ticket is stale for the same reason a session + // would be. + if (pwVersion(u.passwordHash) !== t.pv) { + return NextResponse.json({ error: "That sign-in has expired. Start again." }, { status: 400 }); + } + + const raw = String(body.code ?? "").trim(); + const secret = decryptSecret(u.totpSecret); + let good = !!secret && totpVerify(secret, raw); + let usedRecovery = false; + + if (!good && raw.replace(/[^A-Za-z0-9]/g, "").length >= 10) { + // A recovery code. Single use: consumed in the same conditional update that finds it, so two + // simultaneous attempts can't both spend it. + const hash = hashRecoveryCode(raw); + const hit = await prisma.recoveryCode.findFirst({ where: { userId: u.id, codeHash: hash, usedAt: null }, select: { id: true } }); + if (hit) { + const consumed = await prisma.recoveryCode.updateMany({ where: { id: hit.id, usedAt: null }, data: { usedAt: new Date() } }); + good = consumed.count === 1; + usedRecovery = good; + } + } + + if (!good) return NextResponse.json({ error: "That code isn't right. Try the current one from your app." }, { status: 401 }); + + await setSessionCookie(u.id, u.passwordHash); + // How they got in matters more here than anywhere else: a recovery code means the phone is gone, + // and a run of them means something else is going on. + recordAuthEvent( + { facilityId: u.facilityId, userId: u.id, userName: `${u.first} ${u.last}`.trim() || u.email }, + "auth:signin", ip, usedRecovery ? "recovery" : "totp", + ); + const left = await prisma.recoveryCode.count({ where: { userId: u.id, usedAt: null } }); + return NextResponse.json({ ok: true, name: `${u.first} ${u.last}`, role: u.role, usedRecovery, recoveryLeft: left }); +} diff --git a/app/api/auth/forgot/route.ts b/app/api/auth/forgot/route.ts new file mode 100644 index 0000000..da37138 --- /dev/null +++ b/app/api/auth/forgot/route.ts @@ -0,0 +1,80 @@ +import { NextRequest, NextResponse } from "next/server"; +import { prisma } from "@/lib/db"; +import { allow, clientIp, fail, over } from "@/lib/ratelimit"; +import { sameOriginJson } from "@/lib/csrf"; +import { verifyTurnstile } from "@/lib/turnstile"; +import { sendTo, transactionalConfigured } from "@/lib/mail"; +import { RESET_TTL_MS, newResetToken, resetEmail, resetUrl } from "@/lib/reset"; + +export const dynamic = "force-dynamic"; + +/* Request a password reset. + * + * Before this existed a facility whose only admin forgot their password was locked out for good — + * the sign-in screen told them to ask an admin, and they were the admin. Deleting the last admin + * deletes the whole facility, so there was no way back in at all. + * + * The response is identical whether or not the address has an account. Anything else turns this + * into a way to ask "does this hospital use ThreadCount, and is this person a coordinator there?" + */ +export async function POST(req: NextRequest) { + const csrf = sameOriginJson(req); + if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + + const ip = clientIp(req.headers); + let body: { email?: unknown; cfToken?: unknown }; + try { body = await req.json(); } catch { return NextResponse.json({ error: "Bad request" }, { status: 400 }); } + const email = String(body.email ?? "").trim().toLowerCase().slice(0, 160); + + // A slow ceiling per IP, so one machine can't walk a staff list to find out which addresses exist + // by watching how long each request takes. The per-address ceiling deliberately lives further + // down, past the bot check — see the note beside it. + if (!allow("forgot-ip:" + ip, 60, 60 * 60 * 1000)) { + return NextResponse.json({ ok: true }); + } + + const cfErr = await verifyTurnstile(body.cfToken, ip); + if (cfErr) return NextResponse.json({ error: cfErr }, { status: 400 }); + + if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) return NextResponse.json({ ok: true }); + + const user = await prisma.user.findUnique({ where: { email }, select: { id: true, first: true, inactive: true, ssoBreakGlass: true, facility: { select: { ssoRequired: true } } } }); + // A facility that requires single sign-on has no password door for most of its people, so a + // reset link would be a way round its identity provider. Break-glass admins keep theirs. The + // answer to the caller is the same either way. + const ssoOnly = !!user && user.facility.ssoRequired && !user.ssoBreakGlass; + if (user && !user.inactive && !ssoOnly) { + // The per-address ceiling counts mail actually sent, not requests received, and it is only + // consulted once the bot check has passed. Spent on requests, it handed a stranger a way to + // hold a facility's only coordinator out of their own account: four anonymous posts with no + // Turnstile token filled the bucket, and every later attempt by the coordinator was answered + // with "a reset link is on its way" and no mail. Counted this way the only way to exhaust the + // budget is to have four reset mails delivered to that same inbox, so whoever forgot their + // password always has a working link waiting for them. + const mailKey = "forgot-email:" + email; + if (over(mailKey, 4, 60 * 60 * 1000)) { + console.warn("[forgot] four reset mails already sent this hour — suppressing another for user", user.id); + } else { + const { token, tokenHash } = newResetToken(); + await prisma.$transaction(async (tx) => { + // Asking again supersedes anything outstanding, so a forwarded older email goes dead. + await tx.passwordReset.updateMany({ + where: { userId: user.id, usedAt: null }, + data: { usedAt: new Date() }, + }); + await tx.passwordReset.create({ + data: { userId: user.id, tokenHash, expiresAt: new Date(Date.now() + RESET_TTL_MS), requestIp: ip }, + }); + }); + const { subject, text } = resetEmail(user.first, resetUrl(token)); + const sent = await sendTo(email, subject, text); + // Only a mail that left the building counts. A send that failed gave the coordinator nothing, + // so charging them for it would shut them out for an hour over a mail outage. + if (sent) fail(mailKey, 60 * 60 * 1000); + else console.error("[forgot] reset requested but mail could not be sent for user", user.id); + } + } + + // Told to the caller regardless, so the answer carries no information about the address. + return NextResponse.json({ ok: true, mail: transactionalConfigured() }); +} diff --git a/app/api/auth/login/route.ts b/app/api/auth/login/route.ts new file mode 100644 index 0000000..f77cf8e --- /dev/null +++ b/app/api/auth/login/route.ts @@ -0,0 +1,100 @@ +import { NextRequest, NextResponse } from "next/server"; +import bcrypt from "bcryptjs"; +import { prisma } from "@/lib/db"; +import { pwVersion, setSessionCookie } from "@/lib/session"; +import { mintTicket } from "@/lib/twofactor"; +import { sameOriginJson } from "@/lib/csrf"; +import { clientIp, fail, over } from "@/lib/ratelimit"; +import { signInStaff } from "@/lib/staffauth"; +import { verifyTurnstile } from "@/lib/turnstile"; +import { recordAuthEvent } from "@/lib/audit"; + +export const dynamic = "force-dynamic"; + +// Simple in-memory throttle per IP+email (per process). +const attempts = new Map(); + +/** The trail names the person, not the address they typed — see lib/audit.ts. */ +const actorFor = (u: { id: string; facilityId: string; first: string; last: string; email: string }) => + ({ facilityId: u.facilityId, userId: u.id, userName: `${u.first} ${u.last}`.trim() || u.email }); + +export async function POST(req: NextRequest) { + const csrf = sameOriginJson(req); if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + let body: { email?: string; password?: string; cfToken?: string }; + try { body = await req.json(); } catch { return NextResponse.json({ error: "Bad request" }, { status: 400 }); } + const email = String(body.email || "").trim().toLowerCase().slice(0, 160); + const password = String(body.password || "").slice(0, 200); + // Spray protection independent of the per-(ip,email) counter below. Both buckets count only the + // attempts that FAILED — a whole hospital signs in from one NAT address at shift change, and a + // ceiling on attempts would have to lock that ward out to be worth anything against an attacker. + const ipKey = clientIp(req.headers); + if (over("login-ip:" + ipKey, 40, 15 * 60 * 1000) || (email && over("login-email:" + email, 25, 15 * 60 * 1000))) return NextResponse.json({ error: "Too many attempts — try again in 15 minutes." }, { status: 429 }); + if (!email || !password) return NextResponse.json({ error: "Enter your email and password." }, { status: 400 }); + + // nginx appends the real client IP last; earlier entries are client-supplied and spoofable. + const xff = req.headers.get("x-forwarded-for")?.split(",").map((x) => x.trim()).filter(Boolean) || []; + const ip = xff[xff.length - 1] || "local"; + if (attempts.size > 5000) for (const [kk, v] of attempts) if (Date.now() - v.t > 15 * 60 * 1000) attempts.delete(kk); + const k = `${ip}|${email}`; + const a = attempts.get(k); + if (a && a.n >= 8 && Date.now() - a.t < 15 * 60 * 1000) return NextResponse.json({ error: "Too many attempts — try again in 15 minutes." }, { status: 429 }); + + const cfErr = await verifyTurnstile(body.cfToken, ipKey); if (cfErr) return NextResponse.json({ error: cfErr }, { status: 400 }); + const u = await prisma.user.findUnique({ where: { email } }); + /* One box, both kinds of account. + * + * A wearer reaches the product the way anyone else does — the home page, then Log in — and types + * the details they set up in the staff app. So when this address has no coordinator account, the + * register is asked before the answer is called wrong. + * + * A coordinator account always wins: it is the one with the counter, the orders and the register + * behind it, and a coordinator who also wears a uniform can open their own record from inside the + * app. One address therefore has one destination, every time. + * + * This is a lookup, not a second attempt. "Try the coordinator, and if that fails try the staff + * one" would score a failure against every single staff sign-in, and these ceilings count + * failures — behind one hospital's NAT address at shift change that is a locked-out ward. + */ + if (!u) { + const s = await signInStaff(email, password, ipKey, false); + if (s.kind === "ok") return NextResponse.json({ ok: true, name: s.name, staff: true }); + if (s.kind === "error") return NextResponse.json({ error: s.error }, { status: s.status }); + // `none`: no staff account either, so this falls through to the answer below, which counts the + // failure once and says the same thing it has always said. + } + const ok = u ? await bcrypt.compare(password, u.passwordHash) : await bcrypt.compare(password, "$2b$12$C6UzMDM.H6dfI/f/IKcEeO5x3FvDS3kqB6r0Jt3g7Lz0vX4o0JZ1u"); + if (!u || !ok) { + attempts.set(k, { n: (a && Date.now() - a.t < 15 * 60 * 1000 ? a.n : 0) + 1, t: Date.now() }); + fail("login-ip:" + ipKey, 15 * 60 * 1000); + if (email) fail("login-email:" + email, 15 * 60 * 1000); + // An address with no account here is recorded nowhere: there is no facility to file it under, + // and a log of attempts on addresses that don't exist would be a list of other people's email + // addresses that nobody asked us to keep. + if (u) recordAuthEvent(actorFor(u), "auth:signin.failed", ipKey); + return NextResponse.json({ error: "Email or password doesn’t match." }, { status: 401 }); + } + attempts.delete(k); + if (u.inactive) { + // The right password on an account that has been taken away is worth knowing about. + recordAuthEvent(actorFor(u), "auth:signin.refused", ipKey, "inactive"); + return NextResponse.json({ error: "This account has been deactivated. Ask an admin at your facility to reactivate it." }, { status: 403 }); + } + const fac = await prisma.facility.findUnique({ where: { id: u.facilityId }, select: { isDemo: true, ssoEnabled: true, ssoRequired: true } }); + if (fac?.isDemo) return NextResponse.json({ error: "Demo accounts can’t log in here — open the demo from the home page." }, { status: 403 }); + // The facility has decided its people sign in through its own identity provider. The password + // was right, and it is still refused — except for the admin the facility keeps as its fire + // escape. The box sends them on to single sign-on rather than reporting a failure. + if (fac?.ssoEnabled && fac.ssoRequired && !u.ssoBreakGlass) { + recordAuthEvent(actorFor(u), "auth:signin.refused", ipKey, "sso required"); + return NextResponse.json({ error: "Your facility signs in with single sign-on.", ssoRequired: true }, { status: 403 }); + } + // With a second factor on the account the password alone opens nothing. The ticket says only + // "this password was correct", is accepted by no other endpoint, and expires in five minutes. + if (u.totpEnabledAt) { + return NextResponse.json({ need2fa: true, ticket: mintTicket(u.id, pwVersion(u.passwordHash)) }); + } + + await setSessionCookie(u.id, u.passwordHash); + recordAuthEvent(actorFor(u), "auth:signin", ipKey, "password"); + return NextResponse.json({ ok: true, name: `${u.first} ${u.last}`, role: u.role }); +} diff --git a/app/api/auth/logout/route.ts b/app/api/auth/logout/route.ts new file mode 100644 index 0000000..4ced033 --- /dev/null +++ b/app/api/auth/logout/route.ts @@ -0,0 +1,22 @@ +import { NextRequest, NextResponse } from "next/server"; +import { clearSessionCookie, currentUser } from "@/lib/session"; +import { sameOriginJson } from "@/lib/csrf"; +import { clientIp } from "@/lib/ratelimit"; +import { recordAuthEvent } from "@/lib/audit"; + +export const dynamic = "force-dynamic"; + +export async function POST(req: NextRequest) { + const csrf = sameOriginJson(req, false); if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + // Read the session before dropping it, so the trail can say who left. An unauthenticated call + // still clears the cookie and still answers ok — signing out must never fail. + const user = await currentUser(); + await clearSessionCookie(); + if (user) { + recordAuthEvent( + { facilityId: user.facilityId, userId: user.id, userName: `${user.first} ${user.last}`.trim() || user.email }, + "auth:signout", clientIp(req.headers), + ); + } + return NextResponse.json({ ok: true }); +} diff --git a/app/api/auth/reset/route.ts b/app/api/auth/reset/route.ts new file mode 100644 index 0000000..dc6cd24 --- /dev/null +++ b/app/api/auth/reset/route.ts @@ -0,0 +1,96 @@ +import { NextRequest, NextResponse } from "next/server"; +import bcrypt from "bcryptjs"; +import { prisma } from "@/lib/db"; +import { allow, clientIp } from "@/lib/ratelimit"; +import { sameOriginJson } from "@/lib/csrf"; +import { pwVersion, setSessionCookie } from "@/lib/session"; +import { mintTicket } from "@/lib/twofactor"; +import { hashResetToken } from "@/lib/reset"; +import { recordAuthEvent } from "@/lib/audit"; + +export const dynamic = "force-dynamic"; + +const MIN_PASSWORD = 8; + +/* Complete a password reset. + * + * Changing the hash invalidates every existing session for that user on its own — the session + * cookie carries a version derived from the password hash — so a reset also kicks out whoever + * prompted it, which is the behaviour you want if the reason was a shared or stolen password. */ +export async function POST(req: NextRequest) { + const csrf = sameOriginJson(req); + if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + + const ip = clientIp(req.headers); + if (!allow("reset-ip:" + ip, 100, 60 * 60 * 1000)) { + return NextResponse.json({ error: "Too many attempts — try again later." }, { status: 429 }); + } + + let body: { token?: unknown; password?: unknown }; + try { body = await req.json(); } catch { return NextResponse.json({ error: "Bad request" }, { status: 400 }); } + const token = String(body.token ?? "").trim().slice(0, 400); + const password = String(body.password ?? ""); + + if (!token) return NextResponse.json({ error: "That link is incomplete. Ask for a new one." }, { status: 400 }); + if (password.length < MIN_PASSWORD) { + return NextResponse.json({ error: `Use at least ${MIN_PASSWORD} characters.` }, { status: 400 }); + } + + // Looked up by hash, so the raw token never has to be compared against stored material. + const row = await prisma.passwordReset.findUnique({ + where: { tokenHash: hashResetToken(token) }, + select: { + id: true, userId: true, expiresAt: true, usedAt: true, + user: { select: { inactive: true, passwordHash: true, totpEnabledAt: true, facilityId: true, first: true, last: true, email: true } }, + }, + }); + + const dead = !row || row.usedAt || row.expiresAt.getTime() < Date.now() || row.user.inactive; + if (dead) { + return NextResponse.json({ error: "That link has expired or has already been used. Ask for a new one." }, { status: 400 }); + } + + const hash = await bcrypt.hash(password, 12); + await prisma.$transaction(async (tx) => { + // Consume the token in the same write as the password change, so a double submit can't set the + // password twice or leave a live token behind. + const consumed = await tx.passwordReset.updateMany({ + where: { id: row.id, usedAt: null }, + data: { usedAt: new Date() }, + }); + if (consumed.count !== 1) throw new Error("token already consumed"); + await tx.user.update({ where: { id: row.userId }, data: { passwordHash: hash } }); + // Any other outstanding requests for this account die with it. + await tx.passwordReset.updateMany({ where: { userId: row.userId, usedAt: null }, data: { usedAt: new Date() } }); + }).catch(() => null); + + const fresh = await prisma.user.findUnique({ where: { id: row.userId }, select: { passwordHash: true } }); + if (!fresh || fresh.passwordHash !== hash) { + return NextResponse.json({ error: "That link has expired or has already been used. Ask for a new one." }, { status: 400 }); + } + + const actor = { + facilityId: row.user.facilityId, + userId: row.userId, + userName: [row.user.first, row.user.last].filter(Boolean).join(" ").trim() || row.user.email, + }; + + // A second factor is a second factor here too. Control of the mailbox is one proof, and on an + // account with TOTP the front door refuses to open on one proof — so this door must not either, + // or resetting the password would be the supported way around the authenticator, and the new + // password would then be enough to turn it off for good. + // + // The same five-minute ticket the sign-in screen uses, accepted by the same endpoint: nothing new + // to keep, nothing new to get wrong. + if (row.user.totpEnabledAt) { + recordAuthEvent(actor, "auth:password.reset", ip, "email-link"); + return NextResponse.json({ need2fa: true, ticket: mintTicket(row.userId, pwVersion(hash)) }); + } + + // Otherwise sign them straight in: they have just proven control of the mailbox and chosen a + // password, and making them type it again immediately is friction with no security value. + await setSessionCookie(row.userId, hash); + recordAuthEvent(actor, "auth:password.reset", ip, "email-link"); + recordAuthEvent(actor, "auth:signin", ip, "reset"); + return NextResponse.json({ ok: true }); +} diff --git a/app/api/auth/signup/route.ts b/app/api/auth/signup/route.ts new file mode 100644 index 0000000..c1678a9 --- /dev/null +++ b/app/api/auth/signup/route.ts @@ -0,0 +1,93 @@ +import { NextRequest, NextResponse } from "next/server"; +import bcrypt from "bcryptjs"; +import { prisma } from "@/lib/db"; +import { setSessionCookie } from "@/lib/session"; +import { allow, clientIp } from "@/lib/ratelimit"; +import { sameOriginJson } from "@/lib/csrf"; +import { verifyTurnstile } from "@/lib/turnstile"; +import { sendTo, transactionalConfigured } from "@/lib/mail"; +import { switches } from "@/lib/switches"; +import { alertNewSignup } from "@/lib/ops/alerts"; +import { recordAuthEvent } from "@/lib/audit"; +import { TRIAL_DAYS } from "@/lib/plan"; + +export const dynamic = "force-dynamic"; + +/* Creating a facility. + * + * The address typed here is not verified, and deliberately isn't: a confirmation step in front of + * a linen room's first ten minutes is a wall, and a facility half-created behind an unclicked link + * is worse than one created. But it is the *only* way back in — /api/auth/forgot answers a + * stranger and the owner identically, so a typo produces no signal at all until the day the + * password is forgotten, and by then the facility is unreachable and undeletable. + * + * So the address is exercised immediately instead. A note goes to it saying, in as many words, + * that this is the address that recovers the account, and the answer here says whether it was + * sent — which is what lets the sign-up screen show the address back and tell someone who never + * receives it what to do about it while they are still signed in and can still act. + */ +function welcomeEmail(first: string, facility: string) { + const subject = "Your ThreadCount facility is set up"; + const text = [ + `Hi ${first || "there"},`, + "", + `${facility} is set up on ThreadCount, and this address is the coordinator account for it.`, + "", + "Keep this message. This is the address a password reset is sent to, and it is the only way", + "back into the facility if the password is forgotten — so if it is wrong, sign in and add a", + "second admin with an address that works, under Settings → Users.", + "", + `${process.env.NEXT_PUBLIC_SITE_URL || "https://threadcount.tech"}/app`, + "", + "— ThreadCount", + ].join("\n"); + return { subject, text }; +} + +export async function POST(req: NextRequest) { + const sw = await switches(); + if (!sw.signupsOpen) return NextResponse.json({ error: "New facility sign-ups are closed." }, { status: 403 }); + const csrf = sameOriginJson(req); if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + if (!allow("signup:" + clientIp(req.headers), 5, 60 * 60 * 1000)) return NextResponse.json({ error: "Too many sign-ups from this connection — try again later." }, { status: 429 }); + let b: Record; + try { b = await req.json(); } catch { return NextResponse.json({ error: "Bad request" }, { status: 400 }); } + const first = String(b.first || "").trim().slice(0, 80), last = String(b.last || "").trim().slice(0, 80); + const facility = String(b.facility || "").trim().slice(0, 120); + const email = String(b.email || "").trim().toLowerCase().slice(0, 160); + const password = String(b.password || ""); + if (!first || !last || !facility) return NextResponse.json({ error: "Name and facility are required." }, { status: 400 }); + if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) return NextResponse.json({ error: "Enter a valid work email." }, { status: 400 }); + if (password.length < 8) return NextResponse.json({ error: "Password must be at least 8 characters." }, { status: 400 }); + const cfErr = await verifyTurnstile(b.cfToken, clientIp(req.headers)); if (cfErr) return NextResponse.json({ error: cfErr }, { status: 400 }); + if (await prisma.user.findUnique({ where: { email } })) return NextResponse.json({ error: "That email already has an account — log in instead." }, { status: 409 }); + + const u = await prisma.$transaction(async (tx) => { + // No staff groups: the facility names its own. Any list handed over here would be one employer's + // organisation chart on another employer's register, and a group sitting on a route nobody + // chose decides who is handed a starting kit. Both route lists start empty with it, so until the + // coordinator puts a group on the FTE table or the starting kit, everybody is on manager approval + // and nobody has been promised a kit the counter would not hand over. + // Until plans are live the page still says free, so a facility created today is grandfathered: + // free with everything, for good. Once they are live a new room starts on the plan it chose — + // Hosted Small, free, or a Hosted Facility trial with its end date set now. Anything else + // sent as `plan` is Hosted Small: the free room is the safe misreading. + const trial = sw.plansLive && b.plan === "hosted_facility"; + const planData = !sw.plansLive + ? { grandfathered: true, planStatus: "free" } + : trial + ? { plan: "hosted_facility", planStatus: "trial", trialEndsAt: new Date(Date.now() + TRIAL_DAYS * 86_400_000) } + : { plan: "hosted_small", planStatus: "free" }; + const f = await tx.facility.create({ data: { name: facility, coordinator: `${first} ${last}`, ...planData } }); + return tx.user.create({ data: { facilityId: f.id, email, passwordHash: await bcrypt.hash(password, 12), first, last, title: "Uniform Coordinator", role: "ADMIN" } }); + }); + await setSessionCookie(u.id, u.passwordHash); + recordAuthEvent({ facilityId: u.facilityId, userId: u.id, userName: `${first} ${last}`.trim() || email }, "auth:signup", clientIp(req.headers)); + alertNewSignup({ id: u.facilityId, name: facility }); // the facility's name only — never the person + + const em = welcomeEmail(first, facility); + const mailed = await sendTo(email, em.subject, em.text); + if (!mailed && transactionalConfigured()) console.error("[signup] welcome mail could not be sent for user", u.id); + // `mailed` is false when no SMTP is configured at all, which is a different thing from a bad + // address — the screen says so rather than pretending the address has been proven. + return NextResponse.json({ ok: true, email, mailed, mail: transactionalConfigured() }); +} diff --git a/app/api/backup/route.ts b/app/api/backup/route.ts new file mode 100644 index 0000000..ba7409b --- /dev/null +++ b/app/api/backup/route.ts @@ -0,0 +1,25 @@ +import { NextResponse } from "next/server"; +import { currentUser } from "@/lib/session"; +import { prisma } from "@/lib/db"; +import { exportBackup } from "@/lib/ops"; +import { facilityToday } from "@/lib/compute"; + +export const dynamic = "force-dynamic"; + +export async function GET() { + const user = await currentUser(); + if (!user) return NextResponse.json({ error: "Not signed in" }, { status: 401 }); + if (user.role !== "ADMIN") return NextResponse.json({ error: "Admin only" }, { status: 403 }); + const data = await exportBackup(user); + // The date on the filename is the day where the linen room stands, not where the box is. It has + // to agree with the lastBackup stamp exportBackup writes against the same facility, or a room + // taking a backup at eight in the morning ends up with a file named for yesterday sitting beside + // a settings screen that says it was taken today. + const fac = await prisma.facility.findUniqueOrThrow({ where: { id: user.facilityId }, select: { timezone: true } }); + return new NextResponse(JSON.stringify(data, null, 1), { + headers: { + "content-type": "application/json; charset=utf-8", + "content-disposition": `attachment; filename="threadcount-backup-${facilityToday(fac.timezone)}.json"`, + }, + }); +} diff --git a/app/api/health/route.ts b/app/api/health/route.ts new file mode 100644 index 0000000..370f22e --- /dev/null +++ b/app/api/health/route.ts @@ -0,0 +1,26 @@ +import { NextResponse } from "next/server"; +import { prisma } from "@/lib/db"; + +export const dynamic = "force-dynamic"; + +/* Is this server actually able to do its job? + * + * The deploy probes /app, which proves the process is serving HTML — but /app renders a redirect to + * the sign-in page whether or not Prisma can reach the database, so the one failure that takes the + * whole product down is exactly the one that probe cannot see. This asks the database a question + * instead, and answers 503 when it cannot. + * + * No auth and no cache on purpose: it is watched continuously by an uptime monitor with no account, + * and it must never answer from a cached success. It is listed in proxy.ts's `publicApi` for the + * same reason. Nothing about the facility, the schema or the error is returned — a monitor needs a + * status code, and an unauthenticated caller is owed nothing more. + */ +export async function GET() { + try { + await prisma.$queryRaw`SELECT 1`; + return NextResponse.json({ ok: true }, { headers: { "cache-control": "no-store" } }); + } catch (e) { + console.error("[health] database unreachable:", (e as Error).message); + return NextResponse.json({ ok: false }, { status: 503, headers: { "cache-control": "no-store" } }); + } +} diff --git a/app/api/logo/route.ts b/app/api/logo/route.ts new file mode 100644 index 0000000..87caaf0 --- /dev/null +++ b/app/api/logo/route.ts @@ -0,0 +1,15 @@ +import { NextResponse } from "next/server"; +import { currentUser } from "@/lib/session"; +import { prisma } from "@/lib/db"; + +export const dynamic = "force-dynamic"; + +/** Serves the signed-in user's facility logo (stored as a data URL). */ +export async function GET() { + const user = await currentUser(); + if (!user) return new NextResponse(null, { status: 401 }); + const fac = await prisma.facility.findUnique({ where: { id: user.facilityId }, select: { logoData: true } }); + const m = /^data:(image\/(?:png|jpeg|jpg|gif|webp));base64,([A-Za-z0-9+/=]+)$/.exec(fac?.logoData || ""); + if (!m) return new NextResponse(null, { status: 404 }); + return new NextResponse(Buffer.from(m[2], "base64"), { headers: { "content-type": m[1], "cache-control": "private, no-cache", "x-content-type-options": "nosniff", "content-security-policy": "sandbox" } }); +} diff --git a/app/api/lookup/route.ts b/app/api/lookup/route.ts new file mode 100644 index 0000000..680fea1 --- /dev/null +++ b/app/api/lookup/route.ts @@ -0,0 +1,80 @@ +import { NextRequest, NextResponse } from "next/server"; +import { prisma } from "@/lib/db"; +import { currentUser } from "@/lib/session"; +import { allow } from "@/lib/ratelimit"; +import { gtinInfo } from "@/lib/compute"; + +export const dynamic = "force-dynamic"; + +export type LookupResult = { + code: string; + gtin: ReturnType; + enabled: boolean; // is public lookup turned on for this facility + found: boolean; + name?: string; + brand?: string; + category?: string; + source?: string; + note?: string; // why there's no result, in plain words +}; + +const TIMEOUT_MS = 4500; +const cache = new Map }>(); +const CACHE_MS = 12 * 60 * 60 * 1000; + +async function getJson(url: string): Promise { + const ac = new AbortController(); + const t = setTimeout(() => ac.abort(), TIMEOUT_MS); + try { + const r = await fetch(url, { signal: ac.signal, headers: { accept: "application/json", "user-agent": "ThreadCount/1.0 (uniform stock management)" }, cache: "no-store" }); + if (!r.ok) return null; + return await r.json(); + } catch { return null; } finally { clearTimeout(t); } +} + +/** UPCitemdb's keyless trial tier — small daily quota per server IP, so misses are expected. */ +async function upcItemDb(gtin: string) { + const j = await getJson(`https://api.upcitemdb.com/prod/trial/lookup?upc=${encodeURIComponent(gtin)}`) as { items?: { title?: string; brand?: string; category?: string }[] } | null; + const it = j?.items?.[0]; + if (!it?.title) return null; + return { name: String(it.title).slice(0, 160), brand: String(it.brand || "").slice(0, 80), category: String(it.category || "").slice(0, 80), source: "UPCitemdb" }; +} + +/** Open Products Facts — the non-food sibling of Open Food Facts; open data, no key. */ +async function openProductsFacts(gtin: string) { + const j = await getJson(`https://world.openproductsfacts.org/api/v2/product/${encodeURIComponent(gtin)}.json?fields=product_name,brands,categories`) as { status?: number; product?: { product_name?: string; brands?: string; categories?: string } } | null; + const pr = j?.product; + if (j?.status !== 1 || !pr?.product_name) return null; + return { name: String(pr.product_name).slice(0, 160), brand: String(pr.brands || "").slice(0, 80), category: String(pr.categories || "").slice(0, 80), source: "Open Products Facts" }; +} + +export async function GET(req: NextRequest) { + const user = await currentUser(); + if (!user) return NextResponse.json({ error: "Not signed in" }, { status: 401 }); + if (user.role !== "ADMIN") return NextResponse.json({ error: "Admin only" }, { status: 403 }); + + const gtin = gtinInfo(req.nextUrl.searchParams.get("code") || ""); + const base = { code: gtin.code, gtin, found: false } as LookupResult; + if (!gtin.code) return NextResponse.json({ ...base, enabled: false, note: "No barcode given." }); + + const fac = await prisma.facility.findUnique({ where: { id: user.facilityId }, select: { barcodeLookup: true } }); + const enabled = !!fac?.barcodeLookup; + if (!enabled) return NextResponse.json({ ...base, enabled: false, note: "Product lookup is off. Turn it on in Settings → Data if you want ThreadCount to ask a public barcode database for a name." }); + // Only real retail GTINs are worth sending anywhere; a mis-read or an in-house code never matches. + if (!gtin.valid || !["EAN-13", "UPC-A", "EAN-8", "GTIN-14"].includes(gtin.kind)) { + return NextResponse.json({ ...base, enabled, note: gtin.kind ? "The check digit doesn't match, so this wasn't looked up — scan it again." : "Not a standard retail barcode, so there's nothing to look up. Type the details in." }); + } + if (!allow("lookup:" + user.facilityId, 120, 60 * 60 * 1000)) return NextResponse.json({ ...base, enabled, note: "Too many lookups this hour — type the details in for now." }, { status: 429 }); + + const hit = cache.get(gtin.digits); + if (hit && Date.now() - hit.at < CACHE_MS) return NextResponse.json({ ...base, enabled, ...hit.v }); + + let found = await upcItemDb(gtin.digits); + if (!found) found = await openProductsFacts(gtin.digits); + const v = found + ? { found: true, ...found } + : { found: false, note: "No public listing for this barcode — normal for workwear and hospital uniforms. Type the details in once and the barcode stays bound." }; + cache.set(gtin.digits, { at: Date.now(), v }); + if (cache.size > 500) for (const k of [...cache.keys()].slice(0, 100)) cache.delete(k); + return NextResponse.json({ ...base, enabled, ...v }); +} diff --git a/app/api/mutate/route.ts b/app/api/mutate/route.ts new file mode 100644 index 0000000..1ae07a6 --- /dev/null +++ b/app/api/mutate/route.ts @@ -0,0 +1,40 @@ +import { NextRequest, NextResponse } from "next/server"; +import { currentUser } from "@/lib/session"; +import { OpError, bumpRev, demoGuard, restoreBackup, runOp } from "@/lib/ops"; +import { sameOriginJson } from "@/lib/csrf"; +import { allow, clientIp } from "@/lib/ratelimit"; +import { recordAudit } from "@/lib/audit"; +import { report } from "@/lib/glitchtip"; + +export const dynamic = "force-dynamic"; + +export async function POST(req: NextRequest) { + const user = await currentUser(); + if (!user) return NextResponse.json({ error: "Not signed in" }, { status: 401 }); + const csrf = sameOriginJson(req); if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + if (parseInt(req.headers.get("content-length") || "0", 10) > 60 * 1024 * 1024) return NextResponse.json({ error: "Request too large" }, { status: 413 }); + let body: { op?: string; payload?: unknown }; + try { body = await req.json(); } catch { return NextResponse.json({ error: "Bad JSON" }, { status: 400 }); } + const op = String(body.op || ""); + if (!allow("mutate:" + user.id, 600, 60 * 1000)) return NextResponse.json({ error: "Slow down — too many changes in a minute." }, { status: 429 }); + if (op === "photo.put" && !allow("photo:" + user.facilityId, 120, 60 * 60 * 1000)) return NextResponse.json({ error: "Photo limit reached for this hour." }, { status: 429 }); + if ((op === "backup.restore" || op === "import.rows") && !allow("bulk:" + user.id, 20, 10 * 60 * 1000)) return NextResponse.json({ error: "Too many imports — wait a few minutes." }, { status: 429 }); + try { + if (op === "backup.restore") demoGuard(user, op); + const result = op === "backup.restore" ? await restoreBackup(user, body.payload) : await runOp(user, op, body.payload); + // Only after it actually succeeded, and only from here: every one of the 57 ops passes through + // this one function, so the trail can't be forgotten in a new case branch later. + recordAudit(user, op, body.payload, clientIp(req.headers)); + // Handed back so the screen that made this change does not bounce again when it next polls. + const rev = await bumpRev(user.facilityId); + return NextResponse.json({ ok: true, result, rev }); + } catch (e) { + if (e instanceof OpError) return NextResponse.json({ error: e.message }, { status: e.status }); + // Reported from here, not from instrumentation.ts: onRequestError only sees what Next itself + // catches, and an exception caught in this handler never reaches it. Every write in the product + // comes through this line, so without it the whole write path fails invisibly. + report({ error: e, where: "server", url: "/api/mutate", tags: { op } }); + console.error(`[mutate ${op}]`, e); + return NextResponse.json({ error: "Something went wrong — nothing was saved." }, { status: 500 }); + } +} diff --git a/app/api/photo/[id]/route.ts b/app/api/photo/[id]/route.ts new file mode 100644 index 0000000..ea7f060 --- /dev/null +++ b/app/api/photo/[id]/route.ts @@ -0,0 +1,46 @@ +import { NextRequest, NextResponse } from "next/server"; +import { prisma } from "@/lib/db"; +import { currentUser } from "@/lib/session"; +import { parseDataUrl, readPhoto } from "@/lib/photostore"; + +export const dynamic = "force-dynamic"; + +/* Serves a stored capture or signature to a signed-in user of the same facility. + * + * Images live on disk now; rows written before that move still carry a base64 data URL, so both + * are handled and old records keep working without a flag day. */ +export async function GET(_req: NextRequest, ctx: { params: Promise<{ id: string }> }) { + const user = await currentUser(); + if (!user) return NextResponse.json({ error: "Not signed in" }, { status: 401 }); + const { id } = await ctx.params; + + // Scoped by facility in the query: a photo id from another room is simply not found. + const ph = await prisma.photo.findFirst({ + where: { id, facilityId: user.facilityId }, + select: { data: true, path: true, mime: true }, + }); + if (!ph) return NextResponse.json({ error: "Not found" }, { status: 404 }); + + let mime = ph.mime; + let bytes: Buffer | null = null; + + if (ph.path) { + bytes = await readPhoto(ph.path); + } else if (ph.data) { + const parsed = parseDataUrl(ph.data); + if (parsed) { mime = parsed.mime; bytes = parsed.bytes; } + } + + if (!bytes) return NextResponse.json({ error: "Not found" }, { status: 404 }); + if (!/^image\/(jpeg|png)$/.test(mime)) return NextResponse.json({ error: "Bad photo" }, { status: 500 }); + + return new NextResponse(new Uint8Array(bytes), { + headers: { + "content-type": mime, + "cache-control": "private, max-age=3600", + "content-disposition": "inline", + "x-content-type-options": "nosniff", + "content-security-policy": "sandbox", + }, + }); +} diff --git a/app/api/requests/route.ts b/app/api/requests/route.ts new file mode 100644 index 0000000..9898440 --- /dev/null +++ b/app/api/requests/route.ts @@ -0,0 +1,220 @@ +import { NextRequest, NextResponse } from "next/server"; +import { prisma } from "@/lib/db"; +import { currentUser } from "@/lib/session"; +import { bagLines, linesSummary, reqLines } from "@/lib/staffdata"; +import { decisionSummary, garmentCount } from "@/lib/staffreq"; + +export const dynamic = "force-dynamic"; + +/* The linen room's view of staff requests. + * + * Its own endpoint rather than part of the snapshot, for the same reason the audit trail is: this + * grows without limit, and putting it in the snapshot would make every page in the app heavier + * forever to serve one screen. + */ +export async function GET(req: NextRequest) { + const user = await currentUser(); + if (!user) return NextResponse.json({ error: "Not signed in" }, { status: 401 }); + + /* One person's requests, or the whole facility's. + * + * `?staff=` is how a staff record asks for its own order-form history. Without it that screen + * pulled the facility's last 400 requests — every line, message and event on each — and kept the + * handful belonging to one person, which is a large answer to a small question on a busy + * register. Worse, that person's older requests fell off the end of the 400 and simply were not + * on their record any more. Scoped, the ceiling is per person, and either way it is reported + * back so a screen can say it has been reached rather than ending a history without a word. + */ + const staffId = (req.nextUrl.searchParams.get("staff") || "").trim().slice(0, 64); + const requestLimit = staffId ? 200 : 400; + + // One more row than is returned, so "there are older ones than these" is something we know + // rather than something guessed from a full page. + const found = await prisma.request.findMany({ + where: { facilityId: user.facilityId, ...(staffId ? { subjectId: staffId } : {}) }, + orderBy: { createdAt: "desc" }, + take: requestLimit + 1, + include: { + lines: { include: { item: { select: { item: true, gender: true, sizes: true } } }, orderBy: { sort: "asc" } }, + subject: { select: { first: true, last: true, num: true, dept: true } }, + messages: { orderBy: { createdAt: "asc" }, select: { id: true, fromStaff: true, authorName: true, body: true, createdAt: true } }, + events: { orderBy: { at: "asc" }, select: { id: true, label: true, meta: true, actorName: true, at: true } }, + }, + }); + const requests = found.slice(0, requestLimit); + const moreRequests = found.length > requestLimit; + + const mapped = requests.map((r) => { + /* Every line, and separately the ones that are actually a pick. + * + * The linen room needs both. `lines` is the record — a declined fleece still belongs on the + * order the wearer will read — while `bag` is the work: what to take off the shelf, put in + * the bag and hand across the counter. Picking from `lines` would put a garment the manager + * refused into somebody's hands, so the two are never the same field. */ + const lines = reqLines(r.lines); + const bag = bagLines(lines); + return { + id: r.id, code: r.code, status: r.status, + staffId: r.subjectId, + staffName: `${r.subject.first} ${r.subject.last}`.trim(), + staffNum: r.subject.num, ward: r.subject.dept, + lines, bag, + summary: linesSummary(lines), garments: garmentCount(bag), lineCount: lines.length, + decision: decisionSummary(lines), + reason: r.reason, note: r.note, + managerName: r.managerName, + /* Who the approver is, not just how their name is spelled. A manager may now approve a + * request raised for herself, and the only thing that can show that happened is this id + * beside the subject's — the name on its own would have any screen comparing two spellings + * of the same person, which is precisely how a self-approval goes unnoticed. */ + managerId: r.managerId, + declineReason: r.declineReason, + route: r.route, collectCode: r.collectCode, holdUntil: r.holdUntil, + signerName: r.signerName, signerRole: r.signerRole, + signedAt: r.signedAt?.toISOString() ?? null, + claimedAt: r.claimedAt?.toISOString() ?? null, + /* Who raised it, and which person on the register that is. + * + * The name alone is not enough for the queue screen: it builds the list of people a stranded + * request can be handed to, and the one name certain to be refused is the person who raised + * it — a manager asking for one of her own reports' garments is exactly why the request + * escalated with nobody to approve it. Told only her name, the screen would have to match + * her by spelling against a ward where two people share one, which is how the wrong person + * drops out of a dropdown. + * + * Only the staff column, because only it can ever name somebody who could approve anything. + * A raise at the counter is stamped with the coordinator's own account instead, and a + * coordinator is not on the ward register at all; a wearer raising for herself is stamped + * with neither. Both arrive here as null, which is right — neither is a name this queue + * could offer. */ + raisedById: r.raisedByStaffId, + raisedByName: r.raisedByName, + createdAt: r.createdAt.toISOString(), + decidedAt: r.decidedAt?.toISOString() ?? null, + messages: r.messages.map((m) => ({ id: m.id, fromStaff: m.fromStaff, authorName: m.authorName, body: m.body, at: m.createdAt.toISOString() })), + events: r.events.map((e) => ({ id: e.id, label: e.label, meta: e.meta, actorName: e.actorName, at: e.at.toISOString() })), + }; + }); + + /* Everything below is the linen room's queue screen — open disputes, the kit check, the + * waitlist, damage nobody has handed back. A staff record asks for one person's order forms and + * reads none of it, so a scoped ask stops here instead of running four more facility-wide + * queries whose answers are thrown away. Those keys are absent from a scoped reply rather than + * empty: an empty list would read as "there are none", which nobody asked and nobody knows. */ + if (staffId) return NextResponse.json({ requests: mapped, requestLimit, moreRequests }); + + const [disputes, cycle, waiting, damage] = await Promise.all([ + prisma.recordDispute.findMany({ + where: { facilityId: user.facilityId, resolvedAt: null }, + orderBy: { createdAt: "desc" }, + take: 100, + include: { staff: { select: { first: true, last: true, num: true, dept: true } } }, + }), + prisma.kitCheck.findFirst({ + where: { facilityId: user.facilityId, closedAt: null }, + orderBy: { openedAt: "desc" }, + select: { id: true, dueBy: true, openedAt: true, openedBy: true, _count: { select: { answers: true } } }, + }), + prisma.waitlistEntry.findMany({ + where: { facilityId: user.facilityId, leftAt: null, acceptedAt: null }, + orderBy: { createdAt: "asc" }, + include: { + staff: { select: { first: true, last: true, num: true, dept: true } }, + item: { select: { item: true, sizes: true } }, + }, + }), + // Damage reports the counter has not yet taken the garment back for. Reporting damage and + // asking for a replacement are two separate acts in the staff app, so a report can arrive with + // no request behind it — and until this list existed nothing in the product ever showed one to + // anybody, which made the Damage screen's promise ("it comes off your record when you hand it + // in at the counter") a promise no screen could keep. + prisma.damageReport.findMany({ + where: { facilityId: user.facilityId, handedInAt: null }, + orderBy: { createdAt: "desc" }, + take: 100, + include: { + staff: { select: { first: true, last: true, num: true, dept: true } }, + issue: { select: { sizeIndex: true, item: { select: { item: true, sizes: true } } } }, + }, + }), + ]); + + /* What the open kit check has actually turned up. + * + * The cycle used to be reported to the linen room as a bare count of answers, which is the one + * thing about it that doesn't matter: nobody opens a kit check to find out how many people + * replied. The answers are the point — every one where somebody could not account for what the + * record says they hold — and until this query existed no screen, export or report in the + * product read them, so the whole cycle collected evidence into a table nothing looked at. + * + * Only the shortfalls, and only for the cycle still open. An answer that matches the record is + * the record agreeing with itself; a closed cycle is history and belongs with the rest of it. + */ + const answers = cycle + ? await prisma.kitCheckAnswer.findMany({ + where: { kitCheckId: cycle.id, confirmed: { lt: prisma.kitCheckAnswer.fields.onRecord } }, + orderBy: { answeredAt: "desc" }, + take: 400, + include: { + staff: { select: { id: true, first: true, last: true, num: true, dept: true } }, + item: { select: { item: true, sizes: true } }, + }, + }) + : []; + + // DamageReport.requestId is a plain column rather than a relation, so the replacement's code is + // looked up here. It is what the linen room actually needs: "torn, and she has asked for R-0042" + // is a different job from "torn, and she has not". + const replacementCodes = new Map(); + const replacementIds = damage.map((d) => d.requestId).filter((x): x is string => !!x); + if (replacementIds.length) { + const reps = await prisma.request.findMany({ + where: { facilityId: user.facilityId, id: { in: replacementIds } }, + select: { id: true, code: true }, + }); + for (const r of reps) replacementCodes.set(r.id, r.code); + } + + return NextResponse.json({ + requests: mapped, requestLimit, moreRequests, + disputes: disputes.map((d) => ({ + id: d.id, body: d.body, + staffName: `${d.staff.first} ${d.staff.last}`.trim(), + staffNum: d.staff.num, ward: d.staff.dept, + at: d.createdAt.toISOString(), + })), + cycle: cycle && { + id: cycle.id, dueBy: cycle.dueBy, openedBy: cycle.openedBy, + openedAt: cycle.openedAt.toISOString(), answers: cycle._count.answers, + }, + shortfalls: answers.map((a) => ({ + id: a.id, + staffId: a.staff.id, + staffName: `${a.staff.first} ${a.staff.last}`.trim(), + staffNum: a.staff.num, ward: a.staff.dept, + item: a.item.item, size: String(a.item.sizes[a.sizeIndex] ?? a.sizeIndex), + onRecord: a.onRecord, confirmed: a.confirmed, short: a.onRecord - a.confirmed, + at: a.answeredAt.toISOString(), + })), + waiting: waiting.map((w) => ({ + id: w.id, + staffName: `${w.staff.first} ${w.staff.last}`.trim(), + staffNum: w.staff.num, ward: w.staff.dept, + item: w.item.item, size: String(w.item.sizes[w.sizeIndex] ?? w.sizeIndex), + since: w.createdAt.toISOString(), + offeredAt: w.offeredAt?.toISOString() ?? null, + })), + damage: damage.map((d) => ({ + id: d.id, kind: d.kind, note: d.note, photoId: d.photoId, + staffId: d.staffId, + staffName: `${d.staff.first} ${d.staff.last}`.trim(), + staffNum: d.staff.num, ward: d.staff.dept, + // The garment comes off the Issue the report was raised against. That issue can be deleted + // (a wipe, a correction) and the column is SetNull, so an older report may name no garment. + item: d.issue ? d.issue.item.item : "", + size: d.issue ? String(d.issue.item.sizes[d.issue.sizeIndex] ?? d.issue.sizeIndex) : "", + requestCode: d.requestId ? replacementCodes.get(d.requestId) ?? "" : "", + at: d.createdAt.toISOString(), + })), + }); +} diff --git a/app/api/rev/route.ts b/app/api/rev/route.ts new file mode 100644 index 0000000..95a3819 --- /dev/null +++ b/app/api/rev/route.ts @@ -0,0 +1,37 @@ +import { NextRequest, NextResponse } from "next/server"; +import { prisma } from "@/lib/db"; +import { currentUser } from "@/lib/session"; +import { currentStaff } from "@/lib/staffsession"; + +export const dynamic = "force-dynamic"; + +/* "Has anything changed?", answered in one integer. + * + * Every screen in the product already knows how to reload itself — a mutation ends in + * router.refresh(). What it could not know was that somebody ELSE had changed something, so a + * phone left open on a ward showed whatever the catalogue looked like when it was opened, and a + * coordinator adding a garment at the desk had to tell the counter to pull down to refresh. + * + * The obvious fix — poll the snapshot and diff it — is the expensive one: that is the facility's + * catalogue, staff register, stock and history, re-read on a timer by every open device to learn, + * almost always, that nothing happened. This returns the counter that the three mutating routes + * bump, so the cost of asking is a primary-key lookup, and the cost of the real reload is paid only + * when the number has actually moved. + * + * Both session kinds answer here. A coordinator at the desk and a wearer on a ward are watching the + * same facility, and there is nothing in a bare revision number to keep apart — it says that + * something changed, never what. Anyone with no session at all gets 401 rather than a number, + * because even "this facility is busy" is not ours to hand out. + */ +export async function GET(_req: NextRequest) { + const user = await currentUser(); + const facilityId = user?.facilityId || (await currentStaff())?.facilityId; + if (!facilityId) return NextResponse.json({ error: "Not signed in" }, { status: 401 }); + + const f = await prisma.facility.findUnique({ where: { id: facilityId }, select: { rev: true } }); + if (!f) return NextResponse.json({ error: "Not signed in" }, { status: 401 }); + + // Never from a cache: a stale revision is indistinguishable from nothing having happened, which + // is the one wrong answer this endpoint can give. + return NextResponse.json({ rev: f.rev }, { headers: { "cache-control": "no-store" } }); +} diff --git a/app/api/staff/activate/route.ts b/app/api/staff/activate/route.ts new file mode 100644 index 0000000..87adbe5 --- /dev/null +++ b/app/api/staff/activate/route.ts @@ -0,0 +1,132 @@ +import { NextRequest, NextResponse } from "next/server"; +import bcrypt from "bcryptjs"; +import { prisma } from "@/lib/db"; +import { sameOriginJson } from "@/lib/csrf"; +import { allow, clientIp } from "@/lib/ratelimit"; +import { normaliseCode, setStaffCookie } from "@/lib/staffsession"; +import { verifyTurnstile } from "@/lib/turnstile"; +import { recordAuthEvent } from "@/lib/audit"; +import { bumpRev } from "@/lib/ops"; +import { SLIP_DAYS, facilityToday, slipLive } from "@/lib/compute"; + +export const dynamic = "force-dynamic"; + +const MIN_PW = 8; + +/* Claiming your own record with the code the linen room printed for you. + * + * The code alone identifies the person, because it is presented before we know anything about them + * — there is no facility to scope it to and no email to look up yet. That is why it is globally + * unique, why it is 58 bits wide, and why this route is throttled to the point where working + * through the space is not a strategy. + * + * It is spent in the same update that finds it, so two people racing the same slip can't both + * claim the record; the loser gets the ordinary "code isn't right" message. + * + * It also goes stale on its own after fourteen days, because the far more likely way a slip is + * misused is not a guessed code but a printed one nobody ever collected. + */ +export async function POST(req: NextRequest) { + const csrf = sameOriginJson(req); + if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + + const ip = clientIp(req.headers); + if (!allow("staff-activate:" + ip, 200, 15 * 60 * 1000)) { + return NextResponse.json({ error: "Too many attempts — try again in 15 minutes." }, { status: 429 }); + } + + let body: { code?: unknown; email?: unknown; password?: unknown; cfToken?: unknown; agreed?: unknown }; + try { body = await req.json(); } catch { return NextResponse.json({ error: "Bad request" }, { status: 400 }); } + + const code = normaliseCode(String(body.code ?? "")); + const email = String(body.email ?? "").trim().toLowerCase().slice(0, 160); + const password = String(body.password ?? "").slice(0, 200); + + if (!code) return NextResponse.json({ error: "That code isn't right. It's twelve characters, in three groups." }, { status: 400 }); + if (!/^[^@\s]+@[^@\s.]+\.[^@\s]+$/.test(email)) return NextResponse.json({ error: "Enter an email address you can get to." }, { status: 400 }); + if (password.length < MIN_PW) return NextResponse.json({ error: `Use at least ${MIN_PW} characters for your password.` }, { status: 400 }); + // The agreement is collected where the account is created. The screen's tick is what sets it, + // and the door checks it too so a client that skips the box gets the same answer. + if (body.agreed !== true) return NextResponse.json({ error: "Tick the box to agree to the terms of use and privacy policy." }, { status: 400 }); + + // Checked before the code is looked up, so a bot working through the code space is stopped by + // Cloudflare rather than by the per-IP throttle alone. + const cfErr = await verifyTurnstile(body.cfToken, ip); + if (cfErr) return NextResponse.json({ error: cfErr }, { status: 400 }); + + const staff = await prisma.staff.findUnique({ + where: { activateCode: code }, + select: { id: true, facilityId: true, first: true, last: true, inactive: true, activateCodeAt: true, account: { select: { id: true } }, facility: { select: { timezone: true } } }, + }); + // One message for every way this can fail, so the response can't be used to tell a real code from + // a spent one. + const nope = () => NextResponse.json({ error: "That code isn't right, or it has already been used. Ask the linen room for a new one." }, { status: 400 }); + if (!staff || staff.inactive || staff.account) return nope(); + + /* An old slip is refused whether or not anyone ever claimed it. It is a bearer token on paper: + * whoever picks one out of a folder months later can bind their own email and password to this + * person's record and from then on be them — their issues, their requests, their signature on the + * ward round, and their approvals queue if they manage anyone. Fourteen days is long enough for + * someone on leave to come back to it and short enough that a forgotten one is dead by the time + * it turns up. + * + * An unstamped code counts as stale: its age is unknown, so it has to be assumed old. This leans + * on staff.selfCode in lib/ops.ts stamping activateCodeAt as it prints — if that stamp ever stops + * being written, every new slip is dead on arrival. + * + * This says plainly that the slip has expired rather than joining the deliberately vague message + * above. Landing here means the code was right, and a code is 58 bits behind a throttle and a + * Turnstile — so anyone who gets this far is holding a real slip and needs to be told that a + * reprint, not a retype, is the fix. + * + * The age is asked of slipLive() in lib/compute, the same test the staff register and the requests + * queue use to say whether a slip is still worth chasing, counted in whole days on the facility's + * own calendar. The day a coordinator's screen calls a slip expired is therefore the day this + * refuses it — never a few hours later, with a nurse who was told it was dead finding it still + * works, or one who was told it was fine being turned away. */ + const tz = staff.facility.timezone; + if (!slipLive(staff.activateCodeAt, facilityToday(tz), tz)) { + return NextResponse.json( + { error: `That code was printed ${SLIP_DAYS} or more days ago, so it has expired. Ask the linen room to print you a new slip.` }, + { status: 400 }, + ); + } + + // The email has to be free across staff accounts. Coordinator accounts live in a different table + // and a person may legitimately be both — a linen-room supervisor who also wears the uniform. + const taken = await prisma.staffAccount.findUnique({ where: { email }, select: { id: true } }); + if (taken) return NextResponse.json({ error: "That email is already on an account here. Sign in instead." }, { status: 400 }); + + const passwordHash = await bcrypt.hash(password, 12); + + // Spend the code first, conditionally. If it has gone in the meantime, nothing was created. + // The stamp goes with the code, so a spent row can't be read as a slip still waiting out there. + const spent = await prisma.staff.updateMany({ where: { id: staff.id, activateCode: code }, data: { activateCode: null, activateCodeAt: null } }); + if (spent.count !== 1) return nope(); + + let account; + try { + account = await prisma.staffAccount.create({ + data: { facilityId: staff.facilityId, staffId: staff.id, email, passwordHash }, + select: { id: true, passwordHash: true }, + }); + } catch { + // The code is gone but the account didn't happen — put the code back rather than stranding + // someone with a dead slip. The original print date goes back with it: a failed attempt is not + // a reprint and must not restart the fourteen days. + await prisma.staff.update({ where: { id: staff.id }, data: { activateCode: code, activateCodeAt: staff.activateCodeAt } }).catch(() => {}); + return NextResponse.json({ error: "That didn't work — try again." }, { status: 500 }); + } + + await setStaffCookie(account.id, account.passwordHash); + recordAuthEvent( + { facilityId: staff.facilityId, userId: staff.id, userName: `${staff.first} ${staff.last}`.trim() || email }, + "staff:activate", ip, + ); + // The fourth door that changes a facility's data, and the only one outside the three mutate + // routes. Without this the coordinator standing over the nurse while she activates keeps seeing + // "code outstanding" until some unrelated edit moves the revision, and reissues a code that + // can't be reissued. + await bumpRev(staff.facilityId); + return NextResponse.json({ ok: true, name: `${staff.first} ${staff.last}` }); +} diff --git a/app/api/staff/decide/route.ts b/app/api/staff/decide/route.ts new file mode 100644 index 0000000..1309061 --- /dev/null +++ b/app/api/staff/decide/route.ts @@ -0,0 +1,87 @@ +import { NextRequest, NextResponse } from "next/server"; +import { sameOriginJson } from "@/lib/csrf"; +import { allow, clientIp } from "@/lib/ratelimit"; +import { readApprovalToken } from "@/lib/approvallink"; +import { StaffOpError, decideRequest } from "@/lib/staffops"; +import { recordFor } from "@/lib/audit"; +import { bumpRev } from "@/lib/ops"; + +export const dynamic = "force-dynamic"; + +/* Deciding a request from the emailed link, without signing in. + * + * This is a POST and only a POST. The link in the email is a GET that renders /my/approve, and the + * decision is made from that page — because corporate mail scanners and link-preview crawlers + * fetch every URL in every message, and a GET that approved a uniform request would be approved by + * the mail gateway before the manager ever saw it. + * + * The decision itself is decideRequest()'s, not this route's. A request now carries a line per + * garment, and settling it means settling every line and then rolling the request up from them; + * an approval made here that moved only the request would leave every line `awaiting`, so the + * linen room's bag would come out empty and the wearer's order would show no decision at all. + * There is no room on this page for a garment-by-garment answer — there is no signed-in person to + * check one against — so it takes the whole-request shorthand, `approveAll`, which is the reason + * that argument exists. + * + * Single use falls out of the state machine rather than a table of spent tokens: decideRequest's + * update is conditional on the request still being `awaiting`, so the approve link and the decline + * link in the same email both stop working the moment either is used. + */ +export async function POST(req: NextRequest) { + const csrf = sameOriginJson(req); + if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + + const ip = clientIp(req.headers); + if (!allow("staff-decide:" + ip, 200, 15 * 60 * 1000)) { + return NextResponse.json({ error: "Too many attempts — try again in a few minutes." }, { status: 429 }); + } + + let body: { token?: unknown; action?: unknown; reason?: unknown }; + try { body = await req.json(); } catch { return NextResponse.json({ error: "Bad request" }, { status: 400 }); } + + const claim = readApprovalToken(String(body.token ?? "")); + if (!claim) return NextResponse.json({ error: "That link has expired. Open the app and use the approvals queue." }, { status: 400 }); + + const action = String(body.action ?? ""); + if (action !== "approve" && action !== "decline") return NextResponse.json({ error: "Unknown action" }, { status: 400 }); + + let done: Awaited>; + try { + done = await decideRequest({ + requestId: claim.rid, + managerId: claim.mid, + approveAll: action === "approve", + reason: body.reason, + }); + } catch (e) { + if (!(e instanceof StaffOpError)) throw e; + /* The refusals are worded for somebody standing in their mail client, not in the app. + * + * A 403 here is decideRequest re-reading the register and finding the manager off it, or the + * wearer off it — the check that makes a fortnight-old token in a mailbox that has since been + * closed or handed on safe. Neither the sacked manager nor a stranger reading their mail is + * told which of the two it was; "ask the linen room" is where that conversation belongs. + * + * A 409 is the link already spent, and keeps the `already` flag the page reads to show the + * decision that was made rather than an error. */ + if (e.status === 403) return NextResponse.json({ error: "That link is no longer valid — ask the linen room." }, { status: 403 }); + if (e.status === 404) return NextResponse.json({ error: "That request is no longer there." }, { status: 404 }); + if (e.status === 409) return NextResponse.json({ error: "That request has already been decided.", already: true }, { status: 409 }); + return NextResponse.json({ error: e.message }, { status: e.status }); + } + + // Filed under the manager's own Staff id, exactly as the in-app approval is, so the log names + // the same person either way; the op says which door the decision came through, because "an + // email link, from an address we can't see" is part of the answer to who authorised this. + recordFor( + { facilityId: done.facilityId, userId: claim.mid, userName: done.managerName }, + done.status === "accepted" ? "staff:request.approve.email" : "staff:request.decline.email", + { id: claim.rid }, ip, + ); + + // The third door into the facility's data, so the third place the revision has to move: a manager + // approving from their mail is exactly the change the linen room's screen is waiting to see. + await bumpRev(done.facilityId); + + return NextResponse.json({ ok: true, status: done.status, notified: done.notified }); +} diff --git a/app/api/staff/login/route.ts b/app/api/staff/login/route.ts new file mode 100644 index 0000000..1419734 --- /dev/null +++ b/app/api/staff/login/route.ts @@ -0,0 +1,45 @@ +import { NextRequest, NextResponse } from "next/server"; +import { sameOriginJson } from "@/lib/csrf"; +import { clientIp } from "@/lib/ratelimit"; +import { signInStaff, staffThrottled } from "@/lib/staffauth"; +import { verifyTurnstile } from "@/lib/turnstile"; + +export const dynamic = "force-dynamic"; + +/* The staff app's own door: the printed slip, the Play app's welcome, and /my/signin. + * + * The Log in box on the website reaches the same register through lib/staffauth.ts, so what counts + * as a match, what a deactivated record is told, and what lands in the audit trail are decided in + * one place for both. This route is the HTTP shape of it: the origin check, the security check, and + * the throttle asked in that order. */ +export async function POST(req: NextRequest) { + const csrf = sameOriginJson(req); + if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + + let body: { email?: unknown; password?: unknown; cfToken?: unknown }; + try { body = await req.json(); } catch { return NextResponse.json({ error: "Bad request" }, { status: 400 }); } + const email = String(body.email ?? "").trim().toLowerCase().slice(0, 160); + const password = String(body.password ?? "").slice(0, 200); + + const ip = clientIp(req.headers); + // Asked before the security check, because a Turnstile token is good for one use and somebody who + // is already throttled should not spend theirs to be told so. + if (staffThrottled(email, ip)) { + return NextResponse.json({ error: "Too many attempts — try again in 15 minutes." }, { status: 429 }); + } + if (!email || !password) return NextResponse.json({ error: "Enter your email and password." }, { status: 400 }); + + // The same bot check the coordinator door has. A ward account opens one person's uniform record, + // and a manager's opens the approvals queue, so leaving this to the in-memory throttles alone + // meant a list of hospital addresses and enough patience was the whole attack. + const cfErr = await verifyTurnstile(body.cfToken, ip); + if (cfErr) return NextResponse.json({ error: cfErr }, { status: 400 }); + + // `true`: this is the register's own door, so an address with no account here is a plain wrong + // answer and is counted as one. + const r = await signInStaff(email, password, ip, true); + if (r.kind === "ok") return NextResponse.json({ ok: true, name: r.name }); + if (r.kind === "error") return NextResponse.json({ error: r.error }, { status: r.status }); + // Unreachable at this door: `none` is only returned when the caller asked not to be counted. + return NextResponse.json({ error: "Email or password doesn’t match." }, { status: 401 }); +} diff --git a/app/api/staff/logout/route.ts b/app/api/staff/logout/route.ts new file mode 100644 index 0000000..1516be5 --- /dev/null +++ b/app/api/staff/logout/route.ts @@ -0,0 +1,23 @@ +import { NextRequest, NextResponse } from "next/server"; +import { sameOriginJson } from "@/lib/csrf"; +import { clearStaffCookie, currentStaff } from "@/lib/staffsession"; +import { clientIp } from "@/lib/ratelimit"; +import { recordAuthEvent } from "@/lib/audit"; + +export const dynamic = "force-dynamic"; + +export async function POST(req: NextRequest) { + const csrf = sameOriginJson(req); + if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + // Read the session before dropping it, so the trail can say who left. Signing out still succeeds + // when there was nothing to sign out of. + const sess = await currentStaff(); + await clearStaffCookie(); + if (sess) { + recordAuthEvent( + { facilityId: sess.facilityId, userId: sess.staffId, userName: `${sess.first} ${sess.last}`.trim() || sess.email }, + "staff:signout", clientIp(req.headers), + ); + } + return NextResponse.json({ ok: true }); +} diff --git a/app/api/staff/mutate/route.ts b/app/api/staff/mutate/route.ts new file mode 100644 index 0000000..5f314f2 --- /dev/null +++ b/app/api/staff/mutate/route.ts @@ -0,0 +1,56 @@ +import { NextRequest, NextResponse } from "next/server"; +import { currentStaff } from "@/lib/staffsession"; +import { StaffOpError, runStaffOp } from "@/lib/staffops"; +import { sameOriginJson } from "@/lib/csrf"; +import { allow, clientIp } from "@/lib/ratelimit"; +import { recordStaffAudit } from "@/lib/audit"; +import { bumpRev } from "@/lib/ops"; +import { report } from "@/lib/glitchtip"; + +export const dynamic = "force-dynamic"; + +/* The one door for everything a wearer, manager or ward clerk changes. + * + * Separate from /api/mutate, and reached only with a staff session. The two never share a handler: + * a single endpoint that accepted either kind of caller would put the whole coordinator op table + * one authorisation slip away from a wearer's phone. + */ +export async function POST(req: NextRequest) { + const sess = await currentStaff(); + if (!sess) return NextResponse.json({ error: "Not signed in" }, { status: 401 }); + const csrf = sameOriginJson(req); + if (csrf) return NextResponse.json({ error: csrf }, { status: 403 }); + + let body: { op?: string; payload?: unknown }; + try { body = await req.json(); } catch { return NextResponse.json({ error: "Bad JSON" }, { status: 400 }); } + const op = String(body.op || ""); + + if (!allow("staff-mutate:" + sess.accountId, 120, 60 * 1000)) { + return NextResponse.json({ error: "Slow down — too many changes in a minute." }, { status: 429 }); + } + // Requests are the expensive ones: each sends an email to a manager. A tighter budget stops a + // stuck retry loop turning into a mailbox full of the same approval. + // damage.report and waitlist.accept raise a request (and mail the manager) through the same + // path, so they draw on the same budget — otherwise the loop just picks a different door. + if (["request.create", "damage.report", "waitlist.accept"].includes(op) && !allow("staff-request:" + sess.staffId, 12, 60 * 60 * 1000)) { + return NextResponse.json({ error: "That's a lot of requests in an hour — talk to the linen room." }, { status: 429 }); + } + + const ip = clientIp(req.headers); + try { + const payload = (body.payload || {}) as Record; + const result = await runStaffOp(sess, op, payload); + // The same discipline as /api/mutate, and for the same reason: a uniform issued to a ward is + // authorised here as often as it is in the linen room, and "who approved this" is the question + // the trail exists to answer. Recorded only after the op actually succeeded. + recordStaffAudit(sess, op, payload, ip, result); + // Handed back so the screen that made this change does not bounce again when it next polls. + const rev = await bumpRev(sess.facilityId); + return NextResponse.json({ ok: true, result, rev }); + } catch (e) { + if (e instanceof StaffOpError) return NextResponse.json({ error: e.message }, { status: e.status }); + report({ error: e, where: "server", url: "/api/staff/mutate", tags: { op } }); + console.error(`[staff mutate ${op}]`, e, "ip=", ip); + return NextResponse.json({ error: "Something went wrong — nothing was saved." }, { status: 500 }); + } +} diff --git a/app/app/activity/page.tsx b/app/app/activity/page.tsx new file mode 100644 index 0000000..db4f526 --- /dev/null +++ b/app/app/activity/page.tsx @@ -0,0 +1,277 @@ +"use client"; +/* Who changed what. + * + * Reads from its own endpoint rather than the snapshot: the trail grows without limit and putting + * it in the snapshot would make every page in the app heavier forever, to serve a screen almost + * nobody opens on an ordinary day. + * + * It shows ids rather than names on purpose — see lib/audit.ts. The id is the handle for going and + * looking at the record; copying its contents in here would quietly build a second, unmanaged copy + * of the staff register. */ +import { useCallback, useEffect, useState } from "react"; +import { useSnap } from "@/lib/client"; +import { Empty, LiveRegion, PageHead } from "@/components/ui"; +import { csvEsc, csvOf, facilityDate, formatInZone } from "@/lib/compute"; +import { downloadCsv } from "@/lib/print"; + +type Event = { id: string; at: string; who: string; op: string; target: string }; + +/* Operation names are written for the code. These are written for whoever is reading the log at + the point somebody asks what happened. */ +const LABELS: Record = { + "issue.create": "Issued garments", + "issue.return": "Recorded a return", + "issue.exchange": "Exchanged a size", + "issue.delete": "Deleted an issue", + "issue.receipt": "Attached a signed receipt", + "stocktake.apply": "Committed a stocktake", + "stock.reorder": "Changed a par level", + "stock.moves": "Adjusted stock", + "stock.orderFlagged": "Raised an order from low stock", + "catalog.add": "Added a garment", + "catalog.update": "Edited a garment", + "catalog.delete": "Deleted a garment", + "catalog.duplicate": "Duplicated a garment", + "catalog.bulk": "Bulk-changed the catalogue", + "catalog.variantAdd": "Added a size", + "catalog.removeSize": "Removed a size", + "barcode.bind": "Bound a barcode", + "barcode.unbind": "Unbound a barcode", + "order.create": "Created an order", + "order.receive": "Received an order", + "order.status": "Changed an order’s status", + "order.update": "Edited an order", + "order.duplicate": "Duplicated an order", + "order.lineAdd": "Added an order line", + "order.lineQty": "Changed an order quantity", + "order.lineRemove": "Removed an order line", + "staff.save": "Added or edited a staff record", + "staff.patch": "Edited a staff record", + "staff.delete": "Deleted a staff record", + "dept.save": "Edited a department", + "dept.delete": "Deleted a department", + "supplier.add": "Added a supplier", + "supplier.update": "Edited a supplier", + "supplier.remove": "Removed a supplier", + "location.save": "Added or edited a location", + "location.delete": "Deleted a location", + "location.place": "Placed stock on a shelf", + "approval.add": "Recorded a manager's approval", + "approval.remove": "Removed a manager's approval", + "alteration.add": "Logged an alteration", + "alteration.advance": "Advanced an alteration", + "alteration.remove": "Removed an alteration", + "handin.add": "Recorded a hand-in", + "pickup.contacted": "Marked a pickup contacted", + "pickup.pickedUp": "Marked a pickup collected", + "pickup.deliver": "Delivered to a ward", + "request.raise": "Raised a request for somebody", + "request.pick": "Started picking a request", + "request.hold": "Held a request at the counter", + "request.round": "Put a request on the ward round", + "request.collected": "Handed a request over", + "request.reply": "Wrote back about a request", + "request.reassign": "Sent a request to a different approver", + "request.withdraw": "Withdrew a request", + "damage.handedIn": "Took a damaged garment back", + "dispute.resolve": "Closed a record query", + "notice.set": "Changed the ward notice", + "kitcheck.open": "Started a kit check", + "kitcheck.close": "Closed a kit check", + "waitlist.offer": "Offered a waiting size", + "staff.selfCode": "Made a staff-app activation code", + "staff.selfClear": "Cancelled an activation code", + "staff.selfUnlink": "Removed somebody’s staff-app access", + "users.add": "Invited a user", + "users.update": "Changed a user", + "users.remove": "Removed a user", + "settings.update": "Changed settings", + "import.rows": "Imported data", + "backup.restore": "Restored a backup", + "data.reset": "Reset facility data", + "data.wipeActivity": "Wiped activity history", + "me.password": "Changed their own password", + "me.profile": "Edited their own profile", + "me.deleteAccount": "Deleted their own account", + + /* Signing in and out, and the second factor. + * + * The page promises "every change made in this facility", and who reached the account is part of + * that — a stock adjustment nobody disputes reads differently next to a run of failed sign-ins + * from an address nobody recognises. Without these lines the trail rendered the raw op names. */ + "auth:signin": "Signed in", + "auth:signin.failed": "A failed sign-in", + "auth:signin.refused": "Sign-in refused (deactivated)", + "auth:signout": "Signed out", + "auth:signup": "Created the facility", + "auth:password.reset": "Set a new password from a reset link", + "2fa:setup": "Started two-factor setup", + "2fa:enable": "Turned two-factor on", + "2fa:disable": "Turned two-factor OFF", + "2fa:regenerate": "Made new recovery codes", + + /* The staff app. Every one of these is somebody on a ward changing something the linen room has + * to live with, so they belong in the same trail rather than a second one nobody opens. */ + "staff:signin": "Signed in to the staff app", + "staff:signin.failed": "A failed staff-app sign-in", + "staff:signin.refused": "Staff-app sign-in refused (deactivated)", + "staff:signout": "Signed out of the staff app", + "staff:activate": "Claimed their own record", + "staff:request.create": "Raised a uniform request", + "staff:request.approve": "Approved a request (in the app)", + "staff:request.decline": "Declined a request (in the app)", + "staff:request.approve.email": "Approved a request (email link)", + "staff:request.decline.email": "Declined a request (email link)", + "staff:request.message": "Wrote about a request", + "staff:round.sign": "Signed for a ward delivery", + "staff:round.claim": "Confirmed a ward bag was collected", + "staff:damage.report": "Reported damage", + "staff:dispute.raise": "Said their record is wrong", + "staff:waitlist.join": "Joined a waiting list", + "staff:waitlist.leave": "Left a waiting list", + "staff:waitlist.accept": "Took up a waitlist offer", + "staff:kit.answer": "Answered a kit check", + "staff:account.password": "Changed their own staff-app password", +}; + +/** Operations worth noticing in a list of hundreds. */ +const NOTABLE = new Set([ + "catalog.delete", "catalog.removeSize", "staff.delete", "dept.delete", "location.delete", "supplier.remove", + "users.add", "users.remove", "users.update", "settings.update", "backup.restore", + "data.reset", "data.wipeActivity", "me.deleteAccount", "catalog.bulk", + // Turning the second factor off weakens every account in the facility, and a refused sign-in is + // somebody with a password trying to get in after their access was taken away. Both are worth + // catching an eye in a list of hundreds. + "2fa:disable", "auth:signin.refused", "staff:signin.refused", + // The two ends of staff-app access: selfCode mints a credential that opens somebody's record, + // selfUnlink takes their account away. Both are the linen room reaching into a person's access + // rather than into stock, which is exactly what an admin is looking for when they open this. + "staff.selfCode", "staff.selfUnlink", +]); + +/* Stamped in the facility's own zone, not the browser's. An audit trail read on a laptop that is + travelling, or served by a machine set to UTC, has to agree with the clock on the linen-room wall + or the times are worse than useless in a dispute. */ +function when(iso: string, tz: string) { + return formatInZone(iso, tz, { day: "numeric", month: "short", hour: "2-digit", minute: "2-digit", hour12: false }); +} + +export default function Activity() { + const { s, isAdmin } = useSnap(); + const [events, setEvents] = useState([]); + const [before, setBefore] = useState(null); + const [more, setMore] = useState(false); + const [loading, setLoading] = useState(true); + const [err, setErr] = useState(""); + + const load = useCallback(async (cursor: string | null) => { + setLoading(true); + try { + const r = await fetch("/api/activity" + (cursor ? `?before=${encodeURIComponent(cursor)}` : "")); + const j = await r.json(); + if (!r.ok) { setErr(j.error || "Couldn’t load the log."); return; } + setEvents((prev) => (cursor ? [...prev, ...j.events] : j.events)); + setBefore(j.nextBefore); + setMore(!!j.nextBefore); + } catch { + setErr("Couldn’t load the log."); + } finally { + setLoading(false); + } + }, []); + + useEffect(() => { if (isAdmin) void load(null); else setLoading(false); }, [isAdmin, load]); + + /* The file is what is on screen, and nothing more — in two senses. + * + * The log is paged, so what comes out is what has been loaded. If the question reaches further + * back than the screen does, press Load older first and export again; the file states on its + * face how far it goes, so a first page can never be handed over as though it were the whole + * trail. And no column appears that the screen does not show: the trail also records the address + * each change came from, which is why the endpoint never sends it to this page, and a file that + * leaves the building by email is the last place to start handing that around. */ + function exportCsv() { + /* Full date, and seconds — neither of which the table needs, because you read it in order. + A spreadsheet gets re-sorted the moment it lands: "9 Sep, 14:32" sorts as text into nonsense + and carries no year at all, and two changes inside the same minute would lose the order they + happened in, which is the whole question when a figure is disputed. The zone is the + facility's, the same as the screen, and it is named at the top of the file so a copy opened + in another state is not quietly read as local time. */ + const stamp = (iso: string) => + `${facilityDate(iso, s.tz)} ${formatInZone(iso, s.tz, { hour: "2-digit", minute: "2-digit", second: "2-digit", hour12: false, hourCycle: "h23" })}`; + /* The four headings are the table's, and mean the same four things: What is the plain-English + label the screen shows rather than the op name behind it, and Record is the identifier + exactly as shown — left blank rather than carrying the screen's dash, which in a spreadsheet + cell is only noise. */ + const reach = more ? `${events.length} (older events not loaded)` : `${events.length} (the whole log)`; + downloadCsv(`threadcount-activity-${s.today}.csv`, + `Activity log,${csvEsc(s.today)}\nTimes shown in,${csvEsc(s.tz)}\nEvents in this file,${csvEsc(reach)}\n\n` + + csvOf(["When", "Who", "What", "Record"], events.map((e) => [stamp(e.at), e.who, LABELS[e.op] || e.op, e.target]))); + } + + if (!isAdmin) { + return ( +
    + + Only an admin can read the change log. +
    + ); + } + + return ( +
    + + + + + + + {/* The log is one block with its own head and foot rather than a table adrift on the page: + how far back it reaches is the first thing anybody asks of it, so the count sits on the + block itself and Load older sits under the same border as the rows it extends. */} +
    +
    + Change log + {events.length} shown{more ? " · older events not loaded" : ""} +
    +
    + + + + + + {events.map((e) => { + const notable = NOTABLE.has(e.op); + return ( + + + + {/* A line worth stopping on is marked as well as coloured. The accent is the + brand — it is the primary button and the current menu item — so a second red + in a list of hundreds is a guess; the mark beside the words is what actually + says "this one". Decoration, so it is hidden from a screen reader: the + wording of the line is the message. */} + + + + ); + })} + {!events.length && !loading && ( + + )} + +
    WhenWhoWhatRecord
    {when(e.at, s.tz)}{e.who} + {notable && {e.target || "—"}
    Nothing recorded yet.
    +
    +
    + {more && } + {events.length} shown{more ? " — Export CSV writes these, so load the older events first if the file has to reach further back." : ". Export CSV writes the whole log."} +
    +
    +
    + ); +} diff --git a/app/app/help/page.tsx b/app/app/help/page.tsx new file mode 100644 index 0000000..be232a0 --- /dev/null +++ b/app/app/help/page.tsx @@ -0,0 +1,116 @@ +"use client"; +/* Help: the rules and routines a coordinator needs to know once, written down in one place so the + * working screens don't have to carry them. The owner took the explanations off every screen and + * asked for anything worth keeping to live here instead. + * + * Every figure is read from this facility's own settings rather than written in, so the page can't + * quote a number the facility has changed. The import rules are the templates' own notes, so they + * can't drift from what the importer accepts. */ +import { useSnap } from "@/lib/client"; +import { PageHead } from "@/components/ui"; +import { CSV_TEMPLATES } from "@/lib/csv"; +import { FTE_SETS, SLIP_DAYS } from "@/lib/compute"; +import { SET_GARMENTS, setsCap, setsOnStart } from "@/lib/sets"; + +function Section({ title, children }: { title: string; children: React.ReactNode }) { + return ( +
    +
    {title}
    +
    {children}
    +
    + ); +} + +const list = { margin: 0, paddingLeft: "1.2em", display: "grid", gap: "var(--space-1)" } as const; + +export default function Help() { + const { s } = useSnap(); + const cap = setsCap(s.settings.capSets); + const start = Math.min(cap, setsOnStart(s.settings.initialSets)); + // The table as the form lists it: a full-timer's figure first, down to the smallest. + const table = Object.entries(FTE_SETS).filter(([, n]) => n !== null) as [string, number][]; + + return ( + <> + + +
    +
      +
    • Up to {cap} sets at any time — {cap} tops and {cap} pairs of trousers. The same for every staff group, nursing included.
    • +
    • It counts everything issued and not handed in or returned, plus anything on order for them, waiting at the counter, or approved and not yet collected. Pre-loved garments count.
    • +
    • Garments that aren't part of a set — fleeces, jackets, maternity wear — have their own ceiling of {cap}.
    • +
    • It isn't a yearly allowance and nothing resets in July. At the ceiling, the next garment comes by handing one in first, or on a coordinator's override, which is recorded.
    • +
    • Change the figure under Settings → General.
    • +
    +
    + +
    +

    Each staff group is on one route, chosen under Settings → Staff groups. All three stop at the same {cap} sets.

    +
      +
    • FTE table — the hours someone works propose their starting kit: {table.map(([fte, n]) => `${fte} FTE ${n}`).join(", ")} sets; a casual is at the manager's discretion. A manager may sign for more.
    • +
    • Starting kit — {start} sets on the first day ({start * SET_GARMENTS} garments), then more as needed. Nothing has to be handed back first.
    • +
    • Manager approval — no starting kit; the manager approves each set.
    • +
    • A group can't be on two routes, and a group with people in it can't be removed — rename it instead.
    • +
    +
    + +
    +

    “Items (FY)” on Reports and “drawn since July” on Issue Stock count what someone has drawn since 1 July. They feed the reports and the monthly exceptions list, and never limit what the counter issues. Groups on the FTE table aren't measured against one.

    +
    + +
    +
      +
    • Handing a garment in frees room at the counter straight away, whether or not the credit box is ticked.
    • +
    • The credit tick adds the good garments back to the yearly figure and to the manager's approval. Pre-loved garments earn neither.
    • +
    • Good garments join the pre-loved pool and are reissued free; rags are counted for disposal.
    • +
    +
    + +
    +

    A garment's type decides how it counts. Tops and trousers are each half a set; every other type counts toward the separate ceiling. A type typed in by hand that isn't on the list counts toward no set, so pick from the list.

    +

    Each garment is tagged for the staff groups that wear it, or for all groups. Staff can only request their own groups' garments, and the counter needs a coordinator's override, which is recorded, to issue anyone a garment outside their group.

    +

    A garment is also men's, women's or unisex. Somebody is offered the cut set as their Uniform style plus everything unisex; blank means every style until a coordinator sets it, and the counter needs the same override, also recorded, to issue anyone another cut.

    +
    + +
    +
      +
    • Generate a code on the staff record and hand them the slip. A code works once and expires after {SLIP_DAYS} days.
    • +
    • Record their manager first, under Manager's approval on the staff record — nobody can raise a request without one.
    • +
    +
    + +
    +
      +
    • A request goes to the person's manager — the same person who signs their paper order form.
    • +
    • A manager can raise requests for the people who report to them; those go to the manager above. With nobody above, the request waits under Ward Requests → Needs an approver.
    • +
    • Nobody approves a request they raised for somebody else.
    • +
    • Anyone can be set as their own manager; what they approve for themselves is marked Self-approved.
    • +
    +
    + +
    +

    A count in progress is saved in this browser only, under your sign-in. It survives a reload, but not a move to another computer or the phone — finish a count where you started it.

    +
    + +
    +

    Settings → Data imports each list from a CSV file. The rules for each:

    +
      + {Object.entries(CSV_TEMPLATES).map(([k, t]) =>
    • {t.name} — {t.note}
    • )} +
    +

    The Staff Register's Export writes the same columns, so a ward's list can go to its manager, come back with Manager number filled in, and be imported again. The Approver name column is only for checking and is ignored on import.

    +
    + +
    +

    One debit line per cost centre, priced at each garment's cost on the day it was issued. Finance posts the balancing credit.

    +
    + +
    +
      +
    • You — password resets, and updates you've subscribed to.
    • +
    • Staff — only about their own requests, once they've set up the staff app.
    • +
    • Managers — the link to approve or decline a request.
    • +
    +
    + + ); +} diff --git a/app/app/issue/page.tsx b/app/app/issue/page.tsx new file mode 100644 index 0000000..88c9659 --- /dev/null +++ b/app/app/issue/page.tsx @@ -0,0 +1,501 @@ +"use client"; +import Link from "next/link"; +import { useMemo, useState, useEffect } from "react"; +import { useDerived, useSnap } from "@/lib/client"; +import { PageHead, Empty, LiveRegion } from "@/components/ui"; +import { BindDialog, HandInDialog, ReturnDialog, openSlip, printCreditSlip } from "@/components/dialogs"; +import Camera from "@/components/Camera"; +import { SET_GARMENTS, allowance, approvalRemaining, bcParse, capCheck, capState, ccOf, entUsed, fmtDate, garmentForGroup, UNIFORM_STYLE_EITHER, garmentForStyle, genderLabel, groupBucket, groupsLabel, heldByStaff, inBucket, initialGarments, initialRemaining, isKit, isNursing, isPantItem, isTopItem, key, label, longLabel, money, onhand, openApproval, plOf, setsCap, setsHeld, staffName, type GarmentCounts, type IssueRec } from "@/lib/compute"; + +// src null = both shelf and pre-loved stock exist, the coordinator must pick one. +type CartLine = { itemId: string; si: number; qty: number; src: "stock" | "order" | "preloved" | null }; + +const count = (n: number, one: string, many: string) => `${n} ${n === 1 ? one : many}`; + +/** Where somebody stands against the ceiling before anything goes in the bag — for the tag beside + * their name, and the line under it in the search results. + * + * Asked of the rule by putting one more of each kind in front of it, rather than by comparing their + * sets with six here. The ceiling bites on tops and on pairs separately, so somebody holding six + * tops and two pairs is "two sets" and is still refused the next top; a tag that read their sets + * told the coordinator OK, and the counter then turned the person away. `full` names each kind the + * next one of would be refused. Past the ceiling already, anything at all would be, so nothing is + * singled out. */ +function standing(held: GarmentCounts, capSets: number) { + const refused = (adding: { tops?: number; pants?: number; other?: number }) => capState({ held, adding, capSets }).over; + const over = refused({}); + const full = over ? [] : ([refused({ tops: 1 }) && "tops", refused({ pants: 1 }) && "pairs", refused({ other: 1 }) && "garments outside a set"].filter(Boolean) as string[]); + const room = full.length ? `no room for more ${full.length > 1 ? `${full.slice(0, -1).join(", ")} or ${full[full.length - 1]}` : full[0]}` : ""; + return { over, full, room, tag: over ? "OVER" : full.length ? "AT LIMIT" : "OK" }; +} + +export default function IssuePage() { + const { s, mutate } = useSnap(); + const { L, byId, staffById } = useDerived(); + const [staffQ, setStaffQ] = useState(""); + const [selId, setSelId] = useState(null); + const [scan, setScan] = useState(""); + const [qaQ, setQaQ] = useState(""); + const [cart, setCart] = useState([]); + const [override, setOverride] = useState(false); + const [apDeduct, setApDeduct] = useState(null); + const [issueMsg, setIssueMsg] = useState(""); + const [cam, setCam] = useState(false); + useEffect(() => { const h = () => { setCamMsg(""); setCam(true); }; window.addEventListener("tc-scan", h); return () => window.removeEventListener("tc-scan", h); }, []); + const [camMsg, setCamMsg] = useState(""); + const [bind, setBind] = useState(""); + const [ret, setRet] = useState(null); + const [busy, setBusy] = useState(false); + const [handin, setHandin] = useState(false); + + const sel = selId ? staffById[selId] : undefined; + // An override is a coordinator's decision about one person and one bag, so the tick goes the + // moment either of them changes. Left standing, a tick given for somebody past six rode along to + // the next name clicked, and that person's ordinary collection went on the record as a rule + // somebody bent. Cleared as the page draws rather than afterwards, so the new bag is never on + // screen, even for an instant, with the old tick behind it. + const bagKey = selId ? `${selId}|${cart.map((c) => `${c.itemId}:${c.si}:${c.qty}:${c.src}`).join(",")}` : ""; + const [tickedFor, setTickedFor] = useState(bagKey); + if (tickedFor !== bagKey) { setTickedFor(bagKey); setOverride(false); } + function addToCart(itemId: string, si: number) { + setCart((c) => { + const f = c.find((x) => x.itemId === itemId && x.si === si); + if (f) return c.map((x) => x === f ? { ...x, qty: x.qty + 1 } : x); + const oh = onhand(s, L, key(itemId, si)), pl = plOf(s, key(itemId, si)); + return [...c, { itemId, si, qty: 1, src: pl > 0 && oh >= 1 ? null : pl > 0 ? "preloved" : oh >= 1 ? "stock" : "order" }]; + }); + setIssueMsg(""); + } + function handleScan(raw: string) { + const p = bcParse(s, raw); + if (!p) { setScan(""); setBind(raw.trim()); return; } + addToCart(p.itemId, p.si); setScan(""); + } + function camHit(raw: string) { + const p = bcParse(s, raw); + if (!p) { setCam(false); setBind(raw.trim()); return; } + addToCart(p.itemId, p.si); + setCamMsg("Added " + label(byId[p.itemId]) + " · " + byId[p.itemId].sizes[p.si] + " — keep scanning or press Done"); + } + + const sq = staffQ.trim().toLowerCase(); + const matches = s.staff.filter((st) => !st.inactive).filter((st) => !sq || `${st.first} ${st.last}`.toLowerCase().includes(sq) || st.num.includes(sq)).slice(0, 6); + const cartQtyAll = cart.reduce((t, c) => t + c.qty, 0); + const nPl = cart.filter((c) => c.src === "preloved").reduce((t, c) => t + c.qty, 0); + // Pre-loved lines are free, so they stay out of what the ward is charged and out of what a + // manager's approval pays for. They are not out of the ceiling: six pre-loved tops fill a locker + // exactly as six new ones do, which is why the whole cart goes to capCheck() below. + const cartVal = cart.filter((c) => c.src !== "preloved").reduce((t, c) => t + c.qty * (byId[c.itemId]?.cost || 0), 0); + const nStock = cart.filter((c) => c.src === "stock").reduce((t, c) => t + c.qty, 0); + const nOrder = cart.filter((c) => c.src === "order").reduce((t, c) => t + c.qty, 0); + const anyUnpicked = cart.some((c) => c.src === null); + const used = sel ? entUsed(s, sel.id) : 0; + // The one question the counter asks, worked out by the same function the server refuses with: after + // this pickup, is this person still inside the six sets one person holds? Six at any time, every + // group, whichever route it takes — what somebody has on their back and in their locker, never a figure + // that starts again in July. This screen used to keep a private copy of the sum, and the day the + // copy and the server disagreed the coordinator was asked for a tick the record then contradicted. + // + // The whole cart goes in, ordered-in and pre-loved lines with the rest, because all three end up on + // the same person. Nothing here is a set count: the ceiling bites on tops and on trousers + // separately, or twenty tops and one pair would read as one set and pass. + const cap = useMemo(() => (sel ? capCheck(s, sel, cart.map((c) => ({ itemId: c.itemId, qty: c.qty }))) : null), [s, sel, cart]); + // The same question with an empty bag: is this person already past what one person holds? Only an + // override can have put them there, and the tag beside their name should say so rather than wait + // for somebody to put a garment in the cart. Asked of the rule rather than worked out here, because + // a locker of seven tops and two pairs is "two sets" by any count that isn't the rule's own. + const capHeld = useMemo(() => (sel ? capCheck(s, sel, []) : null), [s, sel]); + const selStanding = capHeld ? standing(capHeld, s.settings.capSets) : null; + // Sets held for every person on the register, in one walk of the issues — the search results below + // show it, and asking person by person makes a six-hundred-name register crawl. + const heldAll = useMemo(() => heldByStaff(s), [s]); + const capSets = setsCap(s.settings.capSets); + // Their allowance counted in SETS, from the one function that owns that rule, so the counter says + // what the wearer's own app says about the same person. + const allow = useMemo(() => { + if (!sel || !cap) return null; + // What they hold comes from capCheck, so this screen counts a person's uniform once. The + // facility's own figures go in with the question: left off, a site that issues four sets on + // starting goes on telling everybody three. Both route answers go in: without the starting-kit + // one, somebody whose group starts on a kit is told here that they start on nothing. + return allowance({ + group: sel.group, held: cap.sets, + nursing: isNursing(s, sel), kit: isKit(s, sel), + capSets: s.settings.capSets, startingSets: s.settings.initialSets, + }); + }, [s, sel, byId, cap]); + // allowance() words its sentence about nobody in particular, so the counter can say it about the + // person in front of it exactly as the wearer's own app says it to them. + const allowNote = allow ? allow.note : ""; + // Garments of the starting kit this record still owes. What they are owed on starting, and no part + // of what the counter refuses on: a new starter holds nothing and takes three sets, three is inside + // six, and the head-room this figure used to be added to the year's tally for existed only to stop + // somebody's own record turning their first collection into an override. + const kitLeft = sel ? initialRemaining(s, sel) ?? 0 : 0; + // Past what one person holds — one of the two things on this screen that asks for a tick. Nothing + // else blocks the button: stamping an ordinary collection as an override taught the linen room to + // tick the box without reading it, and that devalues every real one. + const overCap = !!sel && !!cap && cap.over; + // The other: garments in the bag that are not for this person's staff group. garmentForGroup() is + // the question the server refuses with, and the sentence is worded as its refusal is. The same tick + // lets either through; the server records a garment outside the group as that, never as the ceiling. + const offItems = useMemo(() => (sel ? [...new Set(cart.map((c) => c.itemId))].map((id) => byId[id]).filter((it): it is NonNullable => !!it && !garmentForGroup(it, sel.group)) : []), [sel, cart, byId]); + const offGroup = offItems.length > 0; + const selGroup = (sel?.group || "").trim(); + const offLine = offGroup && sel ? `${offItems.map((it) => `${it.item} is for ${groupsLabel(it.groups)}`).join("; ")} — ${staffName(sel)} ${selGroup ? `is in ${selGroup}` : "has no staff group recorded"}.` : ""; + // And the third: garments in the bag that are not the cut this person is offered. garmentForStyle() + // is the question the server refuses with, and the sentence is worded as its refusal is. Nothing is + // ever named here for somebody left blank or set to Either — both are offered every cut — so this + // line can only appear about a record a coordinator has set to Men's or Women's. + const offStyleItems = useMemo(() => (sel ? [...new Set(cart.map((c) => c.itemId))].map((id) => byId[id]).filter((it): it is NonNullable => !!it && !garmentForStyle(it, sel.uniformStyle)) : []), [sel, cart, byId]); + const offStyle = offStyleItems.length > 0; + const styleLine = offStyle && sel ? `${offStyleItems.map((it) => `${it.item} is the ${genderLabel(it.gender)} cut`).join("; ")} — ${staffName(sel)} is set to ${sel.uniformStyle}.` : ""; + const needsTick = overCap || offGroup || offStyle; + // The lead a coordinator checks against the person standing in front of them, worded the way the + // server words it when it refuses the same pickup: what they have out now, and then the reason, + // which comes from the rule itself rather than being worked out again here. + // + // What they hold includes what is on order for them or waiting to be collected, and nobody can see + // a garment on order in a locker — so, as the refusal does, the lead says how much of it is still + // to come, and only when some is. Somebody holding only garments outside a set is said to be + // holding those, not to have nothing out: "nothing out" to a person wearing the fleece they were + // issued is a sentence the coordinator can see is wrong. + const capLead = useMemo(() => { + if (!sel || !cap) return ""; + const inSets = cap.breach !== "other" && cap.tops + cap.pants > 0; + const holds = inSets ? `${count(cap.tops, "top", "tops")} and ${count(cap.pants, "pair", "pairs")}` : `${count(cap.other, "garment", "garments")} outside a set`; + const hasSome = inSets || cap.other > 0; + const coming = inSets ? cap.owed.tops + cap.owed.pants : cap.owed.other; + return `${staffName(sel)} ${hasSome ? `is holding ${holds}${coming ? `, ${coming} of them still to come` : ""}` : "has nothing out"}.`; + }, [sel, cap]); + const anyShort = cart.some((c) => (c.src === "stock" && c.qty > onhand(s, L, key(c.itemId, c.si))) || (c.src === "preloved" && c.qty > plOf(s, key(c.itemId, c.si)))); + const cannot = !sel || cart.length === 0 || anyShort || anyUnpicked || (needsTick && !override) || busy; + + // Manager's approval, whichever route they are on: oldest with sets remaining. + const ap = sel ? openApproval(s, sel.id) : undefined; + const apRem = sel ? approvalRemaining(s, sel.id) : 0; // across all open approvals (draws down oldest-first) + const cartTops = cart.reduce((t, c) => t + (isTopItem(byId[c.itemId]) && c.src !== "preloved" ? c.qty : 0), 0); + const cartPants = cart.reduce((t, c) => t + (isPantItem(byId[c.itemId]) && c.src !== "preloved" ? c.qty : 0), 0); + const apDefault = ap ? Math.min(apRem, Math.max(cartTops, cartPants)) : 0; + const apN = apDeduct === null ? apDefault : Math.min(apDeduct, apRem); + + // Repeat last issue: the person's most recent issue date, all non-returned lines that day. + const lastSet = useMemo(() => { + if (!sel) return []; + const past = s.issues.filter((i) => i.staffId === sel.id && !i.returned).sort((a, b) => (a.date < b.date ? 1 : a.date > b.date ? -1 : 0)); + if (!past.length) return []; + return past.filter((i) => i.date === past[0].date && byId[i.itemId] && !byId[i.itemId].archived); + }, [s.issues, sel, byId]); + + // Quick add: garments for the person's group and cut (or everything when searching), usual size + // outlined. Both halves come from the shared helpers, so this list and the phone counter's agree. + const profSizes = sel ? [sel.top, sel.pants].filter(Boolean).map(String) : []; + const qaq = qaQ.trim().toLowerCase(); + const selBucket = sel ? groupBucket(sel.group) : ""; + const qaItems = useMemo(() => { + const out: { it: (typeof s.catalog)[number]; rel: boolean }[] = []; + for (const it of s.catalog) { + if (it.archived) continue; + if (qaq && !(it.item.toLowerCase().includes(qaq) || it.sku.toLowerCase().includes(qaq))) continue; + const rel = !sel || (inBucket(it, selBucket || "All groups") && garmentForStyle(it, sel.uniformStyle)); + if (!qaq && !rel) continue; + out.push({ it, rel }); + } + return out.sort((a, b) => (b.rel ? 1 : 0) - (a.rel ? 1 : 0)); + }, [s.catalog, qaq, sel, selBucket]); + const qaCap = qaq ? 14 : 10; + const qaNote = qaItems.length > qaCap ? `Showing ${qaCap} of ${qaItems.length} — type to narrow.` : sel && !qaq ? `Showing items for ${selBucket || "their group"}${sel && sel.uniformStyle && sel.uniformStyle !== UNIFORM_STYLE_EITHER ? `, ${sel.uniformStyle} cut` : ""} — type to search everything.` : ""; + + async function doIssue() { + if (cannot || !sel) return; + setBusy(true); + // Only the ticked box, and only while the box is on the screen. An override says somebody + // knowingly bent a rule, so nothing but a person may set it, and only about the bag they were + // shown: a tick left over from a pickup that has since come back inside six must not travel to + // the record as a decision nobody made about this one. + const r = await mutate<{ stock: number; ordered: number; preloved: number; apDeducted: number; apRemaining: number; offGroup?: number; offStyle?: number }>("issue.create", { staffId: sel.id, override: needsTick && override, apDeduct: ap ? apN : 0, lines: cart }); + setBusy(false); + if (!r.ok) { setIssueMsg(r.error); return; } + const parts = []; + if (r.result.stock) parts.push(`issued ${r.result.stock} from stock — replenishment draft updated on Ordering`); + if (r.result.ordered) parts.push(`ordered ${r.result.ordered} in (arrives to the pickup list)`); + // Free to the ward, and still uniform this person is holding — so it is never said here that a + // pre-loved garment doesn't count. It counts towards the six sets like anything else. + if (r.result.preloved) parts.push(`${r.result.preloved} pre-loved (free — nothing charged to the ward)`); + if (r.result.apDeducted) parts.push(`${r.result.apDeducted} set(s) off the manager's approval — ${r.result.apRemaining} remaining`); + if (r.result.offGroup) parts.push(`${count(r.result.offGroup, "garment", "garments")} outside their staff group, on the override`); + if (r.result.offStyle) parts.push(`${count(r.result.offStyle, "garment", "garments")} not their uniform style, on the override`); + setCart([]); setOverride(false); setApDeduct(null); + setIssueMsg(`Recorded for ${staffName(sel)}: ${parts.join(" · ")} (${money(cartVal)}). Print the receipt, get a signature, then tick “signed”.`); + } + // The slip is signed at the counter, so it has to say what actually crosses it. That is the shelf + // and pre-loved lines together: pre-loved is free, which is why it stays out of what is charged, but + // a free garment is still a garment the nurse walks away with and signs for. Ordered-in lines are + // not on this slip at all — they are not in the bag today, and they get their own collection slip + // off the pickup list when they arrive. + const handed = cart.filter((c) => c.src === "stock" || c.src === "preloved"); + const slipData = () => ({ + staffName: staffName(sel), dept: sel?.dept, sets: handed.reduce((t, c) => t + c.qty, 0), po: "", + // Itemised, so whoever signs can check the bag against the paper instead of trusting a total. + lines: handed.map((c) => `${c.qty} × ${longLabel(byId[c.itemId])} — ${byId[c.itemId]?.sizes[c.si] ?? "?"}${c.src === "preloved" ? " (pre-loved)" : ""}`).join("\n"), + dateReceived: s.today, requestedBy: sel?.num, deliveredBy: s.settings.coordinator, dateTime: s.today }); + const recent = useMemo(() => [...s.issues].filter((i) => !sel || i.staffId === sel.id).sort((a, b) => (b.createdAt > a.createdAt ? 1 : -1)).slice(0, 8), [s.issues, sel]); + + return ( +
    + +
    +
    +
    +
    +
    1 · Staff member
    + {sel &&
    {sel.num}
    } +
    + {!sel ? ( + <> +
    + setStaffQ(e.target.value)} autoFocus /> +
    + {s.staff.length === 0 &&
    No staff on the register yet — add them on the Staff Register screen.
    } + {/* A real button, not a clickable row: this is step one of the counter's whole job, and + a div with an onClick puts it out of reach of the keyboard, of switch access and of + voice control. The styling is the row's, the semantics are the button's. */} +
    + {/* The same standing as the tag once they are picked, so a name that reads fine here + is not refused the moment somebody puts a top in the bag. */} + {matches.map((st) => { const h = heldAll[st.id] || { tops: 0, pants: 0, other: 0, sets: 0 }; const g = standing(h, s.settings.capSets); return ( + + ); })} +
    + + ) : ( +
    +
    +
    {staffName(sel)}
    +
    + Profile + + +
    +
    +
    +
    {sel.group}
    +
    {sel.dept} · Cost centre {ccOf(s, sel) || "—"}
    +
    Sizes: top {sel.top || "—"}, pants {sel.pants || "—"}
    +
    + {/* What they are holding, in sets and in the two halves a set is made of, because the + ceiling bites on each half: somebody with six tops and two pairs is "two sets" and + still cannot be handed a seventh top. The tag says what the counter will do with the + next garment, not how many sets they have — AT LIMIT for six tops and two pairs, and + the sentence names the half that is full. Both are asked of lib/sets, so this screen, + the counter phone, the wearer's app and the server's own refusal cannot answer the + same question differently. */} + {capHeld && selStanding && ( +
    + {selStanding.tag} + Holds {capHeld.sets} of {capHeld.cap} sets — {count(capHeld.tops, "top", "tops")} and {count(capHeld.pants, "pair", "pairs")}{capHeld.other > 0 ? `, plus ${capHeld.other} outside a set` : ""}{capHeld.owed.tops + capHeld.owed.pants + capHeld.owed.other > 0 ? `, ${capHeld.owed.tops + capHeld.owed.pants + capHeld.owed.other} of them still to come` : ""}.{selStanding.over ? " Past what one person holds, so anything more needs a hand-in first or a coordinator override." : selStanding.room ? ` ${selStanding.room[0].toUpperCase()}${selStanding.room.slice(1)} without a hand-in first or a coordinator override.` : ""} +
    + )} + {allow && ( +
    +
    {allowNote}
    + {kitLeft > 0 &&
    Starting kit: {kitLeft} of {initialGarments(s, sel) ?? kitLeft} garments still to issue.
    } + {/* Kept where the linen room can see it, and labelled for what it is. It is the + figure the register and the monthly report quote; nothing on this screen and + nothing on the server turns anybody away on it. */} +
    {used} garment{used === 1 ? "" : "s"} drawn since July — a running total for the reports, not a limit.
    +
    + )} + {/* Sets a manager has already signed off are credit waiting to be spent, so the block + wears the same left rule as anything else on the screen that wants acting on. */} + {ap && ( +
    +
    Manager's approval: {ap.sets - ap.used} of {ap.sets} sets remaining{apRem > ap.sets - ap.used ? ` (+${apRem - (ap.sets - ap.used)} on later approvals)` : ""}
    +
    Approved {fmtDate(ap.date)} by {ap.by || "the manager"}
    + +
    + )} + {lastSet.length > 0 && ( + + )} +
    + )} +
    +
    +
    {sel ? "Their issue history" : "Recent issues"}
    + {recent.length === 0 &&
    {sel ? "Nothing issued yet." : "No issues recorded yet."}
    } +
    + {recent.map((i) => { + const it = byId[i.itemId]; + return ( +
    +
    +
    {label(it)} · {it?.sizes[i.si]} ×{i.qty}
    +
    {fmtDate(i.date)} · {staffName(staffById[i.staffId], "—")}{i.override ? " · override" : ""}{i.offGroup ? " · outside their group" : ""}{i.offStyle ? " · not their style" : ""}{i.direct ? " · pickup" : ""}
    +
    + {i.returned ? Returned : i.handedIn ? Handed in : } + +
    + ); + })} +
    +
    +
    +
    +
    +
    +
    2 · Scan items
    +
    or tap a size below
    +
    +
    + setScan(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter" && scan.trim()) handleScan(scan); }} /> + +
    +
    +
    + Quick add + setQaQ(e.target.value)} /> +
    + {qaItems.length === 0 && {s.catalog.length === 0 ? "The catalogue is empty — import it in Settings → Data." : "No items match."}} + {qaItems.slice(0, qaCap).map(({ it }) => ( +
    +
    {longLabel(it)}
    +
    + {it.sizes.map((sz, si) => { + const inCart = cart.find((c) => c.itemId === it.id && c.si === si); + const usual = profSizes.includes(String(sz)); + return ; + })} +
    +
    + ))} +
    +
    Tap a size to add it — tap again for +1. Outlined = their usual size, solid = in the cart; hover shows on-hand. {qaNote}
    +
    +
    +
    +
    3 · The pickup
    + {cart.length > 0 &&
    {cartQtyAll} item{cartQtyAll === 1 ? "" : "s"}
    } +
    +
    + {cart.map((c, i) => { + const it = byId[c.itemId]; const oh = onhand(s, L, key(c.itemId, c.si)); const pl = plOf(s, key(c.itemId, c.si)); + const setLine = (p: Partial) => setCart(cart.map((x, j) => j === i ? { ...x, ...p } : x)); + const note = c.src === "preloved" ? `${pl} pre-loved on hand` : c.src === "stock" ? `${oh} on hand` : c.src === null ? `${oh} on shelf · ${pl} pre-loved` : `order from ${it?.supplier || "supplier"} — lands in the pickup list when received`; + const mine = sel && it ? [sel.top, sel.pants].filter(Boolean).map(String).filter((x) => it.sizes.map(String).includes(x)) : []; + const sizeHint = it && mine.length && !mine.includes(String(it.sizes[c.si])) ? `Their usual size is ${mine.join(" / ")}` : ""; + const short = (c.src === "stock" && c.qty > oh) || (c.src === "preloved" && c.qty > pl); + return ( +
    +
    +
    {label(it)}
    +
    Size {it?.sizes[c.si]} · {c.src === "preloved" ? "free" : `${money(it?.cost || 0)} each`} · {note}
    + {sizeHint &&
    {sizeHint}
    } + {/* A short line and an unpicked source both stop the issue being recorded, so each + one says so in words on the line it belongs to — the tag carries its own mark, + and the row carries the rule. */} + {c.src === "stock" && c.qty > oh &&
    Not enough on the shelf — switch to order in
    } + {c.src === "preloved" && c.qty > pl &&
    Not enough in the pre-loved pool
    } + {c.src === null &&
    } +
    +
    + {/* Three mutually exclusive choices, so the group is named once and each button + says whether it is the one in force — one
    + + + {c.qty} + + + +
    + ); + })} +
    + {cart.length === 0 &&
    Scan a barcode or choose an item to start a pickup.
    } + {/* The pickup that goes through, said in figures a coordinator can check against the pile on + the counter rather than left as a button that simply doesn't complain. It stands where the + red box used to: somebody collecting more than they expected — a new starter's kit, a + fourth set for somebody on the starting kit — is owed the reason it is allowed, and making them + sign that off as an override taught the linen room to tick the box without reading it. */} + {sel && cap && cart.length > 0 && !overCap && ( +
    +
    Inside what one person holds{needsTick ? "" : " — no override needed"}
    +
    {capLead} After this pickup: {cap.note}
    +
    + )} + {/* One box and one tick for every reason, each reason said in its own words — as the + server's refusal names all of them at once, because one tick answers all of them at + once. The server records the ceiling, the staff group and the cut apart, so the report + can tell them apart too. */} + {needsTick && sel && cap && ( +
    + {overCap && ( + <> +
    +
    {capLead} {cap.note}
    + + )} + {offGroup && ( + <> +
    +
    {offLine}
    + + )} + {offStyle && ( + <> +
    +
    {styleLine}
    + + )} + +
    + )} + {ap && cart.length > 0 && ( +
    + Deduct from the manager's approval: + + {apN} + + sets ({apRem} remaining) +
    + )} + {/* What the bag is worth, at the bottom of the bag. This is the figure the coordinator + reads back before anyone signs, so it is the screen's figure, not a line of small + print in a toolbar. */} +
    +
    +
    {cartQtyAll} item{cartQtyAll === 1 ? "" : "s"} · to charge
    +
    {money(cartVal)}
    +
    {cart.length ? `${nStock} from stock${nPl > 0 ? ` · ${nPl} pre-loved (free)` : ""}${nOrder > 0 ? ` · ${nOrder} ordered in` : ""}` : ""}
    +
    +
    + + + +
    +
    +
    + +
    +
    + {cam && setCam(false)} />} + {bind && setBind("")} onBound={(itemId, si) => addToCart(itemId, si)} />} + {ret && setRet(null)} />} + {handin && sel && setHandin(false)} onDone={(msg) => setIssueMsg(msg)} />} +
    + ); +} diff --git a/app/app/layout.tsx b/app/app/layout.tsx new file mode 100644 index 0000000..5536544 --- /dev/null +++ b/app/app/layout.tsx @@ -0,0 +1,20 @@ +import { redirect } from "next/navigation"; +import { currentUser } from "@/lib/session"; +import { buildSnapshot } from "@/lib/snapshot"; +import { SnapshotProvider } from "@/lib/client"; +import Shell from "@/components/Shell"; +import Analytics from "@/components/Analytics"; + +export const dynamic = "force-dynamic"; + +export default async function AppLayout({ children }: { children: React.ReactNode }) { + const user = await currentUser(); + if (!user) redirect("/auth"); + const snap = await buildSnapshot(user); + return ( + + {children} + + + ); +} diff --git a/app/app/orders/[id]/page.tsx b/app/app/orders/[id]/page.tsx new file mode 100644 index 0000000..e5eacaf --- /dev/null +++ b/app/app/orders/[id]/page.tsx @@ -0,0 +1,374 @@ +"use client"; +import Link from "next/link"; +import { useParams, useRouter } from "next/navigation"; +import { useEffect, useRef, useState } from "react"; +import { useDerived, useSnap } from "@/lib/client"; +import { PageHead, Empty, Field, ItemSizePicker, KpiStrip, LiveRegion } from "@/components/ui"; +import { ReceiveDialog } from "@/components/dialogs"; +import { viewPhoto } from "@/lib/photo"; +import { ccBudgetNote, ccFor, ccOfOrder, csvOf, daysBetween, fmtDate, isOverdue, label, money, orderTotal, staffName, statusTag, supplierInfo, csvEsc } from "@/lib/compute"; +import { downloadCsv, esc, openPrintWindow } from "@/lib/print"; + +export default function OrderDetail() { + const { id } = useParams<{ id: string }>(); + const { s, isAdmin, mutate } = useSnap(); + const { byId, staffById } = useDerived(); + const router = useRouter(); + const o = s.orders.find((x) => x.id === id); + const [rcv, setRcv] = useState(false); + const [err, setErr] = useState(""); + const [pick, setPick] = useState(""); + const [priceDraft, setPriceDraft] = useState>({}); + const [draft, setDraft] = useState>({}); + // What the coordinator has tapped on the quantity steppers but the server hasn't confirmed yet. + // The state is what the screen shows; the ref is what the next tap adds to while it is set, + // because it is current the instant a tap happens, where the state and the snapshot are both a + // render (or a whole round trip) behind. + const [qtyDraft, setQtyDraft] = useState>({}); + const qtyWanted = useRef>({}); + // What the snapshot said about a line as its write came back, and the lines the latest snapshot + // has. Both are read by the backstop below, from a timer: a timer armed two renders ago still + // closes over that render's copy of the order, and judging the screen out of date from a copy + // that is itself out of date is exactly how the pre-tap quantity gets back under a finger. + const qtySeen = useRef>({}); + const snapLines = useRef(o?.lines); + // The field edits a debounce is still sitting on, so leaving the page can send them (see below). + const fieldWanted = useRef>({}); + const timers = useRef>>({}); + /* Anything still in a debounce when this screen goes away is sent, not thrown away. + * + * Clearing the timers on unmount was silent data loss: tap + on a quantity, or type the invoice + * number, then click straight through to another page inside the debounce window and the change + * vanished — it was on the screen as the coordinator left, and the supplier got the old figure. + * The writes go out bare because the component is already gone: there is nothing left to show an + * error in, and the record is one refresh away for whoever opens it next. */ + const flush = useRef<() => void>(() => {}); + useEffect(() => { + flush.current = () => { + for (const [k, v] of Object.entries(fieldWanted.current)) void mutate("order.update", { id, [k]: v }); + for (const [lineId, qty] of Object.entries(qtyWanted.current)) void mutate("order.lineQty", { id, lineId, qty }); + }; + }); + useEffect(() => { const t = timers.current, f = flush; return () => { Object.values(t).forEach(clearTimeout); f.current(); }; }, []); + useEffect(() => { snapLines.current = o?.lines; }); + // Hand a line back to the snapshot once the refreshed snapshot agrees with what was tapped (or + // the line is gone). Waiting for agreement rather than for the write to return matters: the + // provider re-renders on its own the moment a write lands, still carrying the old snapshot, and + // dropping the tapped number there would flick the counter back to the old quantity and again + // look like the taps had been lost. + useEffect(() => { + setQtyDraft((d) => { + const n = Object.fromEntries(Object.entries(d).filter(([k, v]) => { + const line = o?.lines.find((l) => l.id === k); + return qtyWanted.current[k] !== undefined || (!!line && line.qty !== v); + })); + return Object.keys(n).length === Object.keys(d).length ? d : n; + }); + }); + + if (!o) return
    ← All orders
    ; + + const st = o.staffId ? staffById[o.staffId] : undefined; + const overdue = isOverdue(o, s.today); + const forLabel = o.orderFor === "Stock" ? "For stock" : "For " + staffName(st, "staff member"); + const ccCode = ccOfOrder(s, o, staffById); + const ccNote = ccBudgetNote(s, byId, staffById, ccCode, " (incl. this one)"); + + function saveField(k: string, v: string) { + setDraft((d) => ({ ...d, [k]: v })); + fieldWanted.current[k] = v; + clearTimeout(timers.current[k]); + timers.current[k] = setTimeout(async () => { + // Off the pending list the moment it is on its way: a keystroke that lands after this point + // has already put its own value back and scheduled its own timer. + if (fieldWanted.current[k] === v) delete fieldWanted.current[k]; + const r = await mutate("order.update", { id: o!.id, [k]: v }); + if (!r.ok) setErr(r.error); + }, 400); + } + const val = (k: keyof typeof o) => (draft[k] !== undefined ? draft[k] : String(o[k] ?? "")); + /* The order as the coordinator can actually see it: the taps and the typing still sitting in a + * debounce, laid over the snapshot that has not caught up with them yet. + * + * Everything that puts this order in front of a person reads it — the lines, the total, the + * printed purchase order, the CSV, the receive dialog — so what leaves the building says what the + * screen said when it was asked for. Printing from the snapshot sent the supplier a tunic count + * one tap behind. Sending the pending write first would not have fixed it: the refreshed snapshot + * lands some time after the write returns, and the print window has to open on the click itself + * or the browser blocks it. Actions the server answers out of its own copy go through flushQty() + * instead — that is what the database has to be right about. */ + const onScreen = { ...o, ref: val("ref"), invoice: val("invoice"), tracking: val("tracking"), expected: val("expected"), supplier: val("supplier"), notes: val("notes"), lines: o.lines.map((l) => (qtyDraft[l.id] !== undefined ? { ...l, qty: qtyDraft[l.id] } : l)) }; + async function act(op: string, payload: unknown) { setErr(""); const r = await mutate(op, payload); if (!r.ok) setErr(r.error); return r.ok; } + /* Steppers count from what has been tapped, never from the snapshot. + * + * order.lineQty takes an absolute quantity and the snapshot only catches up once a write comes + * back, so reading l.qty on every tap meant six quick taps on the size-14 tunic all posted + * qty: 2: the line settled at 2 or 3 and the purchase order went to the supplier four tunics + * short. Each tap now adds to the pending figure and the debounce sends whatever it reached. + * + * `shown` is the number on the screen, which is the one the coordinator is counting from. It + * matters in the gap between a write landing and the refreshed snapshot arriving: the pending + * figure is cleared the moment the write returns, so a tap in that gap would otherwise fall back + * to the snapshot and count from the old quantity again — the very defect this exists to stop. + * The pending figure still wins where it exists, because two taps in one frame both read the same + * already-rendered number. */ + function bumpQty(lineId: string, shown: number, by: number) { + clearTimeout(timers.current["qtyclear:" + lineId]); + const next = (qtyWanted.current[lineId] ?? shown) + by; + qtyWanted.current[lineId] = next; + setQtyDraft((d) => ({ ...d, [lineId]: next })); + clearTimeout(timers.current["qty:" + lineId]); + timers.current["qty:" + lineId] = setTimeout(() => { void sendQty(lineId); }, 300); + } + async function sendQty(lineId: string) { + const want = qtyWanted.current[lineId]; + if (want === undefined) return true; + clearTimeout(timers.current["qty:" + lineId]); + const ok = await act("order.lineQty", { id: o!.id, lineId, qty: want }); + // A tap that landed while this write was in the air has already raised the target; leaving it + // pending lets the timer that tap scheduled send the higher number instead of losing it here. + if (qtyWanted.current[lineId] === want) { + delete qtyWanted.current[lineId]; + // Nothing was saved, so the tapped number must come off the screen now rather than sit there + // above the error looking like a quantity the supplier is going to be sent. + if (!ok) dropPendingQty(lineId); + else { + qtySeen.current[lineId] = snapLines.current?.find((l) => l.id === lineId)?.qty ?? want; + timers.current["qtyclear:" + lineId] = setTimeout(() => dropOverriddenQty(lineId, want), 2000); + } + } + return ok; + } + /* The backstop for the case where the snapshot never comes to agree — someone else editing the + * same draft line. Without it this screen would keep showing our number over theirs. + * + * It runs on a clock, so it must never act on a snapshot that is merely late. Dropping the draft + * the moment the two seconds were up put the pre-tap quantity back on the screen whenever the + * refreshed snapshot was slower than that, and the next tap counted on from it — the miscount all + * of this exists to stop. A snapshot still showing the figure it had when our write came back, + * and not the figure we wrote, has not caught up yet: the tapped number stays and this waits + * another two seconds. Once it moves — to ours, or to whatever the other coordinator saved — the + * draft has nothing left to protect and goes. */ + function dropOverriddenQty(lineId: string, wrote: number) { + const line = snapLines.current?.find((l) => l.id === lineId); + if (line && line.qty !== wrote && line.qty === qtySeen.current[lineId]) { timers.current["qtyclear:" + lineId] = setTimeout(() => dropOverriddenQty(lineId, wrote), 2000); return; } + dropPendingQty(lineId); + } + // Send anything still sitting in the debounce before an action the server answers out of its own + // copy of the order — it reads the lines the database holds, not the ones on this screen — or + // before one that closes the draft to edits and would have the pending write refused. + async function flushQty() { + for (const lineId of Object.keys(qtyWanted.current)) if (!(await sendQty(lineId))) return false; + return true; + } + function dropPendingQty(lineId: string) { + clearTimeout(timers.current["qty:" + lineId]); + clearTimeout(timers.current["qtyclear:" + lineId]); + delete qtyWanted.current[lineId]; + delete qtySeen.current[lineId]; + setQtyDraft((d) => { const n = { ...d }; delete n[lineId]; return n; }); + } + async function removeLine(lineId: string) { dropPendingQty(lineId); await act("order.lineRemove", { id: o!.id, lineId }); } + /* Every line is priced the way orderTotal() prices it — delivered units at the cost the delivery + * was invoiced at, whatever is still outstanding at today's catalogue price — so the rows a + * coordinator ticks off against the invoice add up to the total printed under them. Pricing the + * rows from the catalogue while the total came from orderTotal() left the two visibly disagreeing + * as soon as a delivery arrived at a different price, on the one screen where that sum is checked. + * + * The amounts come out of orderTotal() itself rather than a second copy of its arithmetic: what + * line n contributes is the total of the first n lines less the total of the first n−1. Asking it + * about a line on its own would not do, because it draws each delivery down across the lines in + * order — two lines for the same size would then both claim the same delivery. */ + const lineAmt: Record = {}; + let runTotal = 0; + for (let i = 0; i < onScreen.lines.length; i++) { const t = orderTotal({ ...onScreen, lines: onScreen.lines.slice(0, i + 1) }, byId); lineAmt[onScreen.lines[i].id] = t - runTotal; runTotal = t; } + const unitOf = (l: { id: string; itemId: string; qty: number }) => (l.qty > 0 ? lineAmt[l.id] / l.qty : byId[l.itemId]?.cost || 0); + const received = (itemId: string, size: string) => o.receipts.reduce((t, r) => t + r.lines.filter((x) => x.itemId === itemId && x.size === size).reduce((a, x) => a + x.qty, 0), 0); + + /* What the delivery docket gets checked against: the units this order asked for and the units + that have actually turned up. Both are read off the same lines the total is priced from, so the + figure above the table can never disagree with the table. */ + const units = onScreen.lines.reduce((t, l) => t + l.qty, 0); + const got = o.receipts.reduce((t, rc) => t + rc.lines.reduce((n, l) => n + l.qty, 0), 0); + const total = orderTotal(onScreen, byId); + + const ev: { date: string; what: string; sub: string; photoId?: string | null }[] = [{ date: o.date, what: "Order created", sub: o.replenish ? "Auto-built replenishment draft" : o.source }]; + if (o.status !== "Draft" && o.status !== "Cancelled") ev.push({ date: o.date, what: "Placed with " + onScreen.supplier + (onScreen.ref ? " — ref " + onScreen.ref : ""), sub: "" }); + for (const rc of o.receipts) ev.push({ photoId: rc.photoId, date: rc.date, what: "Delivery received" + (rc.invoice ? " — invoice " + rc.invoice : ""), sub: rc.lines.map((x) => `${label(byId[x.itemId])} ${x.size} ×${x.qty}${x.dest === "pickup" ? " → pickup" : " → shelf"}`).join(", ") + (rc.note ? " · " + rc.note : "") }); + if (o.status === "Cancelled") ev.push({ date: "", what: "Order cancelled", sub: "" }); + const backOrders = s.orders.filter((x) => x.parentId === o.id); + const parent = o.parentId ? s.orders.find((x) => x.id === o.parentId) : undefined; + + function printPO() { + const sp = supplierInfo(s, onScreen.supplier); + const rows = onScreen.lines.map((l) => { const it = byId[l.itemId]; return `${esc(label(it))}${esc(it?.sku || "—")}${esc(l.size)}${l.qty}${esc(money(unitOf(l)))}${esc(money(lineAmt[l.id]))}`; }).join(""); + const css = ".hd{display:flex;justify-content:space-between;align-items:flex-end;border-bottom:2px solid #201e1d;padding-bottom:8px}.hd h1{border:none;padding:0;font-size:20px}.meta2{display:grid;grid-template-columns:1fr 1fr;gap:4px 24px;margin:12px 0;font-size:12px;line-height:1.7}.tot{text-align:right;font-size:16px;font-weight:800;margin-top:10px}.notes{margin-top:14px;font-size:12px;color:#444}"; + const body = `

    Purchase order — ${esc(onScreen.code)}

    ${esc(s.settings.facility)} · ${esc(s.settings.location)}
    ` + + `
    Supplier: ${esc(onScreen.supplier)}${sp && (sp.contact || sp.phone) ? " · " + esc([sp.contact, sp.phone].filter(Boolean).join(" · ")) : ""}
    Date: ${esc(fmtDate(onScreen.date || s.today))}
    Supplier ref: ${esc(onScreen.ref || "—")}
    Expected: ${esc(onScreen.expected ? fmtDate(onScreen.expected) : "—")}
    Account: ${esc(sp?.account || "—")} · ${esc(forLabel)}
    Cost centre: ${esc(ccCode || "—")}
    ` + + `${rows}
    ItemSKUSizeQtyUnitTotal
    Total ${esc(money(orderTotal(onScreen, byId)))}
    ` + + (onScreen.notes ? `
    Notes: ${esc(onScreen.notes)}
    ` : "") + `
    Ordered by ____________________    Date ____________
    `; + openPrintWindow(onScreen.code, body, { page: "size:A4;margin:16mm", css, width: 780, height: 920 }); + } + function exportCsv() { + downloadCsv(onScreen.code.toLowerCase() + ".csv", `Order,${csvEsc(onScreen.code)}\nSupplier,${csvEsc(onScreen.supplier)}\nRef,${csvEsc(onScreen.ref)}\n\n` + csvOf(["Item", "SKU", "Size", "Qty", "Unit cost", "Total"], onScreen.lines.map((l) => { const it = byId[l.itemId]; return [label(it), it?.sku || "", l.size, l.qty, +unitOf(l).toFixed(2), lineAmt[l.id].toFixed(2)]; }))); + } + async function duplicate() { + if (!(await flushQty())) return; + const r = await mutate<{ id: string }>("order.duplicate", { id: o!.id }); + if (!r.ok) { setErr(r.error); return; } + router.push(`/app/orders/${r.result.id}`); + } + + return ( +
    +
    +
    + {/* Flush with the eyebrow under it: the button's own 14px of padding would otherwise + indent the one thing on the band that has to line up with the order number. */} + ← All orders +
    Supply · Order
    +

    {o.code}

    +
    {forLabel} · {onScreen.supplier} · placed {fmtDate(o.date)}{o.replenish ? " · replenishment" : ""}{parent && <> · back order of {parent.code}}
    +
    +
    + {overdue && Overdue} + {o.status} + + + + {isAdmin && ["Draft", "Ordered", "Back Order", "Shipped"].includes(o.status) && } + {o.status === "Draft" && } + {["Ordered", "Back Order"].includes(o.status) && } + {["Ordered", "Shipped", "Back Order"].includes(o.status) && } +
    +
    + {/* The left rule is what says "something is wrong here" from across the room. The red on its + own would be the same red the status tag beside it wears when an order is merely open. */} + + {/* A late delivery is the one thing on this order somebody has to act on, so the date is + marked the way the rest of the app marks trouble rather than simply turning red — the + status tag two inches above it is already red on every order that is merely open. */} + 0 && got >= units ? "Everything ordered has arrived" : o.status === "Draft" ? "Not sent to the supplier yet" : "Receive a delivery to book the rest in" }, + { val: onScreen.expected ? fmtDate(onScreen.expected) : "—", label: "Expected", flag: overdue, note: overdue ? `${daysBetween(onScreen.expected, s.today)} day${daysBetween(onScreen.expected, s.today) === 1 ? "" : "s"} overdue — ring ${onScreen.supplier}` : onScreen.expected ? "The date the supplier gave" : "No delivery date recorded" }, + ]} /> +
    +
    +
    +
    + Order details + Changes save as you type +
    +
    +
    + {([["ref", "Supplier order no.", "text", "e.g. WWG-48211"], ["invoice", "Invoice no.", "text", "e.g. INV-102938"], ["tracking", "Tracking no.", "text", "e.g. 34XY990812"], ["expected", "Expected delivery", "date", ""]] as const).map(([k, lbl, type, ph]) => ( + {(c) => saveField(k, e.target.value)} />} + ))} + + {(c) => s.settings.suppliers.length ? : saveField("supplier", e.target.value)} />} + + + {(c) => ( + + )} + + + {(c) => ( + + )} + + {ccNote &&
    {ccNote}
    } + {(c) => saveField("notes", e.target.value)} />} +
    +
    +
    +
    +
    + Lines + {units} unit{units === 1 ? "" : "s"} ordered +
    +
    + {onScreen.lines.map((l) => { + const it = byId[l.itemId]; const rec = received(l.itemId, l.size); const cKey = l.id; + const catCost = it ? it.cost : 0; + // What this line is actually worth per unit once a delivery has been invoiced. + const unit = unitOf(l); + return ( +
    +
    +
    {label(it)}
    +
    size {l.size}{rec ? ` · received ${rec}` : ""}{Math.abs(unit - catCost) > 0.004 && · invoice price}
    +
    +
    + {o.status === "Draft" ? ( + + + ×{l.qty} + + + ) : ×{l.qty}} + @ $ + setPriceDraft({ ...priceDraft, [cKey]: e.target.value.replace(/[^0-9.]/g, "") })} + onBlur={async () => { const v = parseFloat(priceDraft[cKey]); if (!isNaN(v) && v >= 0 && Math.abs(v - catCost) > 0.004 && it) { await act("catalog.update", { id: it.id, cost: v }); } const d = { ...priceDraft }; delete d[cKey]; setPriceDraft(d); }} /> + {o.status === "Draft" && o.lines.length > 1 && } +
    +
    {money(l.qty * unit)}
    +
    + ); + })} +
    + {o.status === "Draft" && ( +
    + Add line: + { if (await flushQty()) act("order.lineAdd", { id: o.id, itemId: it.id, size: it.sizes[si], qty: 1 }); }} /> +
    + )} +
    +
    {isAdmin ? "Editing a price updates that item’s catalogue cost everywhere." : "Prices are set by an admin."}
    +
    {money(total)}
    +
    +
    + {backOrders.length > 0 &&
    Back order{backOrders.length > 1 ? "s" : ""}: {backOrders.map((b) => {b.code})}
    } +
    +
    +
    +
    History
    +
    + {ev.map((e, i) => ( +
    +
    {e.date ? fmtDate(e.date) : "—"}
    +
    +
    {e.what}{e.photoId && }
    + {e.sub &&
    {e.sub}
    } +
    +
    + ))} +
    +
    + {st && ( +
    +
    Staff member
    +
    +
    {staffName(st)} {st.num}
    +
    {st.dept} · {st.phone || "no phone"}
    +
    +
    + )} + {isAdmin && o.status === "Draft" && o.replenish && ( +
    This draft grows as stock is issued — mark it ordered when you send it to {onScreen.supplier}.
    + )} +
    +
    + {rcv && { setRcv(false); router.refresh(); }} />} +
    + ); +} diff --git a/app/app/orders/page.tsx b/app/app/orders/page.tsx new file mode 100644 index 0000000..28a5c8c --- /dev/null +++ b/app/app/orders/page.tsx @@ -0,0 +1,177 @@ +"use client"; +import Link from "next/link"; +import { useMemo, useState } from "react"; +import { useDerived, useSnap } from "@/lib/client"; +import { PageHead, Empty, KpiStrip, Seg } from "@/components/ui"; +import { NewOrderDialog } from "@/components/dialogs"; +import { ccOfOrder, csvOf, daysBetween, fmtDate, isOpen, isOverdue, isPlacedOpen, label, money, onhand, orderTotal, reorderAt, staffName, statusTag, touched } from "@/lib/compute"; +import { downloadCsv } from "@/lib/print"; + +const STATUSES = ["All", "Draft", "Open", "Received"] as const; + +export default function OrdersPage() { + const { s, mutate } = useSnap(); + const [flagMsg, setFlagMsg] = useState(""); + const { L, byId, staffById, variants } = useDerived(); + const [dlg, setDlg] = useState(null); + const [q, setQ] = useState(""); + const [sup, setSup] = useState("All suppliers"); + const [status, setStatus] = useState<(typeof STATUSES)[number]>("All"); + + const suggested = useMemo(() => { + const out: { itemId: string; size: string; lbl: string; oh: number; ro: number; sugg: number }[] = []; + for (const v of variants) { + const oh = onhand(s, L, v.key), ro = reorderAt(s, v.key); + if (!touched(s, L, v.key) || oh > ro) continue; + const onOrder = s.orders.some((o) => isOpen(o) && o.lines.some((l) => l.itemId === v.itemId && l.size === v.size)); + if (!onOrder) out.push({ itemId: v.itemId, size: v.size, lbl: label(v.item), oh, ro, sugg: Math.max(ro * 2 - oh, 1) }); + } + return out; + }, [s, L, variants]); + + const kpi = useMemo(() => { + const drafts = s.orders.filter((o) => o.status === "Draft").length; + const open = s.orders.filter(isPlacedOpen); + const overdue = s.orders.filter((o) => isOverdue(o, s.today)).length; + const monthVal = s.orders.filter((o) => o.status === "Received" && o.received.slice(0, 7) === s.today.slice(0, 7)).reduce((t, o) => t + orderTotal(o, byId), 0); + return { drafts, open: open.length, openVal: open.reduce((t, o) => t + orderTotal(o, byId), 0), overdue, monthVal }; + }, [s, byId]); + + const supOpts = ["All suppliers", ...new Set(s.orders.map((o) => o.supplier).filter(Boolean))]; + const rank = (o: (typeof s.orders)[number]) => (o.status === "Draft" ? 0 : isPlacedOpen(o) ? 1 : o.status === "Received" ? 2 : 3); + const ql = q.trim().toLowerCase(); + const orders = s.orders.filter((o) => { + if (sup !== "All suppliers" && o.supplier !== sup) return false; + if (status === "Draft" && o.status !== "Draft") return false; + if (status === "Open" && !isPlacedOpen(o)) return false; + if (status === "Received" && o.status !== "Received") return false; + if (ql) { const st = o.staffId ? staffById[o.staffId] : undefined; const hay = `${o.code} ${o.ref} ${o.invoice} ${o.tracking} ${o.supplier} ${staffName(st)}`.toLowerCase(); if (!hay.includes(ql)) return false; } + return true; + }).sort((a, b) => rank(a) - rank(b) || (a.date < b.date ? 1 : a.date > b.date ? -1 : 0)); + + const narrowed = ql !== "" || sup !== "All suppliers" || status !== "All"; + /* This list is the view somebody reads to answer "what is still outstanding?" or "what did we + order this quarter?", and the only way to get any of it out of ThreadCount was to open one + order at a time and export each. The file is the rows on screen — the search, the supplier and + the status tab all apply — because a coordinator who has narrowed to one supplier means that + supplier, not three years of ordering. + + Value is orderTotal(), never quantity times catalogue price. orderTotal prices what has already + been delivered at the cost the delivery was invoiced at and only the rest at today's catalogue + price; multiplying it out here would mean the finance spreadsheet disagreed with the order + screen, Reports and the dashboard the moment an admin edited a price — the exact fault that was + just fixed everywhere else. + + Dates go out in the stored form (2026-09-11), not as the screen prints them, so a spreadsheet + sorts and filters them as dates. Order notes are left out: they carry remarks for the linen + room — a supplier dispute, a substitution offered — they are not on this screen, and the screen + is the limit of what Export hands over. */ + function exportCsv() { + // Ordered for and Staff member are split apart because the screen's single line ("For stock", + // "For Jane Doe") can't be filtered on in a spreadsheet. Units ordered against Units received is + // what makes a part-delivered order visible in the file, the way the Overdue tag makes a late + // one visible here. + const cols = ["Order no.", "Status", "Ordered", "Supplier", "Ordered for", "Staff member", "Supplier ref", "Invoice", "Tracking", "Cost centre", "Replenishment", "Expected", "Days overdue", "Received", "Lines", "Units ordered", "Units received", "Value"]; + downloadCsv(`threadcount-orders-${s.today}.csv`, csvOf(cols, orders.map((o) => { + const st = o.staffId ? staffById[o.staffId] : undefined; + const units = o.lines.reduce((t, l) => t + l.qty, 0); + const got = o.receipts.reduce((t, rc) => t + rc.lines.reduce((n, l) => n + l.qty, 0), 0); + return [o.code, o.status, o.date, o.supplier, o.orderFor === "Stock" ? "Stock" : "Staff member", staffName(st), o.ref, o.invoice, o.tracking, ccOfOrder(s, o, staffById), o.replenish ? "Yes" : "No", o.expected, isOverdue(o, s.today) ? daysBetween(o.expected, s.today) : "", o.received, o.lines.length, units, got, +orderTotal(o, byId).toFixed(2)]; + }))); + } + + return ( +
    + + + + + {/* Every open order on this screen already wears the brand red on its status tag, so a red + figure on its own would say nothing here. Overdue earns the rule and the mark instead, and + only when something is actually late. */} + 0, note: kpi.overdue > 0 ? "Past the date the supplier gave" : "Everything open is still within its expected date" }, + { val: money(kpi.monthVal), label: "Received this month", note: "Delivered stock, priced as invoiced" }, + ]} /> +
    + setQ(e.target.value)} /> + + +
    + {suggested.length > 0 && ( + /* Stock at or below its reorder level is the one thing on this screen that has to be acted + on today, so it is marked the way everything else that wants attention is marked — the + rule down the edge and the mark beside the word — rather than by being the only red box + on a screen that already has red status tags on it. */ +
    +
    + + {suggested.length} line{suggested.length === 1 ? "" : "s"} at or below reorder level +
    +
    + {suggested.slice(0, 10).map((x, i) => ( +
    +
    +
    {x.lbl} · {x.size}
    +
    on hand {x.oh} · reorder at {x.ro}
    +
    +
    +{x.sugg}
    +
    + ))} +
    +
    +
    + {suggested.length > 10 && <>+{suggested.length - 10} more lines. } + Adds each line to its supplier's replenishment draft, topping up to 2× the reorder level and netting off stock already on order.{flagMsg && {flagMsg}} +
    + +
    +
    + )} +
    +
    + Orders + {orders.length} of {s.orders.length} orders{orders.length > 0 ? " · Export CSV writes these" : ""} +
    + {orders.length === 0 &&
    {s.orders.length === 0 ? "No orders yet." : "No orders match this filter."}
    } +
    + {orders.map((o) => { + const st = o.staffId ? staffById[o.staffId] : undefined; + const overdue = isOverdue(o, s.today); + /* "1 days overdue" is the kind of thing that makes a screen look unfinished, and a date + printed for today or yesterday makes you do arithmetic to work out what it means. The + two nearest days get named instead; anything further out is a count of days, plural + only when it is one. */ + const late = overdue ? daysBetween(o.expected, s.today) : 0; + const due = overdue + ? late === 1 ? "due yesterday" : `${late} days overdue` + : isPlacedOpen(o) && o.expected + ? o.expected === s.today ? "due today" : `due ${fmtDate(o.expected)}` + : ""; + return ( + +
    +
    {o.code}
    +
    + {o.orderFor === "Stock" ? "For stock" : "For " + staffName(st, "staff member")} · {o.supplier} · {fmtDate(o.date)}{o.ref ? " · ref " + o.ref : ""} + {/* No mark here: the Overdue tag across the row already carries one, and the + same signal twice on one line reads as two different problems. */} + {due && <> · {due}} +
    +
    + {o.replenish && Replenishment} + {overdue && Overdue} + {o.status} +
    {money(orderTotal(o, byId))}
    + + + ); + })} +
    +
    + {dlg === "new" && setDlg(null)} />} +
    + ); +} diff --git a/app/app/page.tsx b/app/app/page.tsx new file mode 100644 index 0000000..6ef2074 --- /dev/null +++ b/app/app/page.tsx @@ -0,0 +1,178 @@ +"use client"; +import Link from "next/link"; +import { useEffect, useMemo, useState } from "react"; +import { useDerived, useSnap } from "@/lib/client"; +import { PageHead, Empty, ErrorLine, KpiStrip } from "@/components/ui"; +import { NewOrderDialog, openSlip } from "@/components/dialogs"; +import { capState, daysBetween, fyStart, heldByStaff, isOpen, isOverdue, label, money, onhand, orderTotal, reorderAt, setsCap, staffName, touched, telHref, type GarmentCounts } from "@/lib/compute"; + +/** Somebody with nothing out and nothing owed. heldByStaff only lists people holding something, and + * they have to be read as holding none rather than skipped. */ +const NOTHING: GarmentCounts = { tops: 0, pants: 0, other: 0, sets: 0 }; + +export default function Dashboard() { + const { s, mutate } = useSnap(); + const { L, byId, staffById, variants } = useDerived(); + const [newOrder, setNewOrder] = useState(false); + const [welcome, setWelcome] = useState(false); + const [err, setErr] = useState(""); + useEffect(() => { if (new URLSearchParams(window.location.search).get("welcome") === "1") setWelcome(true); }, []); + + // The call list is the one place two people work the same rows at once — one marks a bag + // collected at the counter while somebody else is still on the phone about it. A refusal there + // has to be said out loud, or the second click reads as the first one not having taken. + async function act(op: string, payload: unknown) { setErr(""); const r = await mutate(op, payload); if (!r.ok) setErr(r.error); } + + const d = useMemo(() => { + const openOrders = s.orders.filter(isOpen); + const overdue = s.orders.filter((o) => isOverdue(o, s.today)); + const pickupQ = s.pickups.filter((p) => !p.pickedUp); + const wait14 = pickupQ.filter((p) => daysBetween(p.received, s.today) >= 14); + // Spend = orders actually placed this month (drafts, incl. auto-replenishment, are not spend yet). + const mtd = s.orders.filter((o) => o.date.slice(0, 7) === s.today.slice(0, 7) && o.status !== "Cancelled" && o.status !== "Draft" && !o.parentId).reduce((t, o) => t + orderTotal(o, byId), 0); + const lowRows: { label: string; size: string; onhand: number; reorder: number }[] = []; + for (const v of variants) { const oh = onhand(s, L, v.key), ro = reorderAt(s, v.key); if (touched(s, L, v.key) && oh <= ro) lowRows.push({ label: label(v.item), size: v.size, onhand: oh, reorder: ro }); } + // Who holds more than one person holds: what is out with them and what is owed to them, against + // six sets at any time. Asked exactly the way the staff register asks it, so the two screens + // always give the same count. It is not what anybody drew this year. By that measure a new + // starter handed three sets on Monday has had a year's worth and is nowhere near the ceiling, and + // a tile calling her over sends a coordinator after somebody the counter would serve without a + // second look. + // + // There is no "nearly there" count beside it. Holding the full six is where somebody fully kitted + // is meant to be, not a warning, so on a settled ward it would be most of the ward. + const held = heldByStaff(s); + const over = s.staff.filter((st) => !st.inactive && capState({ held: held[st.id] || NOTHING, capSets: s.settings.capSets }).over).length; + const cap = setsCap(s.settings.capSets); + const fy = fyStart(s.today); + return { openOrders, overdue, pickupQ, wait14, mtd, lowRows, over, cap, fy }; + }, [s, L, byId, variants]); + + /* The tiles are the read from the doorway: four things somebody has to act on today. Each one is + either quiet or flagged, and a flagged tile says so three ways — a rule down its edge, a mark + against the figure, and a note in plain words — because the vermilion is already the brand + colour on the rail and on every primary button, and a second red across the room is a guess + rather than a signal. + + Nothing on a tile is repeated in the registers below it. A figure printed twice on one screen is + two chances to disagree, and the linen room reads whichever one it happened to land on. */ + const tiles = [ + { label: "Awaiting pickup", val: d.pickupQ.length, note: d.wait14.length ? `${d.wait14.length} waiting a fortnight or more` : "bags received and not collected", flag: d.wait14.length > 0 }, + { label: "Overdue for delivery", val: d.overdue.length, note: d.overdue.length ? "past the date the supplier gave" : "nothing past its delivery date", flag: d.overdue.length > 0 }, + { label: "Lines at reorder", val: d.lowRows.length, note: d.lowRows.length ? "at or below their reorder level" : "every line above its reorder level", flag: d.lowRows.length > 0 }, + { label: "Over the ceiling", val: d.over, note: d.over ? `past the ${d.cap} sets one person holds` : `nobody past the ${d.cap} sets one person holds`, flag: d.over > 0 }, + ]; + + // The facts that are not a task: true of the facility, worth a glance, never the reason somebody + // walks to the counter. Three registers, one per part of the job. + const registers: { title: string; rows: [string, React.ReactNode][] }[] = [ + { title: "Orders", rows: [["Open orders", d.openOrders.length], ["Month-to-date spend", money(d.mtd)]] }, + { title: "Stock", rows: [ + ["Pre-loved pool", (() => { let u = 0, sz = 0; for (const k in s.stock) if (s.stock[k].preloved > 0) { u += s.stock[k].preloved; sz++; } return u ? `${u} across ${sz} size${sz === 1 ? "" : "s"}` : "0"; })()], + ["Issues recorded (FY)", s.issues.filter((i) => i.date >= d.fy).length], + ["Stocktake adjustments", Object.values(s.stock).filter((x) => x.adj).length], + ] }, + // "Receipts not yet signed" reads handedIn as well as returned: a garment handed back at the + // counter is stamped handedIn and never gets a returned date, so it can never be signed for. + // Counting those made the figure a queue that only ever grew, which is how a number the linen + // room is meant to work down stops being read at all. + { title: "Staff", rows: [["On the register", s.staff.filter((st) => !st.inactive).length], ["Receipts not yet signed", s.issues.filter((i) => !i.receipt && !i.returned && !i.handedIn).length]] }, + ]; + + const tasks = d.pickupQ.map((p) => ({ p, st: staffById[p.staffId], days: daysBetween(p.received, s.today) })).sort((a, b) => b.days - a.days); + const setupNeeded = s.catalog.length === 0 || s.staff.length === 0; + + return ( +
    + ); +} diff --git a/app/app/report/page.tsx b/app/app/report/page.tsx new file mode 100644 index 0000000..f303ae1 --- /dev/null +++ b/app/app/report/page.tsx @@ -0,0 +1,537 @@ +"use client"; +import { useMemo, useState } from "react"; +import { useDerived, useSnap } from "@/lib/client"; +import { PageHead, Dialog, Empty, KpiStrip, th } from "@/components/ui"; +import { ccOf, countsAsIssued, csvEsc, csvOf, fmtDate, fyStart, issueCost, label, longLabel, money, monthLabel, onhand, orderTotal, prevMonth, setsCap, shiftMonth, signedInt, signedMoney, staffName } from "@/lib/compute"; +import { downloadCsv, printDoc, tbl, type Col } from "@/lib/print"; + +const TABS = ["Overview", "Journal", "Top stock", "Valuation", "Shrinkage", "Exceptions", "Suppliers", "Approvals", "Pre-loved"] as const; +type Tab = (typeof TABS)[number]; + +/* Every table and every list on this screen sits in the same bordered block with its name across + the top, because nine tabs that each invent their own heading is how a month-end pack ends up + looking like nine different reports. `flag` is for the tab that is telling finance something is + wrong — an unpostable journal line, stock gone missing, a garment handed over past the ceiling — + and marks it the way the rest of the app marks trouble: a rule down the edge and a mark beside + the name, so it does not rely on a red that is also the brand's. */ +function Panel({ title, aside, right, flag, children }: { title: React.ReactNode; aside?: React.ReactNode; right?: React.ReactNode; flag?: boolean; children: React.ReactNode }) { + return ( +
    +
    + {flag && + {(aside || right) && {aside && {aside}}{right}} +
    + {children} +
    + ); +} + +export default function ReportPage() { + const { s } = useSnap(); + const { L, byId, staffById } = useDerived(); + const [month, setMonth] = useState(s.today.slice(0, 7)); + const [tab, setTab] = useState("Overview"); + // The cost centre whose issues are open, as the keys its figure was summed from. Only the keys + // are held: the items and the money are recounted from the snapshot on every render, so the + // drill-down still agrees with the row underneath it if stock moves while the dialog is open. + const [drill, setDrill] = useState<{ cc: string; dept: string; keys: string[] } | null>(null); + + const R = useMemo(() => { + const months = new Set([s.today.slice(0, 7)]); + s.issues.forEach((i) => months.add(i.date.slice(0, 7))); s.orders.forEach((o) => o.date && months.add(o.date.slice(0, 7))); + for (let i = 5; i >= 0; i--) months.add(shiftMonth(month, -i)); // trend bars are clickable, so they must be selectable + const repMonths = [...months].sort().reverse(); + const cost = (itemId: string) => byId[itemId]?.cost || 0; // catalogue cost (stocktake lines, valuation) + const mIssues = s.issues.filter((i) => i.date.slice(0, 7) === month && countsAsIssued(i) && !i.preloved); + const mPl = s.issues.filter((i) => i.date.slice(0, 7) === month && countsAsIssued(i) && i.preloved); + const pm = prevMonth(month); + const pIssues = s.issues.filter((i) => i.date.slice(0, 7) === pm && countsAsIssued(i) && !i.preloved); + // Pre-loved: free reissues (value saved at catalogue cost), hand-ins, and the pool at $0. + const plIssueRows = mPl.map((i) => { const it = byId[i.itemId]; return { date: i.date, who: staffName(staffById[i.staffId], "—"), item: label(it), size: it ? String(it.sizes[i.si]) : "?", qty: i.qty, saved: i.qty * (it?.cost || 0) }; }); + const plSaved = plIssueRows.reduce((t, r) => t + r.saved, 0), plQty = mPl.reduce((t, i) => t + i.qty, 0); + const mHi = s.handins.filter((h) => h.date.slice(0, 7) === month); + const hiRows = mHi.map((h) => ({ date: h.date, who: staffName(staffById[h.staffId], "—"), by: h.by, good: h.lines.filter((l) => l.cond === "Good").reduce((t, l) => t + l.qty, 0), rag: h.lines.filter((l) => l.cond === "Rag").reduce((t, l) => t + l.qty, 0), credit: h.credit ? "Credited" : "—" })); + const ragMonth = hiRows.reduce((t, r) => t + r.rag, 0); + const plByItem: Record = {}; + for (const k in s.stock) { const n = s.stock[k].preloved; if (!(n > 0)) continue; const itemId = k.slice(0, k.lastIndexOf(":")), si = +k.slice(k.lastIndexOf(":") + 1); const it = byId[itemId]; if (!it) continue; (plByItem[itemId] = plByItem[itemId] || []).push(`${it.sizes[si]} ×${n}`); } + const plPoolRows = Object.keys(plByItem).map((itemId) => ({ item: label(byId[itemId]), sizes: plByItem[itemId].join(", "), total: plByItem[itemId].reduce((t, x) => t + parseInt(x.split("×")[1], 10), 0) })); + const plPoolTotal = plPoolRows.reduce((t, r) => t + r.total, 0); + type Agg = { items: number; amt: number }; + const sumBy = (arr: typeof mIssues, keyFn: (i: (typeof arr)[number]) => string) => { const m: Record = {}; for (const i of arr) { const k = keyFn(i); if (!m[k]) m[k] = { items: 0, amt: 0 }; m[k].items += i.qty; m[k].amt += i.qty * issueCost(i, byId); } return m; }; + const ccKey = (i: (typeof mIssues)[number]) => { const st = staffById[i.staffId]; return st ? (ccOf(s, st) || "—") + "|" + (st.dept || "Unknown") : "—|Unknown"; }; + const byCC = sumBy(mIssues, ccKey), byCCPrev = sumBy(pIssues, ccKey); + // Union of this month's and last month's cost centres so the Prev column reconciles to the previous-month total. + const ccKeys = [...new Set([...Object.keys(byCC), ...Object.keys(byCCPrev)])]; + const ccRows = ccKeys.map((k) => { const v = byCC[k] || { items: 0, amt: 0 }; const [cc, dept] = k.split("|"); const prev = byCCPrev[k]?.amt || 0; return { key: k, cc, dept, items: v.items, amt: v.amt, prev, delta: v.amt - prev }; }).sort((a, b) => b.amt - a.amt || b.prev - a.prev); + // What each cost-centre figure is actually made of, filed under the same key the total was + // grouped on. Grouping the detail the same way as the total is what stops a drill-down from + // disagreeing with the row that opened it — a ward manager checking their number would rather + // have no drill-down than one that doesn't add up. + const ccLines: Record = {}; + for (const i of mIssues) { const k = ccKey(i); const it = byId[i.itemId]; const unit = issueCost(i, byId); (ccLines[k] = ccLines[k] || []).push({ date: i.date, who: staffName(staffById[i.staffId], "—"), item: label(it), size: it ? String(it.sizes[i.si]) : "?", qty: i.qty, unit, amt: i.qty * unit }); } + const totAmt = mIssues.reduce((t, i) => t + i.qty * issueCost(i, byId), 0), totPrev = pIssues.reduce((t, i) => t + i.qty * issueCost(i, byId), 0), totItems = mIssues.reduce((t, i) => t + i.qty, 0); + // "Placed" = sent to the supplier; drafts (incl. auto-replenishment) are not spend yet. + // Back orders carry the parent's short lines, so they're excluded from spend to avoid counting those lines twice. + const placed = (o: (typeof s.orders)[number]) => o.status !== "Cancelled" && o.status !== "Draft" && !o.parentId; + const mOrders = s.orders.filter((o) => o.date.slice(0, 7) === month && placed(o)); + const ordSpend = mOrders.reduce((t, o) => t + orderTotal(o, byId), 0); + const byG = sumBy(mIssues, (i) => staffById[i.staffId]?.group || "Unknown"); + const groupRows = Object.entries(byG).sort((a, b) => b[1].amt - a[1].amt).map(([g, v]) => ({ g, ...v })); + const supAgg: Record = {}; + for (const o of mOrders) { const v = orderTotal(o, byId); if (!supAgg[o.supplier]) supAgg[o.supplier] = { n: 0, amt: 0, inv: [] }; supAgg[o.supplier].n++; supAgg[o.supplier].amt += v; if (o.invoice && !supAgg[o.supplier].inv.includes(o.invoice)) supAgg[o.supplier].inv.push(o.invoice); for (const rc of o.receipts) if (rc.invoice && !supAgg[o.supplier].inv.includes(rc.invoice)) supAgg[o.supplier].inv.push(rc.invoice); } + const supRows = Object.entries(supAgg).sort((a, b) => b[1].amt - a[1].amt).map(([name, v]) => ({ name, n: v.n, amt: v.amt, invoices: v.inv.join(", ") || "—" })); + const issueAgg = (m: string) => { const a = s.issues.filter((i) => i.date.slice(0, 7) === m && countsAsIssued(i) && !i.preloved); return { items: a.reduce((t, i) => t + i.qty, 0), amt: a.reduce((t, i) => t + i.qty * issueCost(i, byId), 0) }; }; + const orderAgg = (m: string) => s.orders.filter((o) => o.date.slice(0, 7) === m && placed(o)).reduce((t, o) => t + orderTotal(o, byId), 0); + const fyMonths: string[] = []; { let cur = fyStart(month + "-15").slice(0, 7); let g = 0; while (cur <= month && g++ < 13) { fyMonths.push(cur); cur = shiftMonth(cur, 1); } } + let fti = 0, fta = 0, fto = 0; + const fyRows = fyMonths.map((m) => { const ia = issueAgg(m); const ov = orderAgg(m); fti += ia.items; fta += ia.amt; fto += ov; return { m, label: monthLabel(m, { month: "short", year: "2-digit" }), items: ia.items, issued: ia.amt, orders: ov }; }); + const trendM: string[] = []; for (let i = 5; i >= 0; i--) trendM.push(shiftMonth(month, -i)); + const tv = trendM.map((m) => issueAgg(m).amt); const tmax = Math.max(...tv, 1); + const trend = trendM.map((m, i) => ({ m, label: monthLabel(m, { month: "short" }), amt: tv[i], h: tv[i] ? Math.max(Math.round((tv[i] / tmax) * 70), 4) : 2, sel: m === month })); + const byS = sumBy(mIssues, (i) => i.staffId); + const staffRows = Object.entries(byS).sort((a, b) => b[1].amt - a[1].amt).map(([sid, v]) => { const st = staffById[sid]; return { who: staffName(st, "—"), cc: ccOf(s, st), ...v }; }); + // Journal + const glAcct = s.settings.glAccount || "—"; + const jnDesc = `${s.settings.journalDesc || "Uniform issues"} ${monthLabel(month)}`; + // One debit per cost centre: departments that share a CC (or a ccOverride pointing at another dept's code) fold together. + const jnAgg: Record = {}; + for (const r of ccRows) { if (r.items <= 0) continue; const cc = r.cc === "—" ? "UNALLOCATED" : r.cc; const a = jnAgg[cc] || (jnAgg[cc] = { cc, depts: [], keys: [], items: 0, debit: 0 }); if (!a.depts.includes(r.dept)) a.depts.push(r.dept); a.keys.push(r.key); a.items += r.items; a.debit += r.amt; } + const jnRows = Object.values(jnAgg).sort((a, b) => b.debit - a.debit).map((a) => ({ cc: a.cc, dept: a.depts.join(" / "), keys: a.keys, gl: glAcct, desc: jnDesc, items: a.items, debit: a.debit })); + const jnUnallocated = jnRows.some((r) => r.cc === "UNALLOCATED"); + // Top stock + const byItem: Record = {}; const fyByItem: Record = {}; + const fy = fyStart(month + "-15"); // financial year of the selected month + // Every FY figure on this page — Top stock's, Exceptions' and Shrinkage's — stops at the end of + // the selected month. Without the upper bound, reprinting June's pack in September counts three + // months that hadn't happened when June closed, so the reprint no longer agrees with the pack + // finance was already given. + const fyCutoff = shiftMonth(month, 1) + "-01"; // exclusive: dates in `month` sort before it + for (const i of mIssues) { if (!byItem[i.itemId]) byItem[i.itemId] = { items: 0, amt: 0 }; byItem[i.itemId].items += i.qty; byItem[i.itemId].amt += i.qty * issueCost(i, byId); } + for (const i of s.issues) if (countsAsIssued(i) && !i.preloved && i.date >= fy && i.date < fyCutoff) fyByItem[i.itemId] = (fyByItem[i.itemId] || 0) + i.qty; + const mTotQty = Object.values(byItem).reduce((t, v) => t + v.items, 0); + const topRows = Object.entries(byItem).sort((a, b) => b[1].items - a[1].items).slice(0, 15).map(([id, v], n) => ({ n: n + 1, item: label(byId[id]), supplier: byId[id]?.supplier || "—", qty: v.items, val: v.amt, share: Math.round((v.items / Math.max(mTotQty, 1)) * 100) + "%", fyQty: fyByItem[id] || 0 })); + // Valuation + let negSizes = 0; + const valRows = s.catalog.map((it) => { const units = it.sizes.reduce((t, _sz, si) => { const oh = onhand(s, L, `${it.id}:${si}`); if (oh < 0) negSizes++; return t + Math.max(0, oh); }, 0); return { item: longLabel(it), sku: it.sku || "—", supplier: it.supplier || "—", units, cost: it.cost, val: units * it.cost }; }).filter((x) => x.units > 0).sort((a, b) => b.val - a.val); + const valTotUnits = valRows.reduce((t, x) => t + x.units, 0), valTot = valRows.reduce((t, x) => t + x.val, 0); + // Shrinkage + // Bounded at fyCutoff like the other FY figures: a count filed in July must not change the + // shrinkage figure on June's pack after finance has it. Pool counts are at $0, not shrinkage. + const fyTakes = s.stocktakes.filter((h) => h.date >= fy && h.date < fyCutoff && h.mode !== "preloved"); + let shU = 0, shV = 0; + const shRows = fyTakes.map((h) => { const nu = h.lines.reduce((t, l) => t + (l.counted - l.sys), 0); const nv = h.lines.reduce((t, l) => t + (l.counted - l.sys) * cost(l.itemId), 0); shU += nu; shV += nv; return { date: h.date, by: h.by, counted: h.counted, variances: h.variances, net: nu, netVal: nv }; }); + // Exceptions + const excThreshold = s.settings.exceptionHigh || 10; + const mByStaff: Record = {}; for (const i of mIssues) mByStaff[i.staffId] = (mByStaff[i.staffId] || 0) + i.qty; + const cap = setsCap(s.settings.capSets); + // Garments handed over this month past the six sets one person holds, on a coordinator's + // override. That is the one exception the ceiling itself produces, and the counter stamps it on + // the issue for this tab to find. It is read from that stamp rather than from anybody's locker + // today, because today's locker is not June's: a June pack reprinted in September would name + // whoever happens to be past the ceiling now, and saying who that is belongs to the staff + // register and the dashboard. Every stamped row in the month counts, pre-loved and since-returned + // included, because the decision was made at the counter on the day. A partial hand-in splits a + // row without changing its date, so the halves still add up to what went over. + const ovByStaff: Record = {}; + for (const i of s.issues) if (i.override && i.date.slice(0, 7) === month) ovByStaff[i.staffId] = (ovByStaff[i.staffId] || 0) + i.qty; + // Garments handed over this month outside the person's staff group, on the same tick but stamped + // apart (offGroup), so they are counted and named apart. Same month rule as above. A garment can + // be both, and then it is on both lines, because two rules were bent. + const ogByStaff: Record> = {}; + for (const i of s.issues) if (i.offGroup && i.date.slice(0, 7) === month) { const m = (ogByStaff[i.staffId] = ogByStaff[i.staffId] || {}); const n = label(byId[i.itemId]); m[n] = (m[n] || 0) + i.qty; } + // Garments handed over this month in a cut the person isn't offered, on the same tick and stamped + // apart again (offStyle). Same month rule, and the same reason for counting it apart: the ceiling, + // the staff group and the cut are three different decisions a coordinator made, and a row that + // named them all as "an override" tells whoever reads the pack nothing about which was bent. + const osByStaff: Record> = {}; + for (const i of s.issues) if (i.offStyle && i.date.slice(0, 7) === month) { const m = (osByStaff[i.staffId] = osByStaff[i.staffId] || {}); const n = label(byId[i.itemId]); m[n] = (m[n] || 0) + i.qty; } + // What each person has drawn this financial year, to the end of the selected month. It is a + // tally printed beside the month's figure, and nobody is flagged on it: what anybody may have is + // six sets held at any time, with no year in it, and a report calling somebody over on a yearly + // count sends a coordinator after a new starter the counter has kitted out quite properly. + // Counted here rather than with entUsed(), which always measures the year containing today, so a + // closed month reprints with the figures it was first printed with. fyCutoff is the one Top + // stock and Shrinkage count to, so no two tabs quote a different window for the same month. Same + // rules as entUsed(): pre-loved is free and not counted, a garment returned in good condition + // never counted, and a credited hand-in takes the good garments back off. + const fyByStaff: Record = {}; + for (const i of s.issues) if (!i.preloved && countsAsIssued(i) && i.date >= fy && i.date < fyCutoff) fyByStaff[i.staffId] = (fyByStaff[i.staffId] || 0) + i.qty; + for (const h of s.handins) if (h.credit && h.date >= fy && h.date < fyCutoff) for (const l of h.lines) fyByStaff[h.staffId] = (fyByStaff[h.staffId] || 0) - l.credited; + const excRows: { who: string; group: string; cc: string; mQty: number; fyQty: number; ovQty: number; ogQty: number; osQty: number; flags: string[]; flag: string }[] = []; + for (const st of s.staff) { + const fyQ = Math.max(0, fyByStaff[st.id] || 0); const mQ = mByStaff[st.id] || 0; const ov = ovByStaff[st.id] || 0; + const og = Object.entries(ogByStaff[st.id] || {}); const ogQ = og.reduce((t, [, n]) => t + n, 0); + const os = Object.entries(osByStaff[st.id] || {}); const osQ = os.reduce((t, [, n]) => t + n, 0); + const flags: string[] = []; + if (ov) flags.push(`Past ${cap} sets on an override — ${ov} garment${ov === 1 ? "" : "s"}`); + if (ogQ) flags.push(`Outside their staff group on an override — ${og.map(([n, q]) => `${n} ×${q}`).join(", ")}`); + if (osQ) flags.push(`Not their uniform style on an override — ${os.map(([n, q]) => `${n} ×${q}`).join(", ")}`); + if (mQ >= excThreshold) flags.push(`${mQ} items this month (threshold ${excThreshold})`); + if (flags.length) excRows.push({ who: staffName(st), group: st.group, cc: ccOf(s, st), mQty: mQ, fyQty: fyQ, ovQty: ov, ogQty: ogQ, osQty: osQ, flags, flag: flags.join(" · ") }); + } + // Overrides first, of any kind. Each one is a decision somebody made at the counter, and it is + // the row a coordinator gets asked about. Volume on its own comes after, busiest first. + excRows.sort((a, b) => Number(b.ovQty + b.ogQty + b.osQty > 0) - Number(a.ovQty + a.ogQty + a.osQty > 0) || b.mQty - a.mQty); + // Approvals + const apprRows = s.approvals.filter((a) => a.sets - a.used > 0).map((a) => { const st = staffById[a.staffId]; return { who: staffName(st, "—"), dept: st?.dept || "—", by: a.by, date: a.date, sets: a.sets, used: a.used, rem: a.sets - a.used }; }); + const apprTot = apprRows.reduce((t, a) => t + a.rem, 0); + return { repMonths, ccRows, ccLines, totAmt, totPrev, totItems, ordSpend, groupRows, supRows, fyRows, fyTot: { items: fti, issued: fta, orders: fto }, trend, staffRows, glAcct, jnDesc, jnRows, jnUnallocated, topRows, valRows, valTotUnits, valTot, negSizes, shRows, shU, shV, cap, excThreshold, excRows, apprRows, apprTot, plIssueRows, plSaved, plQty, hiRows, ragMonth, plPoolRows, plPoolTotal }; + }, [s, L, byId, staffById, month]); + + const mLbl = monthLabel(month); + const meta = `${s.settings.facility} · ${s.settings.location} · prepared ${fmtDate(s.today)}${s.settings.coordinator ? " by " + s.settings.coordinator : ""}`; + const jnTotItems = R.jnRows.reduce((t, r) => t + r.items, 0), jnTot = R.jnRows.reduce((t, r) => t + r.debit, 0); + const drillRows = useMemo(() => (drill ? drill.keys.flatMap((k) => R.ccLines[k] || []).sort((a, b) => a.date.localeCompare(b.date) || a.who.localeCompare(b.who) || a.item.localeCompare(b.item)) : []), [drill, R]); + const drillQty = drillRows.reduce((t, r) => t + r.qty, 0), drillAmt = drillRows.reduce((t, r) => t + r.amt, 0); + const csvDrill = () => drill && downloadCsv(`threadcount-cost-centre-${drill.cc.replace(/[^A-Za-z0-9]+/g, "-").toLowerCase()}-${month}.csv`, `Issues behind cost centre,${csvEsc(drill.cc)},${month}\n\n` + csvOf(["Date", "Staff", "Item", "Size", "Qty", "Unit cost", "Value"], [...drillRows.map((r) => [r.date, r.who, r.item, r.size, r.qty, r.unit.toFixed(2), r.amt.toFixed(2)] as (string | number)[]), ["TOTAL", "", "", "", drillQty, "", drillAmt.toFixed(2)]])); + + const csvOverview = () => { + let csv = `ThreadCount monthly report,${month},${csvEsc(s.settings.facility)}\n\n` + csvOf(["Cost Centre", "Department", "Items", "Amount", "Previous Month"], [...R.ccRows.map((r) => [r.cc, r.dept, r.items, r.amt.toFixed(2), r.prev.toFixed(2)] as (string | number)[]), ["TOTAL", "", R.totItems, R.totAmt.toFixed(2), R.totPrev.toFixed(2)]]); + csv += "\n" + csvOf(["Staff Group", "Items", "Amount"], R.groupRows.map((g) => [g.g, g.items, g.amt.toFixed(2)])); + csv += "\n" + csvOf(["Staff", "Cost Centre", "Items", "Amount"], R.staffRows.map((r) => [r.who, r.cc, r.items, r.amt.toFixed(2)])); + csv += "\n" + csvOf(["Supplier", "Orders", "Amount"], R.supRows.map((r) => [r.name, r.n, r.amt.toFixed(2)])); + csv += "\n" + csvOf(["FY Month", "Items Issued", "Issued Value", "Orders Placed"], [...R.fyRows.map((m) => [m.label, m.items, m.issued.toFixed(2), m.orders.toFixed(2)] as (string | number)[]), ["FY TOTAL", R.fyTot.items, R.fyTot.issued.toFixed(2), R.fyTot.orders.toFixed(2)]]); + downloadCsv(`threadcount-report-${month}.csv`, csv); + }; + const csvJournal = () => downloadCsv(`threadcount-journal-${month}.csv`, csvOf(["Cost Centre", "Department", "GL Account", "Description", "Items", "Debit"], [...R.jnRows.map((r) => [r.cc, r.dept, r.gl, r.desc, r.items, r.debit.toFixed(2)] as (string | number)[]), ["TOTAL", "", "", "", jnTotItems, jnTot.toFixed(2)]])); + const csvValuation = () => downloadCsv(`threadcount-valuation-${s.today}.csv`, `Stock valuation as at,${s.today}\n` + csvOf(["Item", "SKU", "Supplier", "Units", "Unit cost", "Value"], R.valRows.map((x) => [x.item, x.sku, x.supplier, x.units, x.cost, x.val.toFixed(2)]))); + const tabCsv: Record void> = { + Overview: csvOverview, Journal: csvJournal, Valuation: csvValuation, + "Top stock": () => downloadCsv(`threadcount-top-stock-${month}.csv`, csvOf(["Rank", "Item", "Supplier", "Qty (month)", "Value (month)", "Share", "Qty (FY)"], R.topRows.map((r) => [r.n, r.item, r.supplier, r.qty, r.val.toFixed(2), r.share, r.fyQty]))), + Shrinkage: () => downloadCsv(`threadcount-shrinkage-${month}.csv`, csvOf(["Date", "Counted by", "Lines counted", "Variances", "Net units", "Net value"], R.shRows.map((r) => [r.date, r.by, r.counted, r.variances, r.net, r.netVal.toFixed(2)]))), + Exceptions: () => downloadCsv(`threadcount-exceptions-${month}.csv`, csvOf(["Staff", "Group", "Cost centre", "Items (month)", "Items (FY)", "Flag"], R.excRows.map((r) => [r.who, r.group, r.cc, r.mQty, r.fyQty, r.flag]))), + Suppliers: () => downloadCsv(`threadcount-supplier-spend-${month}.csv`, csvOf(["Supplier", "Orders", "Value", "Invoices"], R.supRows.map((r) => [r.name, r.n, r.amt.toFixed(2), r.invoices]))), + Approvals: () => downloadCsv(`threadcount-approvals-outstanding-${s.today}.csv`, csvOf(["Staff", "Ward", "Approved by", "Date", "Sets approved", "Collected", "Remaining"], R.apprRows.map((r) => [r.who, r.dept, r.by, r.date, r.sets, r.used, r.rem]))), + "Pre-loved": () => downloadCsv(`threadcount-preloved-${month}.csv`, `Pre-loved issues ${month}\n` + csvOf(["Date", "Staff", "Item", "Size", "Qty", "Value saved"], R.plIssueRows.map((r) => [r.date, r.who, r.item, r.size, r.qty, r.saved.toFixed(2)])) + "\nHand-ins\n" + csvOf(["Date", "Staff", "Received by", "Good", "Rag", "Credit"], R.hiRows.map((r) => [r.date, r.who, r.by, r.good, r.rag, r.credit])) + "\nPool snapshot\n" + csvOf(["Item", "Sizes", "Total"], R.plPoolRows.map((r) => [r.item, r.sizes, r.total]))), + }; + const C = (t: string, r = false): Col => ({ t, r }); + const tabPrint: Record void> = { + Overview: () => printDoc(`Cost centre report — ${mLbl}`, meta, [ + { h: "Summary", html: tbl([C(""), C("", true)], [["Issued value (period)", money(R.totAmt)], ["Items issued", R.totItems], ["Supplier orders placed", money(R.ordSpend)], ["vs previous month", money(R.totPrev)]]) }, + { h: "Issued value by cost centre", html: tbl([C("CC"), C("Department"), C("Items", true), C("This period", true), C("Prev", true), C("Δ", true)], [...R.ccRows.map((r) => [r.cc, r.dept, r.items, money(r.amt), money(r.prev), signedMoney(r.delta)] as (string | number)[]), ["TOTAL", "", R.totItems, money(R.totAmt), money(R.totPrev), ""]]) }, + { h: "By staff group", html: tbl([C("Group"), C("Items", true), C("Value", true)], R.groupRows.map((g) => [g.g, g.items, money(g.amt)])) }, + { h: "By staff member", html: tbl([C("Staff"), C("CC"), C("Items", true), C("Value", true)], R.staffRows.map((r) => [r.who, r.cc, r.items, money(r.amt)])) }, + { h: "Financial year", html: tbl([C("Month"), C("Items", true), C("Issued", true), C("Orders", true)], [...R.fyRows.map((m) => [m.label, m.items, money(m.issued), money(m.orders)] as (string | number)[]), ["FY TOTAL", R.fyTot.items, money(R.fyTot.issued), money(R.fyTot.orders)]]) }, + ]), + Journal: () => printDoc(`End-of-month journal — ${mLbl}`, meta, [{ h: `One debit per cost centre — GL ${R.glAcct}`, html: tbl([C("CC"), C("Department"), C("GL"), C("Description"), C("Items", true), C("Debit", true)], [...R.jnRows.map((r) => [r.cc, r.dept, r.gl, r.desc, r.items, money(r.debit)] as (string | number)[]), ["TOTAL", "", "", "", jnTotItems, money(jnTot)]]) }]), + "Top stock": () => printDoc(`Top stock — ${mLbl}`, meta, [{ h: "Most issued items", html: tbl([C("#"), C("Item"), C("Supplier"), C("Qty", true), C("Value", true), C("Share", true), C("Qty FY", true)], R.topRows.map((r) => [r.n, r.item, r.supplier, r.qty, money(r.val), r.share, r.fyQty])) }]), + Valuation: () => printDoc(`Stock valuation — as at ${fmtDate(s.today)}`, meta, [{ h: "On-hand value by item", html: tbl([C("Item"), C("SKU"), C("Supplier"), C("Units", true), C("Unit cost", true), C("Value", true)], [...R.valRows.map((r) => [r.item, r.sku, r.supplier, r.units, money(r.cost), money(r.val)] as (string | number)[]), ["TOTAL", "", "", R.valTotUnits, "", money(R.valTot)]]) }]), + Shrinkage: () => printDoc(`Stocktake variance / shrinkage — FY to end of ${mLbl}`, meta, [{ h: `${R.shRows.length} stocktakes · net ${signedInt(R.shU)} units · ${signedMoney(R.shV)}`, html: tbl([C("Date"), C("Counted by"), C("Lines", true), C("Variances", true), C("Net units", true), C("Net value", true)], R.shRows.map((r) => [fmtDate(r.date), r.by, r.counted, r.variances, signedInt(r.net), signedMoney(r.netVal)])) }]), + Exceptions: () => printDoc(`Staff exceptions — ${mLbl}`, meta, [{ h: `Past ${R.cap} sets, outside their staff group or not their uniform style on an override, or ≥ ${R.excThreshold} items this month`, html: tbl([C("Staff"), C("Group"), C("CC"), C("Month", true), C("FY", true), C("Flag")], R.excRows.map((r) => [r.who, r.group, r.cc, r.mQty, r.fyQty, r.flag])) }]), + Suppliers: () => printDoc(`Supplier spend — ${mLbl}`, meta, [{ h: "Orders placed this period", html: tbl([C("Supplier"), C("Orders", true), C("Value", true), C("Invoices")], R.supRows.map((r) => [r.name, r.n, money(r.amt), r.invoices])) }]), + Approvals: () => printDoc(`Uncollected manager's approvals — as at ${fmtDate(s.today)}`, meta, [{ h: `${R.apprTot} sets outstanding`, html: tbl([C("Staff"), C("Ward"), C("Approved by"), C("Date"), C("Sets", true), C("Collected", true), C("Remaining", true)], R.apprRows.map((r) => [r.who, r.dept, r.by, fmtDate(r.date), r.sets, r.used, r.rem])) }]), + "Pre-loved": () => printDoc(`Pre-loved uniforms — ${mLbl}`, meta, [ + { h: `Issued free this period — saved ${money(R.plSaved)}`, html: tbl([C("Date"), C("Staff"), C("Item"), C("Size"), C("Qty", true), C("Value saved", true)], R.plIssueRows.map((r) => [fmtDate(r.date), r.who, r.item, r.size, r.qty, money(r.saved)])) }, + { h: `Hand-ins this period · ${R.ragMonth} to rag disposal`, html: tbl([C("Date"), C("Staff"), C("Received by"), C("Good", true), C("Rag", true), C("Credit")], R.hiRows.map((r) => [fmtDate(r.date), r.who, r.by, r.good, r.rag, r.credit])) }, + { h: `Pool snapshot — ${R.plPoolTotal} items at $0 book value`, html: tbl([C("Item"), C("Sizes"), C("Total", true)], R.plPoolRows.map((r) => [r.item, r.sizes, r.total])) }, + ]), + }; + function printEomPack() { + const sections = [ + { h: "Summary", html: tbl([C(""), C("", true), C(""), C("", true)], [["Issued value", money(R.totAmt), "Items issued", R.totItems], ["Supplier orders placed", money(R.ordSpend), "Stock on hand value", money(R.valTot)], ["Shrinkage (FY to end of month)", signedMoney(R.shV), "Stocktakes counted (FY)", R.shRows.length]]) }, + { h: "Cost centre summary", html: tbl([C("CC"), C("Department"), C("Items", true), C("Value", true)], [...R.jnRows.map((r) => [r.cc, r.dept, r.items, money(r.debit)] as (string | number)[]), ["TOTAL", "", jnTotItems, money(jnTot)]]) }, + { h: `Journal — one debit per cost centre (GL ${R.glAcct})`, html: tbl([C("CC"), C("Description"), C("Debit", true)], R.jnRows.map((r) => [r.cc, r.desc, money(r.debit)])) }, + { h: "Top stock", html: tbl([C("Item"), C("Qty", true), C("Value", true)], R.topRows.slice(0, 10).map((r) => [r.item, r.qty, money(r.val)])) }, + ]; + // Finance is promised shrinkage in this pack, and the net figure is in the summary above every + // month. The count-by-count table only turns up when counts were actually filed, the same rule + // the exceptions and approvals sections below follow — a heading over an empty table tells + // finance nothing and costs them a page. + if (R.shRows.length) sections.push({ h: `Shrinkage — stocktake variance, FY to end of ${mLbl} · net ${signedInt(R.shU)} units · ${signedMoney(R.shV)}`, html: tbl([C("Date"), C("Counted by"), C("Variances", true), C("Net units", true), C("Net value", true)], R.shRows.map((r) => [fmtDate(r.date), r.by, r.variances, signedInt(r.net), signedMoney(r.netVal)])) }); + if (R.excRows.length) sections.push({ h: "Staff exceptions", html: tbl([C("Staff"), C("Cost centre"), C("Flag")], R.excRows.map((r) => [r.who, r.cc, r.flag])) }); + if (R.apprRows.length) sections.push({ h: "Uncollected manager's approvals", html: tbl([C("Staff"), C("Approved by"), C("Remaining sets", true)], R.apprRows.map((r) => [r.who, r.by, r.rem])) }); + printDoc(`Month-end pack — ${mLbl}`, meta, sections); + } + const delta = (d: number) => 0 ? "var(--color-accent-700)" : "var(--color-neutral-700)" }}>{(d >= 0 ? "+" : "−") + money(Math.abs(d)).slice(1)}; + const R2 = (n: number) => ({ textAlign: "right" as const, fontWeight: n }); + /* A ward manager rings the linen room asking why their number doubled this month, and until now + the coordinator had nothing on the screen to answer with. The cost centre is a button: it opens + the issues that make the figure beside it — who, which garment, which size, when, what it cost. + It is the cell and not the row because a row that only answers to a click is unreachable from + the keyboard, and its name carries the figure so it is clear what the button opens. */ + const drillBtn = (cc: string, dept: string, keys: string[], items: number, amt: number) => { + // The Overview prints an em dash for staff who have no cost centre; the journal calls those + // UNALLOCATED, and that is the word to say out loud rather than "issues behind —". + const name = cc === "—" ? "UNALLOCATED" : cc; + return ( + + ); + }; + + return ( +
    + + + + + + +
    + {TABS.map((t) => )} +
    + + {tab === "Overview" && ( + <> + {/* Five figures rather than the four that were here: the pre-loved pool saves the ward + real money every month and it was a sentence under the strip, which is not where + anybody looks for a number. */} + R.totPrev ? "Up" : "Down"} ${money(Math.abs(R.totAmt - R.totPrev))} on last month` }, + { val: R.plQty, label: "Pre-loved issued (free)", note: `Saved ${money(R.plSaved)} at catalogue cost` }, + ]} /> +
    +
    + +
    +
    + {th("Cost centre")}{th("Department")}{th("Items", true)}{th("This period", true)}{th("Prev", true)}{th("Δ", true)} + + {R.ccRows.map((r) => )} + + +
    {drillBtn(r.cc, r.dept, [r.key], r.items, r.amt)}{r.dept}{r.items}{money(r.amt)}{money(r.prev)}{delta(r.delta)}
    TOTAL{R.totItems}{money(R.totAmt)}{money(R.totPrev)}
    + {R.ccRows.length === 0 && No issues recorded in this period yet.} +
    +
    + +
    +
    + {th("Month")}{th("Items issued", true)}{th("Issued value", true)}{th("Orders placed", true)} + + {R.fyRows.map((m) => )} + + +
    {m.label}{m.items}{money(m.issued)}{money(m.orders)}
    FY TOTAL{R.fyTot.items}{money(R.fyTot.issued)}{money(R.fyTot.orders)}
    +
    +
    +
    +
    + + {R.groupRows.length === 0 ?
    Nothing issued in this period.
    : ( +
    + {R.groupRows.map((g) => ( +
    +
    {g.g}
    {g.items} item{g.items === 1 ? "" : "s"}
    +
    {money(g.amt)}
    +
    + ))} +
    + )} +
    + + {R.staffRows.length === 0 ?
    Nothing issued in this period.
    : ( +
    + {R.staffRows.map((r, i) => ( +
    +
    {r.who}
    {r.cc || "no cost centre"} · {r.items} item{r.items === 1 ? "" : "s"}
    +
    {money(r.amt)}
    +
    + ))} +
    + )} +
    + + {R.supRows.length === 0 ?
    No supplier orders placed this period.
    : ( +
    + {R.supRows.map((r) => ( +
    +
    {r.name}
    {r.n} order{r.n === 1 ? "" : "s"}
    +
    {money(r.amt)}
    +
    + ))} +
    + )} +
    + +
    +
    + {/* Each bar changes the month the whole page is reporting on, so it is a button — + a clickable
    put the only way of moving between months out of reach of the + keyboard. The bar itself is decoration; the name says the month and the figure. */} + {R.trend.map((b) => ( + + ))} +
    +
    + +
    +
    + + )} + + {tab === "Journal" && ( + /* A staff member with no cost centre lands in UNALLOCATED, and finance cannot post that + line — so the panel carries the rule and the mark rather than leaving the warning to a + red sentence under a table nobody scrolls to. */ + Export journal CSV}> +
    +
    + {th("Cost centre")}{th("Department")}{th("GL account")}{th("Description")}{th("Items", true)}{th("Debit", true)} + + {R.jnRows.map((r) => )} + + +
    {drillBtn(r.cc, r.dept, r.keys, r.items, r.debit)}{r.dept}{r.gl}{r.desc}{r.items}{money(r.debit)}
    TOTAL{jnTotItems}{money(jnTot)}
    +
    +
    Set the GL account and description under Settings → General.{R.jnUnallocated && UNALLOCATED = staff with no cost centre — set their department or override on the Staff Register before posting.}
    +
    + )} + + {tab === "Top stock" && ( + +
    +
    + {th("#")}{th("Item")}{th("Supplier")}{th("Qty (month)", true)}{th("Value (month)", true)}{th("Share", true)}{th("Qty (FY)", true)} + {R.topRows.map((r) => )} +
    {r.n}{r.item}{r.supplier}{r.qty}{money(r.val)}{r.share}{r.fyQty}
    + {R.topRows.length === 0 && Nothing issued this period.} +
    +
    + )} + + {tab === "Valuation" && ( + 0} + aside={R.negSizes > 0 ? `${R.negSizes} size${R.negSizes === 1 ? "" : "s"} negative on hand` : "Priced at catalogue cost"} + right={}> +
    +
    + {th("Item")}{th("SKU")}{th("Supplier")}{th("Units on hand", true)}{th("Unit cost", true)}{th("Value", true)} + + {R.valRows.map((r, i) => )} + + +
    {r.item}{r.sku}{r.supplier}{r.units}{money(r.cost)}{money(r.val)}
    TOTAL{R.valTotUnits}{money(R.valTot)}
    +
    + {R.negSizes > 0 &&
    {R.negSizes} size{R.negSizes === 1 ? "" : "s"} are negative on hand and are counted as 0 in this valuation — run a stocktake or record the missing receipt.
    } +
    + )} + + {tab === "Shrinkage" && ( + <> + {/* Stock that has gone missing is money finance has to be told about, so the two figures + that carry it take the rule and the mark when the net is down, not just a red number. */} + + +
    +
    + {th("Date")}{th("Counted by")}{th("Lines counted", true)}{th("Variances", true)}{th("Net units", true)}{th("Net value", true)} + {R.shRows.map((r, i) => )} +
    {fmtDate(r.date)}{r.by}{r.counted}{r.variances}{signedInt(r.net)}{signedMoney(r.netVal)}
    + {R.shRows.length === 0 && No stocktakes filed in this financial year up to the end of this month.} +
    +
    + + )} + + {tab === "Exceptions" && ( + 0} + aside={R.excRows.length > 0 ? `${R.excRows.length} to look at` : "No overrides, nobody at the volume threshold"}> +
    +
    + {th("Staff")}{th("Group")}{th("Cost centre")}{th("Items (month)", true)}{th("Items (FY)", true)}{th("Flag")} + {R.excRows.map((r, i) => )} +
    {r.who}{r.group}{r.cc}{r.mQty}{r.fyQty}{r.flags.map((f, j) => {f})}
    + {R.excRows.length === 0 && No exceptions this period.} +
    +
    Items (FY) is a running tally, not an allowance.
    +
    + )} + + {tab === "Suppliers" && ( + +
    +
    + {th("Supplier")}{th("Orders", true)}{th("Value", true)}{th("Invoices")} + {R.supRows.map((r) => )} +
    {r.name}{r.n}{money(r.amt)}{r.invoices}
    + {R.supRows.length === 0 && No supplier orders placed this period.} +
    +
    + )} + + {tab === "Pre-loved" && ( + <> + +
    + {R.plIssueRows.length === 0 ? Nothing issued from the pool this period. : ( +
    + {th("Date")}{th("Staff")}{th("Item")}{th("Size")}{th("Qty", true)}{th("Value saved", true)} + {R.plIssueRows.map((r, i) => )} +
    {fmtDate(r.date)}{r.who}{r.item}{r.size}{r.qty}{money(r.saved)}
    + )} +
    +
    + +
    + {R.hiRows.length === 0 ? No hand-ins recorded this period. : ( +
    + {th("Date")}{th("Staff")}{th("Received by")}{th("Good", true)}{th("Rag", true)}{th("Allowance")} + {R.hiRows.map((r, i) => )} +
    {fmtDate(r.date)}{r.who}{r.by}{r.good}{r.rag}{r.credit}
    + )} +
    +
    + +
    + {R.plPoolRows.length === 0 ? The pool is empty — record a hand-in from Issue Stock or a staff profile. : ( +
    + {th("Item")}{th("Sizes on hand")}{th("Total", true)} + {R.plPoolRows.map((r, i) => )} +
    {r.item}{r.sizes}{r.total}
    + )} +
    +
    + + )} + {tab === "Approvals" && ( + 0} + aside={R.apprTot > 0 ? `${R.apprTot} set${R.apprTot === 1 ? "" : "s"} outstanding` : "Everything approved has been collected"}> +
    +
    + {th("Staff")}{th("Ward")}{th("Approved by")}{th("Date")}{th("Sets approved", true)}{th("Collected", true)}{th("Remaining", true)} + + {R.apprRows.map((r, i) => )} + + +
    {r.who}{r.dept}{r.by}{fmtDate(r.date)}{r.sets}{r.used}{r.rem}
    TOTAL OUTSTANDING{R.apprTot} sets
    + {R.apprRows.length === 0 && No uncollected approvals.} +
    +
    + )} + {drill && ( + setDrill(null)} + sub={`${drill.dept} · ${drillQty} item${drillQty === 1 ? "" : "s"} · ${money(drillAmt)}`}> + {drillRows.length === 0 ? Nothing was issued against this cost centre in {mLbl}. : ( +
    + {th("Date")}{th("Staff")}{th("Item")}{th("Size")}{th("Qty", true)}{th("Unit cost", true)}{th("Value", true)} + + {drillRows.map((r, i) => )} + + +
    {fmtDate(r.date)}{r.who}{r.item}{r.size}{r.qty}{money(r.unit)}{money(r.amt)}
    TOTAL{drillQty}{money(drillAmt)}
    + )} +
    + {drillRows.length > 0 && } + +
    +
    + )} +
    Print and Export CSV follow the selected tab — click a cost centre for the issues behind it.
    +
    + ); +} diff --git a/app/app/requests/page.tsx b/app/app/requests/page.tsx new file mode 100644 index 0000000..ea3ebd8 --- /dev/null +++ b/app/app/requests/page.tsx @@ -0,0 +1,862 @@ +"use client"; +/* Staff requests, from the linen room's side. + * + * The counter's queue. A request only appears here as something to act on once a ward manager has + * approved it — anything still `awaiting` is shown, greyed, so the linen room can see what is + * coming without being able to do anything about it. That asymmetry is the point of the whole + * flow: approval is the ward's, fulfilment is the linen room's, and neither can do the other's job. + * + * A request covers as many garments as the person asked for, one line each, and the manager can + * knock back individual lines — the tunic and the trousers yes, the fleece no. So every screen + * here has to keep two ideas apart: `lines` is the record of what was asked, `bag` is what is + * actually picked. Picking off `lines` would put a garment the ward refused into somebody's hands, + * so the pick, the count, the slip and the collection code are all built from `bag`. + */ +import { useCallback, useEffect, useMemo, useState } from "react"; +import Link from "next/link"; +import { useSnap } from "@/lib/client"; +import { openSlip } from "@/components/dialogs"; +import { PageHead, Empty, ErrorLine, Field } from "@/components/ui"; +import { csvEsc, csvOf, facilityDate, fmtDate, formatInZone, genderLabel, slipLive, type Snapshot } from "@/lib/compute"; +import { downloadCsv } from "@/lib/print"; +import type { ReqLine } from "@/lib/staffdata"; +import { NEEDS_STAFF, OPEN_REQUEST, WAITLIST_HOLD_HOURS, holdEndsAt, holdExpired, statusText } from "@/lib/staffreq"; + +type Msg = { id: string; fromStaff: boolean; authorName: string; body: string; at: string }; +type Ev = { id: string; label: string; meta: string; actorName: string; at: string }; +type Req = { + id: string; code: string; status: string; staffId: string; staffName: string; staffNum: string; ward: string; + /** Everything asked for, declines included — and separately the ones that are actually a pick. */ + lines: ReqLine[]; bag: ReqLine[]; + summary: string; garments: number; lineCount: number; decision: string | null; + reason: string; note: string; + managerName: string; + /** Which person on the register the approver is — not just how their name is spelled. A manager + * may approve a request raised for herself, and the only thing that can show that happened is + * this id beside the wearer's: two spellings of one name tell nobody anything. Null while + * nobody has been asked. */ + managerId: string | null; + declineReason: string | null; route: string | null; + collectCode: string | null; holdUntil: string; signerName: string | null; signerRole: string | null; + signedAt: string | null; claimedAt: string | null; + /** Who raised it, and which person on the register that is. The id is what the approver list is + * built on: a ward register carries people who share a name, and telling them apart by spelling + * is how the wrong one gets dropped out of a dropdown. Null when the wearer raised it herself, + * and null when the linen room raised it at the counter — that one is stamped with the + * coordinator's own account, which is not on the ward register at all. Neither is a name this + * screen could have offered anyway. */ + raisedById: string | null; raisedByName: string; + createdAt: string; decidedAt: string | null; messages: Msg[]; events: Ev[]; +}; +/** One name in the re-address dropdown: who they are, whether anything can actually reach them, + * and the words the coordinator reads before picking them. */ +type ApproverChoice = { id: string; reachable: boolean; label: string }; +type Dispute = { id: string; body: string; staffName: string; staffNum: string; ward: string; at: string }; +type Cycle = { id: string; dueBy: string; openedBy: string; openedAt: string; answers: number }; +type Waiting = { id: string; staffName: string; staffNum: string; ward: string; item: string; size: string; since: string; offeredAt: string | null }; +type Damage = { id: string; kind: string; note: string; photoId: string | null; staffId: string; staffName: string; staffNum: string; ward: string; item: string; size: string; requestCode: string; at: string }; +type Shortfall = { + id: string; staffId: string; staffName: string; staffNum: string; ward: string; + item: string; size: string; onRecord: number; confirmed: number; short: number; at: string; +}; +/* `requestLimit` and `moreRequests` are the endpoint saying how much of the queue this is. It reads + one row past its own ceiling so that "there are older ones than these" is a fact rather than a + guess off a full page — and nothing here read it, so the list just stopped at the newest 400 with + no word to anybody. Every tab on this screen is a view of that same set, so a request from before + the cut-off is on none of them and in nothing exported from them. */ +type Payload = { requests: Req[]; disputes: Dispute[]; cycle: Cycle | null; shortfalls: Shortfall[]; waiting: Waiting[]; damage: Damage[]; requestLimit: number; moreRequests: boolean }; + +const plural = (n: number, one: string, many: string) => `${n} ${n === 1 ? one : many}`; + +/* What a tab is called once it has to be named away from its own button — over the queue it heads, + and at the top of a file exported off it. One spelling in one place, so a spreadsheet that has + left the building can never disagree with the screen about which view it came from. */ +const TAB_TITLE = { + todo: "To do", noapprover: "Needs an approver", open: "Open", all: "All", + queries: "Record queries", damage: "Damage", cycles: "Kit check & waitlist", +} as const; + +/** A request with nothing in its `managerName` never got an approver at all. + * + * That happens the moment a manager raises for one of their own reports: they would otherwise be + * approving their own raise, so the staff app sends it up a level — and when there is nobody above + * them, or the one above is themselves, it is created with no approver and waits here. Nobody on the ward can move it, so if this + * screen did not say so out loud it would simply sit in the queue for ever. */ +const stranded = (r: Req) => r.status === "awaiting" && !r.managerName; + +/** Is this bag going out on the ward round rather than waiting at the counter? Decides which of + * the two slips is the one worth printing. */ +const onRound = (r: Req) => r.status === "round" || r.status === "delivered"; + +/* Who a waiting request can be handed to, and what has to be said about each name before it is + * picked. + * + * The wearer is on the list like anybody else: anyone may approve for themselves (the owner's + * decision), and it is marked Self-approved wherever it shows. The option says out loud that this + * is a self-approval, because otherwise the coordinator is choosing between two spellings of the + * same person and finds out what they did from the timeline months later. + * + * The person who raised it is off the list altogether, and that one has no way back in. A + * manager asking for one of her own reports' garments is the whole reason the request escalated + * and landed on this tab with nobody to approve it — and she is the obvious pick, because she IS + * the wearer's manager on the register, with nothing on the row to say the ask came from her. + * Handing it back to her would have one person do both halves of a decision the ward is told two + * people made, so it is turned down the moment the button is pressed. Leaving her in the list + * made the Needs an approver tab offer the one name on it certain to fail, on the tab that + * exists to fix exactly that. It is her id that keeps her off the list and nothing else, which is + * why the queue carries it: a ward can hold two people spelled the same way, only one of them + * raised this, and the counter refuses on the id too. + * + * Reachability is the other half, and nothing refuses it: a manager with no staff-app account + * cannot be asked at all. The approval e-mail has nowhere to go and they cannot sign in to + * decide it, so re-addressing to one of them puts the request straight back in the dead end it + * was being rescued from — except that it does not come back to this tab, because it now has a + * name against it. Said on the option, before it is chosen. A printed code only counts as a way in + * while the activation would still take it, which is slipLive's call and nobody else's: "a code is + * outstanding" is all the register holds, and reading that as live had the dropdown calling a slip + * worth chasing that the person would be turned away with, while the staff register, looking at + * the same person, said they had no staff app at all. + * + * The raiser rule is the counter's rule said a second time, in a screen, and two copies of a rule + * agree only until one of them is edited. The queue could settle it by arriving with the answer + * already worked out — the ids this particular request can be sent to, decided where the refusal + * itself lives — and then a name is on this list exactly when it would be accepted, and this + * function is left with nothing to do but the words. */ +function approverChoices(s: Snapshot, r: Req): ApproverChoice[] { + return s.staff + .filter((x) => !x.inactive && x.first && x.id !== r.raisedById && (x.id !== r.staffId || x.managerId === x.id)) + .map((x) => ({ + id: x.id, + reachable: !!x.selfEmail, + label: `${`${x.first} ${x.last}`.trim()}${x.dept ? ` · ${x.dept}` : ""}` + + (x.id === r.staffId ? " · this request is theirs — self-approval" : "") + + (x.selfEmail ? "" : x.selfCode && slipLive(x.selfCodeAt, s.today, s.tz) ? " · code printed, not used yet" : " · no staff-app account"), + })); +} + +/** The whole ask, line by line, with the manager's answer against each garment. + * + * The declines stay on the list rather than being dropped: the wearer will ask why they got two + * things and not three, and the person at the counter needs the answer in front of them. They are + * struck through so nobody picks one by mistake. */ +function LineList({ r }: { r: Req }) { + const refused = r.lines.filter((l) => l.status === "declined").length; + const note = + r.status === "declined" ? "Nothing to pick — every line was declined." + : r.status === "awaiting" ? `${plural(r.garments, "garment", "garments")} asked for. Nothing is picked until the ward has decided.` + : refused > 0 ? `In the bag: ${plural(r.garments, "garment", "garments")} across ${plural(r.bag.length, "line", "lines")}. The ${refused === 1 ? "declined line is" : `${refused} declined lines are`} not picked.` + : `In the bag: ${plural(r.garments, "garment", "garments")}.`; + return ( +
    + {r.lines.map((l) => { + const off = l.status === "declined"; + return ( +
    + + {l.qty} × {l.item}{l.gender && l.gender !== "Unisex" ? ` (${genderLabel(l.gender)})` : ""} — {l.size} + + {l.statusLabel} + {off && l.declineReason && {l.declineReason}} +
    + ); + })} +
    {note}
    +
    + ); +} + +export default function RequestsPage() { + const { s, mutate } = useSnap(); + const [data, setData] = useState(null); + const [tab, setTab] = useState<"todo" | "noapprover" | "open" | "all" | "queries" | "damage" | "cycles">("todo"); + const [dueBy, setDueBy] = useState(""); + const [openId, setOpenId] = useState(null); + const [reply, setReply] = useState(""); + const [hold, setHold] = useState(""); + /** The replacement approver picked for a stranded `awaiting` request. */ + const [reassign, setReassign] = useState(""); + const [err, setErr] = useState(""); + + /* "Still loading" and "the queue never arrived" look identical from the outside, and this screen + is the linen room's work list — reading it as empty when the fetch failed means a ward waits on + a request nobody knows about. So the failure is said out loud and can be retried. */ + const [loadErr, setLoadErr] = useState(""); + const load = useCallback(async () => { + setLoadErr(""); + try { + const r = await fetch("/api/requests"); + if (!r.ok) { const j = await r.json().catch(() => ({})); setLoadErr(j.error || "Couldn’t load the request queue."); return; } + setData(await r.json()); + } catch { + setLoadErr("Couldn’t reach the server — the request queue isn’t loaded."); + } + }, []); + useEffect(() => { void load(); }, [load]); + + async function act(op: string, payload: unknown) { + setErr(""); + const r = await mutate(op, payload); + if (!r.ok) { setErr(r.error); return false; } + await load(); + return true; + } + + /* What goes on the printed slip. + * + * The bag, never the whole ask: a slip that listed a garment the ward declined would have + * somebody hunting the shelf for it, and the person signing would sign for three things and get + * two. The request's own code goes in the order-number field and the collection code is printed + * beside the name, because one code now covers several garments and it is the only thing that + * ties this piece of paper to that bag. */ + const slipFor = (r: Req) => ({ + staffName: r.staffName, dept: r.ward, deliverTo: r.ward, + sets: r.garments, po: r.code, code: r.collectCode || "", + // The cut goes on the slip. Two garments can share a name and differ only by it — an + // Ambassador Shirt comes men's and ladies, on different style codes and different shelves — + // and a line reading "1 × Ambassador Shirt — M" gives whoever is picking no way to tell which, + // which is a wrong garment in the bag and a return later. Omitted for unisex, where it is noise. + lines: r.bag.map((l) => `${l.qty} × ${l.item}${l.gender && l.gender !== "Unisex" ? ` (${genderLabel(l.gender)})` : ""} — ${l.size}`).join("\n"), + dateReceived: s.today, requestedBy: r.staffNum, + deliveredBy: s.settings.coordinator, dateTime: s.today, + }); + + /* The dropdown's list, worked out once and only for the row that is actually open. + * + * Every name on it is a walk of the whole register, and it used to be built for every waiting + * request on screen although only the open one can show a dropdown — on a busy register, forty + * walks to draw one list. The reply box further down shares this component's state, so that + * whole pass ran again on every letter typed into a message to a ward. */ + const openReq = data?.requests.find((r) => r.id === openId) ?? null; + const choices = useMemo( + () => (openReq && openReq.status === "awaiting" ? approverChoices(s, openReq) : []), + [s, openReq], + ); + + if (!data) return ( +
    + + {loadErr ? ( + <> + +
    + + ) : Loading…} +
    + ); + + // "To do" is the linen room's actual work queue: approved and not yet handed over. + const todo = data.requests.filter((r) => ["accepted", "picking", "ready", "round"].includes(r.status)); + const open = data.requests.filter((r) => OPEN_REQUEST.has(r.status as never)); + // Requests nobody was ever asked to approve. Their own tab because they are the only thing on + // this screen that is stuck rather than merely waiting, and the fix — give it an approver — is + // the linen room's to make and nobody else's. + const noApprover = data.requests.filter(stranded); + const rows = tab === "todo" ? todo : tab === "noapprover" ? noApprover : tab === "open" ? open : tab === "all" ? data.requests : []; + /* The queue arrives newest first and stops at its ceiling, so what is missing is always the + oldest — and old is exactly what a stranded request or a bag nobody collected becomes. Every + request tab is a narrowing of that one set, so every one of them carries the mark, not just + All: a coordinator who cleared Needs an approver to a bare 0 would take the ward's stuck + requests to be dealt with while the longest-stuck of them sat past the cut-off, unseen. */ + const more = data.moreRequests ? "+" : ""; + const inLoaded = data.moreRequests ? ` among the most recent ${data.requestLimit} requests` : ""; + + /* Export — the tab on screen, and nothing else. + + Every tab here is a view of the same queue narrowed a different way, so a coordinator who has + narrowed to To do and hits Export means that work queue, not eighteen months of requests. There + is no search box on this screen, so the tab is the only filter in force and honouring it is the + whole job. The file is named after the tab as well: four exports all called + threadcount-requests-2026-09-11.csv land in one Downloads folder as "(1)" and "(2)", and by + Monday nobody can say which one the ward was sent. + + The last three tabs are not narrowings of the request queue at all — a record query, a damage + report and a kit-check answer share no columns with a request and no columns with each other — + so each writes its own table rather than being forced into one shape with most cells empty. + Kit check & waitlist is two registers on one screen, so it writes two tables into the one file, + the way the pre-loved report does; folding them together would put a garment somebody is + queueing for in the same column as a garment somebody has lost. */ + const shown = tab === "queries" ? data.disputes.length + : tab === "damage" ? data.damage.length + : tab === "cycles" ? data.shortfalls.length + data.waiting.length + : rows.length; + + function exportCsv() { + // Hoisted, so the checker cannot see the early return above that already proved this is here — + // and it is right not to: a function declaration can be called from anywhere in the body. The + // button is only rendered once the data has loaded, so this never fires; it is here to make the + // guarantee local to the function that relies on it. + if (!data) return; + /* Full date and 24-hour time, in the facility's zone, with the zone named at the top of the + file. The screen prints "9 Sep" because you read it in order; a spreadsheet gets re-sorted the + moment it lands, and "9 Sep, 14:32" sorts as text into nonsense and carries no year at all. + Empty rather than an em dash where there is no instant — a dash in a spreadsheet cell is only + noise to filter around. */ + const when = (iso: string | null) => + iso ? `${facilityDate(iso, s.tz)} ${formatInZone(iso, s.tz, { hour: "2-digit", minute: "2-digit", hour12: false, hourCycle: "h23" })}` : ""; + /* The header block above the column headings, so a file that has left the building still says + which view it is, when it was taken and what zone its times are in. */ + const preamble = (facts: [string, string | number][]) => + facts.map(([k, v]) => `${csvEsc(k)},${typeof v === "number" ? v : csvEsc(v)}`).join("\n") + "\n\n"; + + if (tab === "queries") { + downloadCsv(`threadcount-record-queries-${s.today}.csv`, + preamble([["Record queries", "Raised against a staff record, not yet sorted"], ["Exported", s.today], ["Times shown in", s.tz], ["Queries in this file", data.disputes.length]]) + + csvOf(["Raised", "Staff no.", "Staff member", "Ward", "What they say is wrong"], + data.disputes.map((d) => [when(d.at), d.staffNum, d.staffName, d.ward, d.body]))); + return; + } + + if (tab === "damage") { + downloadCsv(`threadcount-damage-${s.today}.csv`, + preamble([["Damage reported", "Not yet handed in at the counter"], ["Exported", s.today], ["Times shown in", s.tz], ["Reports in this file", data.damage.length]]) + + csvOf(["Reported", "Staff no.", "Staff member", "Ward", "Garment", "Size", "Damage", "What they said", "Replacement requested", "Photo"], + // The issue a report was raised against can be deleted, and the screen says so in words + // rather than showing a blank. A blank cell here would read as a gap in the export. + data.damage.map((d) => [when(d.at), d.staffNum, d.staffName, d.ward, d.item || "Garment no longer on file", d.size, d.kind, d.note, d.requestCode, d.photoId ? "Yes" : "No"]))); + return; + } + + if (tab === "cycles") { + const c = data.cycle; + downloadCsv(`threadcount-kit-check-${s.today}.csv`, + preamble([ + ["Kit check and waitlist", c ? `Running — due by ${c.dueBy}` : "No kit check running"], + ["Opened by", c ? c.openedBy || "—" : ""], + ["Answers in", c ? c.answers : 0], + ["Exported", s.today], + ["Times shown in", s.tz], + ]) + // Nothing in this table has changed anybody's record, exactly as the screen says. It is the + // working list for squaring the register one garment at a time, so it goes out with the + // person and the size on every row rather than as a count of answers. + + "What people couldn't account for\n" + + csvOf(["Staff no.", "Staff member", "Ward", "Garment", "Size", "On record", "Confirmed", "Short", "Answered"], + data.shortfalls.map((f) => [f.staffNum, f.staffName, f.ward, f.item, f.size, f.onRecord, f.confirmed, f.short, when(f.at)])) + + "\nWaiting for a size\n" + + csvOf(["Staff no.", "Staff member", "Ward", "Garment", "Size", "Waiting since", "Offered", "Held until", "Hold"], + data.waiting.map((w) => { + // The deadline is computed the one way the product computes it, so a file taken off + // this screen can never disagree with the screen about whose garment it still is. + const ends = holdEndsAt(w.offeredAt); + return [w.staffNum, w.staffName, w.ward, w.item, w.size, when(w.since), when(w.offeredAt), + ends ? when(ends.toISOString()) : "", + !w.offeredAt ? "Not offered yet" : holdExpired(w.offeredAt) ? "Lapsed — offer to the next person" : "Held"]; + }))); + return; + } + + /* A row is a garment, not a request. + + A request covers as many garments as the person asked for and the manager decides each one + separately — the tunic and the trousers yes, the fleece no. One row per request could only + carry the rollup, "2 of 3 approved", and the question this file is opened to answer is + precisely the one that would then be missing: which garment was refused, and why. So the + request's own facts repeat down its lines. That repetition is what makes the file worth + having in a spreadsheet — every declined fleece in the hospital is one filter on Line + decision — and the count in the preamble says how many requests those rows came from, so + nobody reads nineteen rows as nineteen requests. + + The two decisions keep their own words, because they are not the same decision and this file + goes to a ward manager. A LINE is approved or declined, and Line decision is the word the + line already carries from lineStatusLabel(). A REQUEST is accepted or declined, and Request + status is statusText()'s label — the same words as the tag on the row. Decision summary is + decisionSummary()'s rollup and nothing recomputed here. Request decline reason is the + request-level one, which is as often the linen room withdrawing an unapprovable request as + it is the ward refusing the whole ask. + + A blank Approver is the Needs an approver tab's own definition — nobody was ever asked — so + those requests stay identifiable after they have been filed away with the rest. Approver is + the wearer says a manager was asked to sign for her own kit, which the product allows and + the ward may reasonably want to see; two matching names in adjacent columns is not something + anybody spots reading down a file, and on a ward where two people share a name it is not + even true. It is a fact about who was asked, so it is filled in on a request still waiting + as much as on one already decided. + + Held until is left out: it is free text somebody typed at the counter ("Fri 6pm"), and a + column of that sorts into nonsense beside four real dates. Ward is the wearer's ward, as the + row on screen states it; a bag already out on a round was routed to the ward she was on when + the trolley loaded, which after a transfer is a different one. */ + const title = TAB_TITLE[tab]; + downloadCsv(`threadcount-requests-${tab === "noapprover" ? "needs-an-approver" : tab}-${s.today}.csv`, + preamble([ + ["Ward requests", title], + ["Exported", s.today], + ["Times shown in", s.tz], + ["Requests in this file", rows.length], + // A file that is short of the register says so in its own header, because the person who + // opens it in three months has no screen beside it to work that out from. + ...(data.moreRequests + ? ([["Older requests not in this file", `The screen holds the most recent ${data.requestLimit} requests and there are older ones than those`]] as [string, string][]) + : []), + ["Rows", "One per line on the request — a request for a tunic and two pairs of trousers is two rows, and the pairs are a Qty of 2 on the second"], + ]) + + csvOf(["Request", "Raised", "Staff no.", "Staff member", "Ward", "Raised by", "Reason", "Note", "Request status", "Approver", "Approver is the wearer", "Decision summary", "Decided", "Request decline reason", "Collection code", "Garment", "Cut", "Size", "Qty", "Line decision", "Line decline reason"], + rows.flatMap((r) => { + const req: (string | number)[] = [ + r.code, when(r.createdAt), r.staffNum, r.staffName, r.ward, r.raisedByName, r.reason, r.note, + statusText(r).label, r.managerName, r.managerId && r.managerId === r.staffId ? "Yes" : "", + r.decision ?? "", when(r.decidedAt), r.declineReason ?? "", r.collectCode ?? "", + ]; + /* A request with no lines on it still has to appear. It is only ever a half-written raise + or one whose garment was deleted from the catalogue, but it is sitting in somebody's + queue, and a file built by walking lines would drop it silently — which on the Needs an + approver tab would hide the one kind of request nobody else can rescue. */ + const lines: (ReqLine | null)[] = r.lines.length ? r.lines : [null]; + return lines.map((l) => [...req, + l ? l.item : "", l ? genderLabel(l.gender) : "", l ? l.size : "", l ? l.qty : "", + l ? l.statusLabel : "", l ? l.declineReason ?? "" : ""]); + }))); + } + + /* The two optional names are for the actions that repeat down the queue. A button reading "Print + order form" says nothing about which request it belongs to once you are hearing it rather than + looking at it, and the counter shares a printer — so what a button is about to put on paper is + worth knowing before it is pressed. */ + const Btn = ({ label, onClick, primary, ariaLabel, title }: { label: string; onClick: () => void; primary?: boolean; ariaLabel?: string; title?: string }) => ( + + ); + + return ( +
    + + {/* One button, and it writes the tab you are looking at. The count is said out loud wherever + the tab is a narrowing, because that is the difference between a file of this morning's + work and a file of the whole register, and the two are indistinguishable once they are + attachments on an email. Not on Kit check & waitlist: that tab counts one of its two + lists, and a number here that disagreed with the number on the tab would be read as a + bug in the file rather than as two different things being counted. */} + + + + + + {/* A stranded request is the one thing here that nobody else can rescue. It never reaches the + To do queue, it looks like any other greyed `awaiting` row in Open, and the ward is sitting + waiting on an approval that was never asked for — so it is said before the tabs rather + than found by opening one. */} + {noApprover.length > 0 && tab !== "noapprover" && ( + /* A rule down the edge, a mark and a heavier figure rather than a red box. The primary + button an inch away is the same red, so a red outline on its own is not a signal — and + this is the one thing on the screen nobody but the linen room can rescue. */ +
    + + + +
    + )} + +
    + {([["todo", `To do ${todo.length}${more}`], ["noapprover", `Needs an approver ${noApprover.length}${more}`], ["open", `Open ${open.length}${more}`], ["all", `All ${data.requests.length}${more}`], ["queries", `Record queries ${data.disputes.length}`], ["damage", `Damage ${data.damage.length}`], ["cycles", `Kit check & waitlist ${data.waiting.length}`]] as const).map(([k, lbl]) => ( + + ))} +
    + + {tab === "cycles" ? ( + <> +
    Kit check
    + {data.cycle ? ( +
    +
    + Running — due by {fmtDate(data.cycle.dueBy)} + + {data.cycle.answers} answer{data.cycle.answers === 1 ? "" : "s"} in · opened by {data.cycle.openedBy || "—"} + + act("kitcheck.close", { id: data.cycle!.id })} /> +
    +
    + ) : ( +
    + {(c) => setDueBy(e.target.value)} />} + { if (await act("kitcheck.open", { dueBy })) setDueBy(""); }} /> + + Asks everyone holding uniform to confirm what they have. + +
    + )} + + {/* The answers themselves, which nothing in the product used to show. + People answer a kit check garment by garment, and the shortfalls are the only reason + to run one — a count of replies tells the linen room nothing it can act on. Written + down here, per person and per size, they are the working list for correcting the + register: open the record, hand in or write off the line, and the next cycle starts + from a register that is true. */} +
    What people couldn't account for
    + {!data.cycle ? ( + No kit check is running. + ) : data.shortfalls.length === 0 ? ( + + {data.cycle.answers === 0 + ? "Nobody has answered yet." + : `Every one of the ${data.cycle.answers} answer${data.cycle.answers === 1 ? "" : "s"} so far matched the record.`} + + ) : ( + <> +
    + + + + + + + + + + + {data.shortfalls.map((f) => ( + + + + + + + {/* The number this table exists for. Marked as well as coloured: every other + figure in the row is a plain count, and what tells them apart across the + counter is the mark, not another shade of the brand red. */} + + + + + ))} + +
    WhoGarmentSizeOn recordConfirmedShortAnswered +
    {f.staffName} · {f.staffNum}{f.ward ? ` · ${f.ward}` : ""}{f.item}{f.size}{f.onRecord}{f.confirmed}{formatInZone(f.at, s.tz)}Open their record
    +

    + Nothing here changes a record — open it and return the missing garments as “Written off”. +

    + + )} + +
    Waiting for a size
    + {data.waiting.length === 0 && Nobody is waiting on a size.} + {data.waiting.map((w) => { + // The hold is a real deadline, not wording: lib/staffops refuses an accept once it has + // run out, so the counter has to be able to see that the garment is theirs to give to + // the next person rather than still being held for somebody who never came back. + const ends = holdEndsAt(w.offeredAt); + return ( +
    + {w.item} — {w.size} · {w.staffName}{w.ward ? ` (${w.ward})` : ""} + since {formatInZone(w.since, s.tz)} + {!w.offeredAt + ? act("waitlist.offer", { id: w.id })} /> + : holdExpired(w.offeredAt) + ? Hold lapsed — offer to the next person + : Held until {ends ? formatInZone(ends, s.tz, { day: "numeric", month: "short", hour: "numeric", minute: "2-digit" }) : "—"}} +
    + ); + })} +

    + Offering tells them and holds the garment for {WAITLIST_HOLD_HOURS} hours. +

    + + ) : tab === "damage" ? ( + data.damage.length === 0 ? ( + Nothing reported damaged that hasn't come back yet. + ) : ( + <> +
    +
    {TAB_TITLE.damage}{plural(data.damage.length, "report", "reports")} still to come back
    + {data.damage.map((d, i) => ( +
    +
    + + {d.item ? `${d.item}${d.size ? ` — ${d.size}` : ""}` : "Garment no longer on file"} + · {d.staffName} ({d.staffNum}{d.ward ? ` · ${d.ward}` : ""}) + + {d.kind} + {formatInZone(d.at, s.tz)} + act("damage.handedIn", { id: d.id })} /> +
    +
    + {d.requestCode ? `Replacement requested — ${d.requestCode}` : "No replacement asked for"} + {d.photoId ? " · photo attached" : ""} + {" · "}Open their record +
    + {d.note &&

    “{d.note}”

    } + {d.photoId && ( + // eslint-disable-next-line @next/next/no-img-element + The damage as reported + )} +
    + ))} +
    +

    + Handed in only clears the report — return the garment on their staff record. +

    + + ) + ) : tab === "queries" ? ( + data.disputes.length === 0 ? ( + Nobody has queried their record. + ) : ( +
    +
    {TAB_TITLE.queries}{plural(data.disputes.length, "record", "records")} somebody says is wrong
    + {data.disputes.map((d, i) => ( +
    +
    + {d.staffName} ({d.staffNum}{d.ward ? ` · ${d.ward}` : ""}) + {formatInZone(d.at, s.tz)} + act("dispute.resolve", { id: d.id })} /> +
    +

    {d.body}

    +
    + ))} +
    + ) + ) : ( + <> + {rows.length === 0 ? ( + + {tab === "todo" ? `Nothing approved and waiting${inLoaded}.` + : tab === "noapprover" ? `Every request waiting${inLoaded} has somebody to approve it.` + : data.moreRequests ? `Nothing here${inLoaded}.` : "Nothing here yet."} + + ) : ( +
    +
    + {TAB_TITLE[tab]} + {plural(rows.length, "request", "requests")} +
    + {rows.map((r, i) => { + const st = statusText(r); + const isOpen = openId === r.id; + const awaiting = r.status === "awaiting"; + const orphan = stranded(r); + /* The dropdown belongs to the open row alone, and so does `choices`, which is drawn up + above for that row. Two requests waiting at the same moment can have different answers + — each leaves out whoever raised it — so it is the open row's question that gets asked. + `picked` is whoever is chosen in that dropdown; opening any row clears the choice. */ + const reachable = isOpen ? choices.filter((c) => c.reachable) : []; + const unreachable = isOpen ? choices.filter((c) => !c.reachable) : []; + const picked = isOpen && reassign ? s.staff.find((x) => x.id === reassign) ?? null : null; + /* Who answered, and what they answered. A request that got as far as the linen room was + approved, so the decision line carries the manager's name; a decline is left standing + on its own, because a withdrawal at the counter also lands here and attributing that + to the manager who was asked would be a lie on the face of the queue. + The approver being the person the request is for is allowed — a manager signs for her + own uniform the same as anybody's — and her record says so wherever it shows. This + queue said only a name, and a name that happens to match the one three words to its + left is not something anybody notices reading down a queue. Matched on the id, because + a ward can carry two people spelled the same way. */ + const wearerApproves = !!r.managerId && r.managerId === r.staffId; + const approval = awaiting + ? (r.managerName ? `with ${r.managerName}${wearerApproves ? " — their own request, theirs to approve" : ""}` : "nobody has been asked yet") + : r.status === "declined" + ? (r.decision || "declined") + : `${r.decision || "Approved"} by ${r.managerName}${wearerApproves ? " — their own request, self-approved" : ""}`; + /* The ward's order form, with this request's garments already on it. + * + * Not the same piece of paper as the collection slip. The slip travels with the bag and is + * what somebody signs at the handover; the order form is the record of the ask — the sheet + * the ward used to fill in by hand and send down, and the one a signature goes on. Printing + * it from the request is the only way the paper and the app can agree about the sizes, + * because the alternative is somebody copying them out again. The office-use block comes + * out blank: it is filled in at the counter and the app does not know any of it yet. + * + * It prints on an undecided request on purpose, and it is safe to: the form leaves off + * every declined line, so once the ward has answered it is the bag, and while the ward is + * still deciding there is nothing to leave off and it is the whole ask. What keeps the two + * apart on paper is the manager's block — it prints blank, with an unsigned rule where the + * delegate approves the sets, so an undecided request comes off the printer plainly + * unapproved. That is the one state the form is actually for: the sheet is what the + * request is short of, and it can be walked up to the ward and signed there. + * + * The code goes on the end of the spoken name, not in place of the visible words: somebody + * driving the counter by voice — hands full of garments, which is most of the shift — says + * what is written on the button, and a name that did not start with those words leaves them + * pressing nothing and wondering why. */ + const orderForm = ( + window.open(`/print/order-form?request=${encodeURIComponent(r.id)}`, "_blank", "noopener")} /> + ); + return ( + // A stranded request is not dimmed with the rest of the `awaiting` ones: it is the one + // kind of waiting the linen room is meant to act on, so it also takes the rule down its + // left edge that every other flagged thing in the app wears. +
    +
    + {r.code} + + {r.summary} + · {r.staffName}{r.ward ? ` (${r.ward})` : ""} + + {orphan && No approver} + {st.label} + +
    + +
    + {[r.reason, approval, r.raisedByName ? `raised by ${r.raisedByName}` : "", formatInZone(r.createdAt, s.tz)].filter(Boolean).join(" · ")} +
    + + {isOpen && ( +
    + + {r.note &&

    “{r.note}”

    } + + {awaiting ? ( + <> +

    + {orphan + ? <>Nobody has been asked to approve this one — choose somebody who can. + : <>Waiting on {r.managerName}. If that answer is never coming, send it to somebody else or withdraw it.} +

    + {/* Without these two, a request addressed to a manager who never claimed an + account waits for ever: the wearer has no op that touches it and the manager + cannot sign in to decide it. */} +
    + + { if (reassign && await act("request.reassign", { id: r.id, managerId: reassign })) setReassign(""); }} /> + { if (confirm(`Withdraw ${r.code}? ${r.staffName} is told it was declined by the linen room.`)) act("request.withdraw", { id: r.id, reason: "Withdrawn — no approver available" }); }} /> + {orderForm} +
    + {/* A facility that has only just loaded its register has nobody on it who can + approve anything, and an empty dropdown beside a primary button reads as + a screen that is broken rather than as a register that is short. */} + {choices.length === 0 && ( +

    + Nobody on the register can approve this one — add the ward's managers on{" "} + the register, or withdraw it. +

    + )} + {/* Between choosing a name and pressing the button, which is the only moment + either of these can still be acted on. Afterwards the self-approval is on + the record, and the unreachable one is a request in Open under the name of + somebody who cannot answer it, with nothing anywhere saying so. */} + {picked && (picked.id === r.staffId || !picked.selfEmail) && ( +

    + {picked.id === r.staffId && ( + <>This is {picked.first}'s own request — sending it to them is a self-approval.{" "} + )} + {!picked.selfEmail && ( + <> + {picked.first} has no staff-app account, so can't be asked.{" "} + {picked.selfCode && slipLive(picked.selfCodeAt, s.today, s.tz) + ? <>A code on their record hasn't been used yet. + : picked.selfCode + ? <>The code on their record has expired — make a new one first. + : <>Give {picked.first} a code on their record first.} + + )} +

    + )} + + ) : ( +
    + {r.status === "accepted" && act("request.pick", { id: r.id })} />} + {r.status === "picking" && ( + <> + setHold(e.target.value)} /> + { if (await act("request.hold", { id: r.id, holdUntil: hold })) setHold(""); }} /> + act("request.round", { id: r.id })} /> + + )} + {r.status === "ready" && ( + <> + {/* One code for the whole bag, so the number of garments it covers is said + beside it — otherwise the person at the counter reads out a code, hands + over one garment and both of them think that was the lot. */} + Code {r.collectCode} · {plural(r.garments, "garment", "garments")}{r.holdUntil ? ` · until ${r.holdUntil}` : ""} + act("request.collected", { id: r.id })} /> + + )} + {r.status === "round" && On the round to {r.ward || "the ward"} — {plural(r.garments, "garment", "garments")}. The ward desk signs for it.} + {r.status === "delivered" && Signed by {r.signerName}{r.signerRole ? `, ${r.signerRole}` : ""}{r.claimedAt ? " · collected by the requester" : " · not yet collected from the ward"}} + {r.status === "collected" && Handed over at the counter.} + {r.status === "declined" && Declined — {r.declineReason || "no reason recorded"}.} + {/* The paper that travels with the bag. It lists the approved lines and the + collection code, so what is signed for is what was picked. */} + {r.status !== "declined" && ( + <> + openSlip(onRound(r) ? "delivery" : "collection", slipFor(r))} /> + {/* Nothing was ordered on a request every line of which was refused, so a + declined one gets no form — the same rule as the slip beside it. */} + {orderForm} + + )} +
    + )} + +
    Messages
    + {r.messages.length === 0 &&
    Nothing asked about this one.
    } + {r.messages.map((m) => ( +
    + {m.fromStaff ? m.authorName : `${m.authorName} (linen room)`} + {formatInZone(m.at, s.tz)} +
    {m.body}
    +
    + ))} +
    + setReply(e.target.value)} /> + { if (reply.trim() && await act("request.reply", { id: r.id, body: reply })) setReply(""); }} /> +
    + +
    History
    + {r.events.map((e) => ( +
    + {e.label}{e.meta ? ` — ${e.meta}` : ""} + {e.actorName} · {formatInZone(e.at, s.tz)} +
    + ))} +
    + )} +
    + ); + })} +
    + )} + {/* The queue is the newest few hundred requests and no more. Unsaid, a tab that has reached + the ceiling looks exactly like a tab that holds everything — the counts on the buttons + included — and somebody hunting a request from last winter concludes it was never + raised. The wearer's own record keeps its history separately, which is where a request + older than this cut-off is actually found. */} + {data.moreRequests && ( +

    + Only the most recent {data.requestLimit} requests are loaded — older ones are on{" "} + the wearer's staff record. +

    + )} + + )} + +
    + ); +} diff --git a/app/app/rounds/page.tsx b/app/app/rounds/page.tsx new file mode 100644 index 0000000..4dcd615 --- /dev/null +++ b/app/app/rounds/page.tsx @@ -0,0 +1,73 @@ +"use client"; +import { useState } from "react"; +import { useDerived, useSnap } from "@/lib/client"; +import { PageHead, Empty, KpiStrip, LiveRegion } from "@/components/ui"; +import { DeliverDialog } from "@/components/dialogs"; +import { ccOf, daysBetween, label, staffName, telHref, type PickupRec } from "@/lib/compute"; + +// Delivery rounds: everything awaiting pickup grouped by ward, ticked off on the floor with an on-screen signature. + +/* The Dashboard already counts pickups that have sat for a fortnight and puts the figure on the + front page, so the round sheet marks the same ones. Two screens disagreeing about which handover + is late is how a coordinator stops trusting either. */ +const STALE = 14; + +export default function RoundsPage() { + const { s } = useSnap(); + const { byId, staffById } = useDerived(); + const [deliver, setDeliver] = useState(null); + const [msg, setMsg] = useState(""); + const pending = s.pickups.filter((p) => !p.pickedUp); + const wards: Record = {}; + for (const p of pending) { const st = staffById[p.staffId]; const w = st?.dept || "Unknown"; (wards[w] = wards[w] || []).push(p); } + const wardNames = Object.keys(wards).sort(); + const garments = pending.reduce((t, p) => t + p.lines.reduce((n, l) => n + l.qty, 0), 0); + const stale = pending.filter((p) => daysBetween(p.received, s.today) >= STALE).length; + return ( +
    + + + {pending.length === 0 && Nothing waiting for delivery.} + {/* Zero old pickups is not news, so the third tile only takes the flag when there is something + to answer for. A rule and a mark that are always on the screen stop meaning anything. */} + {pending.length > 0 && 0, note: stale > 0 ? "Ring the ward if nobody is on shift to sign" : "Nothing has been sitting a fortnight" }, + ]} />} + {wardNames.map((w) => { + const rows = wards[w]; const st0 = staffById[rows[0].staffId]; + return ( +
    +
    + {w} + CC {st0 ? ccOf(s, st0) || "—" : "—"} · {rows.length} to deliver +
    +
    + {rows.map((p) => { + const st = staffById[p.staffId]; const tel = telHref(st?.phone); + const days = daysBetween(p.received, s.today); + const late = days >= STALE; + return ( + /* The days figure is the same number the line underneath says in words, so it is + read out once and not twice: the glance number is decoration, the sentence is + the message. */ +
    +
    +
    {staffName(st, "Staff")} {tel ? {st?.phone} : {st?.phone}}
    +
    {p.lines.map((l) => `${label(byId[l.itemId])} ${l.size}${l.qty > 1 ? ` ×${l.qty}` : ""}`).join(", ")} · {p.orderCode}
    +
    {late &&
    +
    + + +
    + ); + })} +
    +
    + ); + })} + {deliver && setDeliver(null)} onDone={(m) => setMsg(m)} />} +
    + ); +} diff --git a/app/app/settings/page.tsx b/app/app/settings/page.tsx new file mode 100644 index 0000000..e20a27e --- /dev/null +++ b/app/app/settings/page.tsx @@ -0,0 +1,997 @@ +"use client"; +import { Suspense, useEffect, useMemo, useRef, useState } from "react"; +import TwoFactor from "@/components/TwoFactor"; +import SsoSettings from "@/components/SsoSettings"; +import PlanTab from "@/components/PlanTab"; +import { useRouter, useSearchParams } from "next/navigation"; +import { useSnap } from "@/lib/client"; +import { PageHead, Dialog, ErrorLine, Field, LiveRegion, Seg } from "@/components/ui"; +import { parseCsv, CSV_TEMPLATES } from "@/lib/csv"; +import { LOCATION_KINDS, SET_GARMENTS, allowance, allowanceRoute, csvOf, daysBetween, fmtDate, groupKey, isKitGroup, isNursingGroup, kitGroupsOf, locMap, locPath, locTree, nursingGroupsOf, setsOnStart, type AllowanceRoute, type DeptRec, type SupplierRec, type UserRec } from "@/lib/compute"; +import { downloadCsv } from "@/lib/print"; + +// Plan is last and appears only once plans are live, for admins — see PlanTab. +const TABS = ["General", "Locations", "Departments", "Suppliers", "Account", "Sign-in", "Data", "Plan"] as const; +type Tab = (typeof TABS)[number]; +// The supplier details edited on the card below, which is also the shape of the keys their +// half-typed edits are filed under in `draft`. +type SupKey = "contact" | "phone" | "account" | "lead"; + +// Only used by a browser too old to have Intl.supportedValuesOf: the zones an Australian facility +// is actually in, so the picker is never empty on the one machine in the room that still runs it. +const FALLBACK_ZONES = ["Australia/Brisbane", "Australia/Sydney", "Australia/Melbourne", "Australia/Hobart", "Australia/Adelaide", "Australia/Darwin", "Australia/Perth", "Australia/Broken_Hill", "Australia/Lord_Howe"]; + +/* The three ways a staff group gets up to the ceiling, in the order a coordinator reads them. The + names are the ones the rest of the product uses for the routes, so a coordinator who reads + "Starting kit" here reads the same words on the order form and at the counter. */ +const ROUTES: { id: AllowanceRoute; label: string; now: string }[] = [ + { id: "fte", label: "FTE table", now: "on the FTE table" }, + { id: "kit", label: "Starting kit", now: "on the starting kit" }, + { id: "approval", label: "Manager approval", now: "on manager approval" }, +]; + +// Module-scope so React keeps the same element type across renders (defining it inside the page remounts the input on every keystroke). +function TextField({ label, hint, ph, value, onChange, disabled }: { label: string; hint?: string; ph?: string; value: string; onChange: (v: string) => void; disabled: boolean }) { + return {(c) => onChange(e.target.value)} disabled={disabled} />}; +} + +/* Also module-scope, and for a sharper reason than tidiness: this is a live region now, and a live + region that is torn down and rebuilt announces its contents again. Defined inside the page it + would be a fresh component type on every keystroke, so "Saved." would be read out over and over + while somebody typed in an unrelated box. */ +function Msg({ text }: { text?: string }) { + return ; +} + +// useSearchParams needs a Suspense boundary for static rendering. +export default function SettingsPage() { + return ; +} + +function SettingsInner() { + const { s, isAdmin, busy, mutate } = useSnap(); + const router = useRouter(); + const [tab, setTab] = useState("General"); + const sp = useSearchParams(); + const planShown = isAdmin && !!s.plan?.live && !s.demo; + const tabs = planShown ? TABS : TABS.filter((t) => t !== "Plan"); + // Deep links: ?tab=account (sidebar name), ?tab=data (dashboard setup card), ?tab=plan (the + // plan banner); #hash forms kept for old links. + useEffect(() => { + const want = (sp.get("tab") || window.location.hash.replace("#", "")).toLowerCase(); + const t = TABS.find((x) => x.toLowerCase() === want); + if (t && (t !== "Plan" || planShown)) setTab(t); + }, [sp, planShown]); + const [nl, setNl] = useState({ name: "", kind: "Shelf", parentId: "" }); + const [msg, setMsg] = useState>({}); + const say = (k: string, v: string) => setMsg((m) => ({ ...m, [k]: v })); + const [draft, setDraft] = useState>({}); + const timers = useRef>>({}); + useEffect(() => { const t = timers.current; return () => Object.values(t).forEach(clearTimeout); }, []); + /* `draft` as it stands now, rather than as it stood in the render that set a timer. A save that + fires after a pause carries the other boxes on the row along with it, and by the time it fires + the coordinator may have typed in one of them: a ward renamed and a cost centre typed straight + after used to save the new cost centre, then put the old one back a moment later when the + rename landed — and the ward's orders went on being costed to a number nobody meant any more. */ + const draftNow = useRef(draft); + useEffect(() => { draftNow.current = draft; }); + /* Take a half-typed edit back out of `draft`, so the box goes back to showing what the register + holds. Used where an edit is refused: a value nobody accepted must not be left on screen, where + it reads as saved and can be picked up by whatever else on the row saves the row. + `only` is the text that was refused, and the box is left alone if it no longer says that. A + refusal from the server arrives a moment after the name went to it, and by then the coordinator + may already be typing the correction — clearing the box then takes away letters nobody has so + much as looked at, mid-word, which reads as a field that eats what you type. What is left + behind is on its way to be checked in its own right, so nothing unchecked is left standing. */ + const forgetDraft = (k: string, only?: string) => setDraft((d) => { if (only !== undefined && d[k] !== only) return d; const next = { ...d }; delete next[k]; return next; }); + function debounced(k: string, v: string, op: string, payload: Record, msgKey = "fields") { + setDraft((d) => ({ ...d, [k]: v })); + clearTimeout(timers.current[k]); + timers.current[k] = setTimeout(async () => { const r = await mutate(op, payload); say(msgKey, r.ok ? "Saved." : r.error); }, 500); + } + const NUMERIC = ["defaultEntitlement", "initialSets", "defaultReorder", "exceptionHigh", "capSets", "varianceReason"]; + const setField = (k: string, v: string) => { if (NUMERIC.includes(k) && v === "") { setDraft((d) => ({ ...d, [k]: v })); return; } debounced(k, v, "settings.update", { [k]: v }); }; + const val = (k: keyof typeof s.settings) => (draft[k] !== undefined ? draft[k] : String(s.settings[k] ?? "")); + + const [newGroup, setNewGroup] = useState(""); + const [nd, setNd] = useState({ name: "", cc: "" }); + const [ns, setNs] = useState(""); + const [userDlg, setUserDlg] = useState(false); + const [pw, setPw] = useState({ current: "", next: "", again: "" }); + const [del, setDel] = useState({ open: false, password: "", confirm: "", busy: false, err: "" }); + const [me, setMe] = useState({ first: s.session.first, last: s.session.last, title: s.session.title }); + const meDirty = me.first !== s.session.first || me.last !== s.session.last || me.title !== s.session.title; + const [impKind, setImpKind] = useState("catalog"); + const [impBusy, setImpBusy] = useState(false); + const [wipe, setWipe] = useState(""); + const [reset, setReset] = useState(""); + /* The ward notice is written from here and read nowhere on this side of the product: the snapshot + carries no notice, so this box starts empty even while one is up on every wearer's home screen. + Said out loud under the field rather than left to be worked out, because an empty box meaning + "this screen can't see the board" and an empty box meaning "the board is empty" are not the + same thing to a coordinator deciding whether to post. */ + const [notice, setNotice] = useState({ body: "", endsAt: "" }); + const [noticeBusy, setNoticeBusy] = useState(false); + // Optimistic: the snapshot refresh lags the click, and a checkbox that snaps back reads as a failure. + const [lookupOn, setLookupOn] = useState(null); + const [tzPick, setTzPick] = useState(null); // same reason as lookupOn + /* And each group's route, for the same reason again. A route saves by sending both lists whole, + and until the refreshed snapshot lands the row still reads the old ones, so the route pressed + would spring back to the one before — read as a save that didn't take, and pressed again. Held + only while the snapshot still carries the lists it was worked out from: once those change, + whether from this save landing or from somebody else's, the snapshot is the truth again. Held + any longer, a group renamed since would still be here under its old name, and the next route + pressed would send that name back and take the renamed group off its route. */ + const [routePick, setRoutePick] = useState<{ base: string; nursing: string[]; kit: string[] } | null>(null); + const [renaming, setRenaming] = useState(null); + const [tzErr, setTzErr] = useState(""); + const [bkBusy, setBkBusy] = useState(false); + const [resetBusy, setResetBusy] = useState(false); + const [logoV, setLogoV] = useState(0); + /* The zone every date-only column in the product is written against — see facilityToday. A room + left on the Brisbane default gets its evenings filed against tomorrow: a Perth issue at 22:30 on + 30 June counts against the next financial year's entitlement and drops out of June's exceptions + report and cost-centre journal. The names come from this browser's zone table; settings.update + checks a submitted name against the server's, and the two are not guaranteed to be the same list + — an older Node, or a browser new enough to offer a zone the server's ICU data predates, and the + server refuses something this select happily offered. Rare, and not something the client can + check for, so the refusal is put under the select instead of being left to a message further + down the page. The current zone is prepended if this browser has never heard of it, so a + facility can always see what it is on. */ + const zones = useMemo(() => { + // Optional call on purpose: TypeScript's lib says this exists, the browser in the linen room + // may disagree. + const all = Intl.supportedValuesOf?.("timeZone") || FALLBACK_ZONES; + return all.includes(s.settings.timezone) ? all : [s.settings.timezone, ...all]; + }, [s.settings.timezone]); + + /* The facility's own two lists and nothing else. An empty one means no group is on that route: + there is no list of ours standing in for it, so nothing on this screen may behave as if there + were. */ + const storedLists = { nursing: nursingGroupsOf(s), kit: kitGroupsOf(s) }; + const listSig = JSON.stringify([storedLists.nursing, storedLists.kit]); + const lists = routePick && routePick.base === listSig ? routePick : storedLists; + // The same answer the counter, the order form and the wearer's own app reach, including the FTE + // table winning for a group somehow on both lists. + const routeOf = (g: string) => allowanceRoute({ nursing: isNursingGroup(lists.nursing, g), kit: isKitGroup(lists.kit, g) }); + const routeNow = (r: AllowanceRoute) => ROUTES.find((x) => x.id === r)?.now ?? ""; + /* Everybody still working, counted by the group they are filed under and compared the way the app + compares group names. It is what the remove button has to warn about, and what the list of + groups nobody has added yet is built from. */ + const filedUnder: Record = {}; + const spelt: Record = {}; + for (const st of s.staff) { + const k = groupKey(st.group); + if (st.inactive || !k) continue; + filedUnder[k] = (filedUnder[k] || 0) + 1; + if (!spelt[k]) spelt[k] = st.group.trim(); + } + const staffCount = (g: string) => filedUnder[groupKey(g)] || 0; + /* The groups on the list, then any name still on a route that is no longer on the list — left + there by a backup restored from an older file, or by the move to three routes. The people filed + under it are still on that route, so it stays in sight to be kept or let go, rather than + deciding somebody's kit from a list nobody can see. */ + const listedKeys = new Set(s.settings.staffGroups.map(groupKey)); + const offList: string[] = []; + for (const g of [...lists.nursing, ...lists.kit]) { + const k = groupKey(g); + if (!listedKeys.has(k) && !offList.some((x) => groupKey(x) === k)) offList.push(g); + } + const groupRows = [...s.settings.staffGroups.map((g) => ({ g, listed: true })), ...offList.map((g) => ({ g, listed: false }))]; + /* Groups people are filed under that nobody has put on this list. A staff import files people + under whatever the roster calls them and adds nothing here, so on a facility that has just + loaded its register this is every group it has — and everybody in them is on manager approval + until the group is added and given a route. Named with a button each, biggest first, rather + than left for somebody to notice. */ + const rowKeys = new Set(groupRows.map((r) => groupKey(r.g))); + const unlisted = Object.keys(filedUnder).filter((k) => !rowKeys.has(k)).map((k) => ({ g: spelt[k], n: filedUnder[k] })).sort((a, b) => b.n - a.n); + + /* The figures the routes are described with, read off the boxes rather than the stored values, so + the words describe what walking away from this screen now would leave in force. A box left empty + saves nothing, so the stored figure stands for it. Put through allowance() — the sum the counter + and the wearer's app do — so a starting kit typed above the ceiling is quoted at the ceiling, + which is what the counter actually hands over. */ + const typedSets = (k: "initialSets" | "capSets") => { const t = val(k).trim(); return t === "" ? s.settings[k] : Number(t); }; + const shape = allowance({ held: 0, kit: true, startingSets: typedSets("initialSets"), capSets: typedSets("capSets") }); + const ceiling = shape.max, kitStart = shape.start ?? 0; + const kitOverCeiling = setsOnStart(typedSets("initialSets")) > ceiling; + /* Sets and garments together, because they are one kit counted two ways and the argument at the + counter is always about garments. SET_GARMENTS rather than a bare 2: a set is a top and a bottom + everywhere in the product, and this is not the place to re-decide it. */ + const sets = (n: number) => `${n} set${n === 1 ? "" : "s"} (${n * SET_GARMENTS} garments)`; + const routeSays: Record = { + fte: "First kit proposed from each person's hours; a manager can sign for more.", + kit: `${sets(kitStart)} on the first day, then more as needed.`, + approval: "Nothing on the first day; a manager approves each set.", + }; + + async function signOut() { await fetch("/api/auth/logout", { method: "POST" }); router.push("/auth"); router.refresh(); } + /* One change to the groups at a time. Each of these sends whole lists worked out from what is on + screen, so a second one sent before the first is back in the snapshot is worked out from the + lists as they were: an add straight after a rename would send the old name back, and the renamed + group would come off its route with it. `busy` covers the save and the refresh behind it, which + is well under a second. Refused out loud rather than by greying the buttons, because a button + switched off under the finger drops keyboard focus on the floor. */ + const settled = () => { if (!busy) return true; say("groups", "Still saving the last change — try again in a moment."); return false; }; + // Editing the group list, a ward or a supplier used to fire and forget: a refusal (the last group, + // a name already taken, a lost connection) left the chip sitting where it was with nothing said, + // and the admin clicked again. `name` is for the buttons that add a group somebody is already + // filed under; the box below the list sends nothing and is cleared once its group is in. + async function addGroup(name?: string) { + const g = (name ?? newGroup).trim(); + if (!g || !settled()) return; + const route = routeOf(g); + const r = await mutate("settings.update", { staffGroups: [...s.settings.staffGroups, g] }); + say("groups", r.ok ? `${g} added, ${routeNow(route)}${route === "approval" ? " until you choose another route" : ""}.` : r.error); + if (r.ok && name === undefined) setNewGroup(""); + } + async function removeGroup(g: string) { + if (!settled()) return; + const n = staffCount(g), route = routeOf(g); + const who = `${n} staff member${n === 1 ? " is" : "s are"} filed under ${g}`; + /* Asked before, not reported after. Taking a group off the list takes it off its route too, and + everybody still filed under it goes onto manager approval — a coordinator tidying up a list is + owed that before a team's first kit goes, not in a message once it has. */ + if (n && !confirm(route === "approval" + ? `${who}. They stay filed under it, still on manager approval, but nobody new can be put in ${g}. Take it off the list?` + : `${who}, which is ${routeNow(route)}. Taking it off the list puts them on manager approval — move them to another group first to keep their route.\n\nTake ${g} off the list?`)) return; + const r = await mutate("settings.update", { staffGroups: s.settings.staffGroups.filter((x) => x !== g) }); + say("groups", !r.ok ? r.error + : n ? `${g} removed. The ${n} staff member${n === 1 ? " filed under it is" : "s filed under it are"} on manager approval, and ${g} is listed below to add back.` + : `${g} removed.`); + } + // Both lists in one save, because moving a group is taking it off one route and putting it on + // another, and the server refuses any save that would leave it on two. + async function setRoute(g: string, to: AllowanceRoute) { + const from = routeOf(g); + if (from === to || !settled()) return; + const k = groupKey(g); + const nursing = lists.nursing.filter((x) => groupKey(x) !== k); + /* A group caught on both lists is on the FTE table already — allowanceRoute() says so — so + taking it off the kit list here changes nobody's route. What it does is let the save through: + the server refuses any save that leaves a group on both, whichever group the click was about. */ + const kit = lists.kit.filter((x) => groupKey(x) !== k && !isNursingGroup(nursing, x)); + if (to === "fte") nursing.push(g); + if (to === "kit") kit.push(g); + setRoutePick({ base: listSig, nursing, kit }); + const r = await mutate("settings.update", { nursingGroups: nursing, kitGroups: kit }); + // Put the row back where the server still has it, or the screen would go on claiming a change + // that was refused. + if (!r.ok) { setRoutePick(null); say("groups", r.error); return; } + say("groups", `${g} is ${routeNow(to)}. ${routeSays[to]}`); + } + /* The one message the linen room can put in front of everybody at once. It is not mail and it is + not a request: it is the board on the wall, and the ward reads it on the home screen of their + own app. An empty message takes the board down — the linen room's way of saying that's over. */ + async function postNotice() { + const body = notice.body.trim(), endsAt = notice.endsAt.trim(); + /* A day already gone is a notice nobody will ever see: the staff app only shows one whose end + date is today or later. Caught here, because the server takes the date happily and the first + anyone would know of it is that the ward never mentioned the thing they were told. */ + if (body && endsAt && endsAt < s.today) { say("notice", `${fmtDate(endsAt)} has already gone, so nobody would see this. Pick today or later, or leave the date blank.`); return; } + setNoticeBusy(true); + const r = await mutate<{ cleared: boolean }>("notice.set", { body, endsAt }); + setNoticeBusy(false); + if (!r.ok) { say("notice", r.error); return; } + say("notice", r.result.cleared + ? "The board is clear. Nothing shows on anybody's home screen now." + : `Posted. Every staff member who has set up the app sees this on their home screen${endsAt ? `, up to and including ${fmtDate(endsAt)}` : ", until it is taken down"}.`); + } + /* Renaming a ward is safe to offer because dept.save carries the old name forward in the same + transaction: every staff record filed under it and every order costed to it moves with it, so + nothing is left pointing at a name that has gone. + + A rename that is not going to happen has to leave the row showing the ward the register still + has. It used to leave the rejected text sitting in the box, which is worse than not checking at + all: the coordinator walks away reading a ward name that exists nowhere, and the cost centre box + beside it saves the whole row — so the next cost centre typed on that row was the thing that + finally saved the name nobody accepted. Every ending here either saves or puts the name back, + and says which — and either way it says so, because a name that was refused was refused whether + or not a better one is already being typed over it. */ + function renameDept(d: DeptRec, v: string) { + const k = "deptname:" + d.id; + setDraft((x) => ({ ...x, [k]: v })); + clearTimeout(timers.current[k]); + /* Checked when the typing stops rather than on every keystroke, because half a ward's name on + the way to a whole one is not a refusal — clearing the box under somebody mid-word would make + the field unusable. The pause is the same one that commits the save. */ + timers.current[k] = setTimeout(async () => { + const name = v.trim(); + const no = deptNameRefusal(d, name); + if (no) { forgetDraft(k, v); say("depts", no); return; } + const r = await mutate("dept.save", { id: d.id, name, cc: deptCc(d, draftNow.current).trim() }); + if (!r.ok) { forgetDraft(k, v); say("depts", r.error); return; } + say("depts", `Renamed to ${name}. Everyone filed under ${d.name}, and every order costed to it, moved with it.`); + }, 600); + } + /* The catch is the whole point of parseCsv refusing a malformed file. It throws to stop a + half-import, and without somewhere to land that refusal was an unhandled rejection: the admin + saw "Importing…" sit there forever and went looking for the staff it never loaded. Whatever + parseCsv says — which line, which quote — is what the admin needs on screen to fix the file. */ + async function importFile(file: File) { + setImpBusy(true); say("import", "Importing…"); + try { + const rows = parseCsv(await file.text()); + if (!rows.length) { say("import", "No rows found — check the header row."); return; } + const r = await mutate<{ created: number; updated: number; skipped: number; styles?: number; errors: string[] }>("import.rows", { kind: impKind, rows }); + if (!r.ok) { say("import", r.error); return; } + const x = r.result; + say("import", `${CSV_TEMPLATES[impKind].name}: ${x.created} created, ${x.updated} updated, ${x.skipped} skipped.${x.styles ? ` ${x.styles} uniform ${x.styles === 1 ? "style" : "styles"} set.` : ""}` + (x.errors.length ? "\n" + x.errors.join("\n") : "")); + } + catch (e) { say("import", (e as Error)?.message || "That file couldn’t be read as a CSV. Nothing was imported."); } + finally { setImpBusy(false); } + } + async function restore(file: File) { + if (!confirm("Restore this backup? It replaces ALL data in this facility (catalogue, staff, orders, issues, stock, approvals). Users are kept.")) return; + say("backup", "Restoring…"); + try { + const data = JSON.parse(await file.text()); + const r = await mutate<{ photosSkipped: number }>("backup.restore", data); + if (!r.ok) { say("backup", r.error); return; } + // A restore takes back a capped number of photos and drops the rest rather than refusing the + // whole file. Said out loud, because the alternative is a room believing every signature and + // damage photo is back on the record when some of them only exist in the file. + const skipped = r.result?.photosSkipped || 0; + say("backup", skipped ? `Backup restored — every record came back, but ${skipped} photo${skipped === 1 ? "" : "s"} in the file did not. Keep the backup file: those images are only in it now.` : "Backup restored."); + } + catch (e) { say("backup", "Import failed — " + (e as Error).message); } + } + /* Fetched rather than a plain , because a browser downloading a file never + shows the page its contents: the export trims the oldest photos to keep the file inside what a + restore will take back, counts them in `photosOmitted`, and until this ran through fetch nobody + was ever told. A room finds out otherwise only on the day it restores. */ + async function exportBackup() { + setBkBusy(true); say("backup", "Preparing the backup…"); + try { + const res = await fetch("/api/backup"); + /* Every other write on this page goes through mutate, which sends a dead session back to the + sign-in door; this one fetch was outside that and would have handed the admin a signed-out + error page saved as threadcount-backup.json — a file that looks like a backup and restores + nothing. Same destination as mutate's, carrying where they were so they land back here. */ + if (res.status === 401) { window.location.assign(`/auth?next=${encodeURIComponent(location.pathname + location.search)}`); return; } + if (!res.ok) { say("backup", ((await res.json().catch(() => ({}))) as { error?: string }).error || "Export failed — nothing was downloaded."); return; } + const text = await res.text(); + // Read out of the text rather than JSON.parse: the file carries every photo that travelled and + // can run to tens of megabytes, and parsing it a second time on a linen-room PC to learn one + // number is not worth the memory. + const omitted = Number(/"photosOmitted":\s*(\d+)/.exec(text)?.[1] || 0); + const name = /filename="([^"]+)"/.exec(res.headers.get("content-disposition") || "")?.[1] || "threadcount-backup.json"; + const url = URL.createObjectURL(new Blob([text], { type: "application/json" })); + const a = document.createElement("a"); a.href = url; a.download = name; a.click(); + setTimeout(() => URL.revokeObjectURL(url), 60_000); + say("backup", omitted + ? `${name} downloaded. ${omitted} older photo${omitted === 1 ? " was" : "s were"} left out so the file stays small enough to restore — every record is in it, and the images stay on the server.` + : `${name} downloaded.`); + router.refresh(); + } catch (e) { say("backup", "Export failed — " + (e as Error).message); } + finally { setBkBusy(false); } + } + function template(kind: string) { + const t = CSV_TEMPLATES[kind]; + const a = document.createElement("a"); a.href = "data:text/csv;charset=utf-8," + encodeURIComponent(t.headers + "\n" + t.example + "\n"); a.download = `threadcount-${kind}-template.csv`; a.click(); + } + function uploadLogo(file: File) { + if (file.size > 400 * 1024) { say("logo", "Logo must be under 400 KB."); return; } + const r = new FileReader(); + r.onload = async () => { const res = await mutate("settings.update", { logoData: String(r.result) }); setLogoV((v) => v + 1); say("logo", res.ok ? "Logo saved — it prints top-right on slips." : res.error); }; + r.readAsDataURL(file); + } + // How many sizes sit on each location, so an empty shelf is obvious before it is deleted. + const locCounts: Record = {}; + for (const k in s.placed) locCounts[s.placed[k]] = (locCounts[s.placed[k]] || 0) + 1; + const H = ({ children, top = 6 }: { children: React.ReactNode; top?: number }) =>
    {children}
    ; + const Note = ({ children }: { children: React.ReactNode }) =>
    {children}
    ; + /* Not a component defined in here. React compares element types by identity, so a helper declared + inside the render is a brand-new type on every keystroke: the whole field is torn down and + rebuilt, and the caret goes with it. TextField sits at module scope and is handed everything it + needs, which is why F is a plain function returning an element rather than . */ + const F = (k: keyof typeof s.settings, label: string, opts: { ph?: string; hint?: string; numeric?: boolean; demoFixed?: boolean } = {}) => + setField(k, opts.numeric ? v.replace(/[^0-9]/g, "") : v)} />; + const grid: React.CSSProperties = { display: "grid", gridTemplateColumns: "1fr 1fr", gap: "var(--space-4)", marginTop: "var(--space-3)" }; + const deptStaff: Record = {}; for (const st of s.staff) deptStaff[st.dept] = (deptStaff[st.dept] || 0) + 1; + + /* One reading of a field, used both by the input that edits it and by the export that writes it, + so the two cannot drift apart. debounced() holds a keystroke in `draft` for half a second before + it reaches the server, and `draft` is what the coordinator can see in the box — so `draft` is + what the file has to say. Overlaying it here rather than flushing the pending saves first is + deliberate: pressing Export must not write to the register (a half-typed cost centre would be + committed early), it must not wait on the network to hand over a file, and a save the server + refuses leaves the typed value on screen anyway — only the overlay still matches it. The ward's + own name is the exception, and exportDepts says why. A save that goes out after a pause passes + draftNow instead, for the reason given where that is kept. */ + const deptCc = (d: DeptRec, from = draft) => from["dept:" + d.id] ?? d.cc; + /* The same overlay for the ward's own name, and for a second reason on top of the export's: the + cost centre box beside it saves the whole row, name included, so without this a cost centre + typed while a rename was still settling would quietly put the old name back. */ + const deptName = (d: DeptRec) => draft["deptname:" + d.id] ?? d.name; + /* What is wrong with a ward name, in the words the coordinator needs, or nothing if it is fine. + One reading of it, because two boxes on the row both save the row — the name and the cost centre + — and if they disagreed about what counts as a name, the cost centre box would be the way a + rejected name got saved anyway. The register itself refuses both of these; asked here as well so + the answer arrives while the coordinator is still looking at the row they typed it on. */ + function deptNameRefusal(d: DeptRec, name: string) { + if (!name) return `A ward needs a name — ${d.name} hasn’t been changed.`; + const clash = s.depts.find((o) => o.id !== d.id && o.name.trim().toLowerCase() === name.toLowerCase()); + return clash ? `${clash.name} is already on the list, and two wards with one name can’t be told apart on a staff record or a journal line.` : ""; + } + /* The name this row would be saved under: what has been typed, unless it is a name the register + would refuse, in which case the ward keeps the one it has. Typing a cost centre must never be + the thing that commits a rename. It is for the save alone — what the file hands to finance is + the name the register actually holds, see exportDepts. */ + const deptSaveName = (d: DeptRec) => { const n = deptName(d).trim(); return deptNameRefusal(d, n) ? d.name : n; }; + const supField = (sup: SupplierRec, k: SupKey) => draft[`sup:${sup.id}:${k}`] ?? (sup[k] === null ? "" : String(sup[k])); + + /* The three registers on this page are the ones a coordinator is most often asked to hand over — + the shelf map before a stocktake, the ward list for finance, the supplier list for procurement — + and until now the only way out of any of them was to retype what was on the screen. Each tab + exports its own register and nothing else: somebody on Suppliers pressing Export means suppliers. */ + function exportLocations() { + /* Nothing to overlay here, unlike the two below: the only editable thing on this tab is the + Inside select, and that is saved the moment it changes rather than held in `draft`. */ + const byId = locMap(s); + /* A tree flattened into rows loses the thing that made it a tree, and "Bay B3" on its own is no + use to anybody walking the room — there is a B3 on every shelf. So each row carries its full + path as well as its own name, built with the helper the rest of the app renders a location + with, and a spreadsheet sorted any which way still reads Linen Room · Shelf B · Bay B3. */ + const rows = locTree(s, true).map(({ loc }) => [loc.name, loc.kind, loc.parentId ? byId[loc.parentId]?.name ?? "" : "", locPath(byId, loc.id).map((l) => l.name).join(" · "), locCounts[loc.id] || 0]); + downloadCsv(`threadcount-locations-${s.today}.csv`, csvOf(["Location", "Kind", "Inside", "Full path", "Sizes"], rows)); + } + /* dept and cc are the import template's own headers, not prettier ones that happen to normalise + onto them, so what comes out of here is exactly what the importer expects back: a coordinator + can export the wards, fix twenty cost centres in a spreadsheet and import the same file under + Data without touching the header row. The staff count is ours to be useful — the importer has + no alias for it, so it is ignored on the way back in and cannot create a ward of its own. */ + function exportDepts() { + /* The ward's name as the register holds it, not as the box reads it. A rename is half a second + behind the typing and the server can still turn it down after that, so a name in the box is + not yet a ward. This file goes to finance and comes back in through Data, where a name that + never landed arrives as a ward of its own: the staff stay on the old one, the new cost centre + goes on the new one, and the ward is in two halves. The cost centre beside it is the typed + one on purpose — a code is typed into a ward that already exists, so the worst an unsaved one + does is carry a correction to finance a moment early. + Trimmed the way dept.save trims, so a code typed with a stray trailing space — invisible in + the box — reaches finance in the form the register will actually hold. */ + downloadCsv(`threadcount-departments-${s.today}.csv`, csvOf(["dept", "cc", "staff"], s.depts.map((d) => [d.name, deptCc(d).trim(), deptStaff[d.name] || 0]))); + } + // Everything procurement rings a supplier about: who to ask for, on which account, and how long + // they take — lead time being what dates the delivery on a new order. The product and order counts + // are the screen's own, and they say which of these names anybody is actually buying from. + function exportSuppliers() { + const rows = s.supplierDir.map((sup) => [sup.name, supField(sup, "contact"), supField(sup, "phone"), supField(sup, "account"), supField(sup, "lead"), s.catalog.filter((it) => it.supplier === sup.name).length, s.orders.filter((o) => o.supplier === sup.name).length]); + downloadCsv(`threadcount-suppliers-${s.today}.csv`, csvOf(["Supplier", "Contact", "Phone", "Account no.", "Lead time (days)", "Products", "Orders"], rows)); + } + const lastBk = s.settings.lastBackup; const bkDays = lastBk ? daysBetween(lastBk, s.today) : null; + /* A week is the line. Past it the facility is one failed disk away from retyping its register by + hand, which is the only thing on this page worth interrupting somebody over. */ + const bkStale = !lastBk || (bkDays ?? 0) > 7; + + return ( + /* The ink band runs the full width of the content column, so the reading measure is set on the + form underneath it rather than on the section. Set here, the head would bleed out to the left + gutter and stop dead at 760px on the right. */ +
    + +
    + {/* Seg rather than a hand-rolled strip, for what Seg carries: aria-pressed. Which tab you are + on used to be a fill colour and nothing else, so a coordinator on a screen reader heard six + identical buttons, and tapping one announced no change at all. */} + + + {tab === "General" && ( + <> + Facility +
    + {F("facility", "Facility")}{F("location", "Stock location")}{F("coordinator", "Coordinator name")} + {/* Fixed in the demo for the same reason the coordinator's name is, with more riding on + it: everyone shares that one facility, so an address or number typed here prints in + the foot of the order form in front of every other visitor — and it would be a real + person's address and a real phone. */} + {F("coordinatorEmail", "Coordinator e-mail", { ph: "e.g. uniforms@yourhospital.org.au", demoFixed: true })} + {F("coordinatorPhone", "Coordinator phone", { ph: "e.g. 07 3xxx xxxx", demoFixed: true })} + {/* Off in the demo for the same reason settings.update refuses the facility name and the + slip footers there: everyone shares that one facility, so a visitor setting it to + Honolulu re-dates the dashboard, the exceptions report and the journal for every + other visitor — the director of nursing and the Play reviewer included. */} + {(c) => ( + + )} +
    + These print on slips, purchase orders, reports and the uniform order form. + Issuing & stock +
    {F("capSets", "Ceiling, every group (sets)", { numeric: true, ph: "e.g. 6", hint: "Held at any time — not a yearly allowance." })}{F("initialSets", "Starting kit (sets)", { numeric: true, ph: "e.g. 3", hint: "First day, Starting kit route only." })}{F("defaultEntitlement", "Yearly figure for reports (garments)", { numeric: true })}{F("defaultReorder", "Default reorder level", { numeric: true, hint: "For sizes without their own." })}{F("exceptionHigh", "Exception threshold (items/month)", { numeric: true })}
    + {kitOverCeiling && Nobody is handed more than the ceiling, so the starting kit stops at {sets(kitStart)}.} + {/* Set on the counter phone and nowhere else until now, which meant the one number the + desktop stock take enforces could only be changed by somebody holding the phone — + and on a facility whose phones are all issued out, not at all. */} + Stock takes +
    {F("varianceReason", "Reason required at (garments)", { numeric: true, ph: "e.g. 5", hint: "Over or short, here and on the counter phone." })}
    + Finance & journal +
    {F("glAccount", "GL account", { ph: "e.g. 631020" })}{F("journalDesc", "Journal description prefix", { ph: "e.g. Uniform issues" })}
    + Used by the Reports journal export and month-end pack. + Slips & logo +
    + {F("slipOrg", "Organisation name on slips", { ph: "Printed when there is no logo" })} + {/* Not a Field: this cell holds a preview, a file picker and a remove button, and a single +
    + + Staff groups + Each group takes one route; every route stops at the ceiling of {sets(ceiling)} held. + {/* One sentence per route, read once here rather than repeated down every row, and written + with this facility's own figures — the ones the counter and the wearer's app quote. */} +
    + {ROUTES.map((r) =>
    {r.label}. {routeSays[r.id]}
    )} +
    + {/* Where every new facility starts: it names its own groups, and there is no list of ours to + stand in for them. Until it does, the only route anybody is on is manager approval, and + that is said here rather than left as an empty space to be puzzled over. */} + {!groupRows.length && ( +
    +
    + )} + {!!groupRows.length && ( +
    + {groupRows.map(({ g, listed }) => { + const route = routeOf(g), n = staffCount(g); + return ( +
    +
    + {g} +
    {n ? `${n} staff member${n === 1 ? "" : "s"}` : "Nobody filed under it"}{listed ? "" : " · not on the list"}
    +
    + {/* Seg's markup rather than Seg itself, because Seg's buttons can't be switched off + for an issuer, who may read the routes but not change them. One pressed button + out of three is also what makes a group on two routes impossible to ask for. */} +
    + {ROUTES.map((r) => )} +
    + {isAdmin && ( +
    + {listed + ? + : } + {/* A bare "×" announces as "times, button" and names nothing, so a screen-reader + user had no way to tell which group they were about to delete. */} + {listed && } +
    + )} +
    + ); + })} +
    + )} + {isAdmin &&
    setNewGroup(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter" && newGroup.trim()) addGroup(); }} />
    } + {!!offList.length && Groups not on the list keep their route but take nobody new — add one back to keep it.} + {!!unlisted.length && ( +
    + {unlisted.length === 1 ? "This group is" : "These groups are"} on the staff register but not on this list, so {unlisted.length === 1 ? "its" : "their"} staff are on manager approval until added{isAdmin ? "" : " by an admin"}. +
    + {unlisted.map(({ g, n }) => isAdmin + ? + : {g} · {n})} +
    +
    + )} + + + {isAdmin && ( + <> + Ward notice + Shown on the home screen of the staff app. + {(c) =>
    + + Issue stock + + + {(welcome || setupNeeded) && ( +
    +
    +
    +
    {welcome ? "Welcome to ThreadCount" : "Finish setting up"}
    +
    + {s.catalog.length === 0 ? "Your catalogue is empty — import it from a CSV in Settings → Data. " : ""} + {s.staff.length === 0 ? "The staff register is empty — add staff or import a CSV. " : ""} + {!setupNeeded && "Your facility is set up. Set reorder levels on the Inventory screen and start issuing."} +
    +
    + Open Settings → Data + {welcome && } +
    +
    + )} + +
    +
    +
    +
    Awaiting pickup — call list
    +
    sorted by days waiting
    +
    + {/* ErrorLine draws nothing when there is nothing to say, so this wrapper collapses with it + rather than opening a gap above the first row. */} +
    + {tasks.length === 0 &&
    Nothing waiting to be collected.
    } +
    + {tasks.map(({ p, st, days }) => { + const ord = s.orders.find((o) => o.id === p.orderId); + const late = days >= 14; + return ( +
    +
    {days}d
    +
    + +
    {late &&
    +
    + {p.contacted ? Contacted : } + + +
    + ); + })} +
    +
    +
    + {/* Every row in here is by definition at its reorder level, so a rule down all of them + would mark nothing. The rule is kept for the sizes that are actually empty — a nurse + at the counter can be handed a low size and cannot be handed none. */} +
    +
    Reorder flags
    + {d.lowRows.length > 0 &&
    {d.lowRows.length} line{d.lowRows.length === 1 ? "" : "s"}
    } +
    + {d.lowRows.length === 0 &&
    No stock lines at or below reorder level.
    } +
    + {d.lowRows.slice(0, 12).map((r, i) => ( +
    +
    +
    {r.label} · {r.size}
    +
    {r.onhand <= 0 &&
    +
    +
    {r.onhand}
    +
    + ))} +
    + {d.lowRows.length > 12 &&
    +{d.lowRows.length - 12} more — use Order flagged on Inventory.
    } +
    +
    +
    + {registers.map((g) => ( +
    +
    {g.title}
    +
    + {g.rows.map(([lbl, val]) => ( +
    +
    {lbl}
    +
    {val}
    +
    + ))} +
    +
    + ))} +
    + {newOrder && setNewOrder(false)} />} +

    pZOrcg$UhqqG!)u8`flbOoYa-(eZ?4=Bm& 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