Commit Graph

30 Commits

Author SHA1 Message Date
redz1029 b307f66f2c Add PM extension (Projects, Work Logs, Comments) + Quill rich-text UI
Projects: Brick-backed model with list/detail screens and nav entry.
Work Logs: per-contributor time ledger, assignee running-clock +
helper logged minutes with Hours/Minutes input; pause-after-save and
helper-deduct prompts.
Comments: threaded comments with file attachments and Quill composer.
Detail screen: tabbed layout (Work Log / Comments / Activity),
editable title + description via edit dialog, Quill-rendered
descriptions with legacy plain-text fallback.
Create dialog: fixed-width (480px max), Quill description editor.
Shared QuillFieldEditor + QuillReadOnly widgets extracted for reuse.
RLS: hardened activity-log actor binding, immutable creator_id/
created_at triggers, SECURITY INVOKER visibility helper,
append-only work-log and scoped comment policies.
Brick migration for project_id FK on programmer_tasks.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-09-27 16:06:26 +08:00
redz1029 627645056b Add Programmer Tasks module (work-log + time tracking)
Separate feature for the `programmer` role to record dev work by category,
distinct from the IT help-desk `tasks` feature. Modeled on the IT Service
Requests pattern (Brick offline-first model -> Riverpod stream/controller ->
list/detail screens); seed of a future Project Management workflow.

- programmer_tasks + programmer_task_activity_logs (category enum, RLS,
  realtime) via supabase migration
- single assignee, self-logged or lead-assigned; assign/reassign logged
- pause-on-switch: starting a task while another runs prompts to pause the
  running one, keeping one active task per user for accurate time attribution
- worked-duration math shared with help-desk tasks via a generic core in
  task_duration.dart (existing callers unchanged)
- list distinguishes running vs paused with a per-task Resume shortcut
- accessible dialog labels; route /programmer-tasks + nav gated to admin/programmer
- unit/widget tests: controller lifecycle, duration math, pause-switch dialog

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-09-27 01:13:33 +08:00
redz1029 3cb980b629 QA hardening: security RLS fixes, Flutter 3.47.5 upgrade, UI/validation fixes
Security — enforce write authorization server-side (was UI/RPC-only):
- it_service_requests RLS: block cross-office read/edit + self-approve (QA-015)
- pass_slips RLS: owner can complete but not self-approve (QA-046)
- swap_requests RLS: scope select/update to participants + admin (QA-047)
- storage: tighten it_service_attachments + task_attachments write/delete (QA-027)
- admin_user_management edge function: allow programmers to manage users (QA-016)

Fixes:
- workforce generator "uncovered shifts" false alarms (QA-043/044)
- network-map VLAN + New-location dialog validation, disabled-until-valid (QA-048)
- de-flake time-of-day-dependent dashboard metrics test (QA-045)

Toolchain:
- upgrade to Flutter 3.47.5 / Dart 3.13.4; font_awesome_flutter 11.0.0,
  flutter_quill 11.6.0, pdfrx 2.6.5; clear resulting deprecations (QA-002)

analyze clean; 139 tests pass; web build succeeds. Report + evidence in docs/qa/.

Note: also carries the in-progress Brick model cleanup already present in the
working tree. QA-001 (AI keys public in the build) is deferred by owner decision.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-09-26 11:52:16 +08:00
redz1029 e9d1af867a Notification Screen and tasq_adaptive_list enhancements 2026-05-11 11:34:34 +08:00
redz1029 783c5eb0be * Task/Ticket desktop dialogs — widened from 520 → 600dp, and tasks now uses SizedBox(width: 600) instead of ConstrainedBox(maxWidth:) which was the root cause of the "still small" issue (max-only never forced expansion)
* Pass Slip + Leave — both dialogs gained an isSheet flag; callers now branch on AppBreakpoints.tablet: bottom sheet on mobile, dialog on desktop
2026-04-30 06:45:51 +08:00
redz1029 48cd3bcd60 Offline Support 2026-04-27 06:20:39 +08:00
redz1029 7d8851a94a Test Cases 2026-04-11 07:40:49 +08:00
redz1029 546c254326 Allow task completion even if signatories are still empty, put an indicator for completed tasks with incomplete details. 2026-02-24 22:08:53 +08:00
redz1029 354b27aad1 Added saving indicator when assigning a task 2026-02-24 21:49:25 +08:00
redz1029 98355c3707 Added validation when task type, category, signatories and action taken are empty upon completing a task 2026-02-23 21:27:55 +08:00
redz1029 1074572905 A better state and alerts 2026-02-23 20:19:07 +08:00
redz1029 46a84b4d95 Added Service 2026-02-21 21:57:31 +08:00
redz1029 1478667bbf Added Action Taken on Task 2026-02-21 15:44:12 +08:00
redz1029 8d31a629ac Added Type, Category and Signatories on task 2026-02-21 14:33:22 +08:00
redz1029 d32449d096 Common Date and Time fomatters 2026-02-21 08:32:07 +08:00
redz1029 4811621dc5 Swap Accept, Reject and Escalate 2026-02-21 08:31:20 +08:00
redz1029 ca195e6326 Removed unused faker 2026-02-19 06:50:22 +08:00
redz1029 9eb508acf7 Test geofence widget 2026-02-19 06:49:59 +08:00
redz1029 5488238051 Geofence test screen 2026-02-19 06:49:21 +08:00
redz1029 f9f3509188 Fixed Dashboard full page refresh 2026-02-18 23:37:21 +08:00
redz1029 5ec57a1cec Auto Task Assignment 2026-02-18 23:14:50 +08:00
redz1029 372928d8e7 Added User Profile Screen 2026-02-18 21:42:48 +08:00
redz1029 35eae623d8 Fixed unable to edit Team 2026-02-18 21:21:45 +08:00
redz1029 15ce7b7a10 A more accurate geofencing 2026-02-18 20:43:33 +08:00
redz1029 8c1bb7646e Fixed user management 2026-02-18 20:43:11 +08:00
redz1029 676d1425fd test: remove admin_profile_service_test after removing service 2026-02-18 18:13:54 +08:00
redz1029 04fd874a48 chore: remove unused profile lock migration and admin_profile_service 2026-02-18 18:13:10 +08:00
redz1029 7fb465f6c9 Created App Surfaces for Theming 2026-02-17 07:27:42 +08:00
redz1029 5f666ed6ea Pagination 2026-02-17 06:46:52 +08:00
redz1029 01c6b3537c Major UI overhaul 2026-02-10 23:11:45 +08:00