diff --git a/lib/data/models/task_model.dart b/lib/data/models/task_model.dart index 4c3009fd6..0c8a7d9b3 100644 --- a/lib/data/models/task_model.dart +++ b/lib/data/models/task_model.dart @@ -81,6 +81,7 @@ class TaskFields { static const String date = 'date'; static const String assignedTo = 'assigned_to'; static const String createdBy = 'created_by'; + static const String amount = 'amount'; } abstract class TaskTime implements Built { @@ -668,6 +669,7 @@ abstract class TaskEntity extends Object switch (sortField) { case TaskFields.duration: + case TaskFields.amount: response = taskA.calculateDuration().compareTo(taskB.calculateDuration()); break; diff --git a/lib/ui/reports/task_report.dart b/lib/ui/reports/task_report.dart index 4da884ecb..7c05594cd 100644 --- a/lib/ui/reports/task_report.dart +++ b/lib/ui/reports/task_report.dart @@ -40,6 +40,7 @@ enum TaskReportFields { status, assigned_to, created_by, + amount, } var memoizedTaskReport = memo10(( @@ -231,6 +232,17 @@ ReportResult taskReport( case TaskReportFields.created_by: value = userMap[task.createdUserId]?.listDisplayName ?? ''; break; + case TaskReportFields.amount: + value = task.calculateAmount( + taskRateSelector( + company: userCompany.company, + project: project, + client: client, + task: task, + group: group, + ), + ); + break; } if (!ReportResult.matchField( diff --git a/lib/ui/task/task_presenter.dart b/lib/ui/task/task_presenter.dart index 1fc1deeab..8d1a5695a 100644 --- a/lib/ui/task/task_presenter.dart +++ b/lib/ui/task/task_presenter.dart @@ -46,6 +46,7 @@ class TaskPresenter extends EntityPresenter { TaskFields.customValue4, TaskFields.documents, TaskFields.date, + TaskFields.amount, ]; } @@ -55,17 +56,16 @@ class TaskPresenter extends EntityPresenter { final task = entity as TaskEntity; final store = StoreProvider.of(context); final state = store.state; + final client = state.clientState.get(task.clientId); switch (field) { case TaskFields.status: return EntityStatusChip(entity: task, showState: true); case TaskFields.client: - final client = state.clientState.get(task.clientId); return LinkTextRelatedEntity(entity: client, relation: task); case TaskFields.rate: return Text(formatNumber(task.rate, context, clientId: task.clientId)); case TaskFields.calculatedRate: - final client = state.clientState.get(task.clientId); final rate = taskRateSelector( task: task, client: client, @@ -119,6 +119,20 @@ class TaskPresenter extends EntityPresenter { return Text(presentCustomField(context, task.customValue4)); case TaskFields.documents: return Text('${task.documents.length}'); + case TaskFields.amount: + return Text(formatNumber( + task.calculateAmount( + taskRateSelector( + company: state.company, + project: state.projectState.map[task.projectId], + client: state.clientState.map[task.clientId], + task: task, + group: state.groupState.map[client?.groupId], + ), + ), + context, + clientId: client?.id, + )); } return super.getField(field: field, context: context);