diff --git a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart index 94de20d4ae..24a1ba6786 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/project/project.dart @@ -500,24 +500,25 @@ class ProjectBloc extends Bloc { .map((i) => i.userUuid.toString()) .toList(); await processDashboardConfig( - dashboardConfig.first.dashboardConfigs + dashboardConfig: dashboardConfig.first.dashboardConfigs ?.where((config) => config.projectTypeId == event.model.projectTypeId || config.projectTypeCode == event.model.projectType) .first .charts ?? [], - startDate, - endDate, - isar, - DateTime.now(), - dashboardRemoteRepository, - dashboardActionPath.trim().isNotEmpty + startDate: startDate, + endDate: endDate, + isar: isar, + lastSelectedDate: DateTime.now(), + dashboardRemoteRepo: dashboardRemoteRepository, + actionPath: dashboardActionPath.trim().isNotEmpty ? dashboardActionPath : Constants.dashboardAnalyticsPath, - envConfig.variables.tenantId, - event.model.id, - userUUIDList, + tenantId: envConfig.variables.tenantId, + projectId: event.model.id, + projectTypeId: event.model.projectTypeId, + userList: userUUIDList, ); } } catch (e) { diff --git a/apps/health_campaign_field_worker_app/lib/pages/home.dart b/apps/health_campaign_field_worker_app/lib/pages/home.dart index 391ce163d0..069d62e20d 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -97,7 +97,6 @@ class _HomePageState extends LocalizedState { @override Widget build(BuildContext context) { - final theme = Theme.of(context); final state = context.read().state; final localSecureStore = LocalSecureStore.instance; if (state is! AuthAuthenticatedState) { @@ -865,6 +864,7 @@ void setPackagesSingleton(BuildContext context) { ); DashboardSingleton().setInitialData( projectId: context.projectId, + projectTypeId: context.selectedProject.projectTypeId ?? '', tenantId: envConfig.variables.tenantId, dashboardConfig: filteredDashboardConfig.firstOrNull, appVersion: Constants().version, diff --git a/packages/digit_dss/lib/blocs/dashboard.dart b/packages/digit_dss/lib/blocs/dashboard.dart index f1da76177c..728a52cbac 100644 --- a/packages/digit_dss/lib/blocs/dashboard.dart +++ b/packages/digit_dss/lib/blocs/dashboard.dart @@ -94,21 +94,22 @@ class DashboardBloc extends Bloc { .map((i) => i.userUuid.toString()) .toList(); await processDashboardConfig( - dashboardConfig + dashboardConfig: dashboardConfig ?.where((chart) => (chart.name ?? '').isNotEmpty && (chart.chartType ?? '').isNotEmpty) .toList() ?? [], - startDate, - endDate, - isar, - event.selectedDate, - dashboardRemoteRepo, - DashboardSingleton().actionPath, - DashboardSingleton().tenantId, - DashboardSingleton().projectId, - userUUIDList, + startDate: startDate, + endDate: endDate, + isar: isar, + lastSelectedDate: event.selectedDate, + dashboardRemoteRepo: dashboardRemoteRepo, + actionPath: DashboardSingleton().actionPath, + tenantId: DashboardSingleton().tenantId, + projectId: DashboardSingleton().projectId, + projectTypeId: DashboardSingleton().projectTypeId, + userList: userUUIDList, ); // Process dashboard configuration add(DashboardEvent.handleSearch( @@ -208,7 +209,7 @@ class DashboardBloc extends Bloc { double.parse(plot.value.toString()) .toInt() .toString())) - : '' + : '-' : double.parse(plot.value.toString()) == double.parse(plot.value.toString()).toInt() ? double.parse(plot.value.toString()) diff --git a/packages/digit_dss/lib/models/entities/dss_enums.dart b/packages/digit_dss/lib/models/entities/dss_enums.dart index 7b741986b6..d534bdbe7b 100644 --- a/packages/digit_dss/lib/models/entities/dss_enums.dart +++ b/packages/digit_dss/lib/models/entities/dss_enums.dart @@ -31,6 +31,8 @@ enum DSSEnums { uuid, @MappableValue("projectId") projectId, + @MappableValue("projectTypeId") + projectTypeId, @MappableValue("Last synced time") lastSyncedTime, @MappableValue("amount") diff --git a/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart b/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart index 94fcf02e9d..b6d6b8ec7b 100644 --- a/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart +++ b/packages/digit_dss/lib/models/entities/dss_enums.mapper.dart @@ -39,6 +39,8 @@ class DSSEnumsMapper extends EnumMapper { return DSSEnums.number; case "percentage": return DSSEnums.percentage; + case "projectTypeId": + return DSSEnums.projectTypeId; case "responseData": return DSSEnums.responseData; case "day": @@ -77,6 +79,8 @@ class DSSEnumsMapper extends EnumMapper { return "number"; case DSSEnums.percentage: return "percentage"; + case DSSEnums.projectTypeId: + return "projectTypeId"; case DSSEnums.responseData: return "responseData"; case DSSEnums.day: diff --git a/packages/digit_dss/lib/pages/dashboard/dashboard.dart b/packages/digit_dss/lib/pages/dashboard/dashboard.dart index f838572b16..bc3a573b31 100644 --- a/packages/digit_dss/lib/pages/dashboard/dashboard.dart +++ b/packages/digit_dss/lib/pages/dashboard/dashboard.dart @@ -6,6 +6,7 @@ import 'package:digit_ui_components/theme/spacers.dart'; import 'package:digit_ui_components/widgets/atoms/digit_info_card.dart'; import 'package:digit_ui_components/widgets/atoms/digit_loader.dart'; import 'package:digit_ui_components/widgets/atoms/digit_toast.dart'; +import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; import 'package:digit_ui_components/widgets/powered_by_digit.dart'; import 'package:digit_ui_components/widgets/scrollable_content.dart'; @@ -138,7 +139,10 @@ class UserDashboardPageState extends LocalizedState { ? const ClampingScrollPhysics() : const NeverScrollableScrollPhysics(), rows: table.tableData, - columns: table.headerList, + columns: table.headerList.map((h) => DigitTableColumn( + header: localizations.translate(h.header), + cellValue: h.cellValue, + )).toList() , tableHeight: MediaQuery.of(context).size.height * .3, showSelectedState: false, @@ -151,9 +155,9 @@ class UserDashboardPageState extends LocalizedState { alignment: Alignment.center, child: InfoCard( title: localizations - .translate(i18.dashboard.noteHeader), + .translate('${i18.dashboard.noteHeader}_${DashboardSingleton().selectedProject?.projectType ?? ''}'), description: localizations - .translate(i18.dashboard.noteDescription), + .translate('${i18.dashboard.noteDescription}_${DashboardSingleton().selectedProject?.projectType ?? ''}'), type: InfoType.info, ), ) diff --git a/packages/digit_dss/lib/utils/utils.dart b/packages/digit_dss/lib/utils/utils.dart index 00c407f6d1..7ff2b27890 100644 --- a/packages/digit_dss/lib/utils/utils.dart +++ b/packages/digit_dss/lib/utils/utils.dart @@ -101,17 +101,19 @@ DashboardRequestModel getRequestModel({ } Future processDashboardConfig( - List dashboardConfig, - int startDate, - int endDate, - Isar isar, - DateTime lastSelectedDate, - DashboardRemoteRepository dashboardRemoteRepo, - String actionPath, - String tenantId, - String projectId, - List userList, -) async { + { + required List dashboardConfig, + required int startDate, + required int endDate, + required Isar isar, + DateTime? lastSelectedDate, + required DashboardRemoteRepository dashboardRemoteRepo, + required String actionPath, + required String tenantId, + required String projectId, + String? projectTypeId, + List? userList, +}) async { if (dashboardConfig.isNotEmpty) { for (var entry in dashboardConfig) { String visualizationType = entry.chartType ?? ''; @@ -124,8 +126,11 @@ Future processDashboardConfig( visualizationType: visualizationType, visualizationCode: visualizationCode, filters: { - DSSEnums.uuid.toValue(): userList, - DSSEnums.projectId.toValue(): projectId + if((userList ?? []).isNotEmpty) + DSSEnums.uuid.toValue(): userList, + DSSEnums.projectId.toValue(): projectId, + if(projectTypeId != null) + DSSEnums.projectTypeId.toValue(): projectTypeId, }, moduleLevel: "", queryType: "", @@ -163,6 +168,7 @@ class DashboardSingleton { String? _tenantId; String? _projectId; + String? _projectTypeId; String? _actionPath; String? _appVersion; ProjectModel? _selectedProject; @@ -170,6 +176,7 @@ class DashboardSingleton { void setInitialData({ required String projectId, + required String projectTypeId, required String tenantId, required String actionPath, required String appVersion, @@ -177,6 +184,7 @@ class DashboardSingleton { DashboardConfigSchema? dashboardConfig, }) { _projectId = projectId; + _projectTypeId = projectTypeId; _tenantId = tenantId; _actionPath = actionPath.trim().isNotEmpty ? actionPath @@ -189,6 +197,7 @@ class DashboardSingleton { String get tenantId => _tenantId ?? ''; String get projectId => _projectId ?? ''; + String get projectTypeId => _projectTypeId ?? ''; String get appVersion => _appVersion ?? ''; diff --git a/packages/sync_service/lib/data/repositories/sync/sync_up.dart b/packages/sync_service/lib/data/repositories/sync/sync_up.dart index 3342dcba42..c706c5c858 100644 --- a/packages/sync_service/lib/data/repositories/sync/sync_up.dart +++ b/packages/sync_service/lib/data/repositories/sync/sync_up.dart @@ -192,21 +192,21 @@ class PerformSyncUp { operationGroupedEntity: operationGroupedEntity, typeGroupedEntity: typeGroupedEntity); } else { - remote.bulkCreate(entities); + await remote.bulkCreate(entities); } } else if (operationGroupedEntity.key == DataOperation.update) { await Future.delayed(const Duration(seconds: 1)); if (registry != null) { await registry.update(entities, local); } else { - remote.bulkUpdate(entities); + await remote.bulkUpdate(entities); } } else if (operationGroupedEntity.key == DataOperation.delete) { await Future.delayed(const Duration(seconds: 1)); if (registry != null) { await registry.delete(entities, local); } else { - remote.bulkDelete(entities); + await remote.bulkDelete(entities); } } if (operationGroupedEntity.key == DataOperation.singleCreate) { @@ -214,7 +214,7 @@ class PerformSyncUp { if (registry != null) { await registry.singleCreate(element, local); } else { - remote.singleCreate(element); + await remote.singleCreate(element); } } }