diff --git a/lib/data/models/entities.dart b/lib/data/models/entities.dart index e0b6044a6..8a0d875a7 100644 --- a/lib/data/models/entities.dart +++ b/lib/data/models/entities.dart @@ -275,6 +275,9 @@ abstract class BaseEntity implements SelectableEntity { ReportStringValue getReportString({String value}) => ReportStringValue(entityId: id, entityType: entityType, value: value); + ReportEntityTypeValue getReportEntityType() => + ReportEntityTypeValue(entityId: id, entityType: entityType, value: entityType); + ReportBoolValue getReportBool({bool value}) => ReportBoolValue(entityId: id, entityType: entityType, value: value); diff --git a/lib/ui/reports/document_report.dart b/lib/ui/reports/document_report.dart index 79eab49a0..3b58c634c 100644 --- a/lib/ui/reports/document_report.dart +++ b/lib/ui/reports/document_report.dart @@ -6,20 +6,27 @@ import 'package:invoiceninja_flutter/data/models/company_model.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/reports/reports_state.dart'; import 'package:invoiceninja_flutter/ui/reports/reports_screen.dart'; +import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:memoize/memoize.dart'; enum DocumentReportFields { name, - type, + file_type, + record_type, + record_name, + created_at, + created_by, + updated_at, } -var memoizedDocumentReport = memo6(( +var memoizedDocumentReport = memo7(( UserCompanyEntity userCompany, ReportsUIState reportsUIState, BuiltMap invoiceMap, BuiltMap expenseMap, BuiltMap projectMap, BuiltMap vendorMap, + BuiltMap userMap, ) => documentReport( userCompany, @@ -28,6 +35,7 @@ var memoizedDocumentReport = memo6(( expenseMap, projectMap, vendorMap, + userMap, )); ReportResult documentReport( @@ -37,6 +45,7 @@ ReportResult documentReport( BuiltMap expenseMap, BuiltMap projectMap, BuiltMap vendorMap, + BuiltMap userMap, ) { final List> data = []; BuiltList columns; @@ -48,8 +57,10 @@ ReportResult documentReport( : ReportSettingsEntity(); final defaultColumns = [ + DocumentReportFields.record_type, + DocumentReportFields.record_name, DocumentReportFields.name, - DocumentReportFields.type, + DocumentReportFields.file_type, ]; if (documentReportSettings.columns.isNotEmpty) { @@ -60,7 +71,7 @@ ReportResult documentReport( columns = BuiltList(defaultColumns); } - List _getRow(DocumentEntity document) { + List _getRow(BaseEntity entity, DocumentEntity document) { if (document.isDeleted ?? false) { return null; } @@ -74,9 +85,24 @@ ReportResult documentReport( case DocumentReportFields.name: value = document.name; break; - case DocumentReportFields.type: + case DocumentReportFields.file_type: value = document.type; break; + case DocumentReportFields.created_at: + value = convertTimestampToDateString(document.createdAt); + break; + case DocumentReportFields.created_by: + value = userMap[document.createdUserId]?.listDisplayName ?? ''; + break; + case DocumentReportFields.record_name: + value = entity.listDisplayName; + break; + case DocumentReportFields.record_type: + value = entity.entityType; + break; + case DocumentReportFields.updated_at: + value = convertTimestampToDateString(document.updatedAt); + break; } if (!ReportResult.matchField( @@ -89,11 +115,13 @@ ReportResult documentReport( } if (value.runtimeType == bool) { - row.add(document.getReportBool(value: value)); + row.add(entity.getReportBool(value: value)); } else if (value.runtimeType == double || value.runtimeType == int) { - row.add(document.getReportNumber(value: value)); + row.add(entity.getReportNumber(value: value)); + } else if (value.runtimeType == EntityType) { + row.add(entity.getReportEntityType()); } else { - row.add(document.getReportString(value: value)); + row.add(entity.getReportString(value: value)); } } @@ -102,7 +130,7 @@ ReportResult documentReport( invoiceMap.forEach((invoiceId, invoice) { invoice.documents.forEach((document) { - final row = _getRow(document); + final row = _getRow(invoice, document); if (row != null) { data.add(row); } diff --git a/lib/ui/reports/reports_screen.dart b/lib/ui/reports/reports_screen.dart index 06a6cb114..4a84d4f04 100644 --- a/lib/ui/reports/reports_screen.dart +++ b/lib/ui/reports/reports_screen.dart @@ -1278,6 +1278,24 @@ class ReportStringValue extends ReportElement { } } +class ReportEntityTypeValue extends ReportElement { + ReportEntityTypeValue({ + dynamic value, + EntityType entityType, + String entityId, + }) : super(value: value, entityType: entityType, entityId: entityId); + + @override + Widget renderWidget(BuildContext context, String column) { + return Text(renderText(context, column)); + } + + @override + String renderText(BuildContext context, String column) { + return AppLocalization.of(context).lookup('$value'); + } +} + class ReportAgeValue extends ReportElement { ReportAgeValue({ @required dynamic value, diff --git a/lib/ui/reports/reports_screen_vm.dart b/lib/ui/reports/reports_screen_vm.dart index fd09ba8c9..4b68f4077 100644 --- a/lib/ui/reports/reports_screen_vm.dart +++ b/lib/ui/reports/reports_screen_vm.dart @@ -114,6 +114,7 @@ class ReportsScreenVM { state.expenseState.map, state.projectState.map, state.vendorState.map, + state.userState.map, ); break; case kReportExpense: