From 57b63b85ef74267d4704cedee2bdd4c1f273058a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Salazar?= <73718835+joshrs23@users.noreply.github.com> Date: Thu, 12 Feb 2026 14:54:29 -0500 Subject: [PATCH 1/2] new field and enums values for break in shiftrole --- .../client_create_order_repository_impl.dart | 11 +++++ .../one_time_order_position_card.dart | 17 ++++++-- .../widgets/shift_order_form_sheet.dart | 38 +++++++++++++++-- .../presentation/widgets/view_order_card.dart | 42 ++++++++++++++++--- .../connector/shiftRole/mutations.gql | 4 ++ .../connector/shiftRole/queries.gql | 6 +++ backend/dataconnect/schema/ShiftRole.gql | 4 ++ 7 files changed, 110 insertions(+), 12 deletions(-) diff --git a/apps/mobile/packages/features/client/create_order/lib/src/data/repositories_impl/client_create_order_repository_impl.dart b/apps/mobile/packages/features/client/create_order/lib/src/data/repositories_impl/client_create_order_repository_impl.dart index 6dceadee..eb905a2a 100644 --- a/apps/mobile/packages/features/client/create_order/lib/src/data/repositories_impl/client_create_order_repository_impl.dart +++ b/apps/mobile/packages/features/client/create_order/lib/src/data/repositories_impl/client_create_order_repository_impl.dart @@ -140,6 +140,7 @@ class ClientCreateOrderRepositoryImpl .endTime(_toTimestamp(normalizedEnd)) .hours(hours) .breakType(_breakDurationFromValue(position.lunchBreak)) + .isBreakPaid(_isBreakPaid(position.lunchBreak)) .totalValue(totalValue) .execute()); } @@ -172,15 +173,25 @@ class ClientCreateOrderRepositoryImpl dc.BreakDuration _breakDurationFromValue(String value) { switch (value) { + case 'MIN_10': + return dc.BreakDuration.MIN_10; case 'MIN_15': return dc.BreakDuration.MIN_15; case 'MIN_30': return dc.BreakDuration.MIN_30; + case 'MIN_45': + return dc.BreakDuration.MIN_45; + case 'MIN_60': + return dc.BreakDuration.MIN_60; default: return dc.BreakDuration.NO_BREAK; } } + bool _isBreakPaid(String value) { + return value == 'MIN_10' || value == 'MIN_15'; + } + DateTime _parseTime(DateTime date, String time) { if (time.trim().isEmpty) { throw Exception('Shift time is missing.'); diff --git a/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/one_time_order/one_time_order_position_card.dart b/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/one_time_order/one_time_order_position_card.dart index 113f95f9..babb3e06 100644 --- a/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/one_time_order/one_time_order_position_card.dart +++ b/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/one_time_order/one_time_order_position_card.dart @@ -243,13 +243,24 @@ class OneTimeOrderPositionCard extends StatelessWidget { onUpdated(position.copyWith(lunchBreak: val)); } }, - items: ['NO_BREAK', 'MIN_15', 'MIN_30'].map(( + items: [ + 'NO_BREAK', + 'MIN_10', + 'MIN_15', + 'MIN_30', + 'MIN_45', + 'MIN_60', + ].map(( String value, ) { final String label = switch (value) { 'NO_BREAK' => 'No Break', - 'MIN_15' => '15 min', - _ => '30 min', + 'MIN_10' => '10 min (Paid)', + 'MIN_15' => '15 min (Paid)', + 'MIN_30' => '30 min (Unpaid)', + 'MIN_45' => '45 min (Unpaid)', + 'MIN_60' => '60 min (Unpaid)', + _ => value, }; return DropdownMenuItem( value: value, diff --git a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/shift_order_form_sheet.dart b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/shift_order_form_sheet.dart index 14bb9c2c..08c07854 100644 --- a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/shift_order_form_sheet.dart +++ b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/shift_order_form_sheet.dart @@ -279,6 +279,7 @@ class _ShiftOrderFormSheetState extends State { .endTime(_toTimestamp(normalizedEnd)) .hours(hours) .breakType(_breakDurationFromValue(lunchBreak)) + .isBreakPaid(_isBreakPaid(lunchBreak)) .totalValue(totalValue) .execute(); } @@ -527,10 +528,16 @@ class _ShiftOrderFormSheetState extends State { final dc.BreakDuration? value = breakType is dc.Known ? breakType.value : null; switch (value) { + case dc.BreakDuration.MIN_10: + return 'MIN_10'; case dc.BreakDuration.MIN_15: return 'MIN_15'; case dc.BreakDuration.MIN_30: return 'MIN_30'; + case dc.BreakDuration.MIN_45: + return 'MIN_45'; + case dc.BreakDuration.MIN_60: + return 'MIN_60'; case dc.BreakDuration.NO_BREAK: case null: return 'NO_BREAK'; @@ -539,15 +546,25 @@ class _ShiftOrderFormSheetState extends State { dc.BreakDuration _breakDurationFromValue(String value) { switch (value) { + case 'MIN_10': + return dc.BreakDuration.MIN_10; case 'MIN_15': return dc.BreakDuration.MIN_15; case 'MIN_30': return dc.BreakDuration.MIN_30; + case 'MIN_45': + return dc.BreakDuration.MIN_45; + case 'MIN_60': + return dc.BreakDuration.MIN_60; default: return dc.BreakDuration.NO_BREAK; } } + bool _isBreakPaid(String value) { + return value == 'MIN_10' || value == 'MIN_15'; + } + dc.OrderType _orderTypeFromValue(String? value) { switch (value) { case 'PERMANENT': @@ -1053,15 +1070,28 @@ class _ShiftOrderFormSheetState extends State { ), const SizedBox(height: UiConstants.space1), _buildDropdownField( - hint: 'None', + hint: 'No Break', value: pos['lunch_break'], - items: ['NO_BREAK', 'MIN_15', 'MIN_30'], + items: [ + 'NO_BREAK', + 'MIN_10', + 'MIN_15', + 'MIN_30', + 'MIN_45', + 'MIN_60', + ], itemBuilder: (dynamic value) { switch (value.toString()) { + case 'MIN_10': + return '10 min (Paid)'; case 'MIN_15': - return '15 min'; + return '15 min (Paid)'; case 'MIN_30': - return '30 min'; + return '30 min (Unpaid)'; + case 'MIN_45': + return '45 min (Unpaid)'; + case 'MIN_60': + return '60 min (Unpaid)'; default: return 'No Break'; } diff --git a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_order_card.dart b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_order_card.dart index 158ac23f..a71bff41 100644 --- a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_order_card.dart +++ b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_order_card.dart @@ -1053,10 +1053,16 @@ class _OrderEditSheetState extends State<_OrderEditSheet> { final dc.BreakDuration? value = breakType is dc.Known ? breakType.value : null; switch (value) { + case dc.BreakDuration.MIN_10: + return 'MIN_10'; case dc.BreakDuration.MIN_15: return 'MIN_15'; case dc.BreakDuration.MIN_30: return 'MIN_30'; + case dc.BreakDuration.MIN_45: + return 'MIN_45'; + case dc.BreakDuration.MIN_60: + return 'MIN_60'; case dc.BreakDuration.NO_BREAK: case null: return 'NO_BREAK'; @@ -1065,15 +1071,25 @@ class _OrderEditSheetState extends State<_OrderEditSheet> { dc.BreakDuration _breakDurationFromValue(String value) { switch (value) { + case 'MIN_10': + return dc.BreakDuration.MIN_10; case 'MIN_15': return dc.BreakDuration.MIN_15; case 'MIN_30': return dc.BreakDuration.MIN_30; + case 'MIN_45': + return dc.BreakDuration.MIN_45; + case 'MIN_60': + return dc.BreakDuration.MIN_60; default: return dc.BreakDuration.NO_BREAK; } } + bool _isBreakPaid(String value) { + return value == 'MIN_10' || value == 'MIN_15'; + } + _RoleOption? _roleById(String roleId) { for (final _RoleOption role in _roles) { if (role.id == roleId) { @@ -1209,6 +1225,7 @@ class _OrderEditSheetState extends State<_OrderEditSheet> { .endTime(_toTimestamp(normalizedEnd)) .hours(hours) .breakType(_breakDurationFromValue(lunchBreak)) + .isBreakPaid(_isBreakPaid(lunchBreak)) .totalValue(totalValue) .execute(); } else { @@ -1219,6 +1236,7 @@ class _OrderEditSheetState extends State<_OrderEditSheet> { .endTime(_toTimestamp(normalizedEnd)) .hours(hours) .breakType(_breakDurationFromValue(lunchBreak)) + .isBreakPaid(_isBreakPaid(lunchBreak)) .totalValue(totalValue) .execute(); } @@ -1233,6 +1251,7 @@ class _OrderEditSheetState extends State<_OrderEditSheet> { .endTime(_toTimestamp(normalizedEnd)) .hours(hours) .breakType(_breakDurationFromValue(lunchBreak)) + .isBreakPaid(_isBreakPaid(lunchBreak)) .totalValue(totalValue) .execute(); } @@ -1747,17 +1766,30 @@ class _OrderEditSheetState extends State<_OrderEditSheet> { _buildSectionHeader('LUNCH BREAK'), _buildDropdownField( - hint: 'No break', + hint: 'No Break', value: pos['lunch_break'], - items: ['NO_BREAK', 'MIN_15', 'MIN_30'], + items: [ + 'NO_BREAK', + 'MIN_10', + 'MIN_15', + 'MIN_30', + 'MIN_45', + 'MIN_60', + ], itemBuilder: (dynamic val) { switch (val.toString()) { + case 'MIN_10': + return '10 min (Paid)'; case 'MIN_15': - return '15 min'; + return '15 min (Paid)'; case 'MIN_30': - return '30 min'; + return '30 min (Unpaid)'; + case 'MIN_45': + return '45 min (Unpaid)'; + case 'MIN_60': + return '60 min (Unpaid)'; default: - return 'No break'; + return 'No Break'; } }, onChanged: (dynamic val) => diff --git a/backend/dataconnect/connector/shiftRole/mutations.gql b/backend/dataconnect/connector/shiftRole/mutations.gql index d7225ef8..7e4494e4 100644 --- a/backend/dataconnect/connector/shiftRole/mutations.gql +++ b/backend/dataconnect/connector/shiftRole/mutations.gql @@ -9,6 +9,7 @@ mutation createShiftRole( $department: String $uniform: String $breakType: BreakDuration + $isBreakPaid: Boolean $totalValue: Float ) @auth(level: USER) { shiftRole_insert( @@ -23,6 +24,7 @@ mutation createShiftRole( department: $department uniform: $uniform breakType: $breakType + isBreakPaid: $isBreakPaid totalValue: $totalValue } ) @@ -39,6 +41,7 @@ mutation updateShiftRole( $department: String $uniform: String $breakType: BreakDuration + $isBreakPaid: Boolean $totalValue: Float ) @auth(level: USER) { shiftRole_update( @@ -52,6 +55,7 @@ mutation updateShiftRole( department: $department uniform: $uniform breakType: $breakType + isBreakPaid: $isBreakPaid totalValue: $totalValue } ) diff --git a/backend/dataconnect/connector/shiftRole/queries.gql b/backend/dataconnect/connector/shiftRole/queries.gql index eb6df8b9..86314355 100644 --- a/backend/dataconnect/connector/shiftRole/queries.gql +++ b/backend/dataconnect/connector/shiftRole/queries.gql @@ -15,6 +15,7 @@ query getShiftRoleById( department uniform breakType + isBreakPaid totalValue createdAt @@ -76,6 +77,7 @@ query listShiftRolesByShiftId( department uniform breakType + isBreakPaid totalValue createdAt @@ -132,6 +134,7 @@ query listShiftRolesByRoleId( department uniform breakType + isBreakPaid totalValue createdAt @@ -195,6 +198,7 @@ query listShiftRolesByShiftIdAndTimeRange( department uniform breakType + isBreakPaid totalValue createdAt @@ -263,6 +267,7 @@ query listShiftRolesByVendorId( department uniform breakType + isBreakPaid totalValue createdAt @@ -371,6 +376,7 @@ query listShiftRolesByBusinessAndOrder( endTime hours breakType + isBreakPaid totalValue createdAt diff --git a/backend/dataconnect/schema/ShiftRole.gql b/backend/dataconnect/schema/ShiftRole.gql index 1b3598d3..94470ebd 100644 --- a/backend/dataconnect/schema/ShiftRole.gql +++ b/backend/dataconnect/schema/ShiftRole.gql @@ -1,6 +1,9 @@ enum BreakDuration { + MIN_10 MIN_15 MIN_30 + MIN_45 + MIN_60 NO_BREAK } @@ -25,6 +28,7 @@ type ShiftRole @table(name: "shift_roles", key: ["shiftId", "roleId"]) { department: String uniform: String breakType: BreakDuration + isBreakPaid: Boolean @default(expr: "false") totalValue: Float createdAt: Timestamp @default(expr: "request.time") From cb4a352f5d1c6d4b395c7d3ed754a875f961e11c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Salazar?= <73718835+joshrs23@users.noreply.github.com> Date: Thu, 12 Feb 2026 17:11:03 -0500 Subject: [PATCH 2/2] modification of date in redorder --- .../lib/src/presentation/widgets/view_order_card.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_order_card.dart b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_order_card.dart index 66e9b7dd..4106b4b0 100644 --- a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_order_card.dart +++ b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_order_card.dart @@ -1263,7 +1263,7 @@ class _OrderEditSheetState extends State<_OrderEditSheet> { .execute(); } - final DateTime orderDateOnly = DateTime.utc( + final DateTime orderDateOnly = DateTime( orderDate.year, orderDate.month, orderDate.day,