feat: add UTC parsing utilities and update date handling across entities

- Introduced `utc_parser.dart` with functions to convert UTC timestamps to local time.
- Updated date parsing in various entities to use the new utility functions for consistency.
- Refactored date handling in `BenefitHistory`, `Business`, `AttendanceStatus`, `AssignedWorker`, `TimeRange`, `Invoice`, `PaymentChartPoint`, `StaffPayment`, `TimeCardEntry`, `OrderItem`, `OrderPreview`, `RecentOrder`, `StaffRating`, `CoverageDayPoint`, `ForecastWeek`, `NoShowIncident`, `SpendDataPoint`, `AssignedShift`, `CancelledShift`, `CompletedShift`, `OpenShift`, `PendingAssignment`, `Shift`, `ShiftDetail`, `TodayShift`, `BusinessMembership`, and `Staff`.
- Updated `ReorderWidget` and `OrderEditSheet` to handle date formatting correctly.
This commit is contained in:
Achintha Isuru
2026-03-19 13:00:17 -04:00
parent eacf34999b
commit 5792aa6e98
37 changed files with 136 additions and 109 deletions

View File

@@ -75,7 +75,7 @@ class ReorderWidget extends StatelessWidget {
borderRadius: UiConstants.radiusLg,
),
child: const Icon(
UiIcons.building,
UiIcons.briefcase,
size: 16,
color: UiColors.primary,
),
@@ -104,18 +104,6 @@ class ReorderWidget extends StatelessWidget {
],
),
),
// Column(
// crossAxisAlignment: CrossAxisAlignment.end,
// children: <Widget>[
// // ASSUMPTION: No i18n key for 'positions' under
// // reorder section — carrying forward existing
// // hardcoded string pattern for this migration.
// Text(
// '${order.positionCount} positions',
// style: UiTypography.footnote2r.textSecondary,
// ),
// ],
// ),
],
),
const SizedBox(height: UiConstants.space3),
@@ -130,7 +118,7 @@ class ReorderWidget extends StatelessWidget {
),
const SizedBox(width: UiConstants.space2),
_Badge(
icon: UiIcons.building,
icon: UiIcons.users,
text: '${order.positionCount}',
color: UiColors.textSecondary,
bg: UiColors.buttonSecondaryStill,

View File

@@ -48,13 +48,13 @@ class OrderEditSheetState extends State<OrderEditSheet> {
_orderNameController = TextEditingController(text: widget.order.roleName);
final String startHH =
widget.order.startsAt.toLocal().hour.toString().padLeft(2, '0');
widget.order.startsAt.hour.toString().padLeft(2, '0');
final String startMM =
widget.order.startsAt.toLocal().minute.toString().padLeft(2, '0');
widget.order.startsAt.minute.toString().padLeft(2, '0');
final String endHH =
widget.order.endsAt.toLocal().hour.toString().padLeft(2, '0');
widget.order.endsAt.hour.toString().padLeft(2, '0');
final String endMM =
widget.order.endsAt.toLocal().minute.toString().padLeft(2, '0');
widget.order.endsAt.minute.toString().padLeft(2, '0');
_positions = <Map<String, dynamic>>[
<String, dynamic>{

View File

@@ -77,9 +77,8 @@ class _ViewOrderCardState extends State<ViewOrderCard> {
/// Formats a [DateTime] to a display time string (e.g. "9:00 AM").
String _formatTime({required DateTime dateTime}) {
final DateTime local = dateTime.toLocal();
final int hour24 = local.hour;
final int minute = local.minute;
final int hour24 = dateTime.hour;
final int minute = dateTime.minute;
final String ampm = hour24 >= 12 ? 'PM' : 'AM';
int hour = hour24 % 12;
if (hour == 0) hour = 12;