|
|
|
|
@@ -19,26 +19,43 @@ class HomeRepositoryImpl implements HomeRepositoryInterface {
|
|
|
|
|
|
|
|
|
|
final DateTime now = DateTime.now();
|
|
|
|
|
final int daysFromMonday = now.weekday - DateTime.monday;
|
|
|
|
|
final DateTime monday =
|
|
|
|
|
DateTime(now.year, now.month, now.day).subtract(Duration(days: daysFromMonday));
|
|
|
|
|
final DateTime weekRangeStart = DateTime(monday.year, monday.month, monday.day);
|
|
|
|
|
final DateTime weekRangeEnd =
|
|
|
|
|
DateTime(monday.year, monday.month, monday.day + 13, 23, 59, 59, 999);
|
|
|
|
|
final fdc.QueryResult<dc.GetCompletedShiftsByBusinessIdData,
|
|
|
|
|
dc.GetCompletedShiftsByBusinessIdVariables> completedResult =
|
|
|
|
|
await _service.connector
|
|
|
|
|
.getCompletedShiftsByBusinessId(
|
|
|
|
|
businessId: businessId,
|
|
|
|
|
dateFrom: _service.toTimestamp(weekRangeStart),
|
|
|
|
|
dateTo: _service.toTimestamp(weekRangeEnd),
|
|
|
|
|
)
|
|
|
|
|
.execute();
|
|
|
|
|
final DateTime monday = DateTime(
|
|
|
|
|
now.year,
|
|
|
|
|
now.month,
|
|
|
|
|
now.day,
|
|
|
|
|
).subtract(Duration(days: daysFromMonday));
|
|
|
|
|
final DateTime weekRangeStart = DateTime(
|
|
|
|
|
monday.year,
|
|
|
|
|
monday.month,
|
|
|
|
|
monday.day,
|
|
|
|
|
);
|
|
|
|
|
final DateTime weekRangeEnd = DateTime(
|
|
|
|
|
monday.year,
|
|
|
|
|
monday.month,
|
|
|
|
|
monday.day + 13,
|
|
|
|
|
23,
|
|
|
|
|
59,
|
|
|
|
|
59,
|
|
|
|
|
999,
|
|
|
|
|
);
|
|
|
|
|
final fdc.QueryResult<
|
|
|
|
|
dc.GetCompletedShiftsByBusinessIdData,
|
|
|
|
|
dc.GetCompletedShiftsByBusinessIdVariables
|
|
|
|
|
>
|
|
|
|
|
completedResult = await _service.connector
|
|
|
|
|
.getCompletedShiftsByBusinessId(
|
|
|
|
|
businessId: businessId,
|
|
|
|
|
dateFrom: _service.toTimestamp(weekRangeStart),
|
|
|
|
|
dateTo: _service.toTimestamp(weekRangeEnd),
|
|
|
|
|
)
|
|
|
|
|
.execute();
|
|
|
|
|
|
|
|
|
|
double weeklySpending = 0.0;
|
|
|
|
|
double next7DaysSpending = 0.0;
|
|
|
|
|
int weeklyShifts = 0;
|
|
|
|
|
int next7DaysScheduled = 0;
|
|
|
|
|
for (final dc.GetCompletedShiftsByBusinessIdShifts shift in completedResult.data.shifts) {
|
|
|
|
|
for (final dc.GetCompletedShiftsByBusinessIdShifts shift
|
|
|
|
|
in completedResult.data.shifts) {
|
|
|
|
|
final DateTime? shiftDate = shift.date?.toDateTime();
|
|
|
|
|
if (shiftDate == null) {
|
|
|
|
|
continue;
|
|
|
|
|
@@ -58,17 +75,27 @@ class HomeRepositoryImpl implements HomeRepositoryInterface {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
final DateTime start = DateTime(now.year, now.month, now.day);
|
|
|
|
|
final DateTime end = DateTime(now.year, now.month, now.day, 23, 59, 59, 999);
|
|
|
|
|
final DateTime end = DateTime(
|
|
|
|
|
now.year,
|
|
|
|
|
now.month,
|
|
|
|
|
now.day,
|
|
|
|
|
23,
|
|
|
|
|
59,
|
|
|
|
|
59,
|
|
|
|
|
999,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final fdc.QueryResult<dc.ListShiftRolesByBusinessAndDateRangeData,
|
|
|
|
|
dc.ListShiftRolesByBusinessAndDateRangeVariables> result =
|
|
|
|
|
await _service.connector
|
|
|
|
|
.listShiftRolesByBusinessAndDateRange(
|
|
|
|
|
businessId: businessId,
|
|
|
|
|
start: _service.toTimestamp(start),
|
|
|
|
|
end: _service.toTimestamp(end),
|
|
|
|
|
)
|
|
|
|
|
.execute();
|
|
|
|
|
final fdc.QueryResult<
|
|
|
|
|
dc.ListShiftRolesByBusinessAndDateRangeData,
|
|
|
|
|
dc.ListShiftRolesByBusinessAndDateRangeVariables
|
|
|
|
|
>
|
|
|
|
|
result = await _service.connector
|
|
|
|
|
.listShiftRolesByBusinessAndDateRange(
|
|
|
|
|
businessId: businessId,
|
|
|
|
|
start: _service.toTimestamp(start),
|
|
|
|
|
end: _service.toTimestamp(end),
|
|
|
|
|
)
|
|
|
|
|
.execute();
|
|
|
|
|
|
|
|
|
|
int totalNeeded = 0;
|
|
|
|
|
int totalFilled = 0;
|
|
|
|
|
@@ -90,12 +117,47 @@ class HomeRepositoryImpl implements HomeRepositoryInterface {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
UserSessionData getUserSessionData() {
|
|
|
|
|
Future<UserSessionData> getUserSessionData() async {
|
|
|
|
|
final dc.ClientSession? session = dc.ClientSessionStore.instance.session;
|
|
|
|
|
return UserSessionData(
|
|
|
|
|
businessName: session?.business?.businessName ?? '',
|
|
|
|
|
photoUrl: null, // Business photo isn't currently in session
|
|
|
|
|
);
|
|
|
|
|
final dc.ClientBusinessSession? business = session?.business;
|
|
|
|
|
|
|
|
|
|
// If session data is available, return it immediately
|
|
|
|
|
if (business != null) {
|
|
|
|
|
return UserSessionData(
|
|
|
|
|
businessName: business.businessName,
|
|
|
|
|
photoUrl: business.companyLogoUrl,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return await _service.run(() async {
|
|
|
|
|
// If session is not initialized, attempt to fetch business data to populate session
|
|
|
|
|
final String businessId = await _service.getBusinessId();
|
|
|
|
|
final fdc.QueryResult<dc.GetBusinessByIdData, dc.GetBusinessByIdVariables>
|
|
|
|
|
businessResult = await _service.connector
|
|
|
|
|
.getBusinessById(id: businessId)
|
|
|
|
|
.execute();
|
|
|
|
|
|
|
|
|
|
if (businessResult.data.business == null) {
|
|
|
|
|
throw Exception('Business data not found for ID: $businessId');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
final dc.ClientSession updatedSession = dc.ClientSession(
|
|
|
|
|
business: dc.ClientBusinessSession(
|
|
|
|
|
id: businessResult.data.business!.id,
|
|
|
|
|
businessName: businessResult.data.business?.businessName ?? '',
|
|
|
|
|
email: businessResult.data.business?.email ?? '',
|
|
|
|
|
city: businessResult.data.business?.city ?? '',
|
|
|
|
|
contactName: businessResult.data.business?.contactName ?? '',
|
|
|
|
|
companyLogoUrl: businessResult.data.business?.companyLogoUrl,
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
dc.ClientSessionStore.instance.setSession(updatedSession);
|
|
|
|
|
|
|
|
|
|
return UserSessionData(
|
|
|
|
|
businessName: businessResult.data.business!.businessName,
|
|
|
|
|
photoUrl: businessResult.data.business!.companyLogoUrl,
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
@@ -108,33 +170,34 @@ class HomeRepositoryImpl implements HomeRepositoryInterface {
|
|
|
|
|
final fdc.Timestamp startTimestamp = _service.toTimestamp(start);
|
|
|
|
|
final fdc.Timestamp endTimestamp = _service.toTimestamp(now);
|
|
|
|
|
|
|
|
|
|
final fdc.QueryResult<dc.ListShiftRolesByBusinessDateRangeCompletedOrdersData,
|
|
|
|
|
dc.ListShiftRolesByBusinessDateRangeCompletedOrdersVariables> result =
|
|
|
|
|
await _service.connector
|
|
|
|
|
.listShiftRolesByBusinessDateRangeCompletedOrders(
|
|
|
|
|
businessId: businessId,
|
|
|
|
|
start: startTimestamp,
|
|
|
|
|
end: endTimestamp,
|
|
|
|
|
)
|
|
|
|
|
.execute();
|
|
|
|
|
final fdc.QueryResult<
|
|
|
|
|
dc.ListShiftRolesByBusinessDateRangeCompletedOrdersData,
|
|
|
|
|
dc.ListShiftRolesByBusinessDateRangeCompletedOrdersVariables
|
|
|
|
|
>
|
|
|
|
|
result = await _service.connector
|
|
|
|
|
.listShiftRolesByBusinessDateRangeCompletedOrders(
|
|
|
|
|
businessId: businessId,
|
|
|
|
|
start: startTimestamp,
|
|
|
|
|
end: endTimestamp,
|
|
|
|
|
)
|
|
|
|
|
.execute();
|
|
|
|
|
|
|
|
|
|
return result.data.shiftRoles
|
|
|
|
|
.map((
|
|
|
|
|
dc.ListShiftRolesByBusinessDateRangeCompletedOrdersShiftRoles shiftRole,
|
|
|
|
|
) {
|
|
|
|
|
final String location = shiftRole.shift.location ?? shiftRole.shift.locationAddress ?? '';
|
|
|
|
|
final String type = shiftRole.shift.order.orderType.stringValue;
|
|
|
|
|
return ReorderItem(
|
|
|
|
|
orderId: shiftRole.shift.order.id,
|
|
|
|
|
title: '${shiftRole.role.name} - ${shiftRole.shift.title}',
|
|
|
|
|
location: location,
|
|
|
|
|
hourlyRate: shiftRole.role.costPerHour,
|
|
|
|
|
hours: shiftRole.hours ?? 0,
|
|
|
|
|
workers: shiftRole.count,
|
|
|
|
|
type: type,
|
|
|
|
|
);
|
|
|
|
|
})
|
|
|
|
|
.toList();
|
|
|
|
|
return result.data.shiftRoles.map((
|
|
|
|
|
dc.ListShiftRolesByBusinessDateRangeCompletedOrdersShiftRoles shiftRole,
|
|
|
|
|
) {
|
|
|
|
|
final String location =
|
|
|
|
|
shiftRole.shift.location ?? shiftRole.shift.locationAddress ?? '';
|
|
|
|
|
final String type = shiftRole.shift.order.orderType.stringValue;
|
|
|
|
|
return ReorderItem(
|
|
|
|
|
orderId: shiftRole.shift.order.id,
|
|
|
|
|
title: '${shiftRole.role.name} - ${shiftRole.shift.title}',
|
|
|
|
|
location: location,
|
|
|
|
|
hourlyRate: shiftRole.role.costPerHour,
|
|
|
|
|
hours: shiftRole.hours ?? 0,
|
|
|
|
|
workers: shiftRole.count,
|
|
|
|
|
type: type,
|
|
|
|
|
);
|
|
|
|
|
}).toList();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|