diff --git a/apps/health_campaign_field_worker_app/lib/app.dart b/apps/health_campaign_field_worker_app/lib/app.dart index 9133f85010..0c4dbe89b5 100644 --- a/apps/health_campaign_field_worker_app/lib/app.dart +++ b/apps/health_campaign_field_worker_app/lib/app.dart @@ -1,6 +1,8 @@ import 'package:attendance_management/attendance_management.dart'; import 'package:closed_household/blocs/closed_household.dart'; import 'package:closed_household/closed_household.dart'; +import 'package:delivery/data/repositories/local/household_global_search.dart'; +import 'package:delivery/data/repositories/local/individual_global_search.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/digit_dss.dart'; import 'package:digit_scanner/blocs/scanner.dart'; @@ -12,13 +14,13 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:inventory_management/inventory_management.dart'; import 'package:isar/isar.dart'; import 'package:location/location.dart'; -import 'package:registration_delivery/data/repositories/local/household_global_search.dart'; -import 'package:registration_delivery/data/repositories/local/individual_global_search.dart'; -import 'package:registration_delivery/data/repositories/oplog/oplog.dart'; -import 'package:registration_delivery/models/entities/household.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; -import 'package:registration_delivery/models/entities/task.dart'; +import 'package:registration/data/repositories/local/household_global_search.dart'; +import 'package:registration/data/repositories/local/individual_global_search.dart'; +import 'package:registration/data/repositories/oplog/oplog.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; + import 'package:survey_form/survey_form.dart'; import 'blocs/app_initialization/app_initialization.dart'; @@ -79,12 +81,24 @@ class MainApplicationState extends State IndividualOpLogManager(widget.isar), ), ), + RepositoryProvider( + create: (context) => IndividualGlobalDeliverySearchRepository( + widget.sql, + IndividualOpLogManager(widget.isar), + ), + ), RepositoryProvider( create: (context) => HouseHoldGlobalSearchRepository( widget.sql, HouseholdOpLogManager(widget.isar), ), ), + RepositoryProvider( + create: (context) => HouseHoldGlobalDeliverySearchRepository( + widget.sql, + HouseholdOpLogManager(widget.isar), + ), + ), ], child: BlocProvider( create: (context) => AppInitializationBloc( @@ -336,8 +350,6 @@ class MainApplicationState extends State projectBeneficiaryRepository: context.repository< ProjectBeneficiaryModel, ProjectBeneficiarySearchModel>(), - taskRepository: context - .repository(), ); }, lazy: false, diff --git a/apps/health_campaign_field_worker_app/lib/blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart b/apps/health_campaign_field_worker_app/lib/blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart index 61c278aeb2..63a7b3e2e3 100644 --- a/apps/health_campaign_field_worker_app/lib/blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart +++ b/apps/health_campaign_field_worker_app/lib/blocs/projects_beneficiary_downsync/project_beneficiaries_downsync.dart @@ -1,11 +1,15 @@ // GENERATED using mason_cli import 'dart:async'; +import 'package:delivery/models/entities/referral.dart'; +import 'package:delivery/models/entities/side_effect.dart'; +import 'package:delivery/models/entities/task.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:disk_space_update/disk_space_update.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:registration_delivery/registration_delivery.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/registration.dart'; import 'package:sync_service/sync_service_lib.dart'; import '../../data/local_store/no_sql/schema/app_configuration.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart index 3dbaa40eb1..7f30737228 100644 --- a/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/data/local_store/no_sql/schema/entity_mapper.dart @@ -8,12 +8,12 @@ import 'package:digit_data_model/models/entities/user_action.dart'; import 'package:inventory_management/models/entities/stock.dart'; import 'package:inventory_management/models/entities/stock_reconciliation.dart'; import 'package:referral_reconciliation/models/entities/hf_referral.dart'; -import 'package:registration_delivery/models/entities/household.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; -import 'package:registration_delivery/models/entities/referral.dart'; -import 'package:registration_delivery/models/entities/side_effect.dart'; -import 'package:registration_delivery/models/entities/task.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; +import 'package:delivery/models/entities/referral.dart'; +import 'package:delivery/models/entities/side_effect.dart'; +import 'package:delivery/models/entities/task.dart'; /// The `EntityMapper` class extends `EntityMapperListener` and provides a concrete implementation /// for the `getEntityMappers` method. This method is responsible for mapping a given entity type diff --git a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart index 92b9957ee9..84d9407cb2 100644 --- a/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart +++ b/apps/health_campaign_field_worker_app/lib/data/sync_service_mapper.dart @@ -3,10 +3,13 @@ import 'dart:convert'; import 'package:attendance_management/attendance_management.dart'; import 'package:collection/collection.dart'; +import 'package:delivery/models/entities/referral.dart'; +import 'package:delivery/models/entities/side_effect.dart'; +import 'package:delivery/models/entities/task.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:inventory_management/inventory_management.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; -import 'package:registration_delivery/registration_delivery.dart'; +import 'package:registration/registration.dart'; import 'package:sync_service/data/repositories/sync/remote_type.dart'; import 'package:sync_service/data/sync_entity_mapper_listener.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart b/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart index d2fdfbc21e..3eae40d957 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/authenticated.dart @@ -1,6 +1,9 @@ import 'dart:async'; import 'package:connectivity_plus/connectivity_plus.dart'; +import 'package:delivery/models/entities/referral.dart'; +import 'package:delivery/models/entities/side_effect.dart'; +import 'package:delivery/models/entities/task.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_showcase/showcase_widget.dart'; import 'package:digit_ui_components/digit_components.dart'; @@ -16,10 +19,9 @@ import 'package:flutter_portal/flutter_portal.dart'; import 'package:isar/isar.dart'; import 'package:location/location.dart'; import 'package:qr_flutter/qr_flutter.dart'; -import 'package:registration_delivery/registration_delivery.dart'; +import 'package:registration/registration.dart'; import 'package:survey_form/survey_form.dart'; import 'package:sync_service/sync_service_lib.dart'; - import '../blocs/app_initialization/app_initialization.dart'; import '../blocs/auth/auth.dart'; import '../blocs/localization/app_localization.dart'; @@ -88,7 +90,8 @@ class AuthenticatedPageWrapper extends StatelessWidget { ]); }, child: Container( - padding: const EdgeInsets.only(right: spacer2), + padding: + const EdgeInsets.only(right: spacer2), width: MediaQuery.of(context).size.width - 60, child: Align( 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..46bece3dd1 100644 --- a/apps/health_campaign_field_worker_app/lib/pages/home.dart +++ b/apps/health_campaign_field_worker_app/lib/pages/home.dart @@ -7,6 +7,11 @@ import 'package:closed_household/router/closed_household_router.gm.dart'; import 'package:complaints/complaints.dart'; import 'package:complaints/router/complaints_router.gm.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; +import 'package:delivery/models/entities/referral.dart'; +import 'package:delivery/models/entities/side_effect.dart'; +import 'package:delivery/models/entities/task.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; +import 'package:delivery/utils/utils.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/household_type.dart'; import 'package:digit_data_model/models/entities/user_action.dart'; @@ -28,8 +33,9 @@ import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:recase/recase.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; -import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; + +import 'package:registration/registration.dart'; +import 'package:registration/router/registration_router.gm.dart'; import 'package:survey_form/router/survey_form_router.gm.dart'; import 'package:survey_form/survey_form.dart'; import 'package:sync_service/blocs/sync/sync.dart'; @@ -362,29 +368,48 @@ class _HomePageState extends LocalizedState { icon: Icons.all_inbox, label: i18.home.beneficiaryLabel, onPressed: () async { - RegistrationDeliverySingleton() + RegistrationSingleton() + .setHouseholdType(HouseholdType.family); + if (isTriggerLocalisation) { + triggerLocalization(); + isTriggerLocalisation = false; + } + await context.router.push(const RegistrationWrapperRoute()); + }, + ), + ), + + + i18.home.deliveryLabel: + homeShowcaseData.managedelivery.buildWith( + child: HomeItemCard( + icon: Icons.all_inbox, + label: i18.home.deliveryLabel, + onPressed: () async { + DeliverySingleton() .setHouseholdType(HouseholdType.family); if (isTriggerLocalisation) { triggerLocalization(); isTriggerLocalisation = false; } - await context.router.push(const RegistrationDeliveryWrapperRoute()); + await context.router.push(const DeliveryWrapperRoute()); }, ), ), + i18.home.clfLabel: homeShowcaseData.clf.buildWith( child: HomeItemCard( icon: Icons.account_balance, label: i18.home.clfLabel, onPressed: () async { - RegistrationDeliverySingleton() + RegistrationSingleton() .setHouseholdType(HouseholdType.community); if (isTriggerLocalisation) { triggerLocalization(); isTriggerLocalisation = false; } - await context.router.push(const RegistrationDeliveryWrapperRoute()); + await context.router.push(const RegistrationWrapperRoute()); }, ), ), @@ -553,6 +578,8 @@ class _HomePageState extends LocalizedState { // INFO : Need to add showcase keys of package Here i18.home.beneficiaryLabel: homeShowcaseData.distributorBeneficiaries.showcaseKey, + i18.home.deliveryLabel: + homeShowcaseData.managedelivery.showcaseKey, i18.home.manageStockLabel: homeShowcaseData.warehouseManagerManageStock.showcaseKey, i18.home.stockReconciliationLabel: @@ -577,6 +604,7 @@ class _HomePageState extends LocalizedState { final homeItemsLabel = [ // INFO: Need to add items label of package Here i18.home.beneficiaryLabel, + i18.home.deliveryLabel, i18.home.clfLabel, i18.home.closedHouseHoldLabel, i18.home.manageStockLabel, @@ -599,17 +627,16 @@ class _HomePageState extends LocalizedState { .contains(element) || element == i18.home.db) .toList(); - + filteredLabels.add(i18.home.deliveryLabel); + final showcaseKeys = filteredLabels .where((f) => f != i18.home.db) .map((label) => homeItemsShowcaseMap[label]!) .toList(); - - if (envConfig.variables.envType == EnvType.demo && kReleaseMode) { - filteredLabels.remove(i18.home.db); - } - + if (envConfig.variables.envType == EnvType.demo && kReleaseMode) { + filteredLabels.remove(i18.home.db); + } final List widgetList = filteredLabels.map((label) => homeItemsMap[label]!).toList(); @@ -750,7 +777,39 @@ void setPackagesSingleton(BuildContext context) { userName: context.loggedInUser.name ?? '', ); - RegistrationDeliverySingleton().setInitialData( + RegistrationSingleton().setInitialData( + loggedInUser: context.loggedInUserModel, + loggedInUserUuid: context.loggedInUserUuid, + maxRadius: appConfiguration.maxRadius!, + projectId: context.projectId, + selectedBeneficiaryType: context.beneficiaryType, + projectType: context.selectedProjectType, + selectedProject: context.selectedProject, + genderOptions: + appConfiguration.genderOptions!.map((e) => e.code).toList(), + idTypeOptions: + appConfiguration.idTypeOptions!.map((e) => e.code).toList(), + householdDeletionReasonOptions: appConfiguration + .householdDeletionReasonOptions! + .map((e) => e.code) + .toList(), + householdMemberDeletionReasonOptions: appConfiguration + .householdMemberDeletionReasonOptions! + .map((e) => e.code) + .toList(), + searchHouseHoldFilter: appConfiguration.searchHouseHoldFilters != null + ? appConfiguration.searchHouseHoldFilters! + .map((e) => e.code) + .toList() + : [], + searchCLFFilters: appConfiguration.searchCLFFilters != null + ? appConfiguration.searchCLFFilters!.map((e) => e.code).toList() + : [], + houseStructureTypes: + appConfiguration.houseStructureTypes?.map((e) => e.code).toList(), + ); + + DeliverySingleton().setInitialData( loggedInUser: context.loggedInUserModel, loggedInUserUuid: context.loggedInUserUuid, maxRadius: appConfiguration.maxRadius!, diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.dart index f588a1f498..4e83f71c7d 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.dart @@ -5,6 +5,7 @@ import 'package:closed_household/router/closed_household_router.dart'; import 'package:closed_household/router/closed_household_router.gm.dart'; import 'package:complaints/router/complaints_router.dart'; import 'package:complaints/router/complaints_router.gm.dart'; +import 'package:delivery/router/delivery_router.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/router/dashboard_router.dart'; @@ -16,8 +17,11 @@ import 'package:inventory_management/router/inventory_router.dart'; import 'package:inventory_management/router/inventory_router.gm.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.dart'; import 'package:referral_reconciliation/router/referral_reconciliation_router.gm.dart'; -import 'package:registration_delivery/router/registration_delivery_router.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; + +import 'package:delivery/router/delivery_router.gm.dart' ; + +import 'package:registration/router/registration_router.dart'; +import 'package:registration/router/registration_router.gm.dart'; import 'package:survey_form/router/survey_form_router.dart'; import 'package:survey_form/router/survey_form_router.gm.dart'; @@ -45,11 +49,12 @@ part 'app_router.gr.dart'; AttendanceRoute, ReferralReconciliationRoute, DigitScannerPackageRoute, - RegistrationDeliveryRoute, + RegistrationRoute, ClosedHouseholdPackageRoute, DashboardRoute, SurveyFormRoute, - ComplaintsRoute + ComplaintsRoute, + DeliveryRoute ], ) class AppRouter extends _$AppRouter { @@ -87,7 +92,9 @@ class AppRouter extends _$AppRouter { page: UserDashboardRoute.page, path: 'dashboard', ), - ...RegistrationDeliveryRoute().routes, + ...RegistrationRoute().routes, + + ...DeliveryRoute().routes, /// close household ...ClosedHouseholdPackageRoute().routes, diff --git a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart index 2fcad75eef..bd3336169f 100644 --- a/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart +++ b/apps/health_campaign_field_worker_app/lib/router/app_router.gr.dart @@ -136,11 +136,12 @@ abstract class _$AppRouter extends RootStackRouter { ...AttendanceRoute().pagesMap, ...ReferralReconciliationRoute().pagesMap, ...DigitScannerPackageRoute().pagesMap, - ...RegistrationDeliveryRoute().pagesMap, + ...RegistrationRoute().pagesMap, ...ClosedHouseholdPackageRoute().pagesMap, ...DashboardRoute().pagesMap, ...SurveyFormRoute().pagesMap, ...ComplaintsRoute().pagesMap, + ...DeliveryRoute().pagesMap, }; } diff --git a/apps/health_campaign_field_worker_app/lib/utils/constants.dart b/apps/health_campaign_field_worker_app/lib/utils/constants.dart index 010e1f0f91..2c81191eb9 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/constants.dart @@ -2,6 +2,15 @@ import 'package:attendance_management/attendance_management.dart'; import 'package:closed_household/utils/utils.dart'; import 'package:collection/collection.dart'; import 'package:complaints/complaints.dart'; +import 'package:delivery/data/repositories/local/referral.dart'; +import 'package:delivery/data/repositories/local/side_effect.dart'; +import 'package:delivery/data/repositories/oplog/oplog_delivery.dart'; + +import 'package:delivery/data/repositories/local/task.dart'; +import 'package:delivery/data/repositories/remote/referral.dart'; +import 'package:delivery/data/repositories/remote/side_effect.dart'; +import 'package:delivery/data/repositories/remote/task.dart'; +import 'package:delivery/utils/utils.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_dss/digit_dss.dart'; import 'package:digit_firebase_services/digit_firebase_services.dart' @@ -14,7 +23,7 @@ import 'package:inventory_management/inventory_management.dart'; import 'package:isar/isar.dart'; import 'package:path_provider/path_provider.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; -import 'package:registration_delivery/registration_delivery.dart'; +import 'package:registration/registration.dart'; import 'package:survey_form/survey_form.dart'; import 'package:sync_service/sync_service_lib.dart'; @@ -282,7 +291,8 @@ class Constants { entityMapper: EntityMapper(), errorDumpApiPath: envConfig.variables.dumpErrorApiPath, hierarchyType: envConfig.variables.hierarchyType); - RegistrationDeliverySingleton().setTenantId(envConfig.variables.tenantId); + RegistrationSingleton().setTenantId(envConfig.variables.tenantId); + DeliverySingleton().setTenantId(envConfig.variables.tenantId); ClosedHouseholdSingleton().setTenantId(envConfig.variables.tenantId); AttendanceSingleton().setTenantId(envConfig.variables.tenantId); ReferralReconSingleton().setTenantId(envConfig.variables.tenantId); diff --git a/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart b/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart index cfc8cb45a2..6a6c77ce69 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/extensions/context_utility.dart @@ -110,7 +110,8 @@ extension ContextUtilityExtensions on BuildContext { throw AppException('No boundary is selected'); } // INFO: Set Boundary for packages - RegistrationDeliverySingleton().setBoundary(boundary: selectedBoundary); + RegistrationSingleton().setBoundary(boundary: selectedBoundary); + DeliverySingleton().setBoundary(boundary: selectedBoundary); ClosedHouseholdSingleton().setBoundary(boundary: selectedBoundary); InventorySingleton().setBoundaryName(boundaryName: selectedBoundary.name!); InventorySingleton().setBoundary(boundary: selectedBoundary); diff --git a/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart b/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart index d2a24e8410..650df45e5b 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/extensions/extensions.dart @@ -4,6 +4,7 @@ import 'package:attendance_management/attendance_management.dart'; import 'package:closed_household/utils/utils.dart'; import 'package:collection/collection.dart'; import 'package:complaints/utils/utils.dart'; +import 'package:delivery/utils/utils.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_location_tracker/utils/utils.dart'; import 'package:flutter/material.dart'; @@ -12,7 +13,8 @@ import 'package:intl/intl.dart'; import 'package:inventory_management/utils/utils.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:referral_reconciliation/utils/utils.dart'; -import 'package:registration_delivery/registration_delivery.dart'; +import 'package:registration/registration.dart'; + // Importing necessary packages and files import 'package:survey_form/utils/utils.dart'; import 'package:sync_service/sync_service_lib.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart index b69bed1958..5a24767636 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/i18_key_constants.dart @@ -564,6 +564,8 @@ class Home { String get dashboard => 'HOME_DASHBOARD_LABEL'; String get beneficiaryReferralLabel => 'HOME_BENEFICIARY_REFERRAL_LABEL'; String get manageAttendanceLabel => 'HOME_MANAGE_ATTENDANCE_LABEL'; + String get deliveryLabel => 'HOME_DELIVERY_LABEL'; + String get closedHouseHoldLabel => 'HOME_CLOSE_HOUSEHOLD_LABEL'; diff --git a/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart b/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart index a8f7359b57..a36c323dec 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/localization_delegates.dart @@ -18,8 +18,10 @@ import 'package:inventory_management/blocs/app_localization.dart' as inventory_localization; import 'package:referral_reconciliation/blocs/app_localization.dart' as referral_reconciliation_localization; -import 'package:registration_delivery/blocs/app_localization.dart' - as registration_delivery_localization; +import 'package:registration/blocs/app_localization.dart' + as registration_localization; +import 'package:delivery/blocs/app_localization.dart' + as delivery_localization; import 'package:survey_form/blocs/app_localization.dart' as survey_form_localization; @@ -60,7 +62,12 @@ getAppLocalizationDelegates({ LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, appConfig.languages!, ), - registration_delivery_localization.RegistrationDeliveryLocalization + registration_localization.RegistrationLocalization + .getDelegate( + LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, + appConfig.languages!, + ), + delivery_localization.DeliveryLocalization .getDelegate( LocalizationLocalRepository().returnLocalizationFromSQL(sql) as Future, appConfig.languages!, diff --git a/apps/health_campaign_field_worker_app/lib/utils/utils.dart b/apps/health_campaign_field_worker_app/lib/utils/utils.dart index 30eea8b450..9033b84781 100644 --- a/apps/health_campaign_field_worker_app/lib/utils/utils.dart +++ b/apps/health_campaign_field_worker_app/lib/utils/utils.dart @@ -25,8 +25,10 @@ import 'package:digit_data_model/data_model.dart' as data_model; import 'package:reactive_forms/reactive_forms.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart' as referral_reconciliation_mappers; -import 'package:registration_delivery/registration_delivery.init.dart' +import 'package:registration/registration.init.dart' as registration_delivery_mappers; +import 'package:delivery/delivery.init.dart' + as delivery_mappers; import 'package:survey_form/survey_form.init.dart' as survey_form_mappers; import '../blocs/app_initialization/app_initialization.dart'; @@ -466,6 +468,7 @@ initializeAllMappers() async { Future(() => inventory_mappers.initializeMappers()), Future(() => data_model_mappers.initializeMappers()), Future(() => registration_delivery_mappers.initializeMappers()), + Future(() => delivery_mappers.initializeMappers()), Future(() => dss_mappers.initializeMappers()), Future(() => survey_form_mappers.initializeMappers()), Future(() => complaints_mappers.initializeMappers()) diff --git a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart index 2471b8fd1f..30723f302d 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/network_manager_provider_wrapper.dart @@ -2,6 +2,18 @@ import 'dart:io'; import 'package:attendance_management/attendance_management.dart'; import 'package:complaints/complaints.dart'; +import 'package:delivery/data/repositories/local/referral.dart'; +import 'package:delivery/data/repositories/local/side_effect.dart'; + +import 'package:delivery/data/repositories/local/task.dart'; +import 'package:delivery/data/repositories/oplog/oplog_delivery.dart'; + +import 'package:delivery/data/repositories/remote/referral.dart'; +import 'package:delivery/data/repositories/remote/side_effect.dart'; +import 'package:delivery/data/repositories/remote/task.dart'; +import 'package:delivery/models/entities/referral.dart'; +import 'package:delivery/models/entities/side_effect.dart'; +import 'package:delivery/models/entities/task.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/user_action.dart'; import 'package:digit_location_tracker/data/oplog/oplog.dart'; @@ -16,7 +28,8 @@ import 'package:inventory_management/inventory_management.dart'; import 'package:isar/isar.dart'; import 'package:provider/provider.dart'; import 'package:referral_reconciliation/referral_reconciliation.dart'; -import 'package:registration_delivery/registration_delivery.dart'; + +import 'package:registration/registration.dart'; import 'package:survey_form/survey_form.dart'; import '../blocs/app_initialization/app_initialization.dart'; diff --git a/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart b/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart index ca0f302f0f..b5d5922ee4 100644 --- a/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart +++ b/apps/health_campaign_field_worker_app/lib/widgets/showcase/config/home_showcase.dart @@ -94,6 +94,9 @@ class _HomePageShowcaseData { final manageAttendance = ShowcaseItemBuilder( messageLocalizationKey: i18.home.manageAttendanceLabel, ); + final managedelivery = ShowcaseItemBuilder( + messageLocalizationKey: i18.home.deliveryLabel, + ); final db = ShowcaseItemBuilder( messageLocalizationKey: i18.home.db, diff --git a/apps/health_campaign_field_worker_app/pubspec.lock b/apps/health_campaign_field_worker_app/pubspec.lock index 98c60bd13f..7a4890f696 100644 --- a/apps/health_campaign_field_worker_app/pubspec.lock +++ b/apps/health_campaign_field_worker_app/pubspec.lock @@ -68,10 +68,9 @@ packages: attendance_management: dependency: "direct main" description: - name: attendance_management - sha256: "976d2b2f7c7c79bf8f05647a4138b66dab9017316697222223d888273a95f96a" - url: "https://pub.dev" - source: hosted + path: "../../packages/attendance_management" + relative: true + source: path version: "1.0.4+2" audioplayers: dependency: transitive @@ -266,7 +265,7 @@ packages: source: hosted version: "0.11.0+2" camera_android_camerax: - dependency: transitive + dependency: "direct overridden" description: name: camera_android_camerax sha256: "594b40a5ea0e144fdfe49e4036abe4ec9bd578b2ce3aabdb0668a02db376a1e8" @@ -340,10 +339,9 @@ packages: closed_household: dependency: "direct main" description: - name: closed_household - sha256: "966e319584acabfb940decc3c240964363f7b93c71833d8bd147df19d99c2e92" - url: "https://pub.dev" - source: hosted + path: "../../packages/closed_household" + relative: true + source: path version: "1.0.5+1" code_builder: dependency: transitive @@ -364,10 +362,9 @@ packages: complaints: dependency: "direct main" description: - name: complaints - sha256: cba8a9d32754fa28a0987d844b9b050aacb5c62a7345dfd41254f26b0bb4f0ea - url: "https://pub.dev" - source: hosted + path: "../../packages/complaints" + relative: true + source: path version: "1.0.2+1" connectivity_plus: dependency: "direct main" @@ -444,11 +441,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: ab088b8fc21a07ed7a56bf81c935ee51481ad253 - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../../packages/dart_mappable_builder" + relative: true + source: path version: "4.2.3" dart_style: dependency: transitive @@ -482,6 +477,13 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.10" + delivery: + dependency: "direct main" + description: + path: "../../packages/delivery" + relative: true + source: path + version: "1.0.0" device_info_plus: dependency: "direct main" description: @@ -509,50 +511,44 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "8e67281c34e030b471a33d8889cb4e96d94d3d9fa6c6cf833e5d6d792ace1471" - url: "https://pub.dev" - source: hosted - version: "1.0.6+2" + path: "../../packages/digit_data_model" + relative: true + source: path + version: "1.0.6+1" digit_dss: dependency: "direct main" description: - name: digit_dss - sha256: e1a541a5360413ed903ee77af580faf93623160aa5e7143e8bc1d0ec44dd980b - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_dss" + relative: true + source: path version: "1.0.4+1" digit_firebase_services: dependency: "direct main" description: - name: digit_firebase_services - sha256: ce76521d797e123b6fc95c9dfad7d4a918a93b97f57aecd0e1d517b46190909d - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_firebase_services" + relative: true + source: path version: "0.0.1" digit_location_tracker: dependency: "direct main" description: - name: digit_location_tracker - sha256: a93bda5b07db112210e08c7a76f0627957d931d5106c8a7db8876503cc2fd06f - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_location_tracker" + relative: true + source: path version: "1.0.0" digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: c8f82938906a11c516d445d7e5e27b7e6c6a1d07e0a608c2f90f63dd234241a5 - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_scanner" + relative: true + source: path version: "1.0.5+1" digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "4667b29e652738a1621e907359da327594c288417f5dfa3da60e77f0342a4eae" - url: "https://pub.dev" - source: hosted + path: "../../packages/digit_showcase" + relative: true + source: path version: "1.0.2+1" digit_ui_components: dependency: "direct main" @@ -675,7 +671,7 @@ packages: source: hosted version: "8.0.7" file_selector_linux: - dependency: transitive + dependency: "direct overridden" description: name: file_selector_linux sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" @@ -691,7 +687,7 @@ packages: source: hosted version: "0.9.4+2" file_selector_platform_interface: - dependency: transitive + dependency: "direct overridden" description: name: file_selector_platform_interface sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b @@ -821,7 +817,7 @@ packages: source: hosted version: "3.0.7" flutter_dropzone_platform_interface: - dependency: transitive + dependency: "direct overridden" description: name: flutter_dropzone_platform_interface sha256: b4e2df75364bab2f4c3ca32b87193267d786b6e158c3f345c3a1daeb911d82b9 @@ -1328,10 +1324,9 @@ packages: inventory_management: dependency: "direct main" description: - name: inventory_management - sha256: "68271fd2f99fae4b3f826403b16b6b3568bb74ba96dc92c45c1eff457fdbcd49" - url: "https://pub.dev" - source: hosted + path: "../../packages/inventory_management" + relative: true + source: path version: "1.0.5+1" io: dependency: transitive @@ -1800,18 +1795,25 @@ packages: referral_reconciliation: dependency: "direct main" description: - name: referral_reconciliation - sha256: "5d3ea365246978776c0d247d9dbe35ebc04b7df1b85d7f38db20ec7e4021b977" - url: "https://pub.dev" - source: hosted + path: "../../packages/referral_reconciliation" + relative: true + source: path version: "1.0.4+2" - registration_delivery: + registration: dependency: "direct main" description: - path: "../../packages/registration_delivery" + path: "../../packages/registration" relative: true source: path - version: "1.0.6+2" + version: "1.0.6+4" + rename_flutter_project: + dependency: transitive + description: + name: rename_flutter_project + sha256: "909f3dcbcc83b694a1238d7159eafc472744db7976f796c90cc6ffa23fefcf6e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" rxdart: dependency: transitive description: @@ -2020,10 +2022,9 @@ packages: survey_form: dependency: "direct main" description: - name: survey_form - sha256: e81e71beff6c4982ff6944ad34da056ea5b4adba860d9552a5eb554356dd816d - url: "https://pub.dev" - source: hosted + path: "../../packages/survey_form" + relative: true + source: path version: "1.0.1+3" sync_http: dependency: transitive @@ -2036,10 +2037,9 @@ packages: sync_service: dependency: "direct main" description: - name: sync_service - sha256: eb214ed7351f1f4ab63c90a23d2ad9f554ac92d73dbbe0dd7ce167776b941de9 - url: "https://pub.dev" - source: hosted + path: "../../packages/sync_service" + relative: true + source: path version: "1.0.0" synchronized: dependency: transitive @@ -2362,5 +2362,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.1 <3.9.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/apps/health_campaign_field_worker_app/pubspec.yaml b/apps/health_campaign_field_worker_app/pubspec.yaml index 6b5fc2f32b..9aa5895b83 100644 --- a/apps/health_campaign_field_worker_app/pubspec.yaml +++ b/apps/health_campaign_field_worker_app/pubspec.yaml @@ -62,7 +62,7 @@ dependencies: inventory_management: ^1.0.5+1 referral_reconciliation: ^1.0.4+2 digit_data_model: ^1.0.6+1 - registration_delivery: ^1.0.6+2 + registration: ^1.0.6+2 disable_battery_optimization: ^1.1.1 digit_dss: ^1.0.4+1 closed_household: ^1.0.5+1 @@ -70,6 +70,7 @@ dependencies: permission_handler: ^11.3.1 survey_form: ^1.0.1+3 complaints: ^1.0.2+1 + delivery: ^1.0.0 dev_dependencies: flutter_test: diff --git a/packages/attendance_management/pubspec.lock b/packages/attendance_management/pubspec.lock index cab5c74d36..7db7f9e6da 100644 --- a/packages/attendance_management/pubspec.lock +++ b/packages/attendance_management/pubspec.lock @@ -57,62 +57,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.11.0" - audioplayers: - dependency: transitive - description: - name: audioplayers - sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef - url: "https://pub.dev" - source: hosted - version: "5.2.1" - audioplayers_android: - dependency: transitive - description: - name: audioplayers_android - sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 - url: "https://pub.dev" - source: hosted - version: "4.0.3" - audioplayers_darwin: - dependency: transitive - description: - name: audioplayers_darwin - sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" - url: "https://pub.dev" - source: hosted - version: "5.0.2" - audioplayers_linux: - dependency: transitive - description: - name: audioplayers_linux - sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - audioplayers_platform_interface: - dependency: transitive - description: - name: audioplayers_platform_interface - sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" - url: "https://pub.dev" - source: hosted - version: "6.1.0" - audioplayers_web: - dependency: transitive - description: - name: audioplayers_web - sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" - url: "https://pub.dev" - source: hosted - version: "4.1.0" - audioplayers_windows: - dependency: transitive - description: - name: audioplayers_windows - sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" - url: "https://pub.dev" - source: hosted - version: "3.1.0" auto_route: dependency: "direct main" description: @@ -353,14 +297,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" - cupertino_icons: - dependency: transitive - description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" - source: hosted - version: "1.0.8" dart_mappable: dependency: "direct main" description: @@ -410,22 +346,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.6+1" - digit_scanner: - dependency: transitive - description: - name: digit_scanner - sha256: c8f82938906a11c516d445d7e5e27b7e6c6a1d07e0a608c2f90f63dd234241a5 - url: "https://pub.dev" - source: hosted - version: "1.0.5+1" - digit_showcase: - dependency: transitive - description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted - version: "1.0.0" digit_ui_components: dependency: "direct main" description: @@ -591,54 +511,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.13" - flutter_keyboard_visibility: - dependency: transitive - description: - name: flutter_keyboard_visibility - sha256: "4983655c26ab5b959252ee204c2fffa4afeb4413cd030455194ec0caa3b8e7cb" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - flutter_keyboard_visibility_linux: - dependency: transitive - description: - name: flutter_keyboard_visibility_linux - sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_macos: - dependency: transitive - description: - name: flutter_keyboard_visibility_macos - sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_keyboard_visibility_platform_interface: - dependency: transitive - description: - name: flutter_keyboard_visibility_platform_interface - sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_web: - dependency: transitive - description: - name: flutter_keyboard_visibility_web - sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_keyboard_visibility_windows: - dependency: transitive - description: - name: flutter_keyboard_visibility_windows - sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 - url: "https://pub.dev" - source: hosted - version: "1.0.0" flutter_lints: dependency: "direct dev" description: @@ -702,14 +574,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.2.5" - formula_parser: - dependency: transitive - description: - name: formula_parser - sha256: af9e9ae2961ec1dab54c5de97d9a6bef0593ddb998720e3785bd91ef05353359 - url: "https://pub.dev" - source: hosted - version: "2.0.1" freezed: dependency: "direct dev" description: @@ -798,22 +662,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.2.1" - google_mlkit_barcode_scanning: - dependency: transitive - description: - name: google_mlkit_barcode_scanning - sha256: f1a2a39cf1730b9a5e2784a07efa1ca5bfdfdde6aa00b193b3f8cd1953c638ec - url: "https://pub.dev" - source: hosted - version: "0.12.0" - google_mlkit_commons: - dependency: transitive - description: - name: google_mlkit_commons - sha256: "27d626c66a181351a953eba5b6ff1ff123aadb891b4dab085b292118f039d6ac" - url: "https://pub.dev" - source: hosted - version: "0.7.1" graphs: dependency: transitive description: @@ -822,22 +670,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.1" - group_radio_button: - dependency: transitive - description: - name: group_radio_button - sha256: "204de8d16b224be7fc72dade0c3afd410ff5a34417d89f74f0fd8be7a8c2b4d6" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - gs1_barcode_parser: - dependency: transitive - description: - name: gs1_barcode_parser - sha256: ff171bc40038de3f7178fbc32eaf9eebc3d35a3c4c00bb0281fe4a976d853a42 - url: "https://pub.dev" - source: hosted - version: "1.1.0" horizontal_data_table: dependency: transitive description: @@ -1238,14 +1070,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pluto_grid: - dependency: transitive - description: - name: pluto_grid - sha256: "1d4cd9d2652742b556aa9b3230cc64672a3f63c34a9acc80fef794ab36ad903b" - url: "https://pub.dev" - source: hosted - version: "8.0.0" pool: dependency: transitive description: @@ -1294,21 +1118,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - registration_delivery: - dependency: "direct overridden" - description: - path: "../registration_delivery" - relative: true - source: path - version: "1.0.6+1" - rxdart: - dependency: transitive - description: - name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" - source: hosted - version: "0.27.7" shelf: dependency: transitive description: @@ -1450,22 +1259,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - survey_form: - dependency: transitive - description: - name: survey_form - sha256: "384860a28db67acbbf94725a1ec0a41c3e9eebeb9d196c02e441f8cdb53c793e" - url: "https://pub.dev" - source: hosted - version: "1.0.1+1" - synchronized: - dependency: transitive - description: - name: synchronized - sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" - url: "https://pub.dev" - source: hosted - version: "3.1.0+1" term_glyph: dependency: transitive description: @@ -1723,5 +1516,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <3.9.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/closed_household/lib/blocs/closed_household.dart b/packages/closed_household/lib/blocs/closed_household.dart index c201d5272f..9b1c5ff6e5 100644 --- a/packages/closed_household/lib/blocs/closed_household.dart +++ b/packages/closed_household/lib/blocs/closed_household.dart @@ -7,13 +7,10 @@ import 'package:digit_data_model/utils/typedefs.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:registration_delivery/models/entities/household.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; -import 'package:registration_delivery/models/entities/status.dart' - as reg_status; -import 'package:registration_delivery/models/entities/task.dart'; -import 'package:registration_delivery/utils/typedefs.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; +import 'package:registration/utils/typedefs.dart'; import '../utils/utils.dart'; @@ -31,15 +28,12 @@ class ClosedHouseholdBloc final ProjectBeneficiaryDataRepository projectBeneficiaryRepository; - final TaskDataRepository taskRepository; - ClosedHouseholdBloc( super.initialState, { required this.individualRepository, required this.householdRepository, required this.householdMemberRepository, required this.projectBeneficiaryRepository, - required this.taskRepository, }) { on(_handleSubmit); on(_handleSummary); @@ -240,25 +234,6 @@ class ClosedHouseholdBloc ), ); - var task = TaskModel( - projectBeneficiaryClientReferenceId: - projectBeneficiary.clientReferenceId, - clientReferenceId: IdGen.i.identifier, - tenantId: ClosedHouseholdSingleton().tenantId, - projectId: ClosedHouseholdSingleton().projectId, - rowVersion: 1, - address: address, - status: reg_status.Status.closeHousehold.toValue(), - auditDetails: AuditDetails( - createdBy: ClosedHouseholdSingleton().loggedInUserUuid!, - createdTime: DateTime.now().millisecondsSinceEpoch, - ), - clientAuditDetails: ClientAuditDetails( - createdBy: ClosedHouseholdSingleton().loggedInUserUuid!, - createdTime: DateTime.now().millisecondsSinceEpoch, - ), - ); - await householdRepository.create( household.copyWith( address: address.copyWith( @@ -293,7 +268,7 @@ class ClosedHouseholdBloc lastModifiedTime: initialModifiedAt, ))); - await taskRepository.create(task); + // await taskRepository.create(task); emit(state.copyWith(loading: false)); } catch (error) { diff --git a/packages/closed_household/lib/pages/closed_household_wrapper.dart b/packages/closed_household/lib/pages/closed_household_wrapper.dart index f202fa42da..00ada73fa5 100644 --- a/packages/closed_household/lib/pages/closed_household_wrapper.dart +++ b/packages/closed_household/lib/pages/closed_household_wrapper.dart @@ -7,10 +7,9 @@ import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:location/location.dart'; -import 'package:registration_delivery/models/entities/household.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; -import 'package:registration_delivery/models/entities/task.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; @RoutePage() class ClosedHouseholdWrapperPage extends StatelessWidget { @@ -42,8 +41,6 @@ class ClosedHouseholdWrapperPage extends StatelessWidget { projectBeneficiaryRepository: context.repository< ProjectBeneficiaryModel, ProjectBeneficiarySearchModel>(context), - taskRepository: - context.repository(context), ); }, lazy: false, diff --git a/packages/closed_household/pubspec.lock b/packages/closed_household/pubspec.lock index a4634664e6..655a8e9424 100644 --- a/packages/closed_household/pubspec.lock +++ b/packages/closed_household/pubspec.lock @@ -372,11 +372,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: ab088b8fc21a07ed7a56bf81c935ee51481ad253 - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.3" dart_style: dependency: transitive @@ -394,6 +392,13 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + delivery: + dependency: "direct main" + description: + path: "../delivery" + relative: true + source: path + version: "1.0.0" diff_match_patch: dependency: transitive description: @@ -405,27 +410,24 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "4cdde28c79632a8aa4a8eb95c6567c96f0449b88e815c42896eeb1a41e0c2b00" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.6+1" digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: c8f82938906a11c516d445d7e5e27b7e6c6a1d07e0a608c2f90f63dd234241a5 - url: "https://pub.dev" - source: hosted + path: "../digit_scanner" + relative: true + source: path version: "1.0.5+1" digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted - version: "1.0.0" + path: "../digit_showcase" + relative: true + source: path + version: "1.0.2+1" digit_ui_components: dependency: "direct main" description: @@ -1310,14 +1312,21 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - registration_delivery: + registration: dependency: "direct main" description: - name: registration_delivery - sha256: "9d91b6cdfc034c2b8181e58145c1f4dd448b93cccd3118aa61f9f0ea6e3f297f" + path: "../registration" + relative: true + source: path + version: "1.0.6+3" + rename_flutter_project: + dependency: transitive + description: + name: rename_flutter_project + sha256: "909f3dcbcc83b694a1238d7159eafc472744db7976f796c90cc6ffa23fefcf6e" url: "https://pub.dev" source: hosted - version: "1.0.6+1" + version: "1.0.2" rxdart: dependency: transitive description: @@ -1468,13 +1477,12 @@ packages: source: hosted version: "1.2.0" survey_form: - dependency: transitive + dependency: "direct overridden" description: - name: survey_form - sha256: "384860a28db67acbbf94725a1ec0a41c3e9eebeb9d196c02e441f8cdb53c793e" - url: "https://pub.dev" - source: hosted - version: "1.0.1+1" + path: "../survey_form" + relative: true + source: path + version: "1.0.1+3" synchronized: dependency: transitive description: @@ -1756,5 +1764,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <3.9.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/closed_household/pubspec.yaml b/packages/closed_household/pubspec.yaml index 0dc645b2ab..728f67a26e 100644 --- a/packages/closed_household/pubspec.yaml +++ b/packages/closed_household/pubspec.yaml @@ -35,8 +35,9 @@ dependencies: stream_transform: ^2.1.0 async: ^2.11.0 formula_parser: ^2.0.1 - registration_delivery: ^1.0.6+1 + registration: ^1.0.6+1 location: ^6.0.2 + delivery: ^1.0.0 dev_dependencies: diff --git a/packages/delivery/.gitignore b/packages/delivery/.gitignore new file mode 100644 index 0000000000..ac5aa9893e --- /dev/null +++ b/packages/delivery/.gitignore @@ -0,0 +1,29 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. +/pubspec.lock +**/doc/api/ +.dart_tool/ +build/ diff --git a/packages/delivery/.metadata b/packages/delivery/.metadata new file mode 100644 index 0000000000..8f7b6ac10b --- /dev/null +++ b/packages/delivery/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "761747bfc538b5af34aa0d3fac380f1bc331ec49" + channel: "stable" + +project_type: package diff --git a/packages/delivery/CHANGELOG.md b/packages/delivery/CHANGELOG.md new file mode 100644 index 0000000000..ea0d5e18b8 --- /dev/null +++ b/packages/delivery/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +* Modularized delivery flow into a dedicated package, while retaining dependency on the registration module. diff --git a/packages/delivery/LICENSE b/packages/delivery/LICENSE new file mode 100644 index 0000000000..ba75c69f7f --- /dev/null +++ b/packages/delivery/LICENSE @@ -0,0 +1 @@ +TODO: Add your license here. diff --git a/packages/delivery/README.md b/packages/delivery/README.md new file mode 100644 index 0000000000..7fb5bba175 --- /dev/null +++ b/packages/delivery/README.md @@ -0,0 +1,87 @@ +# Delivery + +This package provides a way to deliver the resources to the registered household and individual members. + +## Features + +* Search existing households and individuals + + + + +* Record service delivery of healthcare interventions to households and individuals for a + single round campaign. +* Auto-calculation of resources to be delivered to a household or individuals based on the + configured rule. + + + + + + + + + + + +## Getting Started + +To use this package, add the following dependency to your `pubspec.yaml` file: + +```yaml +dependencies: + delivery: ^any +``` + +## Usage + +To Navigate to any screens of the package: + +First add delivery_router to your main app router + +Navigate to the required screen using the below code and pass the required data: + +```dart +context.router.push(SearchBeneficiaryDeliveryRoute(),); +``` + +To Consume any bloc of the package in main app: + +```dart +BlocProvider(create: (context) {return SearchBlocDeliveryWrapper();},), +``` + +Delivery package requires below data to be passed from main app: + +```dart + +String? _tenantId; +String? _loggedInUserUuid; + +double? _maxRadius; +String? _projectId; +BeneficiaryType? _beneficiaryType; +ProjectTypeModel? _projectType; +ProjectModel? _selectedProject; +BoundaryModel? _boundaryModel; +PersistenceConfiguration? _persistenceConfiguration; +List? _genderOptions; +List? _idTypeOptions; +List? _householdDeletionReasonOptions; +List? _householdMemberDeletionReasonOptions; +List? _searchHouseHoldFilter, _searchCLFFilters; +List? _houseStructureTypes; +List? deliveryCommentOptions, +List? symptomsTypes, +List? referralReasons, +List? refusalReasons, +UserModel? loggedInUser, + + +``` + +To set the required data use: + +```dart +DeliverySingleton().setInitialData(); +``` diff --git a/packages/delivery/analysis_options.yaml b/packages/delivery/analysis_options.yaml new file mode 100644 index 0000000000..5bcd91a2b2 --- /dev/null +++ b/packages/delivery/analysis_options.yaml @@ -0,0 +1,3 @@ +include: package:flutter_lints/flutter.yaml +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/packages/registration_delivery/assets/icons/app_icon.png b/packages/delivery/assets/icons/app_icon.png similarity index 100% rename from packages/registration_delivery/assets/icons/app_icon.png rename to packages/delivery/assets/icons/app_icon.png diff --git a/packages/registration_delivery/assets/icons/svg/mychecklist.svg b/packages/delivery/assets/icons/svg/mychecklist.svg similarity index 100% rename from packages/registration_delivery/assets/icons/svg/mychecklist.svg rename to packages/delivery/assets/icons/svg/mychecklist.svg diff --git a/packages/registration_delivery/assets/icons/svg/no_result.svg b/packages/delivery/assets/icons/svg/no_result.svg similarity index 100% rename from packages/registration_delivery/assets/icons/svg/no_result.svg rename to packages/delivery/assets/icons/svg/no_result.svg diff --git a/packages/registration_delivery/assets/images/powered_by_digit.png b/packages/delivery/assets/images/powered_by_digit.png similarity index 100% rename from packages/registration_delivery/assets/images/powered_by_digit.png rename to packages/delivery/assets/images/powered_by_digit.png diff --git a/packages/delivery/lib/blocs/app_localization.dart b/packages/delivery/lib/blocs/app_localization.dart new file mode 100644 index 0000000000..d932a8f5a5 --- /dev/null +++ b/packages/delivery/lib/blocs/app_localization.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; + +import 'delivery_localization_delegate.dart'; + +// Class responsible for handling attendance localization +class DeliveryLocalization { + final Locale locale; + final Future localizedStrings; + final List languages; + + DeliveryLocalization(this.locale, this.localizedStrings, this.languages); + + // Method to get the current localization instance from context + static DeliveryLocalization of(BuildContext context) { + return Localizations.of( + context, DeliveryLocalization)!; + } + + static final List _localizedStrings = []; + + // Method to get the delegate for localization + static LocalizationsDelegate getDelegate( + Future localizedStrings, List languages) => + DeliveryLocalizationDelegate(localizedStrings, languages); + + // Method to load localized strings + Future load() async { + _localizedStrings.clear(); + // Iterate over localized strings and filter based on locale + for (var element in await localizedStrings) { + if (element.locale == '${locale.languageCode}_${locale.countryCode}') { + _localizedStrings.add(element); + } + } + + return true; + } + + // Method to translate a given localized value + String translate(String localizedValues) { + if (_localizedStrings.isEmpty) { + return localizedValues; + } else { + final index = _localizedStrings.indexWhere( + (medium) => medium.code == localizedValues, + ); + + return index != -1 ? _localizedStrings[index].message : localizedValues; + } + } +} diff --git a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart b/packages/delivery/lib/blocs/delivery_intervention/deliver_intervention.dart similarity index 95% rename from packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart rename to packages/delivery/lib/blocs/delivery_intervention/deliver_intervention.dart index 8ccbd43a27..a270af12a3 100644 --- a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.dart +++ b/packages/delivery/lib/blocs/delivery_intervention/deliver_intervention.dart @@ -1,15 +1,14 @@ import 'dart:async'; import 'package:collection/collection.dart'; +import 'package:delivery/models/entities/deliver_strategy_type.dart'; +import 'package:delivery/models/entities/status.dart'; +import 'package:delivery/models/entities/task.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:registration_delivery/blocs/search_households/search_households.dart'; - -import '../../models/entities/additional_fields_type.dart'; -import '../../models/entities/deliver_strategy_type.dart'; -import '../../models/entities/status.dart'; -import '../../models/entities/task.dart'; +import 'package:delivery/blocs/search_households/search_households.dart'; +import 'package:registration/models/entities/additional_fields_type.dart'; part 'deliver_intervention.freezed.dart'; @@ -255,7 +254,7 @@ class DeliverInterventionEvent with _$DeliverInterventionEvent { required bool isEditing, required BoundaryModel boundaryModel, @Default(false) bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper, + HouseholdMemberDeliveryWrapper? householdMemberWrapper, }) = DeliverInterventionSubmitEvent; const factory DeliverInterventionEvent.handleSearch({ @@ -286,7 +285,7 @@ class DeliverInterventionState with _$DeliverInterventionState { List? pastCycles, @Default(true) bool hasCycleArrived, @Default(false) bool isLastDoseOfCycle, - HouseholdMemberWrapper? householdMemberWrapper, + HouseholdMemberDeliveryWrapper? householdMemberWrapper, List? tasks, List? futureDeliveries, List? futureTask, diff --git a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.freezed.dart b/packages/delivery/lib/blocs/delivery_intervention/deliver_intervention.freezed.dart similarity index 95% rename from packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.freezed.dart rename to packages/delivery/lib/blocs/delivery_intervention/deliver_intervention.freezed.dart index fd519292a8..f6fc55b1b3 100644 --- a/packages/registration_delivery/lib/blocs/delivery_intervention/deliver_intervention.freezed.dart +++ b/packages/delivery/lib/blocs/delivery_intervention/deliver_intervention.freezed.dart @@ -23,7 +23,7 @@ mixin _$DeliverInterventionEvent { bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper) + HouseholdMemberDeliveryWrapper? householdMemberWrapper) handleSubmit, required TResult Function(TaskSearchModel taskSearch) handleSearch, required TResult Function( @@ -41,7 +41,7 @@ mixin _$DeliverInterventionEvent { bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper)? + HouseholdMemberDeliveryWrapper? householdMemberWrapper)? handleSubmit, TResult? Function(TaskSearchModel taskSearch)? handleSearch, TResult? Function( @@ -59,7 +59,7 @@ mixin _$DeliverInterventionEvent { bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper)? + HouseholdMemberDeliveryWrapper? householdMemberWrapper)? handleSubmit, TResult Function(TaskSearchModel taskSearch)? handleSearch, TResult Function( @@ -139,9 +139,9 @@ abstract class _$$DeliverInterventionSubmitEventImplCopyWith<$Res> { bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper}); + HouseholdMemberDeliveryWrapper? householdMemberWrapper}); - $HouseholdMemberWrapperCopyWith<$Res>? get householdMemberWrapper; + $HouseholdMemberDeliveryWrapperCopyWith<$Res>? get householdMemberWrapper; } /// @nodoc @@ -183,19 +183,19 @@ class __$$DeliverInterventionSubmitEventImplCopyWithImpl<$Res> householdMemberWrapper: freezed == householdMemberWrapper ? _value.householdMemberWrapper : householdMemberWrapper // ignore: cast_nullable_to_non_nullable - as HouseholdMemberWrapper?, + as HouseholdMemberDeliveryWrapper?, )); } @override @pragma('vm:prefer-inline') - $HouseholdMemberWrapperCopyWith<$Res>? get householdMemberWrapper { + $HouseholdMemberDeliveryWrapperCopyWith<$Res>? get householdMemberWrapper { if (_value.householdMemberWrapper == null) { return null; } - return $HouseholdMemberWrapperCopyWith<$Res>(_value.householdMemberWrapper!, - (value) { + return $HouseholdMemberDeliveryWrapperCopyWith<$Res>( + _value.householdMemberWrapper!, (value) { return _then(_value.copyWith(householdMemberWrapper: value)); }); } @@ -222,7 +222,7 @@ class _$DeliverInterventionSubmitEventImpl @JsonKey() final bool navigateToSummary; @override - final HouseholdMemberWrapper? householdMemberWrapper; + final HouseholdMemberDeliveryWrapper? householdMemberWrapper; @override String toString() { @@ -265,7 +265,7 @@ class _$DeliverInterventionSubmitEventImpl bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper) + HouseholdMemberDeliveryWrapper? householdMemberWrapper) handleSubmit, required TResult Function(TaskSearchModel taskSearch) handleSearch, required TResult Function( @@ -287,7 +287,7 @@ class _$DeliverInterventionSubmitEventImpl bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper)? + HouseholdMemberDeliveryWrapper? householdMemberWrapper)? handleSubmit, TResult? Function(TaskSearchModel taskSearch)? handleSearch, TResult? Function( @@ -309,7 +309,7 @@ class _$DeliverInterventionSubmitEventImpl bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper)? + HouseholdMemberDeliveryWrapper? householdMemberWrapper)? handleSubmit, TResult Function(TaskSearchModel taskSearch)? handleSearch, TResult Function( @@ -382,14 +382,14 @@ abstract class DeliverInterventionSubmitEvent required final bool isEditing, required final BoundaryModel boundaryModel, final bool navigateToSummary, - final HouseholdMemberWrapper? householdMemberWrapper}) = + final HouseholdMemberDeliveryWrapper? householdMemberWrapper}) = _$DeliverInterventionSubmitEventImpl; TaskModel get task; bool get isEditing; BoundaryModel get boundaryModel; bool get navigateToSummary; - HouseholdMemberWrapper? get householdMemberWrapper; + HouseholdMemberDeliveryWrapper? get householdMemberWrapper; @JsonKey(ignore: true) _$$DeliverInterventionSubmitEventImplCopyWith< _$DeliverInterventionSubmitEventImpl> @@ -472,7 +472,7 @@ class _$DeliverInterventionSearchEventImpl bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper) + HouseholdMemberDeliveryWrapper? householdMemberWrapper) handleSubmit, required TResult Function(TaskSearchModel taskSearch) handleSearch, required TResult Function( @@ -493,7 +493,7 @@ class _$DeliverInterventionSearchEventImpl bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper)? + HouseholdMemberDeliveryWrapper? householdMemberWrapper)? handleSubmit, TResult? Function(TaskSearchModel taskSearch)? handleSearch, TResult? Function( @@ -514,7 +514,7 @@ class _$DeliverInterventionSearchEventImpl bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper)? + HouseholdMemberDeliveryWrapper? householdMemberWrapper)? handleSubmit, TResult Function(TaskSearchModel taskSearch)? handleSearch, TResult Function( @@ -692,7 +692,7 @@ class _$DeliverInterventionCycleFutureDoseSelectionEventImpl bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper) + HouseholdMemberDeliveryWrapper? householdMemberWrapper) handleSubmit, required TResult Function(TaskSearchModel taskSearch) handleSearch, required TResult Function( @@ -713,7 +713,7 @@ class _$DeliverInterventionCycleFutureDoseSelectionEventImpl bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper)? + HouseholdMemberDeliveryWrapper? householdMemberWrapper)? handleSubmit, TResult? Function(TaskSearchModel taskSearch)? handleSearch, TResult? Function( @@ -734,7 +734,7 @@ class _$DeliverInterventionCycleFutureDoseSelectionEventImpl bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper)? + HouseholdMemberDeliveryWrapper? householdMemberWrapper)? handleSubmit, TResult Function(TaskSearchModel taskSearch)? handleSearch, TResult Function( @@ -935,7 +935,7 @@ class _$DeliverInterventionActiveCycleDoseSelectionEventImpl bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper) + HouseholdMemberDeliveryWrapper? householdMemberWrapper) handleSubmit, required TResult Function(TaskSearchModel taskSearch) handleSearch, required TResult Function( @@ -957,7 +957,7 @@ class _$DeliverInterventionActiveCycleDoseSelectionEventImpl bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper)? + HouseholdMemberDeliveryWrapper? householdMemberWrapper)? handleSubmit, TResult? Function(TaskSearchModel taskSearch)? handleSearch, TResult? Function( @@ -979,7 +979,7 @@ class _$DeliverInterventionActiveCycleDoseSelectionEventImpl bool isEditing, BoundaryModel boundaryModel, bool navigateToSummary, - HouseholdMemberWrapper? householdMemberWrapper)? + HouseholdMemberDeliveryWrapper? householdMemberWrapper)? handleSubmit, TResult Function(TaskSearchModel taskSearch)? handleSearch, TResult Function( @@ -1073,7 +1073,7 @@ mixin _$DeliverInterventionState { List? get pastCycles => throw _privateConstructorUsedError; bool get hasCycleArrived => throw _privateConstructorUsedError; bool get isLastDoseOfCycle => throw _privateConstructorUsedError; - HouseholdMemberWrapper? get householdMemberWrapper => + HouseholdMemberDeliveryWrapper? get householdMemberWrapper => throw _privateConstructorUsedError; List? get tasks => throw _privateConstructorUsedError; List? get futureDeliveries => @@ -1100,13 +1100,13 @@ abstract class $DeliverInterventionStateCopyWith<$Res> { List? pastCycles, bool hasCycleArrived, bool isLastDoseOfCycle, - HouseholdMemberWrapper? householdMemberWrapper, + HouseholdMemberDeliveryWrapper? householdMemberWrapper, List? tasks, List? futureDeliveries, List? futureTask, TaskModel? oldTask}); - $HouseholdMemberWrapperCopyWith<$Res>? get householdMemberWrapper; + $HouseholdMemberDeliveryWrapperCopyWith<$Res>? get householdMemberWrapper; } /// @nodoc @@ -1168,7 +1168,7 @@ class _$DeliverInterventionStateCopyWithImpl<$Res, householdMemberWrapper: freezed == householdMemberWrapper ? _value.householdMemberWrapper : householdMemberWrapper // ignore: cast_nullable_to_non_nullable - as HouseholdMemberWrapper?, + as HouseholdMemberDeliveryWrapper?, tasks: freezed == tasks ? _value.tasks : tasks // ignore: cast_nullable_to_non_nullable @@ -1190,13 +1190,13 @@ class _$DeliverInterventionStateCopyWithImpl<$Res, @override @pragma('vm:prefer-inline') - $HouseholdMemberWrapperCopyWith<$Res>? get householdMemberWrapper { + $HouseholdMemberDeliveryWrapperCopyWith<$Res>? get householdMemberWrapper { if (_value.householdMemberWrapper == null) { return null; } - return $HouseholdMemberWrapperCopyWith<$Res>(_value.householdMemberWrapper!, - (value) { + return $HouseholdMemberDeliveryWrapperCopyWith<$Res>( + _value.householdMemberWrapper!, (value) { return _then(_value.copyWith(householdMemberWrapper: value) as $Val); }); } @@ -1219,14 +1219,14 @@ abstract class _$$DeliverInterventionStateImplCopyWith<$Res> List? pastCycles, bool hasCycleArrived, bool isLastDoseOfCycle, - HouseholdMemberWrapper? householdMemberWrapper, + HouseholdMemberDeliveryWrapper? householdMemberWrapper, List? tasks, List? futureDeliveries, List? futureTask, TaskModel? oldTask}); @override - $HouseholdMemberWrapperCopyWith<$Res>? get householdMemberWrapper; + $HouseholdMemberDeliveryWrapperCopyWith<$Res>? get householdMemberWrapper; } /// @nodoc @@ -1287,7 +1287,7 @@ class __$$DeliverInterventionStateImplCopyWithImpl<$Res> householdMemberWrapper: freezed == householdMemberWrapper ? _value.householdMemberWrapper : householdMemberWrapper // ignore: cast_nullable_to_non_nullable - as HouseholdMemberWrapper?, + as HouseholdMemberDeliveryWrapper?, tasks: freezed == tasks ? _value._tasks : tasks // ignore: cast_nullable_to_non_nullable @@ -1358,7 +1358,7 @@ class _$DeliverInterventionStateImpl implements _DeliverInterventionState { @JsonKey() final bool isLastDoseOfCycle; @override - final HouseholdMemberWrapper? householdMemberWrapper; + final HouseholdMemberDeliveryWrapper? householdMemberWrapper; final List? _tasks; @override List? get tasks { @@ -1457,7 +1457,7 @@ abstract class _DeliverInterventionState implements DeliverInterventionState { final List? pastCycles, final bool hasCycleArrived, final bool isLastDoseOfCycle, - final HouseholdMemberWrapper? householdMemberWrapper, + final HouseholdMemberDeliveryWrapper? householdMemberWrapper, final List? tasks, final List? futureDeliveries, final List? futureTask, @@ -1478,7 +1478,7 @@ abstract class _DeliverInterventionState implements DeliverInterventionState { @override bool get isLastDoseOfCycle; @override - HouseholdMemberWrapper? get householdMemberWrapper; + HouseholdMemberDeliveryWrapper? get householdMemberWrapper; @override List? get tasks; @override diff --git a/packages/delivery/lib/blocs/delivery_localization_delegate.dart b/packages/delivery/lib/blocs/delivery_localization_delegate.dart new file mode 100644 index 0000000000..cf297cf886 --- /dev/null +++ b/packages/delivery/lib/blocs/delivery_localization_delegate.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; + +import 'app_localization.dart'; + +class DeliveryLocalizationDelegate + extends LocalizationsDelegate { + final Future localizedStrings; + final List languages; + + const DeliveryLocalizationDelegate(this.localizedStrings, this.languages); + + @override + bool isSupported(Locale locale) { + return languages.map((e) { + final results = e.value.split('_'); + if (results.isNotEmpty) return results.first; + }).contains(locale.languageCode); + } + + @override + Future load(Locale locale) async { + DeliveryLocalization localization = + DeliveryLocalization(locale, localizedStrings, languages); + await localization.load(); + + return localization; + } + + @override + bool shouldReload(covariant LocalizationsDelegate old) { + return true; + } +} diff --git a/packages/registration_delivery/lib/blocs/household_overview/household_overview.dart b/packages/delivery/lib/blocs/household_overview/household_overview.dart similarity index 85% rename from packages/registration_delivery/lib/blocs/household_overview/household_overview.dart rename to packages/delivery/lib/blocs/household_overview/household_overview.dart index 705485a6ef..ebb6299038 100644 --- a/packages/registration_delivery/lib/blocs/household_overview/household_overview.dart +++ b/packages/delivery/lib/blocs/household_overview/household_overview.dart @@ -6,26 +6,25 @@ import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/utils/typedefs.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/utils/global_search_parameters.dart'; +import 'package:registration/registration.dart'; +import 'package:registration/utils/global_search_parameters.dart'; import '../../data/repositories/local/individual_global_search.dart'; -import '../../models/entities/household.dart'; -import '../../models/entities/household_member.dart'; -import '../../models/entities/project_beneficiary.dart'; + import '../../models/entities/referral.dart'; import '../../models/entities/side_effect.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; import '../../utils/typedefs.dart'; +import '../../utils/utils.dart'; import '../search_households/search_households.dart'; part 'household_overview.freezed.dart'; -typedef HouseholdOverviewEmitter = Emitter; +typedef HouseholdOverviewEmitter = Emitter; -class HouseholdOverviewBloc - extends Bloc { +class HouseholdOverviewDeliveryBloc + extends Bloc { final BeneficiaryType beneficiaryType; final IndividualDataRepository individualRepository; final HouseholdDataRepository householdRepository; @@ -34,9 +33,10 @@ class HouseholdOverviewBloc final TaskDataRepository taskDataRepository; final SideEffectDataRepository sideEffectDataRepository; final ReferralDataRepository referralDataRepository; - final IndividualGlobalSearchRepository individualGlobalSearchRepository; + final IndividualGlobalDeliverySearchRepository + individualGlobalSearchRepository; - HouseholdOverviewBloc( + HouseholdOverviewDeliveryBloc( super.initialState, { required this.projectBeneficiaryRepository, required this.householdRepository, @@ -58,7 +58,7 @@ class HouseholdOverviewBloc // This function handles the selection of an individual in the household overview. FutureOr _selectedIndividual( HouseholdOverviewSelectIndividualEvent event, - Emitter emit, + Emitter emit, ) async { // Update the state with the selected individual. emit(state.copyWith(selectedIndividual: event.individualModel)); @@ -67,7 +67,7 @@ class HouseholdOverviewBloc // This function handles reloading and updating the household overview state. FutureOr _handleReloadMember( HouseholdOverviewReloadEvent event, - Emitter emit, + Emitter emit, ) async { // Set the loading state to indicate that data is being loaded. emit(state.copyWith(loading: true)); @@ -79,9 +79,9 @@ class HouseholdOverviewBloc ? await householdMemberRepository.search( HouseholdMemberSearchModel( householdClientReferenceId: - state.householdMemberWrapper.household != null + state.householdMemberDeliveryWrapper.household != null ? [ - state.householdMemberWrapper.household! + state.householdMemberDeliveryWrapper.household! .clientReferenceId ] : [], @@ -90,11 +90,13 @@ class HouseholdOverviewBloc ), ) : await householdMemberRepository.search(HouseholdMemberSearchModel( - householdClientReferenceId: state - .householdMemberWrapper.household != - null - ? [state.householdMemberWrapper.household!.clientReferenceId] - : [])); + householdClientReferenceId: + state.householdMemberDeliveryWrapper.household != null + ? [ + state.householdMemberDeliveryWrapper.household! + .clientReferenceId + ] + : [])); // Group household members by household ID. final groupedHouseholds = members.groupListsBy( @@ -102,7 +104,7 @@ class HouseholdOverviewBloc ); final householdId = - state.householdMemberWrapper.household?.clientReferenceId; + state.householdMemberDeliveryWrapper.household?.clientReferenceId; // Check if the current household has any members. if (!groupedHouseholds.containsKey(householdId)) { @@ -221,31 +223,33 @@ class HouseholdOverviewBloc offset: members.isNotEmpty && members.length == (event.limit ?? 10) ? (event.offset ?? 0) + (event.limit ?? 10) : null, - householdMemberWrapper: state.householdMemberWrapper.copyWith( + householdMemberDeliveryWrapper: + state.householdMemberDeliveryWrapper.copyWith( members: (event.projectBeneficiaryType == BeneficiaryType.individual) ? [ - ...state.householdMemberWrapper.members ?? [], + ...state.householdMemberDeliveryWrapper.members ?? [], ...beneficiaryIndividuals, ] : [ - ...state.householdMemberWrapper.members ?? [], + ...state.householdMemberDeliveryWrapper.members ?? [], ...individuals, ], projectBeneficiaries: [ - ...state.householdMemberWrapper.projectBeneficiaries ?? [], + ...state.householdMemberDeliveryWrapper.projectBeneficiaries ?? + [], ...projectBeneficiaries, ], tasks: [ - ...?state.householdMemberWrapper.tasks, + ...?state.householdMemberDeliveryWrapper.tasks, ...tasks, ], sideEffects: [ - ...?state.householdMemberWrapper.sideEffects, + ...?state.householdMemberDeliveryWrapper.sideEffects, ...sideEffects, ], referrals: [ - ...?state.householdMemberWrapper.referrals, + ...?state.householdMemberDeliveryWrapper.referrals, ...referrals, ], ), @@ -257,7 +261,7 @@ class HouseholdOverviewBloc // Update the state with the loaded data and stop loading. emit( state.copyWith( - householdMemberWrapper: HouseholdMemberWrapper( + householdMemberDeliveryWrapper: HouseholdMemberDeliveryWrapper( household: resultHousehold, headOfHousehold: head, members: (event.projectBeneficiaryType == BeneficiaryType.individual @@ -278,11 +282,11 @@ class HouseholdOverviewBloc } else { final totalResult = await individualGlobalSearchRepository .individualGlobalSearch(GlobalSearchParameters( - householdType: RegistrationDeliverySingleton().householdType, - householdClientReferenceId: - state.householdMemberWrapper.household!.clientReferenceId, + householdType: DeliverySingleton().householdType, + householdClientReferenceId: state + .householdMemberDeliveryWrapper.household!.clientReferenceId, isProximityEnabled: false, - projectId: RegistrationDeliverySingleton().projectId, + projectId: DeliverySingleton().projectId, latitude: null, longitude: null, maxRadius: null, @@ -295,9 +299,10 @@ class HouseholdOverviewBloc if (result.isEmpty) { emit(state.copyWith( loading: false, - householdMemberWrapper: HouseholdMemberWrapper( - household: state.householdMemberWrapper.household, - headOfHousehold: state.householdMemberWrapper.headOfHousehold, + householdMemberDeliveryWrapper: HouseholdMemberDeliveryWrapper( + household: state.householdMemberDeliveryWrapper.household, + headOfHousehold: + state.householdMemberDeliveryWrapper.headOfHousehold, members: [], tasks: null, projectBeneficiaries: null, @@ -323,10 +328,13 @@ class HouseholdOverviewBloc final projectBeneficiaries = await projectBeneficiaryRepository.search( ProjectBeneficiarySearchModel( - beneficiaryClientReferenceId: event.projectBeneficiaryType == - BeneficiaryType.individual - ? individualClientReferenceIds - : [state.householdMemberWrapper.household!.clientReferenceId], + beneficiaryClientReferenceId: + event.projectBeneficiaryType == BeneficiaryType.individual + ? individualClientReferenceIds + : [ + state.householdMemberDeliveryWrapper.household! + .clientReferenceId + ], projectId: [event.projectId], ), ); @@ -366,14 +374,15 @@ class HouseholdOverviewBloc offset: individuals.isNotEmpty && individuals.length == event.limit ? (event.offset ?? 0) + (event.limit ?? 10) : null, - householdMemberWrapper: state.householdMemberWrapper.copyWith( + householdMemberDeliveryWrapper: + state.householdMemberDeliveryWrapper.copyWith( members: event.offset == 0 ? (event.projectBeneficiaryType == BeneficiaryType.individual) ? beneficiaryIndividuals : individuals : [ ...{ - ...state.householdMemberWrapper.members ?? [], + ...state.householdMemberDeliveryWrapper.members ?? [], ...((event.projectBeneficiaryType == BeneficiaryType.individual) ? beneficiaryIndividuals @@ -384,7 +393,8 @@ class HouseholdOverviewBloc ? projectBeneficiaries : [ ...{ - ...state.householdMemberWrapper.projectBeneficiaries ?? + ...state.householdMemberDeliveryWrapper + .projectBeneficiaries ?? [], ...projectBeneficiaries, }, @@ -392,13 +402,16 @@ class HouseholdOverviewBloc tasks: event.offset == 0 ? tasks : [ - ...{...?state.householdMemberWrapper.tasks, ...tasks}, + ...{ + ...?state.householdMemberDeliveryWrapper.tasks, + ...tasks + }, ], sideEffects: event.offset == 0 ? sideEffects : [ ...{ - ...?state.householdMemberWrapper.sideEffects, + ...?state.householdMemberDeliveryWrapper.sideEffects, ...sideEffects, }, ], @@ -406,7 +419,7 @@ class HouseholdOverviewBloc ? referrals : [ ...{ - ...?state.householdMemberWrapper.referrals, + ...?state.householdMemberDeliveryWrapper.referrals, ...referrals, }, ], @@ -424,9 +437,9 @@ class HouseholdOverviewBloc List projectBeneficiariesList = await projectBeneficiaryRepository.search( - ProjectBeneficiarySearchModel(projectId: [ - RegistrationDeliverySingleton().projectId.toString() - ], clientReferenceId: listOfBeneficiaries)); + ProjectBeneficiarySearchModel( + projectId: [DeliverySingleton().projectId.toString()], + clientReferenceId: listOfBeneficiaries)); late List listOfMembers = []; @@ -456,10 +469,13 @@ class HouseholdOverviewBloc final projectBeneficiaries = await projectBeneficiaryRepository.search( ProjectBeneficiarySearchModel( - beneficiaryClientReferenceId: event.projectBeneficiaryType == - BeneficiaryType.individual - ? individualClientReferenceIds - : [state.householdMemberWrapper.household!.clientReferenceId], + beneficiaryClientReferenceId: + event.projectBeneficiaryType == BeneficiaryType.individual + ? individualClientReferenceIds + : [ + state.householdMemberDeliveryWrapper.household! + .clientReferenceId + ], projectId: [event.projectId], ), ); @@ -500,14 +516,15 @@ class HouseholdOverviewBloc individualsList.length == event.limit ? (event.offset ?? 0) + (event.limit ?? 10) : null, - householdMemberWrapper: state.householdMemberWrapper.copyWith( + householdMemberDeliveryWrapper: + state.householdMemberDeliveryWrapper.copyWith( members: event.offset == 0 ? (event.projectBeneficiaryType == BeneficiaryType.individual) ? beneficiaryIndividuals : individualsList : [ ...{ - ...state.householdMemberWrapper.members ?? [], + ...state.householdMemberDeliveryWrapper.members ?? [], ...((event.projectBeneficiaryType == BeneficiaryType.individual) ? beneficiaryIndividuals @@ -518,7 +535,8 @@ class HouseholdOverviewBloc ? projectBeneficiaries : [ ...{ - ...state.householdMemberWrapper.projectBeneficiaries ?? + ...state.householdMemberDeliveryWrapper + .projectBeneficiaries ?? [], ...projectBeneficiaries, }, @@ -526,13 +544,16 @@ class HouseholdOverviewBloc tasks: event.offset == 0 ? tasks : [ - ...{...?state.householdMemberWrapper.tasks, ...tasks}, + ...{ + ...?state.householdMemberDeliveryWrapper.tasks, + ...tasks + }, ], sideEffects: event.offset == 0 ? sideEffects : [ ...{ - ...?state.householdMemberWrapper.sideEffects, + ...?state.householdMemberDeliveryWrapper.sideEffects, ...sideEffects, }, ], @@ -540,7 +561,7 @@ class HouseholdOverviewBloc ? referrals : [ ...{ - ...?state.householdMemberWrapper.referrals, + ...?state.householdMemberDeliveryWrapper.referrals, ...referrals, }, ], @@ -562,10 +583,13 @@ class HouseholdOverviewBloc final projectBeneficiaries = await projectBeneficiaryRepository.search( ProjectBeneficiarySearchModel( - beneficiaryClientReferenceId: event.projectBeneficiaryType == - BeneficiaryType.individual - ? individualClientReferenceIds - : [state.householdMemberWrapper.household!.clientReferenceId], + beneficiaryClientReferenceId: + event.projectBeneficiaryType == BeneficiaryType.individual + ? individualClientReferenceIds + : [ + state.householdMemberDeliveryWrapper.household! + .clientReferenceId + ], projectId: [event.projectId], ), ); @@ -605,14 +629,15 @@ class HouseholdOverviewBloc offset: individuals.isNotEmpty && individuals.length == event.limit ? (event.offset ?? 0) + (event.limit ?? 10) : null, - householdMemberWrapper: state.householdMemberWrapper.copyWith( + householdMemberDeliveryWrapper: + state.householdMemberDeliveryWrapper.copyWith( members: event.offset == 0 ? (event.projectBeneficiaryType == BeneficiaryType.individual) ? beneficiaryIndividuals : individuals : [ ...{ - ...state.householdMemberWrapper.members ?? [], + ...state.householdMemberDeliveryWrapper.members ?? [], ...((event.projectBeneficiaryType == BeneficiaryType.individual) ? beneficiaryIndividuals @@ -623,7 +648,8 @@ class HouseholdOverviewBloc ? projectBeneficiaries : [ ...{ - ...state.householdMemberWrapper.projectBeneficiaries ?? + ...state.householdMemberDeliveryWrapper + .projectBeneficiaries ?? [], ...projectBeneficiaries, }, @@ -631,13 +657,16 @@ class HouseholdOverviewBloc tasks: event.offset == 0 ? tasks : [ - ...{...?state.householdMemberWrapper.tasks, ...tasks}, + ...{ + ...?state.householdMemberDeliveryWrapper.tasks, + ...tasks + }, ], sideEffects: event.offset == 0 ? sideEffects : [ ...{ - ...?state.householdMemberWrapper.sideEffects, + ...?state.householdMemberDeliveryWrapper.sideEffects, ...sideEffects, }, ], @@ -645,7 +674,7 @@ class HouseholdOverviewBloc ? referrals : [ ...{ - ...?state.householdMemberWrapper.referrals, + ...?state.householdMemberDeliveryWrapper.referrals, ...referrals, }, ], @@ -942,12 +971,12 @@ class HouseholdOverviewEvent with _$HouseholdOverviewEvent { } @freezed -class HouseholdOverviewState with _$HouseholdOverviewState { - const factory HouseholdOverviewState({ +class HouseholdOverviewDeliveryState with _$HouseholdOverviewDeliveryState { + const factory HouseholdOverviewDeliveryState({ @Default(false) bool loading, - required HouseholdMemberWrapper householdMemberWrapper, + required HouseholdMemberDeliveryWrapper householdMemberDeliveryWrapper, IndividualModel? selectedIndividual, int? offset, int? limit, - }) = _HouseholdOverviewState; + }) = _HouseholdOverviewDeliveryState; } diff --git a/packages/delivery/lib/blocs/household_overview/household_overview.freezed.dart b/packages/delivery/lib/blocs/household_overview/household_overview.freezed.dart new file mode 100644 index 0000000000..c6fb68d078 --- /dev/null +++ b/packages/delivery/lib/blocs/household_overview/household_overview.freezed.dart @@ -0,0 +1,1861 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'household_overview.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +/// @nodoc +mixin _$HouseholdOverviewEvent { + @optionalTypeArgs + TResult when({ + required TResult Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType) + deleteHousehold, + required TResult Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType) + deleteIndividual, + required TResult Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType) + setAsHead, + required TResult Function(IndividualModel individualModel) + selectedIndividual, + required TResult Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName) + reload, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType)? + deleteHousehold, + TResult? Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType)? + deleteIndividual, + TResult? Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType)? + setAsHead, + TResult? Function(IndividualModel individualModel)? selectedIndividual, + TResult? Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName)? + reload, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeWhen({ + TResult Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType)? + deleteHousehold, + TResult Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType)? + deleteIndividual, + TResult Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType)? + setAsHead, + TResult Function(IndividualModel individualModel)? selectedIndividual, + TResult Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName)? + reload, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult map({ + required TResult Function(HouseholdOverviewDeleteHouseholdEvent value) + deleteHousehold, + required TResult Function(HouseholdOverviewDeleteIndividualEvent value) + deleteIndividual, + required TResult Function(HouseholdOverviewSetAsHeadEvent value) setAsHead, + required TResult Function(HouseholdOverviewSelectIndividualEvent value) + selectedIndividual, + required TResult Function(HouseholdOverviewReloadEvent value) reload, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(HouseholdOverviewDeleteHouseholdEvent value)? + deleteHousehold, + TResult? Function(HouseholdOverviewDeleteIndividualEvent value)? + deleteIndividual, + TResult? Function(HouseholdOverviewSetAsHeadEvent value)? setAsHead, + TResult? Function(HouseholdOverviewSelectIndividualEvent value)? + selectedIndividual, + TResult? Function(HouseholdOverviewReloadEvent value)? reload, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeMap({ + TResult Function(HouseholdOverviewDeleteHouseholdEvent value)? + deleteHousehold, + TResult Function(HouseholdOverviewDeleteIndividualEvent value)? + deleteIndividual, + TResult Function(HouseholdOverviewSetAsHeadEvent value)? setAsHead, + TResult Function(HouseholdOverviewSelectIndividualEvent value)? + selectedIndividual, + TResult Function(HouseholdOverviewReloadEvent value)? reload, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $HouseholdOverviewEventCopyWith<$Res> { + factory $HouseholdOverviewEventCopyWith(HouseholdOverviewEvent value, + $Res Function(HouseholdOverviewEvent) then) = + _$HouseholdOverviewEventCopyWithImpl<$Res, HouseholdOverviewEvent>; +} + +/// @nodoc +class _$HouseholdOverviewEventCopyWithImpl<$Res, + $Val extends HouseholdOverviewEvent> + implements $HouseholdOverviewEventCopyWith<$Res> { + _$HouseholdOverviewEventCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; +} + +/// @nodoc +abstract class _$$HouseholdOverviewDeleteHouseholdEventImplCopyWith<$Res> { + factory _$$HouseholdOverviewDeleteHouseholdEventImplCopyWith( + _$HouseholdOverviewDeleteHouseholdEventImpl value, + $Res Function(_$HouseholdOverviewDeleteHouseholdEventImpl) then) = + __$$HouseholdOverviewDeleteHouseholdEventImplCopyWithImpl<$Res>; + @useResult + $Res call( + {String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType}); +} + +/// @nodoc +class __$$HouseholdOverviewDeleteHouseholdEventImplCopyWithImpl<$Res> + extends _$HouseholdOverviewEventCopyWithImpl<$Res, + _$HouseholdOverviewDeleteHouseholdEventImpl> + implements _$$HouseholdOverviewDeleteHouseholdEventImplCopyWith<$Res> { + __$$HouseholdOverviewDeleteHouseholdEventImplCopyWithImpl( + _$HouseholdOverviewDeleteHouseholdEventImpl _value, + $Res Function(_$HouseholdOverviewDeleteHouseholdEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? projectId = null, + Object? householdModel = null, + Object? members = null, + Object? projectBeneficiaryModel = null, + Object? projectBeneficiaryType = null, + }) { + return _then(_$HouseholdOverviewDeleteHouseholdEventImpl( + projectId: null == projectId + ? _value.projectId + : projectId // ignore: cast_nullable_to_non_nullable + as String, + householdModel: null == householdModel + ? _value.householdModel + : householdModel // ignore: cast_nullable_to_non_nullable + as HouseholdModel, + members: null == members + ? _value._members + : members // ignore: cast_nullable_to_non_nullable + as List, + projectBeneficiaryModel: null == projectBeneficiaryModel + ? _value.projectBeneficiaryModel + : projectBeneficiaryModel // ignore: cast_nullable_to_non_nullable + as ProjectBeneficiaryModel, + projectBeneficiaryType: null == projectBeneficiaryType + ? _value.projectBeneficiaryType + : projectBeneficiaryType // ignore: cast_nullable_to_non_nullable + as BeneficiaryType, + )); + } +} + +/// @nodoc + +class _$HouseholdOverviewDeleteHouseholdEventImpl + implements HouseholdOverviewDeleteHouseholdEvent { + const _$HouseholdOverviewDeleteHouseholdEventImpl( + {required this.projectId, + required this.householdModel, + required final List members, + required this.projectBeneficiaryModel, + required this.projectBeneficiaryType}) + : _members = members; + + @override + final String projectId; + @override + final HouseholdModel householdModel; + final List _members; + @override + List get members { + if (_members is EqualUnmodifiableListView) return _members; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_members); + } + + @override + final ProjectBeneficiaryModel projectBeneficiaryModel; + @override + final BeneficiaryType projectBeneficiaryType; + + @override + String toString() { + return 'HouseholdOverviewEvent.deleteHousehold(projectId: $projectId, householdModel: $householdModel, members: $members, projectBeneficiaryModel: $projectBeneficiaryModel, projectBeneficiaryType: $projectBeneficiaryType)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$HouseholdOverviewDeleteHouseholdEventImpl && + (identical(other.projectId, projectId) || + other.projectId == projectId) && + (identical(other.householdModel, householdModel) || + other.householdModel == householdModel) && + const DeepCollectionEquality().equals(other._members, _members) && + (identical( + other.projectBeneficiaryModel, projectBeneficiaryModel) || + other.projectBeneficiaryModel == projectBeneficiaryModel) && + (identical(other.projectBeneficiaryType, projectBeneficiaryType) || + other.projectBeneficiaryType == projectBeneficiaryType)); + } + + @override + int get hashCode => Object.hash( + runtimeType, + projectId, + householdModel, + const DeepCollectionEquality().hash(_members), + projectBeneficiaryModel, + projectBeneficiaryType); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$HouseholdOverviewDeleteHouseholdEventImplCopyWith< + _$HouseholdOverviewDeleteHouseholdEventImpl> + get copyWith => __$$HouseholdOverviewDeleteHouseholdEventImplCopyWithImpl< + _$HouseholdOverviewDeleteHouseholdEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType) + deleteHousehold, + required TResult Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType) + deleteIndividual, + required TResult Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType) + setAsHead, + required TResult Function(IndividualModel individualModel) + selectedIndividual, + required TResult Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName) + reload, + }) { + return deleteHousehold(projectId, householdModel, members, + projectBeneficiaryModel, projectBeneficiaryType); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType)? + deleteHousehold, + TResult? Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType)? + deleteIndividual, + TResult? Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType)? + setAsHead, + TResult? Function(IndividualModel individualModel)? selectedIndividual, + TResult? Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName)? + reload, + }) { + return deleteHousehold?.call(projectId, householdModel, members, + projectBeneficiaryModel, projectBeneficiaryType); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType)? + deleteHousehold, + TResult Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType)? + deleteIndividual, + TResult Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType)? + setAsHead, + TResult Function(IndividualModel individualModel)? selectedIndividual, + TResult Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName)? + reload, + required TResult orElse(), + }) { + if (deleteHousehold != null) { + return deleteHousehold(projectId, householdModel, members, + projectBeneficiaryModel, projectBeneficiaryType); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(HouseholdOverviewDeleteHouseholdEvent value) + deleteHousehold, + required TResult Function(HouseholdOverviewDeleteIndividualEvent value) + deleteIndividual, + required TResult Function(HouseholdOverviewSetAsHeadEvent value) setAsHead, + required TResult Function(HouseholdOverviewSelectIndividualEvent value) + selectedIndividual, + required TResult Function(HouseholdOverviewReloadEvent value) reload, + }) { + return deleteHousehold(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(HouseholdOverviewDeleteHouseholdEvent value)? + deleteHousehold, + TResult? Function(HouseholdOverviewDeleteIndividualEvent value)? + deleteIndividual, + TResult? Function(HouseholdOverviewSetAsHeadEvent value)? setAsHead, + TResult? Function(HouseholdOverviewSelectIndividualEvent value)? + selectedIndividual, + TResult? Function(HouseholdOverviewReloadEvent value)? reload, + }) { + return deleteHousehold?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(HouseholdOverviewDeleteHouseholdEvent value)? + deleteHousehold, + TResult Function(HouseholdOverviewDeleteIndividualEvent value)? + deleteIndividual, + TResult Function(HouseholdOverviewSetAsHeadEvent value)? setAsHead, + TResult Function(HouseholdOverviewSelectIndividualEvent value)? + selectedIndividual, + TResult Function(HouseholdOverviewReloadEvent value)? reload, + required TResult orElse(), + }) { + if (deleteHousehold != null) { + return deleteHousehold(this); + } + return orElse(); + } +} + +abstract class HouseholdOverviewDeleteHouseholdEvent + implements HouseholdOverviewEvent { + const factory HouseholdOverviewDeleteHouseholdEvent( + {required final String projectId, + required final HouseholdModel householdModel, + required final List members, + required final ProjectBeneficiaryModel projectBeneficiaryModel, + required final BeneficiaryType projectBeneficiaryType}) = + _$HouseholdOverviewDeleteHouseholdEventImpl; + + String get projectId; + HouseholdModel get householdModel; + List get members; + ProjectBeneficiaryModel get projectBeneficiaryModel; + BeneficiaryType get projectBeneficiaryType; + @JsonKey(ignore: true) + _$$HouseholdOverviewDeleteHouseholdEventImplCopyWith< + _$HouseholdOverviewDeleteHouseholdEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$HouseholdOverviewDeleteIndividualEventImplCopyWith<$Res> { + factory _$$HouseholdOverviewDeleteIndividualEventImplCopyWith( + _$HouseholdOverviewDeleteIndividualEventImpl value, + $Res Function(_$HouseholdOverviewDeleteIndividualEventImpl) then) = + __$$HouseholdOverviewDeleteIndividualEventImplCopyWithImpl<$Res>; + @useResult + $Res call( + {String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType}); +} + +/// @nodoc +class __$$HouseholdOverviewDeleteIndividualEventImplCopyWithImpl<$Res> + extends _$HouseholdOverviewEventCopyWithImpl<$Res, + _$HouseholdOverviewDeleteIndividualEventImpl> + implements _$$HouseholdOverviewDeleteIndividualEventImplCopyWith<$Res> { + __$$HouseholdOverviewDeleteIndividualEventImplCopyWithImpl( + _$HouseholdOverviewDeleteIndividualEventImpl _value, + $Res Function(_$HouseholdOverviewDeleteIndividualEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? projectId = null, + Object? householdModel = null, + Object? individualModel = null, + Object? projectBeneficiaryType = null, + }) { + return _then(_$HouseholdOverviewDeleteIndividualEventImpl( + projectId: null == projectId + ? _value.projectId + : projectId // ignore: cast_nullable_to_non_nullable + as String, + householdModel: null == householdModel + ? _value.householdModel + : householdModel // ignore: cast_nullable_to_non_nullable + as HouseholdModel, + individualModel: null == individualModel + ? _value.individualModel + : individualModel // ignore: cast_nullable_to_non_nullable + as IndividualModel, + projectBeneficiaryType: null == projectBeneficiaryType + ? _value.projectBeneficiaryType + : projectBeneficiaryType // ignore: cast_nullable_to_non_nullable + as BeneficiaryType, + )); + } +} + +/// @nodoc + +class _$HouseholdOverviewDeleteIndividualEventImpl + implements HouseholdOverviewDeleteIndividualEvent { + const _$HouseholdOverviewDeleteIndividualEventImpl( + {required this.projectId, + required this.householdModel, + required this.individualModel, + required this.projectBeneficiaryType}); + + @override + final String projectId; + @override + final HouseholdModel householdModel; + @override + final IndividualModel individualModel; + @override + final BeneficiaryType projectBeneficiaryType; + + @override + String toString() { + return 'HouseholdOverviewEvent.deleteIndividual(projectId: $projectId, householdModel: $householdModel, individualModel: $individualModel, projectBeneficiaryType: $projectBeneficiaryType)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$HouseholdOverviewDeleteIndividualEventImpl && + (identical(other.projectId, projectId) || + other.projectId == projectId) && + (identical(other.householdModel, householdModel) || + other.householdModel == householdModel) && + (identical(other.individualModel, individualModel) || + other.individualModel == individualModel) && + (identical(other.projectBeneficiaryType, projectBeneficiaryType) || + other.projectBeneficiaryType == projectBeneficiaryType)); + } + + @override + int get hashCode => Object.hash(runtimeType, projectId, householdModel, + individualModel, projectBeneficiaryType); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$HouseholdOverviewDeleteIndividualEventImplCopyWith< + _$HouseholdOverviewDeleteIndividualEventImpl> + get copyWith => + __$$HouseholdOverviewDeleteIndividualEventImplCopyWithImpl< + _$HouseholdOverviewDeleteIndividualEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType) + deleteHousehold, + required TResult Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType) + deleteIndividual, + required TResult Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType) + setAsHead, + required TResult Function(IndividualModel individualModel) + selectedIndividual, + required TResult Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName) + reload, + }) { + return deleteIndividual( + projectId, householdModel, individualModel, projectBeneficiaryType); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType)? + deleteHousehold, + TResult? Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType)? + deleteIndividual, + TResult? Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType)? + setAsHead, + TResult? Function(IndividualModel individualModel)? selectedIndividual, + TResult? Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName)? + reload, + }) { + return deleteIndividual?.call( + projectId, householdModel, individualModel, projectBeneficiaryType); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType)? + deleteHousehold, + TResult Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType)? + deleteIndividual, + TResult Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType)? + setAsHead, + TResult Function(IndividualModel individualModel)? selectedIndividual, + TResult Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName)? + reload, + required TResult orElse(), + }) { + if (deleteIndividual != null) { + return deleteIndividual( + projectId, householdModel, individualModel, projectBeneficiaryType); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(HouseholdOverviewDeleteHouseholdEvent value) + deleteHousehold, + required TResult Function(HouseholdOverviewDeleteIndividualEvent value) + deleteIndividual, + required TResult Function(HouseholdOverviewSetAsHeadEvent value) setAsHead, + required TResult Function(HouseholdOverviewSelectIndividualEvent value) + selectedIndividual, + required TResult Function(HouseholdOverviewReloadEvent value) reload, + }) { + return deleteIndividual(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(HouseholdOverviewDeleteHouseholdEvent value)? + deleteHousehold, + TResult? Function(HouseholdOverviewDeleteIndividualEvent value)? + deleteIndividual, + TResult? Function(HouseholdOverviewSetAsHeadEvent value)? setAsHead, + TResult? Function(HouseholdOverviewSelectIndividualEvent value)? + selectedIndividual, + TResult? Function(HouseholdOverviewReloadEvent value)? reload, + }) { + return deleteIndividual?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(HouseholdOverviewDeleteHouseholdEvent value)? + deleteHousehold, + TResult Function(HouseholdOverviewDeleteIndividualEvent value)? + deleteIndividual, + TResult Function(HouseholdOverviewSetAsHeadEvent value)? setAsHead, + TResult Function(HouseholdOverviewSelectIndividualEvent value)? + selectedIndividual, + TResult Function(HouseholdOverviewReloadEvent value)? reload, + required TResult orElse(), + }) { + if (deleteIndividual != null) { + return deleteIndividual(this); + } + return orElse(); + } +} + +abstract class HouseholdOverviewDeleteIndividualEvent + implements HouseholdOverviewEvent { + const factory HouseholdOverviewDeleteIndividualEvent( + {required final String projectId, + required final HouseholdModel householdModel, + required final IndividualModel individualModel, + required final BeneficiaryType projectBeneficiaryType}) = + _$HouseholdOverviewDeleteIndividualEventImpl; + + String get projectId; + HouseholdModel get householdModel; + IndividualModel get individualModel; + BeneficiaryType get projectBeneficiaryType; + @JsonKey(ignore: true) + _$$HouseholdOverviewDeleteIndividualEventImplCopyWith< + _$HouseholdOverviewDeleteIndividualEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$HouseholdOverviewSetAsHeadEventImplCopyWith<$Res> { + factory _$$HouseholdOverviewSetAsHeadEventImplCopyWith( + _$HouseholdOverviewSetAsHeadEventImpl value, + $Res Function(_$HouseholdOverviewSetAsHeadEventImpl) then) = + __$$HouseholdOverviewSetAsHeadEventImplCopyWithImpl<$Res>; + @useResult + $Res call( + {String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType}); +} + +/// @nodoc +class __$$HouseholdOverviewSetAsHeadEventImplCopyWithImpl<$Res> + extends _$HouseholdOverviewEventCopyWithImpl<$Res, + _$HouseholdOverviewSetAsHeadEventImpl> + implements _$$HouseholdOverviewSetAsHeadEventImplCopyWith<$Res> { + __$$HouseholdOverviewSetAsHeadEventImplCopyWithImpl( + _$HouseholdOverviewSetAsHeadEventImpl _value, + $Res Function(_$HouseholdOverviewSetAsHeadEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? projectId = null, + Object? individualModel = null, + Object? householdModel = null, + Object? projectBeneficiaryType = null, + }) { + return _then(_$HouseholdOverviewSetAsHeadEventImpl( + projectId: null == projectId + ? _value.projectId + : projectId // ignore: cast_nullable_to_non_nullable + as String, + individualModel: null == individualModel + ? _value.individualModel + : individualModel // ignore: cast_nullable_to_non_nullable + as IndividualModel, + householdModel: null == householdModel + ? _value.householdModel + : householdModel // ignore: cast_nullable_to_non_nullable + as HouseholdModel, + projectBeneficiaryType: null == projectBeneficiaryType + ? _value.projectBeneficiaryType + : projectBeneficiaryType // ignore: cast_nullable_to_non_nullable + as BeneficiaryType, + )); + } +} + +/// @nodoc + +class _$HouseholdOverviewSetAsHeadEventImpl + implements HouseholdOverviewSetAsHeadEvent { + const _$HouseholdOverviewSetAsHeadEventImpl( + {required this.projectId, + required this.individualModel, + required this.householdModel, + required this.projectBeneficiaryType}); + + @override + final String projectId; + @override + final IndividualModel individualModel; + @override + final HouseholdModel householdModel; + @override + final BeneficiaryType projectBeneficiaryType; + + @override + String toString() { + return 'HouseholdOverviewEvent.setAsHead(projectId: $projectId, individualModel: $individualModel, householdModel: $householdModel, projectBeneficiaryType: $projectBeneficiaryType)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$HouseholdOverviewSetAsHeadEventImpl && + (identical(other.projectId, projectId) || + other.projectId == projectId) && + (identical(other.individualModel, individualModel) || + other.individualModel == individualModel) && + (identical(other.householdModel, householdModel) || + other.householdModel == householdModel) && + (identical(other.projectBeneficiaryType, projectBeneficiaryType) || + other.projectBeneficiaryType == projectBeneficiaryType)); + } + + @override + int get hashCode => Object.hash(runtimeType, projectId, individualModel, + householdModel, projectBeneficiaryType); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$HouseholdOverviewSetAsHeadEventImplCopyWith< + _$HouseholdOverviewSetAsHeadEventImpl> + get copyWith => __$$HouseholdOverviewSetAsHeadEventImplCopyWithImpl< + _$HouseholdOverviewSetAsHeadEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType) + deleteHousehold, + required TResult Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType) + deleteIndividual, + required TResult Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType) + setAsHead, + required TResult Function(IndividualModel individualModel) + selectedIndividual, + required TResult Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName) + reload, + }) { + return setAsHead( + projectId, individualModel, householdModel, projectBeneficiaryType); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType)? + deleteHousehold, + TResult? Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType)? + deleteIndividual, + TResult? Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType)? + setAsHead, + TResult? Function(IndividualModel individualModel)? selectedIndividual, + TResult? Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName)? + reload, + }) { + return setAsHead?.call( + projectId, individualModel, householdModel, projectBeneficiaryType); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType)? + deleteHousehold, + TResult Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType)? + deleteIndividual, + TResult Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType)? + setAsHead, + TResult Function(IndividualModel individualModel)? selectedIndividual, + TResult Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName)? + reload, + required TResult orElse(), + }) { + if (setAsHead != null) { + return setAsHead( + projectId, individualModel, householdModel, projectBeneficiaryType); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(HouseholdOverviewDeleteHouseholdEvent value) + deleteHousehold, + required TResult Function(HouseholdOverviewDeleteIndividualEvent value) + deleteIndividual, + required TResult Function(HouseholdOverviewSetAsHeadEvent value) setAsHead, + required TResult Function(HouseholdOverviewSelectIndividualEvent value) + selectedIndividual, + required TResult Function(HouseholdOverviewReloadEvent value) reload, + }) { + return setAsHead(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(HouseholdOverviewDeleteHouseholdEvent value)? + deleteHousehold, + TResult? Function(HouseholdOverviewDeleteIndividualEvent value)? + deleteIndividual, + TResult? Function(HouseholdOverviewSetAsHeadEvent value)? setAsHead, + TResult? Function(HouseholdOverviewSelectIndividualEvent value)? + selectedIndividual, + TResult? Function(HouseholdOverviewReloadEvent value)? reload, + }) { + return setAsHead?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(HouseholdOverviewDeleteHouseholdEvent value)? + deleteHousehold, + TResult Function(HouseholdOverviewDeleteIndividualEvent value)? + deleteIndividual, + TResult Function(HouseholdOverviewSetAsHeadEvent value)? setAsHead, + TResult Function(HouseholdOverviewSelectIndividualEvent value)? + selectedIndividual, + TResult Function(HouseholdOverviewReloadEvent value)? reload, + required TResult orElse(), + }) { + if (setAsHead != null) { + return setAsHead(this); + } + return orElse(); + } +} + +abstract class HouseholdOverviewSetAsHeadEvent + implements HouseholdOverviewEvent { + const factory HouseholdOverviewSetAsHeadEvent( + {required final String projectId, + required final IndividualModel individualModel, + required final HouseholdModel householdModel, + required final BeneficiaryType projectBeneficiaryType}) = + _$HouseholdOverviewSetAsHeadEventImpl; + + String get projectId; + IndividualModel get individualModel; + HouseholdModel get householdModel; + BeneficiaryType get projectBeneficiaryType; + @JsonKey(ignore: true) + _$$HouseholdOverviewSetAsHeadEventImplCopyWith< + _$HouseholdOverviewSetAsHeadEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$HouseholdOverviewSelectIndividualEventImplCopyWith<$Res> { + factory _$$HouseholdOverviewSelectIndividualEventImplCopyWith( + _$HouseholdOverviewSelectIndividualEventImpl value, + $Res Function(_$HouseholdOverviewSelectIndividualEventImpl) then) = + __$$HouseholdOverviewSelectIndividualEventImplCopyWithImpl<$Res>; + @useResult + $Res call({IndividualModel individualModel}); +} + +/// @nodoc +class __$$HouseholdOverviewSelectIndividualEventImplCopyWithImpl<$Res> + extends _$HouseholdOverviewEventCopyWithImpl<$Res, + _$HouseholdOverviewSelectIndividualEventImpl> + implements _$$HouseholdOverviewSelectIndividualEventImplCopyWith<$Res> { + __$$HouseholdOverviewSelectIndividualEventImplCopyWithImpl( + _$HouseholdOverviewSelectIndividualEventImpl _value, + $Res Function(_$HouseholdOverviewSelectIndividualEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? individualModel = null, + }) { + return _then(_$HouseholdOverviewSelectIndividualEventImpl( + individualModel: null == individualModel + ? _value.individualModel + : individualModel // ignore: cast_nullable_to_non_nullable + as IndividualModel, + )); + } +} + +/// @nodoc + +class _$HouseholdOverviewSelectIndividualEventImpl + implements HouseholdOverviewSelectIndividualEvent { + const _$HouseholdOverviewSelectIndividualEventImpl( + {required this.individualModel}); + + @override + final IndividualModel individualModel; + + @override + String toString() { + return 'HouseholdOverviewEvent.selectedIndividual(individualModel: $individualModel)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$HouseholdOverviewSelectIndividualEventImpl && + (identical(other.individualModel, individualModel) || + other.individualModel == individualModel)); + } + + @override + int get hashCode => Object.hash(runtimeType, individualModel); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$HouseholdOverviewSelectIndividualEventImplCopyWith< + _$HouseholdOverviewSelectIndividualEventImpl> + get copyWith => + __$$HouseholdOverviewSelectIndividualEventImplCopyWithImpl< + _$HouseholdOverviewSelectIndividualEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType) + deleteHousehold, + required TResult Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType) + deleteIndividual, + required TResult Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType) + setAsHead, + required TResult Function(IndividualModel individualModel) + selectedIndividual, + required TResult Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName) + reload, + }) { + return selectedIndividual(individualModel); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType)? + deleteHousehold, + TResult? Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType)? + deleteIndividual, + TResult? Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType)? + setAsHead, + TResult? Function(IndividualModel individualModel)? selectedIndividual, + TResult? Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName)? + reload, + }) { + return selectedIndividual?.call(individualModel); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType)? + deleteHousehold, + TResult Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType)? + deleteIndividual, + TResult Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType)? + setAsHead, + TResult Function(IndividualModel individualModel)? selectedIndividual, + TResult Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName)? + reload, + required TResult orElse(), + }) { + if (selectedIndividual != null) { + return selectedIndividual(individualModel); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(HouseholdOverviewDeleteHouseholdEvent value) + deleteHousehold, + required TResult Function(HouseholdOverviewDeleteIndividualEvent value) + deleteIndividual, + required TResult Function(HouseholdOverviewSetAsHeadEvent value) setAsHead, + required TResult Function(HouseholdOverviewSelectIndividualEvent value) + selectedIndividual, + required TResult Function(HouseholdOverviewReloadEvent value) reload, + }) { + return selectedIndividual(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(HouseholdOverviewDeleteHouseholdEvent value)? + deleteHousehold, + TResult? Function(HouseholdOverviewDeleteIndividualEvent value)? + deleteIndividual, + TResult? Function(HouseholdOverviewSetAsHeadEvent value)? setAsHead, + TResult? Function(HouseholdOverviewSelectIndividualEvent value)? + selectedIndividual, + TResult? Function(HouseholdOverviewReloadEvent value)? reload, + }) { + return selectedIndividual?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(HouseholdOverviewDeleteHouseholdEvent value)? + deleteHousehold, + TResult Function(HouseholdOverviewDeleteIndividualEvent value)? + deleteIndividual, + TResult Function(HouseholdOverviewSetAsHeadEvent value)? setAsHead, + TResult Function(HouseholdOverviewSelectIndividualEvent value)? + selectedIndividual, + TResult Function(HouseholdOverviewReloadEvent value)? reload, + required TResult orElse(), + }) { + if (selectedIndividual != null) { + return selectedIndividual(this); + } + return orElse(); + } +} + +abstract class HouseholdOverviewSelectIndividualEvent + implements HouseholdOverviewEvent { + const factory HouseholdOverviewSelectIndividualEvent( + {required final IndividualModel individualModel}) = + _$HouseholdOverviewSelectIndividualEventImpl; + + IndividualModel get individualModel; + @JsonKey(ignore: true) + _$$HouseholdOverviewSelectIndividualEventImplCopyWith< + _$HouseholdOverviewSelectIndividualEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$HouseholdOverviewReloadEventImplCopyWith<$Res> { + factory _$$HouseholdOverviewReloadEventImplCopyWith( + _$HouseholdOverviewReloadEventImpl value, + $Res Function(_$HouseholdOverviewReloadEventImpl) then) = + __$$HouseholdOverviewReloadEventImplCopyWithImpl<$Res>; + @useResult + $Res call( + {String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName}); +} + +/// @nodoc +class __$$HouseholdOverviewReloadEventImplCopyWithImpl<$Res> + extends _$HouseholdOverviewEventCopyWithImpl<$Res, + _$HouseholdOverviewReloadEventImpl> + implements _$$HouseholdOverviewReloadEventImplCopyWith<$Res> { + __$$HouseholdOverviewReloadEventImplCopyWithImpl( + _$HouseholdOverviewReloadEventImpl _value, + $Res Function(_$HouseholdOverviewReloadEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? projectId = null, + Object? projectBeneficiaryType = null, + Object? offset = freezed, + Object? limit = freezed, + Object? selectedFilter = freezed, + Object? searchByName = freezed, + }) { + return _then(_$HouseholdOverviewReloadEventImpl( + projectId: null == projectId + ? _value.projectId + : projectId // ignore: cast_nullable_to_non_nullable + as String, + projectBeneficiaryType: null == projectBeneficiaryType + ? _value.projectBeneficiaryType + : projectBeneficiaryType // ignore: cast_nullable_to_non_nullable + as BeneficiaryType, + offset: freezed == offset + ? _value.offset + : offset // ignore: cast_nullable_to_non_nullable + as int?, + limit: freezed == limit + ? _value.limit + : limit // ignore: cast_nullable_to_non_nullable + as int?, + selectedFilter: freezed == selectedFilter + ? _value._selectedFilter + : selectedFilter // ignore: cast_nullable_to_non_nullable + as List?, + searchByName: freezed == searchByName + ? _value.searchByName + : searchByName // ignore: cast_nullable_to_non_nullable + as String?, + )); + } +} + +/// @nodoc + +class _$HouseholdOverviewReloadEventImpl + implements HouseholdOverviewReloadEvent { + const _$HouseholdOverviewReloadEventImpl( + {required this.projectId, + required this.projectBeneficiaryType, + this.offset, + this.limit, + final List? selectedFilter, + this.searchByName}) + : _selectedFilter = selectedFilter; + + @override + final String projectId; + @override + final BeneficiaryType projectBeneficiaryType; + @override + final int? offset; + @override + final int? limit; + final List? _selectedFilter; + @override + List? get selectedFilter { + final value = _selectedFilter; + if (value == null) return null; + if (_selectedFilter is EqualUnmodifiableListView) return _selectedFilter; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + final String? searchByName; + + @override + String toString() { + return 'HouseholdOverviewEvent.reload(projectId: $projectId, projectBeneficiaryType: $projectBeneficiaryType, offset: $offset, limit: $limit, selectedFilter: $selectedFilter, searchByName: $searchByName)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$HouseholdOverviewReloadEventImpl && + (identical(other.projectId, projectId) || + other.projectId == projectId) && + (identical(other.projectBeneficiaryType, projectBeneficiaryType) || + other.projectBeneficiaryType == projectBeneficiaryType) && + (identical(other.offset, offset) || other.offset == offset) && + (identical(other.limit, limit) || other.limit == limit) && + const DeepCollectionEquality() + .equals(other._selectedFilter, _selectedFilter) && + (identical(other.searchByName, searchByName) || + other.searchByName == searchByName)); + } + + @override + int get hashCode => Object.hash( + runtimeType, + projectId, + projectBeneficiaryType, + offset, + limit, + const DeepCollectionEquality().hash(_selectedFilter), + searchByName); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$HouseholdOverviewReloadEventImplCopyWith< + _$HouseholdOverviewReloadEventImpl> + get copyWith => __$$HouseholdOverviewReloadEventImplCopyWithImpl< + _$HouseholdOverviewReloadEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType) + deleteHousehold, + required TResult Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType) + deleteIndividual, + required TResult Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType) + setAsHead, + required TResult Function(IndividualModel individualModel) + selectedIndividual, + required TResult Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName) + reload, + }) { + return reload(projectId, projectBeneficiaryType, offset, limit, + selectedFilter, searchByName); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType)? + deleteHousehold, + TResult? Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType)? + deleteIndividual, + TResult? Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType)? + setAsHead, + TResult? Function(IndividualModel individualModel)? selectedIndividual, + TResult? Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName)? + reload, + }) { + return reload?.call(projectId, projectBeneficiaryType, offset, limit, + selectedFilter, searchByName); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function( + String projectId, + HouseholdModel householdModel, + List members, + ProjectBeneficiaryModel projectBeneficiaryModel, + BeneficiaryType projectBeneficiaryType)? + deleteHousehold, + TResult Function( + String projectId, + HouseholdModel householdModel, + IndividualModel individualModel, + BeneficiaryType projectBeneficiaryType)? + deleteIndividual, + TResult Function( + String projectId, + IndividualModel individualModel, + HouseholdModel householdModel, + BeneficiaryType projectBeneficiaryType)? + setAsHead, + TResult Function(IndividualModel individualModel)? selectedIndividual, + TResult Function( + String projectId, + BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName)? + reload, + required TResult orElse(), + }) { + if (reload != null) { + return reload(projectId, projectBeneficiaryType, offset, limit, + selectedFilter, searchByName); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(HouseholdOverviewDeleteHouseholdEvent value) + deleteHousehold, + required TResult Function(HouseholdOverviewDeleteIndividualEvent value) + deleteIndividual, + required TResult Function(HouseholdOverviewSetAsHeadEvent value) setAsHead, + required TResult Function(HouseholdOverviewSelectIndividualEvent value) + selectedIndividual, + required TResult Function(HouseholdOverviewReloadEvent value) reload, + }) { + return reload(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(HouseholdOverviewDeleteHouseholdEvent value)? + deleteHousehold, + TResult? Function(HouseholdOverviewDeleteIndividualEvent value)? + deleteIndividual, + TResult? Function(HouseholdOverviewSetAsHeadEvent value)? setAsHead, + TResult? Function(HouseholdOverviewSelectIndividualEvent value)? + selectedIndividual, + TResult? Function(HouseholdOverviewReloadEvent value)? reload, + }) { + return reload?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(HouseholdOverviewDeleteHouseholdEvent value)? + deleteHousehold, + TResult Function(HouseholdOverviewDeleteIndividualEvent value)? + deleteIndividual, + TResult Function(HouseholdOverviewSetAsHeadEvent value)? setAsHead, + TResult Function(HouseholdOverviewSelectIndividualEvent value)? + selectedIndividual, + TResult Function(HouseholdOverviewReloadEvent value)? reload, + required TResult orElse(), + }) { + if (reload != null) { + return reload(this); + } + return orElse(); + } +} + +abstract class HouseholdOverviewReloadEvent implements HouseholdOverviewEvent { + const factory HouseholdOverviewReloadEvent( + {required final String projectId, + required final BeneficiaryType projectBeneficiaryType, + final int? offset, + final int? limit, + final List? selectedFilter, + final String? searchByName}) = _$HouseholdOverviewReloadEventImpl; + + String get projectId; + BeneficiaryType get projectBeneficiaryType; + int? get offset; + int? get limit; + List? get selectedFilter; + String? get searchByName; + @JsonKey(ignore: true) + _$$HouseholdOverviewReloadEventImplCopyWith< + _$HouseholdOverviewReloadEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +mixin _$HouseholdOverviewDeliveryState { + bool get loading => throw _privateConstructorUsedError; + HouseholdMemberDeliveryWrapper get householdMemberDeliveryWrapper => + throw _privateConstructorUsedError; + IndividualModel? get selectedIndividual => throw _privateConstructorUsedError; + int? get offset => throw _privateConstructorUsedError; + int? get limit => throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $HouseholdOverviewDeliveryStateCopyWith + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $HouseholdOverviewDeliveryStateCopyWith<$Res> { + factory $HouseholdOverviewDeliveryStateCopyWith( + HouseholdOverviewDeliveryState value, + $Res Function(HouseholdOverviewDeliveryState) then) = + _$HouseholdOverviewDeliveryStateCopyWithImpl<$Res, + HouseholdOverviewDeliveryState>; + @useResult + $Res call( + {bool loading, + HouseholdMemberDeliveryWrapper householdMemberDeliveryWrapper, + IndividualModel? selectedIndividual, + int? offset, + int? limit}); + + $HouseholdMemberDeliveryWrapperCopyWith<$Res> + get householdMemberDeliveryWrapper; +} + +/// @nodoc +class _$HouseholdOverviewDeliveryStateCopyWithImpl<$Res, + $Val extends HouseholdOverviewDeliveryState> + implements $HouseholdOverviewDeliveryStateCopyWith<$Res> { + _$HouseholdOverviewDeliveryStateCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? loading = null, + Object? householdMemberDeliveryWrapper = null, + Object? selectedIndividual = freezed, + Object? offset = freezed, + Object? limit = freezed, + }) { + return _then(_value.copyWith( + loading: null == loading + ? _value.loading + : loading // ignore: cast_nullable_to_non_nullable + as bool, + householdMemberDeliveryWrapper: null == householdMemberDeliveryWrapper + ? _value.householdMemberDeliveryWrapper + : householdMemberDeliveryWrapper // ignore: cast_nullable_to_non_nullable + as HouseholdMemberDeliveryWrapper, + selectedIndividual: freezed == selectedIndividual + ? _value.selectedIndividual + : selectedIndividual // ignore: cast_nullable_to_non_nullable + as IndividualModel?, + offset: freezed == offset + ? _value.offset + : offset // ignore: cast_nullable_to_non_nullable + as int?, + limit: freezed == limit + ? _value.limit + : limit // ignore: cast_nullable_to_non_nullable + as int?, + ) as $Val); + } + + @override + @pragma('vm:prefer-inline') + $HouseholdMemberDeliveryWrapperCopyWith<$Res> + get householdMemberDeliveryWrapper { + return $HouseholdMemberDeliveryWrapperCopyWith<$Res>( + _value.householdMemberDeliveryWrapper, (value) { + return _then( + _value.copyWith(householdMemberDeliveryWrapper: value) as $Val); + }); + } +} + +/// @nodoc +abstract class _$$HouseholdOverviewDeliveryStateImplCopyWith<$Res> + implements $HouseholdOverviewDeliveryStateCopyWith<$Res> { + factory _$$HouseholdOverviewDeliveryStateImplCopyWith( + _$HouseholdOverviewDeliveryStateImpl value, + $Res Function(_$HouseholdOverviewDeliveryStateImpl) then) = + __$$HouseholdOverviewDeliveryStateImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {bool loading, + HouseholdMemberDeliveryWrapper householdMemberDeliveryWrapper, + IndividualModel? selectedIndividual, + int? offset, + int? limit}); + + @override + $HouseholdMemberDeliveryWrapperCopyWith<$Res> + get householdMemberDeliveryWrapper; +} + +/// @nodoc +class __$$HouseholdOverviewDeliveryStateImplCopyWithImpl<$Res> + extends _$HouseholdOverviewDeliveryStateCopyWithImpl<$Res, + _$HouseholdOverviewDeliveryStateImpl> + implements _$$HouseholdOverviewDeliveryStateImplCopyWith<$Res> { + __$$HouseholdOverviewDeliveryStateImplCopyWithImpl( + _$HouseholdOverviewDeliveryStateImpl _value, + $Res Function(_$HouseholdOverviewDeliveryStateImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? loading = null, + Object? householdMemberDeliveryWrapper = null, + Object? selectedIndividual = freezed, + Object? offset = freezed, + Object? limit = freezed, + }) { + return _then(_$HouseholdOverviewDeliveryStateImpl( + loading: null == loading + ? _value.loading + : loading // ignore: cast_nullable_to_non_nullable + as bool, + householdMemberDeliveryWrapper: null == householdMemberDeliveryWrapper + ? _value.householdMemberDeliveryWrapper + : householdMemberDeliveryWrapper // ignore: cast_nullable_to_non_nullable + as HouseholdMemberDeliveryWrapper, + selectedIndividual: freezed == selectedIndividual + ? _value.selectedIndividual + : selectedIndividual // ignore: cast_nullable_to_non_nullable + as IndividualModel?, + offset: freezed == offset + ? _value.offset + : offset // ignore: cast_nullable_to_non_nullable + as int?, + limit: freezed == limit + ? _value.limit + : limit // ignore: cast_nullable_to_non_nullable + as int?, + )); + } +} + +/// @nodoc + +class _$HouseholdOverviewDeliveryStateImpl + implements _HouseholdOverviewDeliveryState { + const _$HouseholdOverviewDeliveryStateImpl( + {this.loading = false, + required this.householdMemberDeliveryWrapper, + this.selectedIndividual, + this.offset, + this.limit}); + + @override + @JsonKey() + final bool loading; + @override + final HouseholdMemberDeliveryWrapper householdMemberDeliveryWrapper; + @override + final IndividualModel? selectedIndividual; + @override + final int? offset; + @override + final int? limit; + + @override + String toString() { + return 'HouseholdOverviewDeliveryState(loading: $loading, householdMemberDeliveryWrapper: $householdMemberDeliveryWrapper, selectedIndividual: $selectedIndividual, offset: $offset, limit: $limit)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$HouseholdOverviewDeliveryStateImpl && + (identical(other.loading, loading) || other.loading == loading) && + (identical(other.householdMemberDeliveryWrapper, + householdMemberDeliveryWrapper) || + other.householdMemberDeliveryWrapper == + householdMemberDeliveryWrapper) && + (identical(other.selectedIndividual, selectedIndividual) || + other.selectedIndividual == selectedIndividual) && + (identical(other.offset, offset) || other.offset == offset) && + (identical(other.limit, limit) || other.limit == limit)); + } + + @override + int get hashCode => Object.hash(runtimeType, loading, + householdMemberDeliveryWrapper, selectedIndividual, offset, limit); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$HouseholdOverviewDeliveryStateImplCopyWith< + _$HouseholdOverviewDeliveryStateImpl> + get copyWith => __$$HouseholdOverviewDeliveryStateImplCopyWithImpl< + _$HouseholdOverviewDeliveryStateImpl>(this, _$identity); +} + +abstract class _HouseholdOverviewDeliveryState + implements HouseholdOverviewDeliveryState { + const factory _HouseholdOverviewDeliveryState( + {final bool loading, + required final HouseholdMemberDeliveryWrapper + householdMemberDeliveryWrapper, + final IndividualModel? selectedIndividual, + final int? offset, + final int? limit}) = _$HouseholdOverviewDeliveryStateImpl; + + @override + bool get loading; + @override + HouseholdMemberDeliveryWrapper get householdMemberDeliveryWrapper; + @override + IndividualModel? get selectedIndividual; + @override + int? get offset; + @override + int? get limit; + @override + @JsonKey(ignore: true) + _$$HouseholdOverviewDeliveryStateImplCopyWith< + _$HouseholdOverviewDeliveryStateImpl> + get copyWith => throw _privateConstructorUsedError; +} diff --git a/packages/registration_delivery/lib/blocs/referral_management/referral_management.dart b/packages/delivery/lib/blocs/referral_management/referral_management.dart similarity index 96% rename from packages/registration_delivery/lib/blocs/referral_management/referral_management.dart rename to packages/delivery/lib/blocs/referral_management/referral_management.dart index 920a34f7c9..7f5eb0bd11 100644 --- a/packages/registration_delivery/lib/blocs/referral_management/referral_management.dart +++ b/packages/delivery/lib/blocs/referral_management/referral_management.dart @@ -1,9 +1,9 @@ import 'dart:async'; +import 'package:delivery/models/entities/referral.dart'; import 'package:digit_data_model/data/data_repository.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:registration_delivery/models/entities/referral.dart'; part 'referral_management.freezed.dart'; diff --git a/packages/registration_delivery/lib/blocs/referral_management/referral_management.freezed.dart b/packages/delivery/lib/blocs/referral_management/referral_management.freezed.dart similarity index 100% rename from packages/registration_delivery/lib/blocs/referral_management/referral_management.freezed.dart rename to packages/delivery/lib/blocs/referral_management/referral_management.freezed.dart diff --git a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart b/packages/delivery/lib/blocs/search_households/household_global_search.dart similarity index 92% rename from packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart rename to packages/delivery/lib/blocs/search_households/household_global_search.dart index 042c89bd52..9fdefc52d4 100644 --- a/packages/registration_delivery/lib/blocs/search_households/household_global_seach.dart +++ b/packages/delivery/lib/blocs/search_households/household_global_search.dart @@ -2,20 +2,20 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:digit_data_model/models/entities/individual.dart'; -import 'package:registration_delivery/blocs/search_households/search_households.dart'; -import 'package:registration_delivery/utils/utils.dart'; +import 'package:delivery/blocs/search_households/search_households.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; +import 'package:registration/utils/global_search_parameters.dart'; -import '../../models/entities/household.dart'; -import '../../models/entities/household_member.dart'; -import '../../models/entities/project_beneficiary.dart'; import '../../models/entities/referral.dart'; import '../../models/entities/side_effect.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; -import '../../utils/global_search_parameters.dart'; +import '../../utils/utils.dart'; -class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { - HouseHoldGlobalSearchBloc({ +class HouseHoldGlobalDeliverySearchBloc extends SearchHouseholdsDeliveryBloc { + HouseHoldGlobalDeliverySearchBloc({ required super.userUid, required super.projectId, required super.individual, @@ -27,7 +27,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { required super.sideEffectDataRepository, required super.addressRepository, required super.referralDataRepository, - required super.individualGlobalSearchRepository, + required super.individualGlobalDeliverySearchRepository, required super.houseHoldGlobalSearchRepository, }) { on(_houseHoldGlobalSearch); @@ -37,7 +37,9 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { HouseHoldGlobalSearchEvent event, SearchHouseholdsEmitter emit, ) async { - final containers = [...state.householdMembers]; + final containers = [ + ...state.householdMembers + ]; List householdList = []; List individualsList = []; @@ -95,7 +97,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { projectBeneficiariesList = await projectBeneficiary.search( ProjectBeneficiarySearchModel( - projectId: [RegistrationDeliverySingleton().projectId.toString()], + projectId: [DeliverySingleton().projectId.toString()], beneficiaryClientReferenceId: houseHoldClientReferenceIds.map((e) => e).toList())); @@ -128,7 +130,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { projectBeneficiariesList = await projectBeneficiary.search( ProjectBeneficiarySearchModel( - projectId: [RegistrationDeliverySingleton().projectId.toString()], + projectId: [DeliverySingleton().projectId.toString()], clientReferenceId: listOfBeneficiaries)); late List listOfMembers = []; @@ -209,7 +211,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { projectBeneficiariesList = await projectBeneficiary.search( ProjectBeneficiarySearchModel( - projectId: [RegistrationDeliverySingleton().projectId.toString()], + projectId: [DeliverySingleton().projectId.toString()], beneficiaryClientReferenceId: houseHoldClientReferenceIds.map((e) => e).toList())); @@ -252,7 +254,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { List taskList, List sideEffectsList, List referralsList, - List containers, + List containers, ) async { final groupedHouseholdsMembers = householdMembersList .groupListsBy((element) => element.householdClientReferenceId); @@ -310,7 +312,7 @@ class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { // Add household member wrapper to containers containers.add( - HouseholdMemberWrapper( + HouseholdMemberDeliveryWrapper( household: filteredHousehold, headOfHousehold: head, members: filteredIndividuals, diff --git a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart b/packages/delivery/lib/blocs/search_households/individual_global_search.dart similarity index 92% rename from packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart rename to packages/delivery/lib/blocs/search_households/individual_global_search.dart index e0894073ce..47a48f7ee6 100644 --- a/packages/registration_delivery/lib/blocs/search_households/individual_global_search.dart +++ b/packages/delivery/lib/blocs/search_households/individual_global_search.dart @@ -2,20 +2,20 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:digit_data_model/models/entities/individual.dart'; -import 'package:registration_delivery/blocs/search_households/search_households.dart'; +import 'package:delivery/blocs/search_households/search_households.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; +import 'package:registration/utils/global_search_parameters.dart'; -import '../../models/entities/household.dart'; -import '../../models/entities/household_member.dart'; -import '../../models/entities/project_beneficiary.dart'; import '../../models/entities/referral.dart'; import '../../models/entities/side_effect.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; -import '../../utils/global_search_parameters.dart'; import '../../utils/utils.dart'; -class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { - IndividualGlobalSearchBloc( +class IndividualGlobalDeliverySearchBloc extends SearchHouseholdsDeliveryBloc { + IndividualGlobalDeliverySearchBloc( {required super.userUid, required super.projectId, required super.individual, @@ -27,7 +27,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { required super.sideEffectDataRepository, required super.addressRepository, required super.referralDataRepository, - required super.individualGlobalSearchRepository, + required super.individualGlobalDeliverySearchRepository, required super.houseHoldGlobalSearchRepository}) { on(_individualGlobalSearch); } @@ -36,7 +36,9 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { IndividualGlobalSearchEvent event, SearchHouseholdsEmitter emit, ) async { - final containers = [...state.householdMembers]; + final containers = [ + ...state.householdMembers + ]; List householdList = []; List individualsList = []; @@ -49,7 +51,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { emit(state.copyWith(loading: true)); final results = - await individualGlobalSearchRepository.individualGlobalSearch( + await individualGlobalDeliverySearchRepository.individualGlobalSearch( GlobalSearchParameters( projectId: event.globalSearchParams.projectId, isProximityEnabled: event.globalSearchParams.isProximityEnabled, @@ -105,7 +107,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { projectBeneficiariesList = await projectBeneficiary.search( ProjectBeneficiarySearchModel( - projectId: [RegistrationDeliverySingleton().projectId.toString()], + projectId: [DeliverySingleton().projectId.toString()], beneficiaryClientReferenceId: individualsList.map((e) => e.clientReferenceId).toList())); @@ -136,7 +138,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { projectBeneficiariesList = await projectBeneficiary.search( ProjectBeneficiarySearchModel( - projectId: [RegistrationDeliverySingleton().projectId.toString()], + projectId: [DeliverySingleton().projectId.toString()], clientReferenceId: listOfBeneficiaries)); late List listOfMembers = []; @@ -178,7 +180,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { projectBeneficiariesList = await projectBeneficiary.search( ProjectBeneficiarySearchModel( - projectId: [RegistrationDeliverySingleton().projectId.toString()], + projectId: [DeliverySingleton().projectId.toString()], beneficiaryClientReferenceId: individualsList.map((e) => e.clientReferenceId).toList())); @@ -238,7 +240,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { projectBeneficiariesList = await projectBeneficiary.search( ProjectBeneficiarySearchModel( - projectId: [RegistrationDeliverySingleton().projectId.toString()], + projectId: [DeliverySingleton().projectId.toString()], beneficiaryClientReferenceId: individualsList.map((e) => e.clientReferenceId).toList())); @@ -279,7 +281,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { List taskList, List sideEffectsList, List referralsList, - List containers) async { + List containers) async { // Group household members by household client reference ID final groupedHouseholdsMembers = householdMembers .groupListsBy((element) => element.householdClientReferenceId); @@ -336,7 +338,7 @@ class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { // Add household member wrapper to containers containers.add( - HouseholdMemberWrapper( + HouseholdMemberDeliveryWrapper( household: filteredHousehold, headOfHousehold: head, members: filteredIndividuals, diff --git a/packages/delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart b/packages/delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart new file mode 100644 index 0000000000..1cca968082 --- /dev/null +++ b/packages/delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart @@ -0,0 +1,70 @@ +import 'dart:async'; + +import 'package:async/async.dart'; +import 'package:delivery/blocs/search_households/household_global_search.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:delivery/blocs/search_households/individual_global_search.dart'; + +import 'tag_by_search.dart'; +import 'search_households.dart'; + +class SearchBlocDeliveryWrapper implements StateStreamableSource { + final SearchHouseholdsDeliveryBloc searchHouseholdsBloc; + final TagSearchDeliveryBloc tagSearchBloc; + final IndividualGlobalDeliverySearchBloc individualGlobalSearchBloc; + final HouseHoldGlobalDeliverySearchBloc houseHoldGlobalSearchBloc; + + SearchBlocDeliveryWrapper( + {required this.searchHouseholdsBloc, + required this.tagSearchBloc, + required this.individualGlobalSearchBloc, + required this.houseHoldGlobalSearchBloc}); + + Stream get stateChanges => + StreamGroup.merge([ + searchHouseholdsBloc.stream, + individualGlobalSearchBloc.stream, + tagSearchBloc.stream, + houseHoldGlobalSearchBloc.stream, + ]); + + void dispatch(SearchHouseholdsEvent event) { + if (event is IndividualGlobalSearchEvent) { + individualGlobalSearchBloc.add(event); + } else if (event is HouseHoldGlobalSearchEvent) { + houseHoldGlobalSearchBloc.add(event); + } else if (event is SearchHouseholdsByTagEvent) { + tagSearchBloc.add(event); + } else { + searchHouseholdsBloc.add(event); + } + } + + void clearEvent() { + individualGlobalSearchBloc.add(const SearchHouseholdsEvent.clear()); + tagSearchBloc.add(const SearchHouseholdsEvent.clear()); + searchHouseholdsBloc.add(const SearchHouseholdsEvent.clear()); + houseHoldGlobalSearchBloc.add(const SearchHouseholdsEvent.clear()); + } + + @override + SearchHouseholdsState get state => searchHouseholdsBloc.state; + + @override + Stream get stream => stateChanges; + + @override + FutureOr close() { + searchHouseholdsBloc.close(); + individualGlobalSearchBloc.close(); + houseHoldGlobalSearchBloc.close(); + tagSearchBloc.close(); + } + + @override + bool get isClosed => + searchHouseholdsBloc.isClosed && + individualGlobalSearchBloc.isClosed && + houseHoldGlobalSearchBloc.isClosed && + tagSearchBloc.isClosed; +} diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.dart b/packages/delivery/lib/blocs/search_households/search_households.dart similarity index 88% rename from packages/registration_delivery/lib/blocs/search_households/search_households.dart rename to packages/delivery/lib/blocs/search_households/search_households.dart index 852f4d5bf3..b56d070603 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.dart +++ b/packages/delivery/lib/blocs/search_households/search_households.dart @@ -7,19 +7,16 @@ import 'package:digit_data_model/models/entities/household_type.dart'; import 'package:digit_data_model/utils/typedefs.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:registration_delivery/registration_delivery.dart'; +import 'package:delivery/data/repositories/local/household_global_search.dart'; +import 'package:delivery/data/repositories/local/individual_global_search.dart'; +import 'package:registration/registration.dart'; +import 'package:registration/utils/global_search_parameters.dart'; import 'package:stream_transform/stream_transform.dart'; -import '../../data/repositories/local/household_global_search.dart'; -import '../../data/repositories/local/individual_global_search.dart'; -import '../../data/repositories/local/registration_delivery_address.dart'; -import '../../models/entities/household.dart'; -import '../../models/entities/household_member.dart'; -import '../../models/entities/project_beneficiary.dart'; import '../../models/entities/referral.dart'; import '../../models/entities/side_effect.dart'; import '../../models/entities/task.dart'; -import '../../utils/global_search_parameters.dart'; + import '../../utils/typedefs.dart'; part 'search_households.freezed.dart'; @@ -30,7 +27,7 @@ EventTransformer debounce(Duration duration) { return (events, mapper) => events.debounce(duration).switchMap(mapper); } -class SearchHouseholdsBloc +class SearchHouseholdsDeliveryBloc extends Bloc { final BeneficiaryType beneficiaryType; final String projectId; @@ -43,10 +40,11 @@ class SearchHouseholdsBloc final TaskDataRepository taskDataRepository; final SideEffectDataRepository sideEffectDataRepository; final ReferralDataRepository referralDataRepository; - final IndividualGlobalSearchRepository individualGlobalSearchRepository; - final HouseHoldGlobalSearchRepository houseHoldGlobalSearchRepository; + final IndividualGlobalDeliverySearchRepository + individualGlobalDeliverySearchRepository; + final HouseHoldGlobalDeliverySearchRepository houseHoldGlobalSearchRepository; - SearchHouseholdsBloc( + SearchHouseholdsDeliveryBloc( {required this.userUid, required this.projectId, required this.individual, @@ -58,7 +56,7 @@ class SearchHouseholdsBloc required this.sideEffectDataRepository, required this.addressRepository, required this.referralDataRepository, - required this.individualGlobalSearchRepository, + required this.individualGlobalDeliverySearchRepository, required this.houseHoldGlobalSearchRepository}) : super(const SearchHouseholdsState()) { on(_handleClear); @@ -120,7 +118,7 @@ class SearchHouseholdsBloc householdMembers: [], )); } else { - final householdMemberWrapper = HouseholdMemberWrapper( + final householdMemberDeliveryWrapper = HouseholdMemberDeliveryWrapper( household: event.householdModel, headOfHousehold: headOfHousehold, members: individuals, @@ -134,7 +132,7 @@ class SearchHouseholdsBloc state.copyWith( loading: false, householdMembers: [ - householdMemberWrapper, + householdMemberDeliveryWrapper, ], searchQuery: [ headOfHousehold.name?.givenName, @@ -186,10 +184,10 @@ class SearchHouseholdsBloc HouseholdMemberSearchModel( individualClientReferenceIds: individualClientReferenceIds, householdClientReferenceIds: householdClientReferenceIds, - isHeadOfHousehold: RegistrationDeliverySingleton().householdType == - HouseholdType.community - ? true - : null, + isHeadOfHousehold: + RegistrationSingleton().householdType == HouseholdType.community + ? true + : null, ), ); } @@ -290,7 +288,7 @@ class SearchHouseholdsState with _$SearchHouseholdsState { @Default(false) bool loading, String? searchQuery, String? tag, - @Default([]) List householdMembers, + @Default([]) List householdMembers, @Default(0) int totalResults, }) = _SearchHouseholdsState; @@ -304,8 +302,8 @@ class SearchHouseholdsState with _$SearchHouseholdsState { } @freezed -class HouseholdMemberWrapper with _$HouseholdMemberWrapper { - const factory HouseholdMemberWrapper({ +class HouseholdMemberDeliveryWrapper with _$HouseholdMemberDeliveryWrapper { + const factory HouseholdMemberDeliveryWrapper({ HouseholdModel? household, IndividualModel? headOfHousehold, List? members, @@ -314,5 +312,5 @@ class HouseholdMemberWrapper with _$HouseholdMemberWrapper { List? tasks, List? sideEffects, List? referrals, - }) = _HouseholdMemberWrapper; + }) = _HouseholdMemberDeliveryWrapper; } diff --git a/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart b/packages/delivery/lib/blocs/search_households/search_households.freezed.dart similarity index 96% rename from packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart rename to packages/delivery/lib/blocs/search_households/search_households.freezed.dart index a6503ca8b5..e829c5180f 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_households.freezed.dart +++ b/packages/delivery/lib/blocs/search_households/search_households.freezed.dart @@ -2407,7 +2407,7 @@ mixin _$SearchHouseholdsState { bool get loading => throw _privateConstructorUsedError; String? get searchQuery => throw _privateConstructorUsedError; String? get tag => throw _privateConstructorUsedError; - List get householdMembers => + List get householdMembers => throw _privateConstructorUsedError; int get totalResults => throw _privateConstructorUsedError; @@ -2428,7 +2428,7 @@ abstract class $SearchHouseholdsStateCopyWith<$Res> { bool loading, String? searchQuery, String? tag, - List householdMembers, + List householdMembers, int totalResults}); } @@ -2478,7 +2478,7 @@ class _$SearchHouseholdsStateCopyWithImpl<$Res, householdMembers: null == householdMembers ? _value.householdMembers : householdMembers // ignore: cast_nullable_to_non_nullable - as List, + as List, totalResults: null == totalResults ? _value.totalResults : totalResults // ignore: cast_nullable_to_non_nullable @@ -2502,7 +2502,7 @@ abstract class _$$SearchHouseholdsStateImplCopyWith<$Res> bool loading, String? searchQuery, String? tag, - List householdMembers, + List householdMembers, int totalResults}); } @@ -2550,7 +2550,7 @@ class __$$SearchHouseholdsStateImplCopyWithImpl<$Res> householdMembers: null == householdMembers ? _value._householdMembers : householdMembers // ignore: cast_nullable_to_non_nullable - as List, + as List, totalResults: null == totalResults ? _value.totalResults : totalResults // ignore: cast_nullable_to_non_nullable @@ -2568,7 +2568,7 @@ class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { this.loading = false, this.searchQuery, this.tag, - final List householdMembers = const [], + final List householdMembers = const [], this.totalResults = 0}) : _householdMembers = householdMembers, super._(); @@ -2586,10 +2586,10 @@ class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { final String? searchQuery; @override final String? tag; - final List _householdMembers; + final List _householdMembers; @override @JsonKey() - List get householdMembers { + List get householdMembers { if (_householdMembers is EqualUnmodifiableListView) return _householdMembers; // ignore: implicit_dynamic_type @@ -2648,7 +2648,7 @@ abstract class _SearchHouseholdsState extends SearchHouseholdsState { final bool loading, final String? searchQuery, final String? tag, - final List householdMembers, + final List householdMembers, final int totalResults}) = _$SearchHouseholdsStateImpl; const _SearchHouseholdsState._() : super._(); @@ -2663,7 +2663,7 @@ abstract class _SearchHouseholdsState extends SearchHouseholdsState { @override String? get tag; @override - List get householdMembers; + List get householdMembers; @override int get totalResults; @override @@ -2673,7 +2673,7 @@ abstract class _SearchHouseholdsState extends SearchHouseholdsState { } /// @nodoc -mixin _$HouseholdMemberWrapper { +mixin _$HouseholdMemberDeliveryWrapper { HouseholdModel? get household => throw _privateConstructorUsedError; IndividualModel? get headOfHousehold => throw _privateConstructorUsedError; List? get members => throw _privateConstructorUsedError; @@ -2685,15 +2685,17 @@ mixin _$HouseholdMemberWrapper { List? get referrals => throw _privateConstructorUsedError; @JsonKey(ignore: true) - $HouseholdMemberWrapperCopyWith get copyWith => - throw _privateConstructorUsedError; + $HouseholdMemberDeliveryWrapperCopyWith + get copyWith => throw _privateConstructorUsedError; } /// @nodoc -abstract class $HouseholdMemberWrapperCopyWith<$Res> { - factory $HouseholdMemberWrapperCopyWith(HouseholdMemberWrapper value, - $Res Function(HouseholdMemberWrapper) then) = - _$HouseholdMemberWrapperCopyWithImpl<$Res, HouseholdMemberWrapper>; +abstract class $HouseholdMemberDeliveryWrapperCopyWith<$Res> { + factory $HouseholdMemberDeliveryWrapperCopyWith( + HouseholdMemberDeliveryWrapper value, + $Res Function(HouseholdMemberDeliveryWrapper) then) = + _$HouseholdMemberDeliveryWrapperCopyWithImpl<$Res, + HouseholdMemberDeliveryWrapper>; @useResult $Res call( {HouseholdModel? household, @@ -2707,10 +2709,10 @@ abstract class $HouseholdMemberWrapperCopyWith<$Res> { } /// @nodoc -class _$HouseholdMemberWrapperCopyWithImpl<$Res, - $Val extends HouseholdMemberWrapper> - implements $HouseholdMemberWrapperCopyWith<$Res> { - _$HouseholdMemberWrapperCopyWithImpl(this._value, this._then); +class _$HouseholdMemberDeliveryWrapperCopyWithImpl<$Res, + $Val extends HouseholdMemberDeliveryWrapper> + implements $HouseholdMemberDeliveryWrapperCopyWith<$Res> { + _$HouseholdMemberDeliveryWrapperCopyWithImpl(this._value, this._then); // ignore: unused_field final $Val _value; @@ -2767,12 +2769,12 @@ class _$HouseholdMemberWrapperCopyWithImpl<$Res, } /// @nodoc -abstract class _$$HouseholdMemberWrapperImplCopyWith<$Res> - implements $HouseholdMemberWrapperCopyWith<$Res> { - factory _$$HouseholdMemberWrapperImplCopyWith( - _$HouseholdMemberWrapperImpl value, - $Res Function(_$HouseholdMemberWrapperImpl) then) = - __$$HouseholdMemberWrapperImplCopyWithImpl<$Res>; +abstract class _$$HouseholdMemberDeliveryWrapperImplCopyWith<$Res> + implements $HouseholdMemberDeliveryWrapperCopyWith<$Res> { + factory _$$HouseholdMemberDeliveryWrapperImplCopyWith( + _$HouseholdMemberDeliveryWrapperImpl value, + $Res Function(_$HouseholdMemberDeliveryWrapperImpl) then) = + __$$HouseholdMemberDeliveryWrapperImplCopyWithImpl<$Res>; @override @useResult $Res call( @@ -2787,13 +2789,13 @@ abstract class _$$HouseholdMemberWrapperImplCopyWith<$Res> } /// @nodoc -class __$$HouseholdMemberWrapperImplCopyWithImpl<$Res> - extends _$HouseholdMemberWrapperCopyWithImpl<$Res, - _$HouseholdMemberWrapperImpl> - implements _$$HouseholdMemberWrapperImplCopyWith<$Res> { - __$$HouseholdMemberWrapperImplCopyWithImpl( - _$HouseholdMemberWrapperImpl _value, - $Res Function(_$HouseholdMemberWrapperImpl) _then) +class __$$HouseholdMemberDeliveryWrapperImplCopyWithImpl<$Res> + extends _$HouseholdMemberDeliveryWrapperCopyWithImpl<$Res, + _$HouseholdMemberDeliveryWrapperImpl> + implements _$$HouseholdMemberDeliveryWrapperImplCopyWith<$Res> { + __$$HouseholdMemberDeliveryWrapperImplCopyWithImpl( + _$HouseholdMemberDeliveryWrapperImpl _value, + $Res Function(_$HouseholdMemberDeliveryWrapperImpl) _then) : super(_value, _then); @pragma('vm:prefer-inline') @@ -2808,7 +2810,7 @@ class __$$HouseholdMemberWrapperImplCopyWithImpl<$Res> Object? sideEffects = freezed, Object? referrals = freezed, }) { - return _then(_$HouseholdMemberWrapperImpl( + return _then(_$HouseholdMemberDeliveryWrapperImpl( household: freezed == household ? _value.household : household // ignore: cast_nullable_to_non_nullable @@ -2847,8 +2849,9 @@ class __$$HouseholdMemberWrapperImplCopyWithImpl<$Res> /// @nodoc -class _$HouseholdMemberWrapperImpl implements _HouseholdMemberWrapper { - const _$HouseholdMemberWrapperImpl( +class _$HouseholdMemberDeliveryWrapperImpl + implements _HouseholdMemberDeliveryWrapper { + const _$HouseholdMemberDeliveryWrapperImpl( {this.household, this.headOfHousehold, final List? members, @@ -2922,14 +2925,14 @@ class _$HouseholdMemberWrapperImpl implements _HouseholdMemberWrapper { @override String toString() { - return 'HouseholdMemberWrapper(household: $household, headOfHousehold: $headOfHousehold, members: $members, projectBeneficiaries: $projectBeneficiaries, distance: $distance, tasks: $tasks, sideEffects: $sideEffects, referrals: $referrals)'; + return 'HouseholdMemberDeliveryWrapper(household: $household, headOfHousehold: $headOfHousehold, members: $members, projectBeneficiaries: $projectBeneficiaries, distance: $distance, tasks: $tasks, sideEffects: $sideEffects, referrals: $referrals)'; } @override bool operator ==(Object other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$HouseholdMemberWrapperImpl && + other is _$HouseholdMemberDeliveryWrapperImpl && (identical(other.household, household) || other.household == household) && (identical(other.headOfHousehold, headOfHousehold) || @@ -2961,21 +2964,24 @@ class _$HouseholdMemberWrapperImpl implements _HouseholdMemberWrapper { @JsonKey(ignore: true) @override @pragma('vm:prefer-inline') - _$$HouseholdMemberWrapperImplCopyWith<_$HouseholdMemberWrapperImpl> - get copyWith => __$$HouseholdMemberWrapperImplCopyWithImpl< - _$HouseholdMemberWrapperImpl>(this, _$identity); + _$$HouseholdMemberDeliveryWrapperImplCopyWith< + _$HouseholdMemberDeliveryWrapperImpl> + get copyWith => __$$HouseholdMemberDeliveryWrapperImplCopyWithImpl< + _$HouseholdMemberDeliveryWrapperImpl>(this, _$identity); } -abstract class _HouseholdMemberWrapper implements HouseholdMemberWrapper { - const factory _HouseholdMemberWrapper( - {final HouseholdModel? household, - final IndividualModel? headOfHousehold, - final List? members, - final List? projectBeneficiaries, - final double? distance, - final List? tasks, - final List? sideEffects, - final List? referrals}) = _$HouseholdMemberWrapperImpl; +abstract class _HouseholdMemberDeliveryWrapper + implements HouseholdMemberDeliveryWrapper { + const factory _HouseholdMemberDeliveryWrapper( + {final HouseholdModel? household, + final IndividualModel? headOfHousehold, + final List? members, + final List? projectBeneficiaries, + final double? distance, + final List? tasks, + final List? sideEffects, + final List? referrals}) = + _$HouseholdMemberDeliveryWrapperImpl; @override HouseholdModel? get household; @@ -2995,6 +3001,7 @@ abstract class _HouseholdMemberWrapper implements HouseholdMemberWrapper { List? get referrals; @override @JsonKey(ignore: true) - _$$HouseholdMemberWrapperImplCopyWith<_$HouseholdMemberWrapperImpl> + _$$HouseholdMemberDeliveryWrapperImplCopyWith< + _$HouseholdMemberDeliveryWrapperImpl> get copyWith => throw _privateConstructorUsedError; } diff --git a/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart b/packages/delivery/lib/blocs/search_households/tag_by_search.dart similarity index 80% rename from packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart rename to packages/delivery/lib/blocs/search_households/tag_by_search.dart index 67c5966cd0..b400b526d0 100644 --- a/packages/registration_delivery/lib/blocs/search_households/tag_by_search.dart +++ b/packages/delivery/lib/blocs/search_households/tag_by_search.dart @@ -1,30 +1,29 @@ import 'dart:async'; import 'package:digit_data_model/data_model.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; -import '../../models/entities/household.dart'; -import '../../models/entities/household_member.dart'; -import '../../models/entities/project_beneficiary.dart'; import '../../models/entities/referral.dart'; import '../../models/entities/side_effect.dart'; import 'search_households.dart'; -class TagSearchBloc extends SearchHouseholdsBloc { - TagSearchBloc({ - required super.userUid, - required super.projectId, - required super.individual, - required super.householdMember, - required super.household, - required super.projectBeneficiary, - required super.taskDataRepository, - required super.beneficiaryType, - required super.sideEffectDataRepository, - required super.addressRepository, - required super.referralDataRepository, - required super.individualGlobalSearchRepository, - required super.houseHoldGlobalSearchRepository - }) { +class TagSearchDeliveryBloc extends SearchHouseholdsDeliveryBloc { + TagSearchDeliveryBloc( + {required super.userUid, + required super.projectId, + required super.individual, + required super.householdMember, + required super.household, + required super.projectBeneficiary, + required super.taskDataRepository, + required super.beneficiaryType, + required super.sideEffectDataRepository, + required super.addressRepository, + required super.referralDataRepository, + required super.individualGlobalDeliverySearchRepository, + required super.houseHoldGlobalSearchRepository}) { on(handleSearchByTag); } @@ -59,7 +58,7 @@ class TagSearchBloc extends SearchHouseholdsBloc { } // Initialize a list to store household member wrappers. - final containers = []; + final containers = []; if (individuals.isNotEmpty || households.isNotEmpty) { final hhMembers = beneficiaryType == BeneficiaryType.individual ? await householdMember.search( @@ -113,7 +112,7 @@ class TagSearchBloc extends SearchHouseholdsBloc { // Group household members by household client reference ID. containers.add( - HouseholdMemberWrapper( + HouseholdMemberDeliveryWrapper( household: householdList.firstWhere((element) => element.clientReferenceId == member.householdClientReferenceId), headOfHousehold: individualList.firstWhere((element) => diff --git a/packages/registration_delivery/lib/blocs/side_effects/side_effects.dart b/packages/delivery/lib/blocs/side_effects/side_effects.dart similarity index 97% rename from packages/registration_delivery/lib/blocs/side_effects/side_effects.dart rename to packages/delivery/lib/blocs/side_effects/side_effects.dart index 8abeca6d49..9b05a01981 100644 --- a/packages/registration_delivery/lib/blocs/side_effects/side_effects.dart +++ b/packages/delivery/lib/blocs/side_effects/side_effects.dart @@ -1,11 +1,10 @@ import 'dart:async'; +import 'package:delivery/models/entities/side_effect.dart'; import 'package:digit_data_model/data/data_repository.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import '../../models/entities/side_effect.dart'; - part 'side_effects.freezed.dart'; typedef SideEffectsEmitter = Emitter; diff --git a/packages/registration_delivery/lib/blocs/side_effects/side_effects.freezed.dart b/packages/delivery/lib/blocs/side_effects/side_effects.freezed.dart similarity index 100% rename from packages/registration_delivery/lib/blocs/side_effects/side_effects.freezed.dart rename to packages/delivery/lib/blocs/side_effects/side_effects.freezed.dart diff --git a/packages/registration_delivery/lib/data/repositories/local/base/side_effect_base.dart b/packages/delivery/lib/data/repositories/local/base/side_effect_base.dart similarity index 77% rename from packages/registration_delivery/lib/data/repositories/local/base/side_effect_base.dart rename to packages/delivery/lib/data/repositories/local/base/side_effect_base.dart index c03e9da604..6ff881d221 100644 --- a/packages/registration_delivery/lib/data/repositories/local/base/side_effect_base.dart +++ b/packages/delivery/lib/data/repositories/local/base/side_effect_base.dart @@ -1,12 +1,13 @@ +import 'package:delivery/models/entities/side_effect.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; -import '../../../../models/entities/side_effect.dart'; - abstract class SideEffectLocalBaseRepository extends LocalRepository { const SideEffectLocalBaseRepository( - super.sql, super.opLogManager,); + super.sql, + super.opLogManager, + ); @override DataModelType get type => DataModelType.sideEffect; diff --git a/packages/registration_delivery/lib/data/repositories/local/base/task_base.dart b/packages/delivery/lib/data/repositories/local/base/task_base.dart similarity index 89% rename from packages/registration_delivery/lib/data/repositories/local/base/task_base.dart rename to packages/delivery/lib/data/repositories/local/base/task_base.dart index 561a4e4b30..40b9c04b7e 100644 --- a/packages/registration_delivery/lib/data/repositories/local/base/task_base.dart +++ b/packages/delivery/lib/data/repositories/local/base/task_base.dart @@ -5,9 +5,10 @@ import '../../../../models/entities/task.dart'; abstract class TaskLocalBaseRepository extends LocalRepository { - const TaskLocalBaseRepository( - super.sql, super.opLogManager,); + super.sql, + super.opLogManager, + ); @override DataModelType get type => DataModelType.task; diff --git a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart b/packages/delivery/lib/data/repositories/local/household_global_search.dart similarity index 98% rename from packages/registration_delivery/lib/data/repositories/local/household_global_search.dart rename to packages/delivery/lib/data/repositories/local/household_global_search.dart index 256c7c3d04..8aa52ec47b 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household_global_search.dart +++ b/packages/delivery/lib/data/repositories/local/household_global_search.dart @@ -5,15 +5,15 @@ import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/household_type.dart'; import 'package:drift/drift.dart'; import 'package:flutter/material.dart'; -import 'package:registration_delivery/models/entities/task.dart'; +import 'package:delivery/models/entities/task.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/utils/global_search_parameters.dart'; -import '../../../models/entities/household.dart'; import '../../../models/entities/status.dart'; import '../../../models/entities/task_resource.dart'; -import '../../../utils/global_search_parameters.dart'; -class HouseHoldGlobalSearchRepository extends LocalRepository { - HouseHoldGlobalSearchRepository(super.sql, super.opLogManager); +class HouseHoldGlobalDeliverySearchRepository extends LocalRepository { + HouseHoldGlobalDeliverySearchRepository(super.sql, super.opLogManager); @override FutureOr> search(EntitySearchModel query) { diff --git a/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart b/packages/delivery/lib/data/repositories/local/individual_global_search.dart similarity index 99% rename from packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart rename to packages/delivery/lib/data/repositories/local/individual_global_search.dart index e12606a381..e514c2b722 100644 --- a/packages/registration_delivery/lib/data/repositories/local/individual_global_search.dart +++ b/packages/delivery/lib/data/repositories/local/individual_global_search.dart @@ -6,14 +6,14 @@ import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/household_type.dart'; import 'package:drift/drift.dart'; import 'package:flutter/material.dart'; +import 'package:registration/utils/global_search_parameters.dart'; import '../../../models/entities/status.dart'; import '../../../models/entities/task.dart'; import '../../../models/entities/task_resource.dart'; -import '../../../utils/global_search_parameters.dart'; -class IndividualGlobalSearchRepository extends LocalRepository { - IndividualGlobalSearchRepository(super.sql, super.opLogManager); +class IndividualGlobalDeliverySearchRepository extends LocalRepository { + IndividualGlobalDeliverySearchRepository(super.sql, super.opLogManager); @override FutureOr> search(EntitySearchModel query) { @@ -427,6 +427,7 @@ class IndividualGlobalSearchRepository extends LocalRepository { Status.toAdminister.name: Status.toAdminister, Status.closeHousehold.name: Status.closeHousehold, }; + // ignore: unused_local_variable var applyFilter = filter; var appliedFilter = statusMap[filter]!.toValue(); if (selectQuery == null) { diff --git a/packages/delivery/lib/data/repositories/local/project_beneficiary.dart b/packages/delivery/lib/data/repositories/local/project_beneficiary.dart new file mode 100644 index 0000000000..a20730a402 --- /dev/null +++ b/packages/delivery/lib/data/repositories/local/project_beneficiary.dart @@ -0,0 +1,230 @@ +import 'dart:async'; + +import 'package:digit_data_model/data_model.dart'; +import 'package:drift/drift.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; + +class ProjectBeneficiaryLocalDeliveryRepository extends LocalRepository< + ProjectBeneficiaryModel, ProjectBeneficiarySearchModel> { + ProjectBeneficiaryLocalDeliveryRepository(super.sql, super.opLogManager); + + void listenToChanges({ + required ProjectBeneficiarySearchModel query, + required void Function(List data) listener, + }) async { + return retryLocalCallOperation(() async { + final select = sql.select(sql.projectBeneficiary) + ..where( + (tbl) => buildOr([ + if (query.projectId != null) tbl.projectId.isIn(query.projectId!), + if (query.beneficiaryRegistrationDateGte != null) + tbl.dateOfRegistration.isBiggerOrEqualValue( + query.beneficiaryRegistrationDateGte!.millisecondsSinceEpoch, + ), + if (query.beneficiaryRegistrationDateLte != null) + tbl.dateOfRegistration.isSmallerOrEqualValue( + query.beneficiaryRegistrationDateLte!.millisecondsSinceEpoch, + ), + ]), + ); + if (query.limit != null && query.offset != null) { + select.limit(query.limit!, offset: query.offset); + } + + select.watch().listen((event) { + final data = event.map((e) { + return ProjectBeneficiaryModel( + clientReferenceId: e.clientReferenceId, + dateOfRegistration: e.dateOfRegistration, + projectId: e.projectId, + tenantId: e.tenantId, + beneficiaryClientReferenceId: e.beneficiaryClientReferenceId, + id: e.id, + tag: e.tag, + rowVersion: e.rowVersion, + isDeleted: e.isDeleted, + beneficiaryId: e.beneficiaryId, + ); + }).toList(); + + listener(data); + }); + }); + } + + @override + FutureOr bulkCreate( + List entities, + ) async { + return retryLocalCallOperation(() async { + final projectBeneficiaryCompanions = + entities.map((e) => e.companion).toList(); + + await sql.batch((batch) async { + batch.insertAll( + sql.projectBeneficiary, + projectBeneficiaryCompanions, + mode: InsertMode.insertOrReplace, + ); + }); + }); + } + + @override + FutureOr> search( + ProjectBeneficiarySearchModel query, [ + String? userId, + ]) async { + return retryLocalCallOperation>(() async { + final selectQuery = sql.select(sql.projectBeneficiary).join([]); + final results = await (selectQuery + ..where( + buildAnd( + [ + if (query.tag != null) + sql.projectBeneficiary.tag.isIn( + query.tag!, + ), + if (query.clientReferenceId != null) + sql.projectBeneficiary.clientReferenceId.isIn( + query.clientReferenceId!, + ), + if (query.beneficiaryClientReferenceId != null) + sql.projectBeneficiary.beneficiaryClientReferenceId + .isIn(query.beneficiaryClientReferenceId!), + if (query.id != null) + sql.projectBeneficiary.id.isIn( + query.id!, + ), + if (query.projectId != null) + sql.projectBeneficiary.projectId.isIn( + query.projectId!, + ), + if (query.beneficiaryId != null) + sql.projectBeneficiary.beneficiaryId.isIn( + query.beneficiaryId!, + ), + if (query.dateOfRegistrationTime != null) + sql.projectBeneficiary.dateOfRegistration.equals( + query.dateOfRegistration!, + ), + if (userId != null) + sql.projectBeneficiary.auditCreatedBy.equals( + userId, + ), + ], + ), + )) + .get(); + + return results + .map((e) { + final projectBeneficiary = e.readTable(sql.projectBeneficiary); + + return ProjectBeneficiaryModel( + clientReferenceId: projectBeneficiary.clientReferenceId, + tenantId: projectBeneficiary.tenantId, + rowVersion: projectBeneficiary.rowVersion, + id: projectBeneficiary.id, + isDeleted: projectBeneficiary.isDeleted, + beneficiaryClientReferenceId: + projectBeneficiary.beneficiaryClientReferenceId, + beneficiaryId: projectBeneficiary.beneficiaryId, + dateOfRegistration: projectBeneficiary.dateOfRegistration, + projectId: projectBeneficiary.projectId, + tag: projectBeneficiary.tag, + auditDetails: AuditDetails( + createdTime: projectBeneficiary.auditCreatedTime!, + createdBy: projectBeneficiary.auditCreatedBy!, + lastModifiedBy: projectBeneficiary.auditModifiedBy, + lastModifiedTime: projectBeneficiary.auditModifiedTime, + ), + clientAuditDetails: (projectBeneficiary.clientCreatedBy != null && + projectBeneficiary.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: projectBeneficiary.clientCreatedBy!, + createdTime: projectBeneficiary.clientCreatedTime!, + lastModifiedBy: projectBeneficiary.clientModifiedBy, + lastModifiedTime: projectBeneficiary.clientModifiedTime, + ) + : null, + ); + }) + .where((element) => element.isDeleted != true) + .toList(); + }); + } + + @override + FutureOr create( + ProjectBeneficiaryModel entity, { + bool createOpLog = true, + DataOperation dataOperation = DataOperation.create, + }) async { + return retryLocalCallOperation(() async { + final projectBeneficiaryCompanion = entity.companion; + await sql.batch((batch) { + batch.insert(sql.projectBeneficiary, projectBeneficiaryCompanion); + }); + + await super.create(entity); + }); + } + + @override + FutureOr update( + ProjectBeneficiaryModel entity, { + bool createOpLog = true, + }) async { + return retryLocalCallOperation(() async { + final projectBeneficiaryCompanion = entity.companion; + + await sql.batch((batch) { + batch.update( + sql.projectBeneficiary, + projectBeneficiaryCompanion, + where: (table) => table.clientReferenceId.equals( + entity.clientReferenceId, + ), + ); + }); + + return super.update(entity, createOpLog: createOpLog); + }); + } + + @override + FutureOr delete( + ProjectBeneficiaryModel entity, { + bool createOpLog = true, + }) async { + return retryLocalCallOperation(() async { + final updated = entity.copyWith( + isDeleted: true, + rowVersion: entity.rowVersion, + clientAuditDetails: (entity.clientAuditDetails?.createdBy != null) + ? ClientAuditDetails( + createdBy: entity.clientAuditDetails!.createdBy, + createdTime: entity.clientAuditDetails!.createdTime, + lastModifiedBy: entity.clientAuditDetails!.lastModifiedBy, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ) + : null, + ); + await sql.batch((batch) { + batch.update( + sql.projectBeneficiary, + updated.companion, + where: (table) => table.clientReferenceId.equals( + entity.clientReferenceId, + ), + ); + }); + + return super.delete(updated); + }); + } + + @override + DataModelType get type => DataModelType.projectBeneficiary; +} diff --git a/packages/delivery/lib/data/repositories/local/project_beneficiary_base.dart b/packages/delivery/lib/data/repositories/local/project_beneficiary_base.dart new file mode 100644 index 0000000000..14d946f655 --- /dev/null +++ b/packages/delivery/lib/data/repositories/local/project_beneficiary_base.dart @@ -0,0 +1,15 @@ +import 'package:digit_data_model/data_model.dart'; +import 'package:drift/drift.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; + +abstract class ProjectBeneficiaryLocalBaseDeliveryRepository + extends LocalRepository { + const ProjectBeneficiaryLocalBaseDeliveryRepository( + super.sql, super.opLogManager); + + @override + DataModelType get type => DataModelType.projectBeneficiary; + + TableInfo get table => sql.projectBeneficiary; +} diff --git a/packages/registration_delivery/lib/data/repositories/local/referral.dart b/packages/delivery/lib/data/repositories/local/referral.dart similarity index 98% rename from packages/registration_delivery/lib/data/repositories/local/referral.dart rename to packages/delivery/lib/data/repositories/local/referral.dart index 5bd72f96df..d753eba5a4 100644 --- a/packages/registration_delivery/lib/data/repositories/local/referral.dart +++ b/packages/delivery/lib/data/repositories/local/referral.dart @@ -3,7 +3,8 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; -import 'package:registration_delivery/models/entities/referral.dart'; + +import '../../../models/entities/referral.dart'; class ReferralLocalRepository extends LocalRepository { diff --git a/packages/registration_delivery/lib/data/repositories/local/side_effect.dart b/packages/delivery/lib/data/repositories/local/side_effect.dart similarity index 98% rename from packages/registration_delivery/lib/data/repositories/local/side_effect.dart rename to packages/delivery/lib/data/repositories/local/side_effect.dart index 4e70800922..fdfcd16232 100644 --- a/packages/registration_delivery/lib/data/repositories/local/side_effect.dart +++ b/packages/delivery/lib/data/repositories/local/side_effect.dart @@ -3,7 +3,8 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; -import 'package:registration_delivery/models/entities/side_effect.dart'; + +import '../../../models/entities/side_effect.dart'; class SideEffectLocalRepository extends LocalRepository { diff --git a/packages/registration_delivery/lib/data/repositories/local/task.dart b/packages/delivery/lib/data/repositories/local/task.dart similarity index 99% rename from packages/registration_delivery/lib/data/repositories/local/task.dart rename to packages/delivery/lib/data/repositories/local/task.dart index 6d350830d9..35b9418842 100644 --- a/packages/registration_delivery/lib/data/repositories/local/task.dart +++ b/packages/delivery/lib/data/repositories/local/task.dart @@ -3,9 +3,9 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; -import 'package:registration_delivery/models/entities/task_resource.dart'; import '../../../models/entities/task.dart'; +import '../../../models/entities/task_resource.dart'; class TaskLocalRepository extends LocalRepository { TaskLocalRepository( diff --git a/packages/delivery/lib/data/repositories/oplog/oplog_delivery.dart b/packages/delivery/lib/data/repositories/oplog/oplog_delivery.dart new file mode 100644 index 0000000000..39ae15070f --- /dev/null +++ b/packages/delivery/lib/data/repositories/oplog/oplog_delivery.dart @@ -0,0 +1,80 @@ +import 'package:digit_data_model/data_model.dart'; + +import '../../../models/entities/referral.dart'; +import '../../../models/entities/side_effect.dart'; +import '../../../models/entities/task.dart'; + +class TaskOpLogManager extends OpLogManager { + TaskOpLogManager(super.isar); + + @override + TaskModel applyServerGeneratedIdToEntity( + TaskModel entity, + String serverGeneratedId, + int rowVersion, + ) => + entity.copyWith(id: serverGeneratedId, rowVersion: rowVersion); + + @override + String getClientReferenceId(TaskModel entity) => entity.clientReferenceId; + + @override + String? getServerGeneratedId(TaskModel entity) => entity.id; + + @override + int? getRowVersion(TaskModel entity) => entity.rowVersion; + + @override + bool? getNonRecoverableError(TaskModel entity) => entity.nonRecoverableError; +} + +class SideEffectOpLogManager extends OpLogManager { + SideEffectOpLogManager(super.isar); + + @override + SideEffectModel applyServerGeneratedIdToEntity( + SideEffectModel entity, + String serverGeneratedId, + int rowVersion, + ) => + entity.copyWith(id: serverGeneratedId, rowVersion: rowVersion); + + @override + String getClientReferenceId(SideEffectModel entity) => + entity.clientReferenceId; + + @override + String? getServerGeneratedId(SideEffectModel entity) => entity.id; + + @override + int? getRowVersion(SideEffectModel entity) => entity.rowVersion; + + @override + bool? getNonRecoverableError(SideEffectModel entity) => + entity.nonRecoverableError; +} + +class ReferralOpLogManager extends OpLogManager { + ReferralOpLogManager(super.isar); + + @override + ReferralModel applyServerGeneratedIdToEntity( + ReferralModel entity, + String serverGeneratedId, + int rowVersion, + ) => + entity.copyWith(id: serverGeneratedId, rowVersion: rowVersion); + + @override + String getClientReferenceId(ReferralModel entity) => entity.clientReferenceId; + + @override + String? getServerGeneratedId(ReferralModel entity) => entity.id; + + @override + int? getRowVersion(ReferralModel entity) => entity.rowVersion; + + @override + bool? getNonRecoverableError(ReferralModel entity) => + entity.nonRecoverableError; +} diff --git a/packages/delivery/lib/data/repositories/remote/project_beneficiary.dart b/packages/delivery/lib/data/repositories/remote/project_beneficiary.dart new file mode 100644 index 0000000000..f723e602c9 --- /dev/null +++ b/packages/delivery/lib/data/repositories/remote/project_beneficiary.dart @@ -0,0 +1,17 @@ +// Generated using mason. Do not modify by hand + +import 'package:digit_data_model/data_model.dart'; +import 'package:registration/registration.dart'; + +class ProjectBeneficiaryRemoteDeliveryRepository extends RemoteRepository< + ProjectBeneficiaryModel, ProjectBeneficiarySearchModel> { + ProjectBeneficiaryRemoteDeliveryRepository( + super.dio, { + required super.actionMap, + super.entityName = 'ProjectBeneficiary', + super.isSearchResponsePlural = true, + }); + + @override + DataModelType get type => DataModelType.projectBeneficiary; +} diff --git a/packages/registration_delivery/lib/data/repositories/remote/referral.dart b/packages/delivery/lib/data/repositories/remote/referral.dart similarity index 85% rename from packages/registration_delivery/lib/data/repositories/remote/referral.dart rename to packages/delivery/lib/data/repositories/remote/referral.dart index 5a55041720..a73e1e82cb 100644 --- a/packages/registration_delivery/lib/data/repositories/remote/referral.dart +++ b/packages/delivery/lib/data/repositories/remote/referral.dart @@ -1,7 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/models/entities/referral.dart'; + +import '../../../models/entities/referral.dart'; class ReferralRemoteRepository extends RemoteRepository { diff --git a/packages/registration_delivery/lib/data/repositories/remote/side_effect.dart b/packages/delivery/lib/data/repositories/remote/side_effect.dart similarity index 85% rename from packages/registration_delivery/lib/data/repositories/remote/side_effect.dart rename to packages/delivery/lib/data/repositories/remote/side_effect.dart index 411f2172f5..7f48257e2b 100644 --- a/packages/registration_delivery/lib/data/repositories/remote/side_effect.dart +++ b/packages/delivery/lib/data/repositories/remote/side_effect.dart @@ -1,7 +1,7 @@ // Generated using mason. Do not modify by hand +import 'package:delivery/models/entities/side_effect.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/models/entities/side_effect.dart'; class SideEffectRemoteRepository extends RemoteRepository { diff --git a/packages/registration_delivery/lib/data/repositories/remote/task.dart b/packages/delivery/lib/data/repositories/remote/task.dart similarity index 85% rename from packages/registration_delivery/lib/data/repositories/remote/task.dart rename to packages/delivery/lib/data/repositories/remote/task.dart index 22389b90e4..80271fe92c 100644 --- a/packages/registration_delivery/lib/data/repositories/remote/task.dart +++ b/packages/delivery/lib/data/repositories/remote/task.dart @@ -1,7 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/models/entities/task.dart'; + +import '../../../models/entities/task.dart'; class TaskRemoteRepository extends RemoteRepository { diff --git a/packages/delivery/lib/delivery.dart b/packages/delivery/lib/delivery.dart new file mode 100644 index 0000000000..48bc1fec12 --- /dev/null +++ b/packages/delivery/lib/delivery.dart @@ -0,0 +1,81 @@ +@MappableLib( + generateInitializerForScope: InitializerScope.package, +) +library delivery; + +import 'package:dart_mappable/dart_mappable.dart'; + +export 'models/entities/beneficiary_statistics/beneficiary_statistics_model.dart'; +export 'models/entities/deliver_strategy_type.dart'; +export 'models/entities/status.dart'; +export 'models/entities/side_effect.dart'; +export 'models/entities/task.dart'; +export 'models/entities/task_resource.dart'; +export 'models/entities/referral.dart'; +export 'blocs/delivery_intervention/deliver_intervention.dart'; +export 'blocs/household_overview/household_overview.dart'; +export 'blocs/referral_management/referral_management.dart'; +export 'blocs/search_households/household_global_search.dart'; +export 'blocs/search_households/individual_global_search.dart'; +export 'blocs/search_households/search_bloc_common_wrapper.dart'; +export 'blocs/search_households/search_households.dart'; +export 'blocs/search_households/tag_by_search.dart'; +export 'blocs/side_effects/side_effects.dart'; +export 'data/repositories/local/base/side_effect_base.dart'; +export 'data/repositories/local/base/task_base.dart'; +export 'data/repositories/local/household_global_search.dart'; +export 'data/repositories/local/individual_global_search.dart'; +export 'data/repositories/local/project_beneficiary_base.dart'; +export 'data/repositories/local/project_beneficiary.dart'; +export 'data/repositories/local/side_effect.dart'; +export 'data/repositories/local/task.dart'; +export 'data/repositories/oplog/oplog_delivery.dart'; +export 'data/repositories/remote/project_beneficiary.dart'; +export 'data/repositories/remote/referral.dart'; +export 'data/repositories/remote/side_effect.dart'; +export 'data/repositories/remote/task.dart'; + +export 'pages/beneficiary/widgets/past_delivery.dart'; +export 'pages/beneficiary/widgets/record_delivery_cycle.dart'; +export 'pages/beneficiary/widgets/splash_acknowledgement.dart'; +export 'pages/beneficiary/beneficiary_checklist.dart'; +export 'pages/beneficiary/beneficiary_details.dart'; +export 'pages/beneficiary/beneficiary_wrapper.dart'; +export 'pages/beneficiary/deliver_intervention.dart'; +export 'pages/beneficiary/delivery_summary_page.dart'; +export 'pages/beneficiary/dose_administered.dart'; +export 'pages/beneficiary/facility_selection.dart'; +export 'pages/beneficiary/household_overview.dart'; +export 'pages/beneficiary/record_past_delivery_details.dart'; +export 'pages/beneficiary/refer_beneficiary.dart'; +export 'pages/beneficiary/refused_delivery.dart'; +export 'pages/beneficiary/side_effects.dart'; +export 'pages/delivery_wrapper.dart'; +export 'pages/search_beneficiary.dart'; +export 'pages/summary_page.dart'; + +export 'utils/constants.dart'; +export 'utils/typedefs.dart'; +export 'utils/i18_key_constants.dart'; +export 'utils/utils.dart' show DeliverySingleton; + +export 'widgets/beneficiary/beneficiary_card.dart'; +export 'widgets/beneficiary/beneficiary_statistics_card.dart'; +export 'widgets/beneficiary/resource_beneficiary_card.dart'; +export 'widgets/beneficiary/view_beneficiary_card.dart'; + +export 'widgets/component_wrapper/product_variant_bloc_wrapper.dart'; + +export 'widgets/progress_bar/beneficiary_progress.dart'; +export 'widgets/progress_indicator/progress_indicator.dart'; +export 'widgets/showcase/config/showcase_constants.dart'; + +export 'widgets/showcase/showcase_button.dart'; +export 'widgets/showcase/showcase_wrappers.dart'; + +export 'widgets/status_filter/status_filter.dart'; +export 'widgets/table_card/table_card.dart'; + +export 'widgets/back_navigation_help_header.dart'; + +export 'router/delivery_router.dart'; diff --git a/packages/delivery/lib/delivery.init.dart b/packages/delivery/lib/delivery.init.dart new file mode 100644 index 0000000000..a267882178 --- /dev/null +++ b/packages/delivery/lib/delivery.init.dart @@ -0,0 +1,28 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element + +import 'models/entities/deliver_strategy_type.dart' as p0; +import 'models/entities/referral.dart' as p1; +import 'models/entities/side_effect.dart' as p2; +import 'models/entities/status.dart' as p3; +import 'models/entities/task.dart' as p4; +import 'models/entities/task_resource.dart' as p5; + +void initializeMappers() { + p0.DeliverStrategyTypeMapper.ensureInitialized(); + p1.ReferralSearchModelMapper.ensureInitialized(); + p1.ReferralModelMapper.ensureInitialized(); + p1.ReferralAdditionalFieldsMapper.ensureInitialized(); + p2.SideEffectSearchModelMapper.ensureInitialized(); + p2.SideEffectModelMapper.ensureInitialized(); + p2.SideEffectAdditionalFieldsMapper.ensureInitialized(); + p3.StatusMapper.ensureInitialized(); + p4.TaskSearchModelMapper.ensureInitialized(); + p4.TaskModelMapper.ensureInitialized(); + p4.TaskAdditionalFieldsMapper.ensureInitialized(); + p5.TaskResourceSearchModelMapper.ensureInitialized(); + p5.TaskResourceModelMapper.ensureInitialized(); + p5.TaskResourceAdditionalFieldsMapper.ensureInitialized(); +} diff --git a/packages/registration_delivery/lib/models/beneficiary_statistics/beneficiary_statistics_model.dart b/packages/delivery/lib/models/entities/beneficiary_statistics/beneficiary_statistics_model.dart similarity index 100% rename from packages/registration_delivery/lib/models/beneficiary_statistics/beneficiary_statistics_model.dart rename to packages/delivery/lib/models/entities/beneficiary_statistics/beneficiary_statistics_model.dart diff --git a/packages/registration_delivery/lib/models/beneficiary_statistics/beneficiary_statistics_model.freezed.dart b/packages/delivery/lib/models/entities/beneficiary_statistics/beneficiary_statistics_model.freezed.dart similarity index 100% rename from packages/registration_delivery/lib/models/beneficiary_statistics/beneficiary_statistics_model.freezed.dart rename to packages/delivery/lib/models/entities/beneficiary_statistics/beneficiary_statistics_model.freezed.dart diff --git a/packages/registration_delivery/lib/models/entities/deliver_strategy_type.dart b/packages/delivery/lib/models/entities/deliver_strategy_type.dart similarity index 73% rename from packages/registration_delivery/lib/models/entities/deliver_strategy_type.dart rename to packages/delivery/lib/models/entities/deliver_strategy_type.dart index 381866ed4e..d647ab5acd 100644 --- a/packages/registration_delivery/lib/models/entities/deliver_strategy_type.dart +++ b/packages/delivery/lib/models/entities/deliver_strategy_type.dart @@ -2,9 +2,12 @@ import 'package:dart_mappable/dart_mappable.dart'; part 'deliver_strategy_type.mapper.dart'; + @MappableEnum(caseStyle: CaseStyle.upperCase) enum DeliverStrategyType { - @MappableValue("INDIRECT") indirect, - @MappableValue("DIRECT") direct, + @MappableValue("INDIRECT") + indirect, + @MappableValue("DIRECT") + direct, ; -} \ No newline at end of file +} diff --git a/packages/registration_delivery/lib/models/entities/deliver_strategy_type.mapper.dart b/packages/delivery/lib/models/entities/deliver_strategy_type.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/deliver_strategy_type.mapper.dart rename to packages/delivery/lib/models/entities/deliver_strategy_type.mapper.dart diff --git a/packages/registration_delivery/lib/models/entities/referral.dart b/packages/delivery/lib/models/entities/referral.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/referral.dart rename to packages/delivery/lib/models/entities/referral.dart diff --git a/packages/registration_delivery/lib/models/entities/referral.mapper.dart b/packages/delivery/lib/models/entities/referral.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/referral.mapper.dart rename to packages/delivery/lib/models/entities/referral.mapper.dart diff --git a/packages/registration_delivery/lib/models/entities/side_effect.dart b/packages/delivery/lib/models/entities/side_effect.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/side_effect.dart rename to packages/delivery/lib/models/entities/side_effect.dart diff --git a/packages/registration_delivery/lib/models/entities/side_effect.mapper.dart b/packages/delivery/lib/models/entities/side_effect.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/side_effect.mapper.dart rename to packages/delivery/lib/models/entities/side_effect.mapper.dart diff --git a/packages/registration_delivery/lib/models/entities/status.dart b/packages/delivery/lib/models/entities/status.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/status.dart rename to packages/delivery/lib/models/entities/status.dart diff --git a/packages/registration_delivery/lib/models/entities/status.mapper.dart b/packages/delivery/lib/models/entities/status.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/status.mapper.dart rename to packages/delivery/lib/models/entities/status.mapper.dart diff --git a/packages/registration_delivery/lib/models/entities/task.dart b/packages/delivery/lib/models/entities/task.dart similarity index 98% rename from packages/registration_delivery/lib/models/entities/task.dart rename to packages/delivery/lib/models/entities/task.dart index 3f90338e57..84380817e9 100644 --- a/packages/registration_delivery/lib/models/entities/task.dart +++ b/packages/delivery/lib/models/entities/task.dart @@ -2,7 +2,7 @@ import 'package:dart_mappable/dart_mappable.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; -import 'package:registration_delivery/models/entities/task_resource.dart'; +import 'package:delivery/models/entities/task_resource.dart'; part 'task.mapper.dart'; diff --git a/packages/registration_delivery/lib/models/entities/task.mapper.dart b/packages/delivery/lib/models/entities/task.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/task.mapper.dart rename to packages/delivery/lib/models/entities/task.mapper.dart diff --git a/packages/registration_delivery/lib/models/entities/task_resource.dart b/packages/delivery/lib/models/entities/task_resource.dart similarity index 89% rename from packages/registration_delivery/lib/models/entities/task_resource.dart rename to packages/delivery/lib/models/entities/task_resource.dart index 0b96910f31..ee7e2cda73 100644 --- a/packages/registration_delivery/lib/models/entities/task_resource.dart +++ b/packages/delivery/lib/models/entities/task_resource.dart @@ -7,28 +7,28 @@ import 'package:digit_data_model/data_model.dart'; part 'task_resource.mapper.dart'; @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) -class TaskResourceSearchModel extends EntitySearchModel with TaskResourceSearchModelMappable { +class TaskResourceSearchModel extends EntitySearchModel + with TaskResourceSearchModelMappable { final String? id; final String? tenantId; - + TaskResourceSearchModel({ this.id, this.tenantId, super.boundaryCode, super.isDeleted, - }): super(); + }) : super(); @MappableConstructor() TaskResourceSearchModel.ignoreDeleted({ this.id, this.tenantId, super.boundaryCode, - }): super(isDeleted: false); + }) : super(isDeleted: false); } @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) class TaskResourceModel extends EntityModel with TaskResourceModelMappable { - static const schemaName = 'TaskResource'; final String clientReferenceId; @@ -57,9 +57,10 @@ class TaskResourceModel extends EntityModel with TaskResourceModelMappable { this.nonRecoverableError = false, this.tenantId, this.rowVersion, - super.auditDetails,super.clientAuditDetails, + super.auditDetails, + super.clientAuditDetails, super.isDeleted = false, - }): super(); + }) : super(); TaskResourceCompanion get companion { return TaskResourceCompanion( @@ -84,16 +85,16 @@ class TaskResourceModel extends EntityModel with TaskResourceModelMappable { nonRecoverableError: Value(nonRecoverableError), tenantId: Value(tenantId), rowVersion: Value(rowVersion), - ); + ); } } @MappableClass(ignoreNull: true, discriminatorValue: MappableClass.useAsDefault) -class TaskResourceAdditionalFields extends AdditionalFields with TaskResourceAdditionalFieldsMappable { +class TaskResourceAdditionalFields extends AdditionalFields + with TaskResourceAdditionalFieldsMappable { TaskResourceAdditionalFields({ super.schema = 'TaskResource', required super.version, super.fields, }); } - diff --git a/packages/registration_delivery/lib/models/entities/task_resource.mapper.dart b/packages/delivery/lib/models/entities/task_resource.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/task_resource.mapper.dart rename to packages/delivery/lib/models/entities/task_resource.mapper.dart diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart b/packages/delivery/lib/pages/beneficiary/beneficiary_checklist.dart similarity index 98% rename from packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart rename to packages/delivery/lib/pages/beneficiary/beneficiary_checklist.dart index 2fc397107a..d4ea7b1080 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_checklist.dart +++ b/packages/delivery/lib/pages/beneficiary/beneficiary_checklist.dart @@ -2,6 +2,9 @@ import 'dart:math'; import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; +import 'package:delivery/utils/utils.dart'; +import 'package:delivery/widgets/back_navigation_help_header.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/models/RadioButtonModel.dart'; @@ -17,15 +20,11 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/models/entities/registration_delivery_enums.dart'; +import 'package:registration/models/entities/registration_delivery_enums.dart'; import 'package:survey_form/survey_form.dart'; - import '../../models/entities/status.dart'; -import '../../router/registration_delivery_router.gm.dart'; -import '../../utils/constants.dart'; -import '../../utils/i18_key_constants.dart' as i18; -import '../../utils/utils.dart'; -import '../../widgets/back_navigation_help_header.dart'; +import 'package:delivery/utils/constants.dart'; +import 'package:delivery/utils/i18_key_constants.dart' as i18; import '../../widgets/localized.dart'; @RoutePage() @@ -83,9 +82,9 @@ class _BeneficiaryChecklistPageState selectedServiceDefinition = value.serviceDefinitionList .where((element) => element.code.toString().contains( - '${RegistrationDeliverySingleton().selectedProject!.name}.${RegistrationDeliveryEnums.eligibility.toValue()}') || + '${DeliverySingleton().selectedProject!.name}.${RegistrationDeliveryEnums.eligibility.toValue()}') || element.code.toString().contains( - '${RegistrationDeliverySingleton().selectedProject!.name}.${RegistrationDeliveryEnums.iec.toValue()}')) + '${DeliverySingleton().selectedProject!.name}.${RegistrationDeliveryEnums.iec.toValue()}')) .toList() .firstOrNull; @@ -1335,27 +1334,26 @@ class _BeneficiaryChecklistPageState serviceDefId: selectedServiceDefinition?.id, attributes: attributes, rowVersion: 1, - accountId: RegistrationDeliverySingleton().projectId, + accountId: DeliverySingleton().projectId, additionalDetails: { - "boundaryCode": RegistrationDeliverySingleton().boundary?.code + "boundaryCode": DeliverySingleton().boundary?.code }, additionalFields: ServiceAdditionalFields(version: 1, fields: [ AdditionalField( 'relatedClientReferenceId', widget.beneficiaryClientRefId), - AdditionalField('localityCode', - RegistrationDeliverySingleton().boundary!.code), + AdditionalField( + 'localityCode', DeliverySingleton().boundary!.code), if (decidedFlow != null) AdditionalField('decidedFlow', decidedFlow) ]), auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: DeliverySingleton().loggedInUserUuid!, createdTime: DateTime.now().millisecondsSinceEpoch, ), clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: DeliverySingleton().loggedInUserUuid!, createdTime: DateTime.now().millisecondsSinceEpoch, - lastModifiedBy: - RegistrationDeliverySingleton().loggedInUserUuid!, + lastModifiedBy: DeliverySingleton().loggedInUserUuid!, lastModifiedTime: DateTime.now().millisecondsSinceEpoch, ), ), @@ -1385,7 +1383,7 @@ class _BeneficiaryChecklistPageState .contains(RegistrationDeliveryEnums.iec.toValue())) { ctx.router.navigate(DeliverInterventionRoute()); } else { - ctx.router.navigate(BeneficiaryDetailsRoute()); + ctx.router.navigate(BeneficiaryDetailsDeliveryRoute()); } break; default: diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart b/packages/delivery/lib/pages/beneficiary/beneficiary_details.dart similarity index 81% rename from packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart rename to packages/delivery/lib/pages/beneficiary/beneficiary_details.dart index 5e20e05dd2..4688485cb7 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_details.dart +++ b/packages/delivery/lib/pages/beneficiary/beneficiary_details.dart @@ -1,5 +1,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; +import 'package:delivery/blocs/household_overview/household_overview.dart'; +import 'package:delivery/pages/beneficiary/widgets/past_delivery.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; @@ -11,13 +14,16 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:recase/recase.dart'; -import 'package:registration_delivery/blocs/app_localization.dart'; -import 'package:registration_delivery/pages/beneficiary/widgets/past_delivery.dart'; +import 'package:delivery/blocs/app_localization.dart'; + +import 'package:registration/models/entities/additional_fields_type.dart'; + +// import 'package:registration_delivery/pages/beneficiary/widgets/past_delivery.dart'; import '../../blocs/delivery_intervention/deliver_intervention.dart'; -import '../../blocs/household_overview/household_overview.dart'; -import '../../models/entities/additional_fields_type.dart'; -import '../../router/registration_delivery_router.gm.dart'; +// import '../../blocs/household_overview/household_overview.dart'; +// import '../../models/entities/additional_fields_type.dart'; +// import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; @@ -27,18 +33,19 @@ import '../../widgets/table_card/table_card.dart'; import 'widgets/record_delivery_cycle.dart'; @RoutePage() -class BeneficiaryDetailsPage extends LocalizedStatefulWidget { - const BeneficiaryDetailsPage({ +class BeneficiaryDetailsDeliveryPage extends LocalizedStatefulWidget { + const BeneficiaryDetailsDeliveryPage({ super.key, super.appLocalizations, }); @override - State createState() => BeneficiaryDetailsPageState(); + State createState() => + BeneficiaryDetailsDeliveryPageState(); } -class BeneficiaryDetailsPageState - extends LocalizedState { +class BeneficiaryDetailsDeliveryPageState + extends LocalizedState { @override void initState() { // TODO: implement initState @@ -48,18 +55,18 @@ class BeneficiaryDetailsPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); - final localizations = RegistrationDeliveryLocalization.of(context); + final localizations = DeliveryLocalization.of(context); final router = context.router; final textTheme = theme.digitTextTheme(context); return ProductVariantBlocWrapper( - child: BlocBuilder( + child: BlocBuilder( builder: (context, state) { - final householdMemberWrapper = state.householdMemberWrapper; + final householdMemberWrapper = state.householdMemberDeliveryWrapper; // Filtering project beneficiaries based on the selected individual final projectBeneficiary = - RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual + DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? [householdMemberWrapper.projectBeneficiaries?.first] : householdMemberWrapper.projectBeneficiaries ?.where( @@ -71,7 +78,7 @@ class BeneficiaryDetailsPageState // Extracting task data related to the selected project beneficiary - final taskData = state.householdMemberWrapper.tasks + final taskData = state.householdMemberDeliveryWrapper.tasks ?.where((element) => element.projectBeneficiaryClientReferenceId == projectBeneficiary?.first?.clientReferenceId) @@ -97,7 +104,7 @@ class BeneficiaryDetailsPageState : '1'; // [TODO] Need to move this to Bloc Lisitner or consumer - if (RegistrationDeliverySingleton().projectType != null) { + if (DeliverySingleton().projectType != null) { bloc.add( DeliverInterventionEvent.setActiveCycleDose( lastDose: taskData != null && taskData.isNotEmpty @@ -113,7 +120,7 @@ class BeneficiaryDetailsPageState 1 : 1, individualModel: state.selectedIndividual, - projectType: RegistrationDeliverySingleton().projectType!, + projectType: DeliverySingleton().projectType!, ), ); } @@ -140,8 +147,7 @@ class BeneficiaryDetailsPageState footer: BlocBuilder( builder: (context, deliverState) { - final projectType = - RegistrationDeliverySingleton().projectType; + final projectType = DeliverySingleton().projectType; final cycles = projectType?.cycles; return cycles != null && cycles.isNotEmpty @@ -168,14 +174,13 @@ class BeneficiaryDetailsPageState DeliverInterventionEvent .selectFutureCycleDose( dose: deliverState.dose, - cycle: - RegistrationDeliverySingleton() - .projectType! - .cycles! - .firstWhere((c) => - c.id == - deliverState - .cycle), + cycle: DeliverySingleton() + .projectType! + .cycles! + .firstWhere((c) => + c.id == + deliverState + .cycle), individualModel: state .selectedIndividual, ), @@ -198,7 +203,7 @@ class BeneficiaryDetailsPageState state .selectedIndividual, state - .householdMemberWrapper + .householdMemberDeliveryWrapper .household), ], actions: [ @@ -261,14 +266,12 @@ class BeneficiaryDetailsPageState DigitTableCard( element: { localizations.translate( - RegistrationDeliverySingleton() - .beneficiaryType != + DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? i18.householdOverView .householdOverViewHouseholdHeadLabel : i18.common.coreCommonName, - ): RegistrationDeliverySingleton() - .beneficiaryType != + ): DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? householdMemberWrapper .headOfHousehold?.name?.givenName @@ -279,8 +282,7 @@ class BeneficiaryDetailsPageState i18.deliverIntervention.idTypeText, ): () { final identifiers = - RegistrationDeliverySingleton() - .beneficiaryType != + DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? householdMemberWrapper .headOfHousehold?.identifiers @@ -299,8 +301,7 @@ class BeneficiaryDetailsPageState i18.deliverIntervention.idNumberText, ): () { final identifiers = - RegistrationDeliverySingleton() - .beneficiaryType != + DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? householdMemberWrapper .headOfHousehold?.identifiers @@ -319,8 +320,7 @@ class BeneficiaryDetailsPageState i18.common.coreCommonAge, ): () { final dob = - RegistrationDeliverySingleton() - .beneficiaryType != + DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? householdMemberWrapper .headOfHousehold?.dateOfBirth @@ -351,8 +351,7 @@ class BeneficiaryDetailsPageState }(), localizations.translate( i18.common.coreCommonGender, - ): RegistrationDeliverySingleton() - .beneficiaryType != + ): DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? householdMemberWrapper.headOfHousehold ?.gender?.name.sentenceCase @@ -361,8 +360,7 @@ class BeneficiaryDetailsPageState '--', localizations.translate( i18.common.coreCommonMobileNumber, - ): RegistrationDeliverySingleton() - .beneficiaryType != + ): DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? householdMemberWrapper .headOfHousehold?.mobileNumber @@ -388,46 +386,42 @@ class BeneficiaryDetailsPageState }, ), ]), - if ((RegistrationDeliverySingleton() - .projectType - ?.cycles ?? - []) + if ((DeliverySingleton().projectType?.cycles ?? []) .isNotEmpty) DigitCard( margin: const EdgeInsets.all(spacer2), - children: RegistrationDeliverySingleton() - .projectType - ?.cycles != - null - ? [ - BlocBuilder( - builder: (context, deliverState) { - return Column( - children: [ - (RegistrationDeliverySingleton() - .projectType - ?.cycles ?? - []) - .isNotEmpty - ? RecordDeliveryCycle( - projectCycles: - RegistrationDeliverySingleton() + children: + DeliverySingleton().projectType?.cycles != + null + ? [ + BlocBuilder( + builder: (context, deliverState) { + return Column( + children: [ + (DeliverySingleton() .projectType ?.cycles ?? - [], - taskData: - taskData ?? [], - individualModel: state - .selectedIndividual, - ) - : const Offstage(), - ], - ); - }, - ), - ] - : []) + []) + .isNotEmpty + ? RecordDeliveryCycle( + projectCycles: + DeliverySingleton() + .projectType + ?.cycles ?? + [], + taskData: + taskData ?? [], + individualModel: state + .selectedIndividual, + ) + : const Offstage(), + ], + ); + }, + ), + ] + : []) ], ), ); diff --git a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart b/packages/delivery/lib/pages/beneficiary/beneficiary_wrapper.dart similarity index 72% rename from packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart rename to packages/delivery/lib/pages/beneficiary/beneficiary_wrapper.dart index 538f250f0b..95b93c6b37 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/beneficiary_wrapper.dart +++ b/packages/delivery/lib/pages/beneficiary/beneficiary_wrapper.dart @@ -1,30 +1,31 @@ import 'package:auto_route/auto_route.dart'; +import 'package:delivery/blocs/search_households/search_households.dart'; +import 'package:delivery/utils/utils.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/utils/utils.dart'; -import 'package:survey_form/survey_form.dart'; +import 'package:delivery/blocs/household_overview/household_overview.dart'; + +import 'package:delivery/data/repositories/local/individual_global_search.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; +import 'package:registration/utils/extensions/extensions.dart'; +import 'package:survey_form/survey_form.dart'; import '../../blocs/delivery_intervention/deliver_intervention.dart'; -import '../../blocs/household_overview/household_overview.dart'; import '../../blocs/referral_management/referral_management.dart'; -import '../../blocs/search_households/search_households.dart'; import '../../blocs/side_effects/side_effects.dart'; -import '../../data/repositories/local/individual_global_search.dart'; -import '../../models/entities/household.dart'; -import '../../models/entities/household_member.dart'; -import '../../models/entities/project_beneficiary.dart'; import '../../models/entities/referral.dart'; import '../../models/entities/side_effect.dart'; import '../../models/entities/task.dart'; -import '../../utils/extensions/extensions.dart'; @RoutePage() -class BeneficiaryWrapperPage extends StatelessWidget { - final HouseholdMemberWrapper wrapper; +class DeliveryBeneficiaryWrapperPage extends StatelessWidget { + final HouseholdMemberDeliveryWrapper wrapper; final bool isEditing; - const BeneficiaryWrapperPage({ + const DeliveryBeneficiaryWrapperPage({ super.key, required this.wrapper, this.isEditing = false, @@ -59,7 +60,7 @@ class BeneficiaryWrapperPage extends StatelessWidget { context.repository(context); final individualGlobalSearchRepository = - context.read(); + context.read(); return MultiBlocProvider( providers: [ @@ -81,7 +82,7 @@ class BeneficiaryWrapperPage extends StatelessWidget { projectFacilityDataRepository: projectFacilityRepository) ..add( FacilityLoadForProjectEvent( - projectId: RegistrationDeliverySingleton().projectId!, + projectId: DeliverySingleton().projectId!, ), ), ), @@ -92,9 +93,9 @@ class BeneficiaryWrapperPage extends StatelessWidget { )..add(const ServiceDefinitionFetchEvent()), ), BlocProvider( - create: (_) => HouseholdOverviewBloc( - HouseholdOverviewState( - householdMemberWrapper: wrapper, + create: (_) => HouseholdOverviewDeliveryBloc( + HouseholdOverviewDeliveryState( + householdMemberDeliveryWrapper: wrapper, ), individualRepository: individual, householdRepository: household, @@ -105,8 +106,7 @@ class BeneficiaryWrapperPage extends StatelessWidget { referralDataRepository: referral, individualGlobalSearchRepository: individualGlobalSearchRepository, - beneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!), + beneficiaryType: DeliverySingleton().beneficiaryType!), ), BlocProvider( create: (_) => DeliverInterventionBloc( @@ -133,8 +133,9 @@ class BeneficiaryWrapperPage extends StatelessWidget { ), ), ], - child: BlocBuilder( - builder: (context, houseHoldOverviewState) { + child: BlocBuilder( + builder: (context, HouseholdOverviewDeliveryState) { return BlocProvider( lazy: false, create: (_) => DeliverInterventionBloc( @@ -144,13 +145,13 @@ class BeneficiaryWrapperPage extends StatelessWidget { taskRepository: task, )..add(DeliverInterventionSearchEvent( taskSearch: TaskSearchModel( - projectBeneficiaryClientReferenceId: houseHoldOverviewState - .householdMemberWrapper.projectBeneficiaries - ?.where((element) => - element.projectId == - RegistrationDeliverySingleton().projectId) - .map((e) => e.clientReferenceId) - .toList(), + projectBeneficiaryClientReferenceId: + HouseholdOverviewDeliveryState + .householdMemberDeliveryWrapper.projectBeneficiaries + ?.where((element) => + element.projectId == DeliverySingleton().projectId) + .map((e) => e.clientReferenceId) + .toList(), ))), child: BlocProvider( lazy: false, @@ -160,10 +161,11 @@ class BeneficiaryWrapperPage extends StatelessWidget { ), referralRepository: referral, )..add(ReferralSearchEvent(ReferralSearchModel( - projectBeneficiaryClientReferenceId: houseHoldOverviewState - .householdMemberWrapper.projectBeneficiaries - ?.map((e) => e.clientReferenceId) - .toList(), + projectBeneficiaryClientReferenceId: + HouseholdOverviewDeliveryState + .householdMemberDeliveryWrapper.projectBeneficiaries + ?.map((e) => e.clientReferenceId) + .toList(), ))), child: BlocProvider( lazy: false, @@ -173,8 +175,8 @@ class BeneficiaryWrapperPage extends StatelessWidget { ), sideEffectRepository: sideEffect, )..add(SideEffectsSearchEvent(SideEffectSearchModel( - taskClientReferenceId: houseHoldOverviewState - .householdMemberWrapper.tasks + taskClientReferenceId: HouseholdOverviewDeliveryState + .householdMemberDeliveryWrapper.tasks ?.map((e) => e.clientReferenceId) .toList(), ))), diff --git a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart b/packages/delivery/lib/pages/beneficiary/deliver_intervention.dart similarity index 92% rename from packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart rename to packages/delivery/lib/pages/beneficiary/deliver_intervention.dart index 0c5f68e624..f828f584ab 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/deliver_intervention.dart +++ b/packages/delivery/lib/pages/beneficiary/deliver_intervention.dart @@ -1,5 +1,11 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; +import 'package:delivery/blocs/delivery_intervention/deliver_intervention.dart'; +import 'package:delivery/blocs/household_overview/household_overview.dart'; +import 'package:delivery/blocs/search_households/search_households.dart'; + +import 'package:delivery/router/delivery_router.gm.dart'; +import 'package:delivery/utils/utils.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/services/location_bloc.dart'; @@ -14,14 +20,15 @@ import 'package:flutter/scheduler.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:registration_delivery/models/entities/deliver_strategy_type.dart'; -import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; -import 'package:registration_delivery/utils/utils.dart'; +import 'package:registration/models/entities/additional_fields_type.dart'; +import 'package:registration/registration.dart'; + +import 'package:registration/utils/extensions/extensions.dart'; -import '../../models/entities/additional_fields_type.dart'; +import '../../models/entities/deliver_strategy_type.dart'; import '../../models/entities/status.dart'; +import '../../models/entities/task.dart'; +import '../../models/entities/task_resource.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../widgets/back_navigation_help_header.dart'; import '../../widgets/beneficiary/resource_beneficiary_card.dart'; @@ -74,7 +81,7 @@ class DeliverInterventionPageState BuildContext context, DeliverInterventionState deliverInterventionState, FormGroup form, - HouseholdMemberWrapper householdMember, + HouseholdMemberDeliveryWrapper householdMember, ProjectBeneficiaryModel projectBeneficiary) async { final lat = locationState.latitude; final long = locationState.longitude; @@ -83,7 +90,7 @@ class DeliverInterventionPageState task: _getTaskModel( context, form: form, - oldTask: RegistrationDeliverySingleton().beneficiaryType == + oldTask: DeliverySingleton().beneficiaryType == BeneficiaryType.household ? deliverInterventionState.tasks?.lastOrNull : null, @@ -97,11 +104,11 @@ class DeliverInterventionPageState longitude: long, ), isEditing: (deliverInterventionState.tasks ?? []).isNotEmpty && - RegistrationDeliverySingleton().beneficiaryType == + DeliverySingleton().beneficiaryType == BeneficiaryType.household ? true : false, - boundaryModel: RegistrationDeliverySingleton().boundary!, + boundaryModel: DeliverySingleton().boundary!, navigateToSummary: true, householdMemberWrapper: householdMember), ); @@ -113,7 +120,7 @@ class DeliverInterventionPageState BuildContext context, DeliverInterventionState deliverInterventionState, FormGroup form, - HouseholdMemberWrapper householdMember, + HouseholdMemberDeliveryWrapper householdMember, ProjectBeneficiaryModel projectBeneficiary) { if (context.mounted) { DigitComponentsUtils.showDialog( @@ -151,13 +158,13 @@ class DeliverInterventionPageState } return ProductVariantBlocWrapper( - child: BlocBuilder( + child: BlocBuilder( builder: (context, state) { - final householdMemberWrapper = state.householdMemberWrapper; + final householdMemberWrapper = state.householdMemberDeliveryWrapper; final projectBeneficiary = - RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual + DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? [householdMemberWrapper.projectBeneficiaries!.first] : householdMemberWrapper.projectBeneficiaries ?.where( @@ -174,7 +181,7 @@ class DeliverInterventionPageState DeliverInterventionState>( builder: (context, deliveryInterventionState) { List? productVariants = - RegistrationDeliverySingleton() + DeliverySingleton() .selectedProject ?.additionalDetails ?.projectType @@ -182,7 +189,7 @@ class DeliverInterventionPageState ?.isNotEmpty == true ? (fetchProductVariant( - RegistrationDeliverySingleton() + DeliverySingleton() .selectedProject ?.additionalDetails ?.projectType @@ -193,9 +200,10 @@ class DeliverInterventionPageState .deliveries?[ deliveryInterventionState.dose - 1], state.selectedIndividual, - state.householdMemberWrapper.household) + state.householdMemberDeliveryWrapper + .household) ?.productVariants) - : RegistrationDeliverySingleton() + : DeliverySingleton() .selectedProject ?.additionalDetails ?.projectType @@ -204,12 +212,12 @@ class DeliverInterventionPageState productVariantId: r.productVariantId)) .toList(); - final int numberOfDoses = (RegistrationDeliverySingleton() + final int numberOfDoses = (DeliverySingleton() .projectType ?.cycles ?.isNotEmpty == true) - ? (RegistrationDeliverySingleton() + ? (DeliverySingleton() .projectType ?.cycles?[deliveryInterventionState.cycle - 1] .deliveries @@ -394,7 +402,7 @@ class DeliverInterventionPageState .primary .primary2), ), - if (RegistrationDeliverySingleton() + if (DeliverySingleton() .beneficiaryType == BeneficiaryType.individual) ReactiveWrapperField( @@ -571,21 +579,18 @@ class DeliverInterventionPageState ), child: DigitDropdown( - items: - RegistrationDeliverySingleton() - .deliveryCommentOptions! - .map((e) => - DropdownItem( - name: localizations - .translate( - e), - code: e, - )) - .toList() - ..sort((a, b) => a - .code - .compareTo( - b.code)), + items: DeliverySingleton() + .deliveryCommentOptions! + .map((e) => + DropdownItem( + name: localizations + .translate( + e), + code: e, + )) + .toList() + ..sort((a, b) => a.code + .compareTo(b.code)), emptyItemText: localizations .translate(i18 @@ -696,14 +701,14 @@ class DeliverInterventionPageState address: address?.copyWith( relatedClientReferenceId: clientReferenceId, ), - tenantId: RegistrationDeliverySingleton().tenantId, + tenantId: DeliverySingleton().tenantId, rowVersion: 1, auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: DeliverySingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), ), clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: DeliverySingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), ), ); @@ -715,7 +720,7 @@ class DeliverInterventionPageState final deliveryComment = form.control(_deliveryCommentKey).value as String?; // Update the task with information from the form and other context task = task.copyWith( - projectId: RegistrationDeliverySingleton().projectId, + projectId: DeliverySingleton().projectId, resources: productvariantList .map((e) => TaskResourceModel( taskclientReferenceId: clientReferenceId, @@ -723,17 +728,17 @@ class DeliverInterventionPageState productVariantId: e?.id, isDelivered: true, taskId: task?.id, - tenantId: RegistrationDeliverySingleton().tenantId, + tenantId: DeliverySingleton().tenantId, rowVersion: oldTask?.rowVersion ?? 1, quantity: (((form.control(_quantityDistributedKey) as FormArray) .value)?[productvariantList.indexOf(e)]) .toString(), clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: DeliverySingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), ), auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: DeliverySingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), ), )) @@ -748,7 +753,7 @@ class DeliverInterventionPageState fields: [ AdditionalField( RegistrationDeliveryEnums.name.toValue(), - RegistrationDeliverySingleton().loggedInUser?.name, + DeliverySingleton().loggedInUser?.name, ), AdditionalField( AdditionalFieldsType.dateOfDelivery.toValue(), @@ -805,14 +810,14 @@ class DeliverInterventionPageState List? variants, ) { final bloc = context.read().state; - final overViewbloc = context.read().state; + final overViewbloc = context.read().state; _controllers.forEachIndexed((index, element) { _controllers.removeAt(index); }); // Add controllers for each product variant to the _controllers list. if (_controllers.isEmpty) { - final int r = RegistrationDeliverySingleton() + final int r = DeliverySingleton() .selectedProject ?.additionalDetails ?.projectType @@ -820,14 +825,14 @@ class DeliverInterventionPageState null ? 1 : fetchProductVariant( - RegistrationDeliverySingleton() + DeliverySingleton() .selectedProject ?.additionalDetails ?.projectType ?.cycles![bloc.cycle - 1] .deliveries?[bloc.dose - 1], overViewbloc.selectedIndividual, - overViewbloc.householdMemberWrapper.household) + overViewbloc.householdMemberDeliveryWrapper.household) ?.productVariants ?.length ?? 0; @@ -844,8 +849,7 @@ class DeliverInterventionPageState validators: [], ), _deliveryCommentKey: FormControl( - value: RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual + value: DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? (bloc.tasks?.lastOrNull?.additionalFields?.fields .where((a) => a.key == @@ -885,7 +889,7 @@ class DeliverInterventionPageState _quantityDistributedKey: FormArray([ ..._controllers.mapIndexed( (i, e) => FormControl( - value: RegistrationDeliverySingleton().beneficiaryType != + value: DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? int.tryParse( bloc.tasks?.lastOrNull?.resources?.elementAt(i).quantity ?? diff --git a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart b/packages/delivery/lib/pages/beneficiary/delivery_summary_page.dart similarity index 92% rename from packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart rename to packages/delivery/lib/pages/beneficiary/delivery_summary_page.dart index 2a4a3e8b34..ea8ccc7f33 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/delivery_summary_page.dart +++ b/packages/delivery/lib/pages/beneficiary/delivery_summary_page.dart @@ -1,4 +1,5 @@ import 'package:auto_route/auto_route.dart'; +import 'package:delivery/models/entities/status.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; @@ -8,14 +9,14 @@ import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/label_value_summary.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/blocs/delivery_intervention/deliver_intervention.dart'; -import 'package:registration_delivery/blocs/household_overview/household_overview.dart'; -import 'package:registration_delivery/models/entities/additional_fields_type.dart'; -import 'package:registration_delivery/models/entities/status.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; -import 'package:registration_delivery/utils/constants.dart'; -import 'package:registration_delivery/widgets/back_navigation_help_header.dart'; -import 'package:registration_delivery/widgets/component_wrapper/product_variant_bloc_wrapper.dart'; + +import 'package:delivery/blocs/household_overview/household_overview.dart'; +import 'package:registration/models/entities/additional_fields_type.dart'; +import 'package:registration/widgets/back_navigation_help_header.dart'; +import '../../blocs/delivery_intervention/deliver_intervention.dart'; +import '../../router/delivery_router.gm.dart'; +import '../../utils/constants.dart'; +import '../../widgets/component_wrapper/product_variant_bloc_wrapper.dart'; import '../../../widgets/localized.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -122,26 +123,25 @@ class DeliverySummaryPageState extends LocalizedState { task: deliverState.oldTask!, isEditing: (deliverState.tasks ?? []) .isNotEmpty && - RegistrationDeliverySingleton() + DeliverySingleton() .beneficiaryType == BeneficiaryType.household ? true : false, boundaryModel: - RegistrationDeliverySingleton() - .boundary!, + DeliverySingleton().boundary!, ), ); if (deliverState.futureDeliveries != null && deliverState.futureDeliveries!.isNotEmpty && - RegistrationDeliverySingleton() + DeliverySingleton() .projectType ?.cycles ?.isNotEmpty == true) { context.router.popUntilRouteWithName( - BeneficiaryWrapperRoute.name, + BeneficiaryDeliveryWrapperRoute.name, ); context.router.push( SplashAcknowledgementRoute( @@ -149,20 +149,18 @@ class DeliverySummaryPageState extends LocalizedState { ), ); } else { - final reloadState = - context.read(); + final reloadState = context + .read(); reloadState.add( HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton() - .projectId!, + projectId: DeliverySingleton().projectId!, projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, + DeliverySingleton().beneficiaryType!, ), ); context.router.popAndPush( - HouseholdAcknowledgementRoute( + HouseholdAcknowledgementDeliveryRoute( enableViewHousehold: true, ), ); @@ -375,7 +373,7 @@ class DeliverySummaryPageState extends LocalizedState { LabelValueSummary( padding: EdgeInsets.zero, heading: localizations.translate( - '${RegistrationDeliverySingleton().selectedProject?.projectType?.toUpperCase()}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), + '${DeliverySingleton().selectedProject?.projectType?.toUpperCase()}_${i18.deliverIntervention.deliveryDetailsLabel}_${deliverState.oldTask?.status}'), headingStyle: textTheme.headingL.copyWith( color: theme.colorTheme.primary.primary2, ), @@ -391,7 +389,7 @@ class DeliverySummaryPageState extends LocalizedState { .toValue() ? i18.deliverIntervention .reasonForRefusalLabel - : '${RegistrationDeliverySingleton().selectedProject?.projectType?.toUpperCase()}_${i18.deliverIntervention.typeOfResourceUsed}'), + : '${DeliverySingleton().selectedProject?.projectType?.toUpperCase()}_${i18.deliverIntervention.typeOfResourceUsed}'), value: deliverState.oldTask?.status == Status.administeredFailed .toValue() || diff --git a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart b/packages/delivery/lib/pages/beneficiary/dose_administered.dart similarity index 92% rename from packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart rename to packages/delivery/lib/pages/beneficiary/dose_administered.dart index 7d54bfb060..e263571964 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/dose_administered.dart +++ b/packages/delivery/lib/pages/beneficiary/dose_administered.dart @@ -10,17 +10,17 @@ import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:registration_delivery/blocs/app_localization.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; +import 'package:delivery/blocs/app_localization.dart'; +import 'package:delivery/blocs/household_overview/household_overview.dart'; +import 'package:registration/models/entities/additional_fields_type.dart'; +import 'package:registration/router/registration_router.gm.dart'; +import 'package:registration/utils/extensions/extensions.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../blocs/delivery_intervention/deliver_intervention.dart'; -import '../../blocs/household_overview/household_overview.dart'; -import '../../models/entities/additional_fields_type.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; import '../../models/entities/task_resource.dart'; -import '../../router/registration_delivery_router.gm.dart'; import '../../utils/constants.dart'; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; @@ -55,8 +55,8 @@ class DoseAdministeredPageState extends LocalizedState { @override Widget build(BuildContext context) { final theme = Theme.of(context); - final localizations = RegistrationDeliveryLocalization.of(context); - final overViewBloc = context.read().state; + final localizations = DeliveryLocalization.of(context); + final overViewBloc = context.read().state; final textTheme = theme.digitTextTheme(context); // Define a list of TableHeader objects for the header of a table final headerListResource = [ @@ -140,8 +140,7 @@ class DoseAdministeredPageState extends LocalizedState { event.add(DeliverInterventionSubmitEvent( task: TaskModel( projectId: - RegistrationDeliverySingleton() - .projectId, + DeliverySingleton().projectId, address: address?.copyWith( relatedClientReferenceId: clientReferenceId, @@ -153,21 +152,18 @@ class DoseAdministeredPageState extends LocalizedState { .oldTask ?.projectBeneficiaryClientReferenceId, tenantId: - RegistrationDeliverySingleton() - .tenantId, + DeliverySingleton().tenantId, rowVersion: 1, auditDetails: AuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, + createdBy: DeliverySingleton() + .loggedInUserUuid!, createdTime: context .millisecondsSinceEpoch(), ), clientAuditDetails: ClientAuditDetails( - createdBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, + createdBy: DeliverySingleton() + .loggedInUserUuid!, createdTime: context .millisecondsSinceEpoch(), ), @@ -176,7 +172,7 @@ class DoseAdministeredPageState extends LocalizedState { overViewBloc .selectedIndividual, overViewBloc - .householdMemberWrapper + .householdMemberDeliveryWrapper .household) ?.productVariants ?.map((variant) => @@ -184,7 +180,7 @@ class DoseAdministeredPageState extends LocalizedState { clientReferenceId: IdGen.i.identifier, tenantId: - RegistrationDeliverySingleton() + DeliverySingleton() .tenantId, taskclientReferenceId: clientReferenceId, @@ -195,7 +191,7 @@ class DoseAdministeredPageState extends LocalizedState { isDelivered: true, auditDetails: AuditDetails( createdBy: - RegistrationDeliverySingleton() + DeliverySingleton() .loggedInUserUuid!, createdTime: context .millisecondsSinceEpoch(), @@ -203,7 +199,7 @@ class DoseAdministeredPageState extends LocalizedState { clientAuditDetails: ClientAuditDetails( createdBy: - RegistrationDeliverySingleton() + DeliverySingleton() .loggedInUserUuid!, createdTime: context .millisecondsSinceEpoch(), @@ -271,14 +267,13 @@ class DoseAdministeredPageState extends LocalizedState { ), isEditing: false, boundaryModel: - RegistrationDeliverySingleton() - .boundary!, + DeliverySingleton().boundary!, )); } } - final reloadState = - context.read(); + final reloadState = context + .read(); Future.delayed( const Duration(milliseconds: 1000), @@ -286,10 +281,9 @@ class DoseAdministeredPageState extends LocalizedState { reloadState .add(HouseholdOverviewReloadEvent( projectId: - RegistrationDeliverySingleton() - .projectId!, + DeliverySingleton().projectId!, projectBeneficiaryType: - RegistrationDeliverySingleton() + DeliverySingleton() .beneficiaryType!, )); }, @@ -372,7 +366,7 @@ class DoseAdministeredPageState extends LocalizedState { e, overViewBloc.selectedIndividual, overViewBloc - .householdMemberWrapper + .householdMemberDeliveryWrapper .household)! .productVariants! .map((ele) { @@ -427,7 +421,7 @@ class DoseAdministeredPageState extends LocalizedState { overViewBloc .selectedIndividual, overViewBloc - .householdMemberWrapper + .householdMemberDeliveryWrapper .household)! .condition!), }, diff --git a/packages/registration_delivery/lib/pages/beneficiary/facility_selection.dart b/packages/delivery/lib/pages/beneficiary/facility_selection.dart similarity index 90% rename from packages/registration_delivery/lib/pages/beneficiary/facility_selection.dart rename to packages/delivery/lib/pages/beneficiary/facility_selection.dart index 62d80a1f63..33666f6745 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/facility_selection.dart +++ b/packages/delivery/lib/pages/beneficiary/facility_selection.dart @@ -5,7 +5,7 @@ import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:flutter/material.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:registration_delivery/blocs/app_localization.dart'; +import 'package:delivery/blocs/app_localization.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../widgets/back_navigation_help_header.dart'; @@ -24,8 +24,7 @@ class FacilitySelectionPage extends StatelessWidget { @override Widget build(BuildContext context) { - RegistrationDeliveryLocalization localizations = - RegistrationDeliveryLocalization.of(context); + DeliveryLocalization localizations = DeliveryLocalization.of(context); final theme = Theme.of(context); final BorderSide borderSide = BorderSide( color: theme.colorScheme.outline, @@ -62,7 +61,7 @@ class FacilitySelectionPage extends StatelessWidget { color: Colors.white, child: Padding( padding: const EdgeInsets.symmetric( - horizontal: spacer2*2, + horizontal: spacer2 * 2, ), child: Column( children: [ @@ -83,9 +82,9 @@ class FacilitySelectionPage extends StatelessWidget { padding: const EdgeInsets.all(spacer2), child: ReactiveWrapperField( formControlName: _facilityName, - builder: (field)=> DigitSearchFormInput( - onChange: (value){ - form.control(_facilityName).value=value; + builder: (field) => DigitSearchFormInput( + onChange: (value) { + form.control(_facilityName).value = value; }, ), ), @@ -97,23 +96,22 @@ class FacilitySelectionPage extends StatelessWidget { ), SliverList( delegate: SliverChildBuilderDelegate( - (context, index) { + (context, index) { final facility = filteredFacilities[index]; return Container( color: Colors.white, - padding: const EdgeInsets.symmetric( - horizontal: spacer2 - ), + padding: + const EdgeInsets.symmetric(horizontal: spacer2), child: Container( margin: const EdgeInsets.symmetric( horizontal: spacer2), decoration: BoxDecoration( - color: - DigitTheme.instance.colors.light.paperPrimary, + color: DigitTheme + .instance.colors.light.paperPrimary, border: Border( top: - index == 0 ? borderSide : BorderSide.none, + index == 0 ? borderSide : BorderSide.none, bottom: index == filteredFacilities.length - 1 ? borderSide : BorderSide.none, diff --git a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart b/packages/delivery/lib/pages/beneficiary/household_overview.dart similarity index 59% rename from packages/registration_delivery/lib/pages/beneficiary/household_overview.dart rename to packages/delivery/lib/pages/beneficiary/household_overview.dart index 5fe7ccb553..ab26d51a8d 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/household_overview.dart +++ b/packages/delivery/lib/pages/beneficiary/household_overview.dart @@ -1,5 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; +import 'package:delivery/blocs/search_households/search_households.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/household_type.dart'; import 'package:digit_ui_components/enum/app_enums.dart'; @@ -7,28 +9,25 @@ import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/theme/digit_theme.dart'; import 'package:digit_ui_components/theme/spacers.dart'; import 'package:digit_ui_components/utils/date_utils.dart'; -import 'package:digit_ui_components/widgets/atoms/digit_action_card.dart'; import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; import 'package:digit_ui_components/widgets/atoms/digit_chip.dart'; import 'package:digit_ui_components/widgets/atoms/digit_search_bar.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; -import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; import 'package:digit_ui_components/widgets/scrollable_content.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:delivery/blocs/search_households/search_bloc_common_wrapper.dart'; + +import 'package:registration/models/entities/registration_delivery_enums.dart'; + import 'package:survey_form/survey_form.dart'; +import '../../blocs/household_overview/household_overview.dart'; import '/widgets/status_filter/status_filter.dart'; -import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; import '../../blocs/delivery_intervention/deliver_intervention.dart'; -import '../../blocs/household_overview/household_overview.dart'; -import '../../blocs/search_households/search_bloc_common_wrapper.dart'; -import '../../blocs/search_households/search_households.dart'; -import '../../models/entities/household.dart'; -import '../../models/entities/registration_delivery_enums.dart'; + import '../../models/entities/status.dart'; -import '../../router/registration_delivery_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; @@ -37,15 +36,16 @@ import '../../widgets/member_card/member_card.dart'; import '../../widgets/table_card/table_card.dart'; @RoutePage() -class HouseholdOverviewPage extends LocalizedStatefulWidget { - const HouseholdOverviewPage({super.key, super.appLocalizations}); +class HouseholdOverviewDeliveryPage extends LocalizedStatefulWidget { + const HouseholdOverviewDeliveryPage({super.key, super.appLocalizations}); @override - State createState() => _HouseholdOverviewPageState(); + State createState() => + _HouseholdOverviewDeliveryPageState(); } -class _HouseholdOverviewPageState - extends LocalizedState { +class _HouseholdOverviewDeliveryPageState + extends LocalizedState { final TextEditingController searchController = TextEditingController(); int offset = 0; int limit = 10; @@ -63,18 +63,19 @@ class _HouseholdOverviewPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); - final beneficiaryType = RegistrationDeliverySingleton().beneficiaryType!; + final beneficiaryType = DeliverySingleton().beneficiaryType!; final textTheme = theme.digitTextTheme(context); return PopScope( onPopInvoked: (didPop) async { context - .read() + .read() .searchHouseholdsBloc .add(const SearchHouseholdsClearEvent()); context.router.maybePop(); }, - child: BlocBuilder( + child: BlocBuilder( builder: (ctx, state) { return Scaffold( body: state.loading @@ -99,7 +100,7 @@ class _HouseholdOverviewPageState child: BackNavigationHelpHeaderWidget( handleBack: () { context - .read() + .read() .add(const SearchHouseholdsEvent.clear()); }, ), @@ -118,7 +119,7 @@ class _HouseholdOverviewPageState BlocBuilder( builder: (ctx, deliverInterventionState) => - state.householdMemberWrapper.tasks + state.householdMemberDeliveryWrapper.tasks ?.lastOrNull?.status == Status.administeredSuccess.toValue() ? Padding( @@ -126,11 +127,11 @@ class _HouseholdOverviewPageState vertical: spacer2), child: DigitButton( label: localizations.translate( - '${RegistrationDeliverySingleton().selectedProject!.projectType}_${i18.memberCard.deliverDetailsUpdateLabel}', + '${DeliverySingleton().selectedProject!.projectType}_${i18.memberCard.deliverDetailsUpdateLabel}', ), capitalizeLetters: false, isDisabled: state - .householdMemberWrapper + .householdMemberDeliveryWrapper .tasks ?.lastOrNull ?.status == @@ -152,7 +153,7 @@ class _HouseholdOverviewPageState element.code .toString() .contains( - '${RegistrationDeliverySingleton().selectedProject!.name}.${RegistrationDeliveryEnums.eligibility.toValue()}')) + '${DeliverySingleton().selectedProject!.name}.${RegistrationDeliveryEnums.eligibility.toValue()}')) .toList() .isEmpty) { context.router.push( @@ -162,14 +163,14 @@ class _HouseholdOverviewPageState navigateToChecklist( ctx, state - .householdMemberWrapper + .householdMemberDeliveryWrapper .household! .clientReferenceId); } }); callReloadEvent( offset: state - .householdMemberWrapper + .householdMemberDeliveryWrapper .members! .length, limit: limit); @@ -178,18 +179,18 @@ class _HouseholdOverviewPageState ) : DigitButton( label: localizations.translate( - '${RegistrationDeliverySingleton().selectedProject!.projectType}_${i18.householdOverView.householdOverViewActionText}', + '${DeliverySingleton().selectedProject!.projectType}_${i18.householdOverView.householdOverViewActionText}', ), capitalizeLetters: false, type: DigitButtonType.primary, size: DigitButtonSize.large, mainAxisSize: MainAxisSize.max, - isDisabled: (state.householdMemberWrapper + isDisabled: (state.householdMemberDeliveryWrapper .projectBeneficiaries ?? []) .isEmpty || state - .householdMemberWrapper + .householdMemberDeliveryWrapper .tasks ?.lastOrNull ?.status == @@ -199,10 +200,10 @@ class _HouseholdOverviewPageState : false, onPressed: () async { final bloc = ctx.read< - HouseholdOverviewBloc>(); + HouseholdOverviewDeliveryBloc>(); final projectId = - RegistrationDeliverySingleton() + DeliverySingleton() .projectId!; bloc.add( @@ -223,11 +224,11 @@ class _HouseholdOverviewPageState element.code .toString() .contains( - '${RegistrationDeliverySingleton().selectedProject?.name}.${RegistrationDeliveryEnums.iec.toValue()}') || + '${DeliverySingleton().selectedProject?.name}.${RegistrationDeliveryEnums.iec.toValue()}') || element.code .toString() .contains( - '${RegistrationDeliverySingleton().selectedProject!.name}.${RegistrationDeliveryEnums.eligibility.toValue()}')) + '${DeliverySingleton().selectedProject!.name}.${RegistrationDeliveryEnums.eligibility.toValue()}')) .toList() .isEmpty) { context.router.push( @@ -236,7 +237,7 @@ class _HouseholdOverviewPageState } else { navigateToChecklist( ctx, - RegistrationDeliverySingleton() + DeliverySingleton() .beneficiaryType == BeneficiaryType .individual @@ -244,14 +245,14 @@ class _HouseholdOverviewPageState .selectedIndividual! .clientReferenceId : state - .householdMemberWrapper + .householdMemberDeliveryWrapper .household! .clientReferenceId); } }); callReloadEvent( offset: state - .householdMemberWrapper + .householdMemberDeliveryWrapper .members! .length, limit: limit); @@ -271,185 +272,33 @@ class _HouseholdOverviewPageState crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ - if ((state.householdMemberWrapper + if ((state.householdMemberDeliveryWrapper .projectBeneficiaries ?? []) .isNotEmpty) Align( alignment: Alignment.centerLeft, - child: DigitButton( - onPressed: () { - final projectId = - RegistrationDeliverySingleton() - .projectId!; - - final bloc = context - .read(); - bloc.add( - HouseholdOverviewReloadEvent( - projectId: projectId, - projectBeneficiaryType: - beneficiaryType, - ), - ); - showDialog( - context: context, - builder: (ctx) => DigitActionCard( - actions: [ - DigitButton( - capitalizeLetters: false, - prefixIcon: Icons.edit, - label: (RegistrationDeliverySingleton() - .householdType == - HouseholdType - .community) - ? localizations.translate(i18 - .householdOverView - .clfOverViewEditLabel) - : localizations - .translate( - i18.householdOverView - .householdOverViewEditLabel, - ), - type: DigitButtonType - .secondary, - size: DigitButtonSize.large, - onPressed: () async { - Navigator.of( - context, - rootNavigator: true, - ).pop(); - - HouseholdMemberWrapper - wrapper = state - .householdMemberWrapper; - - final timestamp = wrapper - .headOfHousehold - ?.clientAuditDetails - ?.createdTime; - final date = DateTime - .fromMillisecondsSinceEpoch( - timestamp ?? - DateTime.now() - .millisecondsSinceEpoch, - ); - - final address = wrapper - .household?.address; - - if (address == null) - return; - - final projectBeneficiary = state - .householdMemberWrapper - .projectBeneficiaries - ?.firstWhereOrNull( - (element) => - element - .beneficiaryClientReferenceId == - wrapper.household - ?.clientReferenceId, - ); - - await context.router.root - .push( - BeneficiaryRegistrationWrapperRoute( - initialState: - BeneficiaryRegistrationEditHouseholdState( - addressModel: - address, - individualModel: state - .householdMemberWrapper - .members ?? - [], - householdModel: state - .householdMemberWrapper - .household!, - registrationDate: - date, - projectBeneficiaryModel: - projectBeneficiary, - ), - children: [ - HouseholdLocationRoute(), - ], - ), - ); - callReloadEvent( - offset: 0, limit: 10); - }, - ), - ], - ), - ); - }, - label: - (RegistrationDeliverySingleton() - .householdType == - HouseholdType.community) - ? localizations.translate(i18 - .householdOverView - .clfOverViewEditIconText) - : localizations.translate( - i18.householdOverView - .householdOverViewEditIconText, - ), - type: DigitButtonType.tertiary, - size: DigitButtonSize.medium, - prefixIcon: Icons.edit, - capitalizeLetters: false, - ), - ), - - ///Old UI Format - // BlocBuilder( - // builder: (ctx, deliverInterventionState) => - // Offstage( - // offstage: beneficiaryType == - // BeneficiaryType.individual, - // child: Align( - // alignment: Alignment.centerLeft, - // child: DigitIconButton( - // icon: getStatusAttributes(state, - // deliverInterventionState)['icon'], - // iconText: localizations.translate( - // getStatusAttributes(state, - // deliverInterventionState)[ - // 'textLabel'], - // ), // [TODO: map task status accordingly based on projectBeneficiaries and tasks] - // iconTextColor: getStatusAttributes(state, - // deliverInterventionState)['color'], - // iconColor: getStatusAttributes(state, - // deliverInterventionState)['color'], - // ), - // ), - // ), - // ), - Align( - alignment: Alignment.centerLeft, - child: Padding( - padding: const EdgeInsets.all(spacer2), - child: Text( - RegistrationDeliverySingleton() - .householdType != - null && - RegistrationDeliverySingleton() - .householdType == - HouseholdType.community - ? localizations.translate(i18 - .householdOverView - .clfOverviewLabel) - : localizations.translate(i18 - .householdOverView - .householdOverViewLabel), - style: textTheme.headingXl.copyWith( - color: theme.colorTheme.primary.primary2 + child: Padding( + padding: + const EdgeInsets.all(spacer2), + child: Text( + DeliverySingleton().householdType != + null && + DeliverySingleton() + .householdType == + HouseholdType.community + ? localizations.translate(i18 + .householdOverView + .clfOverviewLabel) + : localizations.translate(i18 + .householdOverView + .householdOverViewLabel), + style: textTheme.headingXl.copyWith( + color: theme.colorTheme.primary + .primary2), ), ), ), - ), Padding( padding: const EdgeInsets.only( left: spacer2, @@ -464,8 +313,7 @@ class _HouseholdOverviewPageState beneficiaryType == BeneficiaryType.household; - if (RegistrationDeliverySingleton() - .householdType == + if (DeliverySingleton().householdType == HouseholdType.community) { return Column( children: [ @@ -473,7 +321,7 @@ class _HouseholdOverviewPageState localizations.translate(i18 .householdOverView .instituteNameLabel): state - .householdMemberWrapper + .householdMemberDeliveryWrapper .household ?.address ?.buildingName ?? @@ -482,13 +330,15 @@ class _HouseholdOverviewPageState localizations.translate( i18.deliverIntervention .memberCountText, - ): state.householdMemberWrapper - .household?.memberCount, + ): state + .householdMemberDeliveryWrapper + .household + ?.memberCount, localizations.translate( i18.householdLocation .administrationAreaFormLabel, ): localizations.translate(state - .householdMemberWrapper + .householdMemberDeliveryWrapper .headOfHousehold ?.address ?.first @@ -507,7 +357,7 @@ class _HouseholdOverviewPageState localizations.translate(i18 .householdOverView .householdOverViewHouseholdHeadNameLabel): state - .householdMemberWrapper + .householdMemberDeliveryWrapper .headOfHousehold ?.name ?.givenName ?? @@ -517,7 +367,7 @@ class _HouseholdOverviewPageState i18.householdLocation .administrationAreaFormLabel, ): localizations.translate(state - .householdMemberWrapper + .householdMemberDeliveryWrapper .headOfHousehold ?.address ?.first @@ -527,8 +377,10 @@ class _HouseholdOverviewPageState localizations.translate( i18.deliverIntervention .memberCountText, - ): state.householdMemberWrapper - .household?.memberCount, + ): state + .householdMemberDeliveryWrapper + .household + ?.memberCount, if (shouldShowStatus) localizations.translate(i18 .beneficiaryDetails @@ -544,8 +396,7 @@ class _HouseholdOverviewPageState ); }), ), - if (RegistrationDeliverySingleton() - .householdType == + if (DeliverySingleton().householdType == HouseholdType.community) ...[ Padding( padding: const EdgeInsets.only( @@ -631,7 +482,7 @@ class _HouseholdOverviewPageState child: DigitChip( label: '${localizations.translate(getStatus(selectedFilters[index]))}' - ' (${state.householdMemberWrapper.members!.length})', + ' (${state.householdMemberDeliveryWrapper.members!.length})', onItemDelete: () { selectedFilters.remove( selectedFilters[ @@ -647,18 +498,19 @@ class _HouseholdOverviewPageState ) : const Offstage(), Column( - children: (state.householdMemberWrapper - .members ?? - []) - .map( + children: + (state.householdMemberDeliveryWrapper + .members ?? + []) + .map( (e) { final isHead = state - .householdMemberWrapper + .householdMemberDeliveryWrapper .headOfHousehold ?.clientReferenceId == e.clientReferenceId; final projectBeneficiaryId = state - .householdMemberWrapper + .householdMemberDeliveryWrapper .projectBeneficiaries ?.firstWhereOrNull((b) => b.beneficiaryClientReferenceId == @@ -666,19 +518,19 @@ class _HouseholdOverviewPageState ?.clientReferenceId; final projectBeneficiary = state - .householdMemberWrapper + .householdMemberDeliveryWrapper .projectBeneficiaries ?.where( (element) => element .beneficiaryClientReferenceId == - (RegistrationDeliverySingleton() + (DeliverySingleton() .beneficiaryType == BeneficiaryType .individual ? e.clientReferenceId : state - .householdMemberWrapper + .householdMemberDeliveryWrapper .household ?.clientReferenceId), ) @@ -688,7 +540,21 @@ class _HouseholdOverviewPageState []) .isNotEmpty ? state - .householdMemberWrapper.tasks + .householdMemberDeliveryWrapper + .tasks + ?.where((element) => + element + .projectBeneficiaryClientReferenceId == + projectBeneficiary?.first + .clientReferenceId) + .toList() + : null; + final referralData = (projectBeneficiary ?? + []) + .isNotEmpty + ? state + .householdMemberDeliveryWrapper + .referrals ?.where((element) => element .projectBeneficiaryClientReferenceId == @@ -696,23 +562,11 @@ class _HouseholdOverviewPageState .clientReferenceId) .toList() : null; - final referralData = - (projectBeneficiary ?? []) - .isNotEmpty - ? state.householdMemberWrapper - .referrals - ?.where((element) => - element - .projectBeneficiaryClientReferenceId == - projectBeneficiary - ?.first - .clientReferenceId) - .toList() - : null; final sideEffectData = taskData != null && taskData.isNotEmpty - ? state.householdMemberWrapper + ? state + .householdMemberDeliveryWrapper .sideEffects ?.where((element) => element @@ -742,7 +596,7 @@ class _HouseholdOverviewPageState ).months : 0; final currentCycle = - RegistrationDeliverySingleton() + DeliverySingleton() .projectType ?.cycles ?.firstWhereOrNull( @@ -772,81 +626,18 @@ class _HouseholdOverviewPageState projectBeneficiary ?? [], tasks: taskData, sideEffects: sideEffectData, - editMemberAction: () async { - final bloc = ctx.read< - HouseholdOverviewBloc>(); - - Navigator.of( - context, - rootNavigator: true, - ).pop(); - - final address = e.address; - if (address == null || - address.isEmpty) { - return; - } - - final projectId = - RegistrationDeliverySingleton() - .projectId!; - bloc.add( - HouseholdOverviewReloadEvent( - projectId: projectId, - projectBeneficiaryType: - beneficiaryType, - ), - ); - - await context.router.root.push( - BeneficiaryRegistrationWrapperRoute( - initialState: - BeneficiaryRegistrationEditIndividualState( - individualModel: e, - householdModel: state - .householdMemberWrapper - .household!, - addressModel: address.first, - projectBeneficiaryModel: state - .householdMemberWrapper - .projectBeneficiaries - ?.firstWhereOrNull( - (element) => - element - .beneficiaryClientReferenceId == - (RegistrationDeliverySingleton() - .beneficiaryType == - BeneficiaryType - .individual - ? e - .clientReferenceId - : state - .householdMemberWrapper - .household - ?.clientReferenceId), - ), - ), - children: [ - IndividualDetailsRoute( - isHeadOfHousehold: isHead, - ), - ], - ), - ); - callReloadEvent( - offset: 0, limit: 10); - }, setAsHeadAction: () { ctx - .read() + .read< + HouseholdOverviewDeliveryBloc>() .add( HouseholdOverviewSetAsHeadEvent( individualModel: e, projectId: - RegistrationDeliverySingleton() + DeliverySingleton() .projectId!, householdModel: state - .householdMemberWrapper + .householdMemberDeliveryWrapper .household!, projectBeneficiaryType: beneficiaryType, @@ -858,91 +649,23 @@ class _HouseholdOverviewPageState rootNavigator: true, ).pop(); }, - deleteMemberAction: () { - showCustomPopup( - context: context, - builder: (BuildContext - context) => - Popup( - title: localizations - .translate(i18 - .householdOverView - .householdOverViewActionCardTitle), - type: PopUpType.simple, - actions: [ - DigitButton( - label: localizations - .translate(i18 - .householdOverView - .householdOverViewPrimaryActionLabel), - onPressed: () { - Navigator.of( - context, - rootNavigator: - true, - ) - ..pop() - ..pop(); - context - .read< - HouseholdOverviewBloc>() - .add( - HouseholdOverviewEvent - .selectedIndividual( - individualModel: - e, - ), - ); - context.router.push( - ReasonForDeletionRoute( - isHousholdDelete: - false, - ), - ); - }, - type: DigitButtonType - .primary, - size: DigitButtonSize - .large), - DigitButton( - label: localizations - .translate(i18 - .householdOverView - .householdOverViewSecondaryActionLabel), - onPressed: () { - Navigator.of( - context, - rootNavigator: - true, - ).pop(); - }, - type: DigitButtonType - .tertiary, - size: DigitButtonSize - .large) - ]), - ); - }, - isNotEligible: - RegistrationDeliverySingleton() - .projectType - ?.cycles != - null - ? !checkEligibilityForAgeAndSideEffect( - DigitDOBAgeConvertor( - years: ageInYears, - months: ageInMonths, - ), - RegistrationDeliverySingleton() - .projectType, - (taskData ?? []) - .isNotEmpty - ? taskData - ?.lastOrNull - : null, - sideEffectData, - ) - : false, + isNotEligible: DeliverySingleton() + .projectType + ?.cycles != + null + ? !checkEligibilityForAgeAndSideEffect( + DigitDOBAgeConvertor( + years: ageInYears, + months: ageInMonths, + ), + DeliverySingleton() + .projectType, + (taskData ?? []).isNotEmpty + ? taskData?.lastOrNull + : null, + sideEffectData, + ) + : false, name: e.name?.givenName ?? ' - - ', years: (e.dateOfBirth == null ? null @@ -989,20 +712,6 @@ class _HouseholdOverviewPageState ), ], ), - DigitButton( - mainAxisSize: MainAxisSize.max, - onPressed: () => addIndividual( - context, - state.householdMemberWrapper.household!, - ), - label: localizations.translate( - i18.householdOverView - .householdOverViewAddActionText, - ), - prefixIcon: Icons.add_circle, - type: DigitButtonType.tertiary, - size: DigitButtonSize.large, - ), ]), ), ], @@ -1014,34 +723,8 @@ class _HouseholdOverviewPageState ); } - addIndividual(BuildContext context, HouseholdModel household) async { - final bloc = context.read(); - - final address = household.address; - - if (address == null) return; - bloc.add( - HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!, - ), - ); - await context.router.push( - BeneficiaryRegistrationWrapperRoute( - initialState: BeneficiaryRegistrationAddMemberState( - addressModel: address, - householdModel: household, - ), - children: [ - IndividualDetailsRoute(), - ], - ), - ); - } - bool isOutsideProjectDateRange() { - final project = RegistrationDeliverySingleton().selectedProject; + final project = DeliverySingleton().selectedProject; if (project?.startDate != null && project?.endDate != null) { final now = DateTime.now().millisecondsSinceEpoch; @@ -1054,31 +737,34 @@ class _HouseholdOverviewPageState return false; } - getStatusAttributes(HouseholdOverviewState state, + getStatusAttributes(HouseholdOverviewDeliveryState state, DeliverInterventionState deliverInterventionState) { var textLabel = i18.householdOverView.householdOverViewNotRegisteredIconLabel; var color = DigitTheme.instance.colorScheme.error; var icon = Icons.info_rounded; - if ((state.householdMemberWrapper.projectBeneficiaries ?? []).isNotEmpty) { - textLabel = state.householdMemberWrapper.tasks?.isNotEmpty ?? false - ? getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue() == + if ((state.householdMemberDeliveryWrapper.projectBeneficiaries ?? []) + .isNotEmpty) { + textLabel = state.householdMemberDeliveryWrapper.tasks?.isNotEmpty ?? + false + ? getTaskStatus(state.householdMemberDeliveryWrapper.tasks ?? []) + .toValue() == Status.administeredSuccess.toValue() - ? '${RegistrationDeliverySingleton().selectedProject!.projectType}_${getTaskStatus(state.householdMemberWrapper.tasks ?? []).toValue()}' - : getTaskStatus(state.householdMemberWrapper.tasks ?? []) + ? '${DeliverySingleton().selectedProject!.projectType}_${getTaskStatus(state.householdMemberDeliveryWrapper.tasks ?? []).toValue()}' + : getTaskStatus(state.householdMemberDeliveryWrapper.tasks ?? []) .toValue() : Status.registered.toValue(); - color = state.householdMemberWrapper.tasks?.isNotEmpty ?? false - ? (state.householdMemberWrapper.tasks?.lastOrNull?.status == + color = state.householdMemberDeliveryWrapper.tasks?.isNotEmpty ?? false + ? (state.householdMemberDeliveryWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() ? DigitTheme.instance.colorScheme.onSurfaceVariant : DigitTheme.instance.colorScheme.error) : DigitTheme.instance.colorScheme.onSurfaceVariant; - icon = state.householdMemberWrapper.tasks?.isNotEmpty ?? false - ? (state.householdMemberWrapper.tasks?.lastOrNull?.status == + icon = state.householdMemberDeliveryWrapper.tasks?.isNotEmpty ?? false + ? (state.householdMemberDeliveryWrapper.tasks?.lastOrNull?.status == Status.administeredSuccess.toValue() ? Icons.check_circle : Icons.info_rounded) @@ -1103,13 +789,12 @@ class _HouseholdOverviewPageState required int limit, }) { if (mounted) { - final bloc = context.read(); + final bloc = context.read(); bloc.add( HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!, + projectId: DeliverySingleton().projectId!, + projectBeneficiaryType: DeliverySingleton().beneficiaryType!, offset: offset, limit: limit, searchByName: searchController.text.trim().length > 2 @@ -1194,14 +879,12 @@ class _HouseholdOverviewPageState getFilters() { bool hasFilters; - if (RegistrationDeliverySingleton().householdType == - HouseholdType.community) { - hasFilters = RegistrationDeliverySingleton().searchCLFFilters != null && - RegistrationDeliverySingleton().searchCLFFilters!.isNotEmpty; + if (DeliverySingleton().householdType == HouseholdType.community) { + hasFilters = DeliverySingleton().searchCLFFilters != null && + DeliverySingleton().searchCLFFilters!.isNotEmpty; } else { - hasFilters = - RegistrationDeliverySingleton().searchHouseHoldFilter != null && - RegistrationDeliverySingleton().searchHouseHoldFilter!.isNotEmpty; + hasFilters = DeliverySingleton().searchHouseHoldFilter != null && + DeliverySingleton().searchHouseHoldFilter!.isNotEmpty; } return hasFilters; } diff --git a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart b/packages/delivery/lib/pages/beneficiary/record_past_delivery_details.dart similarity index 89% rename from packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart rename to packages/delivery/lib/pages/beneficiary/record_past_delivery_details.dart index 574d52f6c6..ba9ea1344a 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/record_past_delivery_details.dart +++ b/packages/delivery/lib/pages/beneficiary/record_past_delivery_details.dart @@ -1,5 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:collection/collection.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; +import 'package:delivery/utils/utils.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/models/RadioButtonModel.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; @@ -8,16 +10,15 @@ import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:registration_delivery/blocs/app_localization.dart'; -import 'package:registration_delivery/utils/utils.dart'; +import 'package:delivery/blocs/app_localization.dart'; +import 'package:delivery/blocs/household_overview/household_overview.dart'; +import 'package:registration/models/entities/additional_fields_type.dart'; +import 'package:delivery/router/delivery_router.gm.dart' as delivery_router; import '../../../utils/i18_key_constants.dart' as i18; import '../../blocs/delivery_intervention/deliver_intervention.dart'; -import '../../blocs/household_overview/household_overview.dart'; -import '../../models/entities/additional_fields_type.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; -import '../../router/registration_delivery_router.gm.dart'; import '../../utils/constants.dart'; import '../../widgets/back_navigation_help_header.dart'; import '../../widgets/localized.dart'; @@ -43,7 +44,7 @@ class RecordPastDeliveryDetailsPageState @override Widget build(BuildContext context) { final theme = Theme.of(context); - final localizations = RegistrationDeliveryLocalization.of(context); + final localizations = DeliveryLocalization.of(context); final router = context.router; final textTheme = theme.digitTextTheme(context); @@ -105,8 +106,8 @@ class RecordPastDeliveryDetailsPageState router.maybePop(); final event = context.read(); - final bloc = - context.read(); + final bloc = context + .read(); for (int i = 0; i < (futureTaskList ?? []).length; @@ -133,12 +134,12 @@ class RecordPastDeliveryDetailsPageState task: result, isEditing: true, boundaryModel: - RegistrationDeliverySingleton() - .boundary!, + DeliverySingleton().boundary!, )); } context.router.popUntilRouteWithName( - HouseholdOverviewRoute.name, + delivery_router + .HouseholdOverviewDeliveryRoute.name, ); Navigator.of(ctx).pop(); final response = await router.push( @@ -149,10 +150,9 @@ class RecordPastDeliveryDetailsPageState if (response == null) { bloc.add(HouseholdOverviewReloadEvent( projectId: - RegistrationDeliverySingleton() - .projectId!, + DeliverySingleton().projectId!, projectBeneficiaryType: - RegistrationDeliverySingleton() + DeliverySingleton() .beneficiaryType!, )); } @@ -193,25 +193,24 @@ class RecordPastDeliveryDetailsPageState task: result, isEditing: true, boundaryModel: - RegistrationDeliverySingleton() - .boundary!, + DeliverySingleton().boundary!, )); } - final bloc = - context.read(); + final bloc = context + .read(); bloc.add(HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton() - .projectId!, + projectId: DeliverySingleton().projectId!, projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, + DeliverySingleton().beneficiaryType!, )); event.add(DeliverInterventionSearchEvent( taskSearch: TaskSearchModel( projectBeneficiaryClientReferenceId: - bloc.state.householdMemberWrapper + bloc + .state + .householdMemberDeliveryWrapper .projectBeneficiaries ?.map( (e) => e.clientReferenceId) @@ -219,19 +218,19 @@ class RecordPastDeliveryDetailsPageState ), )); context.router.popUntilRouteWithName( - SearchBeneficiaryRoute.name, + delivery_router + .SearchBeneficiaryDeliveryRoute.name, ); bloc.add(HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton() - .projectId!, + projectId: DeliverySingleton().projectId!, projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, + DeliverySingleton().beneficiaryType!, )); Navigator.of(ctx).pop(); router.push( - BeneficiaryDetailsRoute(), + delivery_router + .BeneficiaryDetailsDeliveryRoute(), ); }, type: DigitButtonType.primary, diff --git a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart b/packages/delivery/lib/pages/beneficiary/refer_beneficiary.dart similarity index 52% rename from packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart rename to packages/delivery/lib/pages/beneficiary/refer_beneficiary.dart index 4c718bf083..eded0c2bd7 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refer_beneficiary.dart +++ b/packages/delivery/lib/pages/beneficiary/refer_beneficiary.dart @@ -8,18 +8,18 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; +import 'package:delivery/blocs/household_overview/household_overview.dart'; +import 'package:registration/models/entities/additional_fields_type.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; +import 'package:registration/utils/extensions/extensions.dart'; +import 'package:registration/widgets/inventory/no_facilities_assigned_dialog.dart'; -import '../../blocs/household_overview/household_overview.dart'; import '../../blocs/referral_management/referral_management.dart'; -import '../../models/entities/additional_fields_type.dart'; import '../../models/entities/referral.dart'; -import '../../router/registration_delivery_router.gm.dart'; import '../../utils/constants.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; -import '../../widgets/inventory/no_facilities_assigned_dialog.dart'; import '../../widgets/localized.dart'; @RoutePage() @@ -51,7 +51,7 @@ class ReferBeneficiaryPageState extends LocalizedState { @override void initState() { - reasons = (RegistrationDeliverySingleton().referralReasons ?? []) + reasons = (DeliverySingleton().referralReasons ?? []) .map((e) => KeyValue(e, e)) .toList(); super.initState(); @@ -137,8 +137,7 @@ class ReferBeneficiaryPageState extends LocalizedState { : 'FACILITY'; final recipientId = selectedProjectFacilityId == 'Community Health Worker' - ? RegistrationDeliverySingleton() - .loggedInUserUuid + ? DeliverySingleton().loggedInUserUuid : selectedProjectFacilityId; final referralComment = form.control(_referralComments).value; @@ -147,48 +146,41 @@ class ReferBeneficiaryPageState extends LocalizedState { event.add(ReferralSubmitEvent( ReferralModel( clientReferenceId: IdGen.i.identifier, - projectId: - RegistrationDeliverySingleton().projectId, + projectId: DeliverySingleton().projectId, projectBeneficiaryClientReferenceId: widget.projectBeneficiaryClientRefId, - referrerId: RegistrationDeliverySingleton() - .loggedInUserUuid, + referrerId: + DeliverySingleton().loggedInUserUuid, recipientId: recipientId, recipientType: recipientType, reasons: [reason], - tenantId: - RegistrationDeliverySingleton().tenantId, + tenantId: DeliverySingleton().tenantId, rowVersion: 1, auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, + createdBy: + DeliverySingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid, + DeliverySingleton().loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() - .loggedInUserUuid!, + createdBy: + DeliverySingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), lastModifiedBy: - RegistrationDeliverySingleton() - .loggedInUserUuid!, + DeliverySingleton().loggedInUserUuid!, lastModifiedTime: context.millisecondsSinceEpoch(), ), additionalFields: ReferralAdditionalFields( version: 1, fields: [ - AdditionalField( - "boundaryCode", - RegistrationDeliverySingleton() - .boundary - ?.code), + AdditionalField("boundaryCode", + DeliverySingleton().boundary?.code), if (referralComment != null && referralComment .toString() @@ -206,21 +198,19 @@ class ReferBeneficiaryPageState extends LocalizedState { )); final reloadState = - context.read(); + context.read(); Future.delayed( const Duration(milliseconds: 500), () { reloadState.add(HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton() - .projectId!, + projectId: DeliverySingleton().projectId!, projectBeneficiaryType: - RegistrationDeliverySingleton() - .beneficiaryType!, + DeliverySingleton().beneficiaryType!, )); }, ).then((value) => context.router.popAndPush( - HouseholdAcknowledgementRoute( + HouseholdAcknowledgementDeliveryRoute( enableViewHousehold: true, ), )); @@ -233,175 +223,179 @@ class ReferBeneficiaryPageState extends LocalizedState { slivers: [ SliverToBoxAdapter( child: DigitCard( - margin: const EdgeInsets.symmetric(horizontal: spacer2), + margin: const EdgeInsets.symmetric(horizontal: spacer2), children: [ - Text( - localizations.translate( - i18.referBeneficiary.referralDetails, - ), - style: textTheme.headingXl.copyWith( - color: theme.colorTheme.primary.primary2 - ), - ), - ReactiveWrapperField( - formControlName: _dateOfReferralKey, - builder: (field) => LabeledField( - label: localizations.translate( - i18.referBeneficiary.dateOfReferralLabel, - ), - child: DigitDateFormInput( - readOnly: true, - isRequired: false, - initialValue: DateFormat('dd MMM yyyy') - .format(form.control(_dateOfReferralKey).value) - .toString(), - initialDate: DateTime.now(), - cancelText: localizations - .translate(i18.common.coreCommonCancel), - confirmText: - localizations.translate(i18.common.coreCommonOk), - ), - ), - ), - ReactiveWrapperField( - formControlName: _administrativeUnitKey, - builder: (field) => LabeledField( - label: localizations.translate( - i18.referBeneficiary.administrationUnitFormLabel, - ), - isRequired: true, - child: DigitTextFormInput( - readOnly: true, - initialValue: - form.control(_administrativeUnitKey).value, + Text( + localizations.translate( + i18.referBeneficiary.referralDetails, + ), + style: textTheme.headingXl.copyWith( + color: theme.colorTheme.primary.primary2), ), - ), - ), - ReactiveWrapperField( - formControlName: _referredByKey, - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.corecommonRequired, + ReactiveWrapperField( + formControlName: _dateOfReferralKey, + builder: (field) => LabeledField( + label: localizations.translate( + i18.referBeneficiary.dateOfReferralLabel, ), - }, - builder: (field) => LabeledField( - label: localizations.translate( - i18.referBeneficiary.referredByLabel, - ), - isRequired: true, - child: DigitTextFormInput( - errorMessage: field.errorText, - readOnly: true, - onChange: (value) { - form.control(_referredByKey).value = value; - }, - initialValue: form.control(_referredByKey).value, + child: DigitDateFormInput( + readOnly: true, + isRequired: false, + initialValue: DateFormat('dd MMM yyyy') + .format( + form.control(_dateOfReferralKey).value) + .toString(), + initialDate: DateTime.now(), + cancelText: localizations + .translate(i18.common.coreCommonCancel), + confirmText: localizations + .translate(i18.common.coreCommonOk), + ), + ), ), - ), - ), - InkWell( - onTap: () async { - final parent = context.router.parent() as StackRouter; - final facility = await parent.push( - FacilitySelectionRoute( - facilities: facilities, + ReactiveWrapperField( + formControlName: _administrativeUnitKey, + builder: (field) => LabeledField( + label: localizations.translate( + i18.referBeneficiary.administrationUnitFormLabel, + ), + isRequired: true, + child: DigitTextFormInput( + readOnly: true, + initialValue: + form.control(_administrativeUnitKey).value, + ), ), - ) as FacilityModel?; - - if (facility == null) return; - form.control(_referredToKey).value = - localizations.translate('FAC_${facility.id}'); - setState(() { - selectedProjectFacilityId = facility.id; - }); - }, - child: IgnorePointer( - child: ReactiveWrapperField( - formControlName: _referredToKey, + ), + ReactiveWrapperField( + formControlName: _referredByKey, validationMessages: { 'required': (_) => localizations.translate( - i18.referBeneficiary - .facilityValidationMessage, + i18.common.corecommonRequired, ), }, builder: (field) => LabeledField( label: localizations.translate( - i18.referBeneficiary.referredToLabel, + i18.referBeneficiary.referredByLabel, ), isRequired: true, - child: DigitSearchFormInput( + child: DigitTextFormInput( errorMessage: field.errorText, - initialValue: form.control(_referredToKey).value, - onSuffixTap: (value) async { - final parent = - context.router.parent() as StackRouter; - final facility = await parent.push( - FacilitySelectionRoute( - facilities: facilities, - ), - ) as FacilityModel?; - - if (facility == null) return; - form.control(_referredToKey).value = - localizations - .translate('FAC_${facility.id}'); - - setState(() { - selectedProjectFacilityId = facility.id; - }); + readOnly: true, + onChange: (value) { + form.control(_referredByKey).value = value; }, + initialValue: form.control(_referredByKey).value, ), ), ), - ), - ), - ReactiveWrapperField( - formControlName: _referralReason, - validationMessages: { - 'required': (_) => localizations.translate( - i18.common.corecommonRequired, + InkWell( + onTap: () async { + final parent = + context.router.parent() as StackRouter; + final facility = await parent.push( + FacilitySelectionRoute( + facilities: facilities, + ), + ) as FacilityModel?; + + if (facility == null) return; + form.control(_referredToKey).value = + localizations.translate('FAC_${facility.id}'); + setState(() { + selectedProjectFacilityId = facility.id; + }); + }, + child: IgnorePointer( + child: ReactiveWrapperField( + formControlName: _referredToKey, + validationMessages: { + 'required': (_) => localizations.translate( + i18.referBeneficiary + .facilityValidationMessage, + ), + }, + builder: (field) => LabeledField( + label: localizations.translate( + i18.referBeneficiary.referredToLabel, + ), + isRequired: true, + child: DigitSearchFormInput( + errorMessage: field.errorText, + initialValue: + form.control(_referredToKey).value, + onSuffixTap: (value) async { + final parent = + context.router.parent() as StackRouter; + final facility = await parent.push( + FacilitySelectionRoute( + facilities: facilities, + ), + ) as FacilityModel?; + + if (facility == null) return; + form.control(_referredToKey).value = + localizations + .translate('FAC_${facility.id}'); + + setState(() { + selectedProjectFacilityId = facility.id; + }); + }, + ), + ), ), - }, - builder: (field) => LabeledField( - label: localizations.translate( - i18.referBeneficiary.reasonForReferral, - ), - isRequired: true, - child: Align( - alignment: Alignment.topLeft, - child: RadioList( - containerPadding: const EdgeInsets.all(spacer2), - radioDigitButtons: reasons - .map((e) => RadioButtonModel( - code: e.key.toString(), - name: localizations.translate(e.label))) - .toList(), - errorMessage: field.errorText, - groupValue: - form.control(_referralReason).value ?? '', - onChanged: (val) { - form.control(_referralReason).value = val.code; - }, ), ), - ), - ), - ReactiveWrapperField( - formControlName: _referralComments, - builder: (field) => LabeledField( - label: localizations.translate( - i18.referBeneficiary.referralComments, - ), - child: DigitTextAreaFormInput( - maxLine: 3, - initialValue: form.control(_referralComments).value, - onChange: (value) { - form.control(_referralComments).value = value; + ReactiveWrapperField( + formControlName: _referralReason, + validationMessages: { + 'required': (_) => localizations.translate( + i18.common.corecommonRequired, + ), }, + builder: (field) => LabeledField( + label: localizations.translate( + i18.referBeneficiary.reasonForReferral, + ), + isRequired: true, + child: Align( + alignment: Alignment.topLeft, + child: RadioList( + containerPadding: const EdgeInsets.all(spacer2), + radioDigitButtons: reasons + .map((e) => RadioButtonModel( + code: e.key.toString(), + name: localizations.translate(e.label))) + .toList(), + errorMessage: field.errorText, + groupValue: + form.control(_referralReason).value ?? '', + onChanged: (val) { + form.control(_referralReason).value = + val.code; + }, + ), + ), + ), ), - ), - ), - ]), + ReactiveWrapperField( + formControlName: _referralComments, + builder: (field) => LabeledField( + label: localizations.translate( + i18.referBeneficiary.referralComments, + ), + child: DigitTextAreaFormInput( + maxLine: 3, + initialValue: + form.control(_referralComments).value, + onChange: (value) { + form.control(_referralComments).value = value; + }, + ), + ), + ), + ]), ), ], ), @@ -415,10 +409,10 @@ class ReferBeneficiaryPageState extends LocalizedState { return fb.group({ _dateOfReferralKey: FormControl(value: DateTime.now()), _administrativeUnitKey: FormControl( - value: localizations.translate( - RegistrationDeliverySingleton().boundary!.name.toString())), + value: localizations + .translate(DeliverySingleton().boundary!.name.toString())), _referredByKey: FormControl( - value: RegistrationDeliverySingleton().loggedInUserUuid, + value: DeliverySingleton().loggedInUserUuid, validators: [Validators.required], ), _referredToKey: FormControl(validators: [Validators.required]), diff --git a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart b/packages/delivery/lib/pages/beneficiary/refused_delivery.dart similarity index 85% rename from packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart rename to packages/delivery/lib/pages/beneficiary/refused_delivery.dart index 33ae7d1b32..bb413c4518 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/refused_delivery.dart +++ b/packages/delivery/lib/pages/beneficiary/refused_delivery.dart @@ -1,4 +1,8 @@ import 'package:auto_route/auto_route.dart'; +import 'package:delivery/blocs/delivery_intervention/deliver_intervention.dart'; +import 'package:delivery/models/entities/task.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; +import 'package:delivery/utils/utils.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; @@ -8,11 +12,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:registration_delivery/models/entities/additional_fields_type.dart'; -import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; - +import 'package:registration/models/entities/additional_fields_type.dart'; +import 'package:registration/utils/extensions/extensions.dart'; +import '../../blocs/household_overview/household_overview.dart'; import '../../models/entities/status.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../widgets/back_navigation_help_header.dart'; @@ -43,15 +45,15 @@ class RefusedDeliveryPageState extends LocalizedState { @override Widget build(BuildContext context) { final theme = Theme.of(context); - final bloc = context.read(); + final bloc = context.read(); final router = context.router; final textTheme = theme.digitTextTheme(context); return Scaffold( body: ReactiveFormBuilder( form: () => buildForm(), - builder: (_, form, __) => - BlocBuilder( + builder: (_, form, __) => BlocBuilder( builder: (context, registrationState) { return ScrollableContent( enableFixedDigitButton: true, @@ -93,16 +95,16 @@ class RefusedDeliveryPageState extends LocalizedState { form.control(_deliveryCommentKey).value; final projectBeneficiary = - RegistrationDeliverySingleton() - .beneficiaryType != + DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? [ registrationState - .householdMemberWrapper + .householdMemberDeliveryWrapper .projectBeneficiaries ?.first ] - : registrationState.householdMemberWrapper + : registrationState + .householdMemberDeliveryWrapper .projectBeneficiaries ?.where( (element) => @@ -122,18 +124,20 @@ class RefusedDeliveryPageState extends LocalizedState { } else { status = Status.administeredFailed.toValue(); } - final oldTask = RegistrationDeliverySingleton() - .beneficiaryType != - BeneficiaryType.individual - ? registrationState - .householdMemberWrapper.tasks?.last - : null; + final oldTask = + DeliverySingleton().beneficiaryType != + BeneficiaryType.individual + ? registrationState + .householdMemberDeliveryWrapper + .tasks + ?.last + : null; context.read().add( DeliverInterventionSubmitEvent( navigateToSummary: true, householdMemberWrapper: registrationState - .householdMemberWrapper, + .householdMemberDeliveryWrapper, task: _getTaskModel( oldTask, projectBeneficiary @@ -142,15 +146,14 @@ class RefusedDeliveryPageState extends LocalizedState { reasonOfRefusal, refusalComment, registrationState - .householdMemberWrapper + .householdMemberDeliveryWrapper .members ?.first .address ?.first), isEditing: false, boundaryModel: - RegistrationDeliverySingleton() - .boundary!, + DeliverySingleton().boundary!, ), ); context.router.push(DeliverySummaryRoute()); @@ -164,7 +167,7 @@ class RefusedDeliveryPageState extends LocalizedState { children: [ Text( localizations.translate( - "${RegistrationDeliverySingleton().projectType!.code}_${i18.deliverIntervention.refusedDeliveryLabel}", + "${DeliverySingleton().projectType!.code}_${i18.deliverIntervention.refusedDeliveryLabel}", ), style: textTheme.headingXl, ), @@ -196,16 +199,15 @@ class RefusedDeliveryPageState extends LocalizedState { .buildWith( child: SelectionCard( title: localizations.translate( - "${RegistrationDeliverySingleton().projectType!.code}_${i18.deliverIntervention.reasonForRefusalLabel}", + "${DeliverySingleton().projectType!.code}_${i18.deliverIntervention.reasonForRefusalLabel}", ), showParentContainer: true, isRequired: true, width: MediaQuery.of(context).size.width * .34, allowMultipleSelection: false, - options: RegistrationDeliverySingleton() - .refusalReasons ?? - [], + options: + DeliverySingleton().refusalReasons ?? [], onSelectionChanged: (value) { form .control(_reasonOfRefusal) @@ -280,17 +282,17 @@ class RefusedDeliveryPageState extends LocalizedState { address: address?.copyWith( relatedClientReferenceId: clientReferenceId, ), - tenantId: RegistrationDeliverySingleton().tenantId, + tenantId: DeliverySingleton().tenantId, rowVersion: 1, auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: DeliverySingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), ), - projectId: RegistrationDeliverySingleton().projectId, + projectId: DeliverySingleton().projectId, clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: DeliverySingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton().loggedInUserUuid, + lastModifiedBy: DeliverySingleton().loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), ); diff --git a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart b/packages/delivery/lib/pages/beneficiary/side_effects.dart similarity index 72% rename from packages/registration_delivery/lib/pages/beneficiary/side_effects.dart rename to packages/delivery/lib/pages/beneficiary/side_effects.dart index 0161d16b35..c466cf2761 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/side_effects.dart +++ b/packages/delivery/lib/pages/beneficiary/side_effects.dart @@ -7,14 +7,14 @@ import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; +import 'package:delivery/blocs/household_overview/household_overview.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; +import 'package:registration/utils/extensions/extensions.dart'; import '../../blocs/delivery_intervention/deliver_intervention.dart'; -import '../../blocs/household_overview/household_overview.dart'; import '../../blocs/side_effects/side_effects.dart'; import '../../models/entities/side_effect.dart'; import '../../models/entities/task.dart'; -import '../../router/registration_delivery_router.gm.dart'; import '../../utils/constants.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; @@ -47,7 +47,7 @@ class SideEffectsPageState extends LocalizedState { @override void initState() { super.initState(); - symptomTypesOptions = (RegistrationDeliverySingleton().symptomsTypes ?? []) + symptomTypesOptions = (DeliverySingleton().symptomsTypes ?? []) .map((e) => KeyValue(e, e)) .toList(); @@ -69,7 +69,8 @@ class SideEffectsPageState extends LocalizedState { return productState.maybeWhen( orElse: () => const Offstage(), fetched: (productVariants) { - return BlocBuilder( + return BlocBuilder( builder: (context, state) { return BlocBuilder( @@ -152,7 +153,7 @@ class SideEffectsPageState extends LocalizedState { fields: [ AdditionalField( "boundaryCode", - RegistrationDeliverySingleton() + DeliverySingleton() .boundary ?.code), ], @@ -168,26 +169,26 @@ class SideEffectsPageState extends LocalizedState { .last .projectBeneficiaryClientReferenceId, projectId: - RegistrationDeliverySingleton() + DeliverySingleton() .projectId, symptoms: symptoms, clientReferenceId: clientReferenceId, tenantId: - RegistrationDeliverySingleton() + DeliverySingleton() .tenantId, rowVersion: 1, auditDetails: AuditDetails( createdBy: - RegistrationDeliverySingleton() + DeliverySingleton() .loggedInUserUuid!, createdTime: context .millisecondsSinceEpoch(), lastModifiedBy: - RegistrationDeliverySingleton() + DeliverySingleton() .loggedInUserUuid, lastModifiedTime: context @@ -196,13 +197,13 @@ class SideEffectsPageState extends LocalizedState { clientAuditDetails: ClientAuditDetails( createdBy: - RegistrationDeliverySingleton() + DeliverySingleton() .loggedInUserUuid!, createdTime: context .millisecondsSinceEpoch(), lastModifiedBy: - RegistrationDeliverySingleton() + DeliverySingleton() .loggedInUserUuid, lastModifiedTime: context @@ -254,90 +255,99 @@ class SideEffectsPageState extends LocalizedState { slivers: [ SliverToBoxAdapter( child: DigitCard( - margin: const EdgeInsets.symmetric(horizontal: spacer2), + margin: const EdgeInsets.symmetric( + horizontal: spacer2), children: [ - Text( - localizations.translate( - i18.adverseEvents.sideEffectsLabel, - ), - style: textTheme.headingXl.copyWith( - color: theme.colorTheme.primary.primary2 - ), - ), - Text( - '${localizations.translate( - i18.adverseEvents.selectSymptomsLabel, - )}*', - style: textTheme.headingS, - ), - StatefulBuilder( - builder: ( - BuildContext context, - StateSetter stateSetter, - ) { - return Column( - children: [ - Column( - children: symptomTypesOptions - .mapIndexed( - (i, e) => Padding( - padding: - const EdgeInsets - .all(spacer2), - child: DigitCheckbox( - label: localizations + Text( + localizations.translate( + i18.adverseEvents + .sideEffectsLabel, + ), + style: textTheme.headingXl.copyWith( + color: theme.colorTheme.primary + .primary2), + ), + Text( + '${localizations.translate( + i18.adverseEvents + .selectSymptomsLabel, + )}*', + style: textTheme.headingS, + ), + StatefulBuilder( + builder: ( + BuildContext context, + StateSetter stateSetter, + ) { + return Column( + children: [ + Column( + children: + symptomTypesOptions + .mapIndexed( + (i, e) => Padding( + padding: + const EdgeInsets + .all( + spacer2), + child: + DigitCheckbox( + label: localizations + .translate( + e.key, + ), + value: + symptomsValues[ + i], + onChanged: + (value) { + stateSetter( + () { + symptomsValues[i] = + !symptomsValues[i]; + symptomsSelected = + symptomsValues.any( + (e) => + e, + ); + }, + ); + }, + ), + ), + ) + .toList(), + ), + Visibility( + visible: !symptomsSelected, + child: Padding( + padding: + const EdgeInsets.only( + top: spacer2), + child: Align( + alignment: Alignment + .centerLeft, + child: Text( + localizations .translate( - e.key, + i18.common + .coreCommonRequiredItems, + ), + style: TextStyle( + color: theme + .colorTheme + .alert + .error, ), - value: - symptomsValues[i], - onChanged: (value) { - stateSetter( - () { - symptomsValues[ - i] = - !symptomsValues[ - i]; - symptomsSelected = - symptomsValues - .any( - (e) => e, - ); - }, - ); - }, ), ), - ) - .toList(), - ), - Visibility( - visible: !symptomsSelected, - child: Padding( - padding: - const EdgeInsets.only( - top: spacer2), - child: Align( - alignment: - Alignment.centerLeft, - child: Text( - localizations.translate( - i18.common - .coreCommonRequiredItems, - ), - style: TextStyle( - color: theme.colorTheme - .alert.error, - ), ), ), - ), - ), - ], - ); - }, - ), - ]), + ], + ); + }, + ), + ]), ), ], ), @@ -354,21 +364,20 @@ class SideEffectsPageState extends LocalizedState { } void submitSideEffects() async { - final reloadState = context.read(); + final reloadState = context.read(); Future.delayed( const Duration(milliseconds: 500), () { reloadState.add( HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton().projectId!, - projectBeneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!, + projectId: DeliverySingleton().projectId!, + projectBeneficiaryType: DeliverySingleton().beneficiaryType!, ), ); }, ).then((value) => context.router.push( - HouseholdAcknowledgementRoute( + HouseholdAcknowledgementDeliveryRoute( enableViewHousehold: true, ), )); diff --git a/packages/delivery/lib/pages/beneficiary/widgets/household_acknowledgement_delivery.dart b/packages/delivery/lib/pages/beneficiary/widgets/household_acknowledgement_delivery.dart new file mode 100644 index 0000000000..a79093fa32 --- /dev/null +++ b/packages/delivery/lib/pages/beneficiary/widgets/household_acknowledgement_delivery.dart @@ -0,0 +1,87 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import '../../../blocs/household_overview/household_overview.dart'; +import '../../../blocs/search_households/search_households.dart'; +import '../../../utils/i18_key_constants.dart' as i18; +import '../../../widgets/localized.dart'; + +@RoutePage() +class HouseholdAcknowledgementDeliveryPage extends LocalizedStatefulWidget { + final bool? enableViewHousehold; + + const HouseholdAcknowledgementDeliveryPage({ + super.key, + super.appLocalizations, + this.enableViewHousehold, + }); + + @override + State createState() => + HouseholdAcknowledgementDeliveryPageState(); +} + +class HouseholdAcknowledgementDeliveryPageState + extends LocalizedState { + @override + Widget build(BuildContext context) { + return PopScope( + canPop: false, + child: Scaffold( + body: BlocBuilder( + builder: (context, householdState) { + return Padding( + padding: const EdgeInsets.all(spacer2), + child: PanelCard( + type: PanelType.success, + description: localizations.translate( + i18.acknowledgementSuccess.acknowledgementDescriptionText, + ), + title: localizations.translate( + i18.acknowledgementSuccess.acknowledgementLabelText, + ), + actions: [ + DigitButton( + label: localizations.translate( + i18.householdDetails.viewHouseHoldDetailsAction, + ), + isDisabled: !(widget.enableViewHousehold ?? false), + onPressed: () { + final wrapper = context + .read() + .state + .householdMemberDeliveryWrapper; + + context.router.popAndPush( + DeliveryBeneficiaryWrapperRoute(wrapper: wrapper), + ); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large), + DigitButton( + label: localizations.translate( + i18.acknowledgementSuccess.actionLabelText), + onPressed: () { + context + .read() + .add(const SearchHouseholdsEvent.clear()); + final parent = context.router.parent() as StackRouter; + // Pop twice to navigate back to the previous screen + parent.popUntilRoot(); + }, + type: DigitButtonType.secondary, + size: DigitButtonSize.large), + ], + ), + ); + }, + ), + ), + ); + } +} diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart b/packages/delivery/lib/pages/beneficiary/widgets/past_delivery.dart similarity index 92% rename from packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart rename to packages/delivery/lib/pages/beneficiary/widgets/past_delivery.dart index b68b775652..0f09eb0e8e 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/past_delivery.dart +++ b/packages/delivery/lib/pages/beneficiary/widgets/past_delivery.dart @@ -5,9 +5,11 @@ import 'package:digit_ui_components/widgets/atoms/digit_divider.dart'; import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; import 'package:flutter/material.dart'; -import 'package:registration_delivery/blocs/app_localization.dart'; -import 'package:registration_delivery/registration_delivery.dart'; +import 'package:delivery/blocs/app_localization.dart'; +// import 'package:registration/models/entities/household.dart'; +import 'package:registration/registration.dart'; +import '../../../blocs/delivery_intervention/deliver_intervention.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../utils/utils.dart'; import '../../../widgets/table_card/table_card.dart'; @@ -27,7 +29,7 @@ Widget buildTableContent( // Calculate the current dose. If deliverInterventionState.dose is negative, set it to 0. final currentDose = deliverInterventionState.dose >= 0 ? deliverInterventionState.dose : 0; - final localizations = RegistrationDeliveryLocalization.of(context); + final localizations = DeliveryLocalization.of(context); // Defining a list of table headers for resource popup final columnListResource = [ @@ -44,8 +46,7 @@ Widget buildTableContent( // Calculate the height of the container based on the number of items in the table - final ProjectTypeModel projectType = - RegistrationDeliverySingleton().projectType!; + final ProjectTypeModel projectType = DeliverySingleton().projectType!; final item = projectType.cycles?[currentCycle - 1].deliveries?[currentDose - 1]; final productVariants = @@ -89,7 +90,9 @@ Widget buildTableContent( ), ), const DigitDivider(), - const SizedBox(height: spacer4,), + const SizedBox( + height: spacer4, + ), // Build the DigitTable with the data if (fetchProductVariant(item, individualModel, householdModel) ?.productVariants != diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart b/packages/delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart similarity index 97% rename from packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart rename to packages/delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart index f8895bca1c..5d4e263c49 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart +++ b/packages/delivery/lib/pages/beneficiary/widgets/record_delivery_cycle.dart @@ -6,11 +6,12 @@ import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/blocs/app_localization.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; +import 'package:delivery/blocs/app_localization.dart'; +import 'package:registration/models/entities/additional_fields_type.dart'; +import 'package:registration/utils/extensions/extensions.dart'; import '../../../blocs/delivery_intervention/deliver_intervention.dart'; -import '../../../models/entities/additional_fields_type.dart'; + import '../../../models/entities/deliver_strategy_type.dart'; import '../../../models/entities/status.dart'; import '../../../models/entities/task.dart'; @@ -39,7 +40,7 @@ class RecordDeliveryCycleState extends LocalizedState { @override Widget build(BuildContext context) { - final localizations = RegistrationDeliveryLocalization.of(context); + final localizations = DeliveryLocalization.of(context); final headerList = [ DigitTableColumn( @@ -214,9 +215,8 @@ class RecordDeliveryCycleState extends LocalizedState { ? localizations .translate(i18.beneficiaryDetails.currentCycleLabel) : '${localizations.translate(i18.beneficiaryDetails.beneficiaryCycle)} ${e.id}', - style: textTheme.headingL.copyWith( - color: theme.colorTheme.primary.primary2 - ), + style: textTheme.headingL + .copyWith(color: theme.colorTheme.primary.primary2), textAlign: TextAlign.left, ), ), diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart b/packages/delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart similarity index 93% rename from packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart rename to packages/delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart index 71a8a21c03..9c9ccd14af 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart +++ b/packages/delivery/lib/pages/beneficiary/widgets/splash_acknowledgement.dart @@ -1,12 +1,13 @@ import 'dart:async'; import 'package:auto_route/auto_route.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; import 'package:digit_ui_components/enum/app_enums.dart'; import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; -import '../../../router/registration_delivery_router.gm.dart'; +// import '../../../router/registration_delivery_router.gm.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../widgets/localized.dart'; diff --git a/packages/delivery/lib/pages/beneficiary_delivery/beneficiary_delivery_wrapper.dart b/packages/delivery/lib/pages/beneficiary_delivery/beneficiary_delivery_wrapper.dart new file mode 100644 index 0000000000..669f095d80 --- /dev/null +++ b/packages/delivery/lib/pages/beneficiary_delivery/beneficiary_delivery_wrapper.dart @@ -0,0 +1,109 @@ +import 'package:auto_route/auto_route.dart'; + +import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration/blocs/beneficiary_registration/beneficiary_registration.dart'; + +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; + +import 'package:registration/utils/extensions/extensions.dart'; + +import '../../delivery.dart'; + +@RoutePage() +class BeneficiaryDeliveryWrapperPage extends StatelessWidget + implements AutoRouteWrapper { + final BeneficiaryRegistrationState initialState; + + const BeneficiaryDeliveryWrapperPage({ + super.key, + required this.initialState, + }); + + @override + Widget build(BuildContext context) { + return const AutoRouter(); + } + + @override + Widget wrappedRoute(BuildContext context) { + final beneficiaryType = DeliverySingleton().beneficiaryType; + final individual = + context.repository(context); + + final household = + context.repository(context); + + final householdMember = context + .repository(context); + + final projectBeneficiary = context.repository(context); + final task = context.repository(context); + final sideEffect = + context.repository(context); + final referral = + context.repository(context); + + final individualGlobalSearch = + context.read(); + + return BlocProvider( + create: (_) => HouseholdOverviewDeliveryBloc( + HouseholdOverviewDeliveryState( + householdMemberDeliveryWrapper: HouseholdMemberDeliveryWrapper( + household: initialState.householdModel, + headOfHousehold: initialState.maybeWhen( + orElse: () => null, + editHousehold: (addressModel, + householdModel, + individualModel, + registrationDate, + projectBeneficiaryModel, + loading, + headOfHousehold) => + headOfHousehold), + members: initialState.maybeWhen( + orElse: () => null, + editHousehold: (addressModel, + householdModel, + individualModel, + registrationDate, + projectBeneficiaryModel, + loading, + headOfHousehold) => + individualModel, + ), + projectBeneficiaries: initialState.maybeWhen( + orElse: () => null, + editHousehold: (addressModel, + householdModel, + individualModel, + registrationDate, + projectBeneficiaryModel, + loading, + headOfHousehold) => + projectBeneficiaryModel != null + ? [projectBeneficiaryModel] + : [], + ), + ), + ), + individualRepository: individual, + householdRepository: household, + householdMemberRepository: householdMember, + projectBeneficiaryRepository: projectBeneficiary, + beneficiaryType: DeliverySingleton().beneficiaryType!, + taskDataRepository: task, + sideEffectDataRepository: sideEffect, + individualGlobalSearchRepository: individualGlobalSearch, + referralDataRepository: referral) + ..add(HouseholdOverviewReloadEvent( + projectId: DeliverySingleton().selectedProject!.id, + projectBeneficiaryType: DeliverySingleton().beneficiaryType!)), + ); + } +} diff --git a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart b/packages/delivery/lib/pages/delivery_wrapper.dart similarity index 62% rename from packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart rename to packages/delivery/lib/pages/delivery_wrapper.dart index 5fa8af34d4..eee5c3e67b 100644 --- a/packages/registration_delivery/lib/pages/registration_delivery_wrapper.dart +++ b/packages/delivery/lib/pages/delivery_wrapper.dart @@ -4,28 +4,30 @@ import 'package:digit_ui_components/services/location_bloc.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:location/location.dart'; -import 'package:registration_delivery/blocs/search_households/household_global_seach.dart'; -import 'package:registration_delivery/blocs/search_households/individual_global_search.dart'; -import 'package:registration_delivery/data/repositories/local/individual_global_search.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; +import 'package:delivery/blocs/search_households/household_global_search.dart'; +import 'package:delivery/blocs/search_households/individual_global_search.dart'; +import 'package:delivery/data/repositories/local/individual_global_search.dart'; +import 'package:registration/blocs/household_details/household_details.dart'; +import 'package:registration/data/repositories/local/registration_delivery_address.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; + +import 'package:registration/utils/extensions/extensions.dart'; -import '../blocs/household_details/household_details.dart'; import '../blocs/search_households/search_bloc_common_wrapper.dart'; import '../blocs/search_households/search_households.dart'; import '../blocs/search_households/tag_by_search.dart'; import '../data/repositories/local/household_global_search.dart'; -import '../data/repositories/local/registration_delivery_address.dart'; -import '../models/entities/household.dart'; -import '../models/entities/household_member.dart'; -import '../models/entities/project_beneficiary.dart'; + import '../models/entities/referral.dart'; import '../models/entities/side_effect.dart'; import '../models/entities/task.dart'; import '../utils/utils.dart'; @RoutePage() -class RegistrationDeliveryWrapperPage extends StatelessWidget { - const RegistrationDeliveryWrapperPage({super.key}); +class DeliveryWrapperPage extends StatelessWidget { + const DeliveryWrapperPage({super.key}); @override Widget build(BuildContext context) { @@ -34,11 +36,10 @@ class RegistrationDeliveryWrapperPage extends StatelessWidget { providers: [ BlocProvider( create: (context) { - return SearchHouseholdsBloc( - beneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!, - userUid: RegistrationDeliverySingleton().loggedInUserUuid!, - projectId: RegistrationDeliverySingleton().projectId!, + return SearchHouseholdsDeliveryBloc( + beneficiaryType: DeliverySingleton().beneficiaryType!, + userUid: DeliverySingleton().loggedInUserUuid!, + projectId: DeliverySingleton().projectId!, addressRepository: context.read(), projectBeneficiary: context.repository< @@ -49,25 +50,23 @@ class RegistrationDeliveryWrapperPage extends StatelessWidget { household: context.repository( context), - individual: - context.repository( - context), + individual: context.repository(context), taskDataRepository: context.repository(context), sideEffectDataRepository: context .repository(context), referralDataRepository: context.repository(context), - individualGlobalSearchRepository: context.read(), - houseHoldGlobalSearchRepository: context.read()); + individualGlobalDeliverySearchRepository: context.read(), + houseHoldGlobalSearchRepository: context.read()); }, ), BlocProvider( create: (context) { - return TagSearchBloc( - beneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!, - userUid: RegistrationDeliverySingleton().loggedInUserUuid!, - projectId: RegistrationDeliverySingleton().projectId!, + return TagSearchDeliveryBloc( + beneficiaryType: DeliverySingleton().beneficiaryType!, + userUid: DeliverySingleton().loggedInUserUuid!, + projectId: DeliverySingleton().projectId!, addressRepository: context.read(), projectBeneficiary: context.repository< @@ -78,25 +77,23 @@ class RegistrationDeliveryWrapperPage extends StatelessWidget { household: context.repository( context), - individual: - context.repository( - context), + individual: context.repository(context), taskDataRepository: context.repository(context), sideEffectDataRepository: context .repository(context), referralDataRepository: context.repository(context), - individualGlobalSearchRepository: context.read(), - houseHoldGlobalSearchRepository: context.read()); + individualGlobalDeliverySearchRepository: context.read(), + houseHoldGlobalSearchRepository: context.read()); }, ), BlocProvider( create: (context) { - return IndividualGlobalSearchBloc( - beneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!, - userUid: RegistrationDeliverySingleton().loggedInUserUuid!, - projectId: RegistrationDeliverySingleton().projectId!, + return IndividualGlobalDeliverySearchBloc( + beneficiaryType: DeliverySingleton().beneficiaryType!, + userUid: DeliverySingleton().loggedInUserUuid!, + projectId: DeliverySingleton().projectId!, addressRepository: context.read(), projectBeneficiary: context.repository< @@ -107,25 +104,23 @@ class RegistrationDeliveryWrapperPage extends StatelessWidget { household: context.repository( context), - individual: - context.repository( - context), + individual: context.repository(context), taskDataRepository: context.repository(context), sideEffectDataRepository: context .repository(context), referralDataRepository: context.repository(context), - individualGlobalSearchRepository: context.read(), - houseHoldGlobalSearchRepository: context.read()); + individualGlobalDeliverySearchRepository: context.read(), + houseHoldGlobalSearchRepository: context.read()); }, ), BlocProvider( create: (context) { - return HouseHoldGlobalSearchBloc( - beneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!, - userUid: RegistrationDeliverySingleton().loggedInUserUuid!, - projectId: RegistrationDeliverySingleton().projectId!, + return HouseHoldGlobalDeliverySearchBloc( + beneficiaryType: DeliverySingleton().beneficiaryType!, + userUid: DeliverySingleton().loggedInUserUuid!, + projectId: DeliverySingleton().projectId!, addressRepository: context.read(), projectBeneficiary: context.repository< @@ -136,27 +131,27 @@ class RegistrationDeliveryWrapperPage extends StatelessWidget { household: context.repository( context), - individual: - context.repository( - context), + individual: context.repository(context), taskDataRepository: context.repository(context), sideEffectDataRepository: context .repository(context), referralDataRepository: context.repository(context), - individualGlobalSearchRepository: context.read(), - houseHoldGlobalSearchRepository: context.read()); + individualGlobalDeliverySearchRepository: context.read(), + houseHoldGlobalSearchRepository: context.read()); }, ), BlocProvider( create: (context) { - return SearchBlocWrapper( - searchHouseholdsBloc: context.read(), - tagSearchBloc: context.read(), + return SearchBlocDeliveryWrapper( + searchHouseholdsBloc: + context.read(), + tagSearchBloc: context.read(), individualGlobalSearchBloc: - context.read(), + context.read(), houseHoldGlobalSearchBloc: - context.read()); + context.read()); }, ), BlocProvider( diff --git a/packages/delivery/lib/pages/search_beneficiary.dart b/packages/delivery/lib/pages/search_beneficiary.dart new file mode 100644 index 0000000000..2b59cbb1a8 --- /dev/null +++ b/packages/delivery/lib/pages/search_beneficiary.dart @@ -0,0 +1,542 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:delivery/blocs/search_households/search_bloc_common_wrapper.dart'; + +import 'package:delivery/blocs/search_households/search_households.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; +import 'package:delivery/utils/utils.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/models/entities/household_type.dart'; +import 'package:digit_scanner/blocs/scanner.dart'; +import 'package:digit_scanner/pages/qr_scanner.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_chip.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_search_bar.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/atoms/switch.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; +import 'package:registration/blocs/beneficiary_registration/beneficiary_registration.dart'; +import 'package:registration/utils/global_search_parameters.dart'; + +import '../../utils/i18_key_constants.dart' as i18; +import '../models/entities/status.dart'; + +import '../widgets/back_navigation_help_header.dart'; +import '../widgets/beneficiary/view_beneficiary_card.dart'; +import '../widgets/localized.dart'; +import '../widgets/status_filter/status_filter.dart'; + +@RoutePage() +class SearchBeneficiaryDeliveryPage extends LocalizedStatefulWidget { + const SearchBeneficiaryDeliveryPage({ + super.key, + super.appLocalizations, + }); + + @override + State createState() => + _SearchBeneficiaryDeliveryPageState(); +} + +class _SearchBeneficiaryDeliveryPageState + extends LocalizedState { + final TextEditingController searchController = TextEditingController(); + bool isProximityEnabled = false; + int offset = 0; + int limit = 10; + + double lat = 0.0; + double long = 0.0; + List selectedFilters = []; + + SearchHouseholdsState searchHouseholdsState = const SearchHouseholdsState( + loading: false, + householdMembers: [], + ); + late final SearchBlocDeliveryWrapper blocWrapper; // Declare BlocWrapper + + @override + void initState() { + // Initialize the BlocWrapper with instances of SearchHouseholdsBloc, SearchMemberBloc, and ProximitySearchBloc + blocWrapper = context.read(); + context.read().add(const LoadLocationEvent()); + // Listen to state changes + blocWrapper.stateChanges.listen((state) { + if (mounted) { + setState(() { + searchHouseholdsState = state; + }); + } + }); + + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); + + return KeyboardVisibilityBuilder( + builder: (context, isKeyboardVisible) => Scaffold( + body: NotificationListener( + onNotification: (scrollNotification) { + if (scrollNotification is ScrollUpdateNotification) { + final metrics = scrollNotification.metrics; + if (metrics.atEdge && metrics.pixels != 0) { + triggerGlobalSearchEvent(isPagination: true); + } + } + return true; + }, + child: ScrollableContent( + header: const Column(children: [ + BackNavigationHelpHeaderWidget(), + ]), + slivers: [ + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.all(spacer2), + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(spacer2), + child: Align( + alignment: Alignment.topLeft, + child: Text( + localizations.translate( + DeliverySingleton().householdType != null && + DeliverySingleton().householdType == + HouseholdType.community + ? i18.searchBeneficiary.searchCLFLabel + : DeliverySingleton().beneficiaryType != + BeneficiaryType.individual + ? i18 + .searchBeneficiary.statisticsLabelText + : i18.searchBeneficiary + .searchIndividualLabelText, + ), + style: textTheme.headingXl.copyWith( + color: theme.colorTheme.primary.primary2, + ), + textAlign: TextAlign.left, + ), + ), + ), + BlocBuilder( + builder: (context, locationState) { + return Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + locationState.latitude != null + ? Padding( + padding: const EdgeInsets.all(spacer2), + child: DigitSwitch( + mainAxisAlignment: + MainAxisAlignment.start, + label: (DeliverySingleton() + .householdType == + HouseholdType.community) + ? localizations.translate( + i18.searchBeneficiary + .communityProximityLabel, + ) + : localizations.translate( + i18.searchBeneficiary + .proximityLabel, + ), + value: isProximityEnabled, + onChanged: (value) { + searchController.clear(); + setState(() { + isProximityEnabled = value; + lat = locationState.latitude!; + long = locationState.longitude!; + }); + + if (locationState.hasPermissions && + value && + locationState.latitude != null && + locationState.longitude != null && + DeliverySingleton().maxRadius != + null && + isProximityEnabled) { + triggerGlobalSearchEvent(); + } else { + blocWrapper.clearEvent(); + triggerGlobalSearchEvent(); + } + }, + ), + ) + : const Offstage(), + Padding( + padding: const EdgeInsets.all(spacer2), + child: DigitSearchBar( + controller: searchController, + hintText: + (DeliverySingleton().householdType == + HouseholdType.community) + ? localizations.translate(i18 + .searchBeneficiary + .clfSearchHintText) + : localizations.translate( + i18.searchBeneficiary + .beneficiarySearchHintText, + ), + textCapitalization: TextCapitalization.words, + onChanged: (value) { + if (value.isEmpty || + value.trim().length > 2) { + triggerGlobalSearchEvent(); + } + }, + ), + ), + DeliverySingleton().searchHouseHoldFilter != + null && + DeliverySingleton() + .searchHouseHoldFilter! + .isNotEmpty && + DeliverySingleton().householdType != + HouseholdType.community + ? Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(spacer2), + child: DigitButton( + label: getFilterIconNLabel()['label'], + size: DigitButtonSize.medium, + type: DigitButtonType.tertiary, + suffixIcon: + getFilterIconNLabel()['icon'], + onPressed: () => showFilterDialog(), + ), + ), + ) + : const Offstage(), + selectedFilters.isNotEmpty + ? Align( + alignment: Alignment.topLeft, + child: SizedBox( + height: + MediaQuery.of(context).size.height * + 0.06, + child: ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + itemCount: selectedFilters.length, + itemBuilder: (context, index) { + return Padding( + padding: const EdgeInsets.all( + spacer1), + child: DigitChip( + label: + '${localizations.translate(getStatus(selectedFilters[index]))}' + ' (${searchHouseholdsState.totalResults})', + capitalizedFirstLetter: false, + onItemDelete: () { + setState(() { + selectedFilters.remove( + selectedFilters[ + index]); + }); + blocWrapper.clearEvent(); + triggerGlobalSearchEvent(); + }, + ), + ); + }), + ), + ) + : const Offstage(), + ], + ); + }, + ), + if (searchHouseholdsState.resultsNotFound && + !searchHouseholdsState.loading) + Padding( + padding: const EdgeInsets.only( + left: spacer2, top: spacer2, right: spacer2), + child: InfoCard( + type: InfoType.info, + description: (DeliverySingleton().householdType == + HouseholdType.community) + ? localizations.translate( + i18.searchBeneficiary.clfInfoTitle) + : localizations.translate( + i18.searchBeneficiary + .beneficiaryInfoDescription, + ), + title: localizations.translate( + i18.searchBeneficiary.beneficiaryInfoTitle, + ), + ), + ), + ], + ), + ), + ), + if (searchHouseholdsState.loading) + const SliverFillRemaining( + child: Center( + child: CircularProgressIndicator(), + ), + ), + BlocListener( + listener: (context, scannerState) { + if (scannerState.qrCodes.isNotEmpty) { + context.read().tagSearchBloc.add( + SearchHouseholdsEvent.searchByTag( + tag: scannerState.qrCodes.isNotEmpty + ? scannerState.qrCodes.lastOrNull! + : '', + projectId: DeliverySingleton().projectId!, + ), + ); + } + }, + child: BlocBuilder( + builder: (context, locationState) { + return SliverList( + delegate: SliverChildBuilderDelegate( + (ctx, index) { + final i = searchHouseholdsState.householdMembers + .elementAt(index); + final distance = calculateDistance( + Coordinate( + lat, + long, + ), + Coordinate( + i.household?.address?.latitude, + i.household?.address?.longitude, + ), + ); + + return Container( + margin: const EdgeInsets.only(bottom: spacer2), + child: ViewBeneficiaryCard( + distance: isProximityEnabled ? distance : null, + householdMember: i, + onOpenPressed: () async { + final scannerBloc = + context.read(); + + scannerBloc.add( + const DigitScannerEvent.handleScanner(), + ); + + if ((i.tasks != null && + i.tasks?.lastOrNull!.status == + Status.closeHousehold.toValue() && + (i.tasks ?? []).isNotEmpty) || + (i.projectBeneficiaries ?? []).isEmpty) { + setState(() { + selectedFilters = []; + }); + blocWrapper.clearEvent(); + await context.router.push( + BeneficiaryDeliveryWrapperRoute( + initialState: BeneficiaryRegistrationState + .editHousehold( + householdModel: i.household!, + individualModel: i.members!, + registrationDate: DateTime.now(), + projectBeneficiaryModel: + (i.projectBeneficiaries ?? []) + .isNotEmpty + ? i.projectBeneficiaries + ?.lastOrNull + : null, + addressModel: (DeliverySingleton() + .householdType == + HouseholdType.community) + ? i.household!.address! + : i.headOfHousehold!.address! + .lastOrNull!, + headOfHousehold: + i.headOfHousehold), + ), + ); + } else { + await context.router.push( + DeliveryBeneficiaryWrapperRoute( + wrapper: i, + ), + ); + } + setState(() { + isProximityEnabled = false; + }); + searchController.clear(); + selectedFilters.clear(); + blocWrapper.clearEvent(); + }, + ), + ); + }, + childCount: + searchHouseholdsState.householdMembers.length, + ), + ); + }, + ), + ), + ], + ), + ), + bottomNavigationBar: Offstage( + offstage: + DeliverySingleton().householdType == HouseholdType.community && + searchController.text.length < 3, + child: DigitCard( + margin: const EdgeInsets.only(top: spacer2), + padding: const EdgeInsets.all(spacer4), + children: [ + DigitButton( + capitalizeLetters: false, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + onPressed: () { + blocWrapper.clearEvent(); + selectedFilters = []; + searchController.clear(); + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => const DigitScannerPage( + quantity: 1, + isGS1code: false, + singleValue: true, + ), + settings: const RouteSettings(name: '/qr-scanner'), + ), + ); + }, + prefixIcon: Icons.qr_code, + label: localizations.translate( + i18.deliverIntervention.scannerLabel, + ), + ), + ]), + ), + ), + ); + } + + getFilterIconNLabel() { + return { + 'label': localizations.translate( + i18.searchBeneficiary.filterLabel, + ), + 'icon': Icons.filter_alt + }; + } + + showFilterDialog() async { + var filters = await showDialog( + context: context, + builder: (ctx) => Popup( + title: getFilterIconNLabel()['label'], + titleIcon: Icon( + getFilterIconNLabel()['icon'], + color: DigitTheme.instance.colorScheme.primary, + ), + onCrossTap: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + additionalWidgets: [ + StatusFilter( + selectedFilters: selectedFilters, + ), + ])); + + if (filters != null && filters.isNotEmpty) { + setState(() { + selectedFilters = []; + }); + setState(() { + selectedFilters.addAll(filters); + }); + triggerGlobalSearchEvent(); + } else { + setState(() { + selectedFilters = []; + }); + blocWrapper.clearEvent(); + triggerGlobalSearchEvent(); + } + } + + void triggerGlobalSearchEvent({bool isPagination = false}) { + if (!isPagination) { + blocWrapper.clearEvent(); + } + if (DeliverySingleton().beneficiaryType == BeneficiaryType.individual) { + if (isProximityEnabled || + selectedFilters.isNotEmpty || + searchController.text.isNotEmpty) { + blocWrapper.individualGlobalSearchBloc + .add(SearchHouseholdsEvent.individualGlobalSearch( + globalSearchParams: GlobalSearchParameters( + isProximityEnabled: isProximityEnabled, + latitude: lat, + projectId: DeliverySingleton().projectId!, + longitude: long, + maxRadius: DeliverySingleton().maxRadius, + nameSearch: searchController.text.trim().length > 2 + ? searchController.text.trim() + : blocWrapper.searchHouseholdsBloc.state.searchQuery, + filter: selectedFilters, + offset: isPagination + ? blocWrapper.individualGlobalSearchBloc.state.offset + : offset, + limit: isPagination + ? blocWrapper.individualGlobalSearchBloc.state.limit + : limit, + householdType: DeliverySingleton().householdType, + ))); + } + } else { + if (isProximityEnabled || + selectedFilters.isNotEmpty || + searchController.text.isNotEmpty) { + blocWrapper.houseHoldGlobalSearchBloc + .add(SearchHouseholdsEvent.houseHoldGlobalSearch( + globalSearchParams: GlobalSearchParameters( + isProximityEnabled: isProximityEnabled, + latitude: lat, + longitude: long, + projectId: DeliverySingleton().projectId!, + maxRadius: DeliverySingleton().maxRadius, + nameSearch: searchController.text.trim().length > 2 + ? searchController.text.trim() + : blocWrapper.searchHouseholdsBloc.state.searchQuery, + filter: selectedFilters, + offset: isPagination + ? blocWrapper.houseHoldGlobalSearchBloc.state.offset + : offset, + limit: isPagination + ? blocWrapper.houseHoldGlobalSearchBloc.state.limit + : limit, + householdType: DeliverySingleton().householdType, + ))); + } + } + } +} diff --git a/packages/delivery/lib/pages/summary_page.dart b/packages/delivery/lib/pages/summary_page.dart new file mode 100644 index 0000000000..78d321b429 --- /dev/null +++ b/packages/delivery/lib/pages/summary_page.dart @@ -0,0 +1,460 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:delivery/blocs/search_households/search_bloc_common_wrapper.dart'; +import 'package:delivery/blocs/search_households/search_households.dart'; +import 'package:delivery/utils/constants.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/label_value_summary.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration/blocs/beneficiary_registration/beneficiary_registration.dart'; +import 'package:registration/models/entities/additional_fields_type.dart'; +import 'package:registration/router/registration_router.gm.dart'; +import 'package:registration/widgets/back_navigation_help_header.dart'; + +import '../../../widgets/localized.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../utils/utils.dart'; + +@RoutePage() +class SummaryDeliveryPage extends LocalizedStatefulWidget { + const SummaryDeliveryPage({ + super.key, + super.appLocalizations, + }); + + @override + State createState() => SummaryDeliveryPageState(); +} + +class SummaryDeliveryPageState extends LocalizedState { + final clickedStatus = ValueNotifier(false); + + String getLocalizedMessage(String code) { + return localizations.translate(code); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); + + return PopScope( + onPopInvoked: (val) { + context.read().add( + BeneficiaryRegistrationCreateEvent( + projectId: DeliverySingleton().projectId!, + userUuid: DeliverySingleton().loggedInUserUuid!, + boundary: DeliverySingleton().boundary!, + ), + ); + }, + child: Scaffold( + body: BlocConsumer( + listener: (context, householdState) { + final router = context.router; + householdState.mapOrNull( + persisted: (value) { + if (value.navigateToRoot) { + (router.parent() as StackRouter).maybePop(); + } else { + router.popUntil((route) => + route.settings.name == SearchBeneficiaryRoute.name); + context + .read() + .searchHouseholdsBloc + .add( + SearchHouseholdsEvent.searchByHousehold( + householdModel: value.householdModel, + projectId: DeliverySingleton().projectId!, + isProximityEnabled: false, + ), + ); + router.push(BeneficiaryAcknowledgementRoute( + enableViewHousehold: true, + )); + } + }, + ); + }, + builder: (context, householdState) { + return ScrollableContent( + enableFixedDigitButton: true, + header: Column(children: [ + const Padding( + padding: EdgeInsets.only(bottom: spacer2), + child: BackNavigationHelpHeaderWidget( + showHelp: false, + ), + ), + Padding( + padding: + const EdgeInsets.only(bottom: spacer2, left: spacer2), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + localizations.translate( + i18.common.coreCommonSummaryDetails, + ), + style: textTheme.headingXl + .copyWith(color: theme.colorTheme.primary.primary2), + ), + ), + ), + ]), + footer: DigitCard( + margin: const EdgeInsets.only(top: spacer2), + children: [ + ValueListenableBuilder( + valueListenable: clickedStatus, + builder: (context, bool isClicked, _) { + return DigitButton( + label: householdState.mapOrNull( + editIndividual: (value) => localizations + .translate(i18.common.coreCommonSave), + ) ?? + localizations + .translate(i18.common.coreCommonSubmit), + type: DigitButtonType.primary, + size: DigitButtonSize.large, + mainAxisSize: MainAxisSize.max, + isDisabled: isClicked ? true : false, + onPressed: () async { + final bloc = + context.read(); + final userId = DeliverySingleton().loggedInUserUuid; + final projectId = DeliverySingleton().projectId; + + householdState.maybeWhen( + orElse: () { + return; + }, + summary: ( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold, + ) async { + final submit = await showDialog( + context: context, + builder: (ctx) => Popup( + title: localizations.translate( + i18.deliverIntervention.dialogTitle, + ), + description: localizations.translate( + i18.deliverIntervention.dialogContent, + ), + actions: [ + DigitButton( + label: localizations.translate( + i18.common.coreCommonSubmit, + ), + onPressed: () { + clickedStatus.value = true; + Navigator.of( + context, + rootNavigator: true, + ).pop(true); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large), + DigitButton( + label: localizations.translate( + i18.common.coreCommonCancel, + ), + onPressed: () => Navigator.of( + context, + rootNavigator: true, + ).pop(false), + type: DigitButtonType.secondary, + size: DigitButtonSize.large) + ], + ), + ); + + if (submit ?? false) { + if (context.mounted) { + bloc.add( + BeneficiaryRegistrationCreateEvent( + projectId: projectId!, + userUuid: userId!, + boundary: + DeliverySingleton().boundary!, + tag: projectBeneficiaryModel?.tag, + navigateToSummary: false), + ); + } + } + }, + ); + }, + ); + }, + ), + ]), + slivers: [ + SliverToBoxAdapter( + child: Column( + children: [ + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueSummary( + padding: EdgeInsets.zero, + heading: localizations.translate(i18 + .householdLocation + .householdLocationLabelText), + headingStyle: textTheme.headingL.copyWith( + color: theme.colorTheme.primary.primary2, + ), + items: [ + LabelValueItem( + label: localizations.translate( + i18.householdLocation.villageLabel), + value: localizations.translate( + householdState.householdModel?.address + ?.locality?.code ?? + i18.common.coreCommonNA), + isInline: true, + labelFlex: 5, + padding: const EdgeInsets.only( + bottom: spacer2)), + LabelValueItem( + label: localizations.translate(i18 + .householdLocation.landmarkFormLabel), + value: householdState.householdModel + ?.address?.landmark ?? + localizations + .translate(i18.common.coreCommonNA), + isInline: true, + labelFlex: 5, + padding: + const EdgeInsets.only(top: spacer2), + ), + ]), + ]), + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueSummary( + padding: EdgeInsets.zero, + heading: localizations.translate( + i18.householdDetails.householdDetailsLabel), + headingStyle: textTheme.headingL.copyWith( + color: theme.colorTheme.primary.primary2, + ), + items: [ + LabelValueItem( + label: localizations.translate( + i18.beneficiaryDetails.totalMembers), + value: householdState + .householdModel?.memberCount + .toString() ?? + '0', + isInline: true, + labelFlex: 5, + padding: const EdgeInsets.only( + bottom: spacer2)), + LabelValueItem( + label: localizations.translate(i18 + .householdDetails + .noOfPregnantWomenCountLabel), + value: householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType + .pregnantWomen + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true, + labelFlex: 5, + ), + LabelValueItem( + label: localizations.translate(i18 + .householdDetails + .noOfChildrenBelow5YearsLabel), + value: householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType.children + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true, + labelFlex: 5, + padding: + const EdgeInsets.only(top: spacer2)), + ]), + ]), + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueSummary( + padding: EdgeInsets.zero, + heading: localizations.translate( + i18.householdDetails.houseDetailsLabel), + headingStyle: textTheme.headingL.copyWith( + color: theme.colorTheme.primary.primary2, + ), + items: [ + LabelValueItem( + label: localizations.translate( + i18.householdDetails.noOfRoomsLabel), + value: householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType.noOfRooms + .toValue()) + .firstOrNull + ?.value + .toString() ?? + '0', + isInline: true, + labelFlex: 5, + padding: const EdgeInsets.only( + bottom: spacer2)), + LabelValueItem( + label: localizations.translate( + i18.householdDetails.typeOfStructure), + value: (householdState.householdModel + ?.additionalFields?.fields + .where((h) => + h.key == + AdditionalFieldsType + .houseStructureTypes + .toValue()) + .firstOrNull + ?.value ?? + []) + .toString() + .split('|') + .map((item) => + getLocalizedMessage(item)) + .toList() + .join(', '), + isInline: true, + labelFlex: 5, + padding: + const EdgeInsets.only(top: spacer2)), + ]), + ]), + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + LabelValueSummary( + padding: EdgeInsets.zero, + heading: localizations.translate(i18 + .individualDetails + .individualsDetailsLabelText), + headingStyle: textTheme.headingL.copyWith( + color: theme.colorTheme.primary.primary2, + ), + items: [ + LabelValueItem( + label: localizations.translate( + i18.individualDetails.nameLabelText), + value: householdState.maybeWhen( + orElse: () => localizations.translate( + i18.common.coreCommonNA), + summary: ( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold, + ) => + individualModel + ?.name?.givenName ?? + localizations.translate( + i18.common.coreCommonNA)), + labelFlex: 5, + padding: const EdgeInsets.only( + bottom: spacer2)), + LabelValueItem( + label: localizations.translate( + i18.individualDetails.dobLabelText), + value: householdState.maybeWhen( + orElse: () => localizations + .translate(i18.common.coreCommonNA), + summary: ( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold, + ) => + individualModel?.dateOfBirth != null + ? DigitDateUtils.getFilteredDate( + DigitDateUtils.getFormattedDateToDateTime( + individualModel + ?.dateOfBirth ?? + '') + .toString(), + dateFormat: Constants() + .dateMonthYearFormat) + .toString() + : localizations.translate( + i18.common.coreCommonNA)), + labelFlex: 5, + ), + LabelValueItem( + label: localizations.translate(i18 + .individualDetails.genderLabelText), + value: householdState.maybeWhen( + orElse: () => localizations.translate( + i18.common.coreCommonNA), + summary: ( + navigateToRoot, + householdModel, + individualModel, + projectBeneficiaryModel, + registrationDate, + addressModel, + loading, + isHeadOfHousehold, + ) => + individualModel?.gender != null + ? localizations.translate( + individualModel + ?.gender?.name + .toUpperCase() ?? + '') + : localizations.translate( + i18.common.coreCommonNA)), + labelFlex: 5, + padding: + const EdgeInsets.only(top: spacer2)), + ]), + ]), + ], + ), + ) + ]); + }, + )), + ); + } +} diff --git a/packages/delivery/lib/router/delivery_router.dart b/packages/delivery/lib/router/delivery_router.dart new file mode 100644 index 0000000000..ae7ad9fd99 --- /dev/null +++ b/packages/delivery/lib/router/delivery_router.dart @@ -0,0 +1,79 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; + +@AutoRouterConfig.module() +class DeliveryRoute extends $DeliveryRoute { + RouteType get defaultRouteType => const RouteType.material(); + + List get routes => [ + AutoRoute( + page: DeliveryWrapperRoute.page, + path: 'delivery-wrapper', + children: [ + AutoRoute( + initial: true, + page: SearchBeneficiaryDeliveryRoute.page, + path: 'search-beneficiary'), + AutoRoute( + page: DeliveryBeneficiaryWrapperRoute.page, + path: 'beneficiary', + children: [ + AutoRoute( + page: HouseholdOverviewDeliveryRoute.page, + path: 'overview', + initial: true, + ), + AutoRoute( + page: BeneficiaryDetailsDeliveryRoute.page, + path: 'beneficiary-details', + ), + AutoRoute( + page: BeneficiaryChecklistRoute.page, + path: 'beneficiary-checklist', + ), + + AutoRoute( + page: DeliverInterventionRoute.page, + path: 'deliver-intervention', + ), + AutoRoute( + page: RefusedDeliveryRoute.page, + path: 'refused-delivery', + ), + AutoRoute( + page: SideEffectsRoute.page, + path: 'side-effects', + ), + AutoRoute( + page: ReferBeneficiaryRoute.page, + path: 'refer-beneficiary', + ), + AutoRoute( + page: DoseAdministeredRoute.page, + path: 'dose-administered', + ), + AutoRoute( + page: SplashAcknowledgementRoute.page, + path: 'splash-acknowledgement', + ), + // AutoRoute( + // page: ReasonForDeletionRoute.page, + // path: 'reason-for-deletion', + // ), + AutoRoute( + page: RecordPastDeliveryDetailsRoute.page, + path: 'record-past-delivery-details', + ), + AutoRoute( + page: HouseholdAcknowledgementDeliveryRoute.page, + path: 'household-acknowledgement', + ), + AutoRoute( + page: DeliverySummaryRoute.page, + path: 'delivery-summary', + ), + ], + ), + ]), + ]; +} diff --git a/packages/delivery/lib/router/delivery_router.gm.dart b/packages/delivery/lib/router/delivery_router.gm.dart new file mode 100644 index 0000000000..69066ee47c --- /dev/null +++ b/packages/delivery/lib/router/delivery_router.gm.dart @@ -0,0 +1,973 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ************************************************************************** +// AutoRouterGenerator +// ************************************************************************** + +// ignore_for_file: type=lint +// coverage:ignore-file + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:auto_route/auto_route.dart' as _i19; +import 'package:delivery/blocs/app_localization.dart' as _i21; +import 'package:delivery/blocs/search_households/search_households.dart' + as _i24; +import 'package:delivery/models/entities/task.dart' as _i26; +import 'package:delivery/pages/beneficiary/beneficiary_checklist.dart' as _i1; +import 'package:delivery/pages/beneficiary/beneficiary_details.dart' as _i3; +import 'package:delivery/pages/beneficiary/beneficiary_wrapper.dart' as _i5; +import 'package:delivery/pages/beneficiary/deliver_intervention.dart' as _i4; +import 'package:delivery/pages/beneficiary/delivery_summary_page.dart' as _i6; +import 'package:delivery/pages/beneficiary/dose_administered.dart' as _i8; +import 'package:delivery/pages/beneficiary/facility_selection.dart' as _i9; +import 'package:delivery/pages/beneficiary/household_overview.dart' as _i11; +import 'package:delivery/pages/beneficiary/record_past_delivery_details.dart' + as _i12; +import 'package:delivery/pages/beneficiary/refer_beneficiary.dart' as _i13; +import 'package:delivery/pages/beneficiary/refused_delivery.dart' as _i14; +import 'package:delivery/pages/beneficiary/side_effects.dart' as _i16; +import 'package:delivery/pages/beneficiary/widgets/household_acknowledgement_delivery.dart' + as _i10; +import 'package:delivery/pages/beneficiary/widgets/splash_acknowledgement.dart' + as _i17; +import 'package:delivery/pages/beneficiary_delivery/beneficiary_delivery_wrapper.dart' + as _i2; +import 'package:delivery/pages/delivery_wrapper.dart' as _i7; +import 'package:delivery/pages/search_beneficiary.dart' as _i15; +import 'package:delivery/pages/summary_page.dart' as _i18; +import 'package:digit_data_model/data_model.dart' as _i25; +import 'package:flutter/foundation.dart' as _i20; +import 'package:flutter/material.dart' as _i22; +import 'package:registration/blocs/beneficiary_registration/beneficiary_registration.dart' + as _i23; + +abstract class $DeliveryRoute extends _i19.AutoRouterModule { + @override + final Map pagesMap = { + BeneficiaryChecklistRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const BeneficiaryChecklistRouteArgs()); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i1.BeneficiaryChecklistPage( + key: args.key, + beneficiaryClientRefId: args.beneficiaryClientRefId, + appLocalizations: args.appLocalizations, + ), + ); + }, + BeneficiaryDeliveryWrapperRoute.name: (routeData) { + final args = routeData.argsAs(); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i19.WrappedRoute( + child: _i2.BeneficiaryDeliveryWrapperPage( + key: args.key, + initialState: args.initialState, + )), + ); + }, + BeneficiaryDetailsDeliveryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const BeneficiaryDetailsDeliveryRouteArgs()); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i3.BeneficiaryDetailsDeliveryPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + DeliverInterventionRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const DeliverInterventionRouteArgs()); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i4.DeliverInterventionPage( + key: args.key, + appLocalizations: args.appLocalizations, + isEditing: args.isEditing, + ), + ); + }, + DeliveryBeneficiaryWrapperRoute.name: (routeData) { + final args = routeData.argsAs(); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i5.DeliveryBeneficiaryWrapperPage( + key: args.key, + wrapper: args.wrapper, + isEditing: args.isEditing, + ), + ); + }, + DeliverySummaryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const DeliverySummaryRouteArgs()); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i6.DeliverySummaryPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + DeliveryWrapperRoute.name: (routeData) { + return _i19.AutoRoutePage( + routeData: routeData, + child: const _i7.DeliveryWrapperPage(), + ); + }, + DoseAdministeredRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const DoseAdministeredRouteArgs()); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i8.DoseAdministeredPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + FacilitySelectionRoute.name: (routeData) { + final args = routeData.argsAs(); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i9.FacilitySelectionPage( + key: args.key, + facilities: args.facilities, + ), + ); + }, + HouseholdAcknowledgementDeliveryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const HouseholdAcknowledgementDeliveryRouteArgs()); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i10.HouseholdAcknowledgementDeliveryPage( + key: args.key, + appLocalizations: args.appLocalizations, + enableViewHousehold: args.enableViewHousehold, + ), + ); + }, + HouseholdOverviewDeliveryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const HouseholdOverviewDeliveryRouteArgs()); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i11.HouseholdOverviewDeliveryPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + RecordPastDeliveryDetailsRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const RecordPastDeliveryDetailsRouteArgs()); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i12.RecordPastDeliveryDetailsPage( + key: args.key, + appLocalizations: args.appLocalizations, + tasks: args.tasks, + ), + ); + }, + ReferBeneficiaryRoute.name: (routeData) { + final args = routeData.argsAs(); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i13.ReferBeneficiaryPage( + key: args.key, + appLocalizations: args.appLocalizations, + isEditing: args.isEditing, + projectBeneficiaryClientRefId: args.projectBeneficiaryClientRefId, + ), + ); + }, + RefusedDeliveryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const RefusedDeliveryRouteArgs()); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i14.RefusedDeliveryPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + SearchBeneficiaryDeliveryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const SearchBeneficiaryDeliveryRouteArgs()); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i15.SearchBeneficiaryDeliveryPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + SideEffectsRoute.name: (routeData) { + final args = routeData.argsAs(); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i16.SideEffectsPage( + key: args.key, + appLocalizations: args.appLocalizations, + tasks: args.tasks, + isEditing: args.isEditing, + ), + ); + }, + SplashAcknowledgementRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const SplashAcknowledgementRouteArgs()); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i17.SplashAcknowledgementPage( + key: args.key, + appLocalizations: args.appLocalizations, + enableBackToSearch: args.enableBackToSearch, + ), + ); + }, + SummaryDeliveryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const SummaryDeliveryRouteArgs()); + return _i19.AutoRoutePage( + routeData: routeData, + child: _i18.SummaryDeliveryPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + }; +} + +/// generated route for +/// [_i1.BeneficiaryChecklistPage] +class BeneficiaryChecklistRoute + extends _i19.PageRouteInfo { + BeneficiaryChecklistRoute({ + _i20.Key? key, + String? beneficiaryClientRefId, + _i21.DeliveryLocalization? appLocalizations, + List<_i19.PageRouteInfo>? children, + }) : super( + BeneficiaryChecklistRoute.name, + args: BeneficiaryChecklistRouteArgs( + key: key, + beneficiaryClientRefId: beneficiaryClientRefId, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'BeneficiaryChecklistRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class BeneficiaryChecklistRouteArgs { + const BeneficiaryChecklistRouteArgs({ + this.key, + this.beneficiaryClientRefId, + this.appLocalizations, + }); + + final _i20.Key? key; + + final String? beneficiaryClientRefId; + + final _i21.DeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'BeneficiaryChecklistRouteArgs{key: $key, beneficiaryClientRefId: $beneficiaryClientRefId, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i2.BeneficiaryDeliveryWrapperPage] +class BeneficiaryDeliveryWrapperRoute + extends _i19.PageRouteInfo { + BeneficiaryDeliveryWrapperRoute({ + _i22.Key? key, + required _i23.BeneficiaryRegistrationState initialState, + List<_i19.PageRouteInfo>? children, + }) : super( + BeneficiaryDeliveryWrapperRoute.name, + args: BeneficiaryDeliveryWrapperRouteArgs( + key: key, + initialState: initialState, + ), + initialChildren: children, + ); + + static const String name = 'BeneficiaryDeliveryWrapperRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class BeneficiaryDeliveryWrapperRouteArgs { + const BeneficiaryDeliveryWrapperRouteArgs({ + this.key, + required this.initialState, + }); + + final _i22.Key? key; + + final _i23.BeneficiaryRegistrationState initialState; + + @override + String toString() { + return 'BeneficiaryDeliveryWrapperRouteArgs{key: $key, initialState: $initialState}'; + } +} + +/// generated route for +/// [_i3.BeneficiaryDetailsDeliveryPage] +class BeneficiaryDetailsDeliveryRoute + extends _i19.PageRouteInfo { + BeneficiaryDetailsDeliveryRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + List<_i19.PageRouteInfo>? children, + }) : super( + BeneficiaryDetailsDeliveryRoute.name, + args: BeneficiaryDetailsDeliveryRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'BeneficiaryDetailsDeliveryRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class BeneficiaryDetailsDeliveryRouteArgs { + const BeneficiaryDetailsDeliveryRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'BeneficiaryDetailsDeliveryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i4.DeliverInterventionPage] +class DeliverInterventionRoute + extends _i19.PageRouteInfo { + DeliverInterventionRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + bool isEditing = false, + List<_i19.PageRouteInfo>? children, + }) : super( + DeliverInterventionRoute.name, + args: DeliverInterventionRouteArgs( + key: key, + appLocalizations: appLocalizations, + isEditing: isEditing, + ), + initialChildren: children, + ); + + static const String name = 'DeliverInterventionRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class DeliverInterventionRouteArgs { + const DeliverInterventionRouteArgs({ + this.key, + this.appLocalizations, + this.isEditing = false, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + final bool isEditing; + + @override + String toString() { + return 'DeliverInterventionRouteArgs{key: $key, appLocalizations: $appLocalizations, isEditing: $isEditing}'; + } +} + +/// generated route for +/// [_i5.DeliveryBeneficiaryWrapperPage] +class DeliveryBeneficiaryWrapperRoute + extends _i19.PageRouteInfo { + DeliveryBeneficiaryWrapperRoute({ + _i22.Key? key, + required _i24.HouseholdMemberDeliveryWrapper wrapper, + bool isEditing = false, + List<_i19.PageRouteInfo>? children, + }) : super( + DeliveryBeneficiaryWrapperRoute.name, + args: DeliveryBeneficiaryWrapperRouteArgs( + key: key, + wrapper: wrapper, + isEditing: isEditing, + ), + initialChildren: children, + ); + + static const String name = 'DeliveryBeneficiaryWrapperRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class DeliveryBeneficiaryWrapperRouteArgs { + const DeliveryBeneficiaryWrapperRouteArgs({ + this.key, + required this.wrapper, + this.isEditing = false, + }); + + final _i22.Key? key; + + final _i24.HouseholdMemberDeliveryWrapper wrapper; + + final bool isEditing; + + @override + String toString() { + return 'DeliveryBeneficiaryWrapperRouteArgs{key: $key, wrapper: $wrapper, isEditing: $isEditing}'; + } +} + +/// generated route for +/// [_i6.DeliverySummaryPage] +class DeliverySummaryRoute + extends _i19.PageRouteInfo { + DeliverySummaryRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + List<_i19.PageRouteInfo>? children, + }) : super( + DeliverySummaryRoute.name, + args: DeliverySummaryRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'DeliverySummaryRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class DeliverySummaryRouteArgs { + const DeliverySummaryRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'DeliverySummaryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i7.DeliveryWrapperPage] +class DeliveryWrapperRoute extends _i19.PageRouteInfo { + const DeliveryWrapperRoute({List<_i19.PageRouteInfo>? children}) + : super( + DeliveryWrapperRoute.name, + initialChildren: children, + ); + + static const String name = 'DeliveryWrapperRoute'; + + static const _i19.PageInfo page = _i19.PageInfo(name); +} + +/// generated route for +/// [_i8.DoseAdministeredPage] +class DoseAdministeredRoute + extends _i19.PageRouteInfo { + DoseAdministeredRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + List<_i19.PageRouteInfo>? children, + }) : super( + DoseAdministeredRoute.name, + args: DoseAdministeredRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'DoseAdministeredRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class DoseAdministeredRouteArgs { + const DoseAdministeredRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'DoseAdministeredRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i9.FacilitySelectionPage] +class FacilitySelectionRoute + extends _i19.PageRouteInfo { + FacilitySelectionRoute({ + _i22.Key? key, + required List<_i25.FacilityModel> facilities, + List<_i19.PageRouteInfo>? children, + }) : super( + FacilitySelectionRoute.name, + args: FacilitySelectionRouteArgs( + key: key, + facilities: facilities, + ), + initialChildren: children, + ); + + static const String name = 'FacilitySelectionRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class FacilitySelectionRouteArgs { + const FacilitySelectionRouteArgs({ + this.key, + required this.facilities, + }); + + final _i22.Key? key; + + final List<_i25.FacilityModel> facilities; + + @override + String toString() { + return 'FacilitySelectionRouteArgs{key: $key, facilities: $facilities}'; + } +} + +/// generated route for +/// [_i10.HouseholdAcknowledgementDeliveryPage] +class HouseholdAcknowledgementDeliveryRoute + extends _i19.PageRouteInfo { + HouseholdAcknowledgementDeliveryRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + bool? enableViewHousehold, + List<_i19.PageRouteInfo>? children, + }) : super( + HouseholdAcknowledgementDeliveryRoute.name, + args: HouseholdAcknowledgementDeliveryRouteArgs( + key: key, + appLocalizations: appLocalizations, + enableViewHousehold: enableViewHousehold, + ), + initialChildren: children, + ); + + static const String name = 'HouseholdAcknowledgementDeliveryRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class HouseholdAcknowledgementDeliveryRouteArgs { + const HouseholdAcknowledgementDeliveryRouteArgs({ + this.key, + this.appLocalizations, + this.enableViewHousehold, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + final bool? enableViewHousehold; + + @override + String toString() { + return 'HouseholdAcknowledgementDeliveryRouteArgs{key: $key, appLocalizations: $appLocalizations, enableViewHousehold: $enableViewHousehold}'; + } +} + +/// generated route for +/// [_i11.HouseholdOverviewDeliveryPage] +class HouseholdOverviewDeliveryRoute + extends _i19.PageRouteInfo { + HouseholdOverviewDeliveryRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + List<_i19.PageRouteInfo>? children, + }) : super( + HouseholdOverviewDeliveryRoute.name, + args: HouseholdOverviewDeliveryRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'HouseholdOverviewDeliveryRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class HouseholdOverviewDeliveryRouteArgs { + const HouseholdOverviewDeliveryRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'HouseholdOverviewDeliveryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i12.RecordPastDeliveryDetailsPage] +class RecordPastDeliveryDetailsRoute + extends _i19.PageRouteInfo { + RecordPastDeliveryDetailsRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + List<_i26.TaskModel>? tasks, + List<_i19.PageRouteInfo>? children, + }) : super( + RecordPastDeliveryDetailsRoute.name, + args: RecordPastDeliveryDetailsRouteArgs( + key: key, + appLocalizations: appLocalizations, + tasks: tasks, + ), + initialChildren: children, + ); + + static const String name = 'RecordPastDeliveryDetailsRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class RecordPastDeliveryDetailsRouteArgs { + const RecordPastDeliveryDetailsRouteArgs({ + this.key, + this.appLocalizations, + this.tasks, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + final List<_i26.TaskModel>? tasks; + + @override + String toString() { + return 'RecordPastDeliveryDetailsRouteArgs{key: $key, appLocalizations: $appLocalizations, tasks: $tasks}'; + } +} + +/// generated route for +/// [_i13.ReferBeneficiaryPage] +class ReferBeneficiaryRoute + extends _i19.PageRouteInfo { + ReferBeneficiaryRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + bool isEditing = false, + required String projectBeneficiaryClientRefId, + List<_i19.PageRouteInfo>? children, + }) : super( + ReferBeneficiaryRoute.name, + args: ReferBeneficiaryRouteArgs( + key: key, + appLocalizations: appLocalizations, + isEditing: isEditing, + projectBeneficiaryClientRefId: projectBeneficiaryClientRefId, + ), + initialChildren: children, + ); + + static const String name = 'ReferBeneficiaryRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class ReferBeneficiaryRouteArgs { + const ReferBeneficiaryRouteArgs({ + this.key, + this.appLocalizations, + this.isEditing = false, + required this.projectBeneficiaryClientRefId, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + final bool isEditing; + + final String projectBeneficiaryClientRefId; + + @override + String toString() { + return 'ReferBeneficiaryRouteArgs{key: $key, appLocalizations: $appLocalizations, isEditing: $isEditing, projectBeneficiaryClientRefId: $projectBeneficiaryClientRefId}'; + } +} + +/// generated route for +/// [_i14.RefusedDeliveryPage] +class RefusedDeliveryRoute + extends _i19.PageRouteInfo { + RefusedDeliveryRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + List<_i19.PageRouteInfo>? children, + }) : super( + RefusedDeliveryRoute.name, + args: RefusedDeliveryRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'RefusedDeliveryRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class RefusedDeliveryRouteArgs { + const RefusedDeliveryRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'RefusedDeliveryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i15.SearchBeneficiaryDeliveryPage] +class SearchBeneficiaryDeliveryRoute + extends _i19.PageRouteInfo { + SearchBeneficiaryDeliveryRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + List<_i19.PageRouteInfo>? children, + }) : super( + SearchBeneficiaryDeliveryRoute.name, + args: SearchBeneficiaryDeliveryRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'SearchBeneficiaryDeliveryRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class SearchBeneficiaryDeliveryRouteArgs { + const SearchBeneficiaryDeliveryRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'SearchBeneficiaryDeliveryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i16.SideEffectsPage] +class SideEffectsRoute extends _i19.PageRouteInfo { + SideEffectsRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + required List<_i26.TaskModel> tasks, + bool isEditing = false, + List<_i19.PageRouteInfo>? children, + }) : super( + SideEffectsRoute.name, + args: SideEffectsRouteArgs( + key: key, + appLocalizations: appLocalizations, + tasks: tasks, + isEditing: isEditing, + ), + initialChildren: children, + ); + + static const String name = 'SideEffectsRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class SideEffectsRouteArgs { + const SideEffectsRouteArgs({ + this.key, + this.appLocalizations, + required this.tasks, + this.isEditing = false, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + final List<_i26.TaskModel> tasks; + + final bool isEditing; + + @override + String toString() { + return 'SideEffectsRouteArgs{key: $key, appLocalizations: $appLocalizations, tasks: $tasks, isEditing: $isEditing}'; + } +} + +/// generated route for +/// [_i17.SplashAcknowledgementPage] +class SplashAcknowledgementRoute + extends _i19.PageRouteInfo { + SplashAcknowledgementRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + bool? enableBackToSearch, + List<_i19.PageRouteInfo>? children, + }) : super( + SplashAcknowledgementRoute.name, + args: SplashAcknowledgementRouteArgs( + key: key, + appLocalizations: appLocalizations, + enableBackToSearch: enableBackToSearch, + ), + initialChildren: children, + ); + + static const String name = 'SplashAcknowledgementRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class SplashAcknowledgementRouteArgs { + const SplashAcknowledgementRouteArgs({ + this.key, + this.appLocalizations, + this.enableBackToSearch, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + final bool? enableBackToSearch; + + @override + String toString() { + return 'SplashAcknowledgementRouteArgs{key: $key, appLocalizations: $appLocalizations, enableBackToSearch: $enableBackToSearch}'; + } +} + +/// generated route for +/// [_i18.SummaryDeliveryPage] +class SummaryDeliveryRoute + extends _i19.PageRouteInfo { + SummaryDeliveryRoute({ + _i22.Key? key, + _i21.DeliveryLocalization? appLocalizations, + List<_i19.PageRouteInfo>? children, + }) : super( + SummaryDeliveryRoute.name, + args: SummaryDeliveryRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'SummaryDeliveryRoute'; + + static const _i19.PageInfo page = + _i19.PageInfo(name); +} + +class SummaryDeliveryRouteArgs { + const SummaryDeliveryRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i22.Key? key; + + final _i21.DeliveryLocalization? appLocalizations; + + @override + String toString() { + return 'SummaryDeliveryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} diff --git a/packages/registration_delivery/lib/utils/constants.dart b/packages/delivery/lib/utils/constants.dart similarity index 100% rename from packages/registration_delivery/lib/utils/constants.dart rename to packages/delivery/lib/utils/constants.dart diff --git a/packages/delivery/lib/utils/i18_key_constants.dart b/packages/delivery/lib/utils/i18_key_constants.dart new file mode 100644 index 0000000000..18fe9ca74d --- /dev/null +++ b/packages/delivery/lib/utils/i18_key_constants.dart @@ -0,0 +1,1097 @@ +// TODO Implement this library. +const common = Common(); +const searchBeneficiary = SearchBeneficiary(); +const beneficiaryDetails = BeneficiaryDetails(); +const householdLocation = HouseholdLocation(); +const acknowledgementSuccess = AcknowledgementSuccess(); +const householdDetails = HouseholdDetails(); +const individualDetails = IndividualDetails(); +const householdOverView = HouseholdOverView(); +const memberCard = MemberCard(); +const deliverIntervention = DeliverIntervention(); +const referBeneficiary = ReferBeneficiary(); +const adverseEvents = AdverseEvents(); +const reasonForDeletion = ReasonForDeletion(); +const searchBeneficiariesShowcase = SearchBeneficiariesShowcase(); +const householdLocationShowcase = HouseholdLocationShowcase(); +const householdDetailsShowcase = HouseholdDetailsShowcase(); +const individualDetailsShowcase = IndividualDetailsShowcase(); +const householdOverviewShowcase = HouseholdOverviewShowcase(); +const deliverInterventionShowcase = DeliverInterventionShowcase(); +const checklist = Checklist(); +const clfLocationShowCase = CLFLocationShowcase(); +const clfDetailsShowcase = CLFDetailsShowcase(); + +class Common { + const Common(); + + String get coreCommonContinue => 'CORE_COMMON_CONTINUE'; + + String get coreCommonAge => 'CORE_COMMON_AGE'; + + String get coreCommonName => 'CORE_COMMON_NAME'; + + String get coreCommonEmailId => 'CORE_COMMON_EMAIL_ID'; + + String get coreCommonGender => 'CORE_COMMON_GENDER'; + + String get coreCommonMobileNumber => 'CORE_COMMON_MOBILE_NUMBER'; + + String get coreCommonSubmit => 'CORE_COMMON_SUBMIT'; + + String get coreCommonSave => 'CORE_COMMON_SAVE'; + + String get coreCommonCancel => 'CORE_COMMON_CANCEL'; + + String get corecommonRequired => 'CORE_COMMON_REQUIRED'; + + String get searchByName => 'CORE_COMMON_SEARCH_BY_NAME'; + + String get coreCommonReasonRequired => 'CORE_COMMON_REASON_REQUIRED'; + + String get corecommonclose => 'CORE_COMMON_CLOSE'; + + String get coreCommonOk => 'CORE_COMMON_OK'; + + String get coreCommonNA => 'CORE_COMMON_NA'; + + String get coreCommonProfile => 'CORE_COMMON_PROFILE'; + + String get coreCommonLogout => 'CORE_COMMON_LOGOUT'; + + String get coreCommonBack => 'CORE_COMMON_BACK'; + + String get coreCommonHelp => 'CORE_COMMON_HELP'; + + String get coreCommonHome => 'CORE_COMMON_HOME'; + + String get coreCommonViewDownloadedData => 'CORE_COMMON_VIEW_DOWNLOADED_DATA'; + + String get coreCommonlanguage => 'CORE_COMMON_LANGUAGE'; + + String get coreCommonSyncProgress => 'CORE_COMMON_SYNC_PROGRESS'; + + String get coreCommonDataSynced => 'CORE_COMMON_DATA_SYNCED'; + + String get coreCommonDataSyncFailed => 'CORE_COMMON_DATA_SYNC_FAILED'; + + String get coreCommonDataSyncRetry => 'CORE_COMMON_DATA_SYNC_RETRY'; + + String get connectionLabel => 'CORE_COMMON_CONNECTION_LABEL'; + + String get connectionContent => 'CORE_COMMON_CONNECTION_CONTENT'; + + String get coreCommonSkip => 'CORE_COMMON_SKIP'; + + String get coreCommonNext => 'CORE_COMMON_NEXT'; + + String get coreCommonYes => 'CORE_COMMON_YES'; + + String get coreCommonNo => 'CORE_COMMON_NO'; + + String get coreCommonGoback => 'CORE_COMMON_GO_BACK'; + + String get coreCommonRequiredItems => 'CORE_COMMON_REQUIRED_ITEMS'; + + String get min2CharsRequired => 'MIN_2_CHARS_REQUIRED'; + + String get min3CharsRequired => 'MIN_3_CHARS_REQUIRED'; + + String get maxCharsRequired => 'MAX_CHARS_ALLOWED'; + + String get maxValue => 'MAX_VALUE_ALLOWED'; + + String get minValue => 'MIN_VALUE_ALLOWED'; + + String get noResultsFound => 'NO_RESULTS_FOUND'; + + String get noProjectSelected => 'NO_PROJECT_SELECTED'; + + String get coreCommonSyncInProgress => 'CORE_COMMON_SYNC_IN_PROGRESS'; + + String get facilitySearchHeaderLabel => 'FACILITY_SEARCH_HEADER_LABEL'; + + String get projectFacilitySearchHeaderLabel => + 'PROJECT_FACILITY_SEARCH_HEADER_LABEL'; + + String get coreCommonDownload => 'CORE_COMMON_DOWNLOAD'; + + String get coreCommonDownloadFailed => 'CORE_COMMON_DOWNLOAD_FAILED'; + + String get noMatchFound => 'CORE_COMMON_NO_MATCH_FOUND'; + + String get scanBales => 'CORE_COMMON_SCAN_BALES'; + + String get ageInMonths => 'AGE_IN_MONTHS_LABEL'; + + String get locationCapturing => 'CAPTURING_LOCATION'; + + String get locationCaptured => 'LOCATION_CAPTURED'; + + String get coreCommonSummaryDetails => 'CORE_COMMON_SUMMARY_DETAILS'; + + String get metersNear => 'METERS_NEAR'; + + String get coreCommonLoadingText => 'CORE_COMMON_LOADING_TEXT'; + + String get minAge => 'MINIMUM_AGE_SHOULD_BE_GREATER_THAN_0'; + + String get maxAge => 'MAXIMUM_AGE_CAN_NOT_EXCEED_150_YEARS'; +} + +class SearchBeneficiary { + const SearchBeneficiary(); + + String get communityProximityLabel => + 'BENEFICIARY_SEARCH_COMMUNITY_PROXIMITY_LABEL_TEXT'; + + String get clfSearchHintText => 'BENEFICIARY_CLF_SEARCH_HINT_TEXT'; + + String get searchCLFLabel => 'BENEFICIARY_SEARCH_CLF_LABEL_TEXT'; + + String get statisticsLabelText => 'BENEFICIARY_STATISTICS_LABEL_TEXT'; + + String get searchIndividualLabelText => + 'BENEFICIARY_STATISTICS_SEARCH_INDIVIDUAL_LABEL'; + + String get noOfHouseholdsRegistered => 'NO_OF_HOUSEHOLDS_REGISTERED'; + + String get noOfResourcesDelivered => 'NO_OF_RESOURCES_DELIVERED'; + + String get beneficiarySearchHintText => 'BENEFICIARY_SEARCH_HINT_TEXT'; + + String get beneficiaryIndividualSearchHintText => + 'BENEFICIARY_INDIVIDUAL_SEARCH_HINT_TEXT'; + + String get beneficiaryInfoDescription => 'BENEFICIARY_INFO_DESCRIPTION'; + + String get beneficiaryInfoTitle => 'BENEFICIARY_INFO_TITLE'; + + String get clfInfoTitle => 'BENEFICIARY_CLF_INFO_TITLE'; + + String get beneficiaryAddActionLabel => 'BENEFICIARY_ADD_ACTION_LABEL'; + + String get clfAddActionLabel => 'BENEFICIARY_ADD_CLF_ACTION_LABEL'; + + String get iconLabel => 'ICON_LABEL'; + + String get filterLabel => 'FILTER_LABEL'; + + String get clearFilter => 'CLEAR_FILTER'; + + String get applyFilter => 'APPLY_FILTER'; + + String get yearsAbbr => 'YEARS_ABBR'; + + String get monthsAbbr => 'MONTHS_ABBR'; + + String get proximityLabel => 'PROXIMITY_LABEL'; +} + +class BeneficiaryDetails { + const BeneficiaryDetails(); + + String get beneficiarysDetailsLabelText => 'BENEFICIARY_DETAILS_LABEL_TEXT'; + + String get beneficiarysDetailsEditIconLabelText => + 'BENEFICIARY_DETAILS_EDIT_ICON_LABEL_TEXT'; + + String get beneficiarysDetailsEditIconLabel => + 'BENEFICIARY_DETAILS_EDIT_ICON_LABEL'; + + String get beneficiarysDetailsDeleteIconLabel => + 'BENEFICIARY_DETAILS_DELETE_ICON_LABEL'; + + String get resourcesTobeDelivered => 'RESOURCES_TO_BE_DELIVERED'; + + String get resourcesTobeProvided => 'RESOURCES_TO_BE_PROVIDED'; + + String get beneficiaryAge => 'BENEFICIARY_AGE'; + + String get ctaProceed => 'PROCEED'; + + String get beneficiaryDoseNo => 'BENEFICIARY_DETAILS_DOSE_NO'; + + String get beneficiaryDose => 'BENEFICIARY_DETAILS_DOSE'; + + String get beneficiaryStatus => 'BENEFICIARY_DETAILS_STATUS'; + + String get beneficiaryResources => 'BENEFICIARY_DETAILS_RESOURCES'; + + String get beneficiaryQuantity => 'BENEFICIARY_DETAILS_QUANTITY'; + + String get beneficiaryCompletedOn => 'BENEFICIARY_DETAILS_COMPLETED_ON'; + + String get beneficiaryDeliveryStrategy => + 'BENEFICIARY_DETAILS_DELIVERY_STRATEGY'; + + String get beneficiaryCycle => 'BENEFICIARY_DETAILS_CYCLE'; + + String get currentCycleLabel => 'BENEFICIARY_DETAILS_CURRENT_CYCLE_LABEL'; + + String get fromCurrentLocation => 'FROM_CURRENT_LOCATION'; + + String get unableToScan => 'UNABLE_TO_SCAN'; + + String get scanValidResource => 'SCAN_VALID_RESOURCE'; + + String get scannedResourceCountMisMatch => 'SCANNED_RESOURCE_COUNT_MISMATCH'; + + String get resourceAlreadyScanned => 'RESOURCE_ALREADY_SCANNED'; + + String get scannerLabel => 'SCANNER_LABEL'; + + String get noOfResourceScanned => 'NO_OF_RESOURCE_SCANNED'; + + String get resourcesScanned => 'RESOURCES_SCANNED'; + + String get saveScannedResource => 'SAVE_SCANNED_RESOURCE'; + + String get flashOn => 'FLASH_ON'; + + String get flashOff => 'FLASH_OFF'; + + String get scannerDialogTitle => 'SCANNER_DIALOG_TITLE'; + + String get scannerDialogContent => 'SCANNER_DIALOG_CONTENT'; + + String get scannerDialogPrimaryAction => 'SCANNER_DIALOG_PRIMARY_ACTION'; + + String get scannerDialogSecondaryAction => 'SCANNER_DIALOG_SECONDARY_ACTION'; + + String get beneficiaryHeader => 'BENEFICIARY_HEADER'; + + String get deliveryHeader => 'DELIVERY_TABLE_HEADER'; + + String get proceedWithoutDownloading => 'PROCEED_WITHOUT_DOWNLOADING'; + + String get unableToCheckDataInServer => 'FAILED_TO_CHECK_DATA_IN_SERVER'; + + String get dataFound => 'DATA_FOUND'; + + String get noDataFound => 'NO_DATA_FOUND'; + + String get dataFoundContent => 'DATA_FOUND_CONTENT'; + + String get noDataFoundContent => 'NO_DATA_FOUND_CONTENT'; + + String get dataDownloadInProgress => 'DATA_DOWNLOAD_IN_PROGRESS'; + + String get insufficientStorage => 'INSUFFICIENT_STORAGE_WARNING'; + + String get downloadreport => 'DOWNLOAD_REPORT'; + + String get boundary => 'BOUNDARY'; + + String get status => 'STATUS'; + + String get downloadedon => 'DOWNLOADED_ON'; + + String get recordsdownload => 'RECORDS_DOWNLOAD'; + + String get downloadcompleted => 'DOWNLOAD_COMPLETED'; + + String get datadownloadreport => 'DATA_DOWNLOAD_REPORT'; + + String get download => 'DOWNLOAD'; + + String get partialdownloaded => 'PARTIAL_DOWNLOAD'; + + String get downloadtime => 'DOWNLOAD_TIME'; + + String get totalrecorddownload => 'TOTAL_RECORD_DOWNLOAD'; + + String get insufficientStorageContent => + 'INSUFFICIENT_STORAGE_WARNING_CONTENT'; + + String get recordCycle => 'BENEFICIARY_DETAILS_RECORD_CYCLE'; + + String get householdMemberSingular => 'BENEFICIARY_HOUSEHOLD_MEMBER'; + + String get householdMemberPlural => 'BENEFICIARY_HOUSEHOLD_MEMBERS'; + + String get totalMembers => 'TOTAL_HOUSEHOLD_MEMBERS'; +} + +class IndividualDetails { + const IndividualDetails(); + + String get clfCheckboxLabelText => 'INDIVIDUAL_CLF_CHECKBOX_LABEL_TEXT'; + + String get individualsDetailsLabelText => 'INDIVIDUAL_LABEL_TEXT'; + + String get nameLabelText => 'INDIVIDUAL_NAME_LABEL_TEXT'; + + String get checkboxLabelText => 'HEAD_OF_HOUSEHOLD_LABEL_TEXT'; + + String get idTypeLabelText => 'ID_TYPE_LABEL_TEXT'; + + String get idNumberLabelText => 'ID_NUMBER_LABEL_TEXT'; + + String get idNumberSuggestionText => 'ID_NUMBER_SUGGESTION_TEXT'; + + String get dobLabelText => 'DOB_LABEL_TEXT'; + + String get ageLabelText => 'AGE_LABEL_TEXT'; + + String get separatorLabelText => 'SEPARATOR_LABEL_TEXT'; + + String get genderLabelText => 'GENDER_LABEL_TEXT'; + + String get dobErrorText => 'DOB_ERROR_MESSAGE'; + + String get mobileNumberLabelText => 'MOBILE_NUMBER_LABEL_TEXT'; + + String get heightLabelText => 'HEIGHT_LABEL_TEXT'; + + String get submitButtonLabelText => 'INDIVIDUAL_DETAILS_SUBMIT'; + + String get mobileNumberInvalidFormatValidationMessage => + 'INDIVIDUAL_DETAILS_INVALID_MOBILE_NUMBER'; + + String get mobileNumberLengthValidationMessage => + 'INDIVIDUAL_DETAILS_MOBILE_NUMBER_LENGTH'; + + String get yearsHintText => 'YEARS_HINT_TEXT'; + + String get monthsHintText => 'MONTHS_HINT_TEXT'; + + String get yearsErrorText => 'ERR_YEARS'; + + String get monthsErrorText => 'ERR_MONTHS'; + + String get yearsAndMonthsErrorText => 'ERR_YEARS_AND_MONTHS'; + + String get linkVoucherToIndividual => 'LINK_VOUCHER_TO_INDIVIDUAL'; +} + +class HouseholdLocation { + const HouseholdLocation(); + + String get buildingNameLabel => 'CLF_BUILDING_NAME_LABEL_TEXT'; + + String get clfLocationLabelText => 'CLF_LOCATION_LABEL_TEXT'; + + String get householdLocationLabelText => 'HOUSEHOLD_LOCATION_LABEL_TEXT'; + + String get householdLocationDescriptionText => + 'HOUSEHOLD_LOCATION_DESCRIPTION_TEXT'; + + String get administrationAreaFormLabel => 'ADMINISTRATION_AREA_FORM_LABEL'; + + String get gpsAccuracyLabel => 'CLOSE_HOUSEHOLD_GPS_ACCURACY_LABEL'; + + String get administrationAreaRequiredValidation => + 'HOUSEHOLD_LOCATION_ADMINISTRATION_AREA_REQUIRED_VALIDATION'; + + String get householdAddressLine1LabelText => + 'HOUSEHOLD_ADDRESS_LINE_1_FORM_LABEL'; + + String get landmarkFormLabel => 'LANDMARK_FORM_LABEL'; + + String get villageLabel => 'VILLAGE_LABEL'; + + String get householdAddressLine2LabelText => + 'HOUSEHOLD_ADDRESS_LINE_2_FORM_LABEL'; + + String get postalCodeFormLabel => 'POSTAL_CODE_FORM_LABEL'; + + String get actionLabel => 'HOUSEHOLD_LOCATION_ACTION_LABEL'; +} + +class AcknowledgementSuccess { + const AcknowledgementSuccess(); + + String get actionLabelText => 'ACKNOWLEDGEMENT_SUCCESS_ACTION_LABEL_TEXT'; + + String get acknowledgementDescriptionText => + 'ACKNOWLEDGEMENT_SUCCESS_DESCRIPTION_TEXT'; + + String get acknowledgementLabelText => 'ACKNOWLEDGEMENT_SUCCESS_LABEL_TEXT'; + + String get goToHome => 'GO_TO_HOME_SCREEN'; + + String get downloadmoredata => 'DOWNLOAD_MORE_DATA'; + + String get dataDownloadedSuccessLabel => 'DATA_DOWNLOADED_SUCCESS_LABEL'; +} + +class Checklist { + const Checklist(); + + String get checklist => 'CHECKLIST'; + + String get checklistlabel => 'CHECKLIST_LABEL'; + + String get checklistCreateActionLabel => 'CHECKLIST_CREATE_ACTION_LABEL'; + + String get checklistViewActionLabel => 'CHECKLIST_VIEW_ACTION_LABEL'; + + String get checklistDetailLabel => 'CHECKLIST_DETAILS_LABEL'; + + String get checklistDialogLabel => 'CHECKLIST_DIALOG_LABEL'; + + String get checklistDialogDescription => 'CHECKLIST_DIALOG_DESCRITPTION'; + + String get checklistDialogPrimaryAction => 'CHECKLIST_DIALOG_PRIMARY_ACTION'; + + String get checklistDialogSecondaryAction => + 'CHECKLIST_DIALOG_SECONDARY_ACTION'; + + String get checklistdate => 'CHECKLIST_DATE'; + + String get checklistReasonRequiredError => 'CHECKLIST_REASON_REQUIRED_ERROR'; + + String get notSelectedKey => 'NOT_SELECTED'; + + String get checklistBackDialogLabel => 'CHECKLIST_BACK_DIALOG_LABEL'; + + String get checklistBackDialogDescription => + 'CHECKLIST_BACK_DIALOG_DESCRITPTION'; + + String get checklistBackDialogPrimaryAction => + 'CHECKLIST_BACK_DIALOG_PRIMARY_ACTION'; + + String get checklistBackDialogSecondaryAction => + 'CHECKLIST_BACK_DIALOG_SECONDARY_ACTION'; +} + +class HouseholdDetails { + const HouseholdDetails(); + + String get householdDetailsLabel => 'HOUSEHOLD_DETAILS_LABEL'; + + String get clfDetailsLabel => 'CLF_DETAILS_LABEL'; + + String get householdDetailsDescription => 'HOUSEHOLD_DETAILS_DESCRIPTION'; + + String get actionLabel => 'HOUSEHOLD_ACTION_LABEL'; + + String get dateOfRegistrationLabel => + 'HOUSEHOLD_DETAILS_DATE_OF_REGISTRATION_LABEL'; + + String get noOfMembersCountLabel => 'NO_OF_MEMBERS_COUNT_LABEL'; + + String get noOfMembersCountCLFLabel => 'NO_OF_MEMBERS_COUNT_CLF_LABEL'; + + String get noOfPregnantWomenCountLabel => 'NO_OF_PREGNANT_WOMEN_LABEL'; + + String get noOfPregnantWomenCountCLFLabel => 'NO_OF_PREGNANT_WOMEN_CLF_LABEL'; + + String get noOfChildrenBelow5YearsLabel => 'NO_OF_CHILDREN_BELOW_5_YR_LABEL'; + + String get noOfChildrenBelow5YearsCLFLabel => + 'NO_OF_CHILDREN_BELOW_5_YR_CLF_LABEL'; + + String get viewHouseHoldDetailsAction => + 'VIEW_HOUSEHOLD_DETAILS_ACTION_LABEL'; + + String get noOfRoomsLabel => 'NO_OF_ROOMS_LABEL'; + + String get noOfRoomsCLFLabel => 'NO_OF_ROOMS_CLF_LABEL'; + + String get houseDetailsLabel => 'HOUSE_DETAILS_LABEL'; + + String get clfStructureDetailsLabel => 'CLF_STRUCTURE_DETAILS_LABEL'; + + String get selectStructureTypeError => 'PLEASE_SELECT_STRUCTURE_TYPE'; + + String get memberCountError => 'MEMBER_COUNT_ERROR'; + + String get typeOfStructure => 'TYPE_OF_STRUCTURE'; +} + +class HouseholdOverView { + const HouseholdOverView(); + + String get householdOverViewLabel => 'HOUSEHOLD_OVER_VIEW_LABEL'; + + String get instituteNameLabel => 'HOUSEHOLD_OVER_VIEW_INSTITUTE_NAME_LABEL'; + + String get instituteTypeLabel => 'HOUSEHOLD_OVER_VIEW_INSTITUTE_TYPE_LABEL'; + + String get clfOverviewLabel => 'HOUSEHOLD_OVER_VIEW_CLF_LABEL'; + + String get householdOverViewEditLabel => + 'HOUSEHOLD_OVER_VIEW_EDIT_ICON_LABEL'; + + String get clfOverViewEditLabel => 'CLF_OVER_VIEW_EDIT_ICON_LABEL'; + + String get householdOverViewDeleteLabel => + 'HOUSEHOLD_OVER_VIEW_DELETE_ICON_LABEL'; + + String get householdOverViewEditIconText => + 'HOUSEHOLD_OVER_VIEW_EDIT_ICON_LABEL_TEXT'; + + String get clfOverViewEditIconText => 'CLF_OVER_VIEW_EDIT_ICON_LABEL_TEXT'; + + String get householdOverViewActionCardTitle => + 'HOUSEHOLD_OVER_VIEW_ACTION_CARD_TITLE'; + + String get householdOverViewPrimaryActionLabel => + 'HOUSEHOLD_OVER_VIEW_PRIMARY_ACTION_LABEL'; + + String get householdOverViewSecondaryActionLabel => + 'HOUSEHOLD_OVER_VIEW_SECONDARY_ACTION_LABEL'; + + String get householdOverViewDeliveredIconLabel => + 'HOUSEHOLD_OVER_VIEW_DELIVERED_ICON_LABEL'; + + String get householdOverViewRegisteredIconLabel => + 'HOUSEHOLD_OVER_VIEW_REGISTERED_ICON_LABEL'; + + String get householdOverViewNotRegisteredIconLabel => + 'HOUSEHOLD_OVER_VIEW_NOT_REGISTERED_ICON_LABEL'; + + String get householdOverViewNotDeliveredIconLabel => + 'HOUSEHOLD_OVER_VIEW_NOT_DELIVERED_ICON_LABEL'; + + String get householdOverViewNotEligibleIconLabel => + 'HOUSEHOLD_OVER_VIEW_NOT_ELIGIBLE_ICON_LABEL'; + + String get householdOverViewBeneficiaryReferredLabel => + 'HOUSEHOLD_OVER_VIEW_BENEFICIARY_REFERRED_LABEL'; + + String get householdOverViewHouseholdHeadLabel => + 'HOUSEHOLD_OVER_VIEW_HOUSEHOLD_HEAD_LABEL'; + + String get householdOverViewHouseholdHeadNameLabel => + 'HOUSEHOLD_OVER_VIEW_HOUSEHOLD_HEAD_NAME_LABEL'; + + String get householdOverViewActionText => 'HOUSEHOLD_OVER_VIEW_ACTION_TEXT'; + + String get viewDeliveryLabel => 'VIEW_DELIVERY_DETAILS_LABEL'; + + String get transactionDetails => 'STOCK_TRANSACTION_DETAILS'; + + String get householdOverViewAddActionText => + 'HOUSEHOLD_OVER_VIEW__ADD_ACTION_TEXT'; +} + +class MemberCard { + const MemberCard(); + + String get assignAsHouseholdhead => 'MEMBER_CARD_ASSIGN_AS_HEAD'; + + String get assignAsClfhead => 'MEMBER_CARD_ASSIGN_AS_CLF'; + + String get editIndividualDetails => 'MEMBER_CARD_EDIT_INDIVIDUAL_DETAILS'; + + String get deleteIndividualActionText => + 'MEMBER_CARD_DELETE_INDIVIDUAL_ACTION_TEXT'; + + String get deliverInterventionSubmitLabel => + 'MEMBER_CARD_DELIVER_INTERVENTION_SUBMIT_LABEL'; + + String get deliverDetailsUpdateLabel => + 'MEMBER_CARD_DELIVER_DETAILS_UPDATE_LABEL'; + + String get deliverDetailsYearText => 'MEMBER_CARD_DELIVER_DETAILS_YEAR_TEXT'; + + String get editDetails => 'MEMBER_CARD_EDIT_DETAILS'; + + String get heightLabel => 'HEIGHT_LABEL'; + + String get deliverDetailsMonthsText => + 'MEMBER_CARD_DELIVER_DETAILS_MONTHS_TEXT'; + + String get unableToDeliverLabel => 'MEMBER_CARD_UNABLE_TO_DELIVER_LABEL'; + + String get beneficiaryRefusedLabel => 'MEMBER_CARD_BENEFICIARY_REFUSED_LABEL'; + + String get recordAdverseEventsLabel => + 'MEMBER_CARD_RECORD_ADVERSE_EVENTS_LABEL'; + + String get referBeneficiaryLabel => 'MEMBER_CARD_REFER_BENEFICIARY_LABEL'; +} + +class DeliverIntervention { + const DeliverIntervention(); + + String get deliverInterventionLabel => 'DELIVER_INTERVENTION_LABEL'; + + String get beneficiaryChecklistDialogDescription => + 'BENEFICIARY_CHECKLIST_DIALOG_DESCRIPTION'; + + String get refusedDeliveryLabel => 'REFUSED_DELIVERY_LABEL'; + + String get refusedDeliveryVisitDateLabel => 'REFUSED_DELIVERY_VISIT_DATE'; + + String get reasonForRefusalLabel => 'REASON_FOR_REFUSAL_LABEL'; + + String get reasonForRefusalCommentLabel => 'REASON_FOR_REFUSAL_COMMENT_LABEL'; + + String get deliverInterventionResourceLabel => + 'DELIVER_INTERVENTION_RESOURCE_LABEL'; + + String get dateOfRegistrationLabel => + 'DELIVER_INTERVENTION_DATE_OF_REGISTRATION_LABEL'; + + String get resourceDeliveredLabel => + 'DELIVER_INTERVENTION_RESOURCE_DELIVERED_LABEL'; + + String get typeOfResourceUsed => 'TYPE_OF_RESOURCE_USED'; + + String get resourceDeliveredError => + 'DELIVER_INTERVENTION_RESOURCE_DELIVERED_ERROR'; + + String get quantityDistributedLabel => + 'DELIVER_INTERVENTION_QUANTITY_DISTRIBUTED_LABEL'; + + String get deliveryCommentLabel => + 'DELIVER_INTERVENTION_DELIVERY_COMMENT_LABEL'; + + String get deliveryCommentHeading => + 'DELIVER_INTERVENTION_DELIVERY_COMMENT_HEADING'; + + String get deliveryDetailsLabel => + 'DELIVER_INTERVENTION_DELIVERY_DETAILS_LABEL'; + + String get idTypeText => 'DELIVER_INTERVENTION_ID_TYPE_TEXT'; + + String get idNumberText => 'DELIVER_INTERVENTION_ID_NUMBER_TEXT'; + + String get memberCountText => 'DELIVER_INTERVENTION_MEMBER_COUNT_TEXT'; + + String get noOfResourcesForDelivery => + 'DELIVER_INTERVENTION_NO_OF_RESOURCES_FOR_DELIVERY'; + + String get dialogTitle => 'DELIVER_INTERVENTION_DIALOG_TITLE'; + + String get dialogContent => 'DELIVER_INTERVENTION_DIALOG_CONTENT'; + + String get didYouObserveAdvEventsTitle => + 'DID_YOU_OBSERVE_ADVERSE_EVENTS_TITLE'; + + String get didYouObservePreviousAdvEventsTitle => + 'DID_YOU_OBSERVE_PREVIOUS_ADVERSE_EVENTS_TITLE'; + + String get heightLabelText => 'HEIGHT_LABEL_TEXT'; + + String get resourceAddBeneficiary => + 'DELIVER_INTERVENTION_RESOURCE_ADD_RESOURCE'; + + String get resourceDeleteBeneficiary => + 'DELIVER_INTERVENTION_RESOURCE_DELETE_RESOURCE'; + + String get resourceDeleteBeneficiaryDialogTitle => + 'DELIVER_INTERVENTION_RESOURCE_DIALOG_TITLE'; + + String get resourceDeleteBeneficiaryPrimaryActionLabel => + 'DELIVER_INTERVENTION_RESOURCE_DELETE_PRIMARY_ACTION_LABEL'; + + String get wasTheDoseAdministered => 'WAS_THE_DOSE_ADMINISTERED_LABEL'; + + String get dose => 'DELIVER_INTERVENTION_DOSE'; + + String get hidePastCycles => 'DELIVER_INTERVENTION_HIDE_PAST_CYCLES'; + + String get viewPastCycles => 'DELIVER_INTERVENTION_VIEW_PAST_CYCLES'; + + String get currentCycle => 'DELIVER_INTERVENTION_CURRENT_CYCLE'; + + String get cycle => 'DELIVERY_CYCLE'; + + String get recordPastDeliveryDeatils => + 'DELIVER_INTERVENTION_PAST_DELIVERY_DETAILS'; + + String get wasDosePastDeliveryDetails => + 'DELIVER_INTERVENTION_PAST_DOSE_DELIVERY_DETAILS'; + + //[todo] need to change the 24 + String get wasDosePastRecordDeliveryDetails => + 'DELIVER_INTERVENTION_PAST_RECORD_DOSE_DELIVERY_DETAILS'; + + String get resourceCannotBeZero => 'RESOURCE_QUANTITY_CANNOT_BE_ZERO'; + + String get resourceDeliveredValidation => 'RESOURCE_DELIVERED_VALIDATION'; + + String get resourceDuplicateValidation => 'RESOURCE_DUPLICATE_VALIDATION'; + + String get unableToScan => 'UNABLE_TO_SCAN'; + + String get scanValidResource => 'SCAN_VALID_RESOURCE'; + + String get scannedResourceCountMisMatch => 'SCANNED_RESOURCE_COUNT_MISMATCH'; + + String get resourceAlreadyScanned => 'RESOURCE_ALREADY_SCANNED'; + + String get scannerLabel => 'SCANNER_LABEL'; + + String get noOfResourceScanned => 'NO_OF_RESOURCE_SCANNED'; + + String get resourcesScanned => 'RESOURCES_SCANNED'; + + String get saveScannedResource => 'SAVE_SCANNED_RESOURCE'; + + String get flashOn => 'FLASH_ON'; + + String get flashOff => 'FLASH_OFF'; + + String get scannerDialogTitle => 'SCANNER_DIALOG_TITLE'; + + String get scannerDialogContent => 'SCANNER_DIALOG_CONTENT'; + + String get scannerDialogPrimaryAction => 'SCANNER_DIALOG_PRIMARY_ACTION'; + + String get scannerDialogSecondaryAction => 'SCANNER_DIALOG_SECONDARY_ACTION'; + + String get manualScan => 'MANUAL_SCAN'; + + String get manualEnterCode => 'ENTER_MANUAL_CODE'; + + String get manualCodeDescription => 'MANUAL_CODE_DESCRIPTION'; + + String get resourceCode => 'RESOURCE_CODE'; + + String get voucherCode => 'VOUCHER_CODE'; + + String get checkForProductVariantsConfig => + 'CHECK_FOR_PRODUCT_VARIANTS_CONFIG'; +} + +class ReferBeneficiary { + const ReferBeneficiary(); + + String get dateOfReferralLabel => 'REFER_BENEFICIARY_DATE_OF_REFERRAL_LABEL'; + + String get dateOfEvaluationLabel => + 'REFER_BENEFICIARY_DATE_OF_EVALUATION_LABEL'; + + String get administrationUnitFormLabel => 'ADMINISTRATION_UNIT_FORM_LABEL'; + + String get referredByLabel => 'REFERRED_BY_FORM_LABEL'; + + String get referredToLabel => 'REFERRED_TO_FORM_LABEL'; + + String get reasonForReferral => 'REASON_FOR_REFERRAL'; + + String get referralComments => 'REFERRAL_COMMENTS'; + + String get referralDetails => 'REFERRAL_DETAILS_HEADER'; + + String get facilityValidationMessage => 'PLEASE_ENTER_VALID_FACILITY'; + + String get facilityDetails => 'FACILITY_DETAILS_HEADER'; + + String get evaluationFacilityLabel => 'EVALUATION_FACILITY_LABEL'; + + String get nameOfHealthFacilityCoordinatorLabel => + 'NAME_OF_HEALTH_FACILITY_COORDINATOR'; + + String get healthFacilityCoordinatorLabel => 'NAME_OF_HF_COORDINATOR_LABEL'; + + String get nameOfTheChildLabel => 'REFERRAL_NAME_OF_CHILD_LABEL'; + + String get beneficiaryIdLabel => 'REFERRAL_BENEFICIARY_ID_LABEL'; + + String get referralCodeLabel => 'REFERRAL_CODE_LABEL'; + + String get reasonForReferralHeader => 'REASON_FOR_REFERRAL_HEADER'; + + String get searchReferralsHeader => 'SEARCH_REFERRALS_HEADER'; + + String get referredByTeamCodeLabel => 'REFERRED_BY_TEAM_CODE_LABEL'; + + String get selectCycle => 'REFERRAL_SELECT_CYCLE'; + + String get createReferralLabel => 'CREATE_REFERRAL_LABEL'; + + String get noChecklistFound => 'NO_CHECKLISTS_FOUND'; + + String get noFacilityAssigned => 'NO_FACILITY_ASSIGNED'; + + String get noFacilityAssignedDescription => + 'NO_FACILITY_ASSIGNED_DESCRIPTION'; +} + +class ReasonForDeletion { + const ReasonForDeletion(); + + String get reasonForDeletionLabel => 'REASON_FOR_DELETION_LABEL'; +} + +class AdverseEvents { + const AdverseEvents(); + + String get adverseEventsLabel => 'ADVERSE_EVENTS_LABEL'; + + String get sideEffectsLabel => 'SIDE_EFFECTS_LABEL'; + + String get selectSymptomsLabel => 'SELECT_SYMPTOMS_LABEL'; + + String get resourceHeaderLabel => 'RESOURCE_HEADER_LABEL'; + + String get resourceCountHeaderLabel => 'RESOURCE_COUNT_HEADER_LABEL'; + + String get resourcesAdministeredLabel => 'RESOURCES_ADMINISTERED_LABEL'; + + String get didYouReAdministerLabel => 'DID_YOU_RE_ADMINISTER'; + + String get noOfTimesReAdministered => 'NO_OF_TIMES_RE_ADMINISTERED'; +} + +class SearchBeneficiariesShowcase { + const SearchBeneficiariesShowcase(); + + String get numberOfHouseholdsRegistered { + return 'SEARCH_BENEFICIARIES_SHOWCASE_NUMBER_OF_HOUSEHOLDS_REGISTERED'; + } + + String get numberOfBednetsDelivered { + return 'SEARCH_BENEFICIARIES_SHOWCASE_NUMBER_OF_BEDNETS_DELIVERED'; + } + + String get enterNameOfHouseholdHead { + return 'SEARCH_BENEFICIARIES_SHOWCASE_ENTER_NAME_OF_HOUSEHOLD_HEAD'; + } + + String get registerNewHousehold { + return 'SEARCH_BENEFICIARIES_SHOWCASE_REGISTER_NEW_HOUSEHOLD'; + } + + String get nameOfBeneficiary { + return 'SEARCH_BENEFICIARIES_SHOWCASE_NAME_OF_BENEFICIARY'; + } + + String get deliveryStatus { + return 'SEARCH_BENEFICIARIES_SHOWCASE_DELIVERY_STATUS'; + } + + String get open { + return 'SEARCH_BENEFICIARIES_SHOWCASE_OPEN'; + } + + String get beneficiary { + return 'SEARCH_BENEFICIARIES_SHOWCASE_BENEFICIARY'; + } + + String get age { + return 'SEARCH_BENEFICIARIES_SHOWCASE_AGE'; + } + + String get gender { + return 'SEARCH_BENEFICIARIES_SHOWCASE_GENDER'; + } +} + +String get numberOfHouseholdsRegistered { + return 'SEARCH_BENEFICIARIES_SHOWCASE_NUMBER_OF_HOUSEHOLDS_REGISTERED'; +} + +String get numberOfBednetsDelivered { + return 'SEARCH_BENEFICIARIES_SHOWCASE_NUMBER_OF_BEDNETS_DELIVERED'; +} + +String get enterNameOfHouseholdHead { + return 'SEARCH_BENEFICIARIES_SHOWCASE_ENTER_NAME_OF_HOUSEHOLD_HEAD'; +} + +String get registerNewHousehold { + return 'SEARCH_BENEFICIARIES_SHOWCASE_REGISTER_NEW_HOUSEHOLD'; +} + +class HouseholdLocationShowcase { + const HouseholdLocationShowcase(); + + String get buildingName { + return 'HOUSEHOLD_LOCATION_SHOWCASE_BUILDING_NAME'; + } + + String get administrativeArea { + return 'HOUSEHOLD_LOCATION_SHOWCASE_ADMINISTRATIVE_AREA'; + } + + String get gpsAccuracy { + return 'HOUSEHOLD_LOCATION_SHOWCASE_GPS_ACCURACY_LABEL'; + } + + String get landmark { + return 'HOUSEHOLD_LOCATION_SHOWCASE_LANDMARK'; + } + + String get address { + return 'HOUSEHOLD_LOCATION_SHOWCASE_ADDRESS'; + } + + String get postalCode { + return 'HOUSEHOLD_LOCATION_SHOWCASE_POSTAL_CODE'; + } +} + +class HouseholdDetailsShowcase { + const HouseholdDetailsShowcase(); + + String get dateOfRegistration { + return 'HOUSEHOLD_DETAILS_SHOWCASE_DATE_OF_REGISTRATION'; + } + + String get numberOfMembersLivingInHousehold { + return 'HOUSEHOLD_DETAILS_SHOWCASE_NUMBER_OF_MEMBERS_LIVING_IN_HOUSEHOLD'; + } + + String get numberOfPregnantWomenInHousehold => + 'HOUSEHOLD_DETAILS_SHOWCASE_NO_OF_PREGNANT_WOMEN_IN_HOUSEHOLD'; + + String get numberOfChildrenBelow5InHousehold => + 'HOUSEHOLD_DETAILS_SHOWCASE_NO_OF_CHILD_BELOW_5_IN_HOUSEHOLD'; + + String get numberOfRoomsInHousehold => + 'HOUSE_DETAILS_SHOWCASE_NO_OF_ROOMS_IN_HOUSEHOLD'; + + String get typeOfStructure => 'HOUSE_DETAILS_SHOWCASE_TYPE_OF_STRUCTURE'; +} + +class IndividualDetailsShowcase { + const IndividualDetailsShowcase(); + + String get firstNameOfIndividual { + return 'INDIVIDUAL_DETAILS_SHOWCASE_FIRST_NAME_OF_INDIVIDUAL'; + } + + String get lastNameOfIndividual { + return 'INDIVIDUAL_DETAILS_SHOWCASE_LAST_NAME_OF_INDIVIDUAL'; + } + + String get headOfHousehold { + return 'INDIVIDUAL_DETAILS_SHOWCASE_HEAD_OF_HOUSEHOLD'; + } + + String get age { + return 'INDIVIDUAL_DETAILS_SHOWCASE_AGE'; + } + + String get dateOfBirth { + return 'INDIVIDUAL_DETAILS_SHOWCASE_DATE_OF_BIRTH'; + } + + String get gender { + return 'INDIVIDUAL_DETAILS_SHOWCASE_GENDER'; + } + + String get mobile { + return 'INDIVIDUAL_DETAILS_SHOWCASE_MOBILE'; + } + + String get idType { + return 'INDIVIDUAL_DETAILS_SHOWCASE_ID_TYPE'; + } +} + +class HouseholdOverviewShowcase { + const HouseholdOverviewShowcase(); + + String get editHousehold { + return 'HOUSEHOLD_OVERVIEW_SHOWCASE_EDIT_HOUSEHOLD'; + } + + String get deliveryStatus { + return 'HOUSEHOLD_OVERVIEW_SHOWCASE_DELIVERY_STATUS'; + } + + String get householdHead { + return 'HOUSEHOLD_OVERVIEW_SHOWCASE_HOUSEHOLD_HEAD'; + } + + String get administrativeArea { + return 'HOUSEHOLD_OVERVIEW_SHOWCASE_ADMINISTRATIVE_AREA'; + } + + String get memberCount { + return 'HOUSEHOLD_OVERVIEW_SHOWCASE_MEMBER_COUNT'; + } + + String get householdIndividualCardTitle { + return 'HOUSEHOLD_OVERVIEW_SHOWCASE_HOUSEHOLD_INDIVIDUAL_CARD_TITLE'; + } + + String get editMember { + return 'HOUSEHOLD_OVERVIEW_SHOWCASE_EDIT_MEMBER'; + } + + String get addMember { + return 'HOUSEHOLD_OVERVIEW_SHOWCASE_ADD_MEMBER'; + } + + String get deliverIntervention { + return 'HOUSEHOLD_OVERVIEW_SHOWCASE_DELIVER_INTERVENTION'; + } +} + +class DeliverInterventionShowcase { + const DeliverInterventionShowcase(); + + String get dateOfVisitLabel { + return 'DELIVER_INTERVENTION_SHOWCASE_MEMBER_COUNT'; + } + + String get reasonOfRefusalLabel { + return 'DELIVER_INTERVENTION_SHOWCASE_NUMBER_OF_BEDNETS_TO_DELIVER'; + } + + String get commentLabel { + return 'DELIVER_INTERVENTION_SHOWCASE_NUMBER_OF_BEDNETS_DISTRIBUTED'; + } + + String get memberCount { + return 'DELIVER_INTERVENTION_SHOWCASE_MEMBER_COUNT'; + } + + String get numberOfBednetsToDeliver { + return 'DELIVER_INTERVENTION_SHOWCASE_NUMBER_OF_BEDNETS_TO_DELIVER'; + } + + String get numberOfBednetsDistributed { + return 'DELIVER_INTERVENTION_SHOWCASE_NUMBER_OF_BEDNETS_DISTRIBUTED'; + } + + String get deliveryComment { + return 'DELIVER_INTERVENTION_SHOWCASE_DELIVERY_COMMENT'; + } +} + +class CLFLocationShowcase { + const CLFLocationShowcase(); + + String get buildingName { + return 'CLF_LOCATION_SHOWCASE_BUILDING_NAME'; + } + + String get administrativeArea { + return 'CLF_LOCATION_SHOWCASE_ADMINISTRATIVE_AREA'; + } + + String get gpsAccuracy { + return 'CLF_LOCATION_SHOWCASE_GPS_ACCURACY_LABEL'; + } + + String get landmark { + return 'CLF_LOCATION_SHOWCASE_LANDMARK'; + } + + String get address { + return 'CLF_LOCATION_SHOWCASE_ADDRESS'; + } + + String get postalCode { + return 'CLF_LOCATION_SHOWCASE_POSTAL_CODE'; + } +} + +class CLFDetailsShowcase { + const CLFDetailsShowcase(); + + String get dateOfRegistration { + return 'CLF_DETAILS_SHOWCASE_DATE_OF_REGISTRATION'; + } + + String get numberOfMembersLivingInHousehold { + return 'CLF_DETAILS_SHOWCASE_NUMBER_OF_MEMBERS_LIVING_IN_INSTITUTION'; + } + + String get numberOfPregnantWomenInHousehold => + 'CLF_DETAILS_SHOWCASE_NO_OF_PREGNANT_WOMEN_IN_INSTITUTION'; + + String get numberOfChildrenBelow5InHousehold => + 'CLF_DETAILS_SHOWCASE_NO_OF_CHILD_BELOW_5_IN_INSTITUTION'; +} diff --git a/packages/delivery/lib/utils/typedefs.dart b/packages/delivery/lib/utils/typedefs.dart new file mode 100644 index 0000000000..d946b51317 --- /dev/null +++ b/packages/delivery/lib/utils/typedefs.dart @@ -0,0 +1,14 @@ +import 'package:delivery/models/entities/referral.dart'; +import 'package:delivery/models/entities/side_effect.dart'; +import 'package:delivery/models/entities/task.dart'; +import 'package:digit_data_model/data_model.dart'; + +typedef TaskDataRepository = DataRepository; +typedef SideEffectDataRepository + = DataRepository; +typedef ReferralDataRepository + = DataRepository; +typedef ProjectResourceDataRepository + = DataRepository; +typedef ProductVariantDataRepository + = DataRepository; diff --git a/packages/registration_delivery/lib/utils/utils.dart b/packages/delivery/lib/utils/utils.dart similarity index 98% rename from packages/registration_delivery/lib/utils/utils.dart rename to packages/delivery/lib/utils/utils.dart index d89a2f2fe8..9a6b4d9502 100644 --- a/packages/registration_delivery/lib/utils/utils.dart +++ b/packages/delivery/lib/utils/utils.dart @@ -7,9 +7,9 @@ import 'package:digit_data_model/models/entities/household_type.dart'; import 'package:digit_ui_components/utils/date_utils.dart'; import 'package:formula_parser/formula_parser.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:registration_delivery/models/entities/household.dart'; +import 'package:registration/models/entities/additional_fields_type.dart'; +import 'package:registration/models/entities/household.dart'; -import '../models/entities/additional_fields_type.dart'; import '../models/entities/referral.dart'; import '../models/entities/side_effect.dart'; import '../models/entities/status.dart'; @@ -406,15 +406,14 @@ double? calculateDistance(Coordinate? start, Coordinate? end) { // create a singleton class for RegistrationDelivery package where set data and get data methods are defined -class RegistrationDeliverySingleton { - static final RegistrationDeliverySingleton _singleton = - RegistrationDeliverySingleton._internal(); +class DeliverySingleton { + static final DeliverySingleton _singleton = DeliverySingleton._internal(); - factory RegistrationDeliverySingleton() { + factory DeliverySingleton() { return _singleton; } - RegistrationDeliverySingleton._internal(); + DeliverySingleton._internal(); String? _tenantId; String? _loggedInUserUuid; @@ -603,7 +602,7 @@ Status getTaskStatus(Iterable tasks) { Status.administeredFailed.toValue(): Status.administeredFailed, Status.inComplete.toValue(): Status.inComplete, Status.toAdminister.toValue(): Status.toAdminister, - Status.closeHousehold.toValue(): Status.closeHousehold, + // Status.closeHousehold.toValue(): Status.closeHousehold, }; if (tasks.isEmpty) { diff --git a/packages/delivery/lib/widgets/back_navigation_help_header.dart b/packages/delivery/lib/widgets/back_navigation_help_header.dart new file mode 100644 index 0000000000..e6c89326aa --- /dev/null +++ b/packages/delivery/lib/widgets/back_navigation_help_header.dart @@ -0,0 +1,81 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/ComponentTheme/back_button_theme.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_back_button.dart'; +import 'package:flutter/material.dart'; +import 'package:delivery/blocs/app_localization.dart'; +import 'package:registration/widgets/showcase/showcase_button.dart'; + +import '../../utils/i18_key_constants.dart' as i18; + +class BackNavigationHelpHeaderWidget extends StatelessWidget { + final bool showHelp; + final bool showBackNavigation; + final bool showLogoutCTA; + final VoidCallback? helpClicked; + final VoidCallback? handleBack; + final ShowcaseButton? showcaseButton; + + const BackNavigationHelpHeaderWidget({ + super.key, + this.showHelp = false, //hiding help + this.showBackNavigation = true, + this.showLogoutCTA = false, + this.helpClicked, + this.handleBack, + this.showcaseButton, + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return Padding( + padding: const EdgeInsets.only(left: spacer2, top: spacer4), + child: Row( + children: [ + Expanded( + child: Row( + children: [ + if (showBackNavigation) + DigitBackButton( + label: DeliveryLocalization.of(context).translate( + i18.common.coreCommonBack, + ), + digitBackButtonThemeData: + const DigitBackButtonThemeData().copyWith( + context: context, + backDigitButtonIcon: Icon( + Icons.arrow_left, + size: MediaQuery.of(context).size.width < 500 + ? Theme.of(context).spacerTheme.spacer5 + : Theme.of(context).spacerTheme.spacer6, + color: Theme.of(context).colorTheme.primary.primary2, + ), + ), + handleBack: () { + context.router.maybePop(); + handleBack != null ? handleBack!() : null; + }, + ) + ], + ), + ), + SizedBox(width: showHelp ? spacer2 * 2 : 0), + if (showHelp) + DigitButton( + label: DeliveryLocalization.of(context) + .translate(i18.common.coreCommonHelp), + type: DigitButtonType.tertiary, + size: DigitButtonSize.small, + suffixIcon: Icons.help_outline_outlined, + onPressed: () => helpClicked, + ), + SizedBox(width: showcaseButton != null && showHelp ? 16 : 0), + if (showcaseButton != null && showHelp) showcaseButton!, + ], + ), + ); + } +} diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart b/packages/delivery/lib/widgets/beneficiary/beneficiary_card.dart similarity index 82% rename from packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart rename to packages/delivery/lib/widgets/beneficiary/beneficiary_card.dart index 245eee5091..402a4fcf6e 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_card.dart +++ b/packages/delivery/lib/widgets/beneficiary/beneficiary_card.dart @@ -1,10 +1,9 @@ +import 'package:delivery/blocs/app_localization.dart'; +import 'package:delivery/models/entities/status.dart'; +import 'package:delivery/utils/utils.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:flutter/material.dart'; -import 'package:registration_delivery/blocs/app_localization.dart'; - -import '../../models/entities/status.dart'; -import '../../utils/utils.dart'; class BeneficiaryCard extends StatelessWidget { final String title; @@ -47,11 +46,11 @@ class BeneficiaryCard extends StatelessWidget { status == Status.delivered.toValue() ? DigitButton( prefixIcon: Icons.check_circle, - label: RegistrationDeliveryLocalization.of(context) - .translate(status.toString() == - Status.administeredSuccess.toValue() - ? '${RegistrationDeliverySingleton().selectedProject!.projectType}_${status.toString()}' - : status.toString()), + label: DeliveryLocalization.of(context).translate(status + .toString() == + Status.administeredSuccess.toValue() + ? '${DeliverySingleton().selectedProject!.projectType}_${status.toString()}' + : status.toString()), capitalizeLetters: false, textColor: theme.colorTheme.alert.success, iconColor: theme.colorTheme.alert.success, @@ -62,7 +61,7 @@ class BeneficiaryCard extends StatelessWidget { ) : DigitButton( prefixIcon: Icons.info_rounded, - label: RegistrationDeliveryLocalization.of(context) + label: DeliveryLocalization.of(context) .translate(status.toString()), textColor: theme.colorTheme.alert.error, iconColor: theme.colorTheme.alert.error, diff --git a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_statistics_card.dart b/packages/delivery/lib/widgets/beneficiary/beneficiary_statistics_card.dart similarity index 95% rename from packages/registration_delivery/lib/widgets/beneficiary/beneficiary_statistics_card.dart rename to packages/delivery/lib/widgets/beneficiary/beneficiary_statistics_card.dart index b7f32cdb5f..1a09877e4e 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/beneficiary_statistics_card.dart +++ b/packages/delivery/lib/widgets/beneficiary/beneficiary_statistics_card.dart @@ -1,9 +1,8 @@ +import 'package:delivery/models/entities/beneficiary_statistics/beneficiary_statistics_model.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; -import '../../models/beneficiary_statistics/beneficiary_statistics_model.dart'; - class BeneficiaryStatisticsCard extends StatelessWidget { final BeneficiaryStatisticsWrapperModel beneficiaryStatistics; diff --git a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart b/packages/delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart similarity index 98% rename from packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart rename to packages/delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart index 61114da877..87ce78840d 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart +++ b/packages/delivery/lib/widgets/beneficiary/resource_beneficiary_card.dart @@ -1,3 +1,4 @@ +import 'package:delivery/widgets/localized.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; @@ -6,9 +7,7 @@ import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; - import '../../utils/i18_key_constants.dart' as i18; -import '../localized.dart'; class ResourceBeneficiaryCard extends LocalizedStatefulWidget { final void Function(int) onDelete; @@ -41,7 +40,7 @@ class ResourceBeneficiaryCardState orElse: () => const Offstage(), fetched: (productVariants) { return SelectionCard( - width: MediaQuery.of(context).size.width*.8, + width: MediaQuery.of(context).size.width * .8, showParentContainer: true, options: productVariants, onSelectionChanged: (selectedOptions) { diff --git a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/delivery/lib/widgets/beneficiary/view_beneficiary_card.dart similarity index 90% rename from packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart rename to packages/delivery/lib/widgets/beneficiary/view_beneficiary_card.dart index 2ea3ef0137..d89dfe316d 100644 --- a/packages/registration_delivery/lib/widgets/beneficiary/view_beneficiary_card.dart +++ b/packages/delivery/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -1,4 +1,11 @@ import 'package:collection/collection.dart'; +import 'package:delivery/blocs/search_households/search_households.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; +import 'package:delivery/models/entities/status.dart'; +import 'package:delivery/models/entities/task.dart'; +import 'package:delivery/utils/constants.dart'; +import 'package:delivery/utils/utils.dart'; +import 'package:delivery/widgets/localized.dart'; import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/models/entities/household_type.dart'; import 'package:digit_ui_components/digit_components.dart'; @@ -8,19 +15,11 @@ import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; import 'package:flutter/material.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; - -import '../../blocs/search_households/search_households.dart'; -import '../../models/entities/status.dart'; -import '../../models/entities/task.dart'; -import '../../utils/constants.dart'; import '../../utils/i18_key_constants.dart' as i18; -import '../../utils/utils.dart'; -import '../localized.dart'; import 'beneficiary_card.dart'; class ViewBeneficiaryCard extends LocalizedStatefulWidget { - final HouseholdMemberWrapper householdMember; + final HouseholdMemberDeliveryWrapper householdMember; final VoidCallback onOpenPressed; final double? distance; @@ -37,7 +36,7 @@ class ViewBeneficiaryCard extends LocalizedStatefulWidget { } class ViewBeneficiaryCardState extends LocalizedState { - late HouseholdMemberWrapper householdMember; + late HouseholdMemberDeliveryWrapper householdMember; @override void initState() { @@ -82,14 +81,13 @@ class ViewBeneficiaryCardState extends LocalizedState { ), ]; final filteredHeaderList = - RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual + DeliverySingleton().beneficiaryType != BeneficiaryType.individual ? headerList .where((element) => element.cellValue != 'delivery') .toList() : headerList; final currentCycle = - RegistrationDeliverySingleton().projectType?.cycles?.firstWhereOrNull( + DeliverySingleton().projectType?.cycles?.firstWhereOrNull( (e) => (e.startDate) < DateTime.now().millisecondsSinceEpoch && (e.endDate) > DateTime.now().millisecondsSinceEpoch, @@ -100,7 +98,7 @@ class ViewBeneficiaryCardState extends LocalizedState { (e) { final projectBeneficiary = householdMember.projectBeneficiaries?.where((element) { - if (RegistrationDeliverySingleton().beneficiaryType == + if (DeliverySingleton().beneficiaryType == BeneficiaryType.individual) { return element.beneficiaryClientReferenceId == e.clientReferenceId; } else { @@ -154,7 +152,7 @@ class ViewBeneficiaryCardState extends LocalizedState { years: ageInYears, months: ageInMonths, ), - RegistrationDeliverySingleton().projectType, + DeliverySingleton().projectType, (taskData ?? []).isNotEmpty ? taskData?.last : null, sideEffects, ); @@ -229,12 +227,12 @@ class ViewBeneficiaryCardState extends LocalizedState { ]; return DigitTableRow( - tableRow: RegistrationDeliverySingleton().beneficiaryType != - BeneficiaryType.individual - ? rowTableData - .where((element) => element.cellKey != 'delivery') - .toList() - : rowTableData, + tableRow: + DeliverySingleton().beneficiaryType != BeneficiaryType.individual + ? rowTableData + .where((element) => element.cellKey != 'delivery') + .toList() + : rowTableData, ); // rowTableData }, @@ -262,7 +260,7 @@ class ViewBeneficiaryCardState extends LocalizedState { years: ageInYears, months: ageInMonths, ), - RegistrationDeliverySingleton().projectType, + DeliverySingleton().projectType, (householdMember.tasks ?? []).isNotEmpty ? householdMember.tasks?.last : null, @@ -274,8 +272,7 @@ class ViewBeneficiaryCardState extends LocalizedState { final isBeneficiaryRefused = checkIfBeneficiaryRefused(householdMember.tasks); final projectBeneficiary = householdMember.projectBeneficiaries?.where((p) { - if (RegistrationDeliverySingleton().beneficiaryType == - BeneficiaryType.individual) { + if (DeliverySingleton().beneficiaryType == BeneficiaryType.individual) { return p.beneficiaryClientReferenceId == householdMember.headOfHousehold?.clientReferenceId; } else { @@ -306,7 +303,7 @@ class ViewBeneficiaryCardState extends LocalizedState { householdMember.household?.address?.city, householdMember.household?.address?.pincode, ].whereNotNull().take(2).join(' '), - subtitle: (RegistrationDeliverySingleton().householdType == + subtitle: (DeliverySingleton().householdType == HouseholdType.family) ? widget.distance != null ? '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}\n${((widget.distance!) * 1000).round() > 999 ? '(${((widget.distance!).round())} km)' : '(${((widget.distance!) * 1000).round()} mts) ${localizations.translate(i18.beneficiaryDetails.fromCurrentLocation)}'}' @@ -316,18 +313,18 @@ class ViewBeneficiaryCardState extends LocalizedState { ? '(${((widget.distance!).round())} km)' : '(${((widget.distance!) * 1000).round()} mts) ${localizations.translate(i18.beneficiaryDetails.fromCurrentLocation)}' : null, - status: (RegistrationDeliverySingleton().householdType == + status: (DeliverySingleton().householdType == HouseholdType.community) ? null : getStatus( tasks ?? [], householdMember.projectBeneficiaries ?? [], - RegistrationDeliverySingleton().beneficiaryType == + DeliverySingleton().beneficiaryType == BeneficiaryType.individual ? isNotEligible : false, isBeneficiaryRefused), - title: (RegistrationDeliverySingleton().householdType == + title: (DeliverySingleton().householdType == HouseholdType.community) ? householdMember.household?.address?.buildingName ?? localizations.translate(i18.common.coreCommonNA) @@ -349,8 +346,7 @@ class ViewBeneficiaryCardState extends LocalizedState { ), ], ), - if (RegistrationDeliverySingleton().householdType == - HouseholdType.family) ...[ + if (DeliverySingleton().householdType == HouseholdType.family) ...[ Offstage( offstage: !isCardExpanded, child: DigitTable( diff --git a/packages/registration_delivery/lib/widgets/component_wrapper/product_variant_bloc_wrapper.dart b/packages/delivery/lib/widgets/component_wrapper/product_variant_bloc_wrapper.dart similarity index 78% rename from packages/registration_delivery/lib/widgets/component_wrapper/product_variant_bloc_wrapper.dart rename to packages/delivery/lib/widgets/component_wrapper/product_variant_bloc_wrapper.dart index f7e633467c..4d6db1c41b 100644 --- a/packages/registration_delivery/lib/widgets/component_wrapper/product_variant_bloc_wrapper.dart +++ b/packages/delivery/lib/widgets/component_wrapper/product_variant_bloc_wrapper.dart @@ -1,9 +1,10 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; -import 'package:registration_delivery/utils/utils.dart'; -import 'package:registration_delivery/widgets/component_wrapper/selected_project_builder.dart'; +import 'package:registration/utils/extensions/extensions.dart'; +import 'package:registration/widgets/component_wrapper/selected_project_builder.dart'; + +import '../../utils/utils.dart'; class ProductVariantBlocWrapper extends StatelessWidget { final Widget child; @@ -32,7 +33,7 @@ class ProductVariantBlocWrapper extends StatelessWidget { )..add( ProductVariantLoadEvent( query: ProjectResourceSearchModel( - projectId: [RegistrationDeliverySingleton().projectId!], + projectId: [DeliverySingleton().projectId!], ), ), ), diff --git a/packages/registration_delivery/lib/widgets/localized.dart b/packages/delivery/lib/widgets/localized.dart similarity index 61% rename from packages/registration_delivery/lib/widgets/localized.dart rename to packages/delivery/lib/widgets/localized.dart index 36220369a3..b3289d87e2 100644 --- a/packages/registration_delivery/lib/widgets/localized.dart +++ b/packages/delivery/lib/widgets/localized.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import '../blocs/app_localization.dart'; abstract class LocalizedStatefulWidget extends StatefulWidget { - final RegistrationDeliveryLocalization? appLocalizations; + final DeliveryLocalization? appLocalizations; const LocalizedStatefulWidget({ super.key, @@ -13,11 +13,11 @@ abstract class LocalizedStatefulWidget extends StatefulWidget { abstract class LocalizedState extends State { - late RegistrationDeliveryLocalization _localizations; + late DeliveryLocalization _localizations; - RegistrationDeliveryLocalization get localizations => _localizations; + DeliveryLocalization get localizations => _localizations; - set localizations(RegistrationDeliveryLocalization localizations) { + set localizations(DeliveryLocalization localizations) { if (mounted) { setState(() { _localizations = localizations; @@ -29,7 +29,7 @@ abstract class LocalizedState @mustCallSuper void didChangeDependencies() { _localizations = - widget.appLocalizations ?? RegistrationDeliveryLocalization.of(context); + widget.appLocalizations ?? DeliveryLocalization.of(context); super.didChangeDependencies(); } } diff --git a/packages/registration_delivery/lib/widgets/member_card/member_card.dart b/packages/delivery/lib/widgets/member_card/member_card.dart similarity index 81% rename from packages/registration_delivery/lib/widgets/member_card/member_card.dart rename to packages/delivery/lib/widgets/member_card/member_card.dart index dfc8f0f869..87b242faaf 100644 --- a/packages/registration_delivery/lib/widgets/member_card/member_card.dart +++ b/packages/delivery/lib/widgets/member_card/member_card.dart @@ -1,6 +1,6 @@ import 'package:auto_route/auto_route.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:digit_data_model/models/entities/household_type.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/digit_action_card.dart'; @@ -8,19 +8,22 @@ import 'package:digit_ui_components/widgets/atoms/digit_tag.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; +import 'package:delivery/blocs/household_overview/household_overview.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; +import 'package:registration/models/entities/registration_delivery_enums.dart'; + +import 'package:registration/router/registration_router.gm.dart' as reg; +import 'package:registration/utils/extensions/extensions.dart'; import 'package:survey_form/blocs/service_definition.dart'; +import '../../utils/i18_key_constants.dart' as i18; + import '../../blocs/app_localization.dart'; import '../../blocs/delivery_intervention/deliver_intervention.dart'; -import '../../blocs/household_overview/household_overview.dart'; -import '../../models/entities/registration_delivery_enums.dart'; + import '../../models/entities/side_effect.dart'; import '../../models/entities/status.dart'; import '../../models/entities/task.dart'; -import '../../router/registration_delivery_router.gm.dart'; -import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; class MemberCard extends StatelessWidget { @@ -34,9 +37,7 @@ class MemberCard extends StatelessWidget { final bool isDelivered; final VoidCallback setAsHeadAction; - final VoidCallback editMemberAction; - final VoidCallback deleteMemberAction; - final RegistrationDeliveryLocalization localizations; + final DeliveryLocalization localizations; final List? tasks; final List? sideEffects; final bool isNotEligible; @@ -55,8 +56,6 @@ class MemberCard extends StatelessWidget { required this.localizations, required this.isDelivered, required this.setAsHeadAction, - required this.editMemberAction, - required this.deleteMemberAction, this.projectBeneficiaries, this.tasks, this.isNotEligible = false, @@ -69,7 +68,7 @@ class MemberCard extends StatelessWidget { @override Widget build(BuildContext context) { final theme = Theme.of(context); - final beneficiaryType = RegistrationDeliverySingleton().beneficiaryType; + final beneficiaryType = DeliverySingleton().beneficiaryType; final textTheme = theme.digitTextTheme(context); return DigitCard( @@ -98,65 +97,6 @@ class MemberCard extends StatelessWidget { ), ], ), - Positioned( - child: Align( - alignment: Alignment.topRight, - child: DigitButton( - isDisabled: (projectBeneficiaries ?? []).isEmpty, - onPressed: () => showDialog( - context: context, - builder: (ctx) => DigitActionCard( - onOutsideTap: () { - Navigator.of(context, rootNavigator: true) - .pop(); - }, - actions: [ - DigitButton( - prefixIcon: Icons.person, - label: (RegistrationDeliverySingleton() - .householdType == - HouseholdType.community) - ? localizations.translate( - i18.memberCard.assignAsClfhead) - : localizations.translate( - i18.memberCard.assignAsHouseholdhead, - ), - isDisabled: isHead ? true : false, - onPressed: setAsHeadAction, - type: DigitButtonType.secondary, - size: DigitButtonSize.large, - ), - DigitButton( - prefixIcon: Icons.edit, - label: localizations.translate( - i18.memberCard.editIndividualDetails, - ), - onPressed: editMemberAction, - type: DigitButtonType.secondary, - size: DigitButtonSize.large, - ), - DigitButton( - prefixIcon: Icons.delete, - label: localizations.translate( - i18.memberCard.deleteIndividualActionText, - ), - isDisabled: isHead ? true : false, - onPressed: deleteMemberAction, - type: DigitButtonType.secondary, - size: DigitButtonSize.large, - ), - ], - ), - ), - label: localizations.translate( - i18.memberCard.editDetails, - ), - prefixIcon: Icons.edit, - type: DigitButtonType.tertiary, - size: DigitButtonSize.medium, - ), - ), - ), ], ), Padding( @@ -265,8 +205,8 @@ class MemberCard extends StatelessWidget { .householdOverViewActionText, ), onPressed: () { - final bloc = - context.read(); + final bloc = context.read< + HouseholdOverviewDeliveryBloc>(); final serviceDefinitionBloc = context .read() .state; @@ -279,10 +219,9 @@ class MemberCard extends StatelessWidget { ); bloc.add(HouseholdOverviewReloadEvent( projectId: - RegistrationDeliverySingleton() - .projectId!, + DeliverySingleton().projectId!, projectBeneficiaryType: - RegistrationDeliverySingleton() + DeliverySingleton() .beneficiaryType ?? BeneficiaryType.individual, )); @@ -310,8 +249,8 @@ class MemberCard extends StatelessWidget { tasks, context.selectedCycle, )) { - context.router - .push(BeneficiaryDetailsRoute()); + context.router.push( + BeneficiaryDetailsDeliveryRoute()); } else { serviceDefinitionBloc.when( empty: () {}, @@ -323,11 +262,11 @@ class MemberCard extends StatelessWidget { .code .toString() .contains( - '${RegistrationDeliverySingleton().selectedProject!.name}.${RegistrationDeliveryEnums.eligibility.toValue()}')) + '${DeliverySingleton().selectedProject!.name}.${RegistrationDeliveryEnums.eligibility.toValue()}')) .toList() .isEmpty) { context.router.push( - BeneficiaryDetailsRoute(), + BeneficiaryDetailsDeliveryRoute(), ); } else { navigateToChecklist(context, @@ -395,19 +334,19 @@ class MemberCard extends StatelessWidget { clientReferenceId: IdGen.i.identifier, tenantId: - RegistrationDeliverySingleton() + DeliverySingleton() .tenantId, rowVersion: 1, auditDetails: AuditDetails( createdBy: - RegistrationDeliverySingleton() + DeliverySingleton() .loggedInUserUuid!, createdTime: context .millisecondsSinceEpoch(), ), projectId: - RegistrationDeliverySingleton() + DeliverySingleton() .projectId, status: Status .beneficiaryRefused @@ -415,12 +354,12 @@ class MemberCard extends StatelessWidget { clientAuditDetails: ClientAuditDetails( createdBy: - RegistrationDeliverySingleton() + DeliverySingleton() .loggedInUserUuid!, createdTime: context .millisecondsSinceEpoch(), lastModifiedBy: - RegistrationDeliverySingleton() + DeliverySingleton() .loggedInUserUuid, lastModifiedTime: context .millisecondsSinceEpoch(), @@ -442,29 +381,29 @@ class MemberCard extends StatelessWidget { ), isEditing: false, boundaryModel: - RegistrationDeliverySingleton() + DeliverySingleton() .boundary!, ), ); - final reloadState = context - .read(); + final reloadState = context.read< + HouseholdOverviewDeliveryBloc>(); Future.delayed( const Duration(milliseconds: 500), () { reloadState.add( HouseholdOverviewReloadEvent( projectId: - RegistrationDeliverySingleton() + DeliverySingleton() .projectId!, projectBeneficiaryType: - RegistrationDeliverySingleton() + DeliverySingleton() .beneficiaryType!, ), ); }, ).then( (value) => context.router.push( - HouseholdAcknowledgementRoute( + reg.HouseholdAcknowledgementRoute( enableViewHousehold: true, ), ), diff --git a/packages/registration_delivery/lib/widgets/progress_bar/beneficiary_progress.dart b/packages/delivery/lib/widgets/progress_bar/beneficiary_progress.dart similarity index 83% rename from packages/registration_delivery/lib/widgets/progress_bar/beneficiary_progress.dart rename to packages/delivery/lib/widgets/progress_bar/beneficiary_progress.dart index eff24ef845..7acbff3091 100644 --- a/packages/registration_delivery/lib/widgets/progress_bar/beneficiary_progress.dart +++ b/packages/delivery/lib/widgets/progress_bar/beneficiary_progress.dart @@ -6,9 +6,8 @@ import 'package:digit_ui_components/theme/spacers.dart'; import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; - +import 'package:registration/models/entities/project_beneficiary.dart'; import '../../data/repositories/local/project_beneficiary.dart'; -import '../../models/entities/project_beneficiary.dart'; import '../../utils/utils.dart'; import '../progress_indicator/progress_indicator.dart'; @@ -34,7 +33,7 @@ class BeneficiaryProgressBarState extends State { final repository = context.read< LocalRepository>() - as ProjectBeneficiaryLocalRepository; + as ProjectBeneficiaryLocalDeliveryRepository; final now = DateTime.now(); final gte = DateTime( @@ -55,7 +54,7 @@ class BeneficiaryProgressBarState extends State { repository.listenToChanges( query: ProjectBeneficiarySearchModel( - projectId: [RegistrationDeliverySingleton().projectId.toString()], + projectId: [DeliverySingleton().projectId.toString()], ), listener: (data) { if (mounted) { @@ -75,8 +74,8 @@ class BeneficiaryProgressBarState extends State { @override Widget build(BuildContext context) { - final selectedProject = RegistrationDeliverySingleton().selectedProject!; - final beneficiaryType = RegistrationDeliverySingleton().beneficiaryType; + final selectedProject = DeliverySingleton().selectedProject!; + final beneficiaryType = DeliverySingleton().beneficiaryType; final targetModel = selectedProject.targets?.firstWhereOrNull( (element) => element.beneficiaryType == beneficiaryType, @@ -84,14 +83,13 @@ class BeneficiaryProgressBarState extends State { final target = targetModel?.targetNo ?? 0.0; - return DigitCard( - margin: const EdgeInsets.all(spacer2), - children: [ProgressIndicatorContainer( + return DigitCard(margin: const EdgeInsets.all(spacer2), children: [ + ProgressIndicatorContainer( label: '${max(target - current, 0).round()} ${widget.label}', prefixLabel: '$current ${widget.prefixLabel}', suffixLabel: target.toStringAsFixed(0), value: target == 0 ? 0 : min(current / target, 1), - ),] - ); + ), + ]); } } diff --git a/packages/registration_delivery/lib/widgets/progress_indicator/progress_indicator.dart b/packages/delivery/lib/widgets/progress_indicator/progress_indicator.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/progress_indicator/progress_indicator.dart rename to packages/delivery/lib/widgets/progress_indicator/progress_indicator.dart diff --git a/packages/registration_delivery/lib/widgets/showcase/config/deliver_intervention.dart b/packages/delivery/lib/widgets/showcase/config/deliver_intervention.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/showcase/config/deliver_intervention.dart rename to packages/delivery/lib/widgets/showcase/config/deliver_intervention.dart diff --git a/packages/registration_delivery/lib/widgets/showcase/config/refused_delivery.dart b/packages/delivery/lib/widgets/showcase/config/refused_delivery.dart similarity index 60% rename from packages/registration_delivery/lib/widgets/showcase/config/refused_delivery.dart rename to packages/delivery/lib/widgets/showcase/config/refused_delivery.dart index 40329e2b34..94d2e4a90a 100644 --- a/packages/registration_delivery/lib/widgets/showcase/config/refused_delivery.dart +++ b/packages/delivery/lib/widgets/showcase/config/refused_delivery.dart @@ -1,17 +1,18 @@ part of 'showcase_constants.dart'; class _RefusedDeliveryShowcaseData { - static final _RefusedDeliveryShowcaseData _instance = _RefusedDeliveryShowcaseData._(); + static final _RefusedDeliveryShowcaseData _instance = + _RefusedDeliveryShowcaseData._(); _RefusedDeliveryShowcaseData._(); factory _RefusedDeliveryShowcaseData() => _instance; List get showcaseData => [ - dateOfVisit, - reasonOfRefusal, - comments, - ]; + dateOfVisit, + reasonOfRefusal, + comments, + ]; final dateOfVisit = ShowcaseItemBuilder( messageLocalizationKey: i18.deliverInterventionShowcase.dateOfVisitLabel, @@ -19,10 +20,9 @@ class _RefusedDeliveryShowcaseData { final reasonOfRefusal = ShowcaseItemBuilder( messageLocalizationKey: - i18.deliverInterventionShowcase.reasonOfRefusalLabel, + i18.deliverInterventionShowcase.reasonOfRefusalLabel, ); final comments = ShowcaseItemBuilder( - messageLocalizationKey: - i18.deliverInterventionShowcase.commentLabel, + messageLocalizationKey: i18.deliverInterventionShowcase.commentLabel, ); } diff --git a/packages/registration_delivery/lib/widgets/showcase/config/search_beneficiaries_showcase.dart b/packages/delivery/lib/widgets/showcase/config/search_beneficiaries_showcase.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/showcase/config/search_beneficiaries_showcase.dart rename to packages/delivery/lib/widgets/showcase/config/search_beneficiaries_showcase.dart diff --git a/packages/delivery/lib/widgets/showcase/config/showcase_constants.dart b/packages/delivery/lib/widgets/showcase/config/showcase_constants.dart new file mode 100644 index 0000000000..11ff799641 --- /dev/null +++ b/packages/delivery/lib/widgets/showcase/config/showcase_constants.dart @@ -0,0 +1,10 @@ +import '../../../utils/i18_key_constants.dart' as i18; +import '../showcase_wrappers.dart'; + +part 'deliver_intervention.dart'; +part 'search_beneficiaries_showcase.dart'; +part 'refused_delivery.dart'; + +final searchBeneficiariesShowcaseData = _SearchBeneficiariesShowcaseData(); +final deliverInterventionShowcaseData = _DeliverInterventionShowcaseData(); +final refusedDeliveryShowcaseData = _RefusedDeliveryShowcaseData(); diff --git a/packages/delivery/lib/widgets/showcase/showcase_button.dart b/packages/delivery/lib/widgets/showcase/showcase_button.dart new file mode 100644 index 0000000000..ea052b73ca --- /dev/null +++ b/packages/delivery/lib/widgets/showcase/showcase_button.dart @@ -0,0 +1,107 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:delivery/router/delivery_router.gm.dart'; +import 'package:delivery/widgets/localized.dart'; +import 'package:delivery/widgets/showcase/config/showcase_constants.dart'; + +import 'package:digit_showcase/showcase_widget.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; +import 'package:flutter/material.dart'; +import 'package:delivery/blocs/app_localization.dart'; +import 'package:registration/router/registration_router.gm.dart' as reg; +import 'package:delivery/utils/i18_key_constants.dart' as i18; +import 'package:registration/widgets/showcase/config/showcase_constants.dart' + as reg; + +class ShowcaseButton extends LocalizedStatefulWidget { + final Iterable? showcaseFor; + final bool isCommunity; + + const ShowcaseButton( + {super.key, this.showcaseFor, required this.isCommunity}); + + @override + LocalizedState createState() => ShowcaseButtonState(); +} + +class ShowcaseButtonState extends LocalizedState { + @override + Widget build(BuildContext context) { + return TextButton( + style: TextButton.styleFrom(padding: EdgeInsets.zero), + onPressed: () { + if (widget.showcaseFor?.isNotEmpty == true) { + ShowcaseWidget.of(context).startShowCase( + widget.showcaseFor!.toList(), + ); + + return; + } + + final current = context.router.current.name; + final paths = _showcasePathsForRoute(current); + + if (paths == null) return; + if (paths.isEmpty) return; + + ShowcaseWidget.of(context).startShowCase(paths.toList()); + }, + child: Row( + children: [ + Padding( + padding: const EdgeInsets.fromLTRB( + spacer2, + spacer2, + spacer2 / 2, + spacer2, + ), + child: Text( + DeliveryLocalization.of(context) + .translate(i18.common.coreCommonHelp), + overflow: TextOverflow.ellipsis, + ), + ), + const Icon(Icons.help_outline), + ], + ), + ); + } + + Iterable? _showcasePathsForRoute(String routeName) { + switch (routeName) { + case reg.SearchBeneficiaryRoute.name: + return searchBeneficiariesShowcaseData.showcaseData.map( + (e) => e.showcaseKey, + ); + case reg.HouseholdLocationRoute.name: + return (widget.isCommunity) + ? reg.clfLocationShowCaseData.showcaseData.map( + (e) => e.showcaseKey, + ) + : reg.householdLocationShowcaseData.showcaseData.map( + (e) => e.showcaseKey, + ); + case reg.HouseHoldDetailsRoute.name: + return (widget.isCommunity) + ? reg.clfDetailsShowcaseData.showcaseData.map( + (e) => e.showcaseKey, + ) + : reg.householdDetailsShowcaseData.showcaseData.map( + (e) => e.showcaseKey, + ); + case reg.IndividualDetailsRoute.name: + return reg.individualDetailsShowcaseData.showcaseData.map( + (e) => e.showcaseKey, + ); + case HouseholdOverviewDeliveryRoute.name: + return reg.householdOverviewShowcaseData.showcaseData.map( + (e) => e.showcaseKey, + ); + case DeliverInterventionRoute.name: + return deliverInterventionShowcaseData.showcaseData.map( + (e) => e.showcaseKey, + ); + default: + return null; + } + } +} diff --git a/packages/registration_delivery/lib/widgets/showcase/showcase_wrappers.dart b/packages/delivery/lib/widgets/showcase/showcase_wrappers.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/showcase/showcase_wrappers.dart rename to packages/delivery/lib/widgets/showcase/showcase_wrappers.dart diff --git a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart b/packages/delivery/lib/widgets/status_filter/status_filter.dart similarity index 93% rename from packages/registration_delivery/lib/widgets/status_filter/status_filter.dart rename to packages/delivery/lib/widgets/status_filter/status_filter.dart index c8b0521faf..c1a7f736f2 100644 --- a/packages/registration_delivery/lib/widgets/status_filter/status_filter.dart +++ b/packages/delivery/lib/widgets/status_filter/status_filter.dart @@ -1,13 +1,13 @@ +import 'package:delivery/utils/utils.dart'; import 'package:digit_data_model/models/entities/household_type.dart'; import 'package:digit_scanner/widgets/localized.dart'; import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; import 'package:flutter/material.dart'; -import 'package:registration_delivery/registration_delivery.dart'; import '../../models/entities/status.dart'; -import '../../utils/i18_key_constants.dart' as i18; +import 'package:delivery/utils/i18_key_constants.dart' as i18; class StatusFilter extends LocalizedStatefulWidget { final List? selectedFilters; @@ -109,7 +109,7 @@ class StatusFilterState extends LocalizedState { valueMapper: (value) { return localizations.translate(value == Status.administeredSuccess - ? '${RegistrationDeliverySingleton().selectedProject!.projectType}_${value.toValue().toString()}' + ? '${DeliverySingleton().selectedProject!.projectType}_${value.toValue().toString()}' : value.toValue().toString()); }, ), @@ -181,10 +181,10 @@ class StatusFilterState extends LocalizedState { getFilters() { var finalStatues = []; - finalStatues.addAll((RegistrationDeliverySingleton().householdType == + finalStatues.addAll((DeliverySingleton().householdType == HouseholdType.community - ? RegistrationDeliverySingleton().searchCLFFilters ?? [] - : RegistrationDeliverySingleton().searchHouseHoldFilter ?? []) + ? DeliverySingleton().searchCLFFilters ?? [] + : DeliverySingleton().searchHouseHoldFilter ?? []) .map((e) => Status.values.where((element) => element.toValue() == e)) .expand((element) => element) .toList()); diff --git a/packages/delivery/lib/widgets/table_card/table_card.dart b/packages/delivery/lib/widgets/table_card/table_card.dart new file mode 100644 index 0000000000..712141e0ad --- /dev/null +++ b/packages/delivery/lib/widgets/table_card/table_card.dart @@ -0,0 +1,42 @@ +import 'package:digit_ui_components/widgets/atoms/label_value_list.dart'; +import 'package:digit_ui_components/widgets/molecules/label_value_summary.dart'; +import 'package:flutter/material.dart'; + +class DigitTableCard extends StatelessWidget { + final Map element; + final Border? border; + final Color? color; + final EdgeInsetsGeometry? padding; + final double gap; + final num fraction; + final EdgeInsetsGeometry? topPadding; + final TextStyle? labelStyle; + final TextStyle? descriptionStyle; + + const DigitTableCard({ + super.key, + required this.element, + this.border, + this.color, + this.padding, + this.gap = 0, + this.fraction = 1.8, + this.topPadding, + this.labelStyle, + this.descriptionStyle, + }); + + @override + Widget build(BuildContext context) { + return LabelValueSummary( + padding: EdgeInsets.all(0), + items: element.keys + .map((e) => LabelValueItem( + label: e, + value: element[e].toString(), + labelFlex: 5, + )) + .toList(), + ); + } +} diff --git a/packages/delivery/pubspec.yaml b/packages/delivery/pubspec.yaml new file mode 100644 index 0000000000..223f17e7f0 --- /dev/null +++ b/packages/delivery/pubspec.yaml @@ -0,0 +1,64 @@ +name: delivery +description: "This package enables health facility workers to deliver the resources to household and individual members. +version: 1.0.6" +version: 1.0.0 +homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/delivery +repository: https://github.com/egovernments/health-campaign-field-worker-app + +environment: + sdk: ">=3.4.3 <4.0.0" + flutter: ">=1.17.0" +dependencies: + flutter: + sdk: flutter + digit_ui_components: ^0.2.0 + flutter_bloc: ^8.1.5 + freezed_annotation: ^2.4.1 + reactive_forms: ^17.0.0 + intl: ^0.19.0 + flutter_svg: ^2.0.10+1 + dart_mappable: ^4.2.2 + drift: ^2.18.0 + auto_route: ^8.1.3 + digit_data_model: ^1.0.6+1 + collection: ^1.18.0 + dio: ^5.4.3+1 + location: ^6.0.2 + gs1_barcode_parser: ^1.0.5 + uuid: ^4.4.0 + recase: ^4.1.0 + pluto_grid: ^8.0.0 + digit_scanner: ^1.0.5+1 + fluttertoast: ^8.1.2 + overlay_builder: ^1.1.0 + digit_showcase: ^1.0.0 + stream_transform: ^2.1.0 + async: ^2.11.0 + formula_parser: ^2.0.1 + flutter_keyboard_visibility: ^5.4.1 + survey_form: ^1.0.1+3 + group_radio_button: ^1.3.0 + rename_flutter_project: ^1.0.2 + registration: ^1.0.6+3 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + freezed: ^2.1.0+1 + json_serializable: ^6.4.0 + drift_dev: ^2.14.1 + bloc_test: ^9.1.0 + mocktail: ^1.0.2 + build_runner: ^2.4.11 + dart_mappable_builder: + git: + url: https://github.com/egovernments/health-campaign-field-worker-app/ + ref: master + path: ./packages/dart_mappable_builder + auto_route_generator: ^8.0.0 + +flutter: + assets: + - assets/images/ + - assets/icons/svg/ diff --git a/packages/registration_delivery/test/constants/test_constants.dart b/packages/delivery/test/constants/test_constants.dart similarity index 80% rename from packages/registration_delivery/test/constants/test_constants.dart rename to packages/delivery/test/constants/test_constants.dart index bf25929118..91474510e6 100644 --- a/packages/registration_delivery/test/constants/test_constants.dart +++ b/packages/delivery/test/constants/test_constants.dart @@ -1,11 +1,11 @@ import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/blocs/search_households/search_households.dart'; -import 'package:registration_delivery/models/entities/household.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; -import 'package:registration_delivery/models/entities/task.dart'; +import 'package:delivery/blocs/search_households/search_households.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; +import 'package:delivery/models/entities/task.dart'; -class RegistrationDeliveryTestConstants { +class DeliveryTestConstants { static var dateOfRegistration = DateTime.monday; static const testProjectId = '1d2e3f4g5h6i7j8k9l0m'; static const testUserUuid = '1a2b3c4d5e6f7g8h9i0j'; @@ -62,7 +62,7 @@ class RegistrationDeliveryTestConstants { static TaskSearchModel testTaskSearchModel = TaskSearchModel(clientReferenceId: ['12d3-4f5g-6h7i-8j9k-0l']); - static HouseholdMemberWrapper householdMemberWrapper = HouseholdMemberWrapper( + static HouseholdMemberDeliveryWrapper householdMemberWrapper = HouseholdMemberDeliveryWrapper( household: mockHousehold, headOfHousehold: mockIndividual, members: [individualModel], @@ -70,4 +70,4 @@ class RegistrationDeliveryTestConstants { tasks: [], sideEffects: [], referrals: []); -} +} \ No newline at end of file diff --git a/packages/registration_delivery/test/deliver_intervention_test.dart b/packages/delivery/test/deliver_intervention_test.dart similarity index 68% rename from packages/registration_delivery/test/deliver_intervention_test.dart rename to packages/delivery/test/deliver_intervention_test.dart index 1655f7b5b2..be67ffd5cb 100644 --- a/packages/registration_delivery/test/deliver_intervention_test.dart +++ b/packages/delivery/test/deliver_intervention_test.dart @@ -2,8 +2,8 @@ import 'package:bloc_test/bloc_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/blocs/delivery_intervention/deliver_intervention.dart'; -import 'package:registration_delivery/models/entities/task.dart'; +import 'package:delivery/blocs/delivery_intervention/deliver_intervention.dart'; +import 'package:delivery/models/entities/task.dart'; import 'constants/test_constants.dart'; @@ -23,10 +23,10 @@ void main() { }); setUpAll(() { - registerFallbackValue(RegistrationDeliveryTestConstants.testTaskModel); + registerFallbackValue(DeliveryTestConstants.testTaskModel); registerFallbackValue( - RegistrationDeliveryTestConstants.testTaskSearchModel); - registerFallbackValue(RegistrationDeliveryTestConstants.testBoundary); + DeliveryTestConstants.testTaskSearchModel); + registerFallbackValue(DeliveryTestConstants.testBoundary); }); // Test case for _handleSubmit event @@ -36,17 +36,17 @@ void main() { when(() => mockTaskRepository.create(any())).thenAnswer((task) async { final taskModel = task.positionalArguments[0] as TaskModel; if (taskModel.clientReferenceId == - RegistrationDeliveryTestConstants.testTaskModel.clientReferenceId) { + DeliveryTestConstants.testTaskModel.clientReferenceId) { return taskModel; } else { - return RegistrationDeliveryTestConstants.testTaskModel; + return DeliveryTestConstants.testTaskModel; } }); return deliverInterventionBloc; }, act: (bloc) => bloc.add(DeliverInterventionSubmitEvent( - task: RegistrationDeliveryTestConstants.testTaskModel, - boundaryModel: RegistrationDeliveryTestConstants.testBoundary, + task: DeliveryTestConstants.testTaskModel, + boundaryModel: DeliveryTestConstants.testBoundary, isEditing: false, )), expect: () => [ @@ -54,13 +54,13 @@ void main() { loading: true, oldTask: null, futureTask: null), DeliverInterventionState( loading: true, - oldTask: RegistrationDeliveryTestConstants.testTaskModel, + oldTask: DeliveryTestConstants.testTaskModel, futureTask: null), const DeliverInterventionState(loading: false).copyWith( tasks: null, futureTask: null, futureDeliveries: null, - oldTask: RegistrationDeliveryTestConstants.testTaskModel), + oldTask: DeliveryTestConstants.testTaskModel), ], ); @@ -71,9 +71,9 @@ void main() { when(() => mockTaskRepository.search(any())).thenAnswer((task) async { final taskSearchModel = task.positionalArguments[0] as TaskSearchModel; if (taskSearchModel.clientReferenceId!.contains( - RegistrationDeliveryTestConstants + DeliveryTestConstants .testTaskModel.clientReferenceId)) { - return [RegistrationDeliveryTestConstants.testTaskModel]; + return [DeliveryTestConstants.testTaskModel]; } else { return []; } @@ -81,20 +81,20 @@ void main() { return deliverInterventionBloc; }, act: (bloc) => bloc.add(DeliverInterventionSearchEvent( - taskSearch: RegistrationDeliveryTestConstants.testTaskSearchModel, + taskSearch: DeliveryTestConstants.testTaskSearchModel, )), expect: () => [ const DeliverInterventionState( loading: true, oldTask: null, tasks: null, futureTask: null), DeliverInterventionState( loading: true, - tasks: [RegistrationDeliveryTestConstants.testTaskModel], + tasks: [DeliveryTestConstants.testTaskModel], oldTask: null, futureTask: [], ), DeliverInterventionState( loading: false, - tasks: [RegistrationDeliveryTestConstants.testTaskModel], + tasks: [DeliveryTestConstants.testTaskModel], oldTask: null, futureTask: [], ), @@ -105,15 +105,15 @@ void main() { 'emits [DeliverInterventionState with cycle and dose] when setActiveCycleDose is called', build: () => deliverInterventionBloc, act: (bloc) => bloc.add(DeliverInterventionActiveCycleDoseSelectionEvent( - lastDose: RegistrationDeliveryTestConstants.lastDose, - lastCycle: RegistrationDeliveryTestConstants.lastCycle, - projectType: RegistrationDeliveryTestConstants.projectTypeModel, - individualModel: RegistrationDeliveryTestConstants.individualModel, + lastDose: DeliveryTestConstants.lastDose, + lastCycle: DeliveryTestConstants.lastCycle, + projectType: DeliveryTestConstants.projectTypeModel, + individualModel: DeliveryTestConstants.individualModel, )), expect: () => [ DeliverInterventionState( - cycle: RegistrationDeliveryTestConstants.lastCycle, - dose: RegistrationDeliveryTestConstants.lastDose, + cycle: DeliveryTestConstants.lastCycle, + dose: DeliveryTestConstants.lastDose, hasCycleArrived: false, pastCycles: null, ), @@ -124,16 +124,16 @@ void main() { 'emits [DeliverInterventionState with futureDeliveries] when selectFutureCycleDose is called', build: () => deliverInterventionBloc, act: (bloc) => bloc.add(DeliverInterventionCycleFutureDoseSelectionEvent( - dose: RegistrationDeliveryTestConstants.lastDose, - cycle: RegistrationDeliveryTestConstants.projectCycle, - individualModel: RegistrationDeliveryTestConstants.individualModel, + dose: DeliveryTestConstants.lastDose, + cycle: DeliveryTestConstants.projectCycle, + individualModel: DeliveryTestConstants.individualModel, )), expect: () => [ DeliverInterventionState( loading: true, isEditing: false, - cycle: RegistrationDeliveryTestConstants.lastCycle, - dose: RegistrationDeliveryTestConstants.lastDose, + cycle: DeliveryTestConstants.lastCycle, + dose: DeliveryTestConstants.lastDose, pastCycles: null, hasCycleArrived: true, isLastDoseOfCycle: false, @@ -145,8 +145,8 @@ void main() { DeliverInterventionState( loading: false, isEditing: false, - cycle: RegistrationDeliveryTestConstants.lastCycle, - dose: RegistrationDeliveryTestConstants.lastDose, + cycle: DeliveryTestConstants.lastCycle, + dose: DeliveryTestConstants.lastDose, pastCycles: null, hasCycleArrived: true, isLastDoseOfCycle: false, @@ -157,4 +157,4 @@ void main() { ), ], ); -} +} \ No newline at end of file diff --git a/packages/delivery/test/household_overview_test.dart b/packages/delivery/test/household_overview_test.dart new file mode 100644 index 0000000000..393805cff8 --- /dev/null +++ b/packages/delivery/test/household_overview_test.dart @@ -0,0 +1,205 @@ +import 'package:bloc_test/bloc_test.dart'; +import 'package:digit_data_model/models/entities/household_type.dart'; +import 'package:digit_data_model/utils/typedefs.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:delivery/blocs/household_overview/household_overview.dart'; +import 'package:delivery/data/repositories/local/individual_global_search.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; +import 'package:delivery/models/entities/referral.dart'; +import 'package:delivery/models/entities/side_effect.dart'; +import 'package:delivery/models/entities/task.dart'; + +import 'package:registration/utils/global_search_parameters.dart'; +import 'package:delivery/utils/typedefs.dart'; +import 'package:registration/utils/typedefs.dart'; + +import 'constants/test_constants.dart'; + +class MockHouseholdDataRepository extends Mock + implements HouseholdDataRepository {} + +class MockIndividualDataRepository extends Mock + implements IndividualDataRepository {} + +class MockHouseholdMemberDataRepository extends Mock + implements HouseholdMemberDataRepository {} + +class MockProjectBeneficiaryDataRepository extends Mock + implements ProjectBeneficiaryDataRepository {} + +class MockTaskDataRepository extends Mock implements TaskDataRepository {} + +class MockSideEffectDataRepository extends Mock + implements SideEffectDataRepository {} + +class MockReferralDataRepository extends Mock + implements ReferralDataRepository {} + +class MockIndividualGlobalSearchRepository extends Mock + implements IndividualGlobalDeliverySearchRepository {} + +void main() { + late MockHouseholdDataRepository mockHouseholdDataRepository; + late MockIndividualDataRepository mockIndividualDataRepository; + late MockHouseholdMemberDataRepository mockHouseholdMemberDataRepository; + late MockProjectBeneficiaryDataRepository + mockProjectBeneficiaryDataRepository; + late MockTaskDataRepository mockTaskDataRepository; + late MockSideEffectDataRepository mockSideEffectDataRepository; + late MockReferralDataRepository mockReferralDataRepository; + late HouseholdOverviewDeliveryBloc householdOverviewBloc; + late MockIndividualGlobalSearchRepository + mockIndividualGlobalSearchRepository; + + setUp(() { + mockIndividualGlobalSearchRepository = + MockIndividualGlobalSearchRepository(); + mockHouseholdDataRepository = MockHouseholdDataRepository(); + mockIndividualDataRepository = MockIndividualDataRepository(); + mockHouseholdMemberDataRepository = MockHouseholdMemberDataRepository(); + mockProjectBeneficiaryDataRepository = + MockProjectBeneficiaryDataRepository(); + mockTaskDataRepository = MockTaskDataRepository(); + mockSideEffectDataRepository = MockSideEffectDataRepository(); + mockReferralDataRepository = MockReferralDataRepository(); + mockIndividualGlobalSearchRepository = + MockIndividualGlobalSearchRepository(); + householdOverviewBloc = HouseholdOverviewDeliveryBloc( + HouseholdOverviewDeliveryState( + householdMemberDeliveryWrapper: + DeliveryTestConstants.householdMemberWrapper), + individualRepository: mockIndividualDataRepository, + householdRepository: mockHouseholdDataRepository, + householdMemberRepository: mockHouseholdMemberDataRepository, + projectBeneficiaryRepository: mockProjectBeneficiaryDataRepository, + taskDataRepository: mockTaskDataRepository, + sideEffectDataRepository: mockSideEffectDataRepository, + referralDataRepository: mockReferralDataRepository, + beneficiaryType: BeneficiaryType.individual, + individualGlobalSearchRepository: mockIndividualGlobalSearchRepository, + ); + }); + + setUpAll(() { + registerFallbackValue(GlobalSearchParameters( + householdType: HouseholdType.community, + householdClientReferenceId: '1ce2-3f4g-5h6i-7j8k-9l0m', + isProximityEnabled: false, + latitude: null, + longitude: null, + maxRadius: null, + nameSearch: 'test', + offset: null, + limit: null, + filter: [], + )); + registerFallbackValue(HouseholdSearchModel()); + registerFallbackValue(HouseholdMemberSearchModel()); + registerFallbackValue(IndividualSearchModel()); + registerFallbackValue(ProjectBeneficiarySearchModel()); + registerFallbackValue(TaskSearchModel()); + registerFallbackValue(SideEffectSearchModel()); + registerFallbackValue(ReferralSearchModel()); + }); + + // Test case for _handleReloadMember event + blocTest( + 'emits [HouseholdOverviewState with loading true, HouseholdOverviewState with updated householdMemberWrapper] when _handleReloadMember is called', + build: () { + when(() => mockHouseholdMemberDataRepository.search(any())).thenAnswer( + (_) async => [DeliveryTestConstants.mockHouseholdMember]); + when(() => mockHouseholdDataRepository.search(any())).thenAnswer( + (_) async => [DeliveryTestConstants.mockHousehold]); + when(() => mockIndividualDataRepository.search(any())).thenAnswer( + (_) async => [DeliveryTestConstants.mockIndividual]); + when(() => mockProjectBeneficiaryDataRepository.search(any())).thenAnswer( + (_) async => + [DeliveryTestConstants.mockProjectBeneficiary]); + when(() => mockTaskDataRepository.search(any())) + .thenAnswer((_) async => []); + when(() => mockSideEffectDataRepository.search(any())) + .thenAnswer((_) async => []); + when(() => mockReferralDataRepository.search(any())) + .thenAnswer((_) async => []); + return householdOverviewBloc; + }, + act: (bloc) => bloc.add(const HouseholdOverviewReloadEvent( + projectId: DeliveryTestConstants.testProjectId, + projectBeneficiaryType: BeneficiaryType.individual)), + expect: () => [ + HouseholdOverviewDeliveryState( + loading: true, + householdMemberDeliveryWrapper: + DeliveryTestConstants.householdMemberWrapper), + HouseholdOverviewDeliveryState( + loading: false, + householdMemberDeliveryWrapper: + DeliveryTestConstants.householdMemberWrapper, + ) + ], + ); + + //Test case for when search is performed + blocTest( + 'emits [loading: true, search results] when search is performed', + build: () { + // Mock search behavior for individual and household members + when(() => + mockIndividualGlobalSearchRepository + .individualGlobalSearch(any())).thenAnswer((_) async => { + 'total_count': 0, + 'data': [DeliveryTestConstants.individualModel] + }); + + when(() => mockHouseholdMemberDataRepository.search(any())) + .thenAnswer((_) async => [ + DeliveryTestConstants.mockHouseholdMember, + ]); + when(() => mockHouseholdDataRepository.search(any())) + .thenAnswer((_) async => [ + DeliveryTestConstants.mockHousehold, + ]); + when(() => mockIndividualDataRepository.search(any())) + .thenAnswer((_) async => [ + DeliveryTestConstants.mockIndividual, + ]); + when(() => mockProjectBeneficiaryDataRepository.search(any())) + .thenAnswer((_) async => [ + DeliveryTestConstants.mockProjectBeneficiary, + ]); + when(() => mockTaskDataRepository.search(any())) + .thenAnswer((_) async => []); + when(() => mockSideEffectDataRepository.search(any())) + .thenAnswer((_) async => []); + when(() => mockReferralDataRepository.search(any())) + .thenAnswer((_) async => []); + + return householdOverviewBloc; + }, + act: (bloc) { + // Perform a search query + bloc.add(const HouseholdOverviewReloadEvent( + projectId: DeliveryTestConstants.testProjectId, + projectBeneficiaryType: BeneficiaryType.individual, + searchByName: 'test', + selectedFilter: [], + )); + }, + expect: () => [ + HouseholdOverviewDeliveryState( + loading: true, + householdMemberDeliveryWrapper: + DeliveryTestConstants.householdMemberWrapper, + ), + HouseholdOverviewDeliveryState( + loading: false, + householdMemberDeliveryWrapper: + DeliveryTestConstants.householdMemberWrapper, + offset: 10), + ], + ); +} \ No newline at end of file diff --git a/packages/delivery/test/widgets/beneficiary_statistics_card.test.dart b/packages/delivery/test/widgets/beneficiary_statistics_card.test.dart new file mode 100644 index 0000000000..72cd4b5bf8 --- /dev/null +++ b/packages/delivery/test/widgets/beneficiary_statistics_card.test.dart @@ -0,0 +1,37 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:delivery/models/entities/beneficiary_statistics/beneficiary_statistics_model.dart'; +import 'package:delivery/widgets/beneficiary/beneficiary_statistics_card.dart'; + +import 'widget_app.dart'; + +void main() { + group( + 'BeneficiaryStatisticsCard Test', + () { + testWidgets( + 'Widget is created without errors', + (widgetTester) async { + await widgetTester.pumpWidget(const WidgetApp( + child: BeneficiaryStatisticsCard( + beneficiaryStatistics: + BeneficiaryStatisticsWrapperModel(beneficiaryStatisticsList: [ + BeneficiaryStatisticsModel( + title: '535', + content: 'No. of Households Registered', + ), + BeneficiaryStatisticsModel( + title: '756', + content: 'No. of Bedets Delivered', + ), + ]), + ), + )); + expect( + find.widgetWithText(BeneficiaryStatisticsCard, '535'), + findsOneWidget, + ); + }, + ); + }, + ); +} diff --git a/packages/registration_delivery/test/widgets/widget_app.dart b/packages/delivery/test/widgets/widget_app.dart similarity index 100% rename from packages/registration_delivery/test/widgets/widget_app.dart rename to packages/delivery/test/widgets/widget_app.dart diff --git a/packages/digit_location_tracker/pubspec.lock b/packages/digit_location_tracker/pubspec.lock index d425cd3822..611eb904ae 100644 --- a/packages/digit_location_tracker/pubspec.lock +++ b/packages/digit_location_tracker/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "67.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" analyzer: dependency: transitive description: @@ -25,14 +17,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.4.1" - ansicolor: + archive: dependency: transitive description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + name: archive + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "3.6.1" args: dependency: transitive description: @@ -73,6 +65,102 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: transitive + description: + name: build_runner + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" + url: "https://pub.dev" + source: hosted + version: "2.4.11" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe + url: "https://pub.dev" + source: hosted + version: "7.3.1" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: ea90e81dc4a25a043d9bee692d20ed6d1c4a1662a28c03a96417446c093ed6b4 + url: "https://pub.dev" + source: hosted + version: "8.9.5" + camera: + dependency: transitive + description: + name: camera + sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167" + url: "https://pub.dev" + source: hosted + version: "0.11.0+2" + camera_android_camerax: + dependency: transitive + description: + name: camera_android_camerax + sha256: "011be2ab0e5b3e3aa8094413fa890f8c5c5afd7cfdaef353a992047d4dab5780" + url: "https://pub.dev" + source: hosted + version: "0.6.8+2" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: ca36181194f429eef3b09de3c96280f2400693f9735025f90d1f4a27465fdd72 + url: "https://pub.dev" + source: hosted + version: "0.9.19" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: "2f757024a48696ff4814a789b0bd90f5660c0fb25f393ab4564fb483327930e2" + url: "https://pub.dev" + source: hosted + version: "2.10.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" + url: "https://pub.dev" + source: hosted + version: "0.3.5" characters: dependency: transitive description: @@ -81,6 +169,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a + url: "https://pub.dev" + source: hosted + version: "1.4.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" clock: dependency: transitive description: @@ -89,6 +193,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" collection: dependency: transitive description: @@ -105,6 +217,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" crypto: dependency: transitive description: @@ -113,6 +233,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" dart_mappable: dependency: transitive description: @@ -121,13 +249,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.3.0" - dart_mappable_builder: - dependency: "direct overridden" - description: - path: "../dart_mappable_builder" - relative: true - source: path - version: "4.2.3" dart_style: dependency: transitive description: @@ -139,17 +260,19 @@ packages: digit_data_model: dependency: "direct main" description: - path: "../digit_data_model" - relative: true - source: path - version: "1.0.5" - digit_firebase_services: - dependency: "direct overridden" + name: digit_data_model + sha256: b106a59eda1f6864e0652d668c0c70492d948cdd94e49b2fcc6b707c8918b006 + url: "https://pub.dev" + source: hosted + version: "1.0.6+3" + digit_ui_components: + dependency: transitive description: - path: "../digit_firebase_services" - relative: true - source: path - version: "0.0.1" + name: digit_ui_components + sha256: "764292c02746fa372ce93ea4d67f3941cdfa5197a552a33d586ce01aa44650f1" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" dio: dependency: transitive description: @@ -166,6 +289,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + dotted_border: + dependency: transitive + description: + name: dotted_border + sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04" + url: "https://pub.dev" + source: hosted + version: "2.1.0" drift: dependency: transitive description: @@ -198,46 +329,46 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.1" - firebase_core: + file_picker: dependency: transitive description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + name: file_picker + sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45" url: "https://pub.dev" source: hosted - version: "2.32.0" - firebase_core_platform_interface: + version: "8.0.5" + file_selector_linux: dependency: transitive description: - name: firebase_core_platform_interface - sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6 + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" url: "https://pub.dev" source: hosted - version: "5.3.1" - firebase_core_web: + version: "0.9.3+2" + file_selector_macos: dependency: transitive description: - name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + name: file_selector_macos + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" url: "https://pub.dev" source: hosted - version: "2.17.5" - firebase_crashlytics: + version: "0.9.4+2" + file_selector_platform_interface: dependency: transitive description: - name: firebase_crashlytics - sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b url: "https://pub.dev" source: hosted - version: "3.5.7" - firebase_crashlytics_platform_interface: + version: "2.6.2" + file_selector_windows: dependency: transitive description: - name: firebase_crashlytics_platform_interface - sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" + name: file_selector_windows + sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" url: "https://pub.dev" source: hosted - version: "3.6.35" + version: "0.9.3+4" fixnum: dependency: transitive description: @@ -291,6 +422,30 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_dropzone: + dependency: transitive + description: + name: flutter_dropzone + sha256: b399c60411f9bf9c4c2f97933c6a3a185859e75aade8897831e76cee4346c8e1 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + flutter_dropzone_platform_interface: + dependency: transitive + description: + name: flutter_dropzone_platform_interface + sha256: "96d2c51c86063ba150551c3b40fd26c5a18785bee071c0c751502d28a545df3b" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter_dropzone_web: + dependency: transitive + description: + name: flutter_dropzone_web + sha256: c5a0fdb63b7216352a01761ec1b6eba1982e49541e60675735e2d3d95e207b19 + url: "https://pub.dev" + source: hosted + version: "3.0.13" flutter_lints: dependency: "direct dev" description: @@ -299,6 +454,43 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" + url: "https://pub.dev" + source: hosted + version: "2.0.22" + flutter_spinkit: + dependency: transitive + description: + name: flutter_spinkit + sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 + url: "https://pub.dev" + source: hosted + version: "5.2.1" + flutter_styled_toast: + dependency: transitive + description: + name: flutter_styled_toast + sha256: e667f13a665820eb0fa8506547e47eacbcddf1948d6d3036cfd3b089bd4b0516 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: d44bf546b13025ec7353091516f6881f1d4c633993cb109c3916c3a0159dadf1 + url: "https://pub.dev" + source: hosted + version: "2.1.0" flutter_test: dependency: "direct dev" description: flutter @@ -309,6 +501,14 @@ packages: description: flutter source: sdk version: "0.0.0" + fluttertoast: + dependency: transitive + description: + name: fluttertoast + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" + url: "https://pub.dev" + source: hosted + version: "8.2.8" freezed_annotation: dependency: "direct main" description: @@ -317,6 +517,62 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.4" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.dev" + source: hosted + version: "4.0.0" + geolocator: + dependency: transitive + description: + name: geolocator + sha256: f4efb8d3c4cdcad2e226af9661eb1a0dd38c71a9494b22526f9da80ab79520e5 + url: "https://pub.dev" + source: hosted + version: "10.1.1" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47" + url: "https://pub.dev" + source: hosted + version: "4.6.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: c4ecead17985ede9634f21500072edfcb3dba0ef7b97f8d7bc556d2d722b3ba3 + url: "https://pub.dev" + source: hosted + version: "2.3.9" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "102e7da05b48ca6bf0a5bda0010f886b171d1a08059f01bfe02addd0175ebece" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e" + url: "https://pub.dev" + source: hosted + version: "0.2.3" glob: dependency: transitive description: @@ -325,6 +581,54 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" + google_fonts: + dependency: transitive + description: + name: google_fonts + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 + url: "https://pub.dev" + source: hosted + version: "6.2.1" + graphs: + dependency: transitive + description: + name: graphs + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + horizontal_data_table: + dependency: transitive + description: + name: horizontal_data_table + sha256: c8ab5256bbced698a729f3e0ff2cb0e8e97416cdbb082860370eaf883badf722 + url: "https://pub.dev" + source: hosted + version: "4.3.1" + html: + dependency: transitive + description: + name: html + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" + url: "https://pub.dev" + source: hosted + version: "0.15.6" + http: + dependency: transitive + description: + name: http + sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" + url: "https://pub.dev" + source: hosted + version: "1.4.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 + url: "https://pub.dev" + source: hosted + version: "3.2.2" http_parser: dependency: transitive description: @@ -333,6 +637,86 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_picker: + dependency: transitive + description: + name: image_picker + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "8c5abf0dcc24fe6e8e0b4a5c0b51a5cf30cefdf6407a3213dae61edc75a70f56" + url: "https://pub.dev" + source: hosted + version: "0.8.12+12" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "05da758e67bc7839e886b3959848aa6b44ff123ab4b28f67891008afe8ef9100" + url: "https://pub.dev" + source: hosted + version: "0.8.12+2" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "34a65f6740df08bbbeb0a1abd8e6d32107941fd4868f67a507b25601651022c9" + url: "https://pub.dev" + source: hosted + version: "0.2.1+2" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "1b90ebbd9dcf98fb6c1d01427e49a55bd96b5d67b8c67cf955d60a5de74207c1" + url: "https://pub.dev" + source: hosted + version: "0.2.1+2" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "886d57f0be73c4b140004e78b9f28a8914a09e50c2d816bdd0520051a71236a0" + url: "https://pub.dev" + source: hosted + version: "2.10.1" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + intl: + dependency: transitive + description: + name: intl + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + url: "https://pub.dev" + source: hosted + version: "0.19.0" + io: + dependency: transitive + description: + name: io + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b + url: "https://pub.dev" + source: hosted + version: "1.0.5" isar: dependency: "direct main" description: @@ -429,6 +813,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + lottie: + dependency: transitive + description: + name: lottie + sha256: "7afc60865a2429d994144f7d66ced2ae4305fe35d82890b8766e3359872d872c" + url: "https://pub.dev" + source: hosted + version: "3.1.3" matcher: dependency: transitive description: @@ -453,6 +845,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.12.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" mocktail: dependency: transitive description: @@ -469,6 +869,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + overlay_builder: + dependency: transitive + description: + name: overlay_builder + sha256: "58b97bc5f67a2e2bb7006dd88e697ac757dfffc9dbd1e7dfc1917fb510a4b5c8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" package_config: dependency: transitive description: @@ -485,6 +893,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" + url: "https://pub.dev" + source: hosted + version: "1.1.0" path_provider: dependency: "direct main" description: @@ -581,6 +1005,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" platform: dependency: transitive description: @@ -597,6 +1029,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" provider: dependency: transitive description: @@ -613,6 +1053,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.5" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: "81876843eb50dc2e1e5b151792c9a985c5ed2536914115ed04e9c8528f6647b0" + url: "https://pub.dev" + source: hosted + version: "1.4.0" + reactive_forms: + dependency: transitive + description: + name: reactive_forms + sha256: "9b1fb18e0aae9c50cfa0aaabaaa38bc4d78eefc9b7b95fa9c947b051f6524b8e" + url: "https://pub.dev" + source: hosted + version: "17.0.1" recase: dependency: transitive description: @@ -621,19 +1077,27 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" - sky_engine: + shelf: dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_gen: + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_web_socket: dependency: transitive description: - name: source_gen - sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + name: shelf_web_socket + sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 url: "https://pub.dev" source: hosted - version: "1.5.0" + version: "2.0.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" source_span: dependency: transitive description: @@ -682,6 +1146,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 + url: "https://pub.dev" + source: hosted + version: "2.1.1" string_scanner: dependency: transitive description: @@ -706,6 +1178,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.0" + timing: + dependency: transitive + description: + name: timing + sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" + url: "https://pub.dev" + source: hosted + version: "1.0.2" type_plus: dependency: transitive description: @@ -722,6 +1202,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: transitive + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + url: "https://pub.dev" + source: hosted + version: "6.3.9" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb" + url: "https://pub.dev" + source: hosted + version: "6.3.3" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" + url: "https://pub.dev" + source: hosted + version: "3.1.4" uuid: dependency: transitive description: @@ -730,6 +1290,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.5.1" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de" + url: "https://pub.dev" + source: hosted + version: "1.1.18" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" + url: "https://pub.dev" + source: hosted + version: "1.1.13" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" + url: "https://pub.dev" + source: hosted + version: "1.1.16" vector_math: dependency: transitive description: @@ -738,6 +1322,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" vm_service: dependency: transitive description: @@ -762,6 +1354,30 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.1" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 + url: "https://pub.dev" + source: hosted + version: "3.0.3" + win32: + dependency: transitive + description: + name: win32 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + url: "https://pub.dev" + source: hosted + version: "5.2.0" xdg_directories: dependency: transitive description: @@ -770,6 +1386,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" yaml: dependency: transitive description: diff --git a/packages/registration_delivery/.gitignore b/packages/registration/.gitignore similarity index 100% rename from packages/registration_delivery/.gitignore rename to packages/registration/.gitignore diff --git a/packages/registration_delivery/.metadata b/packages/registration/.metadata similarity index 100% rename from packages/registration_delivery/.metadata rename to packages/registration/.metadata diff --git a/packages/registration_delivery/CHANGELOG.md b/packages/registration/CHANGELOG.md similarity index 97% rename from packages/registration_delivery/CHANGELOG.md rename to packages/registration/CHANGELOG.md index 46ed76dd67..2073fe7c1e 100644 --- a/packages/registration_delivery/CHANGELOG.md +++ b/packages/registration/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.6+4 + +* Separated registration flow into an independent package, decoupled from delivery-related + features. + ## 1.0.6+3 * BugFix: diff --git a/packages/registration_delivery/LICENSE b/packages/registration/LICENSE similarity index 100% rename from packages/registration_delivery/LICENSE rename to packages/registration/LICENSE diff --git a/packages/registration/README.md b/packages/registration/README.md new file mode 100644 index 0000000000..ff3a88b8ac --- /dev/null +++ b/packages/registration/README.md @@ -0,0 +1,85 @@ +# Registration + +This package provides a way to register a household and individual members. + +## Features + +* Search existing households and individuals + + + +* Register new households and individuals. + + + + + + + + + + + + + +* Update details for existing households and individuals. + + + + +## Getting Started + +To use this package, add the following dependency to your `pubspec.yaml` file: + +```yaml +dependencies: + registration: ^any +``` + +## Usage + +To Navigate to any screens of the package: + +First add registration_router to your main app router + +Navigate to the required screen using the below code and pass the required data: + +```dart +context.router.push(SearchBeneficiaryRoute(),); +``` + +To Consume any bloc of the package in main app: + +```dart +BlocProvider(create: (context) {return SearchBlocWrapper();},), +``` + +Registration package requires below data to be passed from main app: + +```dart + +String? _tenantId; +String? _loggedInUserUuid; + +double? _maxRadius; +String? _projectId; +BeneficiaryType? _beneficiaryType; +ProjectTypeModel? _projectType; +ProjectModel? _selectedProject; +BoundaryModel? _boundaryModel; +PersistenceConfiguration? _persistenceConfiguration; +List? _genderOptions; +List? _idTypeOptions; +List? _householdDeletionReasonOptions; +List? _householdMemberDeletionReasonOptions; +List? _searchHouseHoldFilter, _searchCLFFilters; +List? _houseStructureTypes; + + +``` + +To set the required data use: + +```dart +RegistrationSingleton().setInitialData(); +``` \ No newline at end of file diff --git a/packages/registration_delivery/analysis_options.yaml b/packages/registration/analysis_options.yaml similarity index 100% rename from packages/registration_delivery/analysis_options.yaml rename to packages/registration/analysis_options.yaml diff --git a/packages/registration/assets/icons/app_icon.png b/packages/registration/assets/icons/app_icon.png new file mode 100644 index 0000000000..e9e2930ca8 Binary files /dev/null and b/packages/registration/assets/icons/app_icon.png differ diff --git a/packages/registration/assets/icons/svg/mychecklist.svg b/packages/registration/assets/icons/svg/mychecklist.svg new file mode 100644 index 0000000000..826f196b10 --- /dev/null +++ b/packages/registration/assets/icons/svg/mychecklist.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/packages/registration/assets/icons/svg/no_result.svg b/packages/registration/assets/icons/svg/no_result.svg new file mode 100644 index 0000000000..dd93d89db5 --- /dev/null +++ b/packages/registration/assets/icons/svg/no_result.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/registration/assets/images/powered_by_digit.png b/packages/registration/assets/images/powered_by_digit.png new file mode 100644 index 0000000000..f83334fd61 Binary files /dev/null and b/packages/registration/assets/images/powered_by_digit.png differ diff --git a/packages/registration_delivery/build.yaml b/packages/registration/build.yaml similarity index 100% rename from packages/registration_delivery/build.yaml rename to packages/registration/build.yaml diff --git a/packages/registration_delivery/lib/blocs/app_localization.dart b/packages/registration/lib/blocs/app_localization.dart similarity index 72% rename from packages/registration_delivery/lib/blocs/app_localization.dart rename to packages/registration/lib/blocs/app_localization.dart index 234313ea65..91d7ea4eef 100644 --- a/packages/registration_delivery/lib/blocs/app_localization.dart +++ b/packages/registration/lib/blocs/app_localization.dart @@ -1,28 +1,28 @@ import 'package:flutter/material.dart'; -import 'registration_delivery_localization_delegate.dart'; +import 'registration_localization_delegate.dart'; // Class responsible for handling attendance localization -class RegistrationDeliveryLocalization { +class RegistrationLocalization { final Locale locale; final Future localizedStrings; final List languages; - RegistrationDeliveryLocalization( + RegistrationLocalization( this.locale, this.localizedStrings, this.languages); // Method to get the current localization instance from context - static RegistrationDeliveryLocalization of(BuildContext context) { - return Localizations.of( - context, RegistrationDeliveryLocalization)!; + static RegistrationLocalization of(BuildContext context) { + return Localizations.of( + context, RegistrationLocalization)!; } static final List _localizedStrings = []; // Method to get the delegate for localization - static LocalizationsDelegate getDelegate( + static LocalizationsDelegate getDelegate( Future localizedStrings, List languages) => - RegistrationDeliveryLocalizationDelegate(localizedStrings, languages); + RegistrationLocalizationDelegate(localizedStrings, languages); // Method to load localized strings Future load() async { diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart b/packages/registration/lib/blocs/beneficiary_registration/beneficiary_registration.dart similarity index 93% rename from packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart rename to packages/registration/lib/blocs/beneficiary_registration/beneficiary_registration.dart index 0b2b6f0699..6260e0eb5f 100644 --- a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.dart +++ b/packages/registration/lib/blocs/beneficiary_registration/beneficiary_registration.dart @@ -5,12 +5,11 @@ import 'package:digit_data_model/data_model.dart'; import 'package:digit_data_model/utils/typedefs.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; -import 'package:registration_delivery/models/entities/task.dart'; +import 'package:registration/models/entities/household_member.dart'; import '../../models/entities/household.dart'; import '../../models/entities/project_beneficiary.dart'; -import '../../models/entities/status.dart'; + import '../../utils/typedefs.dart'; import '../../utils/utils.dart'; @@ -29,8 +28,6 @@ class BeneficiaryRegistrationBloc final ProjectBeneficiaryDataRepository projectBeneficiaryRepository; - final TaskDataRepository taskDataRepository; - final BeneficiaryType beneficiaryType; BeneficiaryRegistrationBloc( @@ -39,7 +36,6 @@ class BeneficiaryRegistrationBloc required this.householdRepository, required this.householdMemberRepository, required this.projectBeneficiaryRepository, - required this.taskDataRepository, required this.beneficiaryType, }) { on(_handleSaveAddress); @@ -169,7 +165,7 @@ class BeneficiaryRegistrationBloc projectBeneficiaryModel: ProjectBeneficiaryModel( tag: event.tag, rowVersion: 1, - tenantId: RegistrationDeliverySingleton().tenantId, + tenantId: RegistrationSingleton().tenantId, clientReferenceId: IdGen.i.identifier, dateOfRegistration: DateTime.now().millisecondsSinceEpoch, projectId: event.projectId, @@ -268,7 +264,7 @@ class BeneficiaryRegistrationBloc householdClientReferenceId: household.clientReferenceId, individualClientReferenceId: individual.clientReferenceId, isHeadOfHousehold: value.isHeadOfHousehold, - tenantId: RegistrationDeliverySingleton().tenantId, + tenantId: RegistrationSingleton().tenantId, rowVersion: 1, clientReferenceId: IdGen.i.identifier, clientAuditDetails: ClientAuditDetails( @@ -365,7 +361,7 @@ class BeneficiaryRegistrationBloc householdClientReferenceId: household.clientReferenceId, individualClientReferenceId: individual.clientReferenceId, isHeadOfHousehold: value.isHeadOfHousehold, - tenantId: RegistrationDeliverySingleton().tenantId, + tenantId: RegistrationSingleton().tenantId, rowVersion: 1, clientReferenceId: IdGen.i.identifier, clientAuditDetails: ClientAuditDetails( @@ -422,7 +418,7 @@ class BeneficiaryRegistrationBloc value.householdModel.clientAuditDetails?.createdTime ?? value.householdModel.auditDetails!.createdTime, lastModifiedBy: - RegistrationDeliverySingleton().loggedInUserUuid, + RegistrationSingleton().loggedInUserUuid, lastModifiedTime: DateTime.now().millisecondsSinceEpoch, ), memberCount: event.household.memberCount, @@ -438,7 +434,7 @@ class BeneficiaryRegistrationBloc ); final projectBeneficiary = await projectBeneficiaryRepository.search( ProjectBeneficiarySearchModel( - projectId: [RegistrationDeliverySingleton().projectId.toString()], + projectId: [RegistrationSingleton().projectId.toString()], beneficiaryClientReferenceId: beneficiaryType == BeneficiaryType.individual ? getIndividualBeneficiaryClientReferenceId( @@ -452,47 +448,35 @@ class BeneficiaryRegistrationBloc await projectBeneficiaryRepository .update(projectBeneficiary.first.copyWith(tag: event.tag)); } - - var task = await taskDataRepository.search(TaskSearchModel( - projectBeneficiaryClientReferenceId: - projectBeneficiary.map((e) => e.clientReferenceId).toList(), - )); - - if (task.isNotEmpty) { - if (task.last.status == Status.closeHousehold.toValue()) { - await taskDataRepository.update(task.last - .copyWith(status: Status.notAdministered.toValue())); - } - } } else { for (var element in value.individualModel) { await projectBeneficiaryRepository.create(ProjectBeneficiaryModel( rowVersion: 1, clientReferenceId: IdGen.i.identifier, dateOfRegistration: DateTime.now().millisecondsSinceEpoch, - projectId: RegistrationDeliverySingleton().projectId, - tenantId: RegistrationDeliverySingleton().tenantId, + projectId: RegistrationSingleton().projectId, + tenantId: RegistrationSingleton().tenantId, beneficiaryClientReferenceId: beneficiaryType == BeneficiaryType.individual ? element.clientReferenceId : value.householdModel.clientReferenceId, clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() + createdBy: RegistrationSingleton() .loggedInUserUuid .toString(), createdTime: DateTime.now().millisecondsSinceEpoch, lastModifiedTime: DateTime.now().millisecondsSinceEpoch, - lastModifiedBy: RegistrationDeliverySingleton() + lastModifiedBy: RegistrationSingleton() .loggedInUserUuid .toString(), ), auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() + createdBy: RegistrationSingleton() .loggedInUserUuid .toString(), createdTime: DateTime.now().millisecondsSinceEpoch, lastModifiedTime: DateTime.now().millisecondsSinceEpoch, - lastModifiedBy: RegistrationDeliverySingleton() + lastModifiedBy: RegistrationSingleton() .loggedInUserUuid .toString(), ))); @@ -581,17 +565,6 @@ class BeneficiaryRegistrationBloc await projectBeneficiaryRepository .update(projectBeneficiary.first.copyWith(tag: event.tag)); } - var task = await taskDataRepository.search(TaskSearchModel( - projectBeneficiaryClientReferenceId: - projectBeneficiary.map((e) => e.clientReferenceId).toList(), - )); - - if (task.isNotEmpty) { - if (task.last.status == Status.closeHousehold.toValue()) { - await taskDataRepository.update(task.last - .copyWith(status: Status.notAdministered.toValue())); - } - } } } catch (error) { rethrow; @@ -647,7 +620,7 @@ class BeneficiaryRegistrationBloc ProjectBeneficiaryModel( tag: event.tag, rowVersion: 1, - tenantId: RegistrationDeliverySingleton().tenantId, + tenantId: RegistrationSingleton().tenantId, clientReferenceId: IdGen.i.identifier, dateOfRegistration: DateTime.now().millisecondsSinceEpoch, projectId: event.projectId, @@ -674,7 +647,7 @@ class BeneficiaryRegistrationBloc individualClientReferenceId: event.individualModel.clientReferenceId, isHeadOfHousehold: false, - tenantId: RegistrationDeliverySingleton().tenantId, + tenantId: RegistrationSingleton().tenantId, rowVersion: 1, clientReferenceId: IdGen.i.identifier, auditDetails: AuditDetails( diff --git a/packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart b/packages/registration/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart similarity index 100% rename from packages/registration_delivery/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart rename to packages/registration/lib/blocs/beneficiary_registration/beneficiary_registration.freezed.dart diff --git a/packages/registration/lib/blocs/component_wrapper/product_variant_bloc_wrapper.dart b/packages/registration/lib/blocs/component_wrapper/product_variant_bloc_wrapper.dart new file mode 100644 index 0000000000..6ae0b01c74 --- /dev/null +++ b/packages/registration/lib/blocs/component_wrapper/product_variant_bloc_wrapper.dart @@ -0,0 +1,45 @@ +import 'package:digit_data_model/data_model.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration/utils/extensions/extensions.dart'; +import 'package:registration/utils/utils.dart'; +import 'package:registration/widgets/component_wrapper/selected_project_builder.dart'; + +class ProductVariantBlocWrapper extends StatelessWidget { + final Widget child; + + const ProductVariantBlocWrapper({ + super.key, + required this.child, + }); + + @override + Widget build(BuildContext context) { + return SelectedProjectBuilder( + projectBuilder: (context, selectedProject) { + final productVariant = + context.repository( + context); + + final projectResource = context.repository(context); + + return BlocProvider( + create: (_) => ProductVariantBloc( + const ProductVariantEmptyState(), + productVariant, + projectResource, + )..add( + ProductVariantLoadEvent( + query: ProjectResourceSearchModel( + projectId: [RegistrationSingleton().projectId!], + ), + ), + ), + lazy: false, + child: child, + ); + }, + ); + } +} diff --git a/packages/registration_delivery/lib/blocs/household_details/household_details.dart b/packages/registration/lib/blocs/household_details/household_details.dart similarity index 94% rename from packages/registration_delivery/lib/blocs/household_details/household_details.dart rename to packages/registration/lib/blocs/household_details/household_details.dart index 80e983eb98..349d4d1d96 100644 --- a/packages/registration_delivery/lib/blocs/household_details/household_details.dart +++ b/packages/registration/lib/blocs/household_details/household_details.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:registration_delivery/models/entities/household.dart'; +import 'package:registration/models/entities/household.dart'; part 'household_details.freezed.dart'; diff --git a/packages/registration_delivery/lib/blocs/household_details/household_details.freezed.dart b/packages/registration/lib/blocs/household_details/household_details.freezed.dart similarity index 100% rename from packages/registration_delivery/lib/blocs/household_details/household_details.freezed.dart rename to packages/registration/lib/blocs/household_details/household_details.freezed.dart diff --git a/packages/registration_delivery/lib/blocs/household_location/household_location.dart b/packages/registration/lib/blocs/household_location/household_location.dart similarity index 100% rename from packages/registration_delivery/lib/blocs/household_location/household_location.dart rename to packages/registration/lib/blocs/household_location/household_location.dart diff --git a/packages/registration_delivery/lib/blocs/household_location/household_location.freezed.dart b/packages/registration/lib/blocs/household_location/household_location.freezed.dart similarity index 100% rename from packages/registration_delivery/lib/blocs/household_location/household_location.freezed.dart rename to packages/registration/lib/blocs/household_location/household_location.freezed.dart diff --git a/packages/registration/lib/blocs/household_overview/household_overview.dart b/packages/registration/lib/blocs/household_overview/household_overview.dart new file mode 100644 index 0000000000..06bc371459 --- /dev/null +++ b/packages/registration/lib/blocs/household_overview/household_overview.dart @@ -0,0 +1,782 @@ +// GENERATED using mason_cli +import 'dart:async'; + +import 'package:collection/collection.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/utils/typedefs.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:registration/models/entities/status.dart'; +import 'package:registration/registration.dart'; +import 'package:registration/utils/global_search_parameters.dart'; + +import '../../data/repositories/local/individual_global_search.dart'; +import '../../utils/utils.dart'; + +part 'household_overview.freezed.dart'; + +typedef HouseholdOverviewEmitter = Emitter; + +class HouseholdOverviewBloc + extends Bloc { + final BeneficiaryType beneficiaryType; + final IndividualDataRepository individualRepository; + final HouseholdDataRepository householdRepository; + final HouseholdMemberDataRepository householdMemberRepository; + final ProjectBeneficiaryDataRepository projectBeneficiaryRepository; + + final IndividualGlobalSearchRepository individualGlobalSearchRepository; + + HouseholdOverviewBloc( + super.initialState, { + required this.projectBeneficiaryRepository, + required this.householdRepository, + required this.individualRepository, + required this.householdMemberRepository, + // required this.taskDataRepository, + // required this.sideEffectDataRepository, + // required this.referralDataRepository, + required this.beneficiaryType, + required this.individualGlobalSearchRepository, + }) { + on(_handleDeleteHousehold); + on(_handleDeleteIndividual); + on(_handleSetAsHead); + on(_handleReloadMember); + on(_selectedIndividual); + } + + // This function handles the selection of an individual in the household overview. + FutureOr _selectedIndividual( + HouseholdOverviewSelectIndividualEvent event, + Emitter emit, + ) async { + // Update the state with the selected individual. + emit(state.copyWith(selectedIndividual: event.individualModel)); + } + + // This function handles reloading and updating the household overview state. + FutureOr _handleReloadMember( + HouseholdOverviewReloadEvent event, + Emitter emit, + ) async { + // Set the loading state to indicate that data is being loaded. + emit(state.copyWith(loading: true)); + + if (event.searchByName == null && + (event.selectedFilter == null || event.selectedFilter!.isEmpty)) { + // Retrieve household members based on certain criteria. + final members = event.limit != null + ? await householdMemberRepository.search( + HouseholdMemberSearchModel( + householdClientReferenceId: + state.householdMemberWrapper.household != null + ? [ + state.householdMemberWrapper.household! + .clientReferenceId + ] + : [], + limit: event.limit, + offset: event.offset, + ), + ) + : await householdMemberRepository.search(HouseholdMemberSearchModel( + householdClientReferenceId: state + .householdMemberWrapper.household != + null + ? [state.householdMemberWrapper.household!.clientReferenceId] + : [])); + + // Group household members by household ID. + final groupedHouseholds = members.groupListsBy( + (element) => element.householdClientReferenceId, + ); + + final householdId = + state.householdMemberWrapper.household?.clientReferenceId; + + // Check if the current household has any members. + if (!groupedHouseholds.containsKey(householdId)) { + // If there are no members, stop loading and return. + emit(state.copyWith(loading: false)); + + return; + } + + // Retrieve the list of household members for the current household. + final householdMemberList = groupedHouseholds[householdId]!; + + // Extract individual IDs from the household member list. + final individualIds = householdMemberList + .map((e) => e.individualClientReferenceId) + .whereNotNull() + .toList(); + + // Search for households with the specified client reference ID. + final households = await householdRepository.search( + HouseholdSearchModel( + clientReferenceId: householdId != null ? [householdId] : []), + ); + + // Check if any households were found. + if (households.isEmpty) { + // If no households were found, stop loading and return. + emit(state.copyWith(loading: false)); + + return; + } + + // Retrieve the result household (assuming there's only one). + final resultHousehold = households.first; + + // Search for individuals based on their client reference IDs. + final individuals = await individualRepository.search( + IndividualSearchModel( + clientReferenceId: individualIds, + ), + ); + + // Search for project beneficiaries based on specified criteria. + final projectBeneficiaries = await projectBeneficiaryRepository.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: + event.projectBeneficiaryType == BeneficiaryType.individual + ? individualIds + : [resultHousehold.clientReferenceId], + projectId: [event.projectId], + // [TODO] Need to pass as a based on Beneficiary Type + ), + ); + + // Check if any project beneficiaries were found. + if (projectBeneficiaries.isEmpty) { + // If no project beneficiaries were found, stop loading and return. + emit(state.copyWith(loading: false)); + + return; + } + + final beneficiaryClientReferenceIds = projectBeneficiaries + .map((e) => e.beneficiaryClientReferenceId) + .toList(); + + final List beneficiaryIndividuals = individuals + .where((element) => + beneficiaryClientReferenceIds.contains(element.clientReferenceId)) + .toList(); + + // Find the head of the household. + final head = (event.projectBeneficiaryType == BeneficiaryType.individual + ? beneficiaryIndividuals + : individuals) + .firstWhereOrNull( + (i) => + i.clientReferenceId == + householdMemberList + .firstWhereOrNull((h) => h.isHeadOfHousehold) + ?.individualClientReferenceId, + ); + + individuals.sort((a, b) => (a.clientAuditDetails?.createdTime ?? 0) + .compareTo(b.clientAuditDetails?.createdTime ?? 0)); + + beneficiaryIndividuals.sort((a, b) => + (a.clientAuditDetails?.createdTime ?? 0) + .compareTo(b.clientAuditDetails?.createdTime ?? 0)); + + // Check if a head of household was found. + if (head == null) { + // If head is not found, append the new data to the existing state. + + emit(state.copyWith( + loading: false, + offset: members.isNotEmpty && members.length == (event.limit ?? 10) + ? (event.offset ?? 0) + (event.limit ?? 10) + : null, + householdMemberWrapper: state.householdMemberWrapper.copyWith( + members: + (event.projectBeneficiaryType == BeneficiaryType.individual) + ? [ + ...state.householdMemberWrapper.members ?? [], + ...beneficiaryIndividuals, + ] + : [ + ...state.householdMemberWrapper.members ?? [], + ...individuals, + ], + projectBeneficiaries: [ + ...state.householdMemberWrapper.projectBeneficiaries ?? [], + ...projectBeneficiaries, + ], + ), + )); + + return; + } + + // Update the state with the loaded data and stop loading. + emit( + state.copyWith( + householdMemberWrapper: HouseholdMemberWrapper( + household: resultHousehold, + headOfHousehold: head, + members: (event.projectBeneficiaryType == BeneficiaryType.individual + ? beneficiaryIndividuals + : individuals), + projectBeneficiaries: projectBeneficiaries, + ), + loading: false, + offset: members.isNotEmpty + ? (event.offset ?? 0) + (event.limit ?? 10) + : null, + limit: event.limit, + ), + ); + } else { + final totalResult = await individualGlobalSearchRepository + .individualGlobalSearch(GlobalSearchParameters( + householdType: RegistrationSingleton().householdType, + householdClientReferenceId: + state.householdMemberWrapper.household!.clientReferenceId, + isProximityEnabled: false, + projectId: RegistrationSingleton().projectId, + latitude: null, + longitude: null, + maxRadius: null, + nameSearch: event.searchByName, + offset: event.offset, + limit: event.limit, + filter: event.selectedFilter)); + var result = totalResult['data'].map((e) => e).toList(); + + if (result.isEmpty) { + emit(state.copyWith( + loading: false, + householdMemberWrapper: HouseholdMemberWrapper( + household: state.householdMemberWrapper.household, + headOfHousehold: state.householdMemberWrapper.headOfHousehold, + members: [], + projectBeneficiaries: null, + ), + )); + return; + } + + if (event.selectedFilter!.contains(Status.registered.name) || + event.selectedFilter!.contains(Status.notRegistered.name)) { + late List individualClientReferenceIds = []; + + result.forEach((e) { + individualClientReferenceIds.add(e.clientReferenceId); + }); + + List individuals = await individualRepository.search( + IndividualSearchModel( + clientReferenceId: individualClientReferenceIds + .map((e) => e.toString()) + .toList())); + + final projectBeneficiaries = await projectBeneficiaryRepository.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: event.projectBeneficiaryType == + BeneficiaryType.individual + ? individualClientReferenceIds + : [state.householdMemberWrapper.household!.clientReferenceId], + projectId: [event.projectId], + ), + ); + + final beneficiaryClientReferenceIds = projectBeneficiaries + .map((e) => e.beneficiaryClientReferenceId) + .toList(); + + final List beneficiaryIndividuals = individuals + .where((element) => beneficiaryClientReferenceIds + .contains(element.clientReferenceId)) + .toList(); + + emit(state.copyWith( + loading: false, + offset: individuals.isNotEmpty && individuals.length == event.limit + ? (event.offset ?? 0) + (event.limit ?? 10) + : null, + householdMemberWrapper: state.householdMemberWrapper.copyWith( + members: event.offset == 0 + ? (event.projectBeneficiaryType == BeneficiaryType.individual) + ? beneficiaryIndividuals + : individuals + : [ + ...{ + ...state.householdMemberWrapper.members ?? [], + ...((event.projectBeneficiaryType == + BeneficiaryType.individual) + ? beneficiaryIndividuals + : individuals), + }, + ], + projectBeneficiaries: event.offset == 0 + ? projectBeneficiaries + : [ + ...{ + ...state.householdMemberWrapper.projectBeneficiaries ?? + [], + ...projectBeneficiaries, + }, + ], + ), + limit: event.limit, + )); + } else if (event.selectedFilter != null && + event.selectedFilter!.isNotEmpty) { + late List listOfBeneficiaries = []; + for (var e in result) { + !listOfBeneficiaries.contains(e.projectBeneficiaryClientReferenceId) + ? listOfBeneficiaries.add(e.projectBeneficiaryClientReferenceId) + : null; + } + + List projectBeneficiariesList = + await projectBeneficiaryRepository.search( + ProjectBeneficiarySearchModel(projectId: [ + RegistrationSingleton().projectId.toString() + ], clientReferenceId: listOfBeneficiaries)); + + late List listOfMembers = []; + + listOfMembers = projectBeneficiariesList + .map((e) => e.beneficiaryClientReferenceId.toString()) + .toList(); + + List householdMemberList = + await householdMemberRepository.search(HouseholdMemberSearchModel( + individualClientReferenceId: listOfMembers)); + + final List individualClientReferenceIds = householdMemberList + .map((e) => e.individualClientReferenceId.toString()) + .toList(); + + final List individualsList = + await individualRepository.search( + IndividualSearchModel( + clientReferenceId: individualClientReferenceIds), + ); + + late List householdClientReferenceIds = []; + + householdClientReferenceIds = householdMemberList + .map((e) => e.householdClientReferenceId.toString()) + .toList(); + + final projectBeneficiaries = await projectBeneficiaryRepository.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: event.projectBeneficiaryType == + BeneficiaryType.individual + ? individualClientReferenceIds + : [state.householdMemberWrapper.household!.clientReferenceId], + projectId: [event.projectId], + ), + ); + + final beneficiaryClientReferenceIds = projectBeneficiaries + .map((e) => e.beneficiaryClientReferenceId) + .toList(); + + final List beneficiaryIndividuals = individualsList + .where((element) => beneficiaryClientReferenceIds + .contains(element.clientReferenceId)) + .toList(); + + emit(state.copyWith( + loading: false, + offset: individualsList.isNotEmpty && + individualsList.length == event.limit + ? (event.offset ?? 0) + (event.limit ?? 10) + : null, + householdMemberWrapper: state.householdMemberWrapper.copyWith( + members: event.offset == 0 + ? (event.projectBeneficiaryType == BeneficiaryType.individual) + ? beneficiaryIndividuals + : individualsList + : [ + ...{ + ...state.householdMemberWrapper.members ?? [], + ...((event.projectBeneficiaryType == + BeneficiaryType.individual) + ? beneficiaryIndividuals + : individualsList), + }, + ], + projectBeneficiaries: event.offset == 0 + ? projectBeneficiaries + : [ + ...{ + ...state.householdMemberWrapper.projectBeneficiaries ?? + [], + ...projectBeneficiaries, + }, + ], + ), + limit: event.limit, + )); + } else { + late List individualClientReferenceIds = []; + + result.forEach((e) { + individualClientReferenceIds.add(e.clientReferenceId); + }); + + List individuals = await individualRepository.search( + IndividualSearchModel( + clientReferenceId: individualClientReferenceIds + .map((e) => e.toString()) + .toList())); + + final projectBeneficiaries = await projectBeneficiaryRepository.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: event.projectBeneficiaryType == + BeneficiaryType.individual + ? individualClientReferenceIds + : [state.householdMemberWrapper.household!.clientReferenceId], + projectId: [event.projectId], + ), + ); + + final beneficiaryClientReferenceIds = projectBeneficiaries + .map((e) => e.beneficiaryClientReferenceId) + .toList(); + + final List beneficiaryIndividuals = individuals + .where((element) => beneficiaryClientReferenceIds + .contains(element.clientReferenceId)) + .toList(); + + emit(state.copyWith( + loading: false, + offset: individuals.isNotEmpty && individuals.length == event.limit + ? (event.offset ?? 0) + (event.limit ?? 10) + : null, + householdMemberWrapper: state.householdMemberWrapper.copyWith( + members: event.offset == 0 + ? (event.projectBeneficiaryType == BeneficiaryType.individual) + ? beneficiaryIndividuals + : individuals + : [ + ...{ + ...state.householdMemberWrapper.members ?? [], + ...((event.projectBeneficiaryType == + BeneficiaryType.individual) + ? beneficiaryIndividuals + : individuals), + }, + ], + projectBeneficiaries: event.offset == 0 + ? projectBeneficiaries + : [ + ...{ + ...state.householdMemberWrapper.projectBeneficiaries ?? + [], + ...projectBeneficiaries, + }, + ], + ), + limit: event.limit, + )); + } + } + } + + // This function handles the deletion of a household and its associated members and beneficiaries. + FutureOr _handleDeleteHousehold( + HouseholdOverviewDeleteHouseholdEvent event, + HouseholdOverviewEmitter emit, + ) async { + // Delete the household from the repository. + final HouseholdModel? existingHousehold = + (await householdRepository.search(HouseholdSearchModel( + clientReferenceId: [event.householdModel.clientReferenceId], + ))) + .firstOrNull; + await householdRepository.delete( + event.householdModel.copyWith( + id: existingHousehold?.id, + rowVersion: existingHousehold?.rowVersion ?? 1, + nonRecoverableError: existingHousehold?.nonRecoverableError ?? false, + ), + ); + + // Iterate through individual members of the household. + for (final i in event.members) { +// Delete the individual from the repository. + final IndividualModel? existingIndividual = + (await individualRepository.search(IndividualSearchModel( + clientReferenceId: [i.clientReferenceId], + ))) + .firstOrNull; + await individualRepository.delete(i.copyWith( + id: existingIndividual?.id, + rowVersion: existingIndividual?.rowVersion ?? 1, + nonRecoverableError: existingIndividual?.nonRecoverableError ?? false, + )); + if (event.projectBeneficiaryType == BeneficiaryType.individual) { + // Search for project beneficiary associated with the deleted individual. + final projectBeneficiaries = await projectBeneficiaryRepository.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: [ + i.clientReferenceId, + ], + ), + ); + // Delete the associated project beneficiaries. + for (final projectBeneficiary in projectBeneficiaries) { + await projectBeneficiaryRepository.delete( + projectBeneficiary.copyWith( + rowVersion: projectBeneficiary.rowVersion, + clientAuditDetails: (projectBeneficiary + .clientAuditDetails?.createdBy != + null && + projectBeneficiary.clientAuditDetails?.createdTime != + null) + ? ClientAuditDetails( + createdBy: + projectBeneficiary.clientAuditDetails!.createdBy, + createdTime: + projectBeneficiary.clientAuditDetails!.createdTime, + lastModifiedBy: + projectBeneficiary.clientAuditDetails!.lastModifiedBy, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ) + : null, + ), + ); + } + } + + // Search for household members associated with the deleted individual. + final householdMember = + await householdMemberRepository.search(HouseholdMemberSearchModel( + householdClientReferenceId: [event.householdModel.clientReferenceId], + individualClientReferenceId: [i.clientReferenceId], + )); + + // Delete the associated household members. + for (final j in householdMember) { + await householdMemberRepository.delete( + j.copyWith( + rowVersion: j.rowVersion, + ), + ); + } + } + + if (BeneficiaryType.household == event.projectBeneficiaryType) { + // Delete the project beneficiary associated with the household. + final ProjectBeneficiaryModel? existingProjectBeneficiary = + (await projectBeneficiaryRepository + .search(ProjectBeneficiarySearchModel( + clientReferenceId: [event.projectBeneficiaryModel.clientReferenceId], + ))) + .firstOrNull; + await projectBeneficiaryRepository.delete( + event.projectBeneficiaryModel.copyWith( + id: existingProjectBeneficiary?.id, + rowVersion: existingProjectBeneficiary?.rowVersion ?? 1, + nonRecoverableError: + existingProjectBeneficiary?.nonRecoverableError ?? false, + ), + ); + } + } + + // This function handles the deletion of an individual from a household. + FutureOr _handleDeleteIndividual( + HouseholdOverviewDeleteIndividualEvent event, + HouseholdOverviewEmitter emit, + ) async { +// Delete the individual from the repository. + final IndividualModel? existingIndividual = + (await individualRepository.search(IndividualSearchModel( + clientReferenceId: [event.individualModel.clientReferenceId], + ))) + .firstOrNull; + await individualRepository.delete(event.individualModel.copyWith( + id: existingIndividual?.id, + rowVersion: existingIndividual?.rowVersion ?? 1, + nonRecoverableError: existingIndividual?.nonRecoverableError ?? false, + )); + if (event.projectBeneficiaryType == BeneficiaryType.individual) { + // Search for project beneficiary associated with the deleted individual. + final projectBeneficiaries = await projectBeneficiaryRepository.search( + ProjectBeneficiarySearchModel( + beneficiaryClientReferenceId: [ + event.individualModel.clientReferenceId, + ], + ), + ); + // Delete the associated project beneficiaries. + for (final projectBeneficiary in projectBeneficiaries) { + await projectBeneficiaryRepository.delete( + projectBeneficiary.copyWith( + rowVersion: projectBeneficiary.rowVersion, + clientAuditDetails: (projectBeneficiary + .clientAuditDetails?.createdBy != + null && + projectBeneficiary.clientAuditDetails?.createdTime != null) + ? ClientAuditDetails( + createdBy: projectBeneficiary.clientAuditDetails!.createdBy, + createdTime: + projectBeneficiary.clientAuditDetails!.createdTime, + lastModifiedBy: + projectBeneficiary.clientAuditDetails!.lastModifiedBy, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ) + : null, + ), + ); + } + } + // Search for household members associated with the deleted individual. + final householdMembers = await householdMemberRepository.search( + HouseholdMemberSearchModel( + individualClientReferenceId: [event.individualModel.clientReferenceId], + householdClientReferenceId: [event.householdModel.clientReferenceId], + ), + ); + + // Delete the associated household members. + for (final i in householdMembers) { + await householdMemberRepository.delete( + i.copyWith( + rowVersion: i.rowVersion, + clientAuditDetails: (i.clientAuditDetails?.createdBy != null && + i.clientAuditDetails?.createdTime != null) + ? ClientAuditDetails( + createdBy: i.clientAuditDetails!.createdBy, + createdTime: i.clientAuditDetails!.createdTime, + lastModifiedBy: i.clientAuditDetails!.lastModifiedBy, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ) + : null, + ), + ); + } + + // Trigger a reload event to update the household overview. + add(HouseholdOverviewReloadEvent( + projectId: event.projectId, + projectBeneficiaryType: event.projectBeneficiaryType, + )); + } + + // This function handles setting an individual as the head of a household. + FutureOr _handleSetAsHead( + HouseholdOverviewSetAsHeadEvent event, + HouseholdOverviewEmitter emit, + ) async { + // Retrieve household members based on certain criteria. + final members = await householdMemberRepository.search( + HouseholdMemberSearchModel( + householdClientReferenceId: [event.householdModel.clientReferenceId], + ), + ); + + // Update the household members based on the given conditions. + final updatedMembers = members.map((i) { + final individualId = event.individualModel.clientReferenceId; + final memberId = i.individualClientReferenceId; + + if (individualId == memberId) { + // If the individual is not already the head, set them as the head. + if (!i.isHeadOfHousehold) { + return i.copyWith( + isHeadOfHousehold: true, + rowVersion: i.rowVersion, + ); + } + } else { + // If another individual is currently the head, remove their head status. + if (i.isHeadOfHousehold) { + return i.copyWith( + isHeadOfHousehold: false, + rowVersion: i.rowVersion, + ); + } + } + + return i; + }).toList(); + + // Update the household members in the repository. + for (final element in updatedMembers) { + await householdMemberRepository.update( + element.copyWith( + rowVersion: element.rowVersion, + clientAuditDetails: (element.clientAuditDetails?.createdBy != null && + element.clientAuditDetails?.createdTime != null) + ? ClientAuditDetails( + createdBy: element.clientAuditDetails!.createdBy, + createdTime: element.clientAuditDetails!.createdTime, + lastModifiedBy: element.clientAuditDetails?.lastModifiedBy, + lastModifiedTime: DateTime.now().millisecondsSinceEpoch, + ) + : null, + ), + ); + } + + // Trigger a reload event to update the household overview. + add(HouseholdOverviewReloadEvent( + projectId: event.projectId, + projectBeneficiaryType: event.projectBeneficiaryType, + )); + } + +// This function updates the state based on certain conditions and filters the tasks. +} + +@freezed +class HouseholdOverviewEvent with _$HouseholdOverviewEvent { + const factory HouseholdOverviewEvent.deleteHousehold({ + required String projectId, + required HouseholdModel householdModel, + required List members, + required ProjectBeneficiaryModel projectBeneficiaryModel, + required BeneficiaryType projectBeneficiaryType, + }) = HouseholdOverviewDeleteHouseholdEvent; + + const factory HouseholdOverviewEvent.deleteIndividual({ + required String projectId, + required HouseholdModel householdModel, + required IndividualModel individualModel, + required BeneficiaryType projectBeneficiaryType, + }) = HouseholdOverviewDeleteIndividualEvent; + + const factory HouseholdOverviewEvent.setAsHead({ + required String projectId, + required IndividualModel individualModel, + required HouseholdModel householdModel, + required BeneficiaryType projectBeneficiaryType, + }) = HouseholdOverviewSetAsHeadEvent; + + const factory HouseholdOverviewEvent.selectedIndividual({ + required IndividualModel individualModel, + }) = HouseholdOverviewSelectIndividualEvent; + + const factory HouseholdOverviewEvent.reload( + {required String projectId, + required BeneficiaryType projectBeneficiaryType, + int? offset, + int? limit, + List? selectedFilter, + String? searchByName}) = HouseholdOverviewReloadEvent; +} + +@freezed +class HouseholdOverviewState with _$HouseholdOverviewState { + const factory HouseholdOverviewState({ + @Default(false) bool loading, + required HouseholdMemberWrapper householdMemberWrapper, + IndividualModel? selectedIndividual, + int? offset, + int? limit, + }) = _HouseholdOverviewState; +} diff --git a/packages/registration_delivery/lib/blocs/household_overview/household_overview.freezed.dart b/packages/registration/lib/blocs/household_overview/household_overview.freezed.dart similarity index 100% rename from packages/registration_delivery/lib/blocs/household_overview/household_overview.freezed.dart rename to packages/registration/lib/blocs/household_overview/household_overview.freezed.dart diff --git a/packages/registration_delivery/lib/blocs/registration_delivery_localization_delegate.dart b/packages/registration/lib/blocs/registration_localization_delegate.dart similarity index 50% rename from packages/registration_delivery/lib/blocs/registration_delivery_localization_delegate.dart rename to packages/registration/lib/blocs/registration_localization_delegate.dart index d69bafd550..ff7ce6d292 100644 --- a/packages/registration_delivery/lib/blocs/registration_delivery_localization_delegate.dart +++ b/packages/registration/lib/blocs/registration_localization_delegate.dart @@ -2,12 +2,13 @@ import 'package:flutter/material.dart'; import 'app_localization.dart'; -class RegistrationDeliveryLocalizationDelegate - extends LocalizationsDelegate { +class RegistrationLocalizationDelegate + extends LocalizationsDelegate { final Future localizedStrings; final List languages; - const RegistrationDeliveryLocalizationDelegate(this.localizedStrings, this.languages); + const RegistrationLocalizationDelegate( + this.localizedStrings, this.languages); @override bool isSupported(Locale locale) { @@ -18,9 +19,9 @@ class RegistrationDeliveryLocalizationDelegate } @override - Future load(Locale locale) async { - RegistrationDeliveryLocalization localization = - RegistrationDeliveryLocalization(locale, localizedStrings, languages); + Future load(Locale locale) async { + RegistrationLocalization localization = + RegistrationLocalization(locale, localizedStrings, languages); await localization.load(); return localization; @@ -28,7 +29,7 @@ class RegistrationDeliveryLocalizationDelegate @override bool shouldReload( - covariant LocalizationsDelegate old) { + covariant LocalizationsDelegate old) { return true; } } diff --git a/packages/registration/lib/blocs/search_households/household_global_seach.dart b/packages/registration/lib/blocs/search_households/household_global_seach.dart new file mode 100644 index 0000000000..3f2ba1ae4e --- /dev/null +++ b/packages/registration/lib/blocs/search_households/household_global_seach.dart @@ -0,0 +1,269 @@ +import 'dart:async'; + +import 'package:collection/collection.dart'; +import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:registration/blocs/search_households/search_households.dart'; +import 'package:registration/models/entities/status.dart'; +import 'package:registration/utils/utils.dart'; + +import '../../models/entities/household.dart'; +import '../../models/entities/household_member.dart'; +import '../../models/entities/project_beneficiary.dart'; + +import '../../utils/global_search_parameters.dart'; + +class HouseHoldGlobalSearchBloc extends SearchHouseholdsBloc { + HouseHoldGlobalSearchBloc({ + required super.userUid, + required super.projectId, + required super.individual, + required super.householdMember, + required super.household, + required super.projectBeneficiary, + required super.beneficiaryType, + required super.addressRepository, + required super.individualGlobalSearchRepository, + required super.houseHoldGlobalSearchRepository, + }) { + on(_houseHoldGlobalSearch); + } + + Future _houseHoldGlobalSearch( + HouseHoldGlobalSearchEvent event, + SearchHouseholdsEmitter emit, + ) async { + final containers = [...state.householdMembers]; + + List householdList = []; + List individualsList = []; + List householdMembersList = []; + List projectBeneficiariesList = []; + + emit(state.copyWith(loading: true)); + + final results = await houseHoldGlobalSearchRepository.houseHoldGlobalSearch( + GlobalSearchParameters( + householdType: event.globalSearchParams.householdType, + projectId: event.globalSearchParams.projectId, + isProximityEnabled: event.globalSearchParams.isProximityEnabled, + latitude: event.globalSearchParams.latitude, + longitude: event.globalSearchParams.longitude, + maxRadius: event.globalSearchParams.maxRadius, + nameSearch: event.globalSearchParams.nameSearch, + filter: event.globalSearchParams.filter, + offset: event.globalSearchParams.offset, + limit: event.globalSearchParams.limit, + totalCount: state.totalResults), + ); + + var totalCount = results['total_count']; + var finalResults = results['data'].map((e) => e).toList(); + + if (event.globalSearchParams.filter!.contains(Status.registered.name) || + event.globalSearchParams.filter!.contains(Status.notRegistered.name)) { + late List houseHoldClientReferenceIds = []; + + finalResults.forEach((e) { + houseHoldClientReferenceIds.add(e.clientReferenceId); + }); + + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: + houseHoldClientReferenceIds.map((e) => e.toString()).toList())); + + // Search for individual results using the extracted IDs and search text. + householdMembersList = await fetchHouseholdMembersBulk( + null, + houseHoldClientReferenceIds, + ); + + final List individualClientReferenceIds = householdMembersList + .map((e) => e.individualClientReferenceId.toString()) + .toList(); + + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), + ); + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [RegistrationSingleton().projectId.toString()], + beneficiaryClientReferenceId: + houseHoldClientReferenceIds.map((e) => e).toList())); + + // Process household entries and add to containers + await _processHouseholdEntries( + householdMembersList, + householdList, + individualsList, + projectBeneficiariesList, + containers, + ); + } else if (event.globalSearchParams.filter!.isNotEmpty && + event.globalSearchParams.filter != null) { + late List listOfBeneficiaries = []; + for (var e in finalResults) { + !listOfBeneficiaries.contains(e.projectBeneficiaryClientReferenceId) + ? listOfBeneficiaries.add(e.projectBeneficiaryClientReferenceId!) + : null; + } + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [RegistrationSingleton().projectId.toString()], + clientReferenceId: listOfBeneficiaries)); + + late List listOfMembers = []; + + listOfMembers = projectBeneficiariesList + .map((e) => e.beneficiaryClientReferenceId.toString()) + .toList(); + + householdMembersList = await fetchHouseholdMembersBulk( + null, + listOfMembers, + ); + + final List individualClientReferenceIds = householdMembersList + .map((e) => e.individualClientReferenceId.toString()) + .toList(); + + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), + ); + + late List houseHoldClientReferenceIds = []; + + houseHoldClientReferenceIds = householdMembersList + .map((e) => e.householdClientReferenceId.toString()) + .toList(); + + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: houseHoldClientReferenceIds, + )); + + finalResults.forEach((element) {}); + + // Process household entries and add to containers + await _processHouseholdEntries( + householdMembersList, + householdList, + individualsList, + projectBeneficiariesList, + containers, + ); + } else { + late List houseHoldClientReferenceIds = []; + + finalResults.forEach((e) { + houseHoldClientReferenceIds.add(e.clientReferenceId); + }); + + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: + houseHoldClientReferenceIds.map((e) => e.toString()).toList())); + + // Search for individual results using the extracted IDs and search text. + householdMembersList = await fetchHouseholdMembersBulk( + null, + houseHoldClientReferenceIds, + ); + + final List individualClientReferenceIds = householdMembersList + .map((e) => e.individualClientReferenceId.toString()) + .toList(); + + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), + ); + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [RegistrationSingleton().projectId.toString()], + beneficiaryClientReferenceId: + houseHoldClientReferenceIds.map((e) => e).toList())); + + // Process household entries and add to containers + await _processHouseholdEntries( + householdMembersList, + householdList, + individualsList, + projectBeneficiariesList, + containers, + ); + } + emit(state.copyWith( + householdMembers: containers, + loading: false, + searchQuery: event.globalSearchParams.nameSearch, + offset: + event.globalSearchParams.offset! + event.globalSearchParams.limit!, + limit: event.globalSearchParams.limit!, + totalResults: containers.isEmpty ? 0 : totalCount, + )); + } + + Future _processHouseholdEntries( + List householdMembersList, + List householdList, + List individualsList, + List projectBeneficiariesList, + List containers, + ) async { + final groupedHouseholdsMembers = householdMembersList + .groupListsBy((element) => element.householdClientReferenceId); + + for (final entry in groupedHouseholdsMembers.entries) { + HouseholdModel filteredHousehold; + List filteredIndividuals; + // List filteredTasks = []; + List filteredBeneficiaries = []; + final householdId = entry.key; + if (householdId == null) continue; + + // Filter household based on household ID + filteredHousehold = + householdList.firstWhere((e) => e.clientReferenceId == householdId); + + // Extract individual client reference IDs from household members + final List membersIds = + entry.value.map((e) => e.individualClientReferenceId).toList(); + + // Filter individuals based on individual client reference IDs + filteredIndividuals = individualsList + .where((element) => membersIds.contains(element.clientReferenceId)) + .toList(); + + // Filter beneficiaries based on filtered household client reference IDs + filteredBeneficiaries = projectBeneficiariesList + .where((element) => + element.beneficiaryClientReferenceId == + filteredHousehold.clientReferenceId) + .toList(); + + // Find the head of the household + final head = filteredIndividuals.firstWhereOrNull( + (element) => + element.clientReferenceId == + entry.value + .firstWhereOrNull( + (element) => element.isHeadOfHousehold, + ) + ?.individualClientReferenceId, + ); + + // Skip if no head of household or no filtered beneficiaries + if (head == null) continue; + + // Add household member wrapper to containers + containers.add( + HouseholdMemberWrapper( + household: filteredHousehold, + headOfHousehold: head, + members: filteredIndividuals, + projectBeneficiaries: filteredBeneficiaries, + ), + ); + } + } +} diff --git a/packages/registration/lib/blocs/search_households/individual_global_search.dart b/packages/registration/lib/blocs/search_households/individual_global_search.dart new file mode 100644 index 0000000000..468503af9b --- /dev/null +++ b/packages/registration/lib/blocs/search_households/individual_global_search.dart @@ -0,0 +1,286 @@ +import 'dart:async'; + +import 'package:collection/collection.dart'; +import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:registration/blocs/search_households/search_households.dart'; +import 'package:registration/models/entities/status.dart'; + +import '../../models/entities/household.dart'; +import '../../models/entities/household_member.dart'; +import '../../models/entities/project_beneficiary.dart'; + +import '../../utils/global_search_parameters.dart'; +import '../../utils/utils.dart'; + +class IndividualGlobalSearchBloc extends SearchHouseholdsBloc { + IndividualGlobalSearchBloc( + {required super.userUid, + required super.projectId, + required super.individual, + required super.householdMember, + required super.household, + required super.projectBeneficiary, + required super.beneficiaryType, + required super.addressRepository, + required super.individualGlobalSearchRepository, + required super.houseHoldGlobalSearchRepository}) { + on(_individualGlobalSearch); + } + + Future _individualGlobalSearch( + IndividualGlobalSearchEvent event, + SearchHouseholdsEmitter emit, + ) async { + final containers = [...state.householdMembers]; + + List householdList = []; + List individualsList = []; + List householdMembersList = []; + List projectBeneficiariesList = []; + + emit(state.copyWith(loading: true)); + + final results = + await individualGlobalSearchRepository.individualGlobalSearch( + GlobalSearchParameters( + projectId: event.globalSearchParams.projectId, + isProximityEnabled: event.globalSearchParams.isProximityEnabled, + latitude: event.globalSearchParams.latitude, + longitude: event.globalSearchParams.longitude, + maxRadius: event.globalSearchParams.maxRadius, + nameSearch: event.globalSearchParams.nameSearch, + filter: event.globalSearchParams.filter, + offset: event.globalSearchParams.offset, + limit: event.globalSearchParams.limit, + totalCount: state.totalResults, + householdType: event.globalSearchParams.householdType, + ), + ); + + var totalCount = results['total_count']; + var finalResults = results['data'].map((e) => e).toList(); + + if (event.globalSearchParams.filter!.contains(Status.registered.name) || + event.globalSearchParams.filter!.contains(Status.notRegistered.name)) { + late List individualClientReferenceIds = []; + + finalResults.forEach((e) { + individualClientReferenceIds.add(e.clientReferenceId); + }); + + individualsList = await individual.search(IndividualSearchModel( + clientReferenceId: + individualClientReferenceIds.map((e) => e.toString()).toList())); + + final List householdMembers = + await fetchHouseholdMembersBulk( + individualClientReferenceIds, + null, + ); + + final houseHoldIds = + householdMembers.map((e) => e.householdClientReferenceId!).toList(); + + householdList = await household.search( + HouseholdSearchModel( + clientReferenceId: houseHoldIds, + ), + ); + + var finalHouseholdMembersList = await fetchHouseholdMembersBulk( + null, householdList.map((e) => e.clientReferenceId).toList()); + + individualsList = await individual.search(IndividualSearchModel( + clientReferenceId: finalHouseholdMembersList + .map((e) => e.individualClientReferenceId!) + .toList())); + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [RegistrationSingleton().projectId.toString()], + beneficiaryClientReferenceId: + individualsList.map((e) => e.clientReferenceId).toList())); + + await _processHouseholdEntries(finalHouseholdMembersList, householdList, + individualsList, projectBeneficiariesList, containers); + } else if (event.globalSearchParams.filter!.isNotEmpty && + event.globalSearchParams.filter != null) { + late List listOfBeneficiaries = []; + for (var e in finalResults) { + !listOfBeneficiaries.contains(e.projectBeneficiaryClientReferenceId) + ? listOfBeneficiaries.add(e.projectBeneficiaryClientReferenceId!) + : null; + } + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [RegistrationSingleton().projectId.toString()], + clientReferenceId: listOfBeneficiaries)); + + late List listOfMembers = []; + + listOfMembers = projectBeneficiariesList + .map((e) => e.beneficiaryClientReferenceId.toString()) + .toList(); + + householdMembersList = await fetchHouseholdMembersBulk( + listOfMembers, + null, + ); + + final List individualClientReferenceIds = householdMembersList + .map((e) => e.individualClientReferenceId.toString()) + .toList(); + + individualsList = await individual.search( + IndividualSearchModel(clientReferenceId: individualClientReferenceIds), + ); + + late List houseHoldClientReferenceIds = []; + + houseHoldClientReferenceIds = householdMembersList + .map((e) => e.householdClientReferenceId.toString()) + .toList(); + + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: houseHoldClientReferenceIds, + )); + + var finalHouseholdMembersList = await fetchHouseholdMembersBulk( + null, householdList.map((e) => e.clientReferenceId).toList()); + + individualsList = await individual.search(IndividualSearchModel( + clientReferenceId: finalHouseholdMembersList + .map((e) => e.individualClientReferenceId!) + .toList())); + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [RegistrationSingleton().projectId.toString()], + beneficiaryClientReferenceId: + individualsList.map((e) => e.clientReferenceId).toList())); + + // Process household entries and add to containers + await _processHouseholdEntries( + finalHouseholdMembersList, + householdList, + individualsList, + projectBeneficiariesList, + containers, + ); + } else { + late List individualClientReferenceIds = []; + + finalResults.forEach((e) { + individualClientReferenceIds.add(e.clientReferenceId); + }); + + individualsList = await individual.search(IndividualSearchModel( + clientReferenceId: + individualClientReferenceIds.map((e) => e.toString()).toList())); + + // Search for individual results using the extracted IDs and search text. + final List householdMembers = + await fetchHouseholdMembersBulk( + individualClientReferenceIds, + null, + ); + + householdList = await household.search(HouseholdSearchModel( + clientReferenceId: householdMembers + .map((e) => e.householdClientReferenceId.toString()) + .toList(), + )); + + var finalHouseholdMembersList = await fetchHouseholdMembersBulk( + null, householdList.map((e) => e.clientReferenceId).toList()); + + individualsList = await individual.search(IndividualSearchModel( + clientReferenceId: finalHouseholdMembersList + .map((e) => e.individualClientReferenceId!) + .toList())); + + projectBeneficiariesList = await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [RegistrationSingleton().projectId.toString()], + beneficiaryClientReferenceId: + individualsList.map((e) => e.clientReferenceId).toList())); + + await _processHouseholdEntries(finalHouseholdMembersList, householdList, + individualsList, projectBeneficiariesList, containers); + } + + emit(state.copyWith( + householdMembers: containers, + loading: false, + searchQuery: event.globalSearchParams.nameSearch, + offset: + event.globalSearchParams.offset! + event.globalSearchParams.limit!, + limit: event.globalSearchParams.limit!, + totalResults: totalCount, + )); + } + + _processHouseholdEntries( + List householdMembers, + List householdList, + List individualsList, + List projectBeneficiariesList, + List containers) async { + // Group household members by household client reference ID + final groupedHouseholdsMembers = householdMembers + .groupListsBy((element) => element.householdClientReferenceId); + + for (final entry in groupedHouseholdsMembers.entries) { + HouseholdModel filteredHousehold; + List filteredIndividuals; + + List filteredBeneficiaries = []; + final householdId = entry.key; + if (householdId == null) continue; + + // Filter household based on household ID + filteredHousehold = + householdList.firstWhere((e) => e.clientReferenceId == householdId); + + // Extract individual client reference IDs from household members + final List membersIds = + entry.value.map((e) => e.individualClientReferenceId).toList(); + + // Filter individuals based on individual client reference IDs + filteredIndividuals = individualsList + .where((element) => membersIds.contains(element.clientReferenceId)) + .toList(); + + // Filter beneficiaries based on individual client reference IDs + filteredBeneficiaries = projectBeneficiariesList + .where((element) => + membersIds.contains(element.beneficiaryClientReferenceId)) + .toList(); + + // Find the head of the household + final head = filteredIndividuals.firstWhereOrNull( + (element) => + element.clientReferenceId == + entry.value + .firstWhereOrNull( + (element) => element.isHeadOfHousehold, + ) + ?.individualClientReferenceId, + ); + + // Skip if no head of household or no filtered beneficiaries + if (head == null) continue; + + // Add household member wrapper to containers + containers.add( + HouseholdMemberWrapper( + household: filteredHousehold, + headOfHousehold: head, + members: filteredIndividuals, + projectBeneficiaries: filteredBeneficiaries, + ), + ); + } + } +} diff --git a/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart b/packages/registration/lib/blocs/search_households/search_bloc_common_wrapper.dart similarity index 95% rename from packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart rename to packages/registration/lib/blocs/search_households/search_bloc_common_wrapper.dart index b612a83f44..dd69d5ac33 100644 --- a/packages/registration_delivery/lib/blocs/search_households/search_bloc_common_wrapper.dart +++ b/packages/registration/lib/blocs/search_households/search_bloc_common_wrapper.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:async/async.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/blocs/search_households/individual_global_search.dart'; +import 'package:registration/blocs/search_households/individual_global_search.dart'; import 'household_global_seach.dart'; import 'tag_by_search.dart'; import 'search_households.dart'; diff --git a/packages/registration/lib/blocs/search_households/search_households.dart b/packages/registration/lib/blocs/search_households/search_households.dart new file mode 100644 index 0000000000..02229e3e71 --- /dev/null +++ b/packages/registration/lib/blocs/search_households/search_households.dart @@ -0,0 +1,280 @@ +// GENERATED using mason_cli +import 'dart:async'; + +import 'package:collection/collection.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/models/entities/household_type.dart'; +import 'package:digit_data_model/utils/typedefs.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:registration/registration.dart'; +import 'package:stream_transform/stream_transform.dart'; + +import '../../data/repositories/local/household_global_search.dart'; +import '../../data/repositories/local/individual_global_search.dart'; + +import '../../utils/global_search_parameters.dart'; +import '../../utils/utils.dart'; + +part 'search_households.freezed.dart'; + +typedef SearchHouseholdsEmitter = Emitter; + +EventTransformer debounce(Duration duration) { + return (events, mapper) => events.debounce(duration).switchMap(mapper); +} + +class SearchHouseholdsBloc + extends Bloc { + final BeneficiaryType beneficiaryType; + final String projectId; + final String userUid; + final IndividualDataRepository individual; + final HouseholdDataRepository household; + final RegistrationDeliveryAddressRepo addressRepository; + final HouseholdMemberDataRepository householdMember; + final ProjectBeneficiaryDataRepository projectBeneficiary; + + final IndividualGlobalSearchRepository individualGlobalSearchRepository; + final HouseHoldGlobalSearchRepository houseHoldGlobalSearchRepository; + + SearchHouseholdsBloc( + {required this.userUid, + required this.projectId, + required this.individual, + required this.householdMember, + required this.household, + required this.projectBeneficiary, + required this.beneficiaryType, + required this.addressRepository, + required this.individualGlobalSearchRepository, + required this.houseHoldGlobalSearchRepository}) + : super(const SearchHouseholdsState()) { + on(_handleClear); + on(_handleSearchByHousehold); + } + + // This function is been used in Individual details screen. + Future _handleSearchByHousehold( + SearchHouseholdsByHouseholdsEvent event, + SearchHouseholdsEmitter emit, + ) async { + emit(state.copyWith(loading: true)); + + try { + final householdMembers = await householdMember.search( + HouseholdMemberSearchModel( + householdClientReferenceId: [event.householdModel.clientReferenceId], + ), + ); + + final individuals = await fetchIndividuals( + householdMembers + .map((e) => e.individualClientReferenceId) + .whereNotNull() + .toList(), + null, + ); + + final projectBeneficiaries = await fetchProjectBeneficiary( + beneficiaryType == BeneficiaryType.individual + ? individuals.map((e) => e.clientReferenceId).toList() + : [event.householdModel.clientReferenceId], + ); + + final headOfHousehold = individuals.firstWhereOrNull( + (element) => + element.clientReferenceId == + householdMembers.firstWhereOrNull( + (element) { + return element.isHeadOfHousehold; + }, + )?.individualClientReferenceId, + ); + + if (headOfHousehold == null) { + emit(state.copyWith( + loading: false, + householdMembers: [], + )); + } else { + final householdMemberWrapper = HouseholdMemberWrapper( + household: event.householdModel, + headOfHousehold: headOfHousehold, + members: individuals, + projectBeneficiaries: projectBeneficiaries, + ); + + emit( + state.copyWith( + loading: false, + householdMembers: [ + householdMemberWrapper, + ], + searchQuery: [ + headOfHousehold.name?.givenName, + headOfHousehold.name?.familyName, + ].whereNotNull().join(' '), + ), + ); + } + } catch (error) { + emit(state.copyWith( + loading: false, + householdMembers: [], + )); + } + } + + FutureOr _handleClear( + SearchHouseholdsClearEvent event, + SearchHouseholdsEmitter emit, + ) async { + emit(state.copyWith( + searchQuery: null, + householdMembers: [], + tag: null, + )); + } + +// Fetch the HouseHold Members + + Future> fetchHouseholdMembers( + String? householdClientReferenceId, + String? individualClientReferenceId, + bool? isHeadOfHousehold, + ) async { + return await householdMember.search( + HouseholdMemberSearchModel( + householdClientReferenceId: [householdClientReferenceId.toString()], + individualClientReferenceId: [individualClientReferenceId.toString()], + isHeadOfHousehold: isHeadOfHousehold, + ), + ); + } + + Future> fetchHouseholdMembersBulk( + List? individualClientReferenceIds, + List? householdClientReferenceIds, + ) async { + return await householdMember.search( + HouseholdMemberSearchModel( + individualClientReferenceIds: individualClientReferenceIds, + householdClientReferenceIds: householdClientReferenceIds, + isHeadOfHousehold: RegistrationSingleton().householdType == + HouseholdType.community + ? true + : null, + ), + ); + } + + // Fetch the project Beneficiary + Future> fetchProjectBeneficiary( + List projectBeneficiariesIds, + ) async { + return await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + projectId: [projectId], + beneficiaryClientReferenceId: projectBeneficiariesIds, + ), + ); + } + + Future> fetchIndividuals( + List individualIds, + String? name, + ) async { + return await individual.search( + IndividualSearchModel( + clientReferenceId: individualIds, + name: name != null ? NameSearchModel(givenName: name.trim()) : null, + ), + ); + } +} + +@freezed +class SearchHouseholdsEvent with _$SearchHouseholdsEvent { + const factory SearchHouseholdsEvent.initialize() = + SearchHouseholdsInitializedEvent; + + const factory SearchHouseholdsEvent.searchByHousehold({ + required String projectId, + double? latitude, + double? longitude, + double? maxRadius, + required final bool isProximityEnabled, + required HouseholdModel householdModel, + }) = SearchHouseholdsByHouseholdsEvent; + + const factory SearchHouseholdsEvent.searchByHouseholdHead({ + required String searchText, + required String projectId, + required final bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + required int offset, + required int limit, + }) = SearchHouseholdsSearchByHouseholdHeadEvent; + + const factory SearchHouseholdsEvent.searchByProximity({ + required double latitude, + required double longititude, + required String projectId, + required double maxRadius, + required int offset, + required int limit, + }) = SearchHouseholdsByProximityEvent; + + const factory SearchHouseholdsEvent.searchByTag({ + required String tag, + required String projectId, + }) = SearchHouseholdsByTagEvent; + + const factory SearchHouseholdsEvent.clear() = SearchHouseholdsClearEvent; + + const factory SearchHouseholdsEvent.individualGlobalSearch({ + required GlobalSearchParameters globalSearchParams, + }) = IndividualGlobalSearchEvent; + + const factory SearchHouseholdsEvent.houseHoldGlobalSearch({ + required GlobalSearchParameters globalSearchParams, + }) = HouseHoldGlobalSearchEvent; +} + +@freezed +class SearchHouseholdsState with _$SearchHouseholdsState { + const SearchHouseholdsState._(); + + const factory SearchHouseholdsState({ + @Default(0) int offset, + @Default(10) int limit, + @Default(false) bool loading, + String? searchQuery, + String? tag, + @Default([]) List householdMembers, + @Default(0) int totalResults, + }) = _SearchHouseholdsState; + + bool get resultsNotFound { + if (loading) return false; + + if (searchQuery?.isEmpty ?? true && tag == null) return false; + + return householdMembers.isEmpty; + } +} + +@freezed +class HouseholdMemberWrapper with _$HouseholdMemberWrapper { + const factory HouseholdMemberWrapper({ + HouseholdModel? household, + IndividualModel? headOfHousehold, + List? members, + List? projectBeneficiaries, + double? distance, + }) = _HouseholdMemberWrapper; +} diff --git a/packages/registration/lib/blocs/search_households/search_households.freezed.dart b/packages/registration/lib/blocs/search_households/search_households.freezed.dart new file mode 100644 index 0000000000..345c4819b2 --- /dev/null +++ b/packages/registration/lib/blocs/search_households/search_households.freezed.dart @@ -0,0 +1,2909 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'search_households.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +/// @nodoc +mixin _$SearchHouseholdsEvent { + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $SearchHouseholdsEventCopyWith<$Res> { + factory $SearchHouseholdsEventCopyWith(SearchHouseholdsEvent value, + $Res Function(SearchHouseholdsEvent) then) = + _$SearchHouseholdsEventCopyWithImpl<$Res, SearchHouseholdsEvent>; +} + +/// @nodoc +class _$SearchHouseholdsEventCopyWithImpl<$Res, + $Val extends SearchHouseholdsEvent> + implements $SearchHouseholdsEventCopyWith<$Res> { + _$SearchHouseholdsEventCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; +} + +/// @nodoc +abstract class _$$SearchHouseholdsInitializedEventImplCopyWith<$Res> { + factory _$$SearchHouseholdsInitializedEventImplCopyWith( + _$SearchHouseholdsInitializedEventImpl value, + $Res Function(_$SearchHouseholdsInitializedEventImpl) then) = + __$$SearchHouseholdsInitializedEventImplCopyWithImpl<$Res>; +} + +/// @nodoc +class __$$SearchHouseholdsInitializedEventImplCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$SearchHouseholdsInitializedEventImpl> + implements _$$SearchHouseholdsInitializedEventImplCopyWith<$Res> { + __$$SearchHouseholdsInitializedEventImplCopyWithImpl( + _$SearchHouseholdsInitializedEventImpl _value, + $Res Function(_$SearchHouseholdsInitializedEventImpl) _then) + : super(_value, _then); +} + +/// @nodoc + +class _$SearchHouseholdsInitializedEventImpl + implements SearchHouseholdsInitializedEvent { + const _$SearchHouseholdsInitializedEventImpl(); + + @override + String toString() { + return 'SearchHouseholdsEvent.initialize()'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SearchHouseholdsInitializedEventImpl); + } + + @override + int get hashCode => runtimeType.hashCode; + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + }) { + return initialize(); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + }) { + return initialize?.call(); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (initialize != null) { + return initialize(); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + }) { + return initialize(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + }) { + return initialize?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (initialize != null) { + return initialize(this); + } + return orElse(); + } +} + +abstract class SearchHouseholdsInitializedEvent + implements SearchHouseholdsEvent { + const factory SearchHouseholdsInitializedEvent() = + _$SearchHouseholdsInitializedEventImpl; +} + +/// @nodoc +abstract class _$$SearchHouseholdsByHouseholdsEventImplCopyWith<$Res> { + factory _$$SearchHouseholdsByHouseholdsEventImplCopyWith( + _$SearchHouseholdsByHouseholdsEventImpl value, + $Res Function(_$SearchHouseholdsByHouseholdsEventImpl) then) = + __$$SearchHouseholdsByHouseholdsEventImplCopyWithImpl<$Res>; + @useResult + $Res call( + {String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel}); +} + +/// @nodoc +class __$$SearchHouseholdsByHouseholdsEventImplCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$SearchHouseholdsByHouseholdsEventImpl> + implements _$$SearchHouseholdsByHouseholdsEventImplCopyWith<$Res> { + __$$SearchHouseholdsByHouseholdsEventImplCopyWithImpl( + _$SearchHouseholdsByHouseholdsEventImpl _value, + $Res Function(_$SearchHouseholdsByHouseholdsEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? projectId = null, + Object? latitude = freezed, + Object? longitude = freezed, + Object? maxRadius = freezed, + Object? isProximityEnabled = null, + Object? householdModel = null, + }) { + return _then(_$SearchHouseholdsByHouseholdsEventImpl( + projectId: null == projectId + ? _value.projectId + : projectId // ignore: cast_nullable_to_non_nullable + as String, + latitude: freezed == latitude + ? _value.latitude + : latitude // ignore: cast_nullable_to_non_nullable + as double?, + longitude: freezed == longitude + ? _value.longitude + : longitude // ignore: cast_nullable_to_non_nullable + as double?, + maxRadius: freezed == maxRadius + ? _value.maxRadius + : maxRadius // ignore: cast_nullable_to_non_nullable + as double?, + isProximityEnabled: null == isProximityEnabled + ? _value.isProximityEnabled + : isProximityEnabled // ignore: cast_nullable_to_non_nullable + as bool, + householdModel: null == householdModel + ? _value.householdModel + : householdModel // ignore: cast_nullable_to_non_nullable + as HouseholdModel, + )); + } +} + +/// @nodoc + +class _$SearchHouseholdsByHouseholdsEventImpl + implements SearchHouseholdsByHouseholdsEvent { + const _$SearchHouseholdsByHouseholdsEventImpl( + {required this.projectId, + this.latitude, + this.longitude, + this.maxRadius, + required this.isProximityEnabled, + required this.householdModel}); + + @override + final String projectId; + @override + final double? latitude; + @override + final double? longitude; + @override + final double? maxRadius; + @override + final bool isProximityEnabled; + @override + final HouseholdModel householdModel; + + @override + String toString() { + return 'SearchHouseholdsEvent.searchByHousehold(projectId: $projectId, latitude: $latitude, longitude: $longitude, maxRadius: $maxRadius, isProximityEnabled: $isProximityEnabled, householdModel: $householdModel)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SearchHouseholdsByHouseholdsEventImpl && + (identical(other.projectId, projectId) || + other.projectId == projectId) && + (identical(other.latitude, latitude) || + other.latitude == latitude) && + (identical(other.longitude, longitude) || + other.longitude == longitude) && + (identical(other.maxRadius, maxRadius) || + other.maxRadius == maxRadius) && + (identical(other.isProximityEnabled, isProximityEnabled) || + other.isProximityEnabled == isProximityEnabled) && + (identical(other.householdModel, householdModel) || + other.householdModel == householdModel)); + } + + @override + int get hashCode => Object.hash(runtimeType, projectId, latitude, longitude, + maxRadius, isProximityEnabled, householdModel); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$SearchHouseholdsByHouseholdsEventImplCopyWith< + _$SearchHouseholdsByHouseholdsEventImpl> + get copyWith => __$$SearchHouseholdsByHouseholdsEventImplCopyWithImpl< + _$SearchHouseholdsByHouseholdsEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + }) { + return searchByHousehold(projectId, latitude, longitude, maxRadius, + isProximityEnabled, householdModel); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + }) { + return searchByHousehold?.call(projectId, latitude, longitude, maxRadius, + isProximityEnabled, householdModel); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (searchByHousehold != null) { + return searchByHousehold(projectId, latitude, longitude, maxRadius, + isProximityEnabled, householdModel); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + }) { + return searchByHousehold(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + }) { + return searchByHousehold?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (searchByHousehold != null) { + return searchByHousehold(this); + } + return orElse(); + } +} + +abstract class SearchHouseholdsByHouseholdsEvent + implements SearchHouseholdsEvent { + const factory SearchHouseholdsByHouseholdsEvent( + {required final String projectId, + final double? latitude, + final double? longitude, + final double? maxRadius, + required final bool isProximityEnabled, + required final HouseholdModel householdModel}) = + _$SearchHouseholdsByHouseholdsEventImpl; + + String get projectId; + double? get latitude; + double? get longitude; + double? get maxRadius; + bool get isProximityEnabled; + HouseholdModel get householdModel; + @JsonKey(ignore: true) + _$$SearchHouseholdsByHouseholdsEventImplCopyWith< + _$SearchHouseholdsByHouseholdsEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWith<$Res> { + factory _$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWith( + _$SearchHouseholdsSearchByHouseholdHeadEventImpl value, + $Res Function(_$SearchHouseholdsSearchByHouseholdHeadEventImpl) + then) = + __$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWithImpl<$Res>; + @useResult + $Res call( + {String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit}); +} + +/// @nodoc +class __$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$SearchHouseholdsSearchByHouseholdHeadEventImpl> + implements _$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWith<$Res> { + __$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWithImpl( + _$SearchHouseholdsSearchByHouseholdHeadEventImpl _value, + $Res Function(_$SearchHouseholdsSearchByHouseholdHeadEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? searchText = null, + Object? projectId = null, + Object? isProximityEnabled = null, + Object? latitude = freezed, + Object? longitude = freezed, + Object? maxRadius = freezed, + Object? tag = freezed, + Object? offset = null, + Object? limit = null, + }) { + return _then(_$SearchHouseholdsSearchByHouseholdHeadEventImpl( + searchText: null == searchText + ? _value.searchText + : searchText // ignore: cast_nullable_to_non_nullable + as String, + projectId: null == projectId + ? _value.projectId + : projectId // ignore: cast_nullable_to_non_nullable + as String, + isProximityEnabled: null == isProximityEnabled + ? _value.isProximityEnabled + : isProximityEnabled // ignore: cast_nullable_to_non_nullable + as bool, + latitude: freezed == latitude + ? _value.latitude + : latitude // ignore: cast_nullable_to_non_nullable + as double?, + longitude: freezed == longitude + ? _value.longitude + : longitude // ignore: cast_nullable_to_non_nullable + as double?, + maxRadius: freezed == maxRadius + ? _value.maxRadius + : maxRadius // ignore: cast_nullable_to_non_nullable + as double?, + tag: freezed == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String?, + offset: null == offset + ? _value.offset + : offset // ignore: cast_nullable_to_non_nullable + as int, + limit: null == limit + ? _value.limit + : limit // ignore: cast_nullable_to_non_nullable + as int, + )); + } +} + +/// @nodoc + +class _$SearchHouseholdsSearchByHouseholdHeadEventImpl + implements SearchHouseholdsSearchByHouseholdHeadEvent { + const _$SearchHouseholdsSearchByHouseholdHeadEventImpl( + {required this.searchText, + required this.projectId, + required this.isProximityEnabled, + this.latitude, + this.longitude, + this.maxRadius, + this.tag, + required this.offset, + required this.limit}); + + @override + final String searchText; + @override + final String projectId; + @override + final bool isProximityEnabled; + @override + final double? latitude; + @override + final double? longitude; + @override + final double? maxRadius; + @override + final String? tag; + @override + final int offset; + @override + final int limit; + + @override + String toString() { + return 'SearchHouseholdsEvent.searchByHouseholdHead(searchText: $searchText, projectId: $projectId, isProximityEnabled: $isProximityEnabled, latitude: $latitude, longitude: $longitude, maxRadius: $maxRadius, tag: $tag, offset: $offset, limit: $limit)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SearchHouseholdsSearchByHouseholdHeadEventImpl && + (identical(other.searchText, searchText) || + other.searchText == searchText) && + (identical(other.projectId, projectId) || + other.projectId == projectId) && + (identical(other.isProximityEnabled, isProximityEnabled) || + other.isProximityEnabled == isProximityEnabled) && + (identical(other.latitude, latitude) || + other.latitude == latitude) && + (identical(other.longitude, longitude) || + other.longitude == longitude) && + (identical(other.maxRadius, maxRadius) || + other.maxRadius == maxRadius) && + (identical(other.tag, tag) || other.tag == tag) && + (identical(other.offset, offset) || other.offset == offset) && + (identical(other.limit, limit) || other.limit == limit)); + } + + @override + int get hashCode => Object.hash(runtimeType, searchText, projectId, + isProximityEnabled, latitude, longitude, maxRadius, tag, offset, limit); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWith< + _$SearchHouseholdsSearchByHouseholdHeadEventImpl> + get copyWith => + __$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWithImpl< + _$SearchHouseholdsSearchByHouseholdHeadEventImpl>( + this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + }) { + return searchByHouseholdHead(searchText, projectId, isProximityEnabled, + latitude, longitude, maxRadius, tag, offset, limit); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + }) { + return searchByHouseholdHead?.call(searchText, projectId, + isProximityEnabled, latitude, longitude, maxRadius, tag, offset, limit); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (searchByHouseholdHead != null) { + return searchByHouseholdHead(searchText, projectId, isProximityEnabled, + latitude, longitude, maxRadius, tag, offset, limit); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + }) { + return searchByHouseholdHead(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + }) { + return searchByHouseholdHead?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (searchByHouseholdHead != null) { + return searchByHouseholdHead(this); + } + return orElse(); + } +} + +abstract class SearchHouseholdsSearchByHouseholdHeadEvent + implements SearchHouseholdsEvent { + const factory SearchHouseholdsSearchByHouseholdHeadEvent( + {required final String searchText, + required final String projectId, + required final bool isProximityEnabled, + final double? latitude, + final double? longitude, + final double? maxRadius, + final String? tag, + required final int offset, + required final int limit}) = + _$SearchHouseholdsSearchByHouseholdHeadEventImpl; + + String get searchText; + String get projectId; + bool get isProximityEnabled; + double? get latitude; + double? get longitude; + double? get maxRadius; + String? get tag; + int get offset; + int get limit; + @JsonKey(ignore: true) + _$$SearchHouseholdsSearchByHouseholdHeadEventImplCopyWith< + _$SearchHouseholdsSearchByHouseholdHeadEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$SearchHouseholdsByProximityEventImplCopyWith<$Res> { + factory _$$SearchHouseholdsByProximityEventImplCopyWith( + _$SearchHouseholdsByProximityEventImpl value, + $Res Function(_$SearchHouseholdsByProximityEventImpl) then) = + __$$SearchHouseholdsByProximityEventImplCopyWithImpl<$Res>; + @useResult + $Res call( + {double latitude, + double longititude, + String projectId, + double maxRadius, + int offset, + int limit}); +} + +/// @nodoc +class __$$SearchHouseholdsByProximityEventImplCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$SearchHouseholdsByProximityEventImpl> + implements _$$SearchHouseholdsByProximityEventImplCopyWith<$Res> { + __$$SearchHouseholdsByProximityEventImplCopyWithImpl( + _$SearchHouseholdsByProximityEventImpl _value, + $Res Function(_$SearchHouseholdsByProximityEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? latitude = null, + Object? longititude = null, + Object? projectId = null, + Object? maxRadius = null, + Object? offset = null, + Object? limit = null, + }) { + return _then(_$SearchHouseholdsByProximityEventImpl( + latitude: null == latitude + ? _value.latitude + : latitude // ignore: cast_nullable_to_non_nullable + as double, + longititude: null == longititude + ? _value.longititude + : longititude // ignore: cast_nullable_to_non_nullable + as double, + projectId: null == projectId + ? _value.projectId + : projectId // ignore: cast_nullable_to_non_nullable + as String, + maxRadius: null == maxRadius + ? _value.maxRadius + : maxRadius // ignore: cast_nullable_to_non_nullable + as double, + offset: null == offset + ? _value.offset + : offset // ignore: cast_nullable_to_non_nullable + as int, + limit: null == limit + ? _value.limit + : limit // ignore: cast_nullable_to_non_nullable + as int, + )); + } +} + +/// @nodoc + +class _$SearchHouseholdsByProximityEventImpl + implements SearchHouseholdsByProximityEvent { + const _$SearchHouseholdsByProximityEventImpl( + {required this.latitude, + required this.longititude, + required this.projectId, + required this.maxRadius, + required this.offset, + required this.limit}); + + @override + final double latitude; + @override + final double longititude; + @override + final String projectId; + @override + final double maxRadius; + @override + final int offset; + @override + final int limit; + + @override + String toString() { + return 'SearchHouseholdsEvent.searchByProximity(latitude: $latitude, longititude: $longititude, projectId: $projectId, maxRadius: $maxRadius, offset: $offset, limit: $limit)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SearchHouseholdsByProximityEventImpl && + (identical(other.latitude, latitude) || + other.latitude == latitude) && + (identical(other.longititude, longititude) || + other.longititude == longititude) && + (identical(other.projectId, projectId) || + other.projectId == projectId) && + (identical(other.maxRadius, maxRadius) || + other.maxRadius == maxRadius) && + (identical(other.offset, offset) || other.offset == offset) && + (identical(other.limit, limit) || other.limit == limit)); + } + + @override + int get hashCode => Object.hash( + runtimeType, latitude, longititude, projectId, maxRadius, offset, limit); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$SearchHouseholdsByProximityEventImplCopyWith< + _$SearchHouseholdsByProximityEventImpl> + get copyWith => __$$SearchHouseholdsByProximityEventImplCopyWithImpl< + _$SearchHouseholdsByProximityEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + }) { + return searchByProximity( + latitude, longititude, projectId, maxRadius, offset, limit); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + }) { + return searchByProximity?.call( + latitude, longititude, projectId, maxRadius, offset, limit); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (searchByProximity != null) { + return searchByProximity( + latitude, longititude, projectId, maxRadius, offset, limit); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + }) { + return searchByProximity(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + }) { + return searchByProximity?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (searchByProximity != null) { + return searchByProximity(this); + } + return orElse(); + } +} + +abstract class SearchHouseholdsByProximityEvent + implements SearchHouseholdsEvent { + const factory SearchHouseholdsByProximityEvent( + {required final double latitude, + required final double longititude, + required final String projectId, + required final double maxRadius, + required final int offset, + required final int limit}) = _$SearchHouseholdsByProximityEventImpl; + + double get latitude; + double get longititude; + String get projectId; + double get maxRadius; + int get offset; + int get limit; + @JsonKey(ignore: true) + _$$SearchHouseholdsByProximityEventImplCopyWith< + _$SearchHouseholdsByProximityEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$SearchHouseholdsByTagEventImplCopyWith<$Res> { + factory _$$SearchHouseholdsByTagEventImplCopyWith( + _$SearchHouseholdsByTagEventImpl value, + $Res Function(_$SearchHouseholdsByTagEventImpl) then) = + __$$SearchHouseholdsByTagEventImplCopyWithImpl<$Res>; + @useResult + $Res call({String tag, String projectId}); +} + +/// @nodoc +class __$$SearchHouseholdsByTagEventImplCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$SearchHouseholdsByTagEventImpl> + implements _$$SearchHouseholdsByTagEventImplCopyWith<$Res> { + __$$SearchHouseholdsByTagEventImplCopyWithImpl( + _$SearchHouseholdsByTagEventImpl _value, + $Res Function(_$SearchHouseholdsByTagEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? tag = null, + Object? projectId = null, + }) { + return _then(_$SearchHouseholdsByTagEventImpl( + tag: null == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String, + projectId: null == projectId + ? _value.projectId + : projectId // ignore: cast_nullable_to_non_nullable + as String, + )); + } +} + +/// @nodoc + +class _$SearchHouseholdsByTagEventImpl implements SearchHouseholdsByTagEvent { + const _$SearchHouseholdsByTagEventImpl( + {required this.tag, required this.projectId}); + + @override + final String tag; + @override + final String projectId; + + @override + String toString() { + return 'SearchHouseholdsEvent.searchByTag(tag: $tag, projectId: $projectId)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SearchHouseholdsByTagEventImpl && + (identical(other.tag, tag) || other.tag == tag) && + (identical(other.projectId, projectId) || + other.projectId == projectId)); + } + + @override + int get hashCode => Object.hash(runtimeType, tag, projectId); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$SearchHouseholdsByTagEventImplCopyWith<_$SearchHouseholdsByTagEventImpl> + get copyWith => __$$SearchHouseholdsByTagEventImplCopyWithImpl< + _$SearchHouseholdsByTagEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + }) { + return searchByTag(tag, projectId); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + }) { + return searchByTag?.call(tag, projectId); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (searchByTag != null) { + return searchByTag(tag, projectId); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + }) { + return searchByTag(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + }) { + return searchByTag?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (searchByTag != null) { + return searchByTag(this); + } + return orElse(); + } +} + +abstract class SearchHouseholdsByTagEvent implements SearchHouseholdsEvent { + const factory SearchHouseholdsByTagEvent( + {required final String tag, + required final String projectId}) = _$SearchHouseholdsByTagEventImpl; + + String get tag; + String get projectId; + @JsonKey(ignore: true) + _$$SearchHouseholdsByTagEventImplCopyWith<_$SearchHouseholdsByTagEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$SearchHouseholdsClearEventImplCopyWith<$Res> { + factory _$$SearchHouseholdsClearEventImplCopyWith( + _$SearchHouseholdsClearEventImpl value, + $Res Function(_$SearchHouseholdsClearEventImpl) then) = + __$$SearchHouseholdsClearEventImplCopyWithImpl<$Res>; +} + +/// @nodoc +class __$$SearchHouseholdsClearEventImplCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$SearchHouseholdsClearEventImpl> + implements _$$SearchHouseholdsClearEventImplCopyWith<$Res> { + __$$SearchHouseholdsClearEventImplCopyWithImpl( + _$SearchHouseholdsClearEventImpl _value, + $Res Function(_$SearchHouseholdsClearEventImpl) _then) + : super(_value, _then); +} + +/// @nodoc + +class _$SearchHouseholdsClearEventImpl implements SearchHouseholdsClearEvent { + const _$SearchHouseholdsClearEventImpl(); + + @override + String toString() { + return 'SearchHouseholdsEvent.clear()'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SearchHouseholdsClearEventImpl); + } + + @override + int get hashCode => runtimeType.hashCode; + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + }) { + return clear(); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + }) { + return clear?.call(); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (clear != null) { + return clear(); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + }) { + return clear(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + }) { + return clear?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (clear != null) { + return clear(this); + } + return orElse(); + } +} + +abstract class SearchHouseholdsClearEvent implements SearchHouseholdsEvent { + const factory SearchHouseholdsClearEvent() = _$SearchHouseholdsClearEventImpl; +} + +/// @nodoc +abstract class _$$IndividualGlobalSearchEventImplCopyWith<$Res> { + factory _$$IndividualGlobalSearchEventImplCopyWith( + _$IndividualGlobalSearchEventImpl value, + $Res Function(_$IndividualGlobalSearchEventImpl) then) = + __$$IndividualGlobalSearchEventImplCopyWithImpl<$Res>; + @useResult + $Res call({GlobalSearchParameters globalSearchParams}); +} + +/// @nodoc +class __$$IndividualGlobalSearchEventImplCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$IndividualGlobalSearchEventImpl> + implements _$$IndividualGlobalSearchEventImplCopyWith<$Res> { + __$$IndividualGlobalSearchEventImplCopyWithImpl( + _$IndividualGlobalSearchEventImpl _value, + $Res Function(_$IndividualGlobalSearchEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? globalSearchParams = null, + }) { + return _then(_$IndividualGlobalSearchEventImpl( + globalSearchParams: null == globalSearchParams + ? _value.globalSearchParams + : globalSearchParams // ignore: cast_nullable_to_non_nullable + as GlobalSearchParameters, + )); + } +} + +/// @nodoc + +class _$IndividualGlobalSearchEventImpl implements IndividualGlobalSearchEvent { + const _$IndividualGlobalSearchEventImpl({required this.globalSearchParams}); + + @override + final GlobalSearchParameters globalSearchParams; + + @override + String toString() { + return 'SearchHouseholdsEvent.individualGlobalSearch(globalSearchParams: $globalSearchParams)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$IndividualGlobalSearchEventImpl && + (identical(other.globalSearchParams, globalSearchParams) || + other.globalSearchParams == globalSearchParams)); + } + + @override + int get hashCode => Object.hash(runtimeType, globalSearchParams); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$IndividualGlobalSearchEventImplCopyWith<_$IndividualGlobalSearchEventImpl> + get copyWith => __$$IndividualGlobalSearchEventImplCopyWithImpl< + _$IndividualGlobalSearchEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + }) { + return individualGlobalSearch(globalSearchParams); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + }) { + return individualGlobalSearch?.call(globalSearchParams); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (individualGlobalSearch != null) { + return individualGlobalSearch(globalSearchParams); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + }) { + return individualGlobalSearch(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + }) { + return individualGlobalSearch?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (individualGlobalSearch != null) { + return individualGlobalSearch(this); + } + return orElse(); + } +} + +abstract class IndividualGlobalSearchEvent implements SearchHouseholdsEvent { + const factory IndividualGlobalSearchEvent( + {required final GlobalSearchParameters globalSearchParams}) = + _$IndividualGlobalSearchEventImpl; + + GlobalSearchParameters get globalSearchParams; + @JsonKey(ignore: true) + _$$IndividualGlobalSearchEventImplCopyWith<_$IndividualGlobalSearchEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$HouseHoldGlobalSearchEventImplCopyWith<$Res> { + factory _$$HouseHoldGlobalSearchEventImplCopyWith( + _$HouseHoldGlobalSearchEventImpl value, + $Res Function(_$HouseHoldGlobalSearchEventImpl) then) = + __$$HouseHoldGlobalSearchEventImplCopyWithImpl<$Res>; + @useResult + $Res call({GlobalSearchParameters globalSearchParams}); +} + +/// @nodoc +class __$$HouseHoldGlobalSearchEventImplCopyWithImpl<$Res> + extends _$SearchHouseholdsEventCopyWithImpl<$Res, + _$HouseHoldGlobalSearchEventImpl> + implements _$$HouseHoldGlobalSearchEventImplCopyWith<$Res> { + __$$HouseHoldGlobalSearchEventImplCopyWithImpl( + _$HouseHoldGlobalSearchEventImpl _value, + $Res Function(_$HouseHoldGlobalSearchEventImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? globalSearchParams = null, + }) { + return _then(_$HouseHoldGlobalSearchEventImpl( + globalSearchParams: null == globalSearchParams + ? _value.globalSearchParams + : globalSearchParams // ignore: cast_nullable_to_non_nullable + as GlobalSearchParameters, + )); + } +} + +/// @nodoc + +class _$HouseHoldGlobalSearchEventImpl implements HouseHoldGlobalSearchEvent { + const _$HouseHoldGlobalSearchEventImpl({required this.globalSearchParams}); + + @override + final GlobalSearchParameters globalSearchParams; + + @override + String toString() { + return 'SearchHouseholdsEvent.houseHoldGlobalSearch(globalSearchParams: $globalSearchParams)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$HouseHoldGlobalSearchEventImpl && + (identical(other.globalSearchParams, globalSearchParams) || + other.globalSearchParams == globalSearchParams)); + } + + @override + int get hashCode => Object.hash(runtimeType, globalSearchParams); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$HouseHoldGlobalSearchEventImplCopyWith<_$HouseHoldGlobalSearchEventImpl> + get copyWith => __$$HouseHoldGlobalSearchEventImplCopyWithImpl< + _$HouseHoldGlobalSearchEventImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initialize, + required TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel) + searchByHousehold, + required TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit) + searchByHouseholdHead, + required TResult Function(double latitude, double longititude, + String projectId, double maxRadius, int offset, int limit) + searchByProximity, + required TResult Function(String tag, String projectId) searchByTag, + required TResult Function() clear, + required TResult Function(GlobalSearchParameters globalSearchParams) + individualGlobalSearch, + required TResult Function(GlobalSearchParameters globalSearchParams) + houseHoldGlobalSearch, + }) { + return houseHoldGlobalSearch(globalSearchParams); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initialize, + TResult? Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult? Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult? Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult? Function(String tag, String projectId)? searchByTag, + TResult? Function()? clear, + TResult? Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult? Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + }) { + return houseHoldGlobalSearch?.call(globalSearchParams); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initialize, + TResult Function( + String projectId, + double? latitude, + double? longitude, + double? maxRadius, + bool isProximityEnabled, + HouseholdModel householdModel)? + searchByHousehold, + TResult Function( + String searchText, + String projectId, + bool isProximityEnabled, + double? latitude, + double? longitude, + double? maxRadius, + String? tag, + int offset, + int limit)? + searchByHouseholdHead, + TResult Function(double latitude, double longititude, String projectId, + double maxRadius, int offset, int limit)? + searchByProximity, + TResult Function(String tag, String projectId)? searchByTag, + TResult Function()? clear, + TResult Function(GlobalSearchParameters globalSearchParams)? + individualGlobalSearch, + TResult Function(GlobalSearchParameters globalSearchParams)? + houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (houseHoldGlobalSearch != null) { + return houseHoldGlobalSearch(globalSearchParams); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(SearchHouseholdsInitializedEvent value) + initialize, + required TResult Function(SearchHouseholdsByHouseholdsEvent value) + searchByHousehold, + required TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value) + searchByHouseholdHead, + required TResult Function(SearchHouseholdsByProximityEvent value) + searchByProximity, + required TResult Function(SearchHouseholdsByTagEvent value) searchByTag, + required TResult Function(SearchHouseholdsClearEvent value) clear, + required TResult Function(IndividualGlobalSearchEvent value) + individualGlobalSearch, + required TResult Function(HouseHoldGlobalSearchEvent value) + houseHoldGlobalSearch, + }) { + return houseHoldGlobalSearch(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult? Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult? Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult? Function(SearchHouseholdsByProximityEvent value)? + searchByProximity, + TResult? Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult? Function(SearchHouseholdsClearEvent value)? clear, + TResult? Function(IndividualGlobalSearchEvent value)? + individualGlobalSearch, + TResult? Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + }) { + return houseHoldGlobalSearch?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(SearchHouseholdsInitializedEvent value)? initialize, + TResult Function(SearchHouseholdsByHouseholdsEvent value)? + searchByHousehold, + TResult Function(SearchHouseholdsSearchByHouseholdHeadEvent value)? + searchByHouseholdHead, + TResult Function(SearchHouseholdsByProximityEvent value)? searchByProximity, + TResult Function(SearchHouseholdsByTagEvent value)? searchByTag, + TResult Function(SearchHouseholdsClearEvent value)? clear, + TResult Function(IndividualGlobalSearchEvent value)? individualGlobalSearch, + TResult Function(HouseHoldGlobalSearchEvent value)? houseHoldGlobalSearch, + required TResult orElse(), + }) { + if (houseHoldGlobalSearch != null) { + return houseHoldGlobalSearch(this); + } + return orElse(); + } +} + +abstract class HouseHoldGlobalSearchEvent implements SearchHouseholdsEvent { + const factory HouseHoldGlobalSearchEvent( + {required final GlobalSearchParameters globalSearchParams}) = + _$HouseHoldGlobalSearchEventImpl; + + GlobalSearchParameters get globalSearchParams; + @JsonKey(ignore: true) + _$$HouseHoldGlobalSearchEventImplCopyWith<_$HouseHoldGlobalSearchEventImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +mixin _$SearchHouseholdsState { + int get offset => throw _privateConstructorUsedError; + int get limit => throw _privateConstructorUsedError; + bool get loading => throw _privateConstructorUsedError; + String? get searchQuery => throw _privateConstructorUsedError; + String? get tag => throw _privateConstructorUsedError; + List get householdMembers => + throw _privateConstructorUsedError; + int get totalResults => throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $SearchHouseholdsStateCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $SearchHouseholdsStateCopyWith<$Res> { + factory $SearchHouseholdsStateCopyWith(SearchHouseholdsState value, + $Res Function(SearchHouseholdsState) then) = + _$SearchHouseholdsStateCopyWithImpl<$Res, SearchHouseholdsState>; + @useResult + $Res call( + {int offset, + int limit, + bool loading, + String? searchQuery, + String? tag, + List householdMembers, + int totalResults}); +} + +/// @nodoc +class _$SearchHouseholdsStateCopyWithImpl<$Res, + $Val extends SearchHouseholdsState> + implements $SearchHouseholdsStateCopyWith<$Res> { + _$SearchHouseholdsStateCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? offset = null, + Object? limit = null, + Object? loading = null, + Object? searchQuery = freezed, + Object? tag = freezed, + Object? householdMembers = null, + Object? totalResults = null, + }) { + return _then(_value.copyWith( + offset: null == offset + ? _value.offset + : offset // ignore: cast_nullable_to_non_nullable + as int, + limit: null == limit + ? _value.limit + : limit // ignore: cast_nullable_to_non_nullable + as int, + loading: null == loading + ? _value.loading + : loading // ignore: cast_nullable_to_non_nullable + as bool, + searchQuery: freezed == searchQuery + ? _value.searchQuery + : searchQuery // ignore: cast_nullable_to_non_nullable + as String?, + tag: freezed == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String?, + householdMembers: null == householdMembers + ? _value.householdMembers + : householdMembers // ignore: cast_nullable_to_non_nullable + as List, + totalResults: null == totalResults + ? _value.totalResults + : totalResults // ignore: cast_nullable_to_non_nullable + as int, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$SearchHouseholdsStateImplCopyWith<$Res> + implements $SearchHouseholdsStateCopyWith<$Res> { + factory _$$SearchHouseholdsStateImplCopyWith( + _$SearchHouseholdsStateImpl value, + $Res Function(_$SearchHouseholdsStateImpl) then) = + __$$SearchHouseholdsStateImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {int offset, + int limit, + bool loading, + String? searchQuery, + String? tag, + List householdMembers, + int totalResults}); +} + +/// @nodoc +class __$$SearchHouseholdsStateImplCopyWithImpl<$Res> + extends _$SearchHouseholdsStateCopyWithImpl<$Res, + _$SearchHouseholdsStateImpl> + implements _$$SearchHouseholdsStateImplCopyWith<$Res> { + __$$SearchHouseholdsStateImplCopyWithImpl(_$SearchHouseholdsStateImpl _value, + $Res Function(_$SearchHouseholdsStateImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? offset = null, + Object? limit = null, + Object? loading = null, + Object? searchQuery = freezed, + Object? tag = freezed, + Object? householdMembers = null, + Object? totalResults = null, + }) { + return _then(_$SearchHouseholdsStateImpl( + offset: null == offset + ? _value.offset + : offset // ignore: cast_nullable_to_non_nullable + as int, + limit: null == limit + ? _value.limit + : limit // ignore: cast_nullable_to_non_nullable + as int, + loading: null == loading + ? _value.loading + : loading // ignore: cast_nullable_to_non_nullable + as bool, + searchQuery: freezed == searchQuery + ? _value.searchQuery + : searchQuery // ignore: cast_nullable_to_non_nullable + as String?, + tag: freezed == tag + ? _value.tag + : tag // ignore: cast_nullable_to_non_nullable + as String?, + householdMembers: null == householdMembers + ? _value._householdMembers + : householdMembers // ignore: cast_nullable_to_non_nullable + as List, + totalResults: null == totalResults + ? _value.totalResults + : totalResults // ignore: cast_nullable_to_non_nullable + as int, + )); + } +} + +/// @nodoc + +class _$SearchHouseholdsStateImpl extends _SearchHouseholdsState { + const _$SearchHouseholdsStateImpl( + {this.offset = 0, + this.limit = 10, + this.loading = false, + this.searchQuery, + this.tag, + final List householdMembers = const [], + this.totalResults = 0}) + : _householdMembers = householdMembers, + super._(); + + @override + @JsonKey() + final int offset; + @override + @JsonKey() + final int limit; + @override + @JsonKey() + final bool loading; + @override + final String? searchQuery; + @override + final String? tag; + final List _householdMembers; + @override + @JsonKey() + List get householdMembers { + if (_householdMembers is EqualUnmodifiableListView) + return _householdMembers; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_householdMembers); + } + + @override + @JsonKey() + final int totalResults; + + @override + String toString() { + return 'SearchHouseholdsState(offset: $offset, limit: $limit, loading: $loading, searchQuery: $searchQuery, tag: $tag, householdMembers: $householdMembers, totalResults: $totalResults)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$SearchHouseholdsStateImpl && + (identical(other.offset, offset) || other.offset == offset) && + (identical(other.limit, limit) || other.limit == limit) && + (identical(other.loading, loading) || other.loading == loading) && + (identical(other.searchQuery, searchQuery) || + other.searchQuery == searchQuery) && + (identical(other.tag, tag) || other.tag == tag) && + const DeepCollectionEquality() + .equals(other._householdMembers, _householdMembers) && + (identical(other.totalResults, totalResults) || + other.totalResults == totalResults)); + } + + @override + int get hashCode => Object.hash( + runtimeType, + offset, + limit, + loading, + searchQuery, + tag, + const DeepCollectionEquality().hash(_householdMembers), + totalResults); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$SearchHouseholdsStateImplCopyWith<_$SearchHouseholdsStateImpl> + get copyWith => __$$SearchHouseholdsStateImplCopyWithImpl< + _$SearchHouseholdsStateImpl>(this, _$identity); +} + +abstract class _SearchHouseholdsState extends SearchHouseholdsState { + const factory _SearchHouseholdsState( + {final int offset, + final int limit, + final bool loading, + final String? searchQuery, + final String? tag, + final List householdMembers, + final int totalResults}) = _$SearchHouseholdsStateImpl; + const _SearchHouseholdsState._() : super._(); + + @override + int get offset; + @override + int get limit; + @override + bool get loading; + @override + String? get searchQuery; + @override + String? get tag; + @override + List get householdMembers; + @override + int get totalResults; + @override + @JsonKey(ignore: true) + _$$SearchHouseholdsStateImplCopyWith<_$SearchHouseholdsStateImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +mixin _$HouseholdMemberWrapper { + HouseholdModel? get household => throw _privateConstructorUsedError; + IndividualModel? get headOfHousehold => throw _privateConstructorUsedError; + List? get members => throw _privateConstructorUsedError; + List? get projectBeneficiaries => + throw _privateConstructorUsedError; + double? get distance => throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $HouseholdMemberWrapperCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $HouseholdMemberWrapperCopyWith<$Res> { + factory $HouseholdMemberWrapperCopyWith(HouseholdMemberWrapper value, + $Res Function(HouseholdMemberWrapper) then) = + _$HouseholdMemberWrapperCopyWithImpl<$Res, HouseholdMemberWrapper>; + @useResult + $Res call( + {HouseholdModel? household, + IndividualModel? headOfHousehold, + List? members, + List? projectBeneficiaries, + double? distance}); +} + +/// @nodoc +class _$HouseholdMemberWrapperCopyWithImpl<$Res, + $Val extends HouseholdMemberWrapper> + implements $HouseholdMemberWrapperCopyWith<$Res> { + _$HouseholdMemberWrapperCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? household = freezed, + Object? headOfHousehold = freezed, + Object? members = freezed, + Object? projectBeneficiaries = freezed, + Object? distance = freezed, + }) { + return _then(_value.copyWith( + household: freezed == household + ? _value.household + : household // ignore: cast_nullable_to_non_nullable + as HouseholdModel?, + headOfHousehold: freezed == headOfHousehold + ? _value.headOfHousehold + : headOfHousehold // ignore: cast_nullable_to_non_nullable + as IndividualModel?, + members: freezed == members + ? _value.members + : members // ignore: cast_nullable_to_non_nullable + as List?, + projectBeneficiaries: freezed == projectBeneficiaries + ? _value.projectBeneficiaries + : projectBeneficiaries // ignore: cast_nullable_to_non_nullable + as List?, + distance: freezed == distance + ? _value.distance + : distance // ignore: cast_nullable_to_non_nullable + as double?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$HouseholdMemberWrapperImplCopyWith<$Res> + implements $HouseholdMemberWrapperCopyWith<$Res> { + factory _$$HouseholdMemberWrapperImplCopyWith( + _$HouseholdMemberWrapperImpl value, + $Res Function(_$HouseholdMemberWrapperImpl) then) = + __$$HouseholdMemberWrapperImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {HouseholdModel? household, + IndividualModel? headOfHousehold, + List? members, + List? projectBeneficiaries, + double? distance}); +} + +/// @nodoc +class __$$HouseholdMemberWrapperImplCopyWithImpl<$Res> + extends _$HouseholdMemberWrapperCopyWithImpl<$Res, + _$HouseholdMemberWrapperImpl> + implements _$$HouseholdMemberWrapperImplCopyWith<$Res> { + __$$HouseholdMemberWrapperImplCopyWithImpl( + _$HouseholdMemberWrapperImpl _value, + $Res Function(_$HouseholdMemberWrapperImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? household = freezed, + Object? headOfHousehold = freezed, + Object? members = freezed, + Object? projectBeneficiaries = freezed, + Object? distance = freezed, + }) { + return _then(_$HouseholdMemberWrapperImpl( + household: freezed == household + ? _value.household + : household // ignore: cast_nullable_to_non_nullable + as HouseholdModel?, + headOfHousehold: freezed == headOfHousehold + ? _value.headOfHousehold + : headOfHousehold // ignore: cast_nullable_to_non_nullable + as IndividualModel?, + members: freezed == members + ? _value._members + : members // ignore: cast_nullable_to_non_nullable + as List?, + projectBeneficiaries: freezed == projectBeneficiaries + ? _value._projectBeneficiaries + : projectBeneficiaries // ignore: cast_nullable_to_non_nullable + as List?, + distance: freezed == distance + ? _value.distance + : distance // ignore: cast_nullable_to_non_nullable + as double?, + )); + } +} + +/// @nodoc + +class _$HouseholdMemberWrapperImpl implements _HouseholdMemberWrapper { + const _$HouseholdMemberWrapperImpl( + {this.household, + this.headOfHousehold, + final List? members, + final List? projectBeneficiaries, + this.distance}) + : _members = members, + _projectBeneficiaries = projectBeneficiaries; + + @override + final HouseholdModel? household; + @override + final IndividualModel? headOfHousehold; + final List? _members; + @override + List? get members { + final value = _members; + if (value == null) return null; + if (_members is EqualUnmodifiableListView) return _members; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + final List? _projectBeneficiaries; + @override + List? get projectBeneficiaries { + final value = _projectBeneficiaries; + if (value == null) return null; + if (_projectBeneficiaries is EqualUnmodifiableListView) + return _projectBeneficiaries; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); + } + + @override + final double? distance; + + @override + String toString() { + return 'HouseholdMemberWrapper(household: $household, headOfHousehold: $headOfHousehold, members: $members, projectBeneficiaries: $projectBeneficiaries, distance: $distance)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$HouseholdMemberWrapperImpl && + (identical(other.household, household) || + other.household == household) && + (identical(other.headOfHousehold, headOfHousehold) || + other.headOfHousehold == headOfHousehold) && + const DeepCollectionEquality().equals(other._members, _members) && + const DeepCollectionEquality() + .equals(other._projectBeneficiaries, _projectBeneficiaries) && + (identical(other.distance, distance) || + other.distance == distance)); + } + + @override + int get hashCode => Object.hash( + runtimeType, + household, + headOfHousehold, + const DeepCollectionEquality().hash(_members), + const DeepCollectionEquality().hash(_projectBeneficiaries), + distance); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$HouseholdMemberWrapperImplCopyWith<_$HouseholdMemberWrapperImpl> + get copyWith => __$$HouseholdMemberWrapperImplCopyWithImpl< + _$HouseholdMemberWrapperImpl>(this, _$identity); +} + +abstract class _HouseholdMemberWrapper implements HouseholdMemberWrapper { + const factory _HouseholdMemberWrapper( + {final HouseholdModel? household, + final IndividualModel? headOfHousehold, + final List? members, + final List? projectBeneficiaries, + final double? distance}) = _$HouseholdMemberWrapperImpl; + + @override + HouseholdModel? get household; + @override + IndividualModel? get headOfHousehold; + @override + List? get members; + @override + List? get projectBeneficiaries; + @override + double? get distance; + @override + @JsonKey(ignore: true) + _$$HouseholdMemberWrapperImplCopyWith<_$HouseholdMemberWrapperImpl> + get copyWith => throw _privateConstructorUsedError; +} diff --git a/packages/registration/lib/blocs/search_households/tag_by_search.dart b/packages/registration/lib/blocs/search_households/tag_by_search.dart new file mode 100644 index 0000000000..4ffd4bde64 --- /dev/null +++ b/packages/registration/lib/blocs/search_households/tag_by_search.dart @@ -0,0 +1,117 @@ +import 'dart:async'; + +import 'package:digit_data_model/data_model.dart'; + +import '../../models/entities/household.dart'; +import '../../models/entities/household_member.dart'; +import '../../models/entities/project_beneficiary.dart'; + +import 'search_households.dart'; + +class TagSearchBloc extends SearchHouseholdsBloc { + TagSearchBloc( + {required super.userUid, + required super.projectId, + required super.individual, + required super.householdMember, + required super.household, + required super.projectBeneficiary, + required super.beneficiaryType, + required super.addressRepository, + required super.individualGlobalSearchRepository, + required super.houseHoldGlobalSearchRepository}) { + on(handleSearchByTag); + } + + FutureOr handleSearchByTag( + SearchHouseholdsByTagEvent event, + SearchHouseholdsEmitter emit, + ) async { + List beneficiaries = + await projectBeneficiary.search( + ProjectBeneficiarySearchModel( + tag: [event.tag], + projectId: [event.projectId], + ), + ); + + List individuals = []; + List households = []; + + if (beneficiaryType == BeneficiaryType.household) { + households = await household.search(HouseholdSearchModel( + clientReferenceId: + beneficiaries.map((e) => e.beneficiaryClientReferenceId!).toList(), + )); + } else { + individuals = await individual.search( + IndividualSearchModel( + clientReferenceId: beneficiaries + .map((e) => e.beneficiaryClientReferenceId!) + .toList(), + ), + ); + } + + // Initialize a list to store household member wrappers. + final containers = []; + if (individuals.isNotEmpty || households.isNotEmpty) { + final hhMembers = beneficiaryType == BeneficiaryType.individual + ? await householdMember.search( + HouseholdMemberSearchModel( + individualClientReferenceIds: + individuals.map((e) => e.clientReferenceId).toList(), + ), + ) + : await householdMember.search( + HouseholdMemberSearchModel( + householdClientReferenceIds: + households.map((e) => e.clientReferenceId).toList(), + ), + ); + + final member = hhMembers.first; + + final members = await householdMember.search( + HouseholdMemberSearchModel( + householdClientReferenceId: [ + member.householdClientReferenceId.toString() + ], + ), + ); + final headMember = + members.where((element) => element.isHeadOfHousehold).first; + + final individualList = await individual.search( + IndividualSearchModel( + clientReferenceId: + members.map((e) => e.individualClientReferenceId!).toList(), + ), + ); + + final householdList = await household.search(HouseholdSearchModel( + clientReferenceId: [members.first.householdClientReferenceId!], + )); + + // Group household members by household client reference ID. + + containers.add( + HouseholdMemberWrapper( + household: householdList.firstWhere((element) => + element.clientReferenceId == member.householdClientReferenceId), + headOfHousehold: individualList.firstWhere((element) => + headMember.individualClientReferenceId == + element.clientReferenceId), + members: individualList, + projectBeneficiaries: beneficiaries, + ), + ); + } + + emit(state.copyWith( + householdMembers: containers, + loading: false, + tag: event.tag, + )); + } +} diff --git a/packages/registration_delivery/lib/data/repositories/local/base/household_base.dart b/packages/registration/lib/data/repositories/local/base/household_base.dart similarity index 100% rename from packages/registration_delivery/lib/data/repositories/local/base/household_base.dart rename to packages/registration/lib/data/repositories/local/base/household_base.dart diff --git a/packages/registration_delivery/lib/data/repositories/local/base/household_member_base.dart b/packages/registration/lib/data/repositories/local/base/household_member_base.dart similarity index 84% rename from packages/registration_delivery/lib/data/repositories/local/base/household_member_base.dart rename to packages/registration/lib/data/repositories/local/base/household_member_base.dart index 033457ecf1..86db24bd78 100644 --- a/packages/registration_delivery/lib/data/repositories/local/base/household_member_base.dart +++ b/packages/registration/lib/data/repositories/local/base/household_member_base.dart @@ -1,6 +1,6 @@ import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; +import 'package:registration/models/entities/household_member.dart'; abstract class HouseholdMemberLocalBaseRepository extends LocalRepository { diff --git a/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart b/packages/registration/lib/data/repositories/local/base/project_beneficiary.dart similarity index 99% rename from packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart rename to packages/registration/lib/data/repositories/local/base/project_beneficiary.dart index 3beb9ed454..c8a95c570e 100644 --- a/packages/registration_delivery/lib/data/repositories/local/project_beneficiary.dart +++ b/packages/registration/lib/data/repositories/local/base/project_beneficiary.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; class ProjectBeneficiaryLocalRepository extends LocalRepository< ProjectBeneficiaryModel, ProjectBeneficiarySearchModel> { diff --git a/packages/registration_delivery/lib/data/repositories/local/base/project_beneficiary_base.dart b/packages/registration/lib/data/repositories/local/base/project_beneficiary_base.dart similarity index 56% rename from packages/registration_delivery/lib/data/repositories/local/base/project_beneficiary_base.dart rename to packages/registration/lib/data/repositories/local/base/project_beneficiary_base.dart index 1a4657b450..b3da5cbeb0 100644 --- a/packages/registration_delivery/lib/data/repositories/local/base/project_beneficiary_base.dart +++ b/packages/registration/lib/data/repositories/local/base/project_beneficiary_base.dart @@ -1,10 +1,9 @@ import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; - -abstract class ProjectBeneficiaryLocalBaseRepository - extends LocalRepository { +abstract class ProjectBeneficiaryLocalBaseRepository extends LocalRepository< + ProjectBeneficiaryModel, ProjectBeneficiarySearchModel> { const ProjectBeneficiaryLocalBaseRepository(super.sql, super.opLogManager); @override diff --git a/packages/registration_delivery/lib/data/repositories/local/household.dart b/packages/registration/lib/data/repositories/local/household.dart similarity index 100% rename from packages/registration_delivery/lib/data/repositories/local/household.dart rename to packages/registration/lib/data/repositories/local/household.dart diff --git a/packages/registration/lib/data/repositories/local/household_global_search.dart b/packages/registration/lib/data/repositories/local/household_global_search.dart new file mode 100644 index 0000000000..82546127d8 --- /dev/null +++ b/packages/registration/lib/data/repositories/local/household_global_search.dart @@ -0,0 +1,509 @@ +import 'dart:async'; +import 'dart:math' as math; + +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/models/entities/household_type.dart'; +import 'package:drift/drift.dart'; +import 'package:flutter/material.dart'; +import 'package:registration/models/entities/status.dart'; + +import '../../../models/entities/household.dart'; + +import '../../../utils/global_search_parameters.dart'; + +class HouseHoldGlobalSearchRepository extends LocalRepository { + HouseHoldGlobalSearchRepository(super.sql, super.opLogManager); + + @override + FutureOr> search(EntitySearchModel query) { + throw UnimplementedError(); + } + + @override + DataModelType get type => throw UnimplementedError(); + + // Function to perform global search for households + houseHoldGlobalSearch(GlobalSearchParameters params) async { + dynamic selectQuery; + late int? count = params.totalCount == 0 ? 0 : params.totalCount; + + // Check if the filter contains status for registered or not registered + if (params.filter!.contains(Status.registered.name) || + params.filter!.contains(Status.notRegistered.name)) { + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); + + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); + + var filterSelectQuery = nameSelectQuery; + + // Apply filters if present + if (params.filter != null && params.filter!.isNotEmpty) { + for (var filter in params.filter!) { + filterSelectQuery = + await filterSearch(filterSelectQuery, params, filter, super.sql); + } + } else { + filterSelectQuery = nameSelectQuery; + } + + // Return empty list if no results found + if (filterSelectQuery == null) { + return []; + } else { + // Get total count if offset is zero and filters are applied + if (params.offset == 0 && + params.filter != null && + params.filter!.isNotEmpty) { + count = await _getTotalCount(filterSelectQuery, params, super.sql); + } + + await filterSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); + + final results = await filterSelectQuery.get(); + + return _returnHouseHoldModel(results, count); + } + } else if (params.filter!.isNotEmpty && params.filter != null) { + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); + + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); + + var filterSelectQuery = nameSelectQuery; + + // Apply filters if present + if (params.filter != null && params.filter!.isNotEmpty) { + for (var filter in params.filter!) { + filterSelectQuery = + await filterSearch(filterSelectQuery, params, filter, super.sql); + } + } else { + filterSelectQuery = nameSelectQuery; + } + + // Return empty list if no results found + if (filterSelectQuery == null) { + return []; + } else { + if (params.offset == 0 && + params.filter != null && + params.filter!.isNotEmpty) { + count = await _getTotalCount(filterSelectQuery, params, super.sql); + } + await filterSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); + + final results = await filterSelectQuery.get(); + var data = + results.where((element) => element.isDeleted != true).toList(); + + return {"data": data, "total_count": count}; + } + } else { + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); + + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); + + // Return empty list if no results found + if (nameSelectQuery == null) { + return []; + } else { + // Get total count if offset is zero and filters are applied + if (params.offset == 0 && + params.filter != null && + params.filter!.isNotEmpty) { + count = await _getTotalCount(nameSelectQuery, params, super.sql); + } + await nameSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); + + final results = await nameSelectQuery.get(); + + return _returnHouseHoldModel(results, count); + } + } + } + + // Function to perform proximity search based on provided parameters + proximitySearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + if (!params.isProximityEnabled) { + return null; + } else if (params.isProximityEnabled) { + selectQuery = super.sql.address.select().join([ + joinHouseHoldAddress(sql), + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.household.clientReferenceId)) + ]) + ..where(buildAnd([ + sql.address.relatedClientReferenceId.isNotNull(), + sql.household.clientReferenceId.isNotNull(), + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) + * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) + )) <= ${params.maxRadius!} + '''), + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + sql.address.longitude.isNotNull(), + sql.address.latitude.isNotNull(), + sql.household.householdType.equalsValue(params.householdType) + ])) + ..orderBy([ + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + OrderingTerm( + expression: CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) + * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) + )) + '''), + mode: OrderingMode.asc, + ), + ]); + } + return selectQuery; + } + + // Function to perform name search based on provided parameters + nameSearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) async { + if (params.nameSearch == null || params.nameSearch!.isEmpty) { + return selectQuery; + } else if (params.nameSearch != null || + params.nameSearch!.isNotEmpty && selectQuery == null) { + selectQuery = super + .sql + .individual + .select() + .join([joinName(sql), joinIndividualAddress(sql)]); + if (params.householdType == HouseholdType.community) { + await searchByBuildingName(selectQuery, params, sql); + } else { + await searchByName(selectQuery, params, sql); + } + + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.householdMember, + sql.householdMember.individualClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]); + selectQuery.join([ + leftOuterJoin( + sql.household, + sql.household.clientReferenceId + .equalsExp(sql.householdMember.householdClientReferenceId)), + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.household.clientReferenceId)) + ]).where(sql.household.householdType.equalsValue(params.householdType)); + } else if (params.nameSearch != null && + params.nameSearch!.isNotEmpty && + selectQuery != null) { + if (params.householdType == HouseholdType.community) { + selectQuery = searchByBuildingName(selectQuery, params, sql); + } else { + selectQuery = selectQuery.join([ + joinName(sql), + ]); + selectQuery = searchByName(selectQuery, params, sql); + } + } + return selectQuery; + } + + // Function to search by name based on provided parameters + searchByName( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + return selectQuery.where(buildAnd([ + if (params.nameSearch != null) + buildOr([ + sql.name.givenName.contains( + params.nameSearch!, + ), + sql.name.familyName.contains( + params.nameSearch!, + ), + buildOr([ + sql.name.givenName.contains( + params.nameSearch!, + ), + sql.name.familyName.contains( + params.nameSearch!, + ), + sql.name.otherNames.equals( + params.nameSearch!, + ), + ]), + ]), + ])); + } + + filterSearch(selectQuery, GlobalSearchParameters params, String filter, + LocalSqlDataStore sql) async { + var sql = super.sql; + if (selectQuery == null) { + if (filter == Status.registered.name || + filter == Status.notRegistered.name) { + selectQuery = sql.household.select().join([ + if (params.nameSearch == null || !params.isProximityEnabled) + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.household.clientReferenceId)) + ]) + ..where(buildAnd([ + sql.household.householdType.equalsValue(params.householdType), + //TO DO + filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId + .isNotNull() + : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull() + ])); + } else { + var filterSearchQuery = + await filterTasks(selectQuery, filter, sql, params); + + selectQuery = filterSearchQuery; + } + } else if (selectQuery != null) { + if (filter == Status.registered.name || + filter == Status.notRegistered.name) { + selectQuery = selectQuery.join([ + if (params.nameSearch == null && !params.isProximityEnabled) + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.household.clientReferenceId)) + ]) + ..where(filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() + : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } else { + var filterSearchQuery = + await filterTasks(selectQuery, filter, sql, params); + selectQuery = filterSearchQuery; + } + } + return selectQuery; + } + + filterTasks(selectQuery, String filter, LocalSqlDataStore sql, + GlobalSearchParameters params) { + final statusMap = {}; + var applyFilter = filter; + if (selectQuery == null) { + selectQuery = sql.select(sql.task).join([ + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.clientReferenceId + .equalsExp(sql.task.projectBeneficiaryClientReferenceId)), + leftOuterJoin( + sql.household, + sql.household.clientReferenceId + .equalsExp(sql.projectBeneficiary.beneficiaryClientReferenceId)) + ]) + ..where(buildAnd([ + sql.household.householdType.equalsValue(params.householdType), + sql.task.status.equals( + statusMap[applyFilter]!.toValue(), + ) + ])); + + //TO DO:CHANGES IN THE BELOW LINE AS TOLD BY RAM + if (!(params.filter!.contains(Status.notRegistered.name))) { + selectQuery + .where(sql.projectBeneficiary.projectId.equals(params.projectId!)); + } + } else { + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.task, + sql.task.projectBeneficiaryClientReferenceId + .equalsExp(sql.projectBeneficiary.clientReferenceId)) + ]) + ..where(sql.task.status.equals(statusMap[filter]!.toValue())); + + if (!(params.filter!.contains(Status.notRegistered.name))) { + selectQuery + .where(sql.projectBeneficiary.projectId.equals(params.projectId!)); + } + } + + return selectQuery; + } + + joinName(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.name, + sql.name.individualClientReferenceId.equalsExp( + sql.individual.clientReferenceId, + ), + ); + } + + searchByBuildingName( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + return selectQuery.where(buildAnd([ + if (params.nameSearch != null) + sql.address.buildingName.contains(params.nameSearch!), + ])); + } + + joinHouseHoldAddress(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.household, + sql.household.clientReferenceId.equalsExp( + sql.address.relatedClientReferenceId, + ), + ); + } + + joinIndividualAddress(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.address, + sql.address.relatedClientReferenceId.equalsExp( + sql.individual.clientReferenceId, + ), + ); + } + + joinIndividual(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.individual, + sql.individual.clientReferenceId.equalsExp( + sql.name.individualClientReferenceId, + ), + ); + } + + _returnHouseHoldModel(results, totalCount) { + var data = results + .map((e) { + final household = e.readTable(sql.household); + final address = e.readTableOrNull(sql.address); + + return HouseholdModel( + householdType: household.householdType, + id: household.id, + tenantId: household.tenantId, + clientReferenceId: household.clientReferenceId, + memberCount: household.memberCount, + rowVersion: household.rowVersion, + isDeleted: household.isDeleted, + additionalFields: household.additionalFields != null && + household.additionalFields.toString().isNotEmpty + ? HouseholdAdditionalFieldsMapper.fromJson( + household.additionalFields.toString()) + : null, + auditDetails: (household.auditCreatedBy != null && + household.auditCreatedTime != null) + ? AuditDetails( + createdBy: household.auditCreatedBy!, + createdTime: household.auditCreatedTime!, + lastModifiedBy: household.auditModifiedBy, + lastModifiedTime: household.auditModifiedTime, + ) + : null, + clientAuditDetails: (household.clientCreatedBy != null && + household.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: household.clientCreatedBy!, + createdTime: household.clientCreatedTime!, + lastModifiedBy: household.clientModifiedBy, + lastModifiedTime: household.clientModifiedTime, + ) + : null, + address: address == null + ? null + : AddressModel( + id: address.id, + relatedClientReferenceId: household.clientReferenceId, + tenantId: address.tenantId, + doorNo: address.doorNo, + latitude: address.latitude, + longitude: address.longitude, + landmark: address.landmark, + locationAccuracy: address.locationAccuracy, + addressLine1: address.addressLine1, + addressLine2: address.addressLine2, + city: address.city, + pincode: address.pincode, + locality: address.localityBoundaryCode != null + ? LocalityModel( + code: address.localityBoundaryCode!, + name: address.localityBoundaryName, + ) + : null, + type: address.type, + rowVersion: address.rowVersion, + auditDetails: (household.auditCreatedBy != null && + household.auditCreatedBy != null) + ? AuditDetails( + createdBy: household.auditCreatedBy!, + createdTime: household.auditCreatedTime!, + lastModifiedBy: household.auditModifiedBy, + lastModifiedTime: household.auditModifiedTime, + ) + : null, + clientAuditDetails: (household.clientCreatedBy != null && + household.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: household.clientCreatedBy!, + createdTime: household.clientCreatedTime!, + lastModifiedBy: household.clientModifiedBy, + lastModifiedTime: household.clientModifiedTime, + ) + : null, + ), + ); + }) + .where((element) => element.isDeleted != true) + .toList(); + + return {'total_count': totalCount, 'data': data}; + } + + // Executing custom select query on top of filterSelectQuery to get count + _getTotalCount(filterSelectQuery, GlobalSearchParameters params, + LocalSqlDataStore sql) async { + JoinedSelectStatement selectQuery = filterSelectQuery; + var query = + selectQuery.constructQuery().buffer.toString().replaceAll(';', ''); + var variables = selectQuery.constructQuery().introducedVariables; + var indexesLength = selectQuery.constructQuery().variableIndices; + + dynamic totalCount; + + try { + totalCount = await sql + .customSelect('SELECT COUNT(*) AS total_count FROM ($query)', + variables: indexesLength.isNotEmpty + ? variables.map((e) => Variable(e.value)).toList() + : []) + .get(); + } catch (e) { + debugPrint('error in total $e'); + } + return totalCount == null ? 0 : totalCount.first.data['total_count']; + } +} diff --git a/packages/registration_delivery/lib/data/repositories/local/household_member.dart b/packages/registration/lib/data/repositories/local/household_member.dart similarity index 97% rename from packages/registration_delivery/lib/data/repositories/local/household_member.dart rename to packages/registration/lib/data/repositories/local/household_member.dart index f9d4e07663..f19fcb930f 100644 --- a/packages/registration_delivery/lib/data/repositories/local/household_member.dart +++ b/packages/registration/lib/data/repositories/local/household_member.dart @@ -2,8 +2,8 @@ import 'dart:async'; import 'package:digit_data_model/data_model.dart'; import 'package:drift/drift.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/utils/extensions/extensions.dart'; class HouseholdMemberLocalRepository extends LocalRepository { diff --git a/packages/registration/lib/data/repositories/local/individual_global_search.dart b/packages/registration/lib/data/repositories/local/individual_global_search.dart new file mode 100644 index 0000000000..18a986e7fe --- /dev/null +++ b/packages/registration/lib/data/repositories/local/individual_global_search.dart @@ -0,0 +1,566 @@ +import 'dart:async'; +import 'dart:math' as math; + +import 'package:collection/collection.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/models/entities/household_type.dart'; +import 'package:drift/drift.dart'; +import 'package:flutter/material.dart'; + +import '../../../models/entities/status.dart'; +import '../../../utils/global_search_parameters.dart'; + +class IndividualGlobalSearchRepository extends LocalRepository { + IndividualGlobalSearchRepository(super.sql, super.opLogManager); + + @override + FutureOr> search(EntitySearchModel query) { + throw UnimplementedError(); + } + + @override + DataModelType get type => throw UnimplementedError(); + + individualGlobalSearch(GlobalSearchParameters params) async { + dynamic selectQuery; + late int? count = params.totalCount == 0 ? 0 : params.totalCount; + + // Check if the filter contains status for registered or not registered + if (params.filter!.contains((Status.registered.name)) || + params.filter!.contains(Status.notRegistered.name)) { + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); + + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); + + var filterSelectQuery = nameSelectQuery; + + if (params.filter != null && params.filter!.isNotEmpty) { + for (var filter in params.filter!) { + filterSelectQuery = + await filterSearch(filterSelectQuery, params, filter, super.sql); + } + } else { + filterSelectQuery = nameSelectQuery; + } + + if (filterSelectQuery == null) { + return []; + } + // Get total count if offset is zero and filters are applied + else { + if (params.offset == 0 && + params.filter != null && + params.filter!.isNotEmpty) { + count = await _getTotalCount(filterSelectQuery, params, super.sql); + } + + await filterSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); + + final results = await filterSelectQuery.get(); + + return _returnIndividualModel(results, count); + } + } else if (params.filter!.isNotEmpty && params.filter != null) { + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); + + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); + + var filterSelectQuery = nameSelectQuery; + + // Apply filters if present + if (params.filter != null && params.filter!.isNotEmpty) { + for (var filter in params.filter!) { + filterSelectQuery = + await filterSearch(filterSelectQuery, params, filter, super.sql); + } + } else { + filterSelectQuery = nameSelectQuery; + } + + // Return empty list if no results found + if (filterSelectQuery == null) { + return []; + } else { + if (params.offset == 0 && + params.filter != null && + params.filter!.isNotEmpty) { + count = await _getTotalCount(filterSelectQuery, params, super.sql); + } + await filterSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); + + final results = await filterSelectQuery.get(); + var data = + results.where((element) => element.isDeleted != true).toList(); + + return {"data": data, "total_count": count}; + } + } else { + var proximitySelectQuery = + await proximitySearch(selectQuery, params, super.sql); + + var nameSelectQuery = + await nameSearch(proximitySelectQuery, params, super.sql); + + // Return empty list if no results found + if (nameSelectQuery == null) { + return []; + } else { + // Get total count if offset is zero and filters are applied + if (params.offset == 0 && + params.filter != null && + params.filter!.isNotEmpty) { + count = await _getTotalCount(nameSelectQuery, params, super.sql); + } + await nameSelectQuery.limit(params.limit ?? 50, + offset: params.offset ?? 0); + + final results = await nameSelectQuery.get(); + + return _returnIndividualModel(results, count); + } + } + } + + proximitySearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + if (!params.isProximityEnabled) { + return null; + } else if (params.isProximityEnabled) { + selectQuery = super.sql.individual.select().join([ + joinIndividualAddress(sql), + leftOuterJoin(sql.household, + sql.household.householdType.equalsValue(params.householdType)), + leftOuterJoin( + sql.householdMember, + sql.householdMember.individualClientReferenceId + .equalsExp(sql.individual.clientReferenceId)), + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]) + ..where(buildAnd([ + if (params.householdType == HouseholdType.community && + params.householdClientReferenceId == null) + sql.householdMember.isHeadOfHousehold.equals(true), + sql.address.relatedClientReferenceId.isNotNull(), + sql.individual.clientReferenceId.isNotNull(), + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) + * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) + )) <= ${params.maxRadius!} + '''), + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + sql.address.longitude.isNotNull(), + sql.address.latitude.isNotNull(), + sql.householdMember.householdClientReferenceId + .equalsExp(sql.household.clientReferenceId), + ])) + ..orderBy([ + if (params.latitude != null && + params.longitude != null && + params.maxRadius != null) + OrderingTerm( + expression: CustomExpression(''' + (6371393 * acos( + cos(${params.latitude! * math.pi / 180.0}) * cos((address.latitude * ${math.pi / 180.0})) + * cos((address.longitude * ${math.pi / 180.0}) - ${params.longitude! * math.pi / 180.0}) + + sin(${params.latitude! * math.pi / 180.0}) * sin((address.latitude * ${math.pi / 180.0})) + )) + '''), + mode: OrderingMode.asc, + ), + ]); + } + return selectQuery; + } + + // Function to perform name search based on provided parameters + nameSearch( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) async { + if (params.nameSearch == null || params.nameSearch!.isEmpty) { + return selectQuery; + } else if (params.nameSearch != null || + params.nameSearch!.isNotEmpty && selectQuery == null) { + selectQuery = super + .sql + .individual + .select() + .join([joinName(sql), joinIndividualAddress(sql)]); + + if (params.householdClientReferenceId != null) { + await searchByName(selectQuery, params, sql); + + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.household, + sql.household.clientReferenceId + .equals(params.householdClientReferenceId ?? '')), + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.individual.clientReferenceId)), + ]); + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.householdMember, + sql.householdMember.individualClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]) + ..where(buildAnd([ + sql.household.householdType.equalsValue(params.householdType), + sql.householdMember.householdClientReferenceId + .equals(params.householdClientReferenceId ?? '') + ])); + } else { + if (params.householdType == HouseholdType.community) { + await searchByBuildingName(selectQuery, params, sql); + } else { + await searchByName(selectQuery, params, sql); + } + + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.householdMember, + sql.householdMember.individualClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]); + selectQuery.join([ + leftOuterJoin( + sql.household, + sql.household.clientReferenceId + .equalsExp(sql.householdMember.householdClientReferenceId)), + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]).where(buildAnd([ + if (params.householdType == HouseholdType.community && + params.householdClientReferenceId == null) + sql.householdMember.isHeadOfHousehold.equals(true), + sql.household.householdType.equalsValue(params.householdType) + ])); + } + } else if (params.nameSearch != null && + params.nameSearch!.isNotEmpty && + selectQuery != null) { + if (params.householdType == HouseholdType.community && + params.householdClientReferenceId == null) { + selectQuery = searchByBuildingName(selectQuery, params, sql); + } else { + selectQuery = selectQuery.join([ + joinName(sql), + ]); + selectQuery = searchByName(selectQuery, params, sql); + } + } + return selectQuery; + } + + searchByName( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + return selectQuery.where(buildAnd([ + if (params.nameSearch != null) + buildOr([ + sql.name.givenName.contains( + params.nameSearch!, + ), + sql.name.familyName.contains( + params.nameSearch!, + ), + buildOr([ + sql.name.givenName.contains( + params.nameSearch!, + ), + sql.name.familyName.contains( + params.nameSearch!, + ), + sql.name.otherNames.equals( + params.nameSearch!, + ), + ]), + ]), + ])); + } + + searchByBuildingName( + selectQuery, GlobalSearchParameters params, LocalSqlDataStore sql) { + return selectQuery.where(buildAnd([ + if (params.nameSearch != null) + buildOr([ + sql.address.buildingName.contains(params.nameSearch!), + ]), + ])); + } + + filterSearch(selectQuery, GlobalSearchParameters params, String filter, + LocalSqlDataStore sql) async { + var sql = super.sql; + if (selectQuery == null) { + if (filter == Status.registered.name || + filter == Status.notRegistered.name) { + selectQuery = sql.individual.select().join([ + leftOuterJoin(sql.household, + sql.household.householdType.equalsValue(params.householdType)), + leftOuterJoin( + sql.householdMember, + sql.householdMember.individualClientReferenceId + .equalsExp(sql.individual.clientReferenceId)), + if (params.nameSearch == null || !params.isProximityEnabled) + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]) + ..where(buildAnd([ + sql.householdMember.householdClientReferenceId + .equalsExp(sql.household.clientReferenceId), + filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId + .isNotNull() + : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull(), + if (params.householdClientReferenceId != null) + sql.householdMember.householdClientReferenceId + .equals(params.householdClientReferenceId ?? '') + ])); + } else { + if (params.householdClientReferenceId != null) { + selectQuery = selectQuery.join([ + leftOuterJoin( + sql.householdMember, + sql.householdMember.individualClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]) + ..where(sql.householdMember.householdClientReferenceId + .equals(params.householdClientReferenceId ?? '')); + } + } + } else if (selectQuery != null) { + if (filter == Status.registered.name || + filter == Status.notRegistered.name) { + selectQuery = selectQuery.join([ + if (params.nameSearch == null && !params.isProximityEnabled) + leftOuterJoin( + sql.projectBeneficiary, + sql.projectBeneficiary.beneficiaryClientReferenceId + .equalsExp(sql.individual.clientReferenceId)) + ]) + ..where(filter == Status.registered.name + ? sql.projectBeneficiary.beneficiaryClientReferenceId.isNotNull() + : sql.projectBeneficiary.beneficiaryClientReferenceId.isNull()); + } + return selectQuery; + } + + return selectQuery; + } + + joinName(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.name, + sql.name.individualClientReferenceId.equalsExp( + sql.individual.clientReferenceId, + ), + ); + } + + joinIdentifier(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.identifier, + sql.identifier.clientReferenceId.equalsExp( + sql.individual.clientReferenceId, + ), + ); + } + + joinIndividualAddress(LocalSqlDataStore sql) { + return leftOuterJoin( + sql.address, + sql.address.relatedClientReferenceId.equalsExp( + sql.individual.clientReferenceId, + ), + ); + } + + joinProjectBeneficiary(LocalSqlDataStore sql) { + return leftOuterJoin(sql.projectBeneficiary, + sql.projectBeneficiary.clientReferenceId.isNotNull()); + } + + // Executing custom select query on top of filterSelectQuery to get count + _getTotalCount(filterSelectQuery, GlobalSearchParameters params, + LocalSqlDataStore sql) async { + JoinedSelectStatement selectQuery = filterSelectQuery; + var query = + selectQuery.constructQuery().buffer.toString().replaceAll(';', ''); + var variables = selectQuery.constructQuery().introducedVariables; + var indexesLength = selectQuery.constructQuery().variableIndices; + + dynamic totalCount; + + try { + totalCount = await sql + .customSelect('SELECT COUNT(*) AS total_count FROM ($query)', + variables: indexesLength.isNotEmpty + ? variables.map((e) => Variable(e.value)).toList() + : []) + .get(); + } catch (e) { + debugPrint('error in total $e'); + } + return totalCount == null ? 0 : totalCount.first.data['total_count']; + } + + _returnIndividualModel(results, int? count) { + var data = results + .map((e) { + final individual = e.readTableOrNull(sql.individual); + final address = e.readTableOrNull(sql.address); + final name = e.readTableOrNull(sql.name); + final identifier = e.readTableOrNull(sql.identifier); + + return IndividualModel( + id: individual.id, + tenantId: individual.tenantId, + individualId: individual.individualId, + clientReferenceId: individual.clientReferenceId, + dateOfBirth: individual.dateOfBirth, + mobileNumber: individual.mobileNumber, + isDeleted: individual.isDeleted, + rowVersion: individual.rowVersion, + clientAuditDetails: (individual.clientCreatedBy != null && + individual.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: individual.clientCreatedBy!, + createdTime: individual.clientCreatedTime!, + lastModifiedBy: individual.clientModifiedBy, + lastModifiedTime: individual.clientModifiedTime, + ) + : null, + auditDetails: (individual.auditCreatedBy != null && + individual.auditCreatedTime != null) + ? AuditDetails( + createdBy: individual.auditCreatedBy!, + createdTime: individual.auditCreatedTime!, + lastModifiedBy: individual.auditModifiedBy, + lastModifiedTime: individual.auditModifiedTime, + ) + : null, + name: name == null + ? null + : NameModel( + id: name.id, + individualClientReferenceId: individual.clientReferenceId, + familyName: name.familyName, + givenName: name.givenName, + otherNames: name.otherNames, + rowVersion: name.rowVersion, + tenantId: name.tenantId, + auditDetails: (name.auditCreatedBy != null && + name.auditCreatedTime != null) + ? AuditDetails( + createdBy: name.auditCreatedBy!, + createdTime: name.auditCreatedTime!, + lastModifiedBy: name.auditModifiedBy, + lastModifiedTime: name.auditModifiedTime, + ) + : null, + clientAuditDetails: (name.clientCreatedBy != null && + name.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: name.clientCreatedBy!, + createdTime: name.clientCreatedTime!, + lastModifiedBy: name.clientModifiedBy, + lastModifiedTime: name.clientModifiedTime, + ) + : null, + ), + bloodGroup: individual.bloodGroup, + address: [ + address == null + ? null + : AddressModel( + id: address.id, + relatedClientReferenceId: individual.clientReferenceId, + tenantId: address.tenantId, + doorNo: address.doorNo, + latitude: address.latitude, + longitude: address.longitude, + landmark: address.landmark, + locationAccuracy: address.locationAccuracy, + addressLine1: address.addressLine1, + addressLine2: address.addressLine2, + city: address.city, + pincode: address.pincode, + type: address.type, + locality: address.localityBoundaryCode != null + ? LocalityModel( + code: address.localityBoundaryCode!, + name: address.localityBoundaryName, + ) + : null, + rowVersion: address.rowVersion, + auditDetails: (address.auditCreatedBy != null && + address.auditCreatedTime != null) + ? AuditDetails( + createdBy: address.auditCreatedBy!, + createdTime: address.auditCreatedTime!, + lastModifiedBy: address.auditModifiedBy, + lastModifiedTime: address.auditModifiedTime, + ) + : null, + clientAuditDetails: (address.clientCreatedBy != null && + address.clientCreatedTime != null) + ? ClientAuditDetails( + createdBy: address.clientCreatedBy!, + createdTime: address.clientCreatedTime!, + lastModifiedBy: address.clientModifiedBy, + lastModifiedTime: address.clientModifiedTime, + ) + : null, + ), + ].whereNotNull().toList(), + gender: individual.gender, + identifiers: [ + if (identifier != null) + IdentifierModel( + id: identifier.id, + clientReferenceId: individual.clientReferenceId, + identifierType: identifier.identifierType, + identifierId: identifier.identifierId, + rowVersion: identifier.rowVersion, + tenantId: identifier.tenantId, + auditDetails: AuditDetails( + createdBy: identifier.auditCreatedBy!, + createdTime: identifier.auditCreatedTime!, + lastModifiedBy: identifier.auditModifiedBy, + lastModifiedTime: identifier.auditModifiedTime, + ), + ), + ], + additionalFields: individual.additionalFields == null + ? null + : IndividualAdditionalFieldsMapper.fromJson( + individual.additionalFields!, + ), + ); + }) + .where((element) => element.isDeleted != true) + .toList(); + + return {'total_count': count, 'data': data}; + } +} diff --git a/packages/registration_delivery/lib/data/repositories/remote/project_beneficiary.dart b/packages/registration/lib/data/repositories/local/project_beneficiary.dart similarity index 85% rename from packages/registration_delivery/lib/data/repositories/remote/project_beneficiary.dart rename to packages/registration/lib/data/repositories/local/project_beneficiary.dart index f05fd9580c..a1dadc58e8 100644 --- a/packages/registration_delivery/lib/data/repositories/remote/project_beneficiary.dart +++ b/packages/registration/lib/data/repositories/local/project_beneficiary.dart @@ -1,7 +1,8 @@ // Generated using mason. Do not modify by hand import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; + +import '../../../../models/entities/project_beneficiary.dart'; class ProjectBeneficiaryRemoteRepository extends RemoteRepository< ProjectBeneficiaryModel, ProjectBeneficiarySearchModel> { diff --git a/packages/registration_delivery/lib/data/repositories/local/registration_delivery_address.dart b/packages/registration/lib/data/repositories/local/registration_delivery_address.dart similarity index 100% rename from packages/registration_delivery/lib/data/repositories/local/registration_delivery_address.dart rename to packages/registration/lib/data/repositories/local/registration_delivery_address.dart diff --git a/packages/registration/lib/data/repositories/oplog/oplog.dart b/packages/registration/lib/data/repositories/oplog/oplog.dart new file mode 100644 index 0000000000..1b88f845d6 --- /dev/null +++ b/packages/registration/lib/data/repositories/oplog/oplog.dart @@ -0,0 +1,85 @@ +import 'package:digit_data_model/data_model.dart'; + +import 'package:registration/registration.dart'; + +class HouseholdOpLogManager extends OpLogManager { + HouseholdOpLogManager(super.isar); + + @override + HouseholdModel applyServerGeneratedIdToEntity( + HouseholdModel entity, + String serverGeneratedId, + int rowVersion, + ) => + entity.copyWith( + id: serverGeneratedId, + rowVersion: rowVersion, + ); + + @override + String getClientReferenceId(HouseholdModel entity) => + entity.clientReferenceId; + + @override + String? getServerGeneratedId(HouseholdModel entity) => entity.id; + + @override + int? getRowVersion(HouseholdModel entity) => entity.rowVersion; + + @override + bool? getNonRecoverableError(HouseholdModel entity) => + entity.nonRecoverableError; +} + +class HouseholdMemberOpLogManager extends OpLogManager { + HouseholdMemberOpLogManager(super.isar); + + @override + HouseholdMemberModel applyServerGeneratedIdToEntity( + HouseholdMemberModel entity, + String serverGeneratedId, + int rowVersion, + ) => + entity.copyWith(id: serverGeneratedId, rowVersion: rowVersion); + + @override + String getClientReferenceId(HouseholdMemberModel entity) => + entity.clientReferenceId; + + @override + String? getServerGeneratedId(HouseholdMemberModel entity) => entity.id; + + @override + int? getRowVersion(HouseholdMemberModel entity) => entity.rowVersion; + + @override + bool? getNonRecoverableError(HouseholdMemberModel entity) => + entity.nonRecoverableError; +} + +class ProjectBeneficiaryOpLogManager + extends OpLogManager { + ProjectBeneficiaryOpLogManager(super.isar); + + @override + ProjectBeneficiaryModel applyServerGeneratedIdToEntity( + ProjectBeneficiaryModel entity, + String serverGeneratedId, + int rowVersion, + ) => + entity.copyWith(id: serverGeneratedId, rowVersion: rowVersion); + + @override + String getClientReferenceId(ProjectBeneficiaryModel entity) => + entity.clientReferenceId; + + @override + String? getServerGeneratedId(ProjectBeneficiaryModel entity) => entity.id; + + @override + int? getRowVersion(ProjectBeneficiaryModel entity) => entity.rowVersion; + + @override + bool? getNonRecoverableError(ProjectBeneficiaryModel entity) => + entity.nonRecoverableError; +} diff --git a/packages/registration_delivery/lib/data/repositories/remote/household.dart b/packages/registration/lib/data/repositories/remote/household.dart similarity index 85% rename from packages/registration_delivery/lib/data/repositories/remote/household.dart rename to packages/registration/lib/data/repositories/remote/household.dart index 18cfdb2556..9d4c79559f 100644 --- a/packages/registration_delivery/lib/data/repositories/remote/household.dart +++ b/packages/registration/lib/data/repositories/remote/household.dart @@ -1,7 +1,7 @@ // Generated using mason. Do not modify by hand import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/models/entities/household.dart'; +import 'package:registration/models/entities/household.dart'; class HouseholdRemoteRepository extends RemoteRepository { diff --git a/packages/registration_delivery/lib/data/repositories/remote/household_member.dart b/packages/registration/lib/data/repositories/remote/household_member.dart similarity index 85% rename from packages/registration_delivery/lib/data/repositories/remote/household_member.dart rename to packages/registration/lib/data/repositories/remote/household_member.dart index 9cf7a3fcb2..7c3d4b56bd 100644 --- a/packages/registration_delivery/lib/data/repositories/remote/household_member.dart +++ b/packages/registration/lib/data/repositories/remote/household_member.dart @@ -1,7 +1,7 @@ // Generated using mason. Do not modify by hand import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; +import 'package:registration/models/entities/household_member.dart'; class HouseholdMemberRemoteRepository extends RemoteRepository { diff --git a/packages/registration_delivery/lib/models/entities/additional_fields_type.dart b/packages/registration/lib/models/entities/additional_fields_type.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/additional_fields_type.dart rename to packages/registration/lib/models/entities/additional_fields_type.dart diff --git a/packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart b/packages/registration/lib/models/entities/additional_fields_type.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/additional_fields_type.mapper.dart rename to packages/registration/lib/models/entities/additional_fields_type.mapper.dart diff --git a/packages/registration/lib/models/entities/beneficiary_statistics/beneficiary_statistics_model.dart b/packages/registration/lib/models/entities/beneficiary_statistics/beneficiary_statistics_model.dart new file mode 100644 index 0000000000..d3a76969a6 --- /dev/null +++ b/packages/registration/lib/models/entities/beneficiary_statistics/beneficiary_statistics_model.dart @@ -0,0 +1,19 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'beneficiary_statistics_model.freezed.dart'; + +@freezed +class BeneficiaryStatisticsWrapperModel + with _$BeneficiaryStatisticsWrapperModel { + const factory BeneficiaryStatisticsWrapperModel({ + required List beneficiaryStatisticsList, + }) = _BeneficiaryStatisticsWrapperModel; +} + +@freezed +class BeneficiaryStatisticsModel with _$BeneficiaryStatisticsModel { + const factory BeneficiaryStatisticsModel({ + required String title, + required String content, + }) = _BeneficiaryStatisticsModel; +} diff --git a/packages/registration/lib/models/entities/beneficiary_statistics/beneficiary_statistics_model.freezed.dart b/packages/registration/lib/models/entities/beneficiary_statistics/beneficiary_statistics_model.freezed.dart new file mode 100644 index 0000000000..de14cd3d56 --- /dev/null +++ b/packages/registration/lib/models/entities/beneficiary_statistics/beneficiary_statistics_model.freezed.dart @@ -0,0 +1,300 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'beneficiary_statistics_model.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +/// @nodoc +mixin _$BeneficiaryStatisticsWrapperModel { + List get beneficiaryStatisticsList => + throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $BeneficiaryStatisticsWrapperModelCopyWith + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $BeneficiaryStatisticsWrapperModelCopyWith<$Res> { + factory $BeneficiaryStatisticsWrapperModelCopyWith( + BeneficiaryStatisticsWrapperModel value, + $Res Function(BeneficiaryStatisticsWrapperModel) then) = + _$BeneficiaryStatisticsWrapperModelCopyWithImpl<$Res, + BeneficiaryStatisticsWrapperModel>; + @useResult + $Res call({List beneficiaryStatisticsList}); +} + +/// @nodoc +class _$BeneficiaryStatisticsWrapperModelCopyWithImpl<$Res, + $Val extends BeneficiaryStatisticsWrapperModel> + implements $BeneficiaryStatisticsWrapperModelCopyWith<$Res> { + _$BeneficiaryStatisticsWrapperModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? beneficiaryStatisticsList = null, + }) { + return _then(_value.copyWith( + beneficiaryStatisticsList: null == beneficiaryStatisticsList + ? _value.beneficiaryStatisticsList + : beneficiaryStatisticsList // ignore: cast_nullable_to_non_nullable + as List, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$BeneficiaryStatisticsWrapperModelImplCopyWith<$Res> + implements $BeneficiaryStatisticsWrapperModelCopyWith<$Res> { + factory _$$BeneficiaryStatisticsWrapperModelImplCopyWith( + _$BeneficiaryStatisticsWrapperModelImpl value, + $Res Function(_$BeneficiaryStatisticsWrapperModelImpl) then) = + __$$BeneficiaryStatisticsWrapperModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({List beneficiaryStatisticsList}); +} + +/// @nodoc +class __$$BeneficiaryStatisticsWrapperModelImplCopyWithImpl<$Res> + extends _$BeneficiaryStatisticsWrapperModelCopyWithImpl<$Res, + _$BeneficiaryStatisticsWrapperModelImpl> + implements _$$BeneficiaryStatisticsWrapperModelImplCopyWith<$Res> { + __$$BeneficiaryStatisticsWrapperModelImplCopyWithImpl( + _$BeneficiaryStatisticsWrapperModelImpl _value, + $Res Function(_$BeneficiaryStatisticsWrapperModelImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? beneficiaryStatisticsList = null, + }) { + return _then(_$BeneficiaryStatisticsWrapperModelImpl( + beneficiaryStatisticsList: null == beneficiaryStatisticsList + ? _value._beneficiaryStatisticsList + : beneficiaryStatisticsList // ignore: cast_nullable_to_non_nullable + as List, + )); + } +} + +/// @nodoc + +class _$BeneficiaryStatisticsWrapperModelImpl + implements _BeneficiaryStatisticsWrapperModel { + const _$BeneficiaryStatisticsWrapperModelImpl( + {required final List + beneficiaryStatisticsList}) + : _beneficiaryStatisticsList = beneficiaryStatisticsList; + + final List _beneficiaryStatisticsList; + @override + List get beneficiaryStatisticsList { + if (_beneficiaryStatisticsList is EqualUnmodifiableListView) + return _beneficiaryStatisticsList; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_beneficiaryStatisticsList); + } + + @override + String toString() { + return 'BeneficiaryStatisticsWrapperModel(beneficiaryStatisticsList: $beneficiaryStatisticsList)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$BeneficiaryStatisticsWrapperModelImpl && + const DeepCollectionEquality().equals( + other._beneficiaryStatisticsList, _beneficiaryStatisticsList)); + } + + @override + int get hashCode => Object.hash(runtimeType, + const DeepCollectionEquality().hash(_beneficiaryStatisticsList)); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$BeneficiaryStatisticsWrapperModelImplCopyWith< + _$BeneficiaryStatisticsWrapperModelImpl> + get copyWith => __$$BeneficiaryStatisticsWrapperModelImplCopyWithImpl< + _$BeneficiaryStatisticsWrapperModelImpl>(this, _$identity); +} + +abstract class _BeneficiaryStatisticsWrapperModel + implements BeneficiaryStatisticsWrapperModel { + const factory _BeneficiaryStatisticsWrapperModel( + {required final List + beneficiaryStatisticsList}) = _$BeneficiaryStatisticsWrapperModelImpl; + + @override + List get beneficiaryStatisticsList; + @override + @JsonKey(ignore: true) + _$$BeneficiaryStatisticsWrapperModelImplCopyWith< + _$BeneficiaryStatisticsWrapperModelImpl> + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +mixin _$BeneficiaryStatisticsModel { + String get title => throw _privateConstructorUsedError; + String get content => throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $BeneficiaryStatisticsModelCopyWith + get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $BeneficiaryStatisticsModelCopyWith<$Res> { + factory $BeneficiaryStatisticsModelCopyWith(BeneficiaryStatisticsModel value, + $Res Function(BeneficiaryStatisticsModel) then) = + _$BeneficiaryStatisticsModelCopyWithImpl<$Res, + BeneficiaryStatisticsModel>; + @useResult + $Res call({String title, String content}); +} + +/// @nodoc +class _$BeneficiaryStatisticsModelCopyWithImpl<$Res, + $Val extends BeneficiaryStatisticsModel> + implements $BeneficiaryStatisticsModelCopyWith<$Res> { + _$BeneficiaryStatisticsModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? title = null, + Object? content = null, + }) { + return _then(_value.copyWith( + title: null == title + ? _value.title + : title // ignore: cast_nullable_to_non_nullable + as String, + content: null == content + ? _value.content + : content // ignore: cast_nullable_to_non_nullable + as String, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$BeneficiaryStatisticsModelImplCopyWith<$Res> + implements $BeneficiaryStatisticsModelCopyWith<$Res> { + factory _$$BeneficiaryStatisticsModelImplCopyWith( + _$BeneficiaryStatisticsModelImpl value, + $Res Function(_$BeneficiaryStatisticsModelImpl) then) = + __$$BeneficiaryStatisticsModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({String title, String content}); +} + +/// @nodoc +class __$$BeneficiaryStatisticsModelImplCopyWithImpl<$Res> + extends _$BeneficiaryStatisticsModelCopyWithImpl<$Res, + _$BeneficiaryStatisticsModelImpl> + implements _$$BeneficiaryStatisticsModelImplCopyWith<$Res> { + __$$BeneficiaryStatisticsModelImplCopyWithImpl( + _$BeneficiaryStatisticsModelImpl _value, + $Res Function(_$BeneficiaryStatisticsModelImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? title = null, + Object? content = null, + }) { + return _then(_$BeneficiaryStatisticsModelImpl( + title: null == title + ? _value.title + : title // ignore: cast_nullable_to_non_nullable + as String, + content: null == content + ? _value.content + : content // ignore: cast_nullable_to_non_nullable + as String, + )); + } +} + +/// @nodoc + +class _$BeneficiaryStatisticsModelImpl implements _BeneficiaryStatisticsModel { + const _$BeneficiaryStatisticsModelImpl( + {required this.title, required this.content}); + + @override + final String title; + @override + final String content; + + @override + String toString() { + return 'BeneficiaryStatisticsModel(title: $title, content: $content)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$BeneficiaryStatisticsModelImpl && + (identical(other.title, title) || other.title == title) && + (identical(other.content, content) || other.content == content)); + } + + @override + int get hashCode => Object.hash(runtimeType, title, content); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$BeneficiaryStatisticsModelImplCopyWith<_$BeneficiaryStatisticsModelImpl> + get copyWith => __$$BeneficiaryStatisticsModelImplCopyWithImpl< + _$BeneficiaryStatisticsModelImpl>(this, _$identity); +} + +abstract class _BeneficiaryStatisticsModel + implements BeneficiaryStatisticsModel { + const factory _BeneficiaryStatisticsModel( + {required final String title, + required final String content}) = _$BeneficiaryStatisticsModelImpl; + + @override + String get title; + @override + String get content; + @override + @JsonKey(ignore: true) + _$$BeneficiaryStatisticsModelImplCopyWith<_$BeneficiaryStatisticsModelImpl> + get copyWith => throw _privateConstructorUsedError; +} diff --git a/packages/registration_delivery/lib/models/entities/household.dart b/packages/registration/lib/models/entities/household.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/household.dart rename to packages/registration/lib/models/entities/household.dart diff --git a/packages/registration_delivery/lib/models/entities/household.mapper.dart b/packages/registration/lib/models/entities/household.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/household.mapper.dart rename to packages/registration/lib/models/entities/household.mapper.dart diff --git a/packages/registration_delivery/lib/models/entities/household_member.dart b/packages/registration/lib/models/entities/household_member.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/household_member.dart rename to packages/registration/lib/models/entities/household_member.dart diff --git a/packages/registration_delivery/lib/models/entities/household_member.mapper.dart b/packages/registration/lib/models/entities/household_member.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/household_member.mapper.dart rename to packages/registration/lib/models/entities/household_member.mapper.dart diff --git a/packages/registration_delivery/lib/models/entities/project_beneficiary.dart b/packages/registration/lib/models/entities/project_beneficiary.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/project_beneficiary.dart rename to packages/registration/lib/models/entities/project_beneficiary.dart diff --git a/packages/registration_delivery/lib/models/entities/project_beneficiary.mapper.dart b/packages/registration/lib/models/entities/project_beneficiary.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/project_beneficiary.mapper.dart rename to packages/registration/lib/models/entities/project_beneficiary.mapper.dart diff --git a/packages/registration_delivery/lib/models/entities/reg_form_validations_type.dart b/packages/registration/lib/models/entities/reg_form_validations_type.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/reg_form_validations_type.dart rename to packages/registration/lib/models/entities/reg_form_validations_type.dart diff --git a/packages/registration_delivery/lib/models/entities/reg_form_validations_type.mapper.dart b/packages/registration/lib/models/entities/reg_form_validations_type.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/reg_form_validations_type.mapper.dart rename to packages/registration/lib/models/entities/reg_form_validations_type.mapper.dart diff --git a/packages/registration_delivery/lib/models/entities/registration_delivery_enums.dart b/packages/registration/lib/models/entities/registration_delivery_enums.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/registration_delivery_enums.dart rename to packages/registration/lib/models/entities/registration_delivery_enums.dart diff --git a/packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart b/packages/registration/lib/models/entities/registration_delivery_enums.mapper.dart similarity index 100% rename from packages/registration_delivery/lib/models/entities/registration_delivery_enums.mapper.dart rename to packages/registration/lib/models/entities/registration_delivery_enums.mapper.dart diff --git a/packages/registration/lib/models/entities/status.dart b/packages/registration/lib/models/entities/status.dart new file mode 100644 index 0000000000..b0ad935661 --- /dev/null +++ b/packages/registration/lib/models/entities/status.dart @@ -0,0 +1,14 @@ +// Generated using mason. Do not modify by hand +import 'package:dart_mappable/dart_mappable.dart'; + +part 'status.mapper.dart'; + +@MappableEnum(caseStyle: CaseStyle.upperCase) +enum Status { + @MappableValue("REGISTERED") + registered, + @MappableValue("NOT_REGISTERED") + notRegistered, + @MappableValue("CLOSED_HOUSEHOLD") + closeHousehold +} diff --git a/packages/registration/lib/models/entities/status.mapper.dart b/packages/registration/lib/models/entities/status.mapper.dart new file mode 100644 index 0000000000..7d3622782e --- /dev/null +++ b/packages/registration/lib/models/entities/status.mapper.dart @@ -0,0 +1,57 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'status.dart'; + +class StatusMapper extends EnumMapper { + StatusMapper._(); + + static StatusMapper? _instance; + static StatusMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = StatusMapper._()); + } + return _instance!; + } + + static Status fromValue(dynamic value) { + ensureInitialized(); + return MapperContainer.globals.fromValue(value); + } + + @override + Status decode(dynamic value) { + switch (value) { + case "REGISTERED": + return Status.registered; + case "NOT_REGISTERED": + return Status.notRegistered; + case "CLOSED_HOUSEHOLD": + return Status.closeHousehold; + default: + throw MapperException.unknownEnumValue(value); + } + } + + @override + dynamic encode(Status self) { + switch (self) { + case Status.registered: + return "REGISTERED"; + case Status.notRegistered: + return "NOT_REGISTERED"; + case Status.closeHousehold: + return "CLOSED_HOUSEHOLD"; + } + } +} + +extension StatusMapperExtension on Status { + dynamic toValue() { + StatusMapper.ensureInitialized(); + return MapperContainer.globals.toValue(this); + } +} diff --git a/packages/registration/lib/pages/beneficiary/beneficiary_details.dart b/packages/registration/lib/pages/beneficiary/beneficiary_details.dart new file mode 100644 index 0000000000..714489a21f --- /dev/null +++ b/packages/registration/lib/pages/beneficiary/beneficiary_details.dart @@ -0,0 +1,223 @@ +import 'package:auto_route/auto_route.dart'; + +import 'package:registration/widgets/table_card/table_card.dart'; + +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:intl/intl.dart'; +import 'package:recase/recase.dart'; +import 'package:registration/blocs/app_localization.dart'; +import 'package:registration/blocs/household_overview/household_overview.dart'; +import '../../blocs/component_wrapper/product_variant_bloc_wrapper.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../../utils/utils.dart'; +import '../../widgets/back_navigation_help_header.dart'; +import '../../widgets/localized.dart'; + +@RoutePage() +class BeneficiaryDetailsPage extends LocalizedStatefulWidget { + const BeneficiaryDetailsPage({ + super.key, + super.appLocalizations, + }); + + @override + State createState() => BeneficiaryDetailsPageState(); +} + +class BeneficiaryDetailsPageState + extends LocalizedState { + @override + void initState() { + // TODO: implement initState + super.initState(); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final localizations = RegistrationLocalization.of(context); + + final textTheme = theme.digitTextTheme(context); + + return ProductVariantBlocWrapper( + child: BlocBuilder( + builder: (context, state) { + final householdMemberWrapper = state.householdMemberWrapper; + // Filtering project beneficiaries based on the selected individual + final projectBeneficiary = + RegistrationSingleton().beneficiaryType != + BeneficiaryType.individual + ? [householdMemberWrapper.projectBeneficiaries?.first] + : householdMemberWrapper.projectBeneficiaries + ?.where( + (element) => + element.beneficiaryClientReferenceId == + state.selectedIndividual?.clientReferenceId, + ) + .toList(); + + // Building the table content based on the DeliverInterventionState + + return BlocBuilder( + builder: (context, productState) { + return productState.maybeWhen( + orElse: () => const Offstage(), + fetched: (productVariantsValue) { + return Scaffold( + body: ScrollableContent( + header: const Column(children: [ + BackNavigationHelpHeaderWidget(), + ]), + children: [ + DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + Text( + localizations.translate(i18.beneficiaryDetails + .beneficiarysDetailsLabelText), + style: textTheme.headingXl.copyWith( + color: theme.colorTheme.primary.primary2), + ), + DigitTableCard( + element: { + localizations.translate( + RegistrationSingleton() + .beneficiaryType != + BeneficiaryType.individual + ? i18.householdOverView + .householdOverViewHouseholdHeadLabel + : i18.common.coreCommonName, + ): RegistrationSingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.name?.givenName + : state.selectedIndividual?.name + ?.givenName ?? + '--', + localizations.translate( + i18.deliverIntervention.idTypeText, + ): () { + final identifiers = + RegistrationSingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.identifiers + : state.selectedIndividual + ?.identifiers; + if (identifiers == null || + identifiers.isEmpty) { + return '--'; + } + + return localizations.translate( + identifiers.first.identifierType ?? + '--'); + }(), + localizations.translate( + i18.deliverIntervention.idNumberText, + ): () { + final identifiers = + RegistrationSingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.identifiers + : state.selectedIndividual + ?.identifiers; + if (identifiers == null || + identifiers.isEmpty) { + return '--'; + } + + return maskString(identifiers + .first.identifierId + .toString()); + }(), + localizations.translate( + i18.common.coreCommonAge, + ): () { + final dob = RegistrationSingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.dateOfBirth + : state.selectedIndividual?.dateOfBirth; + if (dob == null || dob.isEmpty) { + return '--'; + } + + final int years = + DigitDateUtils.calculateAge( + DigitDateUtils.getFormattedDateToDateTime( + dob, + ) ?? + DateTime.now(), + ).years; + final int months = + DigitDateUtils.calculateAge( + DigitDateUtils.getFormattedDateToDateTime( + dob, + ) ?? + DateTime.now(), + ).months; + + return "$years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} ${localizations.translate(months.toString().toUpperCase())} ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}"; + }(), + localizations.translate( + i18.common.coreCommonGender, + ): RegistrationSingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper.headOfHousehold + ?.gender?.name.sentenceCase + : state.selectedIndividual?.gender?.name + .sentenceCase ?? + '--', + localizations.translate( + i18.common.coreCommonMobileNumber, + ): RegistrationSingleton() + .beneficiaryType != + BeneficiaryType.individual + ? householdMemberWrapper + .headOfHousehold?.mobileNumber + : state.selectedIndividual + ?.mobileNumber ?? + '--', + localizations.translate(i18 + .deliverIntervention + .dateOfRegistrationLabel): () { + final date = projectBeneficiary + ?.first?.dateOfRegistration; + + final registrationDate = + DateTime.fromMillisecondsSinceEpoch( + date ?? + DateTime.now().millisecondsSinceEpoch, + ); + + return DateFormat('dd MMMM yyyy') + .format(registrationDate); + }(), + }, + ), + ]), + ], + ), + ); + }, + ); + }, + ); + }, + ), + ); + } +} diff --git a/packages/registration/lib/pages/beneficiary/beneficiary_wrapper.dart b/packages/registration/lib/pages/beneficiary/beneficiary_wrapper.dart new file mode 100644 index 0000000000..4acbc86dff --- /dev/null +++ b/packages/registration/lib/pages/beneficiary/beneficiary_wrapper.dart @@ -0,0 +1,101 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration/blocs/household_overview/household_overview.dart'; +import 'package:registration/blocs/search_households/search_households.dart'; +import 'package:registration/data/repositories/local/individual_global_search.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/utils/extensions/extensions.dart'; +import 'package:registration/utils/utils.dart'; +import 'package:survey_form/survey_form.dart'; +import '../../models/entities/project_beneficiary.dart'; + +@RoutePage() +class BeneficiaryWrapperPage extends StatelessWidget { + final HouseholdMemberWrapper wrapper; + final bool isEditing; + + const BeneficiaryWrapperPage({ + super.key, + required this.wrapper, + this.isEditing = false, + }); + + @override + Widget build(BuildContext context) { + final individual = + context.repository(context); + + final household = + context.repository(context); + + final householdMember = context + .repository(context); + + final projectBeneficiary = context.repository(context); + final serviceDefinition = context.repository(context); + final service = + context.repository(context); + + final facilityRepository = + context.read>(); + + final projectFacilityRepository = context.read< + LocalRepository>(); + + final individualGlobalSearchRepository = + context.read(); + + return MultiBlocProvider( + providers: [ + BlocProvider( + create: (_) => ServiceBloc( + const ServiceEmptyState(), + serviceDataRepository: service, + ), + ), + BlocProvider( + create: (_) => ServiceDefinitionBloc( + const ServiceDefinitionEmptyState(), + serviceDefinitionDataRepository: serviceDefinition, + )..add(const ServiceDefinitionFetchEvent()), + ), + BlocProvider( + create: (_) => FacilityBloc( + facilityDataRepository: facilityRepository, + projectFacilityDataRepository: projectFacilityRepository) + ..add( + FacilityLoadForProjectEvent( + projectId: RegistrationSingleton().projectId!, + ), + ), + ), + BlocProvider( + create: (_) => ServiceDefinitionBloc( + const ServiceDefinitionEmptyState(), + serviceDefinitionDataRepository: serviceDefinition, + )..add(const ServiceDefinitionFetchEvent()), + ), + BlocProvider( + create: (_) => HouseholdOverviewBloc( + HouseholdOverviewState( + householdMemberWrapper: wrapper, + ), + individualRepository: individual, + householdRepository: household, + householdMemberRepository: householdMember, + projectBeneficiaryRepository: projectBeneficiary, + individualGlobalSearchRepository: + individualGlobalSearchRepository, + beneficiaryType: + RegistrationSingleton().beneficiaryType!), + ), + ], + child: const AutoRouter(), + ); + } +} diff --git a/packages/registration/lib/pages/beneficiary/household_overview.dart b/packages/registration/lib/pages/beneficiary/household_overview.dart new file mode 100644 index 0000000000..9e82692727 --- /dev/null +++ b/packages/registration/lib/pages/beneficiary/household_overview.dart @@ -0,0 +1,868 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:collection/collection.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/models/entities/household_type.dart'; +import 'package:digit_ui_components/enum/app_enums.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/theme/digit_theme.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_action_card.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_chip.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_search_bar.dart'; +import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/show_pop_up.dart'; +import 'package:digit_ui_components/widgets/scrollable_content.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration/blocs/beneficiary_registration/beneficiary_registration.dart'; +import 'package:registration/blocs/household_overview/household_overview.dart'; +import 'package:registration/blocs/search_households/search_bloc_common_wrapper.dart'; +import 'package:registration/blocs/search_households/search_households.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/status.dart'; +import 'package:registration/router/registration_router.gm.dart'; +import 'package:registration/widgets/member_card/member_card.dart'; +import 'package:registration/widgets/status_filter/status_filter.dart'; +import 'package:registration/utils/i18_key_constants.dart' as i18; +import 'package:registration/widgets/table_card/table_card.dart'; +import '../../utils/utils.dart'; +import '../../widgets/back_navigation_help_header.dart'; +import '../../widgets/localized.dart'; + +@RoutePage() +class HouseholdOverviewPage extends LocalizedStatefulWidget { + const HouseholdOverviewPage({super.key, super.appLocalizations}); + + @override + State createState() => _HouseholdOverviewPageState(); +} + +class _HouseholdOverviewPageState + extends LocalizedState { + final TextEditingController searchController = TextEditingController(); + int offset = 0; + int limit = 10; + + String? householdClientReferenceId; + + List selectedFilters = []; + + @override + void initState() { + callReloadEvent(offset: offset, limit: limit); + super.initState(); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final beneficiaryType = RegistrationSingleton().beneficiaryType!; + final textTheme = theme.digitTextTheme(context); + + return PopScope( + onPopInvoked: (didPop) async { + context + .read() + .searchHouseholdsBloc + .add(const SearchHouseholdsClearEvent()); + context.router.maybePop(); + }, + child: BlocBuilder( + builder: (ctx, state) { + return Scaffold( + body: state.loading + ? const Center(child: CircularProgressIndicator()) + : NotificationListener( + onNotification: (scrollNotification) { + if (scrollNotification is ScrollUpdateNotification) { + final metrics = scrollNotification.metrics; + if (metrics.atEdge && metrics.pixels != 0) { + if (state.offset != null) { + callReloadEvent( + offset: state.offset ?? 0, limit: limit); + } + } + } + //Return true to allow the notification to continue to be dispatched to further ancestors. + return true; + }, + child: ScrollableContent( + header: Padding( + padding: const EdgeInsets.only(bottom: spacer2), + child: BackNavigationHelpHeaderWidget( + handleBack: () { + context + .read() + .add(const SearchHouseholdsEvent.clear()); + }, + ), + ), + enableFixedDigitButton: true, + footer: const DigitCard( + margin: EdgeInsets.only(top: spacer2), + children: [], + ), + slivers: [ + SliverToBoxAdapter( + child: DigitCard( + margin: const EdgeInsets.all(spacer2), + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + if ((state.householdMemberWrapper + .projectBeneficiaries ?? + []) + .isNotEmpty) + Align( + alignment: Alignment.centerLeft, + child: DigitButton( + onPressed: () { + final projectId = + RegistrationSingleton() + .projectId!; + + final bloc = context + .read(); + bloc.add( + HouseholdOverviewReloadEvent( + projectId: projectId, + projectBeneficiaryType: + beneficiaryType, + ), + ); + showDialog( + context: context, + builder: (ctx) => DigitActionCard( + actions: [ + DigitButton( + capitalizeLetters: false, + prefixIcon: Icons.edit, + label: (RegistrationSingleton() + .householdType == + HouseholdType + .community) + ? localizations.translate(i18 + .householdOverView + .clfOverViewEditLabel) + : localizations + .translate( + i18.householdOverView + .householdOverViewEditLabel, + ), + type: DigitButtonType + .secondary, + size: DigitButtonSize.large, + onPressed: () async { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + + HouseholdMemberWrapper + wrapper = state + .householdMemberWrapper; + + final timestamp = wrapper + .headOfHousehold + ?.clientAuditDetails + ?.createdTime; + final date = DateTime + .fromMillisecondsSinceEpoch( + timestamp ?? + DateTime.now() + .millisecondsSinceEpoch, + ); + + final address = wrapper + .household?.address; + + if (address == null) + return; + + final projectBeneficiary = state + .householdMemberWrapper + .projectBeneficiaries + ?.firstWhereOrNull( + (element) => + element + .beneficiaryClientReferenceId == + wrapper.household + ?.clientReferenceId, + ); + + await context.router.root + .push( + BeneficiaryRegistrationWrapperRoute( + initialState: + BeneficiaryRegistrationEditHouseholdState( + addressModel: + address, + individualModel: state + .householdMemberWrapper + .members ?? + [], + householdModel: state + .householdMemberWrapper + .household!, + registrationDate: + date, + projectBeneficiaryModel: + projectBeneficiary, + ), + children: [ + HouseholdLocationRoute(), + ], + ), + ); + callReloadEvent( + offset: 0, limit: 10); + }, + ), + ], + ), + ); + }, + label: (RegistrationSingleton() + .householdType == + HouseholdType.community) + ? localizations.translate(i18 + .householdOverView + .clfOverViewEditIconText) + : localizations.translate( + i18.householdOverView + .householdOverViewEditIconText, + ), + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, + prefixIcon: Icons.edit, + capitalizeLetters: false, + ), + ), + + ///Old UI Format + // BlocBuilder( + // builder: (ctx, deliverInterventionState) => + // Offstage( + // offstage: beneficiaryType == + // BeneficiaryType.individual, + // child: Align( + // alignment: Alignment.centerLeft, + // child: DigitIconButton( + // icon: getStatusAttributes(state, + // deliverInterventionState)['icon'], + // iconText: localizations.translate( + // getStatusAttributes(state, + // deliverInterventionState)[ + // 'textLabel'], + // ), // [TODO: map task status accordingly based on projectBeneficiaries and tasks] + // iconTextColor: getStatusAttributes(state, + // deliverInterventionState)['color'], + // iconColor: getStatusAttributes(state, + // deliverInterventionState)['color'], + // ), + // ), + // ), + // ), + Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: const EdgeInsets.all(spacer2), + child: Text( + RegistrationSingleton() + .householdType != + null && + RegistrationSingleton() + .householdType == + HouseholdType.community + ? localizations.translate(i18 + .householdOverView + .clfOverviewLabel) + : localizations.translate(i18 + .householdOverView + .householdOverViewLabel), + style: textTheme.headingXl.copyWith( + color: theme + .colorTheme.primary.primary2), + ), + ), + ), + Padding( + padding: const EdgeInsets.only( + left: spacer2, + right: spacer2, + ), + child: Builder( + builder: (context) { + bool shouldShowStatus = + beneficiaryType == + BeneficiaryType.household; + + if (RegistrationSingleton() + .householdType == + HouseholdType.community) { + return Column( + children: [ + DigitTableCard(element: { + localizations.translate(i18 + .householdOverView + .instituteNameLabel): state + .householdMemberWrapper + .household + ?.address + ?.buildingName ?? + localizations.translate( + i18.common + .coreCommonNA), + localizations.translate(i18 + .deliverIntervention + .memberCountText): + state + .householdMemberWrapper + .household + ?.memberCount, + localizations.translate(i18 + .householdLocation + .administrationAreaFormLabel): + localizations.translate( + state + .householdMemberWrapper + .headOfHousehold + ?.address + ?.first + .locality + ?.code ?? + i18.common.coreCommonNA, + ), + }), + ], + ); + } + + return Column( + children: [ + DigitTableCard( + element: { + localizations.translate(i18 + .householdOverView + .householdOverViewHouseholdHeadNameLabel): state + .householdMemberWrapper + .headOfHousehold + ?.name + ?.givenName ?? + localizations.translate( + i18.common + .coreCommonNA), + localizations.translate(i18 + .householdLocation + .administrationAreaFormLabel): + localizations.translate( + state + .householdMemberWrapper + .headOfHousehold + ?.address + ?.first + .locality + ?.code ?? + i18.common.coreCommonNA, + ), + localizations.translate(i18 + .deliverIntervention + .memberCountText): + state + .householdMemberWrapper + .household + ?.memberCount, + }, + ), + ], + ); + }, + ), + ), + + if (RegistrationSingleton().householdType == + HouseholdType.community) ...[ + Padding( + padding: const EdgeInsets.only( + top: spacer2, bottom: spacer2), + child: Row( + children: [ + Expanded( + child: DigitSearchBar( + controller: searchController, + hintText: + localizations.translate( + i18.common.searchByName, + ), + textCapitalization: + TextCapitalization.words, + onChanged: (value) { + if (value.length >= 3) { + callReloadEvent( + offset: 0, limit: 10); + } else if (searchController + .value.text.isEmpty) { + callReloadEvent( + offset: 0, limit: 10); + } + }, + ), + ), + Column( + children: [ + getFilters() + ? Align( + alignment: + Alignment.topLeft, + child: Padding( + padding: + const EdgeInsets + .all(spacer2), + child: DigitButton( + label: + getFilterIconNLabel()[ + 'label'], + size: + DigitButtonSize + .medium, + type: + DigitButtonType + .tertiary, + suffixIcon: + getFilterIconNLabel()[ + 'icon'], + onPressed: () => + showFilterDialog(), + ), + ), + ) + : const Offstage(), + ], + ), + ], + ), + ), + ], + selectedFilters.isNotEmpty + ? Align( + alignment: Alignment.topLeft, + child: SizedBox( + height: MediaQuery.of(context) + .size + .height * + 0.06, + child: ListView.builder( + shrinkWrap: true, + scrollDirection: + Axis.horizontal, + itemCount: + selectedFilters.length, + itemBuilder: + (context, index) { + return Padding( + padding: + const EdgeInsets.all( + spacer1), + child: DigitChip( + label: + '${localizations.translate(getStatus(selectedFilters[index]))}' + ' (${state.householdMemberWrapper.members!.length})', + onItemDelete: () { + selectedFilters.remove( + selectedFilters[ + index]); + callReloadEvent( + offset: 0, + limit: 10); + }, + ), + ); + }), + ), + ) + : const Offstage(), + Column( + children: (state.householdMemberWrapper + .members ?? + []) + .map( + (e) { + final isHead = state + .householdMemberWrapper + .headOfHousehold + ?.clientReferenceId == + e.clientReferenceId; + final projectBeneficiaryId = state + .householdMemberWrapper + .projectBeneficiaries + ?.firstWhereOrNull((b) => + b.beneficiaryClientReferenceId == + e.clientReferenceId) + ?.clientReferenceId; + + final projectBeneficiary = state + .householdMemberWrapper + .projectBeneficiaries + ?.where( + (element) => + element + .beneficiaryClientReferenceId == + (RegistrationSingleton() + .beneficiaryType == + BeneficiaryType + .individual + ? e.clientReferenceId + : state + .householdMemberWrapper + .household + ?.clientReferenceId), + ) + .toList(); + + return MemberCard( + isHead: isHead, + individual: e, + projectBeneficiaries: + projectBeneficiary ?? [], + editMemberAction: () async { + final bloc = ctx.read< + HouseholdOverviewBloc>(); + + Navigator.of( + context, + rootNavigator: true, + ).pop(); + + final address = e.address; + if (address == null || + address.isEmpty) { + return; + } + final projectId = + RegistrationSingleton() + .projectId!; + bloc.add( + HouseholdOverviewReloadEvent( + projectId: projectId, + projectBeneficiaryType: + beneficiaryType, + ), + ); + + await context.router.root.push( + BeneficiaryRegistrationWrapperRoute( + initialState: + BeneficiaryRegistrationEditIndividualState( + individualModel: e, + householdModel: state + .householdMemberWrapper + .household!, + addressModel: address.first, + projectBeneficiaryModel: state + .householdMemberWrapper + .projectBeneficiaries + ?.firstWhereOrNull( + (element) => + element + .beneficiaryClientReferenceId == + (RegistrationSingleton() + .beneficiaryType == + BeneficiaryType + .individual + ? e + .clientReferenceId + : state + .householdMemberWrapper + .household + ?.clientReferenceId), + ), + ), + children: [ + IndividualDetailsRoute( + isHeadOfHousehold: isHead, + ), + ], + ), + ); + callReloadEvent( + offset: 0, limit: 10); + }, + setAsHeadAction: () { + ctx + .read() + .add( + HouseholdOverviewSetAsHeadEvent( + individualModel: e, + projectId: + RegistrationSingleton() + .projectId!, + householdModel: state + .householdMemberWrapper + .household!, + projectBeneficiaryType: + beneficiaryType, + ), + ); + + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + deleteMemberAction: () { + showCustomPopup( + context: context, + builder: (BuildContext _) => Popup( + title: localizations + .translate(i18 + .householdOverView + .householdOverViewActionCardTitle), + type: PopUpType.simple, + actions: [ + DigitButton( + label: localizations + .translate(i18 + .householdOverView + .householdOverViewPrimaryActionLabel), + onPressed: () { + Navigator.of( + context, + rootNavigator: + true, + ) + ..pop() + ..pop(); + context + .read< + HouseholdOverviewBloc>() + .add( + HouseholdOverviewEvent + .selectedIndividual( + individualModel: + e, + ), + ); + context.router.push( + ReasonForDeletionRoute( + isHousholdDelete: + false, + ), + ); + }, + type: DigitButtonType + .primary, + size: DigitButtonSize + .large), + DigitButton( + label: localizations + .translate(i18 + .householdOverView + .householdOverViewSecondaryActionLabel), + onPressed: () { + Navigator.of( + context, + rootNavigator: + true, + ).pop(); + }, + type: DigitButtonType + .tertiary, + size: DigitButtonSize + .large) + ]), + ); + }, + name: e.name?.givenName ?? ' - - ', + years: (e.dateOfBirth == null + ? null + : DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).years), + months: (e.dateOfBirth == null + ? null + : DigitDateUtils.calculateAge( + DigitDateUtils + .getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).months), + gender: e.gender?.name, + localizations: localizations, + projectBeneficiaryClientReferenceId: + projectBeneficiaryId, + ); + }, + ).toList(), + ), + ], + ), + DigitButton( + mainAxisSize: MainAxisSize.max, + onPressed: () => addIndividual( + context, + state.householdMemberWrapper.household!, + ), + label: localizations.translate( + i18.householdOverView + .householdOverViewAddActionText, + ), + prefixIcon: Icons.add_circle, + type: DigitButtonType.tertiary, + size: DigitButtonSize.large, + ), + ]), + ), + ], + ), + ), + ); + }, + ), + ); + } + + addIndividual(BuildContext context, HouseholdModel household) async { + final bloc = context.read(); + + final address = household.address; + + if (address == null) return; + bloc.add( + HouseholdOverviewReloadEvent( + projectId: RegistrationSingleton().projectId!, + projectBeneficiaryType: RegistrationSingleton().beneficiaryType!, + ), + ); + await context.router.push( + BeneficiaryRegistrationWrapperRoute( + initialState: BeneficiaryRegistrationAddMemberState( + addressModel: address, + householdModel: household, + ), + children: [ + IndividualDetailsRoute(), + ], + ), + ); + } + + bool isOutsideProjectDateRange() { + final project = RegistrationSingleton().selectedProject; + + if (project?.startDate != null && project?.endDate != null) { + final now = DateTime.now().millisecondsSinceEpoch; + final startDate = project!.startDate!; + final endDate = project.endDate!; + + return now < startDate || now > endDate; + } + + return false; + } + + void callReloadEvent({ + required int offset, + required int limit, + }) { + if (mounted) { + final bloc = context.read(); + + bloc.add( + HouseholdOverviewReloadEvent( + projectId: RegistrationSingleton().projectId!, + projectBeneficiaryType: RegistrationSingleton().beneficiaryType!, + offset: offset, + limit: limit, + searchByName: searchController.text.trim().length > 2 + ? searchController.text.trim() + : null, + selectedFilter: selectedFilters, + ), + ); + } + } + + getFilterIconNLabel() { + return { + 'label': localizations.translate( + i18.searchBeneficiary.filterLabel, + ), + 'icon': Icons.filter_alt + }; + } + + showFilterDialog() async { + var filters = await showDialog( + context: context, + builder: (ctx) => Popup( + title: getFilterIconNLabel()['label'], + titleIcon: Icon( + getFilterIconNLabel()['icon'], + color: DigitTheme.instance.colorScheme.primary, + ), + onCrossTap: () { + Navigator.of( + context, + rootNavigator: true, + ).pop(); + }, + additionalWidgets: [ + StatusFilter( + selectedFilters: selectedFilters, + ), + ])); + + if (filters != null && filters.isNotEmpty) { + selectedFilters.clear(); + selectedFilters.addAll(filters); + callReloadEvent(offset: 0, limit: 10); + } else { + setState(() { + selectedFilters = []; + }); + + callReloadEvent(offset: 0, limit: 10); + } + } + + String getStatus(String selectedFilter) { + final statusMap = { + Status.closeHousehold.toValue(): Status.closeHousehold, + Status.registered.toValue(): Status.registered, + Status.notRegistered.toValue(): Status.notRegistered, + }; + + var mappedStatus = statusMap.entries + .where((element) => element.value.name == selectedFilter) + .first + .key; + if (mappedStatus != null) { + return mappedStatus; + } else { + return selectedFilter; + } + } + + getFilters() { + bool hasFilters; + if (RegistrationSingleton().householdType == HouseholdType.community) { + hasFilters = RegistrationSingleton().searchCLFFilters != null && + RegistrationSingleton().searchCLFFilters!.isNotEmpty; + } else { + hasFilters = RegistrationSingleton().searchHouseHoldFilter != null && + RegistrationSingleton().searchHouseHoldFilter!.isNotEmpty; + } + return hasFilters; + } +} diff --git a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart b/packages/registration/lib/pages/beneficiary/widgets/household_acknowledgement.dart similarity index 92% rename from packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart rename to packages/registration/lib/pages/beneficiary/widgets/household_acknowledgement.dart index 48fab0b284..c7cd178e2f 100644 --- a/packages/registration_delivery/lib/pages/beneficiary/widgets/household_acknowledgement.dart +++ b/packages/registration/lib/pages/beneficiary/widgets/household_acknowledgement.dart @@ -3,9 +3,9 @@ import 'package:digit_ui_components/digit_components.dart'; import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/registration_delivery.dart'; +import 'package:registration/registration.dart'; -import '../../../router/registration_delivery_router.gm.dart'; +import '../../../router/registration_router.gm.dart'; import '../../../utils/i18_key_constants.dart' as i18; import '../../../widgets/localized.dart'; @@ -62,8 +62,8 @@ class HouseholdAcknowledgementPageState type: DigitButtonType.primary, size: DigitButtonSize.large), DigitButton( - label: localizations - .translate(i18.acknowledgementSuccess.actionLabelText), + label: localizations.translate( + i18.acknowledgementSuccess.actionLabelText), onPressed: () { context .read() diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart b/packages/registration/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart similarity index 94% rename from packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart rename to packages/registration/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart index ec7b4c6317..596a76b143 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart +++ b/packages/registration/lib/pages/beneficiary_registration/beneficiary_acknowledgement.dart @@ -1,68 +1,67 @@ -import 'package:auto_route/auto_route.dart'; -import 'package:digit_ui_components/digit_components.dart'; -import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; - -import '../../../utils/i18_key_constants.dart' as i18; -import '../../../widgets/localized.dart'; -import '../../blocs/search_households/search_bloc_common_wrapper.dart'; -import '../../router/registration_delivery_router.gm.dart'; - -@RoutePage() -class BeneficiaryAcknowledgementPage extends LocalizedStatefulWidget { - final bool? enableViewHousehold; - - const BeneficiaryAcknowledgementPage({ - super.key, - super.appLocalizations, - this.enableViewHousehold, - }); - - @override - State createState() => - BeneficiaryAcknowledgementPageState(); -} - -class BeneficiaryAcknowledgementPageState - extends LocalizedState { - @override - Widget build(BuildContext context) { - return Scaffold( - body: Padding( - padding: const EdgeInsets.all(spacer2), - child: PanelCard( - type: PanelType.success, - title: localizations - .translate(i18.acknowledgementSuccess.acknowledgementLabelText), - actions: [ - DigitButton( - label: localizations.translate( - i18.householdDetails.viewHouseHoldDetailsAction, - ), - onPressed: () { - final bloc = context.read(); - - context.router.popAndPush( - BeneficiaryWrapperRoute( - wrapper: bloc.state.householdMembers.first, - ), - ); - }, - type: DigitButtonType.primary, - size: DigitButtonSize.large), - DigitButton( - label: localizations - .translate(i18.acknowledgementSuccess.actionLabelText), - onPressed: () => context.router.maybePop(), - type: DigitButtonType.secondary, - size: DigitButtonSize.large), - ], - description: localizations.translate( - i18.acknowledgementSuccess.acknowledgementDescriptionText, - ), - ), - ), - ); - } -} +import 'package:auto_route/auto_route.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/widgets/molecules/panel_cards.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import '../../../utils/i18_key_constants.dart' as i18; +import '../../../widgets/localized.dart'; +import '../../blocs/search_households/search_bloc_common_wrapper.dart'; +import '../../router/registration_router.gm.dart'; + +@RoutePage() +class BeneficiaryAcknowledgementPage extends LocalizedStatefulWidget { + final bool? enableViewHousehold; + + const BeneficiaryAcknowledgementPage({ + super.key, + super.appLocalizations, + this.enableViewHousehold, + }); + + @override + State createState() => + BeneficiaryAcknowledgementPageState(); +} + +class BeneficiaryAcknowledgementPageState + extends LocalizedState { + @override + Widget build(BuildContext context) { + return Scaffold( + body: Padding( + padding: const EdgeInsets.all(spacer2), + child: PanelCard( + type: PanelType.success, + title: localizations + .translate(i18.acknowledgementSuccess.acknowledgementLabelText), + actions: [ + DigitButton( + label: localizations.translate( + i18.householdDetails.viewHouseHoldDetailsAction, + ), + onPressed: () { + final bloc = context.read(); + + context.router.popAndPush( + BeneficiaryWrapperRoute( + wrapper: bloc.state.householdMembers.first, + ), + ); + }, + type: DigitButtonType.primary, + size: DigitButtonSize.large), + DigitButton( + label: localizations + .translate(i18.acknowledgementSuccess.actionLabelText), + onPressed: () => context.router.maybePop(), + type: DigitButtonType.secondary, + size: DigitButtonSize.large), + ], + description: localizations.translate( + i18.acknowledgementSuccess.acknowledgementDescriptionText, + ), + ), + ), + ); + } +} diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart b/packages/registration/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart similarity index 78% rename from packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart rename to packages/registration/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart index 059a523e2e..9fc17d21f6 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart +++ b/packages/registration/lib/pages/beneficiary_registration/beneficiary_registration_wrapper.dart @@ -1,116 +1,119 @@ -import 'package:auto_route/auto_route.dart'; -import 'package:digit_data_model/models/entities/individual.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/data/repositories/local/individual_global_search.dart'; -import 'package:registration_delivery/registration_delivery.dart'; - -import '../../utils/extensions/extensions.dart'; - -@RoutePage() -class BeneficiaryRegistrationWrapperPage extends StatelessWidget - implements AutoRouteWrapper { - final BeneficiaryRegistrationState initialState; - - const BeneficiaryRegistrationWrapperPage({ - super.key, - required this.initialState, - }); - - @override - Widget build(BuildContext context) { - return const AutoRouter(); - } - - @override - Widget wrappedRoute(BuildContext context) { - final beneficiaryType = RegistrationDeliverySingleton().beneficiaryType; - final individual = - context.repository(context); - - final household = - context.repository(context); - - final householdMember = context - .repository(context); - - final projectBeneficiary = context.repository(context); - final task = context.repository(context); - final sideEffect = - context.repository(context); - final referral = - context.repository(context); - - final individualGlobalSearch = - context.read(); - - return BlocProvider( - create: (_) => HouseholdOverviewBloc( - HouseholdOverviewState( - householdMemberWrapper: HouseholdMemberWrapper( - household: initialState.householdModel, - headOfHousehold: initialState.maybeWhen( - orElse: () => null, - editHousehold: (addressModel, - householdModel, - individualModel, - registrationDate, - projectBeneficiaryModel, - loading, - headOfHousehold) => - headOfHousehold), - members: initialState.maybeWhen( - orElse: () => null, - editHousehold: (addressModel, - householdModel, - individualModel, - registrationDate, - projectBeneficiaryModel, - loading, - headOfHousehold) => - individualModel, - ), - projectBeneficiaries: initialState.maybeWhen( - orElse: () => null, - editHousehold: (addressModel, - householdModel, - individualModel, - registrationDate, - projectBeneficiaryModel, - loading, - headOfHousehold) => - projectBeneficiaryModel != null - ? [projectBeneficiaryModel] - : [], - ), - ), - ), - individualRepository: individual, - householdRepository: household, - householdMemberRepository: householdMember, - projectBeneficiaryRepository: projectBeneficiary, - beneficiaryType: RegistrationDeliverySingleton().beneficiaryType!, - taskDataRepository: task, - sideEffectDataRepository: sideEffect, - individualGlobalSearchRepository: individualGlobalSearch, - referralDataRepository: referral) - ..add(HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton().selectedProject!.id, - projectBeneficiaryType: - RegistrationDeliverySingleton().beneficiaryType!)), - child: BlocProvider( - create: (context) => BeneficiaryRegistrationBloc( - initialState, - individualRepository: individual, - householdRepository: household, - householdMemberRepository: householdMember, - projectBeneficiaryRepository: projectBeneficiary, - taskDataRepository: task, - beneficiaryType: beneficiaryType!, - ), - child: this, - ), - ); - } -} +import 'package:auto_route/auto_route.dart'; +import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration/data/repositories/local/individual_global_search.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/registration.dart'; + +import '../../utils/extensions/extensions.dart'; +import '../../utils/utils.dart'; + +@RoutePage() +class BeneficiaryRegistrationWrapperPage extends StatelessWidget + implements AutoRouteWrapper { + final BeneficiaryRegistrationState initialState; + + const BeneficiaryRegistrationWrapperPage({ + super.key, + required this.initialState, + }); + + @override + Widget build(BuildContext context) { + return const AutoRouter(); + } + + @override + Widget wrappedRoute(BuildContext context) { + final beneficiaryType = RegistrationSingleton().beneficiaryType; + final individual = + context.repository(context); + + final household = + context.repository(context); + + final householdMember = context + .repository(context); + + final projectBeneficiary = context.repository(context); + // final task = context.repository(context); + // final sideEffect = + // context.repository(context); + // final referral = + // context.repository(context); + + final individualGlobalSearch = + context.read(); + + return BlocProvider( + create: (_) => HouseholdOverviewBloc( + HouseholdOverviewState( + householdMemberWrapper: HouseholdMemberWrapper( + household: initialState.householdModel, + headOfHousehold: initialState.maybeWhen( + orElse: () => null, + editHousehold: (addressModel, + householdModel, + individualModel, + registrationDate, + projectBeneficiaryModel, + loading, + headOfHousehold) => + headOfHousehold), + members: initialState.maybeWhen( + orElse: () => null, + editHousehold: (addressModel, + householdModel, + individualModel, + registrationDate, + projectBeneficiaryModel, + loading, + headOfHousehold) => + individualModel, + ), + projectBeneficiaries: initialState.maybeWhen( + orElse: () => null, + editHousehold: (addressModel, + householdModel, + individualModel, + registrationDate, + projectBeneficiaryModel, + loading, + headOfHousehold) => + projectBeneficiaryModel != null + ? [projectBeneficiaryModel] + : [], + ), + ), + ), + individualRepository: individual, + householdRepository: household, + householdMemberRepository: householdMember, + projectBeneficiaryRepository: projectBeneficiary, + beneficiaryType: RegistrationSingleton().beneficiaryType!, + // taskDataRepository: task, + // sideEffectDataRepository: sideEffect, + individualGlobalSearchRepository: individualGlobalSearch, + // referralDataRepository: referral + ) + ..add(HouseholdOverviewReloadEvent( + projectId: RegistrationSingleton().selectedProject!.id, + projectBeneficiaryType: + RegistrationSingleton().beneficiaryType!)), + child: BlocProvider( + create: (context) => BeneficiaryRegistrationBloc( + initialState, + individualRepository: individual, + householdRepository: household, + householdMemberRepository: householdMember, + projectBeneficiaryRepository: projectBeneficiary, + // taskDataRepository: task, + beneficiaryType: beneficiaryType!, + ), + child: this, + ), + ); + } +} diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart b/packages/registration/lib/pages/beneficiary_registration/house_details.dart similarity index 94% rename from packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart rename to packages/registration/lib/pages/beneficiary_registration/house_details.dart index 78769c254d..18d2dd8f01 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/house_details.dart +++ b/packages/registration/lib/pages/beneficiary_registration/house_details.dart @@ -8,16 +8,15 @@ import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:registration_delivery/registration_delivery.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; - +import 'package:registration/registration.dart'; +import 'package:registration/router/registration_router.gm.dart'; +import 'package:registration/utils/extensions/extensions.dart'; import '../../models/entities/additional_fields_type.dart'; import '../../utils/i18_key_constants.dart' as i18; +import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; import '../../widgets/localized.dart'; import '../../widgets/showcase/config/showcase_constants.dart'; -import '../../widgets/showcase/showcase_button.dart'; @RoutePage() class HouseDetailsPage extends LocalizedStatefulWidget { @@ -103,14 +102,14 @@ class HouseDetailsPageState extends LocalizedState { var houseModel = HouseholdModel( clientReferenceId: IdGen.i.identifier, householdType: - RegistrationDeliverySingleton() + RegistrationSingleton() .householdType, - tenantId: RegistrationDeliverySingleton() + tenantId: RegistrationSingleton() .tenantId, rowVersion: 1, auditDetails: AuditDetails( createdBy: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), @@ -118,12 +117,12 @@ class HouseDetailsPageState extends LocalizedState { memberCount: householdModel?.memberCount, clientAuditDetails: ClientAuditDetails( createdBy: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), lastModifiedBy: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), @@ -231,7 +230,7 @@ class HouseDetailsPageState extends LocalizedState { Padding( padding: EdgeInsets.zero, child: Text( - (RegistrationDeliverySingleton() + (RegistrationSingleton() .householdType == HouseholdType.community) ? localizations.translate( @@ -243,8 +242,7 @@ class HouseDetailsPageState extends LocalizedState { .houseDetailsLabel, ), style: textTheme.headingXl.copyWith( - color: theme.colorTheme.primary.primary2 - ), + color: theme.colorTheme.primary.primary2), ), ), houseShowcaseData.typeOfStructure.buildWith( @@ -255,7 +253,7 @@ class HouseDetailsPageState extends LocalizedState { i18.householdDetails.typeOfStructure), equalWidthOptions: true, allowMultipleSelection: false, - options: RegistrationDeliverySingleton() + options: RegistrationSingleton() .houseStructureTypes ?? [], initialSelection: form @@ -309,7 +307,7 @@ class HouseDetailsPageState extends LocalizedState { child: ReactiveWrapperField( formControlName: _noOfRoomsKey, builder: (field) => LabeledField( - label: (RegistrationDeliverySingleton() + label: (RegistrationSingleton() .householdType == HouseholdType.community) ? localizations.translate(i18 diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart b/packages/registration/lib/pages/beneficiary_registration/household_details.dart similarity index 95% rename from packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart rename to packages/registration/lib/pages/beneficiary_registration/household_details.dart index 60def72752..600ca3043a 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_details.dart +++ b/packages/registration/lib/pages/beneficiary_registration/household_details.dart @@ -10,14 +10,14 @@ import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:registration_delivery/blocs/household_overview/household_overview.dart'; -import 'package:registration_delivery/blocs/search_households/search_households.dart'; -import 'package:registration_delivery/models/entities/additional_fields_type.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; +import 'package:registration/blocs/household_overview/household_overview.dart'; +import 'package:registration/blocs/search_households/search_households.dart'; +import 'package:registration/models/entities/additional_fields_type.dart'; +import 'package:registration/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; import '../../models/entities/household.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_router.gm.dart'; import '../../utils/constants.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; @@ -63,7 +63,7 @@ class HouseHoldDetailsPageState extends LocalizedState { final bloc = context.read(); final router = context.router; final textTheme = theme.digitTextTheme(context); - final bool isCommunity = RegistrationDeliverySingleton().householdType == + final bool isCommunity = RegistrationSingleton().householdType == HouseholdType.community; return Scaffold( @@ -75,7 +75,7 @@ class HouseHoldDetailsPageState extends LocalizedState { int memberCount = form.control(_memberCountKey).value; // Get household type final bool isCommunity = - RegistrationDeliverySingleton().householdType == + RegistrationSingleton().householdType == HouseholdType.community; if (isCommunity) { _pregnantWomenController.text = @@ -95,9 +95,9 @@ class HouseHoldDetailsPageState extends LocalizedState { overviewBloc.add( HouseholdOverviewReloadEvent( projectId: - RegistrationDeliverySingleton().projectId.toString(), + RegistrationSingleton().projectId.toString(), projectBeneficiaryType: - RegistrationDeliverySingleton().beneficiaryType ?? + RegistrationSingleton().beneficiaryType ?? BeneficiaryType.household, ), ); @@ -174,29 +174,29 @@ class HouseHoldDetailsPageState extends LocalizedState { var household = householdModel; household ??= HouseholdModel( tenantId: - RegistrationDeliverySingleton().tenantId, + RegistrationSingleton().tenantId, clientReferenceId: householdModel?.clientReferenceId ?? IdGen.i.identifier, rowVersion: 1, clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() + createdBy: RegistrationSingleton() .loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), lastModifiedBy: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() + createdBy: RegistrationSingleton() .loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), lastModifiedBy: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), @@ -205,33 +205,33 @@ class HouseHoldDetailsPageState extends LocalizedState { household = household.copyWith( rowVersion: 1, - tenantId: RegistrationDeliverySingleton() + tenantId: RegistrationSingleton() .tenantId, clientReferenceId: householdModel?.clientReferenceId ?? IdGen.i.identifier, memberCount: memberCount, clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() + createdBy: RegistrationSingleton() .loggedInUserUuid .toString(), createdTime: context.millisecondsSinceEpoch(), lastModifiedBy: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid .toString(), lastModifiedTime: context.millisecondsSinceEpoch(), ), auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() + createdBy: RegistrationSingleton() .loggedInUserUuid .toString(), createdTime: context.millisecondsSinceEpoch(), lastModifiedBy: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid .toString(), lastModifiedTime: @@ -302,7 +302,7 @@ class HouseHoldDetailsPageState extends LocalizedState { .clientAuditDetails! .createdTime, lastModifiedBy: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid, lastModifiedTime: DateTime.now() .millisecondsSinceEpoch, @@ -356,7 +356,7 @@ class HouseHoldDetailsPageState extends LocalizedState { .clientAuditDetails! .createdTime, lastModifiedBy: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid, lastModifiedTime: context .millisecondsSinceEpoch(), @@ -379,7 +379,7 @@ class HouseHoldDetailsPageState extends LocalizedState { .clientAuditDetails! .createdTime, lastModifiedBy: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid, lastModifiedTime: context .millisecondsSinceEpoch(), @@ -447,7 +447,7 @@ class HouseHoldDetailsPageState extends LocalizedState { child: ReactiveWrapperField( formControlName: _pregnantWomenCountKey, builder: (field) => LabeledField( - label: (RegistrationDeliverySingleton() + label: (RegistrationSingleton() .householdType == HouseholdType.community) ? localizations.translate( @@ -529,7 +529,7 @@ class HouseHoldDetailsPageState extends LocalizedState { child: ReactiveWrapperField( formControlName: _childrenCountKey, builder: (field) => LabeledField( - label: (RegistrationDeliverySingleton() + label: (RegistrationSingleton() .householdType == HouseholdType.community) ? localizations.translate( @@ -607,7 +607,7 @@ class HouseHoldDetailsPageState extends LocalizedState { child: ReactiveWrapperField( formControlName: _memberCountKey, builder: (field) => LabeledField( - label: (RegistrationDeliverySingleton() + label: (RegistrationSingleton() .householdType == HouseholdType.community) ? localizations.translate( diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart b/packages/registration/lib/pages/beneficiary_registration/household_location.dart similarity index 96% rename from packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart rename to packages/registration/lib/pages/beneficiary_registration/household_location.dart index 63f33087f7..b4b38d800b 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/household_location.dart +++ b/packages/registration/lib/pages/beneficiary_registration/household_location.dart @@ -12,10 +12,10 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; +import 'package:registration/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; @@ -73,7 +73,7 @@ class HouseholdLocationPageState extends LocalizedState { final textTheme = theme.digitTextTheme(context); final bloc = context.read(); final router = context.router; - final bool isCommunity = RegistrationDeliverySingleton().householdType == + final bool isCommunity = RegistrationSingleton().householdType == HouseholdType.community; return Scaffold( @@ -190,34 +190,34 @@ class HouseholdLocationPageState extends LocalizedState { form.control(_accuracyKey).value ?? locationState.accuracy, locality: LocalityModel( - code: RegistrationDeliverySingleton() + code: RegistrationSingleton() .boundary! .code!, - name: RegistrationDeliverySingleton() + name: RegistrationSingleton() .boundary! .name, ), tenantId: - RegistrationDeliverySingleton().tenantId, + RegistrationSingleton().tenantId, rowVersion: 1, - buildingName: (RegistrationDeliverySingleton() + buildingName: (RegistrationSingleton() .householdType == HouseholdType.community) ? form.control(_buildingNameKey).value : null, auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton() + createdBy: RegistrationSingleton() .loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), ), clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton() + createdBy: RegistrationSingleton() .loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), lastModifiedBy: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), @@ -261,7 +261,7 @@ class HouseholdLocationPageState extends LocalizedState { type: AddressType.correspondence, latitude: form.control(_latKey).value, longitude: form.control(_lngKey).value, - buildingName: (RegistrationDeliverySingleton() + buildingName: (RegistrationSingleton() .householdType == HouseholdType.community) ? form.control(_buildingNameKey).value @@ -301,7 +301,7 @@ class HouseholdLocationPageState extends LocalizedState { headingStyle: textTheme.headingXl.copyWith( color: theme.colorTheme.primary.primary2 ), - description: (RegistrationDeliverySingleton() + description: (RegistrationSingleton() .householdType == HouseholdType.community) ? null @@ -359,7 +359,7 @@ class HouseholdLocationPageState extends LocalizedState { ), ), ), - if (RegistrationDeliverySingleton().householdType == + if (RegistrationSingleton().householdType == HouseholdType.community) householdLocationShowcaseData.buildingName.buildWith( child: ReactiveWrapperField( @@ -524,7 +524,7 @@ class HouseholdLocationPageState extends LocalizedState { return fb.group({ _administrationAreaKey: FormControl( value: localizations - .translate(RegistrationDeliverySingleton().boundary!.code ?? ''), + .translate(RegistrationSingleton().boundary!.code ?? ''), validators: [Validators.required], ), _addressLine1Key: @@ -560,7 +560,7 @@ class HouseholdLocationPageState extends LocalizedState { _accuracyKey: FormControl( value: addressModel?.locationAccuracy, ), - if (RegistrationDeliverySingleton().householdType == + if (RegistrationSingleton().householdType == HouseholdType.community) _buildingNameKey: FormControl( validators: [ diff --git a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart b/packages/registration/lib/pages/beneficiary_registration/individual_details.dart similarity index 94% rename from packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart rename to packages/registration/lib/pages/beneficiary_registration/individual_details.dart index 6b9a4bb165..6ebe819373 100644 --- a/packages/registration_delivery/lib/pages/beneficiary_registration/individual_details.dart +++ b/packages/registration/lib/pages/beneficiary_registration/individual_details.dart @@ -15,19 +15,19 @@ import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:reactive_forms/reactive_forms.dart'; -import 'package:registration_delivery/blocs/search_households/search_households.dart'; -import 'package:registration_delivery/utils/constants.dart'; -import 'package:registration_delivery/utils/extensions/extensions.dart'; +import 'package:registration/blocs/search_households/search_households.dart'; +import 'package:registration/utils/constants.dart'; +import 'package:registration/utils/extensions/extensions.dart'; import '../../blocs/beneficiary_registration/beneficiary_registration.dart'; import '../../blocs/household_overview/household_overview.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../../utils/utils.dart'; import '../../widgets/back_navigation_help_header.dart'; import '../../widgets/localized.dart'; import '../../widgets/showcase/config/showcase_constants.dart'; -import '../../widgets/showcase/showcase_button.dart'; + @RoutePage() class IndividualDetailsPage extends LocalizedStatefulWidget { @@ -77,9 +77,9 @@ class IndividualDetailsPageState extends LocalizedState { overviewBloc.add( HouseholdOverviewReloadEvent( projectId: - RegistrationDeliverySingleton().projectId.toString(), + RegistrationSingleton().projectId.toString(), projectBeneficiaryType: - RegistrationDeliverySingleton().beneficiaryType ?? + RegistrationSingleton().beneficiaryType ?? BeneficiaryType.household, ), ); @@ -137,10 +137,10 @@ class IndividualDetailsPageState extends LocalizedState { form.control(_genderKey).setErrors({'': true}); }); } - final userId = RegistrationDeliverySingleton() + final userId = RegistrationSingleton() .loggedInUserUuid; final projectId = - RegistrationDeliverySingleton().projectId; + RegistrationSingleton().projectId; form.markAllAsTouched(); if (!form.valid) return; FocusManager.instance.primaryFocus?.unfocus(); @@ -166,7 +166,7 @@ class IndividualDetailsPageState extends LocalizedState { ); final boundary = - RegistrationDeliverySingleton().boundary; + RegistrationSingleton().boundary; bloc.add( BeneficiaryRegistrationSaveIndividualDetailsEvent( @@ -258,7 +258,7 @@ class IndividualDetailsPageState extends LocalizedState { .clientAuditDetails! .createdTime, lastModifiedBy: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid, lastModifiedTime: context .millisecondsSinceEpoch(), @@ -301,16 +301,16 @@ class IndividualDetailsPageState extends LocalizedState { bloc.add( BeneficiaryRegistrationAddMemberEvent( beneficiaryType: - RegistrationDeliverySingleton() + RegistrationSingleton() .beneficiaryType!, householdModel: householdModel, individualModel: individual, addressModel: addressModel, userUuid: - RegistrationDeliverySingleton() + RegistrationSingleton() .loggedInUserUuid!, projectId: - RegistrationDeliverySingleton() + RegistrationSingleton() .projectId!, tag: scannerBloc .state.qrCodes.isNotEmpty @@ -375,7 +375,7 @@ class IndividualDetailsPageState extends LocalizedState { offstage: !widget.isHeadOfHousehold, child: DigitCheckbox( capitalizeFirstLetter: false, - label: (RegistrationDeliverySingleton() + label: (RegistrationSingleton() .householdType == HouseholdType.community) ? localizations.translate( @@ -412,7 +412,7 @@ class IndividualDetailsPageState extends LocalizedState { form.control(_idTypeKey).value), code: form.control(_idTypeKey).value) : const DropdownItem(name: '', code: ''), - items: RegistrationDeliverySingleton() + items: RegistrationSingleton() .idTypeOptions! .map( (e) => DropdownItem( @@ -549,7 +549,7 @@ class IndividualDetailsPageState extends LocalizedState { form.control(_genderKey).value != null ? [form.control(_genderKey).value] : [], - options: RegistrationDeliverySingleton() + options: RegistrationSingleton() .genderOptions! .map( (e) => e, @@ -609,10 +609,10 @@ class IndividualDetailsPageState extends LocalizedState { ), ), // const SizedBox(height: spacer4), - if ((RegistrationDeliverySingleton().beneficiaryType == + if ((RegistrationSingleton().beneficiaryType == BeneficiaryType.household && widget.isHeadOfHousehold) || - (RegistrationDeliverySingleton().beneficiaryType == + (RegistrationSingleton().beneficiaryType == BeneficiaryType.individual)) BlocBuilder( buildWhen: (p, c) { @@ -722,18 +722,18 @@ class IndividualDetailsPageState extends LocalizedState { var individual = oldIndividual; individual ??= IndividualModel( clientReferenceId: IdGen.i.identifier, - tenantId: RegistrationDeliverySingleton().tenantId, + tenantId: RegistrationSingleton().tenantId, rowVersion: 1, auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: RegistrationSingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton().loggedInUserUuid, + lastModifiedBy: RegistrationSingleton().loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: RegistrationSingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton().loggedInUserUuid, + lastModifiedBy: RegistrationSingleton().loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), ); @@ -741,18 +741,18 @@ class IndividualDetailsPageState extends LocalizedState { var name = individual.name; name ??= NameModel( individualClientReferenceId: individual.clientReferenceId, - tenantId: RegistrationDeliverySingleton().tenantId, + tenantId: RegistrationSingleton().tenantId, rowVersion: 1, auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: RegistrationSingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton().loggedInUserUuid, + lastModifiedBy: RegistrationSingleton().loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: RegistrationSingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton().loggedInUserUuid, + lastModifiedBy: RegistrationSingleton().loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), ); @@ -763,18 +763,18 @@ class IndividualDetailsPageState extends LocalizedState { identifier ??= IdentifierModel( clientReferenceId: individual.clientReferenceId, - tenantId: RegistrationDeliverySingleton().tenantId, + tenantId: RegistrationSingleton().tenantId, rowVersion: 1, auditDetails: AuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: RegistrationSingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton().loggedInUserUuid, + lastModifiedBy: RegistrationSingleton().loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), clientAuditDetails: ClientAuditDetails( - createdBy: RegistrationDeliverySingleton().loggedInUserUuid!, + createdBy: RegistrationSingleton().loggedInUserUuid!, createdTime: context.millisecondsSinceEpoch(), - lastModifiedBy: RegistrationDeliverySingleton().loggedInUserUuid, + lastModifiedBy: RegistrationSingleton().loggedInUserUuid, lastModifiedTime: context.millisecondsSinceEpoch(), ), ); @@ -862,7 +862,7 @@ class IndividualDetailsPageState extends LocalizedState { Validators.maxLength(200), ], value: individual?.name?.givenName ?? - ((RegistrationDeliverySingleton().householdType == + ((RegistrationSingleton().householdType == HouseholdType.community) ? null : searchQuery?.trim()), @@ -893,7 +893,7 @@ class IndividualDetailsPageState extends LocalizedState { } getGenderOptions(IndividualModel? individual) { - final options = RegistrationDeliverySingleton().genderOptions; + final options = RegistrationSingleton().genderOptions; return options?.map((e) => e).firstWhereOrNull( (element) => element.toLowerCase() == individual?.gender?.name, diff --git a/packages/registration_delivery/lib/pages/reason_for_deletion.dart b/packages/registration/lib/pages/reason_for_deletion.dart similarity index 92% rename from packages/registration_delivery/lib/pages/reason_for_deletion.dart rename to packages/registration/lib/pages/reason_for_deletion.dart index a9b2a330cc..8e4ed1e775 100644 --- a/packages/registration_delivery/lib/pages/reason_for_deletion.dart +++ b/packages/registration/lib/pages/reason_for_deletion.dart @@ -8,7 +8,7 @@ import 'package:reactive_forms/reactive_forms.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../blocs/household_overview/household_overview.dart'; -import '../router/registration_delivery_router.gm.dart'; +import '../router/registration_router.gm.dart'; import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; import '../widgets/localized.dart'; @@ -64,21 +64,21 @@ class ReasonForDeletionPageState extends LocalizedState { ? context.read().add( HouseholdOverviewDeleteIndividualEvent( projectId: - RegistrationDeliverySingleton() + RegistrationSingleton() .projectId!, householdModel: state .householdMemberWrapper.household!, individualModel: state.selectedIndividual!, projectBeneficiaryType: - RegistrationDeliverySingleton() + RegistrationSingleton() .beneficiaryType!, ), ) : context.read().add( HouseholdOverviewDeleteHouseholdEvent( projectId: - RegistrationDeliverySingleton() + RegistrationSingleton() .projectId!, householdModel: state .householdMemberWrapper.household!, @@ -89,7 +89,7 @@ class ReasonForDeletionPageState extends LocalizedState { .projectBeneficiaries! .first, projectBeneficiaryType: - RegistrationDeliverySingleton() + RegistrationSingleton() .beneficiaryType!, ), ); @@ -112,10 +112,10 @@ class ReasonForDeletionPageState extends LocalizedState { () { reloadState.add( HouseholdOverviewReloadEvent( - projectId: RegistrationDeliverySingleton() + projectId: RegistrationSingleton() .projectId!, projectBeneficiaryType: - RegistrationDeliverySingleton() + RegistrationSingleton() .beneficiaryType!, ), ); @@ -154,7 +154,7 @@ class ReasonForDeletionPageState extends LocalizedState { ), Column( children: widget.isHousholdDelete - ? RegistrationDeliverySingleton() + ? RegistrationSingleton() .householdDeletionReasonOptions! .map((e) => ReactiveRadioListTile( title: Text( @@ -164,7 +164,7 @@ class ReasonForDeletionPageState extends LocalizedState { formControlName: _reasonForDeletionKey, )) .toList() - : RegistrationDeliverySingleton() + : RegistrationSingleton() .householdMemberDeletionReasonOptions! .map((e) => ReactiveRadioListTile( title: Text( diff --git a/packages/registration/lib/pages/registration_wrapper.dart b/packages/registration/lib/pages/registration_wrapper.dart new file mode 100644 index 0000000000..5eaaa5bcc3 --- /dev/null +++ b/packages/registration/lib/pages/registration_wrapper.dart @@ -0,0 +1,154 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:digit_data_model/models/entities/individual.dart'; +import 'package:digit_ui_components/services/location_bloc.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:location/location.dart'; +import 'package:registration/blocs/household_details/household_details.dart'; +import 'package:registration/blocs/search_households/household_global_seach.dart'; +import 'package:registration/blocs/search_households/individual_global_search.dart'; +import 'package:registration/blocs/search_households/search_bloc_common_wrapper.dart'; +import 'package:registration/blocs/search_households/search_households.dart'; +import 'package:registration/blocs/search_households/tag_by_search.dart'; +import 'package:registration/data/repositories/local/household_global_search.dart'; +import 'package:registration/data/repositories/local/individual_global_search.dart'; +import 'package:registration/data/repositories/local/registration_delivery_address.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/utils/extensions/extensions.dart'; +import 'package:registration/utils/utils.dart'; + +import '../models/entities/project_beneficiary.dart'; + +@RoutePage() +class RegistrationWrapperPage extends StatelessWidget { + const RegistrationWrapperPage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: MultiBlocProvider( + providers: [ + BlocProvider( + create: (context) { + return SearchHouseholdsBloc( + beneficiaryType: + RegistrationSingleton().beneficiaryType!, + userUid: RegistrationSingleton().loggedInUserUuid!, + projectId: RegistrationSingleton().projectId!, + addressRepository: + context.read(), + projectBeneficiary: context.repository< + ProjectBeneficiaryModel, + ProjectBeneficiarySearchModel>(context), + householdMember: context.repository(context), + household: + context.repository( + context), + individual: context.repository(context), + individualGlobalSearchRepository: + context.read(), + houseHoldGlobalSearchRepository: + context.read()); + }, + ), + BlocProvider( + create: (context) { + return TagSearchBloc( + beneficiaryType: + RegistrationSingleton().beneficiaryType!, + userUid: RegistrationSingleton().loggedInUserUuid!, + projectId: RegistrationSingleton().projectId!, + addressRepository: + context.read(), + projectBeneficiary: context.repository< + ProjectBeneficiaryModel, + ProjectBeneficiarySearchModel>(context), + householdMember: context.repository(context), + household: + context.repository( + context), + individual: context.repository(context), + individualGlobalSearchRepository: + context.read(), + houseHoldGlobalSearchRepository: + context.read()); + }, + ), + BlocProvider( + create: (context) { + return IndividualGlobalSearchBloc( + beneficiaryType: + RegistrationSingleton().beneficiaryType!, + userUid: RegistrationSingleton().loggedInUserUuid!, + projectId: RegistrationSingleton().projectId!, + addressRepository: + context.read(), + projectBeneficiary: context.repository< + ProjectBeneficiaryModel, + ProjectBeneficiarySearchModel>(context), + householdMember: context.repository(context), + household: + context.repository( + context), + individual: context.repository(context), + individualGlobalSearchRepository: + context.read(), + houseHoldGlobalSearchRepository: + context.read()); + }, + ), + BlocProvider( + create: (context) { + return HouseHoldGlobalSearchBloc( + beneficiaryType: + RegistrationSingleton().beneficiaryType!, + userUid: RegistrationSingleton().loggedInUserUuid!, + projectId: RegistrationSingleton().projectId!, + addressRepository: + context.read(), + projectBeneficiary: context.repository< + ProjectBeneficiaryModel, + ProjectBeneficiarySearchModel>(context), + householdMember: context.repository(context), + household: + context.repository( + context), + individual: context.repository(context), + individualGlobalSearchRepository: + context.read(), + houseHoldGlobalSearchRepository: + context.read()); + }, + ), + BlocProvider( + create: (context) { + return SearchBlocWrapper( + searchHouseholdsBloc: context.read(), + tagSearchBloc: context.read(), + individualGlobalSearchBloc: + context.read(), + houseHoldGlobalSearchBloc: + context.read()); + }, + ), + BlocProvider( + create: (_) => HouseholdDetailsBloc(const HouseholdDetailsState()), + ), + BlocProvider( + create: (_) => LocationBloc(location: Location()), + ), + ], + child: const AutoRouter(), + ), + ); + } +} diff --git a/packages/registration_delivery/lib/pages/search_beneficiary.dart b/packages/registration/lib/pages/search_beneficiary.dart similarity index 92% rename from packages/registration_delivery/lib/pages/search_beneficiary.dart rename to packages/registration/lib/pages/search_beneficiary.dart index 48ee6ace07..8aab1eaf91 100644 --- a/packages/registration_delivery/lib/pages/search_beneficiary.dart +++ b/packages/registration/lib/pages/search_beneficiary.dart @@ -14,17 +14,18 @@ import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; -import 'package:registration_delivery/registration_delivery.dart'; +import 'package:registration/registration.dart'; +import 'package:registration/widgets/status_filter/status_filter.dart'; import '../../utils/i18_key_constants.dart' as i18; -import '../models/entities/status.dart'; -import '../router/registration_delivery_router.gm.dart'; + +import '../router/registration_router.gm.dart'; import '../utils/global_search_parameters.dart'; import '../utils/utils.dart'; import '../widgets/back_navigation_help_header.dart'; + import '../widgets/beneficiary/view_beneficiary_card.dart'; import '../widgets/localized.dart'; -import '../widgets/status_filter/status_filter.dart'; @RoutePage() class SearchBeneficiaryPage extends LocalizedStatefulWidget { @@ -110,13 +111,13 @@ class _SearchBeneficiaryPageState alignment: Alignment.topLeft, child: Text( localizations.translate( - RegistrationDeliverySingleton().householdType != + RegistrationSingleton().householdType != null && - RegistrationDeliverySingleton() + RegistrationSingleton() .householdType == HouseholdType.community ? i18.searchBeneficiary.searchCLFLabel - : RegistrationDeliverySingleton() + : RegistrationSingleton() .beneficiaryType != BeneficiaryType.individual ? i18 @@ -143,7 +144,7 @@ class _SearchBeneficiaryPageState child: DigitSwitch( mainAxisAlignment: MainAxisAlignment.start, - label: (RegistrationDeliverySingleton() + label: (RegistrationSingleton() .householdType == HouseholdType.community) ? localizations.translate( @@ -167,7 +168,7 @@ class _SearchBeneficiaryPageState value && locationState.latitude != null && locationState.longitude != null && - RegistrationDeliverySingleton() + RegistrationSingleton() .maxRadius != null && isProximityEnabled) { @@ -184,7 +185,7 @@ class _SearchBeneficiaryPageState padding: const EdgeInsets.all(spacer2), child: DigitSearchBar( controller: searchController, - hintText: (RegistrationDeliverySingleton() + hintText: (RegistrationSingleton() .householdType == HouseholdType.community) ? localizations.translate(i18 @@ -202,13 +203,13 @@ class _SearchBeneficiaryPageState }, ), ), - RegistrationDeliverySingleton() + RegistrationSingleton() .searchHouseHoldFilter != null && - RegistrationDeliverySingleton() + RegistrationSingleton() .searchHouseHoldFilter! .isNotEmpty && - RegistrationDeliverySingleton() + RegistrationSingleton() .householdType != HouseholdType.community ? Align( @@ -272,7 +273,7 @@ class _SearchBeneficiaryPageState left: spacer2, top: spacer2, right: spacer2), child: InfoCard( type: InfoType.info, - description: (RegistrationDeliverySingleton() + description: (RegistrationSingleton() .householdType == HouseholdType.community) ? localizations.translate( @@ -305,7 +306,7 @@ class _SearchBeneficiaryPageState ? scannerState.qrCodes.lastOrNull! : '', projectId: - RegistrationDeliverySingleton().projectId!, + RegistrationSingleton().projectId!, ), ); } @@ -341,11 +342,7 @@ class _SearchBeneficiaryPageState const DigitScannerEvent.handleScanner(), ); - if ((i.tasks != null && - i.tasks?.lastOrNull!.status == - Status.closeHousehold.toValue() && - (i.tasks ?? []).isNotEmpty) || - (i.projectBeneficiaries ?? []).isEmpty) { + if ((i.projectBeneficiaries ?? []).isEmpty) { setState(() { selectedFilters = []; }); @@ -364,7 +361,7 @@ class _SearchBeneficiaryPageState ?.lastOrNull : null, addressModel: - (RegistrationDeliverySingleton() + (RegistrationSingleton() .householdType == HouseholdType .community) @@ -403,7 +400,7 @@ class _SearchBeneficiaryPageState ), ), bottomNavigationBar: Offstage( - offstage: RegistrationDeliverySingleton().householdType == + offstage: RegistrationSingleton().householdType == HouseholdType.community && searchController.text.length < 3, child: DigitCard( @@ -412,7 +409,7 @@ class _SearchBeneficiaryPageState children: [ DigitButton( capitalizeLetters: false, - label: (RegistrationDeliverySingleton().householdType == + label: (RegistrationSingleton().householdType == HouseholdType.community) ? localizations .translate(i18.searchBeneficiary.clfAddActionLabel) @@ -523,7 +520,7 @@ class _SearchBeneficiaryPageState if (!isPagination) { blocWrapper.clearEvent(); } - if (RegistrationDeliverySingleton().beneficiaryType == + if (RegistrationSingleton().beneficiaryType == BeneficiaryType.individual) { if (isProximityEnabled || selectedFilters.isNotEmpty || @@ -533,9 +530,9 @@ class _SearchBeneficiaryPageState globalSearchParams: GlobalSearchParameters( isProximityEnabled: isProximityEnabled, latitude: lat, - projectId: RegistrationDeliverySingleton().projectId!, + projectId: RegistrationSingleton().projectId!, longitude: long, - maxRadius: RegistrationDeliverySingleton().maxRadius, + maxRadius: RegistrationSingleton().maxRadius, nameSearch: searchController.text.trim().length > 2 ? searchController.text.trim() : blocWrapper.searchHouseholdsBloc.state.searchQuery, @@ -546,7 +543,7 @@ class _SearchBeneficiaryPageState limit: isPagination ? blocWrapper.individualGlobalSearchBloc.state.limit : limit, - householdType: RegistrationDeliverySingleton().householdType, + householdType: RegistrationSingleton().householdType, ))); } } else { @@ -559,8 +556,8 @@ class _SearchBeneficiaryPageState isProximityEnabled: isProximityEnabled, latitude: lat, longitude: long, - projectId: RegistrationDeliverySingleton().projectId!, - maxRadius: RegistrationDeliverySingleton().maxRadius, + projectId: RegistrationSingleton().projectId!, + maxRadius: RegistrationSingleton().maxRadius, nameSearch: searchController.text.trim().length > 2 ? searchController.text.trim() : blocWrapper.searchHouseholdsBloc.state.searchQuery, @@ -571,7 +568,7 @@ class _SearchBeneficiaryPageState limit: isPagination ? blocWrapper.houseHoldGlobalSearchBloc.state.limit : limit, - householdType: RegistrationDeliverySingleton().householdType, + householdType: RegistrationSingleton().householdType, ))); } } diff --git a/packages/registration_delivery/lib/pages/summary_page.dart b/packages/registration/lib/pages/summary_page.dart similarity index 96% rename from packages/registration_delivery/lib/pages/summary_page.dart rename to packages/registration/lib/pages/summary_page.dart index d1189e9bae..11ee1fc472 100644 --- a/packages/registration_delivery/lib/pages/summary_page.dart +++ b/packages/registration/lib/pages/summary_page.dart @@ -8,10 +8,9 @@ import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; import 'package:digit_ui_components/widgets/molecules/label_value_summary.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:registration_delivery/models/entities/additional_fields_type.dart'; -import 'package:registration_delivery/router/registration_delivery_router.gm.dart'; -import 'package:registration_delivery/widgets/back_navigation_help_header.dart'; -import 'package:registration_delivery/widgets/showcase/showcase_button.dart'; +import 'package:registration/models/entities/additional_fields_type.dart'; +import 'package:registration/router/registration_router.gm.dart'; +import 'package:registration/widgets/back_navigation_help_header.dart'; import '../../../widgets/localized.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -48,9 +47,9 @@ class SummaryPageState extends LocalizedState { onPopInvoked: (val) { context.read().add( BeneficiaryRegistrationCreateEvent( - projectId: RegistrationDeliverySingleton().projectId!, - userUuid: RegistrationDeliverySingleton().loggedInUserUuid!, - boundary: RegistrationDeliverySingleton().boundary!, + projectId: RegistrationSingleton().projectId!, + userUuid: RegistrationSingleton().loggedInUserUuid!, + boundary: RegistrationSingleton().boundary!, ), ); }, @@ -69,7 +68,7 @@ class SummaryPageState extends LocalizedState { context.read().searchHouseholdsBloc.add( SearchHouseholdsEvent.searchByHousehold( householdModel: value.householdModel, - projectId: RegistrationDeliverySingleton().projectId!, + projectId: RegistrationSingleton().projectId!, isProximityEnabled: false, ), ); @@ -124,10 +123,10 @@ class SummaryPageState extends LocalizedState { onPressed: () async { final bloc = context.read(); - final userId = RegistrationDeliverySingleton() + final userId = RegistrationSingleton() .loggedInUserUuid; final projectId = - RegistrationDeliverySingleton().projectId; + RegistrationSingleton().projectId; householdState.maybeWhen( orElse: () { @@ -187,7 +186,7 @@ class SummaryPageState extends LocalizedState { projectId: projectId!, userUuid: userId!, boundary: - RegistrationDeliverySingleton() + RegistrationSingleton() .boundary!, tag: projectBeneficiaryModel?.tag, navigateToSummary: false), diff --git a/packages/registration_delivery/lib/registration_delivery.dart b/packages/registration/lib/registration.dart similarity index 61% rename from packages/registration_delivery/lib/registration_delivery.dart rename to packages/registration/lib/registration.dart index ff2e0209d8..4e429276f1 100644 --- a/packages/registration_delivery/lib/registration_delivery.dart +++ b/packages/registration/lib/registration.dart @@ -6,55 +6,32 @@ library registration_delivery; import 'package:dart_mappable/dart_mappable.dart'; export 'blocs/beneficiary_registration/beneficiary_registration.dart'; -export 'blocs/delivery_intervention/deliver_intervention.dart'; export 'blocs/household_details/household_details.dart'; export 'blocs/household_location/household_location.dart'; export 'blocs/household_overview/household_overview.dart'; -export 'blocs/referral_management/referral_management.dart'; export 'blocs/search_households/search_bloc_common_wrapper.dart'; export 'blocs/search_households/search_households.dart'; export 'blocs/search_households/tag_by_search.dart'; -export 'blocs/side_effects/side_effects.dart'; export 'data/repositories/local/base/household_base.dart'; export 'data/repositories/local/base/household_member_base.dart'; export 'data/repositories/local/base/project_beneficiary_base.dart'; -export 'data/repositories/local/base/side_effect_base.dart'; -export 'data/repositories/local/base/task_base.dart'; export 'data/repositories/local/household.dart'; export 'data/repositories/local/household_member.dart'; export 'data/repositories/local/project_beneficiary.dart'; -export 'data/repositories/local/referral.dart'; export 'data/repositories/local/registration_delivery_address.dart'; -export 'data/repositories/local/side_effect.dart'; -export 'data/repositories/local/task.dart'; export 'data/repositories/oplog/oplog.dart'; export 'data/repositories/remote/household.dart'; export 'data/repositories/remote/household_member.dart'; -export 'data/repositories/remote/project_beneficiary.dart'; -export 'data/repositories/remote/referral.dart'; -export 'data/repositories/remote/side_effect.dart'; -export 'data/repositories/remote/task.dart'; +export 'data/repositories/local/base/project_beneficiary.dart'; export 'models/entities/household.dart'; export 'models/entities/household_member.dart'; export 'models/entities/project_beneficiary.dart'; -export 'models/entities/referral.dart'; export 'models/entities/registration_delivery_enums.dart'; -export 'models/entities/side_effect.dart'; -export 'models/entities/task.dart'; -export 'models/entities/task_resource.dart'; export 'pages/beneficiary/beneficiary_details.dart'; export 'pages/beneficiary/beneficiary_wrapper.dart'; -export 'pages/beneficiary/deliver_intervention.dart'; -export 'pages/beneficiary/dose_administered.dart'; -export 'pages/beneficiary/facility_selection.dart'; + export 'pages/beneficiary/household_overview.dart'; -export 'pages/beneficiary/record_past_delivery_details.dart'; -export 'pages/beneficiary/refer_beneficiary.dart'; -export 'pages/beneficiary/side_effects.dart'; export 'pages/beneficiary/widgets/household_acknowledgement.dart'; -export 'pages/beneficiary/widgets/past_delivery.dart'; -export 'pages/beneficiary/widgets/record_delivery_cycle.dart'; -export 'pages/beneficiary/widgets/splash_acknowledgement.dart'; export 'pages/beneficiary_registration/beneficiary_acknowledgement.dart'; export 'pages/beneficiary_registration/beneficiary_registration_wrapper.dart'; export 'pages/beneficiary_registration/house_details.dart'; @@ -62,12 +39,12 @@ export 'pages/beneficiary_registration/household_details.dart'; export 'pages/beneficiary_registration/household_location.dart'; export 'pages/beneficiary_registration/individual_details.dart'; export 'pages/reason_for_deletion.dart'; -export 'pages/registration_delivery_wrapper.dart'; +export 'pages/registration_wrapper.dart'; export 'pages/search_beneficiary.dart'; export 'pages/summary_page.dart'; -export 'router/registration_delivery_router.dart'; +export 'router/registration_router.dart'; export 'utils/typedefs.dart'; -export 'utils/utils.dart' show RegistrationDeliverySingleton; +export 'utils/utils.dart' show RegistrationSingleton; export 'widgets/beneficiary/beneficiary_card.dart'; export 'widgets/beneficiary/beneficiary_statistics_card.dart'; export 'widgets/progress_bar/beneficiary_progress.dart'; diff --git a/packages/registration/lib/registration.init.dart b/packages/registration/lib/registration.init.dart new file mode 100644 index 0000000000..4c377f6c10 --- /dev/null +++ b/packages/registration/lib/registration.init.dart @@ -0,0 +1,28 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element + +import 'models/entities/additional_fields_type.dart' as p0; +import 'models/entities/household.dart' as p1; +import 'models/entities/household_member.dart' as p2; +import 'models/entities/project_beneficiary.dart' as p3; +import 'models/entities/reg_form_validations_type.dart' as p4; +import 'models/entities/registration_delivery_enums.dart' as p5; +import 'models/entities/status.dart' as p6; + +void initializeMappers() { + p0.AdditionalFieldsTypeMapper.ensureInitialized(); + p1.HouseholdSearchModelMapper.ensureInitialized(); + p1.HouseholdModelMapper.ensureInitialized(); + p1.HouseholdAdditionalFieldsMapper.ensureInitialized(); + p2.HouseholdMemberSearchModelMapper.ensureInitialized(); + p2.HouseholdMemberModelMapper.ensureInitialized(); + p2.HouseholdMemberAdditionalFieldsMapper.ensureInitialized(); + p3.ProjectBeneficiarySearchModelMapper.ensureInitialized(); + p3.ProjectBeneficiaryModelMapper.ensureInitialized(); + p3.ProjectBeneficiaryAdditionalFieldsMapper.ensureInitialized(); + p4.RegFormValidationsMapper.ensureInitialized(); + p5.RegistrationDeliveryEnumsMapper.ensureInitialized(); + p6.StatusMapper.ensureInitialized(); +} diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.dart b/packages/registration/lib/router/registration_router.dart similarity index 58% rename from packages/registration_delivery/lib/router/registration_delivery_router.dart rename to packages/registration/lib/router/registration_router.dart index 6767999197..ce7bce6cb6 100644 --- a/packages/registration_delivery/lib/router/registration_delivery_router.dart +++ b/packages/registration/lib/router/registration_router.dart @@ -1,14 +1,14 @@ import 'package:auto_route/auto_route.dart'; -import 'registration_delivery_router.gm.dart'; +import 'registration_router.gm.dart'; @AutoRouterConfig.module() -class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { +class RegistrationRoute extends $RegistrationRoute { RouteType get defaultRouteType => const RouteType.material(); List get routes => [ AutoRoute( - page: RegistrationDeliveryWrapperRoute.page, + page: RegistrationWrapperRoute.page, path: 'registration-delivery-wrapper', children: [ AutoRoute( @@ -57,54 +57,14 @@ class RegistrationDeliveryRoute extends $RegistrationDeliveryRoute { page: BeneficiaryDetailsRoute.page, path: 'beneficiary-details', ), - AutoRoute( - page: BeneficiaryChecklistRoute.page, - path: 'beneficiary-checklist', - ), - AutoRoute( - page: BeneficiaryChecklistRoute.page, - path: 'beneficiary-checklist', - ), - AutoRoute( - page: DeliverInterventionRoute.page, - path: 'deliver-intervention', - ), - AutoRoute( - page: RefusedDeliveryRoute.page, - path: 'refused-delivery', - ), - AutoRoute( - page: SideEffectsRoute.page, - path: 'side-effects', - ), - AutoRoute( - page: ReferBeneficiaryRoute.page, - path: 'refer-beneficiary', - ), - AutoRoute( - page: DoseAdministeredRoute.page, - path: 'dose-administered', - ), - AutoRoute( - page: SplashAcknowledgementRoute.page, - path: 'splash-acknowledgement', - ), AutoRoute( page: ReasonForDeletionRoute.page, path: 'reason-for-deletion', ), - AutoRoute( - page: RecordPastDeliveryDetailsRoute.page, - path: 'record-past-delivery-details', - ), AutoRoute( page: HouseholdAcknowledgementRoute.page, path: 'household-acknowledgement', ), - AutoRoute( - page: DeliverySummaryRoute.page, - path: 'delivery-summary', - ), ], ), ]), diff --git a/packages/registration/lib/router/registration_router.gm.dart b/packages/registration/lib/router/registration_router.gm.dart new file mode 100644 index 0000000000..74ee167ba8 --- /dev/null +++ b/packages/registration/lib/router/registration_router.gm.dart @@ -0,0 +1,740 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ************************************************************************** +// AutoRouterGenerator +// ************************************************************************** + +// ignore_for_file: type=lint +// coverage:ignore-file + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:auto_route/auto_route.dart' as _i15; +import 'package:flutter/material.dart' as _i16; +import 'package:registration/blocs/app_localization.dart' as _i17; +import 'package:registration/blocs/search_households/search_households.dart' + as _i19; +import 'package:registration/pages/beneficiary/beneficiary_details.dart' as _i2; +import 'package:registration/pages/beneficiary/beneficiary_wrapper.dart' as _i4; +import 'package:registration/pages/beneficiary/household_overview.dart' as _i9; +import 'package:registration/pages/beneficiary/widgets/household_acknowledgement.dart' + as _i7; +import 'package:registration/pages/beneficiary_registration/beneficiary_acknowledgement.dart' + as _i1; +import 'package:registration/pages/beneficiary_registration/beneficiary_registration_wrapper.dart' + as _i3; +import 'package:registration/pages/beneficiary_registration/house_details.dart' + as _i5; +import 'package:registration/pages/beneficiary_registration/household_details.dart' + as _i6; +import 'package:registration/pages/beneficiary_registration/household_location.dart' + as _i8; +import 'package:registration/pages/beneficiary_registration/individual_details.dart' + as _i10; +import 'package:registration/pages/reason_for_deletion.dart' as _i11; +import 'package:registration/pages/registration_wrapper.dart' as _i12; +import 'package:registration/pages/search_beneficiary.dart' as _i13; +import 'package:registration/pages/summary_page.dart' as _i14; +import 'package:registration/registration.dart' as _i18; + +abstract class $RegistrationRoute extends _i15.AutoRouterModule { + @override + final Map pagesMap = { + BeneficiaryAcknowledgementRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const BeneficiaryAcknowledgementRouteArgs()); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i1.BeneficiaryAcknowledgementPage( + key: args.key, + appLocalizations: args.appLocalizations, + enableViewHousehold: args.enableViewHousehold, + ), + ); + }, + BeneficiaryDetailsRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const BeneficiaryDetailsRouteArgs()); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i2.BeneficiaryDetailsPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + BeneficiaryRegistrationWrapperRoute.name: (routeData) { + final args = routeData.argsAs(); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i15.WrappedRoute( + child: _i3.BeneficiaryRegistrationWrapperPage( + key: args.key, + initialState: args.initialState, + )), + ); + }, + BeneficiaryWrapperRoute.name: (routeData) { + final args = routeData.argsAs(); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i4.BeneficiaryWrapperPage( + key: args.key, + wrapper: args.wrapper, + isEditing: args.isEditing, + ), + ); + }, + HouseDetailsRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const HouseDetailsRouteArgs()); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i5.HouseDetailsPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + HouseHoldDetailsRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const HouseHoldDetailsRouteArgs()); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i6.HouseHoldDetailsPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + HouseholdAcknowledgementRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const HouseholdAcknowledgementRouteArgs()); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i7.HouseholdAcknowledgementPage( + key: args.key, + appLocalizations: args.appLocalizations, + enableViewHousehold: args.enableViewHousehold, + ), + ); + }, + HouseholdLocationRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const HouseholdLocationRouteArgs()); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i8.HouseholdLocationPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + HouseholdOverviewRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const HouseholdOverviewRouteArgs()); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i9.HouseholdOverviewPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + IndividualDetailsRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const IndividualDetailsRouteArgs()); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i10.IndividualDetailsPage( + key: args.key, + appLocalizations: args.appLocalizations, + isHeadOfHousehold: args.isHeadOfHousehold, + ), + ); + }, + ReasonForDeletionRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const ReasonForDeletionRouteArgs()); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i11.ReasonForDeletionPage( + key: args.key, + appLocalizations: args.appLocalizations, + isHousholdDelete: args.isHousholdDelete, + ), + ); + }, + RegistrationWrapperRoute.name: (routeData) { + return _i15.AutoRoutePage( + routeData: routeData, + child: const _i12.RegistrationWrapperPage(), + ); + }, + SearchBeneficiaryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const SearchBeneficiaryRouteArgs()); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i13.SearchBeneficiaryPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + SummaryRoute.name: (routeData) { + final args = routeData.argsAs( + orElse: () => const SummaryRouteArgs()); + return _i15.AutoRoutePage( + routeData: routeData, + child: _i14.SummaryPage( + key: args.key, + appLocalizations: args.appLocalizations, + ), + ); + }, + }; +} + +/// generated route for +/// [_i1.BeneficiaryAcknowledgementPage] +class BeneficiaryAcknowledgementRoute + extends _i15.PageRouteInfo { + BeneficiaryAcknowledgementRoute({ + _i16.Key? key, + _i17.RegistrationLocalization? appLocalizations, + bool? enableViewHousehold, + List<_i15.PageRouteInfo>? children, + }) : super( + BeneficiaryAcknowledgementRoute.name, + args: BeneficiaryAcknowledgementRouteArgs( + key: key, + appLocalizations: appLocalizations, + enableViewHousehold: enableViewHousehold, + ), + initialChildren: children, + ); + + static const String name = 'BeneficiaryAcknowledgementRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class BeneficiaryAcknowledgementRouteArgs { + const BeneficiaryAcknowledgementRouteArgs({ + this.key, + this.appLocalizations, + this.enableViewHousehold, + }); + + final _i16.Key? key; + + final _i17.RegistrationLocalization? appLocalizations; + + final bool? enableViewHousehold; + + @override + String toString() { + return 'BeneficiaryAcknowledgementRouteArgs{key: $key, appLocalizations: $appLocalizations, enableViewHousehold: $enableViewHousehold}'; + } +} + +/// generated route for +/// [_i2.BeneficiaryDetailsPage] +class BeneficiaryDetailsRoute + extends _i15.PageRouteInfo { + BeneficiaryDetailsRoute({ + _i16.Key? key, + _i17.RegistrationLocalization? appLocalizations, + List<_i15.PageRouteInfo>? children, + }) : super( + BeneficiaryDetailsRoute.name, + args: BeneficiaryDetailsRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'BeneficiaryDetailsRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class BeneficiaryDetailsRouteArgs { + const BeneficiaryDetailsRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i16.Key? key; + + final _i17.RegistrationLocalization? appLocalizations; + + @override + String toString() { + return 'BeneficiaryDetailsRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i3.BeneficiaryRegistrationWrapperPage] +class BeneficiaryRegistrationWrapperRoute + extends _i15.PageRouteInfo { + BeneficiaryRegistrationWrapperRoute({ + _i16.Key? key, + required _i18.BeneficiaryRegistrationState initialState, + List<_i15.PageRouteInfo>? children, + }) : super( + BeneficiaryRegistrationWrapperRoute.name, + args: BeneficiaryRegistrationWrapperRouteArgs( + key: key, + initialState: initialState, + ), + initialChildren: children, + ); + + static const String name = 'BeneficiaryRegistrationWrapperRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class BeneficiaryRegistrationWrapperRouteArgs { + const BeneficiaryRegistrationWrapperRouteArgs({ + this.key, + required this.initialState, + }); + + final _i16.Key? key; + + final _i18.BeneficiaryRegistrationState initialState; + + @override + String toString() { + return 'BeneficiaryRegistrationWrapperRouteArgs{key: $key, initialState: $initialState}'; + } +} + +/// generated route for +/// [_i4.BeneficiaryWrapperPage] +class BeneficiaryWrapperRoute + extends _i15.PageRouteInfo { + BeneficiaryWrapperRoute({ + _i16.Key? key, + required _i19.HouseholdMemberWrapper wrapper, + bool isEditing = false, + List<_i15.PageRouteInfo>? children, + }) : super( + BeneficiaryWrapperRoute.name, + args: BeneficiaryWrapperRouteArgs( + key: key, + wrapper: wrapper, + isEditing: isEditing, + ), + initialChildren: children, + ); + + static const String name = 'BeneficiaryWrapperRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class BeneficiaryWrapperRouteArgs { + const BeneficiaryWrapperRouteArgs({ + this.key, + required this.wrapper, + this.isEditing = false, + }); + + final _i16.Key? key; + + final _i19.HouseholdMemberWrapper wrapper; + + final bool isEditing; + + @override + String toString() { + return 'BeneficiaryWrapperRouteArgs{key: $key, wrapper: $wrapper, isEditing: $isEditing}'; + } +} + +/// generated route for +/// [_i5.HouseDetailsPage] +class HouseDetailsRoute extends _i15.PageRouteInfo { + HouseDetailsRoute({ + _i16.Key? key, + _i17.RegistrationLocalization? appLocalizations, + List<_i15.PageRouteInfo>? children, + }) : super( + HouseDetailsRoute.name, + args: HouseDetailsRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'HouseDetailsRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class HouseDetailsRouteArgs { + const HouseDetailsRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i16.Key? key; + + final _i17.RegistrationLocalization? appLocalizations; + + @override + String toString() { + return 'HouseDetailsRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i6.HouseHoldDetailsPage] +class HouseHoldDetailsRoute + extends _i15.PageRouteInfo { + HouseHoldDetailsRoute({ + _i16.Key? key, + _i17.RegistrationLocalization? appLocalizations, + List<_i15.PageRouteInfo>? children, + }) : super( + HouseHoldDetailsRoute.name, + args: HouseHoldDetailsRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'HouseHoldDetailsRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class HouseHoldDetailsRouteArgs { + const HouseHoldDetailsRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i16.Key? key; + + final _i17.RegistrationLocalization? appLocalizations; + + @override + String toString() { + return 'HouseHoldDetailsRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i7.HouseholdAcknowledgementPage] +class HouseholdAcknowledgementRoute + extends _i15.PageRouteInfo { + HouseholdAcknowledgementRoute({ + _i16.Key? key, + _i17.RegistrationLocalization? appLocalizations, + bool? enableViewHousehold, + List<_i15.PageRouteInfo>? children, + }) : super( + HouseholdAcknowledgementRoute.name, + args: HouseholdAcknowledgementRouteArgs( + key: key, + appLocalizations: appLocalizations, + enableViewHousehold: enableViewHousehold, + ), + initialChildren: children, + ); + + static const String name = 'HouseholdAcknowledgementRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class HouseholdAcknowledgementRouteArgs { + const HouseholdAcknowledgementRouteArgs({ + this.key, + this.appLocalizations, + this.enableViewHousehold, + }); + + final _i16.Key? key; + + final _i17.RegistrationLocalization? appLocalizations; + + final bool? enableViewHousehold; + + @override + String toString() { + return 'HouseholdAcknowledgementRouteArgs{key: $key, appLocalizations: $appLocalizations, enableViewHousehold: $enableViewHousehold}'; + } +} + +/// generated route for +/// [_i8.HouseholdLocationPage] +class HouseholdLocationRoute + extends _i15.PageRouteInfo { + HouseholdLocationRoute({ + _i16.Key? key, + _i17.RegistrationLocalization? appLocalizations, + List<_i15.PageRouteInfo>? children, + }) : super( + HouseholdLocationRoute.name, + args: HouseholdLocationRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'HouseholdLocationRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class HouseholdLocationRouteArgs { + const HouseholdLocationRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i16.Key? key; + + final _i17.RegistrationLocalization? appLocalizations; + + @override + String toString() { + return 'HouseholdLocationRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i9.HouseholdOverviewPage] +class HouseholdOverviewRoute + extends _i15.PageRouteInfo { + HouseholdOverviewRoute({ + _i16.Key? key, + _i17.RegistrationLocalization? appLocalizations, + List<_i15.PageRouteInfo>? children, + }) : super( + HouseholdOverviewRoute.name, + args: HouseholdOverviewRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'HouseholdOverviewRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class HouseholdOverviewRouteArgs { + const HouseholdOverviewRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i16.Key? key; + + final _i17.RegistrationLocalization? appLocalizations; + + @override + String toString() { + return 'HouseholdOverviewRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i10.IndividualDetailsPage] +class IndividualDetailsRoute + extends _i15.PageRouteInfo { + IndividualDetailsRoute({ + _i16.Key? key, + _i17.RegistrationLocalization? appLocalizations, + bool isHeadOfHousehold = false, + List<_i15.PageRouteInfo>? children, + }) : super( + IndividualDetailsRoute.name, + args: IndividualDetailsRouteArgs( + key: key, + appLocalizations: appLocalizations, + isHeadOfHousehold: isHeadOfHousehold, + ), + initialChildren: children, + ); + + static const String name = 'IndividualDetailsRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class IndividualDetailsRouteArgs { + const IndividualDetailsRouteArgs({ + this.key, + this.appLocalizations, + this.isHeadOfHousehold = false, + }); + + final _i16.Key? key; + + final _i17.RegistrationLocalization? appLocalizations; + + final bool isHeadOfHousehold; + + @override + String toString() { + return 'IndividualDetailsRouteArgs{key: $key, appLocalizations: $appLocalizations, isHeadOfHousehold: $isHeadOfHousehold}'; + } +} + +/// generated route for +/// [_i11.ReasonForDeletionPage] +class ReasonForDeletionRoute + extends _i15.PageRouteInfo { + ReasonForDeletionRoute({ + _i16.Key? key, + _i17.RegistrationLocalization? appLocalizations, + bool isHousholdDelete = false, + List<_i15.PageRouteInfo>? children, + }) : super( + ReasonForDeletionRoute.name, + args: ReasonForDeletionRouteArgs( + key: key, + appLocalizations: appLocalizations, + isHousholdDelete: isHousholdDelete, + ), + initialChildren: children, + ); + + static const String name = 'ReasonForDeletionRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class ReasonForDeletionRouteArgs { + const ReasonForDeletionRouteArgs({ + this.key, + this.appLocalizations, + this.isHousholdDelete = false, + }); + + final _i16.Key? key; + + final _i17.RegistrationLocalization? appLocalizations; + + final bool isHousholdDelete; + + @override + String toString() { + return 'ReasonForDeletionRouteArgs{key: $key, appLocalizations: $appLocalizations, isHousholdDelete: $isHousholdDelete}'; + } +} + +/// generated route for +/// [_i12.RegistrationWrapperPage] +class RegistrationWrapperRoute extends _i15.PageRouteInfo { + const RegistrationWrapperRoute({List<_i15.PageRouteInfo>? children}) + : super( + RegistrationWrapperRoute.name, + initialChildren: children, + ); + + static const String name = 'RegistrationWrapperRoute'; + + static const _i15.PageInfo page = _i15.PageInfo(name); +} + +/// generated route for +/// [_i13.SearchBeneficiaryPage] +class SearchBeneficiaryRoute + extends _i15.PageRouteInfo { + SearchBeneficiaryRoute({ + _i16.Key? key, + _i17.RegistrationLocalization? appLocalizations, + List<_i15.PageRouteInfo>? children, + }) : super( + SearchBeneficiaryRoute.name, + args: SearchBeneficiaryRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'SearchBeneficiaryRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class SearchBeneficiaryRouteArgs { + const SearchBeneficiaryRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i16.Key? key; + + final _i17.RegistrationLocalization? appLocalizations; + + @override + String toString() { + return 'SearchBeneficiaryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} + +/// generated route for +/// [_i14.SummaryPage] +class SummaryRoute extends _i15.PageRouteInfo { + SummaryRoute({ + _i16.Key? key, + _i17.RegistrationLocalization? appLocalizations, + List<_i15.PageRouteInfo>? children, + }) : super( + SummaryRoute.name, + args: SummaryRouteArgs( + key: key, + appLocalizations: appLocalizations, + ), + initialChildren: children, + ); + + static const String name = 'SummaryRoute'; + + static const _i15.PageInfo page = + _i15.PageInfo(name); +} + +class SummaryRouteArgs { + const SummaryRouteArgs({ + this.key, + this.appLocalizations, + }); + + final _i16.Key? key; + + final _i17.RegistrationLocalization? appLocalizations; + + @override + String toString() { + return 'SummaryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; + } +} diff --git a/packages/registration/lib/utils/constants.dart b/packages/registration/lib/utils/constants.dart new file mode 100644 index 0000000000..6a7ad3e549 --- /dev/null +++ b/packages/registration/lib/utils/constants.dart @@ -0,0 +1,27 @@ +class Constants { + static List yesNo = [ + KeyValue('CORE_COMMON_YES', true), + KeyValue('CORE_COMMON_NO', false), + ]; + + static RegExp mobileNumberRegExp = + RegExp(r'^(?=.{10}$)[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$'); + final String dateFormat = 'dd/MM/yyyy'; + final String communityHealthWorker = 'Community Health Worker'; + final String deliveryTeam = 'Delivery Team'; + final String notAvailable = 'N/A'; + final String dateTimeExtFormat = 'dd-MM-yyyy'; + final String dateMonthYearFormat = 'dd MMM yyyy'; + static const String checklistViewDateFormat = 'dd/MM/yyyy hh:mm a'; +} + +class KeyValue { + String label; + dynamic key; + KeyValue(this.label, this.key); +} + +const String age = "age"; +const String height = "height"; +const String gender = "gender"; + diff --git a/packages/registration_delivery/lib/utils/extensions/context_utility.dart b/packages/registration/lib/utils/extensions/context_utility.dart similarity index 88% rename from packages/registration_delivery/lib/utils/extensions/context_utility.dart rename to packages/registration/lib/utils/extensions/context_utility.dart index f4307ef5c9..22a99ac344 100644 --- a/packages/registration_delivery/lib/utils/extensions/context_utility.dart +++ b/packages/registration/lib/utils/extensions/context_utility.dart @@ -6,7 +6,7 @@ extension ContextUtilityExtensions on BuildContext { } ProjectCycle? get selectedCycle { - final selectedCycle = RegistrationDeliverySingleton() + final selectedCycle = RegistrationSingleton() .projectType ?.cycles ?.where( @@ -28,7 +28,7 @@ extension ContextUtilityExtensions on BuildContext { repository( BuildContext context, ) { - switch (RegistrationDeliverySingleton().persistenceConfiguration) { + switch (RegistrationSingleton().persistenceConfiguration) { case PersistenceConfiguration.offlineFirst: return context.read>(); case PersistenceConfiguration.onlineOnly: diff --git a/packages/registration_delivery/lib/utils/extensions/extensions.dart b/packages/registration/lib/utils/extensions/extensions.dart similarity index 96% rename from packages/registration_delivery/lib/utils/extensions/extensions.dart rename to packages/registration/lib/utils/extensions/extensions.dart index 37882c7c9a..746635f7dd 100644 --- a/packages/registration_delivery/lib/utils/extensions/extensions.dart +++ b/packages/registration/lib/utils/extensions/extensions.dart @@ -3,7 +3,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; -import 'package:registration_delivery/utils/constants.dart'; +import 'package:registration/utils/constants.dart'; import '../utils.dart'; diff --git a/packages/registration_delivery/lib/utils/global_search_parameters.dart b/packages/registration/lib/utils/global_search_parameters.dart similarity index 100% rename from packages/registration_delivery/lib/utils/global_search_parameters.dart rename to packages/registration/lib/utils/global_search_parameters.dart diff --git a/packages/registration_delivery/lib/utils/i18_key_constants.dart b/packages/registration/lib/utils/i18_key_constants.dart similarity index 100% rename from packages/registration_delivery/lib/utils/i18_key_constants.dart rename to packages/registration/lib/utils/i18_key_constants.dart diff --git a/packages/registration_delivery/lib/utils/mapper_init.dart b/packages/registration/lib/utils/mapper_init.dart similarity index 100% rename from packages/registration_delivery/lib/utils/mapper_init.dart rename to packages/registration/lib/utils/mapper_init.dart diff --git a/packages/registration_delivery/lib/utils/typedefs.dart b/packages/registration/lib/utils/typedefs.dart similarity index 65% rename from packages/registration_delivery/lib/utils/typedefs.dart rename to packages/registration/lib/utils/typedefs.dart index 40ae09722e..e4846b0625 100644 --- a/packages/registration_delivery/lib/utils/typedefs.dart +++ b/packages/registration/lib/utils/typedefs.dart @@ -2,9 +2,6 @@ import 'package:digit_data_model/data_model.dart'; import '../models/entities/household.dart'; import '../models/entities/household_member.dart'; import '../models/entities/project_beneficiary.dart'; -import '../models/entities/referral.dart'; -import '../models/entities/side_effect.dart'; -import '../models/entities/task.dart'; typedef HouseholdDataRepository = DataRepository; @@ -12,11 +9,6 @@ typedef HouseholdMemberDataRepository = DataRepository; typedef ProjectBeneficiaryDataRepository = DataRepository; -typedef TaskDataRepository = DataRepository; -typedef SideEffectDataRepository - = DataRepository; -typedef ReferralDataRepository - = DataRepository; typedef ProjectResourceDataRepository = DataRepository; typedef ProductVariantDataRepository diff --git a/packages/registration/lib/utils/utils.dart b/packages/registration/lib/utils/utils.dart new file mode 100644 index 0000000000..3971d0b43f --- /dev/null +++ b/packages/registration/lib/utils/utils.dart @@ -0,0 +1,300 @@ +// Importing necessary packages and modules +import 'dart:math'; + +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/models/entities/household_type.dart'; +import 'package:formula_parser/formula_parser.dart'; +import 'package:reactive_forms/reactive_forms.dart'; +import 'package:registration/models/entities/status.dart'; + +/// This class contains custom validators for form controls. +class CustomValidator { + /// Validates that control's value must be `true` + static Map? requiredMin( + AbstractControl control, + ) { + return control.value == null || + control.value.toString().length >= 2 || + control.value.toString().trim().isEmpty + ? null + : {'required': true}; + } + + static Map? sizeLessThan2(AbstractControl control) { + return control.value != null && control.value.toString().length <= 2 + ? {'sizeLessThan2': true} + : null; + } + + static Map? validMobileNumber( + AbstractControl control, + ) { + if (control.value == null || control.value.toString().isEmpty) { + return null; + } + + const pattern = r'^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$'; + + if (RegExp(pattern).hasMatch(control.value.toString())) return null; + + if (control.value.toString().length < 10) return {'mobileNumber': true}; + + return {'mobileNumber': true}; + } + + static Map? minPhoneNumValidation( + AbstractControl control, + ) { + if (control.value != null && + control.value.toString().isNotEmpty && + control.value.toString().length < 9) { + return {'minLength': true}; + } + } +} + +String maskString(String input) { + // Define the character to use for masking (e.g., "*") + const maskingChar = '*'; + + // Create a new string with the same length as the input string + final maskedString = + List.generate(input.length, (index) => maskingChar).join(); + + return maskedString; +} + +class CustomFormulaParser { + // Modify the function to accept stringKeys as nullable + static Map parseCondition( + String condition, + Map variables, { + List? stringKeys, + } // Accept stringKeys as nullable + ) { + // If stringKeys is null or empty, default to FormulaParser for all conditions + if (stringKeys == null || stringKeys.isEmpty) { + return _parseAsFormula(condition, variables); + } + + // Loop through stringKeys and check for string comparison in the condition + for (var key in stringKeys) { + if (condition.contains('$key==')) { + // Extract the expected value after '==' for string comparison + var value = condition.split('==')[1].trim(); + if (variables.containsKey(key) && variables[key] is String) { + return _compareString(condition, value, variables[key]); + } + } + } + + // If no string-specific comparison, use FormulaParser for numeric evaluation + return _parseAsFormula(condition, variables); + } + + // Handle string comparison + static Map _compareString( + String condition, String expectedValue, String actualValue) { + // Compare string values directly + bool comparisonResult = actualValue == expectedValue; + return {'value': comparisonResult}; + } + + // Handle numeric evaluation using FormulaParser + static Map _parseAsFormula( + String condition, Map variables) { + final expression = FormulaParser( + condition, + variables, + ); + final error = expression.parse; + return error; // Parsing the numeric expression + } +} + +class Coordinate { + final double? latitude; + final double? longitude; + + Coordinate(this.latitude, this.longitude); +} + +double? calculateDistance(Coordinate? start, Coordinate? end) { + const double earthRadius = 6371.0; // Earth's radius in kilometers + + double toRadians(double degrees) { + return degrees * pi / 180.0; + } + + if (start?.latitude != null && + start?.longitude != null && + end?.latitude != null && + end?.longitude != null) { + double lat1Rad = toRadians(start!.latitude!); + double lon1Rad = toRadians(start.longitude!); + double lat2Rad = toRadians(end!.latitude!); + double lon2Rad = toRadians(end.longitude!); + + double dLat = lat2Rad - lat1Rad; + double dLon = lon2Rad - lon1Rad; + + double a = pow(sin(dLat / 2), 2) + + cos(lat1Rad) * cos(lat2Rad) * pow(sin(dLon / 2), 2); + double c = 2 * atan2(sqrt(a), sqrt(1 - a)); + double distance = earthRadius * c; + + return distance; + } + + return null; +} + +// create a singleton class for RegistrationDelivery package where set data and get data methods are defined + +class RegistrationSingleton { + static final RegistrationSingleton _singleton = + RegistrationSingleton._internal(); + + factory RegistrationSingleton() { + return _singleton; + } + + RegistrationSingleton._internal(); + + String? _tenantId; + String? _loggedInUserUuid; + UserModel? _loggedInUser; + double? _maxRadius; + String? _projectId; + BeneficiaryType? _beneficiaryType; + ProjectTypeModel? _projectType; + ProjectModel? _selectedProject; + BoundaryModel? _boundaryModel; + PersistenceConfiguration? _persistenceConfiguration = PersistenceConfiguration + .offlineFirst; // Default to offline first persistence configuration + List? _genderOptions; + List? _idTypeOptions; + List? _householdDeletionReasonOptions; + List? _householdMemberDeletionReasonOptions; + + List? _searchHouseHoldFilter, _searchCLFFilters; + + List? _houseStructureTypes; + + HouseholdType? _householdType; + + void setBoundary({required BoundaryModel boundary}) { + _boundaryModel = boundary; + } + + void setPersistenceConfiguration( + {required PersistenceConfiguration persistenceConfiguration}) { + _persistenceConfiguration = persistenceConfiguration; + } + + void setInitialData({ + required String loggedInUserUuid, + required double maxRadius, + required String projectId, + required BeneficiaryType selectedBeneficiaryType, + required ProjectTypeModel? projectType, + required ProjectModel selectedProject, + required List? genderOptions, + required List? idTypeOptions, + required List? householdDeletionReasonOptions, + required List? householdMemberDeletionReasonOptions, + required List? searchHouseHoldFilter, + required List? searchCLFFilters, + required List? houseStructureTypes, + required UserModel? loggedInUser, + }) { + _loggedInUserUuid = loggedInUserUuid; + _maxRadius = maxRadius; + _projectId = projectId; + _beneficiaryType = selectedBeneficiaryType; + _projectType = projectType; + _selectedProject = selectedProject; + _genderOptions = genderOptions; + _idTypeOptions = idTypeOptions; + _householdDeletionReasonOptions = householdDeletionReasonOptions; + _householdMemberDeletionReasonOptions = + householdMemberDeletionReasonOptions; + + _searchHouseHoldFilter = searchHouseHoldFilter; + _searchCLFFilters = searchCLFFilters; + + _houseStructureTypes = houseStructureTypes; + + _loggedInUser = loggedInUser; + } + + void setTenantId(String tenantId) { + _tenantId = tenantId; + } + + void setHouseholdType(HouseholdType? householdType) { + _householdType = householdType; + } + + String? get tenantId => _tenantId; + + String? get loggedInUserUuid => _loggedInUserUuid; + + double? get maxRadius => _maxRadius; + + String? get projectId => _projectId; + + BeneficiaryType? get beneficiaryType => _beneficiaryType; + + ProjectTypeModel? get projectType => _projectType; + + ProjectModel? get selectedProject => _selectedProject; + + BoundaryModel? get boundary => _boundaryModel; + + PersistenceConfiguration? get persistenceConfiguration => + _persistenceConfiguration; + + List? get genderOptions => _genderOptions; + + List? get idTypeOptions => _idTypeOptions; + + List? get householdDeletionReasonOptions => + _householdDeletionReasonOptions; + + List? get householdMemberDeletionReasonOptions => + _householdMemberDeletionReasonOptions; + + List? get searchHouseHoldFilter => _searchHouseHoldFilter; + + List? get searchCLFFilters => _searchCLFFilters; + + List? get houseStructureTypes => _houseStructureTypes; + + UserModel? get loggedInUser => _loggedInUser; + + HouseholdType? get householdType => _householdType; +} + +String getStatus(String selectedFilter) { + final statusMap = { + Status.closeHousehold.toValue(): Status.closeHousehold, + Status.registered.toValue(): Status.registered, + Status.notRegistered.toValue(): Status.notRegistered, + }; + + var mappedStatus = statusMap.entries + .where((element) => element.value.name == selectedFilter) + .first + .key; + if (mappedStatus != null) { + return mappedStatus; + } else { + return selectedFilter; + } + + + + + +} diff --git a/packages/registration_delivery/lib/widgets/back_navigation_help_header.dart b/packages/registration/lib/widgets/back_navigation_help_header.dart similarity index 90% rename from packages/registration_delivery/lib/widgets/back_navigation_help_header.dart rename to packages/registration/lib/widgets/back_navigation_help_header.dart index fda1c8c60e..d005546b5e 100644 --- a/packages/registration_delivery/lib/widgets/back_navigation_help_header.dart +++ b/packages/registration/lib/widgets/back_navigation_help_header.dart @@ -4,8 +4,8 @@ import 'package:digit_ui_components/theme/ComponentTheme/back_button_theme.dart' import 'package:digit_ui_components/theme/digit_extended_theme.dart'; import 'package:digit_ui_components/widgets/atoms/digit_back_button.dart'; import 'package:flutter/material.dart'; -import 'package:registration_delivery/blocs/app_localization.dart'; -import 'package:registration_delivery/widgets/showcase/showcase_button.dart'; +import 'package:registration/blocs/app_localization.dart'; +import 'package:registration/widgets/showcase/showcase_button.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -41,7 +41,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { if (showBackNavigation) DigitBackButton( label: - RegistrationDeliveryLocalization.of(context).translate( + RegistrationLocalization.of(context).translate( i18.common.coreCommonBack, ), digitBackButtonThemeData: @@ -66,7 +66,7 @@ class BackNavigationHelpHeaderWidget extends StatelessWidget { SizedBox(width: showHelp ? spacer2 * 2 : 0), if (showHelp) DigitButton( - label: RegistrationDeliveryLocalization.of(context) + label: RegistrationLocalization.of(context) .translate(i18.common.coreCommonHelp), type: DigitButtonType.tertiary, size: DigitButtonSize.small, diff --git a/packages/registration/lib/widgets/beneficiary/beneficiary_card.dart b/packages/registration/lib/widgets/beneficiary/beneficiary_card.dart new file mode 100644 index 0000000000..245c101633 --- /dev/null +++ b/packages/registration/lib/widgets/beneficiary/beneficiary_card.dart @@ -0,0 +1,52 @@ +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:flutter/material.dart'; + +class BeneficiaryCard extends StatelessWidget { + final String title; + final String? subtitle; + final String? description; + + const BeneficiaryCard({ + super.key, + required this.title, + this.subtitle, + this.description, + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); + + return Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.all(spacer1), + child: Text( + title, + style: textTheme.headingS, + ), + ), + if (subtitle != null) + Padding( + padding: const EdgeInsets.all(4), + child: Text( + subtitle!, + style: textTheme.bodyS, + ), + ), + if (description != null) + Padding( + padding: const EdgeInsets.all(4), + child: Text( + description!, + style: textTheme.bodyXS, + ), + ), + ], + ); + } +} diff --git a/packages/registration/lib/widgets/beneficiary/beneficiary_statistics_card.dart b/packages/registration/lib/widgets/beneficiary/beneficiary_statistics_card.dart new file mode 100644 index 0000000000..ce4560de90 --- /dev/null +++ b/packages/registration/lib/widgets/beneficiary/beneficiary_statistics_card.dart @@ -0,0 +1,63 @@ +import 'package:registration/models/entities/beneficiary_statistics/beneficiary_statistics_model.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:flutter/material.dart'; + +class BeneficiaryStatisticsCard extends StatelessWidget { + final BeneficiaryStatisticsWrapperModel beneficiaryStatistics; + + const BeneficiaryStatisticsCard({ + super.key, + required this.beneficiaryStatistics, + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); + + return DigitCard(children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + SizedBox( + width: MediaQuery.of(context).size.width / 3, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + beneficiaryStatistics.beneficiaryStatisticsList.first.title, + style: textTheme.headingXl, + textAlign: TextAlign.center, + ), + Text( + beneficiaryStatistics.beneficiaryStatisticsList.first.content, + style: textTheme.bodyS, + textAlign: TextAlign.center, + ), + ], + ), + ), + SizedBox( + width: MediaQuery.of(context).size.width / 3, + child: Column( + children: [ + Text( + beneficiaryStatistics.beneficiaryStatisticsList.last.title, + style: textTheme.headingXl, + textAlign: TextAlign.center, + ), + Text( + beneficiaryStatistics.beneficiaryStatisticsList.last.content, + style: textTheme.bodyS, + textAlign: TextAlign.center, + ), + ], + ), + ), + ], + ), + ]); + } +} diff --git a/packages/registration/lib/widgets/beneficiary/view_beneficiary_card.dart b/packages/registration/lib/widgets/beneficiary/view_beneficiary_card.dart new file mode 100644 index 0000000000..6fa4b19ec3 --- /dev/null +++ b/packages/registration/lib/widgets/beneficiary/view_beneficiary_card.dart @@ -0,0 +1,244 @@ +import 'package:collection/collection.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/models/entities/household_type.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/utils/date_utils.dart'; +import 'package:digit_ui_components/widgets/atoms/table_cell.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_table.dart'; +import 'package:flutter/material.dart'; +import 'package:registration/widgets/beneficiary/beneficiary_card.dart'; + +import '../../blocs/search_households/search_households.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../../utils/utils.dart'; +import '../localized.dart'; + +class ViewBeneficiaryCard extends LocalizedStatefulWidget { + final HouseholdMemberWrapper householdMember; + final VoidCallback onOpenPressed; + final double? distance; + + const ViewBeneficiaryCard({ + super.key, + super.appLocalizations, + required this.householdMember, + required this.onOpenPressed, + this.distance, + }); + + @override + State createState() => ViewBeneficiaryCardState(); +} + +class ViewBeneficiaryCardState extends LocalizedState { + late HouseholdMemberWrapper householdMember; + + @override + void initState() { + householdMember = widget.householdMember; + super.initState(); + } + + @override + void didUpdateWidget(covariant ViewBeneficiaryCard oldWidget) { + householdMember = widget.householdMember; + super.didUpdateWidget(oldWidget); + } + + bool _isCardExpanded = false; + + bool get isCardExpanded => _isCardExpanded; + + set isCardExpanded(bool value) => setState(() => _isCardExpanded = value); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + final headerList = [ + DigitTableColumn( + header: + localizations.translate(i18.beneficiaryDetails.beneficiaryHeader), + cellValue: 'beneficiary', + isFrozen: true, + ), + // DigitTableColumn( + // header: localizations.translate(i18.beneficiaryDetails.deliveryHeader), + // cellValue: 'delivery', + // ), + DigitTableColumn( + header: localizations.translate(i18.individualDetails.ageLabelText), + cellValue: 'age', + ), + DigitTableColumn( + header: localizations.translate(i18.common.coreCommonGender), + cellValue: 'gender', + ), + ]; + final filteredHeaderList = + RegistrationSingleton().beneficiaryType != + BeneficiaryType.individual + ? headerList + .where((element) => element.cellValue != 'delivery') + .toList() + : headerList; + + final tableData = householdMember.members?.map( + (e) { + final projectBeneficiary = + householdMember.projectBeneficiaries?.where((element) { + if (RegistrationSingleton().beneficiaryType == + BeneficiaryType.individual) { + return element.beneficiaryClientReferenceId == e.clientReferenceId; + } else { + return element.beneficiaryClientReferenceId == + householdMember.household!.clientReferenceId; + } + }).toList(); + + final rowTableData = [ + DigitTableData( + [ + e.name?.givenName ?? '--', + (e.name?.familyName?.trim().isNotEmpty ?? false) + ? e.name?.familyName + : null, + ].whereNotNull().join(' '), + cellKey: 'beneficiary', + ), + DigitTableData( + e.dateOfBirth == null + ? '--' + : '${DigitDateUtils.calculateAge( + DigitDateUtils.getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).years} ${localizations.translate(i18.searchBeneficiary.yearsAbbr)} ${DigitDateUtils.calculateAge( + DigitDateUtils.getFormattedDateToDateTime( + e.dateOfBirth!, + ) ?? + DateTime.now(), + ).months} ${localizations.translate(i18.searchBeneficiary.monthsAbbr)}', + cellKey: 'age', + ), + DigitTableData( + e.gender?.name == null + ? '--' + : localizations + .translate('CORE_COMMON_${e.gender?.name.toUpperCase()}'), + cellKey: 'gender', + ), + ]; + + return DigitTableRow( + tableRow: RegistrationSingleton().beneficiaryType != + BeneficiaryType.individual + ? rowTableData + .where((element) => element.cellKey != 'delivery') + .toList() + : rowTableData, + ); + // rowTableData + }, + ).toList(); + + return DigitCard( + margin: const EdgeInsets.only(top: spacer2, bottom: spacer2), + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: MediaQuery.of(context).size.width / 1.8, + child: BeneficiaryCard( + description: [ + householdMember.household?.address?.doorNo, + householdMember.household?.address?.addressLine1, + householdMember.household?.address?.addressLine2, + householdMember.household?.address?.landmark, + householdMember.household?.address?.city, + householdMember.household?.address?.pincode, + ].whereNotNull().take(2).join(' '), + subtitle: (RegistrationSingleton().householdType == + HouseholdType.family) + ? widget.distance != null + ? '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}\n${((widget.distance!) * 1000).round() > 999 ? '(${((widget.distance!).round())} km)' : '(${((widget.distance!) * 1000).round()} mts) ${localizations.translate(i18.beneficiaryDetails.fromCurrentLocation)}'}' + : '${householdMember.members?.length ?? 1} ${householdMember.members?.length == 1 ? localizations.translate(i18.beneficiaryDetails.householdMemberSingular) : localizations.translate(i18.beneficiaryDetails.householdMemberPlural)}' + : (widget.distance != null) + ? ((widget.distance!) * 1000).round() > 999 + ? '(${((widget.distance!).round())} km)' + : '(${((widget.distance!) * 1000).round()} mts) ${localizations.translate(i18.beneficiaryDetails.fromCurrentLocation)}' + : null, + title: (RegistrationSingleton().householdType == + HouseholdType.community) + ? householdMember.household?.address?.buildingName ?? + localizations.translate(i18.common.coreCommonNA) + : [ + householdMember.headOfHousehold?.name?.givenName ?? + localizations.translate(i18.common.coreCommonNA), + householdMember.headOfHousehold?.name?.familyName, + ].whereNotNull().join(''), + ), + ), + Flexible( + child: DigitButton( + label: + localizations.translate(i18.searchBeneficiary.iconLabel), + onPressed: widget.onOpenPressed, + type: DigitButtonType.secondary, + size: DigitButtonSize.medium, + ), + ), + ], + ), + if (RegistrationSingleton().householdType == + HouseholdType.family) ...[ + Offstage( + offstage: !isCardExpanded, + child: DigitTable( + enableBorder: true, + showPagination: false, + columns: filteredHeaderList, + rows: tableData ?? [], + ), + ), + Container( + height: 24, + margin: const EdgeInsets.all(4), + child: Center( + child: IconButton( + padding: EdgeInsets.zero, + icon: Icon( + isCardExpanded + ? Icons.keyboard_arrow_up + : Icons.keyboard_arrow_down, + size: 24, + ), + onPressed: () => isCardExpanded = !isCardExpanded, + ), + ), + ), + ] + ]); + } + + // ignore: long-parameter-list + Color getTableCellTextColor({ + required bool isNotEligible, + // required List? taskdata, + required bool isBeneficiaryRefused, + required bool isStatusReset, + required ThemeData theme, + }) { + return + //taskdata != null && + // taskdata.isNotEmpty && + !isBeneficiaryRefused && !isNotEligible && !isStatusReset + ? theme.colorTheme.alert.success + : theme.colorTheme.alert.error; + } +} diff --git a/packages/registration_delivery/lib/widgets/component_wrapper/facility_bloc_wrapper.dart b/packages/registration/lib/widgets/component_wrapper/facility_bloc_wrapper.dart similarity index 92% rename from packages/registration_delivery/lib/widgets/component_wrapper/facility_bloc_wrapper.dart rename to packages/registration/lib/widgets/component_wrapper/facility_bloc_wrapper.dart index 74948d44cc..6d2925fdb1 100644 --- a/packages/registration_delivery/lib/widgets/component_wrapper/facility_bloc_wrapper.dart +++ b/packages/registration/lib/widgets/component_wrapper/facility_bloc_wrapper.dart @@ -34,7 +34,7 @@ class FacilityBlocWrapper extends StatelessWidget { projectFacilityDataRepository: projectFacilityRepository, )..add( FacilityLoadForProjectEvent( - projectId: RegistrationDeliverySingleton().projectId!, + projectId: RegistrationSingleton().projectId!, ), ), child: BlocProvider( @@ -45,7 +45,7 @@ class FacilityBlocWrapper extends StatelessWidget { )..add( ProjectFacilityLoadEvent( query: ProjectFacilitySearchModel( - projectId: [RegistrationDeliverySingleton().projectId!], + projectId: [RegistrationSingleton().projectId!], ), ), ), diff --git a/packages/registration_delivery/lib/widgets/component_wrapper/selected_project_builder.dart b/packages/registration/lib/widgets/component_wrapper/selected_project_builder.dart similarity index 68% rename from packages/registration_delivery/lib/widgets/component_wrapper/selected_project_builder.dart rename to packages/registration/lib/widgets/component_wrapper/selected_project_builder.dart index 4a0d735df5..d61ac187af 100644 --- a/packages/registration_delivery/lib/widgets/component_wrapper/selected_project_builder.dart +++ b/packages/registration/lib/widgets/component_wrapper/selected_project_builder.dart @@ -1,7 +1,7 @@ import 'package:digit_data_model/data_model.dart'; import 'package:flutter/material.dart'; -import 'package:registration_delivery/utils/i18_key_constants.dart' as i18; -import 'package:registration_delivery/utils/utils.dart'; +import 'package:registration/utils/i18_key_constants.dart' as i18; +import 'package:registration/utils/utils.dart'; import '../../blocs/app_localization.dart'; @@ -18,14 +18,14 @@ class SelectedProjectBuilder extends StatelessWidget { @override Widget build(BuildContext context) { - return RegistrationDeliverySingleton().selectedProject != null + return RegistrationSingleton().selectedProject != null ? projectBuilder( context, - RegistrationDeliverySingleton().selectedProject!, + RegistrationSingleton().selectedProject!, ) : Center( child: Text( - RegistrationDeliveryLocalization.of(context) + RegistrationLocalization.of(context) .translate(i18.common.noProjectSelected), style: Theme.of(context).textTheme.titleLarge, ), diff --git a/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart b/packages/registration/lib/widgets/inventory/no_facilities_assigned_dialog.dart similarity index 82% rename from packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart rename to packages/registration/lib/widgets/inventory/no_facilities_assigned_dialog.dart index 927baa9894..affde20036 100644 --- a/packages/registration_delivery/lib/widgets/inventory/no_facilities_assigned_dialog.dart +++ b/packages/registration/lib/widgets/inventory/no_facilities_assigned_dialog.dart @@ -4,7 +4,7 @@ import 'package:digit_ui_components/theme/digit_theme.dart'; import 'package:digit_ui_components/widgets/atoms/digit_button.dart'; import 'package:digit_ui_components/widgets/atoms/pop_up_card.dart'; import 'package:flutter/material.dart'; -import 'package:registration_delivery/blocs/app_localization.dart'; +import 'package:registration/blocs/app_localization.dart'; import '../../utils/i18_key_constants.dart' as i18; @@ -17,13 +17,13 @@ class NoFacilitiesAssignedDialog { Icons.warning, color: DigitTheme.instance.colors.light.alertError, ), - title: RegistrationDeliveryLocalization.of(context) + title: RegistrationLocalization.of(context) .translate(i18.referBeneficiary.noFacilityAssigned), - description: RegistrationDeliveryLocalization.of(context) + description: RegistrationLocalization.of(context) .translate(i18.referBeneficiary.noFacilityAssignedDescription), actions: [ DigitButton( - label: RegistrationDeliveryLocalization.of(context) + label: RegistrationLocalization.of(context) .translate(i18.common.corecommonclose), type: DigitButtonType.primary, size: DigitButtonSize.large, diff --git a/packages/registration/lib/widgets/localized.dart b/packages/registration/lib/widgets/localized.dart new file mode 100644 index 0000000000..0f4fea86bf --- /dev/null +++ b/packages/registration/lib/widgets/localized.dart @@ -0,0 +1,35 @@ +import 'package:flutter/material.dart'; + +import '../blocs/app_localization.dart'; + +abstract class LocalizedStatefulWidget extends StatefulWidget { + final RegistrationLocalization? appLocalizations; + + const LocalizedStatefulWidget({ + super.key, + this.appLocalizations, + }); +} + +abstract class LocalizedState + extends State { + late RegistrationLocalization _localizations; + + RegistrationLocalization get localizations => _localizations; + + set localizations(RegistrationLocalization localizations) { + if (mounted) { + setState(() { + _localizations = localizations; + }); + } + } + + @override + @mustCallSuper + void didChangeDependencies() { + _localizations = + widget.appLocalizations ?? RegistrationLocalization.of(context); + super.didChangeDependencies(); + } +} diff --git a/packages/registration/lib/widgets/member_card/member_card.dart b/packages/registration/lib/widgets/member_card/member_card.dart new file mode 100644 index 0000000000..a9a0255df6 --- /dev/null +++ b/packages/registration/lib/widgets/member_card/member_card.dart @@ -0,0 +1,226 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:digit_data_model/data_model.dart'; +import 'package:digit_data_model/models/entities/household_type.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/digit_action_card.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration/blocs/household_overview/household_overview.dart'; +import 'package:registration/router/registration_router.gm.dart'; +import 'package:survey_form/blocs/service_definition.dart'; +import '../../utils/i18_key_constants.dart' as i18; +import '../../blocs/app_localization.dart'; +import '../../models/entities/project_beneficiary.dart'; +import '../../utils/utils.dart'; + +class MemberCard extends StatelessWidget { + final String name; + final String? gender; + final int? years; + final int? months; + final bool isHead; + final IndividualModel individual; + final List? projectBeneficiaries; + + final VoidCallback setAsHeadAction; + final VoidCallback editMemberAction; + final VoidCallback deleteMemberAction; + final RegistrationLocalization localizations; + + final String? projectBeneficiaryClientReferenceId; + + const MemberCard({ + super.key, + required this.individual, + required this.name, + this.gender, + this.years, + this.isHead = false, + this.months, + required this.localizations, + required this.setAsHeadAction, + required this.editMemberAction, + required this.deleteMemberAction, + this.projectBeneficiaries, + this.projectBeneficiaryClientReferenceId, + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final beneficiaryType = RegistrationSingleton().beneficiaryType; + final textTheme = theme.digitTextTheme(context); + + return DigitCard( + margin: const EdgeInsets.only(bottom: spacer2), + cardType: CardType.secondary, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Stack( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + width: MediaQuery.of(context).size.width / 1.8, + child: Padding( + padding: const EdgeInsets.all(spacer2), + child: Text( + name, + style: textTheme.headingM, + ), + ), + ), + ], + ), + Positioned( + child: Align( + alignment: Alignment.topRight, + child: DigitButton( + isDisabled: (projectBeneficiaries ?? []).isEmpty, + onPressed: () => showDialog( + context: context, + builder: (ctx) => DigitActionCard( + onOutsideTap: () { + Navigator.of(context, rootNavigator: true) + .pop(); + }, + actions: [ + DigitButton( + prefixIcon: Icons.person, + label: (RegistrationSingleton() + .householdType == + HouseholdType.community) + ? localizations.translate( + i18.memberCard.assignAsClfhead) + : localizations.translate( + i18.memberCard.assignAsHouseholdhead, + ), + isDisabled: isHead ? true : false, + onPressed: setAsHeadAction, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, + ), + DigitButton( + prefixIcon: Icons.edit, + label: localizations.translate( + i18.memberCard.editIndividualDetails, + ), + onPressed: editMemberAction, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, + ), + DigitButton( + prefixIcon: Icons.delete, + label: localizations.translate( + i18.memberCard.deleteIndividualActionText, + ), + isDisabled: isHead ? true : false, + onPressed: deleteMemberAction, + type: DigitButtonType.secondary, + size: DigitButtonSize.large, + ), + ], + ), + ), + label: localizations.translate( + i18.memberCard.editDetails, + ), + prefixIcon: Icons.edit, + type: DigitButtonType.tertiary, + size: DigitButtonSize.medium, + ), + ), + ), + ], + ), + Padding( + padding: const EdgeInsets.all(spacer2), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + gender != null + ? localizations.translate( + 'CORE_COMMON_${gender?.toUpperCase()}') + : ' -- ', + style: textTheme.bodyS, + ), + Expanded( + child: Text( + years != null && months != null + ? " | $years ${localizations.translate(i18.memberCard.deliverDetailsYearText)} $months ${localizations.translate(i18.memberCard.deliverDetailsMonthsText)}" + : "| --", + style: textTheme.bodyS, + ), + ), + ], + ), + ), + Padding( + padding: + const EdgeInsets.only(left: spacer1, bottom: spacer2), + child: Offstage( + offstage: beneficiaryType != BeneficiaryType.individual, + ), + ), + Offstage( + offstage: beneficiaryType != BeneficiaryType.individual, + child: Padding( + padding: const EdgeInsets.all(spacer1), + child: Column( + children: [ + DigitButton( + mainAxisSize: MainAxisSize.max, + isDisabled: (projectBeneficiaries ?? []).isEmpty + ? true + : false, + type: DigitButtonType.primary, + size: DigitButtonSize.medium, + label: localizations.translate( + i18.beneficiaryDetails + .beneficiarysDetailsLabelText, + ), + onPressed: () { + final bloc = + context.read(); + final serviceDefinitionBloc = + context.read().state; + + bloc.add( + HouseholdOverviewEvent.selectedIndividual( + individualModel: individual, + ), + ); + bloc.add(HouseholdOverviewReloadEvent( + projectId: + RegistrationSingleton().projectId!, + projectBeneficiaryType: + RegistrationSingleton() + .beneficiaryType ?? + BeneficiaryType.individual, + )); + + navigateToBeneficiaryDetails(context); + }), + const SizedBox( + height: 10, + ), + ], + ), + ), + ), + ]) + ]); + } + + void navigateToBeneficiaryDetails(BuildContext context) { + context.router.push(BeneficiaryDetailsRoute()); + } +} diff --git a/packages/registration/lib/widgets/progress_bar/beneficiary_progress.dart b/packages/registration/lib/widgets/progress_bar/beneficiary_progress.dart new file mode 100644 index 0000000000..9993c666de --- /dev/null +++ b/packages/registration/lib/widgets/progress_bar/beneficiary_progress.dart @@ -0,0 +1,95 @@ +import 'dart:math'; + +import 'package:collection/collection.dart'; +import 'package:digit_data_model/data/data_repository.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; +import 'package:digit_ui_components/widgets/molecules/digit_card.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:registration/data/repositories/local/base/project_beneficiary.dart'; +import 'package:registration/widgets/progress_indicator/progress_indicator.dart'; +import '../../models/entities/project_beneficiary.dart'; +import '../../utils/utils.dart'; + +class BeneficiaryProgressBar extends StatefulWidget { + final String label; + final String prefixLabel; + + const BeneficiaryProgressBar({ + super.key, + required this.label, + required this.prefixLabel, + }); + + @override + State createState() => BeneficiaryProgressBarState(); +} + +class BeneficiaryProgressBarState extends State { + int current = 0; + + @override + void didChangeDependencies() { + final repository = context.read< + LocalRepository>() + as ProjectBeneficiaryLocalRepository; + + final now = DateTime.now(); + final gte = DateTime( + now.year, + now.month, + now.day, + ); + + final lte = DateTime( + now.year, + now.month, + now.day, + 23, + 59, + 59, + 999, + ); + + repository.listenToChanges( + query: ProjectBeneficiarySearchModel( + projectId: [RegistrationSingleton().projectId.toString()], + ), + listener: (data) { + if (mounted) { + setState(() { + current = data + .where((element) => + element.dateOfRegistrationTime.isAfter(gte) && + (element.isDeleted == false || element.isDeleted == null) && + element.dateOfRegistrationTime.isBefore(lte)) + .length; + }); + } + }, + ); + super.didChangeDependencies(); + } + + @override + Widget build(BuildContext context) { + final selectedProject = RegistrationSingleton().selectedProject!; + final beneficiaryType = RegistrationSingleton().beneficiaryType; + + final targetModel = selectedProject.targets?.firstWhereOrNull( + (element) => element.beneficiaryType == beneficiaryType, + ); + + final target = targetModel?.targetNo ?? 0.0; + + return DigitCard(margin: const EdgeInsets.all(spacer2), children: [ + ProgressIndicatorContainer( + label: '${max(target - current, 0).round()} ${widget.label}', + prefixLabel: '$current ${widget.prefixLabel}', + suffixLabel: target.toStringAsFixed(0), + value: target == 0 ? 0 : min(current / target, 1), + ), + ]); + } +} diff --git a/packages/registration/lib/widgets/progress_indicator/progress_indicator.dart b/packages/registration/lib/widgets/progress_indicator/progress_indicator.dart new file mode 100644 index 0000000000..22730fa15d --- /dev/null +++ b/packages/registration/lib/widgets/progress_indicator/progress_indicator.dart @@ -0,0 +1,88 @@ +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/theme/spacers.dart'; +import 'package:flutter/material.dart'; + +class ProgressIndicatorContainer extends StatelessWidget { + final String label; + final String prefixLabel; + final String suffixLabel; + final double value; + final String? subLabel; + final Animation? valueColor; + + const ProgressIndicatorContainer({ + super.key, + required this.label, + required this.prefixLabel, + required this.suffixLabel, + required this.value, + this.valueColor, + this.subLabel, + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); + + return Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Text( + label, + style: textTheme.bodyS, + textAlign: TextAlign.center, + ), + Padding( + padding: const EdgeInsets.all(spacer2 * 2), + child: Column( + children: [ + LinearProgressIndicator( + backgroundColor: theme.colorTheme.generic.background, + valueColor: valueColor ?? + AlwaysStoppedAnimation( + theme.colorTheme.primary.primary1, + ), + value: value, + minHeight: 7.0, + ), + Padding( + padding: const EdgeInsets.only(top: spacer2 + 4), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + prefixLabel, + style: theme.textTheme.bodyMedium, + textAlign: TextAlign.center, + ), + Text( + suffixLabel, + style: textTheme.bodyS, + textAlign: TextAlign.center, + ), + ], + ), + ), + ], + ), + ), + if (subLabel != null) + Center( + child: Padding( + padding: const EdgeInsets.all(spacer2), + child: Text( + subLabel ?? '', + style: TextStyle( + color: theme.colorTheme.text.secondary, + fontSize: 16, + fontWeight: FontWeight.w700, + ), + textAlign: TextAlign.center, + ), + ), + ), + ], + ); + } +} diff --git a/packages/registration_delivery/lib/widgets/showcase/config/clf_details.dart b/packages/registration/lib/widgets/showcase/config/clf_details.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/showcase/config/clf_details.dart rename to packages/registration/lib/widgets/showcase/config/clf_details.dart diff --git a/packages/registration_delivery/lib/widgets/showcase/config/clf_location.dart b/packages/registration/lib/widgets/showcase/config/clf_location.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/showcase/config/clf_location.dart rename to packages/registration/lib/widgets/showcase/config/clf_location.dart diff --git a/packages/registration_delivery/lib/widgets/showcase/config/house_details.dart b/packages/registration/lib/widgets/showcase/config/house_details.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/showcase/config/house_details.dart rename to packages/registration/lib/widgets/showcase/config/house_details.dart diff --git a/packages/registration_delivery/lib/widgets/showcase/config/household_details.dart b/packages/registration/lib/widgets/showcase/config/household_details.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/showcase/config/household_details.dart rename to packages/registration/lib/widgets/showcase/config/household_details.dart diff --git a/packages/registration_delivery/lib/widgets/showcase/config/household_location.dart b/packages/registration/lib/widgets/showcase/config/household_location.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/showcase/config/household_location.dart rename to packages/registration/lib/widgets/showcase/config/household_location.dart diff --git a/packages/registration_delivery/lib/widgets/showcase/config/household_overview.dart b/packages/registration/lib/widgets/showcase/config/household_overview.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/showcase/config/household_overview.dart rename to packages/registration/lib/widgets/showcase/config/household_overview.dart diff --git a/packages/registration_delivery/lib/widgets/showcase/config/individual_details.dart b/packages/registration/lib/widgets/showcase/config/individual_details.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/showcase/config/individual_details.dart rename to packages/registration/lib/widgets/showcase/config/individual_details.dart diff --git a/packages/registration/lib/widgets/showcase/config/search_beneficiaries_showcase.dart b/packages/registration/lib/widgets/showcase/config/search_beneficiaries_showcase.dart new file mode 100644 index 0000000000..9be74ed348 --- /dev/null +++ b/packages/registration/lib/widgets/showcase/config/search_beneficiaries_showcase.dart @@ -0,0 +1,56 @@ +part of 'showcase_constants.dart'; + +class _SearchBeneficiariesShowcaseData { + static final _SearchBeneficiariesShowcaseData _instance = + _SearchBeneficiariesShowcaseData._(); + + _SearchBeneficiariesShowcaseData._(); + + factory _SearchBeneficiariesShowcaseData() => _instance; + + List get showcaseData => [ + householdsRegistered, + nameOfHouseholdHead, + registerNewHousehold, + nameOfBeneficiary, + open, + beneficiary, + age, + gender, + ]; + + final householdsRegistered = ShowcaseItemBuilder( + messageLocalizationKey: + i18.searchBeneficiariesShowcase.numberOfHouseholdsRegistered, + ); + + final nameOfHouseholdHead = ShowcaseItemBuilder( + messageLocalizationKey: + i18.searchBeneficiariesShowcase.enterNameOfHouseholdHead, + ); + + final registerNewHousehold = ShowcaseItemBuilder( + messageLocalizationKey: + i18.searchBeneficiariesShowcase.registerNewHousehold, + ); + + final nameOfBeneficiary = ShowcaseItemBuilder( + messageLocalizationKey: i18.searchBeneficiariesShowcase.nameOfBeneficiary, + ); + + final open = ShowcaseItemBuilder( + messageLocalizationKey: i18.searchBeneficiariesShowcase.open, + ); + + final beneficiary = ShowcaseItemBuilder( + messageLocalizationKey: i18.searchBeneficiariesShowcase.beneficiary, + ); + + final age = ShowcaseItemBuilder( + messageLocalizationKey: i18.searchBeneficiariesShowcase.age, + ); + + final gender = ShowcaseItemBuilder( + messageLocalizationKey: i18.searchBeneficiariesShowcase.gender, + ); +} diff --git a/packages/registration_delivery/lib/widgets/showcase/config/showcase_constants.dart b/packages/registration/lib/widgets/showcase/config/showcase_constants.dart similarity index 77% rename from packages/registration_delivery/lib/widgets/showcase/config/showcase_constants.dart rename to packages/registration/lib/widgets/showcase/config/showcase_constants.dart index 130df0cd23..cb20978b72 100644 --- a/packages/registration_delivery/lib/widgets/showcase/config/showcase_constants.dart +++ b/packages/registration/lib/widgets/showcase/config/showcase_constants.dart @@ -1,14 +1,12 @@ import '../../../utils/i18_key_constants.dart' as i18; -import '../showcase_wrappers.dart'; +import '../../showcase_wrappers.dart'; -part 'deliver_intervention.dart'; part 'house_details.dart'; part 'household_details.dart'; part 'household_location.dart'; part 'household_overview.dart'; part 'individual_details.dart'; part 'search_beneficiaries_showcase.dart'; -part 'refused_delivery.dart'; part 'clf_location.dart'; part 'clf_details.dart'; @@ -19,6 +17,6 @@ final householdDetailsShowcaseData = _HouseholdDetailsShowcaseData(); final clfDetailsShowcaseData = _CLFDetailsShowcaseData(); final individualDetailsShowcaseData = _IndividualDetailsShowcaseData(); final householdOverviewShowcaseData = _HouseholdOverviewShowcaseData(); -final deliverInterventionShowcaseData = _DeliverInterventionShowcaseData(); +// final deliverInterventionShowcaseData = _DeliverInterventionShowcaseData(); final houseShowcaseData = _HouseholdShowcaseData(); -final refusedDeliveryShowcaseData = _RefusedDeliveryShowcaseData(); +// final refusedDeliveryShowcaseData = _RefusedDeliveryShowcaseData(); diff --git a/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart b/packages/registration/lib/widgets/showcase/showcase_button.dart similarity index 89% rename from packages/registration_delivery/lib/widgets/showcase/showcase_button.dart rename to packages/registration/lib/widgets/showcase/showcase_button.dart index e9e29cd980..bb58d44e93 100644 --- a/packages/registration_delivery/lib/widgets/showcase/showcase_button.dart +++ b/packages/registration/lib/widgets/showcase/showcase_button.dart @@ -2,9 +2,9 @@ import 'package:auto_route/auto_route.dart'; import 'package:digit_showcase/showcase_widget.dart'; import 'package:digit_ui_components/theme/spacers.dart'; import 'package:flutter/material.dart'; -import 'package:registration_delivery/blocs/app_localization.dart'; +import 'package:registration/blocs/app_localization.dart'; -import '../../router/registration_delivery_router.gm.dart'; +import '../../router/registration_router.gm.dart'; import '../../utils/i18_key_constants.dart' as i18; import '../localized.dart'; import 'config/showcase_constants.dart'; @@ -52,7 +52,7 @@ class ShowcaseButtonState extends LocalizedState { spacer2, ), child: Text( - RegistrationDeliveryLocalization.of(context) + RegistrationLocalization.of(context) .translate(i18.common.coreCommonHelp), overflow: TextOverflow.ellipsis, ), @@ -93,10 +93,7 @@ class ShowcaseButtonState extends LocalizedState { return householdOverviewShowcaseData.showcaseData.map( (e) => e.showcaseKey, ); - case DeliverInterventionRoute.name: - return deliverInterventionShowcaseData.showcaseData.map( - (e) => e.showcaseKey, - ); + default: return null; } diff --git a/packages/registration/lib/widgets/showcase_wrappers.dart b/packages/registration/lib/widgets/showcase_wrappers.dart new file mode 100644 index 0000000000..3b3ebadf4d --- /dev/null +++ b/packages/registration/lib/widgets/showcase_wrappers.dart @@ -0,0 +1,65 @@ +import 'package:digit_showcase/showcase.dart'; +import 'package:flutter/material.dart'; + +import 'localized.dart'; + +const kPadding = 8.0; + +class ShowcaseItemBuilder { + final GlobalKey showcaseKey; + final String messageLocalizationKey; + + ShowcaseItemBuilder({required this.messageLocalizationKey}) + : showcaseKey = GlobalKey(debugLabel: messageLocalizationKey); + + Widget buildWith({required Widget child}) => ShowcaseItemWrapperWidget( + showcaseKey: showcaseKey, + messageLocalizationKey: messageLocalizationKey, + child: child, + ); +} + +class ShowcaseItemWrapperWidget extends LocalizedStatefulWidget { + final Widget child; + final String messageLocalizationKey; + final GlobalKey showcaseKey; + + const ShowcaseItemWrapperWidget({ + super.key, + required this.messageLocalizationKey, + required this.child, + required this.showcaseKey, + }); + + @override + LocalizedState createState() => + ShowcaseItemWrapperWidgetState(); +} + +class ShowcaseItemWrapperWidgetState + extends LocalizedState { + @override + Widget build(BuildContext context) { + return Showcase( + key: widget.showcaseKey, + disableMovingAnimation: true, + disableScaleAnimation: true, + description: localizations.translate(widget.messageLocalizationKey), + targetPadding: const EdgeInsets.fromLTRB( + kPadding / 2, + kPadding / 2, + kPadding / 2, + kPadding / 2, + ), + child: Container( + padding: const EdgeInsets.fromLTRB( + kPadding / 2, + kPadding / 2, + kPadding / 2, + kPadding / 2, + ), + child: widget.child, + ), + ); + } +} diff --git a/packages/registration/lib/widgets/status_filter/status_filter.dart b/packages/registration/lib/widgets/status_filter/status_filter.dart new file mode 100644 index 0000000000..2e892b7756 --- /dev/null +++ b/packages/registration/lib/widgets/status_filter/status_filter.dart @@ -0,0 +1,204 @@ +import 'package:digit_data_model/models/entities/household_type.dart'; +import 'package:digit_scanner/widgets/localized.dart'; +import 'package:digit_ui_components/digit_components.dart'; +import 'package:digit_ui_components/theme/digit_extended_theme.dart'; +import 'package:digit_ui_components/widgets/atoms/selection_card.dart'; +import 'package:flutter/material.dart'; +import 'package:registration/registration.dart'; +import 'package:registration/utils/utils.dart'; + +import '../../models/entities/status.dart'; +import 'package:registration/utils/i18_key_constants.dart' as i18; + + +class StatusFilter extends LocalizedStatefulWidget { + final List? selectedFilters; + final bool isCloseIcon; + final Icon? titleIcon; + final String? titleText; + + const StatusFilter({ + super.key, + super.appLocalizations, + this.isCloseIcon = false, + this.titleIcon, + this.titleText, + this.selectedFilters, + }); + + @override + State createState() => StatusFilterState(); +} + +class StatusFilterState extends LocalizedState { + List selectedButtons = []; + bool isLoading = false; + + @override + void initState() { + assignSelectedButtons(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final textTheme = theme.digitTextTheme(context); + + return SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + children: isLoading + ? [ + Padding( + padding: const EdgeInsets.only(top: spacer2 * 2), + child: Icon( + Icons.autorenew, + color: DigitTheme.instance.colorScheme.primary, + size: spacer2 * 4, + ), + ), + const SizedBox(height: spacer2 * 2), + Center( + child: Text( + localizations.translate(i18.common.coreCommonLoadingText), + style: textTheme.headingM.copyWith( + color: DigitTheme.instance.colorScheme.primary), + ), + ) + ] + : [ + Row( + children: [ + if (widget.titleIcon != null) ...[ + Padding( + padding: const EdgeInsets.all(spacer2), + child: widget.titleIcon!, + ), + ], + if (widget.titleText != null) + Expanded( + child: Padding( + padding: + const EdgeInsets.symmetric(vertical: spacer2), + child: Text( + widget.titleText!, + textAlign: TextAlign.left, + style: DigitTheme + .instance.mobileTheme.textTheme.headlineMedium, + ), + ), + ), + if (widget.isCloseIcon) + InkWell( + onTap: () => Navigator.of(context).pop(), + child: const Icon(Icons.close), + ), + ], + ), + Padding( + padding: const EdgeInsets.all(spacer2), + child: SelectionCard( + options: getFilters() ?? [], + allowMultipleSelection: false, + width: MediaQuery.of(context).size.width * 0.6, + initialSelection: [...selectedButtons], + onSelectionChanged: (selected) { + setState(() { + selectedButtons = selected; + }); + }, + valueMapper: (value) { + return localizations.translate( + + value.toValue().toString()); + }, + ), + ), + const SizedBox( + height: spacer2, + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: spacer2), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, // Adjust button spacing + children: [ + Expanded( + child: DigitButton( + label: localizations.translate( + i18.searchBeneficiary.clearFilter, + ), + isDisabled: selectedButtons.isEmpty, + type: DigitButtonType.secondary, + size: DigitButtonSize.medium, + onPressed: () { + setState(() { + selectedButtons.clear(); + }); + }), + ), + const SizedBox( + width: spacer2, + ), + Expanded( + child: DigitButton( + label: localizations.translate( + i18.searchBeneficiary.applyFilter, + ), + isDisabled: selectedButtons.isEmpty, + type: DigitButtonType.primary, + size: DigitButtonSize.medium, + onPressed: () { + setState(() { + isLoading = true; + }); + var selected = + selectedButtons.map((e) => e.name).toList(); + + Future.delayed(const Duration(seconds: 1), () { + Navigator.pop(context, selected); + }); + }, + ), + ), + ], + ), + ) + ], + ), + ); + } + + void selectButton(Status button) { + setState(() { + if (selectedButtons.contains(button)) { + selectedButtons.remove(button); + } else { + selectedButtons.add(button); + } + }); + } + + getFilters() { + var finalStatues = []; + finalStatues.addAll((RegistrationSingleton().householdType == + HouseholdType.community + ? RegistrationSingleton().searchCLFFilters ?? [] + : RegistrationSingleton().searchHouseHoldFilter ?? []) + .map((e) => Status.values.where((element) => element.toValue() == e)) + .expand((element) => element) + .toList()); + + return finalStatues; + } + + void assignSelectedButtons() { + setState(() { + selectedButtons = widget.selectedFilters! + .map((e) => Status.values.where((element) => element.name == e)) + .expand((element) => element) + .toList(); + }); + } +} diff --git a/packages/registration_delivery/lib/widgets/table_card/table_card.dart b/packages/registration/lib/widgets/table_card/table_card.dart similarity index 100% rename from packages/registration_delivery/lib/widgets/table_card/table_card.dart rename to packages/registration/lib/widgets/table_card/table_card.dart diff --git a/packages/registration_delivery/pubspec.lock b/packages/registration/pubspec.lock similarity index 98% rename from packages/registration_delivery/pubspec.lock rename to packages/registration/pubspec.lock index ed4f1b0214..20f1488eee 100644 --- a/packages/registration_delivery/pubspec.lock +++ b/packages/registration/pubspec.lock @@ -372,11 +372,9 @@ packages: dart_mappable_builder: dependency: "direct dev" description: - path: "packages/dart_mappable_builder" - ref: master - resolved-ref: ab088b8fc21a07ed7a56bf81c935ee51481ad253 - url: "https://github.com/egovernments/health-campaign-field-worker-app/" - source: git + path: "../dart_mappable_builder" + relative: true + source: path version: "4.2.3" dart_style: dependency: transitive @@ -386,6 +384,13 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.2" + delivery: + dependency: "direct overridden" + description: + path: "../delivery" + relative: true + source: path + version: "1.0.0" diff_match_patch: dependency: transitive description: @@ -397,27 +402,24 @@ packages: digit_data_model: dependency: "direct main" description: - name: digit_data_model - sha256: "4cdde28c79632a8aa4a8eb95c6567c96f0449b88e815c42896eeb1a41e0c2b00" - url: "https://pub.dev" - source: hosted + path: "../digit_data_model" + relative: true + source: path version: "1.0.6+1" digit_scanner: dependency: "direct main" description: - name: digit_scanner - sha256: c8f82938906a11c516d445d7e5e27b7e6c6a1d07e0a608c2f90f63dd234241a5 - url: "https://pub.dev" - source: hosted + path: "../digit_scanner" + relative: true + source: path version: "1.0.5+1" digit_showcase: dependency: "direct main" description: - name: digit_showcase - sha256: "75b67298f1860ad757827b15af752b677f934b5275b887e36b15e25a5285e498" - url: "https://pub.dev" - source: hosted - version: "1.0.0" + path: "../digit_showcase" + relative: true + source: path + version: "1.0.2+1" digit_ui_components: dependency: "direct main" description: @@ -1278,6 +1280,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" + rename_flutter_project: + dependency: "direct main" + description: + name: rename_flutter_project + sha256: "909f3dcbcc83b694a1238d7159eafc472744db7976f796c90cc6ffa23fefcf6e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" rxdart: dependency: transitive description: @@ -1430,10 +1440,9 @@ packages: survey_form: dependency: "direct main" description: - name: survey_form - sha256: e81e71beff6c4982ff6944ad34da056ea5b4adba860d9552a5eb554356dd816d - url: "https://pub.dev" - source: hosted + path: "../survey_form" + relative: true + source: path version: "1.0.1+3" synchronized: dependency: transitive @@ -1700,5 +1709,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <3.9.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/registration_delivery/pubspec.yaml b/packages/registration/pubspec.yaml similarity index 89% rename from packages/registration_delivery/pubspec.yaml rename to packages/registration/pubspec.yaml index 9db673bc58..4baf977c74 100644 --- a/packages/registration_delivery/pubspec.yaml +++ b/packages/registration/pubspec.yaml @@ -1,11 +1,11 @@ -name: registration_delivery -description: This package enables health facility workers to register a household and individual members and deliver the resources. -version: 1.0.6+3 +name: registration +description: This package enables health facility workers to register a household and individual members. +version: 1.0.6+4 homepage: https://github.com/egovernments/health-campaign-field-worker-app/tree/master/packages/registration_delivery repository: https://github.com/egovernments/health-campaign-field-worker-app environment: - sdk: '>=3.0.0 <4.0.0' + sdk: ">=3.0.0 <4.0.0" flutter: ">=1.17.0" dependencies: @@ -38,6 +38,8 @@ dependencies: flutter_keyboard_visibility: ^5.4.1 survey_form: ^1.0.1+3 group_radio_button: ^1.3.0 + rename_flutter_project: ^1.0.2 + dev_dependencies: flutter_test: @@ -59,4 +61,4 @@ dev_dependencies: flutter: assets: - assets/images/ - - assets/icons/svg/ \ No newline at end of file + - assets/icons/svg/ diff --git a/packages/registration_delivery/test/beneficiary_registration_test.dart b/packages/registration/test/beneficiary_registration_test.dart similarity index 93% rename from packages/registration_delivery/test/beneficiary_registration_test.dart rename to packages/registration/test/beneficiary_registration_test.dart index b022e84817..b71632ce75 100644 --- a/packages/registration_delivery/test/beneficiary_registration_test.dart +++ b/packages/registration/test/beneficiary_registration_test.dart @@ -3,11 +3,11 @@ import 'package:digit_data_model/utils/typedefs.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/blocs/beneficiary_registration/beneficiary_registration.dart'; -import 'package:registration_delivery/models/entities/household.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; -import 'package:registration_delivery/utils/typedefs.dart'; +import 'package:registration/blocs/beneficiary_registration/beneficiary_registration.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; +import 'package:registration/utils/typedefs.dart'; import 'constants/test_constants.dart'; @@ -23,15 +23,12 @@ class MockHouseholdMemberDataRepository extends Mock class MockProjectBeneficiaryDataRepository extends Mock implements ProjectBeneficiaryDataRepository {} -class MockTaskDataRepository extends Mock implements TaskDataRepository {} - void main() { late MockIndividualDataRepository mockIndividualDataRepository; late MockHouseholdDataRepository mockHouseholdDataRepository; late MockHouseholdMemberDataRepository mockHouseholdMemberDataRepository; late MockProjectBeneficiaryDataRepository mockProjectBeneficiaryDataRepository; - late MockTaskDataRepository mockTaskDataRepository; late BeneficiaryRegistrationBloc beneficiaryRegistrationBloc; setUpAll(() { @@ -51,7 +48,7 @@ void main() { mockHouseholdMemberDataRepository = MockHouseholdMemberDataRepository(); mockProjectBeneficiaryDataRepository = MockProjectBeneficiaryDataRepository(); - mockTaskDataRepository = MockTaskDataRepository(); + beneficiaryRegistrationBloc = BeneficiaryRegistrationBloc( const BeneficiaryRegistrationState.create(), individualRepository: mockIndividualDataRepository, @@ -59,7 +56,6 @@ void main() { householdMemberRepository: mockHouseholdMemberDataRepository, projectBeneficiaryRepository: mockProjectBeneficiaryDataRepository, beneficiaryType: BeneficiaryType.individual, - taskDataRepository: mockTaskDataRepository, ); }); diff --git a/packages/registration/test/constants/test_constants.dart b/packages/registration/test/constants/test_constants.dart new file mode 100644 index 0000000000..90deaed164 --- /dev/null +++ b/packages/registration/test/constants/test_constants.dart @@ -0,0 +1,65 @@ +import 'package:digit_data_model/data_model.dart'; +import 'package:registration/blocs/search_households/search_households.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; + +class RegistrationDeliveryTestConstants { + static var dateOfRegistration = DateTime.monday; + static const testProjectId = '1d2e3f4g5h6i7j8k9l0m'; + static const testUserUuid = '1a2b3c4d5e6f7g8h9i0j'; + static var testBoundary = BoundaryModel(code: 'BAN005', name: 'HSR'); + static var registrationDate = DateTime.utc(2024, 5, 20); + static var mockAddress = AddressModel( + addressLine1: '123, 4th Cross', + addressLine2: '5th Main', + city: 'Bangalore', + pincode: '560102', + ); + static var mockAddress1 = AddressModel( + addressLine1: '12, 4th Cross', + addressLine2: '5th Main', + city: 'Bangalore', + pincode: '560102', + ); + static var mockHousehold = HouseholdModel( + clientReferenceId: '1ce2-3f4g-5h6i-7j8k-9l0m', + address: mockAddress, + ); + static var mockHouseholdMember = HouseholdMemberModel( + clientReferenceId: '4fwq-3f4g-5h6i-7j8k-9l0m', + isHeadOfHousehold: true, + ); + static var mockIndividual = IndividualModel( + clientReferenceId: '7fwq-3f4g-5h6i-7j8k-9l0m', + address: [mockAddress], + ); + static var mockProjectBeneficiary = ProjectBeneficiaryModel( + clientReferenceId: '1ce2-3f4g-5h6i-7j8k-9l0m', + dateOfRegistration: DateTime.monday, + ); + + static int lastDose = 1; + static int lastCycle = 1; + + static ProjectTypeModel projectTypeModel = + ProjectTypeModel(id: 'a1de321d3', name: 'Individual'); + + static IndividualModel individualModel = IndividualModel( + clientReferenceId: '1ce2-3f4g-5h6i-7j8k-9l0m', + name: NameModel(givenName: 'test'), + address: [mockAddress], + ); + + static ProjectCycle projectCycle = ProjectCycle( + id: 1, + startDate: DateTime.now().day - 2, + endDate: DateTime.now().day + 2); + + static HouseholdMemberWrapper householdMemberWrapper = HouseholdMemberWrapper( + household: mockHousehold, + headOfHousehold: mockIndividual, + members: [individualModel], + projectBeneficiaries: [mockProjectBeneficiary], + ); +} diff --git a/packages/registration_delivery/test/household_overview_test.dart b/packages/registration/test/household_overview_test.dart similarity index 73% rename from packages/registration_delivery/test/household_overview_test.dart rename to packages/registration/test/household_overview_test.dart index dc9503113b..4befe0cd01 100644 --- a/packages/registration_delivery/test/household_overview_test.dart +++ b/packages/registration/test/household_overview_test.dart @@ -4,16 +4,14 @@ import 'package:digit_data_model/utils/typedefs.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:digit_data_model/data_model.dart'; -import 'package:registration_delivery/blocs/household_overview/household_overview.dart'; -import 'package:registration_delivery/data/repositories/local/individual_global_search.dart'; -import 'package:registration_delivery/models/entities/household.dart'; -import 'package:registration_delivery/models/entities/household_member.dart'; -import 'package:registration_delivery/models/entities/project_beneficiary.dart'; -import 'package:registration_delivery/models/entities/referral.dart'; -import 'package:registration_delivery/models/entities/side_effect.dart'; -import 'package:registration_delivery/models/entities/task.dart'; -import 'package:registration_delivery/utils/global_search_parameters.dart'; -import 'package:registration_delivery/utils/typedefs.dart'; +import 'package:registration/blocs/household_overview/household_overview.dart'; +import 'package:registration/data/repositories/local/individual_global_search.dart'; +import 'package:registration/models/entities/household.dart'; +import 'package:registration/models/entities/household_member.dart'; +import 'package:registration/models/entities/project_beneficiary.dart'; + +import 'package:registration/utils/global_search_parameters.dart'; +import 'package:registration/utils/typedefs.dart'; import 'constants/test_constants.dart'; @@ -29,14 +27,6 @@ class MockHouseholdMemberDataRepository extends Mock class MockProjectBeneficiaryDataRepository extends Mock implements ProjectBeneficiaryDataRepository {} -class MockTaskDataRepository extends Mock implements TaskDataRepository {} - -class MockSideEffectDataRepository extends Mock - implements SideEffectDataRepository {} - -class MockReferralDataRepository extends Mock - implements ReferralDataRepository {} - class MockIndividualGlobalSearchRepository extends Mock implements IndividualGlobalSearchRepository {} @@ -46,9 +36,7 @@ void main() { late MockHouseholdMemberDataRepository mockHouseholdMemberDataRepository; late MockProjectBeneficiaryDataRepository mockProjectBeneficiaryDataRepository; - late MockTaskDataRepository mockTaskDataRepository; - late MockSideEffectDataRepository mockSideEffectDataRepository; - late MockReferralDataRepository mockReferralDataRepository; + late HouseholdOverviewBloc householdOverviewBloc; late MockIndividualGlobalSearchRepository mockIndividualGlobalSearchRepository; @@ -61,9 +49,7 @@ void main() { mockHouseholdMemberDataRepository = MockHouseholdMemberDataRepository(); mockProjectBeneficiaryDataRepository = MockProjectBeneficiaryDataRepository(); - mockTaskDataRepository = MockTaskDataRepository(); - mockSideEffectDataRepository = MockSideEffectDataRepository(); - mockReferralDataRepository = MockReferralDataRepository(); + mockIndividualGlobalSearchRepository = MockIndividualGlobalSearchRepository(); householdOverviewBloc = HouseholdOverviewBloc( @@ -74,9 +60,6 @@ void main() { householdRepository: mockHouseholdDataRepository, householdMemberRepository: mockHouseholdMemberDataRepository, projectBeneficiaryRepository: mockProjectBeneficiaryDataRepository, - taskDataRepository: mockTaskDataRepository, - sideEffectDataRepository: mockSideEffectDataRepository, - referralDataRepository: mockReferralDataRepository, beneficiaryType: BeneficiaryType.individual, individualGlobalSearchRepository: mockIndividualGlobalSearchRepository, ); @@ -99,9 +82,6 @@ void main() { registerFallbackValue(HouseholdMemberSearchModel()); registerFallbackValue(IndividualSearchModel()); registerFallbackValue(ProjectBeneficiarySearchModel()); - registerFallbackValue(TaskSearchModel()); - registerFallbackValue(SideEffectSearchModel()); - registerFallbackValue(ReferralSearchModel()); }); // Test case for _handleReloadMember event @@ -117,12 +97,7 @@ void main() { when(() => mockProjectBeneficiaryDataRepository.search(any())).thenAnswer( (_) async => [RegistrationDeliveryTestConstants.mockProjectBeneficiary]); - when(() => mockTaskDataRepository.search(any())) - .thenAnswer((_) async => []); - when(() => mockSideEffectDataRepository.search(any())) - .thenAnswer((_) async => []); - when(() => mockReferralDataRepository.search(any())) - .thenAnswer((_) async => []); + return householdOverviewBloc; }, act: (bloc) => bloc.add(const HouseholdOverviewReloadEvent( @@ -169,12 +144,6 @@ void main() { .thenAnswer((_) async => [ RegistrationDeliveryTestConstants.mockProjectBeneficiary, ]); - when(() => mockTaskDataRepository.search(any())) - .thenAnswer((_) async => []); - when(() => mockSideEffectDataRepository.search(any())) - .thenAnswer((_) async => []); - when(() => mockReferralDataRepository.search(any())) - .thenAnswer((_) async => []); return householdOverviewBloc; }, diff --git a/packages/registration_delivery/test/widgets/beneficiary_statistics_card.test.dart b/packages/registration/test/widgets/beneficiary_statistics_card.test.dart similarity index 86% rename from packages/registration_delivery/test/widgets/beneficiary_statistics_card.test.dart rename to packages/registration/test/widgets/beneficiary_statistics_card.test.dart index bdcc08fe29..b8db9bd1f1 100644 --- a/packages/registration_delivery/test/widgets/beneficiary_statistics_card.test.dart +++ b/packages/registration/test/widgets/beneficiary_statistics_card.test.dart @@ -1,6 +1,6 @@ -import 'package:registration_delivery/models/beneficiary_statistics/beneficiary_statistics_model.dart'; -import 'package:registration_delivery/widgets/beneficiary/beneficiary_statistics_card.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:registration/models/entities/beneficiary_statistics/beneficiary_statistics_model.dart'; +import 'package:registration/widgets/beneficiary/beneficiary_statistics_card.dart'; import 'widget_app.dart'; diff --git a/packages/registration/test/widgets/widget_app.dart b/packages/registration/test/widgets/widget_app.dart new file mode 100644 index 0000000000..6ac7e56dd6 --- /dev/null +++ b/packages/registration/test/widgets/widget_app.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; + +class WidgetApp extends StatelessWidget { + final Widget child; + final List? localizationDelegates; + final NavigatorObserver? navigatorObserver; + + const WidgetApp({ + super.key, + required this.child, + this.localizationDelegates, + this.navigatorObserver, + }); + + @override + Widget build(BuildContext context) => MaterialApp( + localizationsDelegates: localizationDelegates, + navigatorObservers: [if (navigatorObserver != null) navigatorObserver!], + home: Scaffold(body: child), + ); +} diff --git a/packages/registration_delivery/README.md b/packages/registration_delivery/README.md deleted file mode 100644 index 4b4778b69c..0000000000 --- a/packages/registration_delivery/README.md +++ /dev/null @@ -1,86 +0,0 @@ -# Registration and Delivery - -This package provides a way to register a household and individual members and deliver the resources to the registered households. - -## Features - -* Search existing households and individuals - - - -* Register new households and individuals. - - - - - - - - - -* Update details for existing households and individuals. -* Record service delivery of healthcare interventions to households and individuals for a single round campaign. -* Auto-calculation of resources to be delivered to a household or individuals based on the configured rule. - - - - - - - -## Getting Started - -To use this package, add the following dependency to your `pubspec.yaml` file: - -```yaml -dependencies: - registration_delivery: ^any -``` - -## Usage - -To Navigate to any screens of the package: - -First add registration_delivery_router to your main app router - -Navigate to the required screen using the below code and pass the required data: - -```dart -context.router.push(SearchBeneficiaryRoute(),); -``` - -To Consume any bloc of the package in main app: - -```dart -BlocProvider(create: (context) {return SearchBlocWrapper();},), -``` - -Registration Delivery package requires below data to be passed from main app: - -```dart -RegistrationDeliveryListener? _registrationDeliveryListener; - -String? _tenantId; -String? _loggedInUserUuid; - -double? _maxRadius; -String? _projectId; -BeneficiaryType? _beneficiaryType; -ProjectTypeModel? _projectType; -ProjectModel? _selectedProject; -BoundaryModel? _boundaryModel; -PersistenceConfiguration? _persistenceConfiguration; -List? _genderOptions; -List? _idTypeOptions; -List? _householdDeletionReasonOptions; -List? _householdMemberDeletionReasonOptions; -List? _deliveryCommentOptions; -List? _symptomsTypes; -List? _referralReasons; -``` - -To set the required data use: - -```dart -RegistrationDeliverySingleton().setInitialData(); -``` \ No newline at end of file diff --git a/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart b/packages/registration_delivery/lib/blocs/search_households/proximity_search.dart deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/registration_delivery/lib/data/repositories/oplog/oplog.dart b/packages/registration_delivery/lib/data/repositories/oplog/oplog.dart deleted file mode 100644 index ddb908e13a..0000000000 --- a/packages/registration_delivery/lib/data/repositories/oplog/oplog.dart +++ /dev/null @@ -1,165 +0,0 @@ -import 'package:digit_data_model/data_model.dart'; - -import '../../../models/entities/household.dart'; -import '../../../models/entities/household_member.dart'; -import '../../../models/entities/project_beneficiary.dart'; -import '../../../models/entities/referral.dart'; -import '../../../models/entities/side_effect.dart'; -import '../../../models/entities/task.dart'; - -class HouseholdOpLogManager extends OpLogManager { - HouseholdOpLogManager(super.isar); - - @override - HouseholdModel applyServerGeneratedIdToEntity( - HouseholdModel entity, - String serverGeneratedId, - int rowVersion, - ) => - entity.copyWith( - id: serverGeneratedId, - rowVersion: rowVersion, - ); - - @override - String getClientReferenceId(HouseholdModel entity) => - entity.clientReferenceId; - - @override - String? getServerGeneratedId(HouseholdModel entity) => entity.id; - - @override - int? getRowVersion(HouseholdModel entity) => entity.rowVersion; - - @override - bool? getNonRecoverableError(HouseholdModel entity) => - entity.nonRecoverableError; -} - -class HouseholdMemberOpLogManager extends OpLogManager { - HouseholdMemberOpLogManager(super.isar); - - @override - HouseholdMemberModel applyServerGeneratedIdToEntity( - HouseholdMemberModel entity, - String serverGeneratedId, - int rowVersion, - ) => - entity.copyWith(id: serverGeneratedId, rowVersion: rowVersion); - - @override - String getClientReferenceId(HouseholdMemberModel entity) => - entity.clientReferenceId; - - @override - String? getServerGeneratedId(HouseholdMemberModel entity) => entity.id; - - @override - int? getRowVersion(HouseholdMemberModel entity) => entity.rowVersion; - - @override - bool? getNonRecoverableError(HouseholdMemberModel entity) => - entity.nonRecoverableError; -} - -class ProjectBeneficiaryOpLogManager - extends OpLogManager { - ProjectBeneficiaryOpLogManager(super.isar); - - @override - ProjectBeneficiaryModel applyServerGeneratedIdToEntity( - ProjectBeneficiaryModel entity, - String serverGeneratedId, - int rowVersion, - ) => - entity.copyWith(id: serverGeneratedId, rowVersion: rowVersion); - - @override - String getClientReferenceId(ProjectBeneficiaryModel entity) => - entity.clientReferenceId; - - @override - String? getServerGeneratedId(ProjectBeneficiaryModel entity) => entity.id; - - @override - int? getRowVersion(ProjectBeneficiaryModel entity) => entity.rowVersion; - - @override - bool? getNonRecoverableError(ProjectBeneficiaryModel entity) => - entity.nonRecoverableError; -} - -class TaskOpLogManager extends OpLogManager { - TaskOpLogManager(super.isar); - - @override - TaskModel applyServerGeneratedIdToEntity( - TaskModel entity, - String serverGeneratedId, - int rowVersion, - ) => - entity.copyWith(id: serverGeneratedId, rowVersion: rowVersion); - - @override - String getClientReferenceId(TaskModel entity) => entity.clientReferenceId; - - @override - String? getServerGeneratedId(TaskModel entity) => entity.id; - - @override - int? getRowVersion(TaskModel entity) => entity.rowVersion; - - @override - bool? getNonRecoverableError(TaskModel entity) => entity.nonRecoverableError; -} - -class SideEffectOpLogManager extends OpLogManager { - SideEffectOpLogManager(super.isar); - - @override - SideEffectModel applyServerGeneratedIdToEntity( - SideEffectModel entity, - String serverGeneratedId, - int rowVersion, - ) => - entity.copyWith(id: serverGeneratedId, rowVersion: rowVersion); - - @override - String getClientReferenceId(SideEffectModel entity) => - entity.clientReferenceId; - - @override - String? getServerGeneratedId(SideEffectModel entity) => entity.id; - - @override - int? getRowVersion(SideEffectModel entity) => entity.rowVersion; - - @override - bool? getNonRecoverableError(SideEffectModel entity) => - entity.nonRecoverableError; -} - -class ReferralOpLogManager extends OpLogManager { - ReferralOpLogManager(super.isar); - - @override - ReferralModel applyServerGeneratedIdToEntity( - ReferralModel entity, - String serverGeneratedId, - int rowVersion, - ) => - entity.copyWith(id: serverGeneratedId, rowVersion: rowVersion); - - @override - String getClientReferenceId(ReferralModel entity) => entity.clientReferenceId; - - @override - String? getServerGeneratedId(ReferralModel entity) => entity.id; - - @override - int? getRowVersion(ReferralModel entity) => entity.rowVersion; - - @override - bool? getNonRecoverableError(ReferralModel entity) => - entity.nonRecoverableError; -} \ No newline at end of file diff --git a/packages/registration_delivery/lib/registration_delivery.init.dart b/packages/registration_delivery/lib/registration_delivery.init.dart deleted file mode 100644 index db23c3ec96..0000000000 --- a/packages/registration_delivery/lib/registration_delivery.init.dart +++ /dev/null @@ -1,46 +0,0 @@ -// coverage:ignore-file -// GENERATED CODE - DO NOT MODIFY BY HAND -// ignore_for_file: type=lint -// ignore_for_file: unused_element - -import 'models/entities/additional_fields_type.dart' as p0; -import 'models/entities/deliver_strategy_type.dart' as p1; -import 'models/entities/household.dart' as p2; -import 'models/entities/household_member.dart' as p3; -import 'models/entities/project_beneficiary.dart' as p4; -import 'models/entities/referral.dart' as p5; -import 'models/entities/reg_form_validations_type.dart' as p6; -import 'models/entities/registration_delivery_enums.dart' as p7; -import 'models/entities/side_effect.dart' as p8; -import 'models/entities/status.dart' as p9; -import 'models/entities/task.dart' as p10; -import 'models/entities/task_resource.dart' as p11; - -void initializeMappers() { - p0.AdditionalFieldsTypeMapper.ensureInitialized(); - p1.DeliverStrategyTypeMapper.ensureInitialized(); - p2.HouseholdSearchModelMapper.ensureInitialized(); - p2.HouseholdModelMapper.ensureInitialized(); - p2.HouseholdAdditionalFieldsMapper.ensureInitialized(); - p3.HouseholdMemberSearchModelMapper.ensureInitialized(); - p3.HouseholdMemberModelMapper.ensureInitialized(); - p3.HouseholdMemberAdditionalFieldsMapper.ensureInitialized(); - p4.ProjectBeneficiarySearchModelMapper.ensureInitialized(); - p4.ProjectBeneficiaryModelMapper.ensureInitialized(); - p4.ProjectBeneficiaryAdditionalFieldsMapper.ensureInitialized(); - p5.ReferralSearchModelMapper.ensureInitialized(); - p5.ReferralModelMapper.ensureInitialized(); - p5.ReferralAdditionalFieldsMapper.ensureInitialized(); - p6.RegFormValidationsMapper.ensureInitialized(); - p7.RegistrationDeliveryEnumsMapper.ensureInitialized(); - p8.SideEffectSearchModelMapper.ensureInitialized(); - p8.SideEffectModelMapper.ensureInitialized(); - p8.SideEffectAdditionalFieldsMapper.ensureInitialized(); - p9.StatusMapper.ensureInitialized(); - p10.TaskSearchModelMapper.ensureInitialized(); - p10.TaskModelMapper.ensureInitialized(); - p10.TaskAdditionalFieldsMapper.ensureInitialized(); - p11.TaskResourceSearchModelMapper.ensureInitialized(); - p11.TaskResourceModelMapper.ensureInitialized(); - p11.TaskResourceAdditionalFieldsMapper.ensureInitialized(); -} diff --git a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart b/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart deleted file mode 100644 index b241da6b4d..0000000000 --- a/packages/registration_delivery/lib/router/registration_delivery_router.gm.dart +++ /dev/null @@ -1,1311 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -// ************************************************************************** -// AutoRouterGenerator -// ************************************************************************** - -// ignore_for_file: type=lint -// coverage:ignore-file - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:auto_route/auto_route.dart' as _i25; -import 'package:digit_data_model/data_model.dart' as _i31; -import 'package:flutter/foundation.dart' as _i28; -import 'package:flutter/material.dart' as _i26; -import 'package:registration_delivery/blocs/app_localization.dart' as _i27; -import 'package:registration_delivery/blocs/search_households/search_households.dart' - as _i30; -import 'package:registration_delivery/models/entities/task.dart' as _i32; -import 'package:registration_delivery/pages/beneficiary/beneficiary_checklist.dart' - as _i2; -import 'package:registration_delivery/pages/beneficiary/beneficiary_details.dart' - as _i3; -import 'package:registration_delivery/pages/beneficiary/beneficiary_wrapper.dart' - as _i5; -import 'package:registration_delivery/pages/beneficiary/deliver_intervention.dart' - as _i6; -import 'package:registration_delivery/pages/beneficiary/delivery_summary_page.dart' - as _i7; -import 'package:registration_delivery/pages/beneficiary/dose_administered.dart' - as _i8; -import 'package:registration_delivery/pages/beneficiary/facility_selection.dart' - as _i9; -import 'package:registration_delivery/pages/beneficiary/household_overview.dart' - as _i14; -import 'package:registration_delivery/pages/beneficiary/record_past_delivery_details.dart' - as _i17; -import 'package:registration_delivery/pages/beneficiary/refer_beneficiary.dart' - as _i18; -import 'package:registration_delivery/pages/beneficiary/refused_delivery.dart' - as _i19; -import 'package:registration_delivery/pages/beneficiary/side_effects.dart' - as _i22; -import 'package:registration_delivery/pages/beneficiary/widgets/household_acknowledgement.dart' - as _i12; -import 'package:registration_delivery/pages/beneficiary/widgets/splash_acknowledgement.dart' - as _i23; -import 'package:registration_delivery/pages/beneficiary_registration/beneficiary_acknowledgement.dart' - as _i1; -import 'package:registration_delivery/pages/beneficiary_registration/beneficiary_registration_wrapper.dart' - as _i4; -import 'package:registration_delivery/pages/beneficiary_registration/house_details.dart' - as _i10; -import 'package:registration_delivery/pages/beneficiary_registration/household_details.dart' - as _i11; -import 'package:registration_delivery/pages/beneficiary_registration/household_location.dart' - as _i13; -import 'package:registration_delivery/pages/beneficiary_registration/individual_details.dart' - as _i15; -import 'package:registration_delivery/pages/reason_for_deletion.dart' as _i16; -import 'package:registration_delivery/pages/registration_delivery_wrapper.dart' - as _i20; -import 'package:registration_delivery/pages/search_beneficiary.dart' as _i21; -import 'package:registration_delivery/pages/summary_page.dart' as _i24; -import 'package:registration_delivery/registration_delivery.dart' as _i29; - -abstract class $RegistrationDeliveryRoute extends _i25.AutoRouterModule { - @override - final Map pagesMap = { - BeneficiaryAcknowledgementRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const BeneficiaryAcknowledgementRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i1.BeneficiaryAcknowledgementPage( - key: args.key, - appLocalizations: args.appLocalizations, - enableViewHousehold: args.enableViewHousehold, - ), - ); - }, - BeneficiaryChecklistRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const BeneficiaryChecklistRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i2.BeneficiaryChecklistPage( - key: args.key, - beneficiaryClientRefId: args.beneficiaryClientRefId, - appLocalizations: args.appLocalizations, - ), - ); - }, - BeneficiaryDetailsRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const BeneficiaryDetailsRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i3.BeneficiaryDetailsPage( - key: args.key, - appLocalizations: args.appLocalizations, - ), - ); - }, - BeneficiaryRegistrationWrapperRoute.name: (routeData) { - final args = routeData.argsAs(); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i25.WrappedRoute( - child: _i4.BeneficiaryRegistrationWrapperPage( - key: args.key, - initialState: args.initialState, - )), - ); - }, - BeneficiaryWrapperRoute.name: (routeData) { - final args = routeData.argsAs(); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i5.BeneficiaryWrapperPage( - key: args.key, - wrapper: args.wrapper, - isEditing: args.isEditing, - ), - ); - }, - DeliverInterventionRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const DeliverInterventionRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i6.DeliverInterventionPage( - key: args.key, - appLocalizations: args.appLocalizations, - isEditing: args.isEditing, - ), - ); - }, - DeliverySummaryRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const DeliverySummaryRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i7.DeliverySummaryPage( - key: args.key, - appLocalizations: args.appLocalizations, - ), - ); - }, - DoseAdministeredRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const DoseAdministeredRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i8.DoseAdministeredPage( - key: args.key, - appLocalizations: args.appLocalizations, - ), - ); - }, - FacilitySelectionRoute.name: (routeData) { - final args = routeData.argsAs(); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i9.FacilitySelectionPage( - key: args.key, - facilities: args.facilities, - ), - ); - }, - HouseDetailsRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const HouseDetailsRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i10.HouseDetailsPage( - key: args.key, - appLocalizations: args.appLocalizations, - ), - ); - }, - HouseHoldDetailsRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const HouseHoldDetailsRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i11.HouseHoldDetailsPage( - key: args.key, - appLocalizations: args.appLocalizations, - ), - ); - }, - HouseholdAcknowledgementRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const HouseholdAcknowledgementRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i12.HouseholdAcknowledgementPage( - key: args.key, - appLocalizations: args.appLocalizations, - enableViewHousehold: args.enableViewHousehold, - ), - ); - }, - HouseholdLocationRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const HouseholdLocationRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i13.HouseholdLocationPage( - key: args.key, - appLocalizations: args.appLocalizations, - ), - ); - }, - HouseholdOverviewRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const HouseholdOverviewRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i14.HouseholdOverviewPage( - key: args.key, - appLocalizations: args.appLocalizations, - ), - ); - }, - IndividualDetailsRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const IndividualDetailsRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i15.IndividualDetailsPage( - key: args.key, - appLocalizations: args.appLocalizations, - isHeadOfHousehold: args.isHeadOfHousehold, - ), - ); - }, - ReasonForDeletionRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const ReasonForDeletionRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i16.ReasonForDeletionPage( - key: args.key, - appLocalizations: args.appLocalizations, - isHousholdDelete: args.isHousholdDelete, - ), - ); - }, - RecordPastDeliveryDetailsRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const RecordPastDeliveryDetailsRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i17.RecordPastDeliveryDetailsPage( - key: args.key, - appLocalizations: args.appLocalizations, - tasks: args.tasks, - ), - ); - }, - ReferBeneficiaryRoute.name: (routeData) { - final args = routeData.argsAs(); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i18.ReferBeneficiaryPage( - key: args.key, - appLocalizations: args.appLocalizations, - isEditing: args.isEditing, - projectBeneficiaryClientRefId: args.projectBeneficiaryClientRefId, - ), - ); - }, - RefusedDeliveryRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const RefusedDeliveryRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i19.RefusedDeliveryPage( - key: args.key, - appLocalizations: args.appLocalizations, - ), - ); - }, - RegistrationDeliveryWrapperRoute.name: (routeData) { - return _i25.AutoRoutePage( - routeData: routeData, - child: const _i20.RegistrationDeliveryWrapperPage(), - ); - }, - SearchBeneficiaryRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const SearchBeneficiaryRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i21.SearchBeneficiaryPage( - key: args.key, - appLocalizations: args.appLocalizations, - ), - ); - }, - SideEffectsRoute.name: (routeData) { - final args = routeData.argsAs(); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i22.SideEffectsPage( - key: args.key, - appLocalizations: args.appLocalizations, - tasks: args.tasks, - isEditing: args.isEditing, - ), - ); - }, - SplashAcknowledgementRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const SplashAcknowledgementRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i23.SplashAcknowledgementPage( - key: args.key, - appLocalizations: args.appLocalizations, - enableBackToSearch: args.enableBackToSearch, - ), - ); - }, - SummaryRoute.name: (routeData) { - final args = routeData.argsAs( - orElse: () => const SummaryRouteArgs()); - return _i25.AutoRoutePage( - routeData: routeData, - child: _i24.SummaryPage( - key: args.key, - appLocalizations: args.appLocalizations, - ), - ); - }, - }; -} - -/// generated route for -/// [_i1.BeneficiaryAcknowledgementPage] -class BeneficiaryAcknowledgementRoute - extends _i25.PageRouteInfo { - BeneficiaryAcknowledgementRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - bool? enableViewHousehold, - List<_i25.PageRouteInfo>? children, - }) : super( - BeneficiaryAcknowledgementRoute.name, - args: BeneficiaryAcknowledgementRouteArgs( - key: key, - appLocalizations: appLocalizations, - enableViewHousehold: enableViewHousehold, - ), - initialChildren: children, - ); - - static const String name = 'BeneficiaryAcknowledgementRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class BeneficiaryAcknowledgementRouteArgs { - const BeneficiaryAcknowledgementRouteArgs({ - this.key, - this.appLocalizations, - this.enableViewHousehold, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - final bool? enableViewHousehold; - - @override - String toString() { - return 'BeneficiaryAcknowledgementRouteArgs{key: $key, appLocalizations: $appLocalizations, enableViewHousehold: $enableViewHousehold}'; - } -} - -/// generated route for -/// [_i2.BeneficiaryChecklistPage] -class BeneficiaryChecklistRoute - extends _i25.PageRouteInfo { - BeneficiaryChecklistRoute({ - _i28.Key? key, - String? beneficiaryClientRefId, - _i27.RegistrationDeliveryLocalization? appLocalizations, - List<_i25.PageRouteInfo>? children, - }) : super( - BeneficiaryChecklistRoute.name, - args: BeneficiaryChecklistRouteArgs( - key: key, - beneficiaryClientRefId: beneficiaryClientRefId, - appLocalizations: appLocalizations, - ), - initialChildren: children, - ); - - static const String name = 'BeneficiaryChecklistRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class BeneficiaryChecklistRouteArgs { - const BeneficiaryChecklistRouteArgs({ - this.key, - this.beneficiaryClientRefId, - this.appLocalizations, - }); - - final _i28.Key? key; - - final String? beneficiaryClientRefId; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - @override - String toString() { - return 'BeneficiaryChecklistRouteArgs{key: $key, beneficiaryClientRefId: $beneficiaryClientRefId, appLocalizations: $appLocalizations}'; - } -} - -/// generated route for -/// [_i3.BeneficiaryDetailsPage] -class BeneficiaryDetailsRoute - extends _i25.PageRouteInfo { - BeneficiaryDetailsRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - List<_i25.PageRouteInfo>? children, - }) : super( - BeneficiaryDetailsRoute.name, - args: BeneficiaryDetailsRouteArgs( - key: key, - appLocalizations: appLocalizations, - ), - initialChildren: children, - ); - - static const String name = 'BeneficiaryDetailsRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class BeneficiaryDetailsRouteArgs { - const BeneficiaryDetailsRouteArgs({ - this.key, - this.appLocalizations, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - @override - String toString() { - return 'BeneficiaryDetailsRouteArgs{key: $key, appLocalizations: $appLocalizations}'; - } -} - -/// generated route for -/// [_i4.BeneficiaryRegistrationWrapperPage] -class BeneficiaryRegistrationWrapperRoute - extends _i25.PageRouteInfo { - BeneficiaryRegistrationWrapperRoute({ - _i26.Key? key, - required _i29.BeneficiaryRegistrationState initialState, - List<_i25.PageRouteInfo>? children, - }) : super( - BeneficiaryRegistrationWrapperRoute.name, - args: BeneficiaryRegistrationWrapperRouteArgs( - key: key, - initialState: initialState, - ), - initialChildren: children, - ); - - static const String name = 'BeneficiaryRegistrationWrapperRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class BeneficiaryRegistrationWrapperRouteArgs { - const BeneficiaryRegistrationWrapperRouteArgs({ - this.key, - required this.initialState, - }); - - final _i26.Key? key; - - final _i29.BeneficiaryRegistrationState initialState; - - @override - String toString() { - return 'BeneficiaryRegistrationWrapperRouteArgs{key: $key, initialState: $initialState}'; - } -} - -/// generated route for -/// [_i5.BeneficiaryWrapperPage] -class BeneficiaryWrapperRoute - extends _i25.PageRouteInfo { - BeneficiaryWrapperRoute({ - _i26.Key? key, - required _i30.HouseholdMemberWrapper wrapper, - bool isEditing = false, - List<_i25.PageRouteInfo>? children, - }) : super( - BeneficiaryWrapperRoute.name, - args: BeneficiaryWrapperRouteArgs( - key: key, - wrapper: wrapper, - isEditing: isEditing, - ), - initialChildren: children, - ); - - static const String name = 'BeneficiaryWrapperRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class BeneficiaryWrapperRouteArgs { - const BeneficiaryWrapperRouteArgs({ - this.key, - required this.wrapper, - this.isEditing = false, - }); - - final _i26.Key? key; - - final _i30.HouseholdMemberWrapper wrapper; - - final bool isEditing; - - @override - String toString() { - return 'BeneficiaryWrapperRouteArgs{key: $key, wrapper: $wrapper, isEditing: $isEditing}'; - } -} - -/// generated route for -/// [_i6.DeliverInterventionPage] -class DeliverInterventionRoute - extends _i25.PageRouteInfo { - DeliverInterventionRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - bool isEditing = false, - List<_i25.PageRouteInfo>? children, - }) : super( - DeliverInterventionRoute.name, - args: DeliverInterventionRouteArgs( - key: key, - appLocalizations: appLocalizations, - isEditing: isEditing, - ), - initialChildren: children, - ); - - static const String name = 'DeliverInterventionRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class DeliverInterventionRouteArgs { - const DeliverInterventionRouteArgs({ - this.key, - this.appLocalizations, - this.isEditing = false, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - final bool isEditing; - - @override - String toString() { - return 'DeliverInterventionRouteArgs{key: $key, appLocalizations: $appLocalizations, isEditing: $isEditing}'; - } -} - -/// generated route for -/// [_i7.DeliverySummaryPage] -class DeliverySummaryRoute - extends _i25.PageRouteInfo { - DeliverySummaryRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - List<_i25.PageRouteInfo>? children, - }) : super( - DeliverySummaryRoute.name, - args: DeliverySummaryRouteArgs( - key: key, - appLocalizations: appLocalizations, - ), - initialChildren: children, - ); - - static const String name = 'DeliverySummaryRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class DeliverySummaryRouteArgs { - const DeliverySummaryRouteArgs({ - this.key, - this.appLocalizations, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - @override - String toString() { - return 'DeliverySummaryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; - } -} - -/// generated route for -/// [_i8.DoseAdministeredPage] -class DoseAdministeredRoute - extends _i25.PageRouteInfo { - DoseAdministeredRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - List<_i25.PageRouteInfo>? children, - }) : super( - DoseAdministeredRoute.name, - args: DoseAdministeredRouteArgs( - key: key, - appLocalizations: appLocalizations, - ), - initialChildren: children, - ); - - static const String name = 'DoseAdministeredRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class DoseAdministeredRouteArgs { - const DoseAdministeredRouteArgs({ - this.key, - this.appLocalizations, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - @override - String toString() { - return 'DoseAdministeredRouteArgs{key: $key, appLocalizations: $appLocalizations}'; - } -} - -/// generated route for -/// [_i9.FacilitySelectionPage] -class FacilitySelectionRoute - extends _i25.PageRouteInfo { - FacilitySelectionRoute({ - _i26.Key? key, - required List<_i31.FacilityModel> facilities, - List<_i25.PageRouteInfo>? children, - }) : super( - FacilitySelectionRoute.name, - args: FacilitySelectionRouteArgs( - key: key, - facilities: facilities, - ), - initialChildren: children, - ); - - static const String name = 'FacilitySelectionRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class FacilitySelectionRouteArgs { - const FacilitySelectionRouteArgs({ - this.key, - required this.facilities, - }); - - final _i26.Key? key; - - final List<_i31.FacilityModel> facilities; - - @override - String toString() { - return 'FacilitySelectionRouteArgs{key: $key, facilities: $facilities}'; - } -} - -/// generated route for -/// [_i10.HouseDetailsPage] -class HouseDetailsRoute extends _i25.PageRouteInfo { - HouseDetailsRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - List<_i25.PageRouteInfo>? children, - }) : super( - HouseDetailsRoute.name, - args: HouseDetailsRouteArgs( - key: key, - appLocalizations: appLocalizations, - ), - initialChildren: children, - ); - - static const String name = 'HouseDetailsRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class HouseDetailsRouteArgs { - const HouseDetailsRouteArgs({ - this.key, - this.appLocalizations, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - @override - String toString() { - return 'HouseDetailsRouteArgs{key: $key, appLocalizations: $appLocalizations}'; - } -} - -/// generated route for -/// [_i11.HouseHoldDetailsPage] -class HouseHoldDetailsRoute - extends _i25.PageRouteInfo { - HouseHoldDetailsRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - List<_i25.PageRouteInfo>? children, - }) : super( - HouseHoldDetailsRoute.name, - args: HouseHoldDetailsRouteArgs( - key: key, - appLocalizations: appLocalizations, - ), - initialChildren: children, - ); - - static const String name = 'HouseHoldDetailsRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class HouseHoldDetailsRouteArgs { - const HouseHoldDetailsRouteArgs({ - this.key, - this.appLocalizations, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - @override - String toString() { - return 'HouseHoldDetailsRouteArgs{key: $key, appLocalizations: $appLocalizations}'; - } -} - -/// generated route for -/// [_i12.HouseholdAcknowledgementPage] -class HouseholdAcknowledgementRoute - extends _i25.PageRouteInfo { - HouseholdAcknowledgementRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - bool? enableViewHousehold, - List<_i25.PageRouteInfo>? children, - }) : super( - HouseholdAcknowledgementRoute.name, - args: HouseholdAcknowledgementRouteArgs( - key: key, - appLocalizations: appLocalizations, - enableViewHousehold: enableViewHousehold, - ), - initialChildren: children, - ); - - static const String name = 'HouseholdAcknowledgementRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class HouseholdAcknowledgementRouteArgs { - const HouseholdAcknowledgementRouteArgs({ - this.key, - this.appLocalizations, - this.enableViewHousehold, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - final bool? enableViewHousehold; - - @override - String toString() { - return 'HouseholdAcknowledgementRouteArgs{key: $key, appLocalizations: $appLocalizations, enableViewHousehold: $enableViewHousehold}'; - } -} - -/// generated route for -/// [_i13.HouseholdLocationPage] -class HouseholdLocationRoute - extends _i25.PageRouteInfo { - HouseholdLocationRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - List<_i25.PageRouteInfo>? children, - }) : super( - HouseholdLocationRoute.name, - args: HouseholdLocationRouteArgs( - key: key, - appLocalizations: appLocalizations, - ), - initialChildren: children, - ); - - static const String name = 'HouseholdLocationRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class HouseholdLocationRouteArgs { - const HouseholdLocationRouteArgs({ - this.key, - this.appLocalizations, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - @override - String toString() { - return 'HouseholdLocationRouteArgs{key: $key, appLocalizations: $appLocalizations}'; - } -} - -/// generated route for -/// [_i14.HouseholdOverviewPage] -class HouseholdOverviewRoute - extends _i25.PageRouteInfo { - HouseholdOverviewRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - List<_i25.PageRouteInfo>? children, - }) : super( - HouseholdOverviewRoute.name, - args: HouseholdOverviewRouteArgs( - key: key, - appLocalizations: appLocalizations, - ), - initialChildren: children, - ); - - static const String name = 'HouseholdOverviewRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class HouseholdOverviewRouteArgs { - const HouseholdOverviewRouteArgs({ - this.key, - this.appLocalizations, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - @override - String toString() { - return 'HouseholdOverviewRouteArgs{key: $key, appLocalizations: $appLocalizations}'; - } -} - -/// generated route for -/// [_i15.IndividualDetailsPage] -class IndividualDetailsRoute - extends _i25.PageRouteInfo { - IndividualDetailsRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - bool isHeadOfHousehold = false, - List<_i25.PageRouteInfo>? children, - }) : super( - IndividualDetailsRoute.name, - args: IndividualDetailsRouteArgs( - key: key, - appLocalizations: appLocalizations, - isHeadOfHousehold: isHeadOfHousehold, - ), - initialChildren: children, - ); - - static const String name = 'IndividualDetailsRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class IndividualDetailsRouteArgs { - const IndividualDetailsRouteArgs({ - this.key, - this.appLocalizations, - this.isHeadOfHousehold = false, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - final bool isHeadOfHousehold; - - @override - String toString() { - return 'IndividualDetailsRouteArgs{key: $key, appLocalizations: $appLocalizations, isHeadOfHousehold: $isHeadOfHousehold}'; - } -} - -/// generated route for -/// [_i16.ReasonForDeletionPage] -class ReasonForDeletionRoute - extends _i25.PageRouteInfo { - ReasonForDeletionRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - bool isHousholdDelete = false, - List<_i25.PageRouteInfo>? children, - }) : super( - ReasonForDeletionRoute.name, - args: ReasonForDeletionRouteArgs( - key: key, - appLocalizations: appLocalizations, - isHousholdDelete: isHousholdDelete, - ), - initialChildren: children, - ); - - static const String name = 'ReasonForDeletionRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class ReasonForDeletionRouteArgs { - const ReasonForDeletionRouteArgs({ - this.key, - this.appLocalizations, - this.isHousholdDelete = false, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - final bool isHousholdDelete; - - @override - String toString() { - return 'ReasonForDeletionRouteArgs{key: $key, appLocalizations: $appLocalizations, isHousholdDelete: $isHousholdDelete}'; - } -} - -/// generated route for -/// [_i17.RecordPastDeliveryDetailsPage] -class RecordPastDeliveryDetailsRoute - extends _i25.PageRouteInfo { - RecordPastDeliveryDetailsRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - List<_i32.TaskModel>? tasks, - List<_i25.PageRouteInfo>? children, - }) : super( - RecordPastDeliveryDetailsRoute.name, - args: RecordPastDeliveryDetailsRouteArgs( - key: key, - appLocalizations: appLocalizations, - tasks: tasks, - ), - initialChildren: children, - ); - - static const String name = 'RecordPastDeliveryDetailsRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class RecordPastDeliveryDetailsRouteArgs { - const RecordPastDeliveryDetailsRouteArgs({ - this.key, - this.appLocalizations, - this.tasks, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - final List<_i32.TaskModel>? tasks; - - @override - String toString() { - return 'RecordPastDeliveryDetailsRouteArgs{key: $key, appLocalizations: $appLocalizations, tasks: $tasks}'; - } -} - -/// generated route for -/// [_i18.ReferBeneficiaryPage] -class ReferBeneficiaryRoute - extends _i25.PageRouteInfo { - ReferBeneficiaryRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - bool isEditing = false, - required String projectBeneficiaryClientRefId, - List<_i25.PageRouteInfo>? children, - }) : super( - ReferBeneficiaryRoute.name, - args: ReferBeneficiaryRouteArgs( - key: key, - appLocalizations: appLocalizations, - isEditing: isEditing, - projectBeneficiaryClientRefId: projectBeneficiaryClientRefId, - ), - initialChildren: children, - ); - - static const String name = 'ReferBeneficiaryRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class ReferBeneficiaryRouteArgs { - const ReferBeneficiaryRouteArgs({ - this.key, - this.appLocalizations, - this.isEditing = false, - required this.projectBeneficiaryClientRefId, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - final bool isEditing; - - final String projectBeneficiaryClientRefId; - - @override - String toString() { - return 'ReferBeneficiaryRouteArgs{key: $key, appLocalizations: $appLocalizations, isEditing: $isEditing, projectBeneficiaryClientRefId: $projectBeneficiaryClientRefId}'; - } -} - -/// generated route for -/// [_i19.RefusedDeliveryPage] -class RefusedDeliveryRoute - extends _i25.PageRouteInfo { - RefusedDeliveryRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - List<_i25.PageRouteInfo>? children, - }) : super( - RefusedDeliveryRoute.name, - args: RefusedDeliveryRouteArgs( - key: key, - appLocalizations: appLocalizations, - ), - initialChildren: children, - ); - - static const String name = 'RefusedDeliveryRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class RefusedDeliveryRouteArgs { - const RefusedDeliveryRouteArgs({ - this.key, - this.appLocalizations, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - @override - String toString() { - return 'RefusedDeliveryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; - } -} - -/// generated route for -/// [_i20.RegistrationDeliveryWrapperPage] -class RegistrationDeliveryWrapperRoute extends _i25.PageRouteInfo { - const RegistrationDeliveryWrapperRoute({List<_i25.PageRouteInfo>? children}) - : super( - RegistrationDeliveryWrapperRoute.name, - initialChildren: children, - ); - - static const String name = 'RegistrationDeliveryWrapperRoute'; - - static const _i25.PageInfo page = _i25.PageInfo(name); -} - -/// generated route for -/// [_i21.SearchBeneficiaryPage] -class SearchBeneficiaryRoute - extends _i25.PageRouteInfo { - SearchBeneficiaryRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - List<_i25.PageRouteInfo>? children, - }) : super( - SearchBeneficiaryRoute.name, - args: SearchBeneficiaryRouteArgs( - key: key, - appLocalizations: appLocalizations, - ), - initialChildren: children, - ); - - static const String name = 'SearchBeneficiaryRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class SearchBeneficiaryRouteArgs { - const SearchBeneficiaryRouteArgs({ - this.key, - this.appLocalizations, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - @override - String toString() { - return 'SearchBeneficiaryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; - } -} - -/// generated route for -/// [_i22.SideEffectsPage] -class SideEffectsRoute extends _i25.PageRouteInfo { - SideEffectsRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - required List<_i32.TaskModel> tasks, - bool isEditing = false, - List<_i25.PageRouteInfo>? children, - }) : super( - SideEffectsRoute.name, - args: SideEffectsRouteArgs( - key: key, - appLocalizations: appLocalizations, - tasks: tasks, - isEditing: isEditing, - ), - initialChildren: children, - ); - - static const String name = 'SideEffectsRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class SideEffectsRouteArgs { - const SideEffectsRouteArgs({ - this.key, - this.appLocalizations, - required this.tasks, - this.isEditing = false, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - final List<_i32.TaskModel> tasks; - - final bool isEditing; - - @override - String toString() { - return 'SideEffectsRouteArgs{key: $key, appLocalizations: $appLocalizations, tasks: $tasks, isEditing: $isEditing}'; - } -} - -/// generated route for -/// [_i23.SplashAcknowledgementPage] -class SplashAcknowledgementRoute - extends _i25.PageRouteInfo { - SplashAcknowledgementRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - bool? enableBackToSearch, - List<_i25.PageRouteInfo>? children, - }) : super( - SplashAcknowledgementRoute.name, - args: SplashAcknowledgementRouteArgs( - key: key, - appLocalizations: appLocalizations, - enableBackToSearch: enableBackToSearch, - ), - initialChildren: children, - ); - - static const String name = 'SplashAcknowledgementRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class SplashAcknowledgementRouteArgs { - const SplashAcknowledgementRouteArgs({ - this.key, - this.appLocalizations, - this.enableBackToSearch, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - final bool? enableBackToSearch; - - @override - String toString() { - return 'SplashAcknowledgementRouteArgs{key: $key, appLocalizations: $appLocalizations, enableBackToSearch: $enableBackToSearch}'; - } -} - -/// generated route for -/// [_i24.SummaryPage] -class SummaryRoute extends _i25.PageRouteInfo { - SummaryRoute({ - _i26.Key? key, - _i27.RegistrationDeliveryLocalization? appLocalizations, - List<_i25.PageRouteInfo>? children, - }) : super( - SummaryRoute.name, - args: SummaryRouteArgs( - key: key, - appLocalizations: appLocalizations, - ), - initialChildren: children, - ); - - static const String name = 'SummaryRoute'; - - static const _i25.PageInfo page = - _i25.PageInfo(name); -} - -class SummaryRouteArgs { - const SummaryRouteArgs({ - this.key, - this.appLocalizations, - }); - - final _i26.Key? key; - - final _i27.RegistrationDeliveryLocalization? appLocalizations; - - @override - String toString() { - return 'SummaryRouteArgs{key: $key, appLocalizations: $appLocalizations}'; - } -} diff --git a/packages/survey_form/lib/models/entities/service.mapper.dart b/packages/survey_form/lib/models/entities/service.mapper.dart index ab644322ad..b74ce82696 100644 --- a/packages/survey_form/lib/models/entities/service.mapper.dart +++ b/packages/survey_form/lib/models/entities/service.mapper.dart @@ -10,7 +10,6 @@ class ServiceSearchModelMapper extends SubClassMapperBase { ServiceSearchModelMapper._(); static ServiceSearchModelMapper? _instance; - static ServiceSearchModelMapper ensureInitialized() { if (_instance == null) { MapperContainer.globals.use(_instance = ServiceSearchModelMapper._()); @@ -24,40 +23,31 @@ class ServiceSearchModelMapper extends SubClassMapperBase { static String? _$id(ServiceSearchModel v) => v.id; static const Field _f$id = Field('id', _$id, opt: true); - static String? _$clientId(ServiceSearchModel v) => v.clientId; static const Field _f$clientId = Field('clientId', _$clientId, opt: true); - static String? _$relatedClientReferenceId(ServiceSearchModel v) => v.relatedClientReferenceId; static const Field _f$relatedClientReferenceId = Field('relatedClientReferenceId', _$relatedClientReferenceId, opt: true); - static String? _$serviceDefId(ServiceSearchModel v) => v.serviceDefId; static const Field _f$serviceDefId = Field('serviceDefId', _$serviceDefId, opt: true); - static String? _$accountId(ServiceSearchModel v) => v.accountId; static const Field _f$accountId = Field('accountId', _$accountId, opt: true); - static String? _$createdAt(ServiceSearchModel v) => v.createdAt; static const Field _f$createdAt = Field('createdAt', _$createdAt, opt: true); - static String? _$tenantId(ServiceSearchModel v) => v.tenantId; static const Field _f$tenantId = Field('tenantId', _$tenantId, opt: true); - static String? _$boundaryCode(ServiceSearchModel v) => v.boundaryCode; static const Field _f$boundaryCode = Field('boundaryCode', _$boundaryCode, opt: true); - static AuditDetails? _$auditDetails(ServiceSearchModel v) => v.auditDetails; static const Field _f$auditDetails = Field('auditDetails', _$auditDetails, mode: FieldMode.member); - static AdditionalFields? _$additionalFields(ServiceSearchModel v) => v.additionalFields; static const Field _f$additionalFields = @@ -126,7 +116,6 @@ mixin ServiceSearchModelMappable { ServiceSearchModel> get copyWith => _ServiceSearchModelCopyWithImpl( this as ServiceSearchModel, $identity, $identity); - @override String toString() { return ServiceSearchModelMapper.ensureInitialized() @@ -165,7 +154,6 @@ abstract class ServiceSearchModelCopyWith<$R, $In extends ServiceSearchModel, String? createdAt, String? tenantId, String? boundaryCode}); - ServiceSearchModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( Then<$Out2, $R2> t); } @@ -178,7 +166,6 @@ class _ServiceSearchModelCopyWithImpl<$R, $Out> @override late final ClassMapperBase $mapper = ServiceSearchModelMapper.ensureInitialized(); - @override $R call( {Object? id = $none, @@ -200,7 +187,6 @@ class _ServiceSearchModelCopyWithImpl<$R, $Out> if (tenantId != $none) #tenantId: tenantId, if (boundaryCode != $none) #boundaryCode: boundaryCode })); - @override ServiceSearchModel $make(CopyWithData data) => ServiceSearchModel.ignoreDeleted( @@ -224,7 +210,6 @@ class ServiceModelMapper extends SubClassMapperBase { ServiceModelMapper._(); static ServiceModelMapper? _instance; - static ServiceModelMapper ensureInitialized() { if (_instance == null) { MapperContainer.globals.use(_instance = ServiceModelMapper._()); @@ -240,67 +225,52 @@ class ServiceModelMapper extends SubClassMapperBase { static const Field _f$additionalFields = Field('additionalFields', _$additionalFields, opt: true); - static String? _$id(ServiceModel v) => v.id; static const Field _f$id = Field('id', _$id, opt: true); - static String _$clientId(ServiceModel v) => v.clientId; static const Field _f$clientId = Field('clientId', _$clientId); - static String? _$serviceDefId(ServiceModel v) => v.serviceDefId; static const Field _f$serviceDefId = Field('serviceDefId', _$serviceDefId, opt: true); - static String? _$relatedClientReferenceId(ServiceModel v) => v.relatedClientReferenceId; static const Field _f$relatedClientReferenceId = Field('relatedClientReferenceId', _$relatedClientReferenceId, opt: true); - static bool? _$isActive(ServiceModel v) => v.isActive; static const Field _f$isActive = Field('isActive', _$isActive, opt: true); - static String? _$accountId(ServiceModel v) => v.accountId; static const Field _f$accountId = Field('accountId', _$accountId, opt: true); - static Map? _$additionalDetails(ServiceModel v) => v.additionalDetails; static const Field> _f$additionalDetails = Field('additionalDetails', _$additionalDetails, opt: true); - static String? _$createdAt(ServiceModel v) => v.createdAt; static const Field _f$createdAt = Field('createdAt', _$createdAt, opt: true); - static bool? _$nonRecoverableError(ServiceModel v) => v.nonRecoverableError; static const Field _f$nonRecoverableError = Field( 'nonRecoverableError', _$nonRecoverableError, opt: true, def: false); - static String? _$tenantId(ServiceModel v) => v.tenantId; static const Field _f$tenantId = Field('tenantId', _$tenantId, opt: true); - static int? _$rowVersion(ServiceModel v) => v.rowVersion; static const Field _f$rowVersion = Field('rowVersion', _$rowVersion, opt: true); - static List? _$attributes(ServiceModel v) => v.attributes; static const Field> _f$attributes = Field('attributes', _$attributes, opt: true); - static AuditDetails? _$auditDetails(ServiceModel v) => v.auditDetails; static const Field _f$auditDetails = Field('auditDetails', _$auditDetails, opt: true); - static ClientAuditDetails? _$clientAuditDetails(ServiceModel v) => v.clientAuditDetails; static const Field _f$clientAuditDetails = Field('clientAuditDetails', _$clientAuditDetails, opt: true); - static bool? _$isDeleted(ServiceModel v) => v.isDeleted; static const Field _f$isDeleted = Field('isDeleted', _$isDeleted, opt: true, def: false); @@ -380,7 +350,6 @@ mixin ServiceModelMappable { ServiceModelCopyWith get copyWith => _ServiceModelCopyWithImpl(this as ServiceModel, $identity, $identity); - @override String toString() { return ServiceModelMapper.ensureInitialized() @@ -410,23 +379,18 @@ abstract class ServiceModelCopyWith<$R, $In extends ServiceModel, $Out> implements EntityModelCopyWith<$R, $In, $Out> { ServiceAdditionalFieldsCopyWith<$R, ServiceAdditionalFields, ServiceAdditionalFields>? get additionalFields; - MapCopyWith<$R, String, dynamic, ObjectCopyWith<$R, dynamic, dynamic>>? get additionalDetails; - ListCopyWith< $R, ServiceAttributesModel, ServiceAttributesModelCopyWith<$R, ServiceAttributesModel, ServiceAttributesModel>>? get attributes; - @override AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails; - @override ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? get clientAuditDetails; - @override $R call( {ServiceAdditionalFields? additionalFields, @@ -445,7 +409,6 @@ abstract class ServiceModelCopyWith<$R, $In extends ServiceModel, $Out> AuditDetails? auditDetails, ClientAuditDetails? clientAuditDetails, bool? isDeleted}); - ServiceModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t); } @@ -457,13 +420,11 @@ class _ServiceModelCopyWithImpl<$R, $Out> @override late final ClassMapperBase $mapper = ServiceModelMapper.ensureInitialized(); - @override ServiceAdditionalFieldsCopyWith<$R, ServiceAdditionalFields, ServiceAdditionalFields>? get additionalFields => $value.additionalFields?.copyWith .$chain((v) => call(additionalFields: v)); - @override MapCopyWith<$R, String, dynamic, ObjectCopyWith<$R, dynamic, dynamic>>? get additionalDetails => $value.additionalDetails != null @@ -472,7 +433,6 @@ class _ServiceModelCopyWithImpl<$R, $Out> (v, t) => ObjectCopyWith(v, $identity, t), (v) => call(additionalDetails: v)) : null; - @override ListCopyWith< $R, @@ -482,16 +442,13 @@ class _ServiceModelCopyWithImpl<$R, $Out> ? ListCopyWith($value.attributes!, (v, t) => v.copyWith.$chain(t), (v) => call(attributes: v)) : null; - @override AuditDetailsCopyWith<$R, AuditDetails, AuditDetails>? get auditDetails => $value.auditDetails?.copyWith.$chain((v) => call(auditDetails: v)); - @override ClientAuditDetailsCopyWith<$R, ClientAuditDetails, ClientAuditDetails>? get clientAuditDetails => $value.clientAuditDetails?.copyWith .$chain((v) => call(clientAuditDetails: v)); - @override $R call( {Object? additionalFields = $none, @@ -531,7 +488,6 @@ class _ServiceModelCopyWithImpl<$R, $Out> #clientAuditDetails: clientAuditDetails, if (isDeleted != $none) #isDeleted: isDeleted })); - @override ServiceModel $make(CopyWithData data) => ServiceModel( additionalFields: @@ -567,7 +523,6 @@ class ServiceAdditionalFieldsMapper ServiceAdditionalFieldsMapper._(); static ServiceAdditionalFieldsMapper? _instance; - static ServiceAdditionalFieldsMapper ensureInitialized() { if (_instance == null) { MapperContainer.globals @@ -582,11 +537,9 @@ class ServiceAdditionalFieldsMapper static String _$schema(ServiceAdditionalFields v) => v.schema; static const Field _f$schema = Field('schema', _$schema, opt: true, def: 'Service'); - static int _$version(ServiceAdditionalFields v) => v.version; static const Field _f$version = Field('version', _$version); - static List _$fields(ServiceAdditionalFields v) => v.fields; static const Field> _f$fields = Field('fields', _$fields, opt: true, def: const []); @@ -642,7 +595,6 @@ mixin ServiceAdditionalFieldsMappable { ServiceAdditionalFields, ServiceAdditionalFields> get copyWith => _ServiceAdditionalFieldsCopyWithImpl( this as ServiceAdditionalFields, $identity, $identity); - @override String toString() { return ServiceAdditionalFieldsMapper.ensureInitialized() @@ -676,10 +628,8 @@ abstract class ServiceAdditionalFieldsCopyWith< @override ListCopyWith<$R, AdditionalField, AdditionalFieldCopyWith<$R, AdditionalField, AdditionalField>> get fields; - @override $R call({String? schema, int? version, List? fields}); - ServiceAdditionalFieldsCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( Then<$Out2, $R2> t); } @@ -693,13 +643,11 @@ class _ServiceAdditionalFieldsCopyWithImpl<$R, $Out> @override late final ClassMapperBase $mapper = ServiceAdditionalFieldsMapper.ensureInitialized(); - @override ListCopyWith<$R, AdditionalField, AdditionalFieldCopyWith<$R, AdditionalField, AdditionalField>> get fields => ListCopyWith($value.fields, (v, t) => v.copyWith.$chain(t), (v) => call(fields: v)); - @override $R call({String? schema, int? version, List? fields}) => $apply(FieldCopyWithData({ @@ -707,7 +655,6 @@ class _ServiceAdditionalFieldsCopyWithImpl<$R, $Out> if (version != null) #version: version, if (fields != null) #fields: fields })); - @override ServiceAdditionalFields $make(CopyWithData data) => ServiceAdditionalFields( schema: data.get(#schema, or: $value.schema),