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>
This commit is contained in:
@@ -35,6 +35,8 @@ import '../models/notification_item.model.dart';
|
||||
import '../models/office.model.dart';
|
||||
import '../models/pass_slip.model.dart';
|
||||
import '../models/profile.model.dart';
|
||||
import '../models/programmer_task.model.dart';
|
||||
import '../models/programmer_task_activity_log.model.dart';
|
||||
import '../models/service.model.dart';
|
||||
import '../models/swap_request.model.dart';
|
||||
import '../models/task.model.dart';
|
||||
@@ -56,6 +58,8 @@ part 'adapters/notification_item_adapter.g.dart';
|
||||
part 'adapters/office_adapter.g.dart';
|
||||
part 'adapters/pass_slip_adapter.g.dart';
|
||||
part 'adapters/profile_adapter.g.dart';
|
||||
part 'adapters/programmer_task_adapter.g.dart';
|
||||
part 'adapters/programmer_task_activity_log_adapter.g.dart';
|
||||
part 'adapters/service_adapter.g.dart';
|
||||
part 'adapters/swap_request_adapter.g.dart';
|
||||
part 'adapters/task_adapter.g.dart';
|
||||
@@ -79,6 +83,8 @@ final Map<Type, SupabaseAdapter<SupabaseModel>> supabaseMappings = {
|
||||
Office: OfficeAdapter(),
|
||||
PassSlip: PassSlipAdapter(),
|
||||
Profile: ProfileAdapter(),
|
||||
ProgrammerTask: ProgrammerTaskAdapter(),
|
||||
ProgrammerTaskActivityLog: ProgrammerTaskActivityLogAdapter(),
|
||||
Service: ServiceAdapter(),
|
||||
SwapRequest: SwapRequestAdapter(),
|
||||
Task: TaskAdapter(),
|
||||
@@ -104,6 +110,8 @@ final Map<Type, SqliteAdapter<SqliteModel>> sqliteMappings = {
|
||||
Office: OfficeAdapter(),
|
||||
PassSlip: PassSlipAdapter(),
|
||||
Profile: ProfileAdapter(),
|
||||
ProgrammerTask: ProgrammerTaskAdapter(),
|
||||
ProgrammerTaskActivityLog: ProgrammerTaskActivityLogAdapter(),
|
||||
Service: ServiceAdapter(),
|
||||
SwapRequest: SwapRequestAdapter(),
|
||||
Task: TaskAdapter(),
|
||||
|
||||
Reference in New Issue
Block a user