80 Commits

Author SHA1 Message Date
39263a4af5 chore: fix 273+ analysis issues and repair corrupted core files 2026-03-20 21:05:23 +05:30
d3159bc2ae Merge branch 'origin/dev' into feature/session-persistence-new 2026-03-20 12:44:25 +05:30
Achintha Isuru
493891eea0 Add staff reliability stats & shift location
Introduce staff reliability statistics and location fields across domain, data, and UI. Changes include:

- New API endpoint StaffEndpoints.profileStats ('/staff/profile/stats').
- New domain entity StaffReliabilityStats with JSON (de)serialization and export.
- Profile repository: getReliabilityStats implementation and interface addition.
- New GetReliabilityStatsUseCase and DI registration in StaffProfileModule.
- ProfileCubit/state: load and store reliabilityStats; UI wired to display ReliabilityStatsCard and ReliabilityScoreBar using state values.
- Coverage/shift updates: Added AssignedWorker.hasReview to track if a worker was reviewed; added locationName/locationAddress to ShiftWithWorkers and show location in ShiftHeader; hide rate button if worker.hasReview.
- Clock-in handling: treat backend ALREADY_CLOCKED_IN (409) as idempotent by re-fetching attendance and emitting success when appropriate.

These changes wire backend stats through repository/usecase/cubit to the profile UI and add shift location and review-awareness to client views.
2026-03-19 10:53:37 -04:00
230942e776 dev merge 2026-03-19 15:25:37 +05:30
Achintha Isuru
2d452f65e6 feat(geofence): enhance geofence handling with improved messaging and justification for clock-out 2026-03-18 18:30:15 -04:00
Achintha Isuru
f488577e6b feat(geofence): add OutsideWorkAreaBanner for non-blocking warning when clocked in outside geofence 2026-03-18 18:02:17 -04:00
Achintha Isuru
baf426935e feat(shift): enhance Shift entity with client and role names, update JSON deserialization 2026-03-18 17:56:48 -04:00
Achintha Isuru
9039aa63d6 feat: add benefit history feature with lazy loading and pagination
- Implemented `getBenefitsHistory` method in `HomeRepository` to retrieve paginated benefit history.
- Enhanced `BenefitsOverviewCubit` to manage loading and displaying benefit history.
- Created `BenefitHistoryPage` for full-screen display of benefit history with infinite scroll support.
- Added `BenefitHistoryPreview` widget for expandable history preview in benefit cards.
- Introduced `BenefitHistoryRow` to display individual history records.
- Updated `BenefitsOverviewState` to include history management fields.
- Added new entities and use cases for handling benefit history.
- Created design system documentation for UI patterns and known gaps.
2026-03-18 17:21:30 -04:00
Achintha Isuru
1552f60e5b feat(clock_in): add messages for already clocked in/out states and handle API call failures 2026-03-18 16:37:59 -04:00
Achintha Isuru
d13cabb30d Round accuracyMeters before serialization
Round accuracyMeters to an integer when building payloads to ensure consistent, integer accuracy values sent to the backend. Updates made in background_geofence_service.dart (location.accuracy.round()) and in ClockInArguments/ClockOutArguments (round accuracyMeters when present) so nullable values are rounded before serialization.
2026-03-18 16:31:12 -04:00
Achintha Isuru
18b74473dc feat(time_card): refactor TimeCardPage to use StatelessWidget and optimize Bloc initialization
feat(time_card): change GetTimeCardsUseCase to lazy singleton in StaffTimeCardModule
feat(clock_in): update use cases to lazy singleton in StaffClockInModule
2026-03-18 16:01:41 -04:00
Achintha Isuru
3a5f2cc9c6 feat(shifts): implement submit for approval functionality
- Added `submitForApproval` method to `ShiftsRepositoryInterface` and its implementation in `ShiftsRepositoryImpl`.
- Created `SubmitForApprovalUseCase` to handle the submission logic.
- Updated `ShiftsBloc` to handle `SubmitForApprovalEvent` and manage submission state.
- Enhanced `HistoryShiftsTab` and `MyShiftsTab` to support submission actions and display appropriate UI feedback.
- Refactored date utilities for better calendar management and filtering of past shifts.
- Improved UI components for better spacing and alignment.
- Localized success messages for shift submission actions.
2026-03-18 14:37:55 -04:00
Achintha Isuru
3e5b6af8dc Refactor widgets, add bloc dep
Clean up widget code and update a dependency:

- Remove redundant const qualifiers and tidy widget children in several skeleton/header widgets for consistent style.
- Add super.key to TaxFormsProgressOverview, TaxFormStatusBadge, and AccountCard constructors.
- Simplify AccountCard by consolidating its constructor into a single const declaration.
- Minor fixes: adjust Image.onError parameter, reformat CircleAvatar/Icon construction in edit_profile_page.
- Add bloc ^8.1.4 to staff/authentication pubspec.

These changes are stylistic and aim to improve consistency and constructor patterns across the codebase.
2026-03-18 10:33:19 -04:00
Achintha Isuru
1252211a12 fix: correct clock-in validation logic to check for too early time 2026-03-17 15:03:08 -04:00
Achintha Isuru
de388c9a77 feat: update profile setup and bank account management; enhance API integration and data handling 2026-03-17 14:32:26 -04:00
Achintha Isuru
730b298d49 fix: correct time comparison logic in clock-in validation 2026-03-17 12:17:31 -04:00
Achintha Isuru
d12b45a37d Expose parseDouble; fix shift mapping and UI
Rename and expose numeric parser (from _parseDouble to parseDouble) with a doc comment so other modules can reuse it. Update ClockIn repository mapping to populate orderId and prefer clientName for the shift title, and map latitude/longitude using Shift.parseDouble. Remove outdated TODOs and remove the selected/today badge text from the shift card UI. These changes consolidate parsing logic, improve today-shift mapping fidelity, and simplify the shift card display.
2026-03-17 12:14:14 -04:00
Achintha Isuru
376b4e4431 feat: Update API endpoint usage in repositories to remove redundant path property
- Refactored multiple repository implementations across client and staff features to directly use endpoint objects without accessing the `path` property.
- Introduced a new `FeatureGate` class for client-side feature gating based on user scopes, allowing for better access control to API endpoints.
- Added `ApiEndpoint` class to represent API endpoints with their paths and required scopes for future feature gating.
2026-03-17 12:01:06 -04:00
Achintha Isuru
57bba8ab4e Refactor API endpoint usage across multiple repositories to use ClientEndpoints and StaffEndpoints
- Updated ClientOrderQueryRepositoryImpl to replace V2ApiEndpoints with ClientEndpoints for vendor, role, hub, and manager retrieval methods.
- Modified ViewOrdersRepositoryImpl to utilize ClientEndpoints for order viewing, editing, and vendor retrieval.
- Refactored ReportsRepositoryImpl to switch from V2ApiEndpoints to ClientEndpoints for various report fetching methods.
- Changed SettingsRepositoryImpl to use AuthEndpoints for sign-out functionality.
- Adjusted AuthRepositoryImpl to replace V2ApiEndpoints with AuthEndpoints for phone authentication and sign-out processes.
- Updated ProfileSetupRepositoryImpl to utilize StaffEndpoints for profile setup.
- Refactored AvailabilityRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for availability management.
- Changed ClockInRepositoryImpl to use StaffEndpoints for clock-in and clock-out functionalities.
- Updated HomeRepositoryImpl to replace V2ApiEndpoints with StaffEndpoints for dashboard and profile completion retrieval.
- Refactored PaymentsRepositoryImpl to utilize StaffEndpoints for payment summaries and history.
- Changed ProfileRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for staff profile and section status retrieval.
- Updated CertificatesRepositoryImpl to use StaffEndpoints for certificate management.
- Refactored DocumentsRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for document management.
- Changed TaxFormsRepositoryImpl to utilize StaffEndpoints for tax form management.
- Updated BankAccountRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for bank account management.
- Refactored TimeCardRepositoryImpl to use StaffEndpoints for time card retrieval.
- Changed AttireRepositoryImpl to utilize StaffEndpoints for attire management.
- Updated EmergencyContactRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for emergency contact management.
- Refactored ExperienceRepositoryImpl to use StaffEndpoints for industry and skill retrieval.
- Changed PersonalInfoRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for personal information management.
- Updated FaqsRepositoryImpl to utilize StaffEndpoints for FAQs retrieval.
- Refactored PrivacySettingsRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for privacy settings management.
- Changed ShiftsRepositoryImpl to use StaffEndpoints for shift management and retrieval.
- Updated StaffMainRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for profile completion checks.
2026-03-17 11:40:15 -04:00
Achintha Isuru
b31a615092 feat: Migrate staff profile features from Data Connect to V2 REST API
- Removed data_connect package from mobile pubspec.yaml.
- Added documentation for V2 profile migration status and QA findings.
- Implemented new session management with ClientSessionStore and StaffSessionStore.
- Created V2SessionService for handling user sessions via the V2 API.
- Developed use cases for cancelling late worker assignments and submitting worker reviews.
- Added arguments and use cases for payment chart retrieval and profile completion checks.
- Implemented repository interfaces and their implementations for staff main and profile features.
- Ensured proper error handling and validation in use cases.
2026-03-16 22:45:06 -04:00
Achintha Isuru
c0a7ca1329 Increase background geofence interval to 15m
Update BackgroundGeofenceService to register the periodic geofence task with a 15-minute interval instead of 10 seconds. This reduces frequent wakeups and resource usage and better matches typical platform background scheduling constraints.
2026-03-16 02:31:07 -04:00
Achintha Isuru
f4c56cf547 Update clock_in_bloc.dart 2026-03-16 02:25:55 -04:00
Achintha Isuru
31f03aa52a feat: Enhance clock-in feature with time window auto-refresh and lunch break data handling 2026-03-16 01:55:20 -04:00
Achintha Isuru
5fd2a44a8b feat: Add localization for hourly rate and enhance geofence notifications
- Added localization for hourly rate in English and Spanish.
- Updated background geofence service to use localized notification titles and bodies.
- Enhanced ClockInBloc to compute time window flags for check-in/check-out availability.
- Updated ClockInState and ClockInEvent to include check-in/check-out availability flags and messages.
- Refactored ClockInActionSection to display availability messages based on computed flags.
- Ensured compliance with design system for user-facing strings and notification messages.
2026-03-16 01:27:15 -04:00
Achintha Isuru
e02de1fb68 feat(clock_in): add early check-out banner and localization support 2026-03-14 20:36:35 -04:00
Achintha Isuru
f6de07fc25 refactor(clock_in): rename error handling variable for clarity in check-in interactions 2026-03-14 20:28:28 -04:00
Achintha Isuru
10bd61b250 feat(clock_in): add error handling support to check-in interactions 2026-03-14 20:21:10 -04:00
Achintha Isuru
e93f7f7004 fix(clock_in): improve error handling and state reset logic in clock-in process 2026-03-14 20:11:19 -04:00
Achintha Isuru
aa556c4a05 refactor(clock_in): reorganize validation logic into separate validator files 2026-03-14 20:03:30 -04:00
Achintha Isuru
28a219bbea Refactor clock-in feature: Introduce validation pipeline and interaction strategies
- Added a validation pipeline for clock-in actions, including geofence, time window, and override notes validators.
- Created a context class for passing validation data and results.
- Implemented check-in interaction strategies for swipe and NFC methods, encapsulating their UI and behavior.
- Removed redundant utility functions and centralized time formatting in a new utility file.
- Enhanced the notification service to handle clock-in and clock-out notifications separately.
- Updated the ClockInBloc to utilize the new validation and notification services.
- Cleaned up the ClockInActionSection widget to use the new interaction strategies and removed unnecessary listeners.
2026-03-14 19:58:43 -04:00
Achintha Isuru
e3f7e1ac3e fix(clock_in): restore early check-in banner logic for active shifts 2026-03-14 14:30:28 -04:00
Achintha Isuru
3478436227 refactor(clock_in): reorganize geofence and clock-in BLoC structure
- Deleted old geofence_event.dart and geofence_state.dart files.
- Created new geofence_event.dart and geofence_state.dart files under a dedicated geofence directory.
- Moved clock_in_bloc.dart, clock_in_event.dart, and clock_in_state.dart to a new clock_in directory for better organization.
- Updated import paths throughout the codebase to reflect the new structure.
- Implemented new ClockInBloc and GeofenceBloc classes to handle clock-in and geofence functionalities respectively.
- Enhanced event and state management for clock-in operations, including handling location verification and geofence checks.
2026-03-14 01:23:27 -04:00
Achintha Isuru
08a4326da4 feat: Add task execution callback registration to BackgroundTaskService and update geofence dispatcher to use it 2026-03-14 00:59:39 -04:00
Achintha Isuru
2889098f9f refactor: Replace debugPrint with print statements in background geofence dispatcher for logging 2026-03-14 00:45:18 -04:00
Achintha Isuru
8fcf1d9d98 feat: Enhance background geofence functionality with notifications and localization support 2026-03-13 21:44:39 -04:00
Achintha Isuru
6f57cae247 feat: Add overridden banner for geofence check with justification and update localization strings 2026-03-13 20:47:59 -04:00
Achintha Isuru
c92138a573 refactor: Improve code readability by formatting and restructuring Bloc context usage in ClockInActionSection 2026-03-13 20:44:45 -04:00
Achintha Isuru
1bbd306ca0 feat: Update geofence handling to allow checkout when checked in and show verified banner for overridden geofence 2026-03-13 20:43:51 -04:00
Achintha Isuru
ea078eaa02 refactor: Rearrange MultiBlocProvider and Scaffold structure in ClockInPage for improved readability 2026-03-13 17:15:44 -04:00
Achintha Isuru
a85cd36975 feat: Implement geofence override approval with justification notes and update related state management 2026-03-13 17:11:14 -04:00
Achintha Isuru
ab1cd8c355 feat: Add geofence override functionality with justification modal and update banners 2026-03-13 17:04:40 -04:00
Achintha Isuru
a2b102a96d feat: Update action button styling and color in permission denied banner 2026-03-13 16:44:39 -04:00
Achintha Isuru
accff00155 feat: Enhance geofence functionality with new status banners and utility functions 2026-03-13 16:34:09 -04:00
Achintha Isuru
7b576c0ed4 feat: Implement notification and storage services, geofence management, and BLoC for geofence verification
- Add NotificationService for handling local notifications.
- Introduce StorageService for key-value storage using SharedPreferences.
- Create DeviceLocation model to represent geographic locations.
- Define LocationPermissionStatus enum for managing location permissions.
- Implement BackgroundGeofenceService for periodic geofence checks while clocked in.
- Develop GeofenceServiceImpl for geofence proximity verification using LocationService.
- Create GeofenceResult model to encapsulate geofence check results.
- Define GeofenceServiceInterface for geofence service abstraction.
- Implement GeofenceBloc to manage geofence verification and background tracking.
- Create events and states for GeofenceBloc to handle various geofence scenarios.
- Add GeofenceStatusBanner widget to display geofence verification status in the UI.
2026-03-13 16:01:26 -04:00
Achintha Isuru
2fc6b3139e refactor: reorder import statements for better organization in clock_in_bloc.dart 2026-03-13 13:08:03 -04:00
Achintha Isuru
2c1c71ad01 refactor: simplify widget structure and improve date selection logic in clock-in features 2026-03-13 12:14:06 -04:00
Achintha Isuru
ec880007d0 feat(clock-in): add adaptive launcher icons and implement clock-in features
- Added adaptive launcher icons for both dev and stage environments in mobile apps.
- Introduced CheckInModeTab widget for selecting check-in methods.
- Created CheckedInBanner to display current check-in status with time.
- Implemented ClockInActionSection to manage check-in/out actions based on shift status.
- Developed ClockInBody to compose the main content of the clock-in page.
- Added utility functions in ClockInHelpers for time formatting and check-in availability.
- Created EarlyCheckInBanner to notify users arriving too early to check in.
- Implemented NFC scan dialog for NFC-based check-ins.
- Added NoShiftsBanner to inform users when no shifts are scheduled.
- Developed ShiftCard and ShiftCardList for displaying shifts in a selectable format.
- Created ShiftCompletedBanner to show success message after completing a shift.
2026-03-13 11:55:59 -04:00
Achintha Isuru
5a46edba9d feat: update shimmer loading components to remove const constructors for better flexibility 2026-03-10 16:56:55 -04:00
Achintha Isuru
bd98a112a0 feat: add shimmer skeletons for various sections in the staff profile and onboarding features
- Implemented ProfilePageSkeleton for loading state in staff profile.
- Added ReliabilityScoreSkeleton and ReliabilityStatsSkeleton for reliability metrics.
- Created CertificatesSkeleton and related components for loading certificates.
- Developed DocumentsSkeleton and associated document card skeletons.
- Introduced TaxFormsSkeleton for loading tax forms.
- Added BankAccountSkeleton and its components for bank account loading state.
- Created TimeCardSkeleton for displaying time card loading state.
- Implemented AttireSkeleton for loading attire items.
- Added PersonalInfoSkeleton for loading personal information.
- Developed FaqsSkeleton for loading FAQ sections.
- Created PrivacySecuritySkeleton for loading privacy settings.
2026-03-10 15:20:24 -04:00
Achintha Isuru
8497709356 fix: Correct formatting and improve comments in various files for clarity 2026-03-02 12:38:57 -05:00