Merge pull request #289 from Oloodi/view_orders
view shits of ordes by date
This commit is contained in:
@@ -1,16 +1,16 @@
|
|||||||
# Basic Usage
|
# Basic Usage
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
ExampleConnector.instance.createAccount(createAccountVariables).execute();
|
ExampleConnector.instance.getStaffDocumentByKey(getStaffDocumentByKeyVariables).execute();
|
||||||
ExampleConnector.instance.updateAccount(updateAccountVariables).execute();
|
ExampleConnector.instance.listStaffDocumentsByStaffId(listStaffDocumentsByStaffIdVariables).execute();
|
||||||
ExampleConnector.instance.deleteAccount(deleteAccountVariables).execute();
|
ExampleConnector.instance.listStaffDocumentsByDocumentType(listStaffDocumentsByDocumentTypeVariables).execute();
|
||||||
ExampleConnector.instance.listBenefitsData(listBenefitsDataVariables).execute();
|
ExampleConnector.instance.listStaffDocumentsByStatus(listStaffDocumentsByStatusVariables).execute();
|
||||||
ExampleConnector.instance.getBenefitsDataByKey(getBenefitsDataByKeyVariables).execute();
|
ExampleConnector.instance.createTeam(createTeamVariables).execute();
|
||||||
ExampleConnector.instance.listBenefitsDataByStaffId(listBenefitsDataByStaffIdVariables).execute();
|
ExampleConnector.instance.updateTeam(updateTeamVariables).execute();
|
||||||
ExampleConnector.instance.listBenefitsDataByVendorBenefitPlanId(listBenefitsDataByVendorBenefitPlanIdVariables).execute();
|
ExampleConnector.instance.deleteTeam(deleteTeamVariables).execute();
|
||||||
ExampleConnector.instance.listBenefitsDataByVendorBenefitPlanIds(listBenefitsDataByVendorBenefitPlanIdsVariables).execute();
|
ExampleConnector.instance.listInvoiceTemplates(listInvoiceTemplatesVariables).execute();
|
||||||
ExampleConnector.instance.createConversation(createConversationVariables).execute();
|
ExampleConnector.instance.getInvoiceTemplateById(getInvoiceTemplateByIdVariables).execute();
|
||||||
ExampleConnector.instance.updateConversation(updateConversationVariables).execute();
|
ExampleConnector.instance.listInvoiceTemplatesByOwnerId(listInvoiceTemplatesByOwnerIdVariables).execute();
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -23,8 +23,8 @@ Optional fields can be discovered based on classes that have `Optional` object t
|
|||||||
This is an example of a mutation with an optional field:
|
This is an example of a mutation with an optional field:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
await ExampleConnector.instance.filterVendorBenefitPlans({ ... })
|
await ExampleConnector.instance.updateMessage({ ... })
|
||||||
.vendorId(...)
|
.conversationId(...)
|
||||||
.execute();
|
.execute();
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,267 @@
|
|||||||
|
part of 'generated.dart';
|
||||||
|
|
||||||
|
class ListAcceptedApplicationsByBusinessForDayVariablesBuilder {
|
||||||
|
String businessId;
|
||||||
|
Timestamp dayStart;
|
||||||
|
Timestamp dayEnd;
|
||||||
|
Optional<int> _offset = Optional.optional(nativeFromJson, nativeToJson);
|
||||||
|
Optional<int> _limit = Optional.optional(nativeFromJson, nativeToJson);
|
||||||
|
|
||||||
|
final FirebaseDataConnect _dataConnect; ListAcceptedApplicationsByBusinessForDayVariablesBuilder offset(int? t) {
|
||||||
|
_offset.value = t;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
ListAcceptedApplicationsByBusinessForDayVariablesBuilder limit(int? t) {
|
||||||
|
_limit.value = t;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListAcceptedApplicationsByBusinessForDayVariablesBuilder(this._dataConnect, {required this.businessId,required this.dayStart,required this.dayEnd,});
|
||||||
|
Deserializer<ListAcceptedApplicationsByBusinessForDayData> dataDeserializer = (dynamic json) => ListAcceptedApplicationsByBusinessForDayData.fromJson(jsonDecode(json));
|
||||||
|
Serializer<ListAcceptedApplicationsByBusinessForDayVariables> varsSerializer = (ListAcceptedApplicationsByBusinessForDayVariables vars) => jsonEncode(vars.toJson());
|
||||||
|
Future<QueryResult<ListAcceptedApplicationsByBusinessForDayData, ListAcceptedApplicationsByBusinessForDayVariables>> execute() {
|
||||||
|
return ref().execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryRef<ListAcceptedApplicationsByBusinessForDayData, ListAcceptedApplicationsByBusinessForDayVariables> ref() {
|
||||||
|
ListAcceptedApplicationsByBusinessForDayVariables vars= ListAcceptedApplicationsByBusinessForDayVariables(businessId: businessId,dayStart: dayStart,dayEnd: dayEnd,offset: _offset,limit: _limit,);
|
||||||
|
return _dataConnect.query("listAcceptedApplicationsByBusinessForDay", dataDeserializer, varsSerializer, vars);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListAcceptedApplicationsByBusinessForDayApplications {
|
||||||
|
final String id;
|
||||||
|
final String shiftId;
|
||||||
|
final String roleId;
|
||||||
|
final Timestamp? checkInTime;
|
||||||
|
final Timestamp? checkOutTime;
|
||||||
|
final Timestamp? appliedAt;
|
||||||
|
final ListAcceptedApplicationsByBusinessForDayApplicationsStaff staff;
|
||||||
|
ListAcceptedApplicationsByBusinessForDayApplications.fromJson(dynamic json):
|
||||||
|
|
||||||
|
id = nativeFromJson<String>(json['id']),
|
||||||
|
shiftId = nativeFromJson<String>(json['shiftId']),
|
||||||
|
roleId = nativeFromJson<String>(json['roleId']),
|
||||||
|
checkInTime = json['checkInTime'] == null ? null : Timestamp.fromJson(json['checkInTime']),
|
||||||
|
checkOutTime = json['checkOutTime'] == null ? null : Timestamp.fromJson(json['checkOutTime']),
|
||||||
|
appliedAt = json['appliedAt'] == null ? null : Timestamp.fromJson(json['appliedAt']),
|
||||||
|
staff = ListAcceptedApplicationsByBusinessForDayApplicationsStaff.fromJson(json['staff']);
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListAcceptedApplicationsByBusinessForDayApplications otherTyped = other as ListAcceptedApplicationsByBusinessForDayApplications;
|
||||||
|
return id == otherTyped.id &&
|
||||||
|
shiftId == otherTyped.shiftId &&
|
||||||
|
roleId == otherTyped.roleId &&
|
||||||
|
checkInTime == otherTyped.checkInTime &&
|
||||||
|
checkOutTime == otherTyped.checkOutTime &&
|
||||||
|
appliedAt == otherTyped.appliedAt &&
|
||||||
|
staff == otherTyped.staff;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hashAll([id.hashCode, shiftId.hashCode, roleId.hashCode, checkInTime.hashCode, checkOutTime.hashCode, appliedAt.hashCode, staff.hashCode]);
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['id'] = nativeToJson<String>(id);
|
||||||
|
json['shiftId'] = nativeToJson<String>(shiftId);
|
||||||
|
json['roleId'] = nativeToJson<String>(roleId);
|
||||||
|
if (checkInTime != null) {
|
||||||
|
json['checkInTime'] = checkInTime!.toJson();
|
||||||
|
}
|
||||||
|
if (checkOutTime != null) {
|
||||||
|
json['checkOutTime'] = checkOutTime!.toJson();
|
||||||
|
}
|
||||||
|
if (appliedAt != null) {
|
||||||
|
json['appliedAt'] = appliedAt!.toJson();
|
||||||
|
}
|
||||||
|
json['staff'] = staff.toJson();
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListAcceptedApplicationsByBusinessForDayApplications({
|
||||||
|
required this.id,
|
||||||
|
required this.shiftId,
|
||||||
|
required this.roleId,
|
||||||
|
this.checkInTime,
|
||||||
|
this.checkOutTime,
|
||||||
|
this.appliedAt,
|
||||||
|
required this.staff,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListAcceptedApplicationsByBusinessForDayApplicationsStaff {
|
||||||
|
final String id;
|
||||||
|
final String fullName;
|
||||||
|
final String? email;
|
||||||
|
final String? phone;
|
||||||
|
final String? photoUrl;
|
||||||
|
ListAcceptedApplicationsByBusinessForDayApplicationsStaff.fromJson(dynamic json):
|
||||||
|
|
||||||
|
id = nativeFromJson<String>(json['id']),
|
||||||
|
fullName = nativeFromJson<String>(json['fullName']),
|
||||||
|
email = json['email'] == null ? null : nativeFromJson<String>(json['email']),
|
||||||
|
phone = json['phone'] == null ? null : nativeFromJson<String>(json['phone']),
|
||||||
|
photoUrl = json['photoUrl'] == null ? null : nativeFromJson<String>(json['photoUrl']);
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListAcceptedApplicationsByBusinessForDayApplicationsStaff otherTyped = other as ListAcceptedApplicationsByBusinessForDayApplicationsStaff;
|
||||||
|
return id == otherTyped.id &&
|
||||||
|
fullName == otherTyped.fullName &&
|
||||||
|
email == otherTyped.email &&
|
||||||
|
phone == otherTyped.phone &&
|
||||||
|
photoUrl == otherTyped.photoUrl;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hashAll([id.hashCode, fullName.hashCode, email.hashCode, phone.hashCode, photoUrl.hashCode]);
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['id'] = nativeToJson<String>(id);
|
||||||
|
json['fullName'] = nativeToJson<String>(fullName);
|
||||||
|
if (email != null) {
|
||||||
|
json['email'] = nativeToJson<String?>(email);
|
||||||
|
}
|
||||||
|
if (phone != null) {
|
||||||
|
json['phone'] = nativeToJson<String?>(phone);
|
||||||
|
}
|
||||||
|
if (photoUrl != null) {
|
||||||
|
json['photoUrl'] = nativeToJson<String?>(photoUrl);
|
||||||
|
}
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListAcceptedApplicationsByBusinessForDayApplicationsStaff({
|
||||||
|
required this.id,
|
||||||
|
required this.fullName,
|
||||||
|
this.email,
|
||||||
|
this.phone,
|
||||||
|
this.photoUrl,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListAcceptedApplicationsByBusinessForDayData {
|
||||||
|
final List<ListAcceptedApplicationsByBusinessForDayApplications> applications;
|
||||||
|
ListAcceptedApplicationsByBusinessForDayData.fromJson(dynamic json):
|
||||||
|
|
||||||
|
applications = (json['applications'] as List<dynamic>)
|
||||||
|
.map((e) => ListAcceptedApplicationsByBusinessForDayApplications.fromJson(e))
|
||||||
|
.toList();
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListAcceptedApplicationsByBusinessForDayData otherTyped = other as ListAcceptedApplicationsByBusinessForDayData;
|
||||||
|
return applications == otherTyped.applications;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => applications.hashCode;
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['applications'] = applications.map((e) => e.toJson()).toList();
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListAcceptedApplicationsByBusinessForDayData({
|
||||||
|
required this.applications,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListAcceptedApplicationsByBusinessForDayVariables {
|
||||||
|
final String businessId;
|
||||||
|
final Timestamp dayStart;
|
||||||
|
final Timestamp dayEnd;
|
||||||
|
late final Optional<int>offset;
|
||||||
|
late final Optional<int>limit;
|
||||||
|
@Deprecated('fromJson is deprecated for Variable classes as they are no longer required for deserialization.')
|
||||||
|
ListAcceptedApplicationsByBusinessForDayVariables.fromJson(Map<String, dynamic> json):
|
||||||
|
|
||||||
|
businessId = nativeFromJson<String>(json['businessId']),
|
||||||
|
dayStart = Timestamp.fromJson(json['dayStart']),
|
||||||
|
dayEnd = Timestamp.fromJson(json['dayEnd']) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
offset = Optional.optional(nativeFromJson, nativeToJson);
|
||||||
|
offset.value = json['offset'] == null ? null : nativeFromJson<int>(json['offset']);
|
||||||
|
|
||||||
|
|
||||||
|
limit = Optional.optional(nativeFromJson, nativeToJson);
|
||||||
|
limit.value = json['limit'] == null ? null : nativeFromJson<int>(json['limit']);
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListAcceptedApplicationsByBusinessForDayVariables otherTyped = other as ListAcceptedApplicationsByBusinessForDayVariables;
|
||||||
|
return businessId == otherTyped.businessId &&
|
||||||
|
dayStart == otherTyped.dayStart &&
|
||||||
|
dayEnd == otherTyped.dayEnd &&
|
||||||
|
offset == otherTyped.offset &&
|
||||||
|
limit == otherTyped.limit;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hashAll([businessId.hashCode, dayStart.hashCode, dayEnd.hashCode, offset.hashCode, limit.hashCode]);
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['businessId'] = nativeToJson<String>(businessId);
|
||||||
|
json['dayStart'] = dayStart.toJson();
|
||||||
|
json['dayEnd'] = dayEnd.toJson();
|
||||||
|
if(offset.state == OptionalState.set) {
|
||||||
|
json['offset'] = offset.toJson();
|
||||||
|
}
|
||||||
|
if(limit.state == OptionalState.set) {
|
||||||
|
json['limit'] = limit.toJson();
|
||||||
|
}
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListAcceptedApplicationsByBusinessForDayVariables({
|
||||||
|
required this.businessId,
|
||||||
|
required this.dayStart,
|
||||||
|
required this.dayEnd,
|
||||||
|
required this.offset,
|
||||||
|
required this.limit,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,243 @@
|
|||||||
|
part of 'generated.dart';
|
||||||
|
|
||||||
|
class ListAcceptedApplicationsByShiftRoleKeyVariablesBuilder {
|
||||||
|
String shiftId;
|
||||||
|
String roleId;
|
||||||
|
Optional<int> _offset = Optional.optional(nativeFromJson, nativeToJson);
|
||||||
|
Optional<int> _limit = Optional.optional(nativeFromJson, nativeToJson);
|
||||||
|
|
||||||
|
final FirebaseDataConnect _dataConnect; ListAcceptedApplicationsByShiftRoleKeyVariablesBuilder offset(int? t) {
|
||||||
|
_offset.value = t;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
ListAcceptedApplicationsByShiftRoleKeyVariablesBuilder limit(int? t) {
|
||||||
|
_limit.value = t;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListAcceptedApplicationsByShiftRoleKeyVariablesBuilder(this._dataConnect, {required this.shiftId,required this.roleId,});
|
||||||
|
Deserializer<ListAcceptedApplicationsByShiftRoleKeyData> dataDeserializer = (dynamic json) => ListAcceptedApplicationsByShiftRoleKeyData.fromJson(jsonDecode(json));
|
||||||
|
Serializer<ListAcceptedApplicationsByShiftRoleKeyVariables> varsSerializer = (ListAcceptedApplicationsByShiftRoleKeyVariables vars) => jsonEncode(vars.toJson());
|
||||||
|
Future<QueryResult<ListAcceptedApplicationsByShiftRoleKeyData, ListAcceptedApplicationsByShiftRoleKeyVariables>> execute() {
|
||||||
|
return ref().execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryRef<ListAcceptedApplicationsByShiftRoleKeyData, ListAcceptedApplicationsByShiftRoleKeyVariables> ref() {
|
||||||
|
ListAcceptedApplicationsByShiftRoleKeyVariables vars= ListAcceptedApplicationsByShiftRoleKeyVariables(shiftId: shiftId,roleId: roleId,offset: _offset,limit: _limit,);
|
||||||
|
return _dataConnect.query("listAcceptedApplicationsByShiftRoleKey", dataDeserializer, varsSerializer, vars);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListAcceptedApplicationsByShiftRoleKeyApplications {
|
||||||
|
final String id;
|
||||||
|
final Timestamp? checkInTime;
|
||||||
|
final Timestamp? checkOutTime;
|
||||||
|
final ListAcceptedApplicationsByShiftRoleKeyApplicationsStaff staff;
|
||||||
|
ListAcceptedApplicationsByShiftRoleKeyApplications.fromJson(dynamic json):
|
||||||
|
|
||||||
|
id = nativeFromJson<String>(json['id']),
|
||||||
|
checkInTime = json['checkInTime'] == null ? null : Timestamp.fromJson(json['checkInTime']),
|
||||||
|
checkOutTime = json['checkOutTime'] == null ? null : Timestamp.fromJson(json['checkOutTime']),
|
||||||
|
staff = ListAcceptedApplicationsByShiftRoleKeyApplicationsStaff.fromJson(json['staff']);
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListAcceptedApplicationsByShiftRoleKeyApplications otherTyped = other as ListAcceptedApplicationsByShiftRoleKeyApplications;
|
||||||
|
return id == otherTyped.id &&
|
||||||
|
checkInTime == otherTyped.checkInTime &&
|
||||||
|
checkOutTime == otherTyped.checkOutTime &&
|
||||||
|
staff == otherTyped.staff;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hashAll([id.hashCode, checkInTime.hashCode, checkOutTime.hashCode, staff.hashCode]);
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['id'] = nativeToJson<String>(id);
|
||||||
|
if (checkInTime != null) {
|
||||||
|
json['checkInTime'] = checkInTime!.toJson();
|
||||||
|
}
|
||||||
|
if (checkOutTime != null) {
|
||||||
|
json['checkOutTime'] = checkOutTime!.toJson();
|
||||||
|
}
|
||||||
|
json['staff'] = staff.toJson();
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListAcceptedApplicationsByShiftRoleKeyApplications({
|
||||||
|
required this.id,
|
||||||
|
this.checkInTime,
|
||||||
|
this.checkOutTime,
|
||||||
|
required this.staff,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListAcceptedApplicationsByShiftRoleKeyApplicationsStaff {
|
||||||
|
final String id;
|
||||||
|
final String fullName;
|
||||||
|
final String? email;
|
||||||
|
final String? phone;
|
||||||
|
final String? photoUrl;
|
||||||
|
ListAcceptedApplicationsByShiftRoleKeyApplicationsStaff.fromJson(dynamic json):
|
||||||
|
|
||||||
|
id = nativeFromJson<String>(json['id']),
|
||||||
|
fullName = nativeFromJson<String>(json['fullName']),
|
||||||
|
email = json['email'] == null ? null : nativeFromJson<String>(json['email']),
|
||||||
|
phone = json['phone'] == null ? null : nativeFromJson<String>(json['phone']),
|
||||||
|
photoUrl = json['photoUrl'] == null ? null : nativeFromJson<String>(json['photoUrl']);
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListAcceptedApplicationsByShiftRoleKeyApplicationsStaff otherTyped = other as ListAcceptedApplicationsByShiftRoleKeyApplicationsStaff;
|
||||||
|
return id == otherTyped.id &&
|
||||||
|
fullName == otherTyped.fullName &&
|
||||||
|
email == otherTyped.email &&
|
||||||
|
phone == otherTyped.phone &&
|
||||||
|
photoUrl == otherTyped.photoUrl;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hashAll([id.hashCode, fullName.hashCode, email.hashCode, phone.hashCode, photoUrl.hashCode]);
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['id'] = nativeToJson<String>(id);
|
||||||
|
json['fullName'] = nativeToJson<String>(fullName);
|
||||||
|
if (email != null) {
|
||||||
|
json['email'] = nativeToJson<String?>(email);
|
||||||
|
}
|
||||||
|
if (phone != null) {
|
||||||
|
json['phone'] = nativeToJson<String?>(phone);
|
||||||
|
}
|
||||||
|
if (photoUrl != null) {
|
||||||
|
json['photoUrl'] = nativeToJson<String?>(photoUrl);
|
||||||
|
}
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListAcceptedApplicationsByShiftRoleKeyApplicationsStaff({
|
||||||
|
required this.id,
|
||||||
|
required this.fullName,
|
||||||
|
this.email,
|
||||||
|
this.phone,
|
||||||
|
this.photoUrl,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListAcceptedApplicationsByShiftRoleKeyData {
|
||||||
|
final List<ListAcceptedApplicationsByShiftRoleKeyApplications> applications;
|
||||||
|
ListAcceptedApplicationsByShiftRoleKeyData.fromJson(dynamic json):
|
||||||
|
|
||||||
|
applications = (json['applications'] as List<dynamic>)
|
||||||
|
.map((e) => ListAcceptedApplicationsByShiftRoleKeyApplications.fromJson(e))
|
||||||
|
.toList();
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListAcceptedApplicationsByShiftRoleKeyData otherTyped = other as ListAcceptedApplicationsByShiftRoleKeyData;
|
||||||
|
return applications == otherTyped.applications;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => applications.hashCode;
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['applications'] = applications.map((e) => e.toJson()).toList();
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListAcceptedApplicationsByShiftRoleKeyData({
|
||||||
|
required this.applications,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListAcceptedApplicationsByShiftRoleKeyVariables {
|
||||||
|
final String shiftId;
|
||||||
|
final String roleId;
|
||||||
|
late final Optional<int>offset;
|
||||||
|
late final Optional<int>limit;
|
||||||
|
@Deprecated('fromJson is deprecated for Variable classes as they are no longer required for deserialization.')
|
||||||
|
ListAcceptedApplicationsByShiftRoleKeyVariables.fromJson(Map<String, dynamic> json):
|
||||||
|
|
||||||
|
shiftId = nativeFromJson<String>(json['shiftId']),
|
||||||
|
roleId = nativeFromJson<String>(json['roleId']) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
offset = Optional.optional(nativeFromJson, nativeToJson);
|
||||||
|
offset.value = json['offset'] == null ? null : nativeFromJson<int>(json['offset']);
|
||||||
|
|
||||||
|
|
||||||
|
limit = Optional.optional(nativeFromJson, nativeToJson);
|
||||||
|
limit.value = json['limit'] == null ? null : nativeFromJson<int>(json['limit']);
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListAcceptedApplicationsByShiftRoleKeyVariables otherTyped = other as ListAcceptedApplicationsByShiftRoleKeyVariables;
|
||||||
|
return shiftId == otherTyped.shiftId &&
|
||||||
|
roleId == otherTyped.roleId &&
|
||||||
|
offset == otherTyped.offset &&
|
||||||
|
limit == otherTyped.limit;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hashAll([shiftId.hashCode, roleId.hashCode, offset.hashCode, limit.hashCode]);
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['shiftId'] = nativeToJson<String>(shiftId);
|
||||||
|
json['roleId'] = nativeToJson<String>(roleId);
|
||||||
|
if(offset.state == OptionalState.set) {
|
||||||
|
json['offset'] = offset.toJson();
|
||||||
|
}
|
||||||
|
if(limit.state == OptionalState.set) {
|
||||||
|
json['limit'] = limit.toJson();
|
||||||
|
}
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListAcceptedApplicationsByShiftRoleKeyVariables({
|
||||||
|
required this.shiftId,
|
||||||
|
required this.roleId,
|
||||||
|
required this.offset,
|
||||||
|
required this.limit,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,364 @@
|
|||||||
|
part of 'generated.dart';
|
||||||
|
|
||||||
|
class ListShiftRolesByBusinessAndDateRangeVariablesBuilder {
|
||||||
|
String businessId;
|
||||||
|
Timestamp start;
|
||||||
|
Timestamp end;
|
||||||
|
Optional<int> _offset = Optional.optional(nativeFromJson, nativeToJson);
|
||||||
|
Optional<int> _limit = Optional.optional(nativeFromJson, nativeToJson);
|
||||||
|
|
||||||
|
final FirebaseDataConnect _dataConnect; ListShiftRolesByBusinessAndDateRangeVariablesBuilder offset(int? t) {
|
||||||
|
_offset.value = t;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
ListShiftRolesByBusinessAndDateRangeVariablesBuilder limit(int? t) {
|
||||||
|
_limit.value = t;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListShiftRolesByBusinessAndDateRangeVariablesBuilder(this._dataConnect, {required this.businessId,required this.start,required this.end,});
|
||||||
|
Deserializer<ListShiftRolesByBusinessAndDateRangeData> dataDeserializer = (dynamic json) => ListShiftRolesByBusinessAndDateRangeData.fromJson(jsonDecode(json));
|
||||||
|
Serializer<ListShiftRolesByBusinessAndDateRangeVariables> varsSerializer = (ListShiftRolesByBusinessAndDateRangeVariables vars) => jsonEncode(vars.toJson());
|
||||||
|
Future<QueryResult<ListShiftRolesByBusinessAndDateRangeData, ListShiftRolesByBusinessAndDateRangeVariables>> execute() {
|
||||||
|
return ref().execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryRef<ListShiftRolesByBusinessAndDateRangeData, ListShiftRolesByBusinessAndDateRangeVariables> ref() {
|
||||||
|
ListShiftRolesByBusinessAndDateRangeVariables vars= ListShiftRolesByBusinessAndDateRangeVariables(businessId: businessId,start: start,end: end,offset: _offset,limit: _limit,);
|
||||||
|
return _dataConnect.query("listShiftRolesByBusinessAndDateRange", dataDeserializer, varsSerializer, vars);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListShiftRolesByBusinessAndDateRangeShiftRoles {
|
||||||
|
final String shiftId;
|
||||||
|
final String roleId;
|
||||||
|
final int count;
|
||||||
|
final int? assigned;
|
||||||
|
final double? hours;
|
||||||
|
final Timestamp? startTime;
|
||||||
|
final Timestamp? endTime;
|
||||||
|
final double? totalValue;
|
||||||
|
final ListShiftRolesByBusinessAndDateRangeShiftRolesRole role;
|
||||||
|
final ListShiftRolesByBusinessAndDateRangeShiftRolesShift shift;
|
||||||
|
ListShiftRolesByBusinessAndDateRangeShiftRoles.fromJson(dynamic json):
|
||||||
|
|
||||||
|
shiftId = nativeFromJson<String>(json['shiftId']),
|
||||||
|
roleId = nativeFromJson<String>(json['roleId']),
|
||||||
|
count = nativeFromJson<int>(json['count']),
|
||||||
|
assigned = json['assigned'] == null ? null : nativeFromJson<int>(json['assigned']),
|
||||||
|
hours = json['hours'] == null ? null : nativeFromJson<double>(json['hours']),
|
||||||
|
startTime = json['startTime'] == null ? null : Timestamp.fromJson(json['startTime']),
|
||||||
|
endTime = json['endTime'] == null ? null : Timestamp.fromJson(json['endTime']),
|
||||||
|
totalValue = json['totalValue'] == null ? null : nativeFromJson<double>(json['totalValue']),
|
||||||
|
role = ListShiftRolesByBusinessAndDateRangeShiftRolesRole.fromJson(json['role']),
|
||||||
|
shift = ListShiftRolesByBusinessAndDateRangeShiftRolesShift.fromJson(json['shift']);
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListShiftRolesByBusinessAndDateRangeShiftRoles otherTyped = other as ListShiftRolesByBusinessAndDateRangeShiftRoles;
|
||||||
|
return shiftId == otherTyped.shiftId &&
|
||||||
|
roleId == otherTyped.roleId &&
|
||||||
|
count == otherTyped.count &&
|
||||||
|
assigned == otherTyped.assigned &&
|
||||||
|
hours == otherTyped.hours &&
|
||||||
|
startTime == otherTyped.startTime &&
|
||||||
|
endTime == otherTyped.endTime &&
|
||||||
|
totalValue == otherTyped.totalValue &&
|
||||||
|
role == otherTyped.role &&
|
||||||
|
shift == otherTyped.shift;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hashAll([shiftId.hashCode, roleId.hashCode, count.hashCode, assigned.hashCode, hours.hashCode, startTime.hashCode, endTime.hashCode, totalValue.hashCode, role.hashCode, shift.hashCode]);
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['shiftId'] = nativeToJson<String>(shiftId);
|
||||||
|
json['roleId'] = nativeToJson<String>(roleId);
|
||||||
|
json['count'] = nativeToJson<int>(count);
|
||||||
|
if (assigned != null) {
|
||||||
|
json['assigned'] = nativeToJson<int?>(assigned);
|
||||||
|
}
|
||||||
|
if (hours != null) {
|
||||||
|
json['hours'] = nativeToJson<double?>(hours);
|
||||||
|
}
|
||||||
|
if (startTime != null) {
|
||||||
|
json['startTime'] = startTime!.toJson();
|
||||||
|
}
|
||||||
|
if (endTime != null) {
|
||||||
|
json['endTime'] = endTime!.toJson();
|
||||||
|
}
|
||||||
|
if (totalValue != null) {
|
||||||
|
json['totalValue'] = nativeToJson<double?>(totalValue);
|
||||||
|
}
|
||||||
|
json['role'] = role.toJson();
|
||||||
|
json['shift'] = shift.toJson();
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListShiftRolesByBusinessAndDateRangeShiftRoles({
|
||||||
|
required this.shiftId,
|
||||||
|
required this.roleId,
|
||||||
|
required this.count,
|
||||||
|
this.assigned,
|
||||||
|
this.hours,
|
||||||
|
this.startTime,
|
||||||
|
this.endTime,
|
||||||
|
this.totalValue,
|
||||||
|
required this.role,
|
||||||
|
required this.shift,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListShiftRolesByBusinessAndDateRangeShiftRolesRole {
|
||||||
|
final String id;
|
||||||
|
final String name;
|
||||||
|
ListShiftRolesByBusinessAndDateRangeShiftRolesRole.fromJson(dynamic json):
|
||||||
|
|
||||||
|
id = nativeFromJson<String>(json['id']),
|
||||||
|
name = nativeFromJson<String>(json['name']);
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListShiftRolesByBusinessAndDateRangeShiftRolesRole otherTyped = other as ListShiftRolesByBusinessAndDateRangeShiftRolesRole;
|
||||||
|
return id == otherTyped.id &&
|
||||||
|
name == otherTyped.name;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hashAll([id.hashCode, name.hashCode]);
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['id'] = nativeToJson<String>(id);
|
||||||
|
json['name'] = nativeToJson<String>(name);
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListShiftRolesByBusinessAndDateRangeShiftRolesRole({
|
||||||
|
required this.id,
|
||||||
|
required this.name,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListShiftRolesByBusinessAndDateRangeShiftRolesShift {
|
||||||
|
final String id;
|
||||||
|
final Timestamp? date;
|
||||||
|
final String? location;
|
||||||
|
final String? locationAddress;
|
||||||
|
final String title;
|
||||||
|
final ListShiftRolesByBusinessAndDateRangeShiftRolesShiftOrder order;
|
||||||
|
ListShiftRolesByBusinessAndDateRangeShiftRolesShift.fromJson(dynamic json):
|
||||||
|
|
||||||
|
id = nativeFromJson<String>(json['id']),
|
||||||
|
date = json['date'] == null ? null : Timestamp.fromJson(json['date']),
|
||||||
|
location = json['location'] == null ? null : nativeFromJson<String>(json['location']),
|
||||||
|
locationAddress = json['locationAddress'] == null ? null : nativeFromJson<String>(json['locationAddress']),
|
||||||
|
title = nativeFromJson<String>(json['title']),
|
||||||
|
order = ListShiftRolesByBusinessAndDateRangeShiftRolesShiftOrder.fromJson(json['order']);
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListShiftRolesByBusinessAndDateRangeShiftRolesShift otherTyped = other as ListShiftRolesByBusinessAndDateRangeShiftRolesShift;
|
||||||
|
return id == otherTyped.id &&
|
||||||
|
date == otherTyped.date &&
|
||||||
|
location == otherTyped.location &&
|
||||||
|
locationAddress == otherTyped.locationAddress &&
|
||||||
|
title == otherTyped.title &&
|
||||||
|
order == otherTyped.order;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hashAll([id.hashCode, date.hashCode, location.hashCode, locationAddress.hashCode, title.hashCode, order.hashCode]);
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['id'] = nativeToJson<String>(id);
|
||||||
|
if (date != null) {
|
||||||
|
json['date'] = date!.toJson();
|
||||||
|
}
|
||||||
|
if (location != null) {
|
||||||
|
json['location'] = nativeToJson<String?>(location);
|
||||||
|
}
|
||||||
|
if (locationAddress != null) {
|
||||||
|
json['locationAddress'] = nativeToJson<String?>(locationAddress);
|
||||||
|
}
|
||||||
|
json['title'] = nativeToJson<String>(title);
|
||||||
|
json['order'] = order.toJson();
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListShiftRolesByBusinessAndDateRangeShiftRolesShift({
|
||||||
|
required this.id,
|
||||||
|
this.date,
|
||||||
|
this.location,
|
||||||
|
this.locationAddress,
|
||||||
|
required this.title,
|
||||||
|
required this.order,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListShiftRolesByBusinessAndDateRangeShiftRolesShiftOrder {
|
||||||
|
final String id;
|
||||||
|
ListShiftRolesByBusinessAndDateRangeShiftRolesShiftOrder.fromJson(dynamic json):
|
||||||
|
|
||||||
|
id = nativeFromJson<String>(json['id']);
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListShiftRolesByBusinessAndDateRangeShiftRolesShiftOrder otherTyped = other as ListShiftRolesByBusinessAndDateRangeShiftRolesShiftOrder;
|
||||||
|
return id == otherTyped.id;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => id.hashCode;
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['id'] = nativeToJson<String>(id);
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListShiftRolesByBusinessAndDateRangeShiftRolesShiftOrder({
|
||||||
|
required this.id,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListShiftRolesByBusinessAndDateRangeData {
|
||||||
|
final List<ListShiftRolesByBusinessAndDateRangeShiftRoles> shiftRoles;
|
||||||
|
ListShiftRolesByBusinessAndDateRangeData.fromJson(dynamic json):
|
||||||
|
|
||||||
|
shiftRoles = (json['shiftRoles'] as List<dynamic>)
|
||||||
|
.map((e) => ListShiftRolesByBusinessAndDateRangeShiftRoles.fromJson(e))
|
||||||
|
.toList();
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListShiftRolesByBusinessAndDateRangeData otherTyped = other as ListShiftRolesByBusinessAndDateRangeData;
|
||||||
|
return shiftRoles == otherTyped.shiftRoles;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => shiftRoles.hashCode;
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['shiftRoles'] = shiftRoles.map((e) => e.toJson()).toList();
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListShiftRolesByBusinessAndDateRangeData({
|
||||||
|
required this.shiftRoles,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class ListShiftRolesByBusinessAndDateRangeVariables {
|
||||||
|
final String businessId;
|
||||||
|
final Timestamp start;
|
||||||
|
final Timestamp end;
|
||||||
|
late final Optional<int>offset;
|
||||||
|
late final Optional<int>limit;
|
||||||
|
@Deprecated('fromJson is deprecated for Variable classes as they are no longer required for deserialization.')
|
||||||
|
ListShiftRolesByBusinessAndDateRangeVariables.fromJson(Map<String, dynamic> json):
|
||||||
|
|
||||||
|
businessId = nativeFromJson<String>(json['businessId']),
|
||||||
|
start = Timestamp.fromJson(json['start']),
|
||||||
|
end = Timestamp.fromJson(json['end']) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
offset = Optional.optional(nativeFromJson, nativeToJson);
|
||||||
|
offset.value = json['offset'] == null ? null : nativeFromJson<int>(json['offset']);
|
||||||
|
|
||||||
|
|
||||||
|
limit = Optional.optional(nativeFromJson, nativeToJson);
|
||||||
|
limit.value = json['limit'] == null ? null : nativeFromJson<int>(json['limit']);
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if(identical(this, other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(other.runtimeType != runtimeType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ListShiftRolesByBusinessAndDateRangeVariables otherTyped = other as ListShiftRolesByBusinessAndDateRangeVariables;
|
||||||
|
return businessId == otherTyped.businessId &&
|
||||||
|
start == otherTyped.start &&
|
||||||
|
end == otherTyped.end &&
|
||||||
|
offset == otherTyped.offset &&
|
||||||
|
limit == otherTyped.limit;
|
||||||
|
|
||||||
|
}
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hashAll([businessId.hashCode, start.hashCode, end.hashCode, offset.hashCode, limit.hashCode]);
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
Map<String, dynamic> json = {};
|
||||||
|
json['businessId'] = nativeToJson<String>(businessId);
|
||||||
|
json['start'] = start.toJson();
|
||||||
|
json['end'] = end.toJson();
|
||||||
|
if(offset.state == OptionalState.set) {
|
||||||
|
json['offset'] = offset.toJson();
|
||||||
|
}
|
||||||
|
if(limit.state == OptionalState.set) {
|
||||||
|
json['limit'] = limit.toJson();
|
||||||
|
}
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListShiftRolesByBusinessAndDateRangeVariables({
|
||||||
|
required this.businessId,
|
||||||
|
required this.start,
|
||||||
|
required this.end,
|
||||||
|
required this.offset,
|
||||||
|
required this.limit,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@@ -19,6 +19,8 @@ class OrderItem extends Equatable {
|
|||||||
required this.filled,
|
required this.filled,
|
||||||
required this.workersNeeded,
|
required this.workersNeeded,
|
||||||
required this.hourlyRate,
|
required this.hourlyRate,
|
||||||
|
this.hours = 0,
|
||||||
|
this.totalValue = 0,
|
||||||
this.confirmedApps = const <Map<String, dynamic>>[],
|
this.confirmedApps = const <Map<String, dynamic>>[],
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -58,6 +60,12 @@ class OrderItem extends Equatable {
|
|||||||
/// Hourly pay rate.
|
/// Hourly pay rate.
|
||||||
final double hourlyRate;
|
final double hourlyRate;
|
||||||
|
|
||||||
|
/// Total hours for the shift role.
|
||||||
|
final double hours;
|
||||||
|
|
||||||
|
/// Total value for the shift role.
|
||||||
|
final double totalValue;
|
||||||
|
|
||||||
/// List of confirmed worker applications.
|
/// List of confirmed worker applications.
|
||||||
final List<Map<String, dynamic>> confirmedApps;
|
final List<Map<String, dynamic>> confirmedApps;
|
||||||
|
|
||||||
@@ -75,6 +83,8 @@ class OrderItem extends Equatable {
|
|||||||
filled,
|
filled,
|
||||||
workersNeeded,
|
workersNeeded,
|
||||||
hourlyRate,
|
hourlyRate,
|
||||||
|
hours,
|
||||||
|
totalValue,
|
||||||
confirmedApps,
|
confirmedApps,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ class ClientCreateOrderRepositoryImpl
|
|||||||
end.isBefore(start) ? end.add(const Duration(days: 1)) : end;
|
end.isBefore(start) ? end.add(const Duration(days: 1)) : end;
|
||||||
final hours = normalizedEnd.difference(start).inMinutes / 60.0;
|
final hours = normalizedEnd.difference(start).inMinutes / 60.0;
|
||||||
final rate = order.roleRates[position.role] ?? 0;
|
final rate = order.roleRates[position.role] ?? 0;
|
||||||
final totalValue = rate * hours;
|
final totalValue = rate * hours * position.count;
|
||||||
|
|
||||||
await _dataConnect
|
await _dataConnect
|
||||||
.createShiftRole(
|
.createShiftRole(
|
||||||
@@ -143,7 +143,7 @@ class ClientCreateOrderRepositoryImpl
|
|||||||
end.isBefore(start) ? end.add(const Duration(days: 1)) : end;
|
end.isBefore(start) ? end.add(const Duration(days: 1)) : end;
|
||||||
final hours = normalizedEnd.difference(start).inMinutes / 60.0;
|
final hours = normalizedEnd.difference(start).inMinutes / 60.0;
|
||||||
final rate = order.roleRates[position.role] ?? 0;
|
final rate = order.roleRates[position.role] ?? 0;
|
||||||
total += rate * hours;
|
total += rate * hours * position.count;
|
||||||
}
|
}
|
||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,155 @@
|
|||||||
import 'package:krow_data_connect/krow_data_connect.dart';
|
import 'package:firebase_auth/firebase_auth.dart' as firebase;
|
||||||
import 'package:krow_domain/krow_domain.dart';
|
import 'package:firebase_data_connect/firebase_data_connect.dart' as fdc;
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
import 'package:krow_data_connect/krow_data_connect.dart' as dc;
|
||||||
|
import 'package:krow_domain/krow_domain.dart' as domain;
|
||||||
import '../../domain/repositories/i_view_orders_repository.dart';
|
import '../../domain/repositories/i_view_orders_repository.dart';
|
||||||
|
|
||||||
/// Implementation of [IViewOrdersRepository] providing data from [OrderRepositoryMock].
|
/// Implementation of [IViewOrdersRepository] using Data Connect.
|
||||||
class ViewOrdersRepositoryImpl implements IViewOrdersRepository {
|
class ViewOrdersRepositoryImpl implements IViewOrdersRepository {
|
||||||
final OrderRepositoryMock _orderRepositoryMock;
|
final firebase.FirebaseAuth _firebaseAuth;
|
||||||
|
final dc.ExampleConnector _dataConnect;
|
||||||
|
|
||||||
/// Creates a [ViewOrdersRepositoryImpl] with the given [OrderRepositoryMock].
|
ViewOrdersRepositoryImpl({
|
||||||
ViewOrdersRepositoryImpl({required OrderRepositoryMock orderRepositoryMock})
|
required firebase.FirebaseAuth firebaseAuth,
|
||||||
: _orderRepositoryMock = orderRepositoryMock;
|
required dc.ExampleConnector dataConnect,
|
||||||
|
}) : _firebaseAuth = firebaseAuth,
|
||||||
|
_dataConnect = dataConnect;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<OrderItem>> getOrders() {
|
Future<List<domain.OrderItem>> getOrdersForRange({
|
||||||
return _orderRepositoryMock.getOrders();
|
required DateTime start,
|
||||||
|
required DateTime end,
|
||||||
|
}) async {
|
||||||
|
final businessId = dc.ClientSessionStore.instance.session?.business?.id;
|
||||||
|
if (businessId == null || businessId.isEmpty) {
|
||||||
|
await _firebaseAuth.signOut();
|
||||||
|
throw Exception('Business is missing. Please sign in again.');
|
||||||
|
}
|
||||||
|
|
||||||
|
final startTimestamp = _toTimestamp(_startOfDay(start));
|
||||||
|
final endTimestamp = _toTimestamp(_endOfDay(end));
|
||||||
|
final result = await _dataConnect
|
||||||
|
.listShiftRolesByBusinessAndDateRange(
|
||||||
|
businessId: businessId,
|
||||||
|
start: startTimestamp,
|
||||||
|
end: endTimestamp,
|
||||||
|
)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
final businessName =
|
||||||
|
dc.ClientSessionStore.instance.session?.business?.businessName ??
|
||||||
|
'Your Company';
|
||||||
|
|
||||||
|
return result.data.shiftRoles.map((shiftRole) {
|
||||||
|
print(
|
||||||
|
'ViewOrders shiftRole: shiftId=${shiftRole.shiftId} roleId=${shiftRole.roleId} '
|
||||||
|
'startTime=${shiftRole.startTime?.toJson()} endTime=${shiftRole.endTime?.toJson()} '
|
||||||
|
'hours=${shiftRole.hours} totalValue=${shiftRole.totalValue}',
|
||||||
|
);
|
||||||
|
final shiftDate = shiftRole.shift.date?.toDateTime();
|
||||||
|
final dateStr = shiftDate == null
|
||||||
|
? ''
|
||||||
|
: DateFormat('yyyy-MM-dd').format(shiftDate);
|
||||||
|
final startTime = _formatTime(shiftRole.startTime);
|
||||||
|
final endTime = _formatTime(shiftRole.endTime);
|
||||||
|
final filled = shiftRole.assigned ?? 0;
|
||||||
|
final workersNeeded = shiftRole.count;
|
||||||
|
final hours = shiftRole.hours ?? 0;
|
||||||
|
final totalValue = shiftRole.totalValue ?? 0;
|
||||||
|
final hourlyRate = _hourlyRate(shiftRole.totalValue, shiftRole.hours);
|
||||||
|
final status = filled >= workersNeeded ? 'filled' : 'open';
|
||||||
|
|
||||||
|
return domain.OrderItem(
|
||||||
|
id: _shiftRoleKey(shiftRole.shiftId, shiftRole.roleId),
|
||||||
|
title: '${shiftRole.role.name} - ${shiftRole.shift.title}',
|
||||||
|
clientName: businessName,
|
||||||
|
status: status,
|
||||||
|
date: dateStr,
|
||||||
|
startTime: startTime,
|
||||||
|
endTime: endTime,
|
||||||
|
location: shiftRole.shift.location ?? '',
|
||||||
|
locationAddress: shiftRole.shift.locationAddress ?? '',
|
||||||
|
filled: filled,
|
||||||
|
workersNeeded: workersNeeded,
|
||||||
|
hourlyRate: hourlyRate,
|
||||||
|
hours: hours,
|
||||||
|
totalValue: totalValue,
|
||||||
|
confirmedApps: const <Map<String, dynamic>>[],
|
||||||
|
);
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Map<String, List<Map<String, dynamic>>>> getAcceptedApplicationsForDay(
|
||||||
|
DateTime day,
|
||||||
|
) async {
|
||||||
|
final businessId = dc.ClientSessionStore.instance.session?.business?.id;
|
||||||
|
if (businessId == null || businessId.isEmpty) {
|
||||||
|
await _firebaseAuth.signOut();
|
||||||
|
throw Exception('Business is missing. Please sign in again.');
|
||||||
|
}
|
||||||
|
|
||||||
|
final dayStart = _toTimestamp(_startOfDay(day));
|
||||||
|
final dayEnd = _toTimestamp(_endOfDay(day));
|
||||||
|
final result = await _dataConnect
|
||||||
|
.listAcceptedApplicationsByBusinessForDay(
|
||||||
|
businessId: businessId,
|
||||||
|
dayStart: dayStart,
|
||||||
|
dayEnd: dayEnd,
|
||||||
|
)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
final Map<String, List<Map<String, dynamic>>> grouped = {};
|
||||||
|
for (final application in result.data.applications) {
|
||||||
|
print(
|
||||||
|
'ViewOrders app: shiftId=${application.shiftId} roleId=${application.roleId} '
|
||||||
|
'checkIn=${application.checkInTime?.toJson()} checkOut=${application.checkOutTime?.toJson()}',
|
||||||
|
);
|
||||||
|
final key = _shiftRoleKey(application.shiftId, application.roleId);
|
||||||
|
grouped.putIfAbsent(key, () => <Map<String, dynamic>>[]);
|
||||||
|
grouped[key]!.add(<String, dynamic>{
|
||||||
|
'id': application.id,
|
||||||
|
'worker_id': application.staff.id,
|
||||||
|
'worker_name': application.staff.fullName,
|
||||||
|
'status': 'confirmed',
|
||||||
|
'photo_url': application.staff.photoUrl,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return grouped;
|
||||||
|
}
|
||||||
|
|
||||||
|
String _shiftRoleKey(String shiftId, String roleId) {
|
||||||
|
return '$shiftId:$roleId';
|
||||||
|
}
|
||||||
|
|
||||||
|
fdc.Timestamp _toTimestamp(DateTime dateTime) {
|
||||||
|
final utc = dateTime.toUtc();
|
||||||
|
final seconds = utc.millisecondsSinceEpoch ~/ 1000;
|
||||||
|
final nanoseconds = (utc.microsecondsSinceEpoch % 1000000) * 1000;
|
||||||
|
return fdc.Timestamp(nanoseconds, seconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
DateTime _startOfDay(DateTime dateTime) {
|
||||||
|
return DateTime(dateTime.year, dateTime.month, dateTime.day);
|
||||||
|
}
|
||||||
|
|
||||||
|
DateTime _endOfDay(DateTime dateTime) {
|
||||||
|
return DateTime(dateTime.year, dateTime.month, dateTime.day, 23, 59, 59);
|
||||||
|
}
|
||||||
|
|
||||||
|
String _formatTime(fdc.Timestamp? timestamp) {
|
||||||
|
if (timestamp == null) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
final dateTime = timestamp.toDateTime();
|
||||||
|
return DateFormat('HH:mm').format(dateTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
double _hourlyRate(double? totalValue, double? hours) {
|
||||||
|
if (totalValue == null || hours == null || hours == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return totalValue / hours;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import 'package:krow_core/core.dart';
|
||||||
|
|
||||||
|
class OrdersDayArguments extends UseCaseArgument {
|
||||||
|
const OrdersDayArguments({required this.day});
|
||||||
|
|
||||||
|
final DateTime day;
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => <Object?>[day];
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
import 'package:krow_core/core.dart';
|
||||||
|
|
||||||
|
class OrdersRangeArguments extends UseCaseArgument {
|
||||||
|
const OrdersRangeArguments({
|
||||||
|
required this.start,
|
||||||
|
required this.end,
|
||||||
|
});
|
||||||
|
|
||||||
|
final DateTime start;
|
||||||
|
final DateTime end;
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => <Object?>[start, end];
|
||||||
|
}
|
||||||
@@ -3,5 +3,13 @@ import 'package:krow_domain/krow_domain.dart';
|
|||||||
/// Repository interface for fetching and managing client orders.
|
/// Repository interface for fetching and managing client orders.
|
||||||
abstract class IViewOrdersRepository {
|
abstract class IViewOrdersRepository {
|
||||||
/// Fetches a list of [OrderItem] for the client.
|
/// Fetches a list of [OrderItem] for the client.
|
||||||
Future<List<OrderItem>> getOrders();
|
Future<List<OrderItem>> getOrdersForRange({
|
||||||
|
required DateTime start,
|
||||||
|
required DateTime end,
|
||||||
|
});
|
||||||
|
|
||||||
|
/// Fetches accepted staff applications for the given day, grouped by shift+role.
|
||||||
|
Future<Map<String, List<Map<String, dynamic>>>> getAcceptedApplicationsForDay(
|
||||||
|
DateTime day,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import 'package:krow_core/core.dart';
|
||||||
|
import '../repositories/i_view_orders_repository.dart';
|
||||||
|
import '../arguments/orders_day_arguments.dart';
|
||||||
|
|
||||||
|
class GetAcceptedApplicationsForDayUseCase
|
||||||
|
implements UseCase<OrdersDayArguments, Map<String, List<Map<String, dynamic>>>> {
|
||||||
|
const GetAcceptedApplicationsForDayUseCase(this._repository);
|
||||||
|
|
||||||
|
final IViewOrdersRepository _repository;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Map<String, List<Map<String, dynamic>>>> call(
|
||||||
|
OrdersDayArguments input,
|
||||||
|
) {
|
||||||
|
return _repository.getAcceptedApplicationsForDay(input.day);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,19 +1,24 @@
|
|||||||
import 'package:krow_core/core.dart';
|
import 'package:krow_core/core.dart';
|
||||||
import 'package:krow_domain/krow_domain.dart';
|
import 'package:krow_domain/krow_domain.dart';
|
||||||
import '../repositories/i_view_orders_repository.dart';
|
import '../repositories/i_view_orders_repository.dart';
|
||||||
|
import '../arguments/orders_range_arguments.dart';
|
||||||
|
|
||||||
/// Use case for retrieving the list of client orders.
|
/// Use case for retrieving the list of client orders.
|
||||||
///
|
///
|
||||||
/// This use case encapsulates the business rule of fetching orders
|
/// This use case encapsulates the business rule of fetching orders
|
||||||
/// and delegates the data retrieval to the [IViewOrdersRepository].
|
/// and delegates the data retrieval to the [IViewOrdersRepository].
|
||||||
class GetOrdersUseCase implements NoInputUseCase<List<OrderItem>> {
|
class GetOrdersUseCase
|
||||||
|
implements UseCase<OrdersRangeArguments, List<OrderItem>> {
|
||||||
final IViewOrdersRepository _repository;
|
final IViewOrdersRepository _repository;
|
||||||
|
|
||||||
/// Creates a [GetOrdersUseCase] with the required [IViewOrdersRepository].
|
/// Creates a [GetOrdersUseCase] with the required [IViewOrdersRepository].
|
||||||
GetOrdersUseCase(this._repository);
|
GetOrdersUseCase(this._repository);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<OrderItem>> call() {
|
Future<List<OrderItem>> call(OrdersRangeArguments input) {
|
||||||
return _repository.getOrders();
|
return _repository.getOrdersForRange(
|
||||||
|
start: input.start,
|
||||||
|
end: input.end,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:krow_domain/krow_domain.dart';
|
import 'package:krow_domain/krow_domain.dart';
|
||||||
|
import '../../domain/arguments/orders_day_arguments.dart';
|
||||||
|
import '../../domain/arguments/orders_range_arguments.dart';
|
||||||
|
import '../../domain/usecases/get_accepted_applications_for_day_use_case.dart';
|
||||||
import '../../domain/usecases/get_orders_use_case.dart';
|
import '../../domain/usecases/get_orders_use_case.dart';
|
||||||
import 'view_orders_state.dart';
|
import 'view_orders_state.dart';
|
||||||
|
|
||||||
@@ -8,25 +11,43 @@ import 'view_orders_state.dart';
|
|||||||
///
|
///
|
||||||
/// This Cubit handles loading orders, date selection, and tab filtering.
|
/// This Cubit handles loading orders, date selection, and tab filtering.
|
||||||
class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
||||||
ViewOrdersCubit({required GetOrdersUseCase getOrdersUseCase})
|
ViewOrdersCubit({
|
||||||
|
required GetOrdersUseCase getOrdersUseCase,
|
||||||
|
required GetAcceptedApplicationsForDayUseCase getAcceptedAppsUseCase,
|
||||||
|
})
|
||||||
: _getOrdersUseCase = getOrdersUseCase,
|
: _getOrdersUseCase = getOrdersUseCase,
|
||||||
|
_getAcceptedAppsUseCase = getAcceptedAppsUseCase,
|
||||||
super(ViewOrdersState(selectedDate: DateTime.now())) {
|
super(ViewOrdersState(selectedDate: DateTime.now())) {
|
||||||
_init();
|
_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
final GetOrdersUseCase _getOrdersUseCase;
|
final GetOrdersUseCase _getOrdersUseCase;
|
||||||
|
final GetAcceptedApplicationsForDayUseCase _getAcceptedAppsUseCase;
|
||||||
|
|
||||||
void _init() {
|
void _init() {
|
||||||
updateWeekOffset(0); // Initialize calendar days
|
updateWeekOffset(0); // Initialize calendar days
|
||||||
loadOrders();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Loads the list of orders using the [GetOrdersUseCase].
|
Future<void> _loadOrdersForRange({
|
||||||
Future<void> loadOrders() async {
|
required DateTime rangeStart,
|
||||||
|
required DateTime rangeEnd,
|
||||||
|
required DateTime dayForApps,
|
||||||
|
}) async {
|
||||||
emit(state.copyWith(status: ViewOrdersStatus.loading));
|
emit(state.copyWith(status: ViewOrdersStatus.loading));
|
||||||
try {
|
try {
|
||||||
final List<OrderItem> orders = await _getOrdersUseCase();
|
final List<OrderItem> orders = await _getOrdersUseCase(
|
||||||
emit(state.copyWith(status: ViewOrdersStatus.success, orders: orders));
|
OrdersRangeArguments(start: rangeStart, end: rangeEnd),
|
||||||
|
);
|
||||||
|
final apps = await _getAcceptedAppsUseCase(
|
||||||
|
OrdersDayArguments(day: dayForApps),
|
||||||
|
);
|
||||||
|
final List<OrderItem> updatedOrders = _applyApplications(orders, apps);
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
status: ViewOrdersStatus.success,
|
||||||
|
orders: updatedOrders,
|
||||||
|
),
|
||||||
|
);
|
||||||
_updateDerivedState();
|
_updateDerivedState();
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
emit(state.copyWith(status: ViewOrdersStatus.failure));
|
emit(state.copyWith(status: ViewOrdersStatus.failure));
|
||||||
@@ -35,7 +56,7 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
|||||||
|
|
||||||
void selectDate(DateTime date) {
|
void selectDate(DateTime date) {
|
||||||
emit(state.copyWith(selectedDate: date));
|
emit(state.copyWith(selectedDate: date));
|
||||||
_updateDerivedState();
|
_refreshAcceptedApplications(date);
|
||||||
}
|
}
|
||||||
|
|
||||||
void selectFilterTab(String tabId) {
|
void selectFilterTab(String tabId) {
|
||||||
@@ -46,8 +67,25 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
|||||||
void updateWeekOffset(int offset) {
|
void updateWeekOffset(int offset) {
|
||||||
final int newWeekOffset = state.weekOffset + offset;
|
final int newWeekOffset = state.weekOffset + offset;
|
||||||
final List<DateTime> calendarDays = _calculateCalendarDays(newWeekOffset);
|
final List<DateTime> calendarDays = _calculateCalendarDays(newWeekOffset);
|
||||||
emit(state.copyWith(weekOffset: newWeekOffset, calendarDays: calendarDays));
|
final DateTime? selectedDate = state.selectedDate;
|
||||||
_updateDerivedState();
|
final DateTime updatedSelectedDate =
|
||||||
|
selectedDate != null &&
|
||||||
|
calendarDays.any((day) => _isSameDay(day, selectedDate))
|
||||||
|
? selectedDate
|
||||||
|
: calendarDays.first;
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
weekOffset: newWeekOffset,
|
||||||
|
calendarDays: calendarDays,
|
||||||
|
selectedDate: updatedSelectedDate,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
_loadOrdersForRange(
|
||||||
|
rangeStart: calendarDays.first,
|
||||||
|
rangeEnd: calendarDays.last,
|
||||||
|
dayForApps: updatedSelectedDate,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _updateDerivedState() {
|
void _updateDerivedState() {
|
||||||
@@ -66,6 +104,57 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _refreshAcceptedApplications(DateTime day) async {
|
||||||
|
try {
|
||||||
|
final apps = await _getAcceptedAppsUseCase(
|
||||||
|
OrdersDayArguments(day: day),
|
||||||
|
);
|
||||||
|
final List<OrderItem> updatedOrders =
|
||||||
|
_applyApplications(state.orders, apps);
|
||||||
|
emit(state.copyWith(orders: updatedOrders));
|
||||||
|
_updateDerivedState();
|
||||||
|
} catch (_) {
|
||||||
|
// Keep existing data on failure.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<OrderItem> _applyApplications(
|
||||||
|
List<OrderItem> orders,
|
||||||
|
Map<String, List<Map<String, dynamic>>> apps,
|
||||||
|
) {
|
||||||
|
return orders.map((order) {
|
||||||
|
final confirmed = apps[order.id] ?? const <Map<String, dynamic>>[];
|
||||||
|
if (confirmed.isEmpty) {
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
|
||||||
|
final filled = confirmed.length;
|
||||||
|
final status =
|
||||||
|
filled >= order.workersNeeded ? 'filled' : order.status;
|
||||||
|
return OrderItem(
|
||||||
|
id: order.id,
|
||||||
|
title: order.title,
|
||||||
|
clientName: order.clientName,
|
||||||
|
status: status,
|
||||||
|
date: order.date,
|
||||||
|
startTime: order.startTime,
|
||||||
|
endTime: order.endTime,
|
||||||
|
location: order.location,
|
||||||
|
locationAddress: order.locationAddress,
|
||||||
|
filled: filled,
|
||||||
|
workersNeeded: order.workersNeeded,
|
||||||
|
hourlyRate: order.hourlyRate,
|
||||||
|
hours: order.hours,
|
||||||
|
totalValue: order.totalValue,
|
||||||
|
confirmedApps: confirmed,
|
||||||
|
);
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _isSameDay(DateTime a, DateTime b) {
|
||||||
|
return a.year == b.year && a.month == b.month && a.day == b.day;
|
||||||
|
}
|
||||||
|
|
||||||
List<DateTime> _calculateCalendarDays(int weekOffset) {
|
List<DateTime> _calculateCalendarDays(int weekOffset) {
|
||||||
final DateTime now = DateTime.now();
|
final DateTime now = DateTime.now();
|
||||||
final int jsDay = now.weekday == 7 ? 0 : now.weekday;
|
final int jsDay = now.weekday == 7 ? 0 : now.weekday;
|
||||||
|
|||||||
@@ -112,12 +112,8 @@ class _ViewOrderCardState extends State<ViewOrderCard> {
|
|||||||
? ((order.filled / order.workersNeeded) * 100).round()
|
? ((order.filled / order.workersNeeded) * 100).round()
|
||||||
: 0;
|
: 0;
|
||||||
|
|
||||||
// Simulation of cost/hours calculation
|
final double hours = order.hours;
|
||||||
const double hours = 8.0;
|
final double cost = order.totalValue;
|
||||||
final double cost =
|
|
||||||
order.hourlyRate *
|
|
||||||
hours *
|
|
||||||
(order.filled > 0 ? order.filled : order.workersNeeded);
|
|
||||||
|
|
||||||
return Container(
|
return Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@@ -730,25 +726,7 @@ class _OrderEditSheetState extends State<_OrderEditSheet> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
double _calculateTotalCost() {
|
double _calculateTotalCost() {
|
||||||
double total = 0;
|
return widget.order.totalValue;
|
||||||
for (final Map<String, dynamic> pos in _positions) {
|
|
||||||
double hours = 8.0;
|
|
||||||
try {
|
|
||||||
final List<String> startParts = pos['start_time'].toString().split(':');
|
|
||||||
final List<String> endParts = pos['end_time'].toString().split(':');
|
|
||||||
final double startH =
|
|
||||||
int.parse(startParts[0]) + int.parse(startParts[1]) / 60;
|
|
||||||
final double endH =
|
|
||||||
int.parse(endParts[0]) + int.parse(endParts[1]) / 60;
|
|
||||||
hours = endH - startH;
|
|
||||||
if (hours < 0) hours += 24;
|
|
||||||
} catch (_) {}
|
|
||||||
|
|
||||||
final double rate =
|
|
||||||
_selectedVendor?.rates[pos['role']] ?? widget.order.hourlyRate;
|
|
||||||
total += hours * rate * (pos['count'] as int);
|
|
||||||
}
|
|
||||||
return total;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_modular/flutter_modular.dart';
|
import 'package:flutter_modular/flutter_modular.dart';
|
||||||
import 'package:krow_data_connect/krow_data_connect.dart';
|
import 'package:krow_data_connect/krow_data_connect.dart';
|
||||||
|
import 'package:firebase_auth/firebase_auth.dart' as firebase;
|
||||||
|
|
||||||
import 'data/repositories/view_orders_repository_impl.dart';
|
import 'data/repositories/view_orders_repository_impl.dart';
|
||||||
import 'domain/repositories/i_view_orders_repository.dart';
|
import 'domain/repositories/i_view_orders_repository.dart';
|
||||||
|
import 'domain/usecases/get_accepted_applications_for_day_use_case.dart';
|
||||||
import 'domain/usecases/get_orders_use_case.dart';
|
import 'domain/usecases/get_orders_use_case.dart';
|
||||||
import 'presentation/blocs/view_orders_cubit.dart';
|
import 'presentation/blocs/view_orders_cubit.dart';
|
||||||
import 'presentation/pages/view_orders_page.dart';
|
import 'presentation/pages/view_orders_page.dart';
|
||||||
@@ -21,15 +23,22 @@ class ViewOrdersModule extends Module {
|
|||||||
// Repositories
|
// Repositories
|
||||||
i.addLazySingleton<IViewOrdersRepository>(
|
i.addLazySingleton<IViewOrdersRepository>(
|
||||||
() => ViewOrdersRepositoryImpl(
|
() => ViewOrdersRepositoryImpl(
|
||||||
orderRepositoryMock: i.get<OrderRepositoryMock>(),
|
firebaseAuth: firebase.FirebaseAuth.instance,
|
||||||
|
dataConnect: ExampleConnector.instance,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
// UseCases
|
// UseCases
|
||||||
i.addLazySingleton(GetOrdersUseCase.new);
|
i.addLazySingleton(GetOrdersUseCase.new);
|
||||||
|
i.addLazySingleton(GetAcceptedApplicationsForDayUseCase.new);
|
||||||
|
|
||||||
// BLoCs
|
// BLoCs
|
||||||
i.addSingleton(ViewOrdersCubit.new);
|
i.addSingleton(
|
||||||
|
() => ViewOrdersCubit(
|
||||||
|
getOrdersUseCase: i.get<GetOrdersUseCase>(),
|
||||||
|
getAcceptedAppsUseCase: i.get<GetAcceptedApplicationsForDayUseCase>(),
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ dependencies:
|
|||||||
path: ../../../domain
|
path: ../../../domain
|
||||||
krow_core:
|
krow_core:
|
||||||
path: ../../../core
|
path: ../../../core
|
||||||
|
|
||||||
# UI
|
# UI
|
||||||
lucide_icons: ^0.257.0
|
lucide_icons: ^0.257.0
|
||||||
intl: ^0.20.1
|
intl: ^0.20.1
|
||||||
|
|||||||
@@ -302,3 +302,57 @@ query getApplicationsByStaffId(
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#getting staffs of an shiftrole ACCEPTED for orders view client
|
||||||
|
query listAcceptedApplicationsByShiftRoleKey(
|
||||||
|
$shiftId: UUID!
|
||||||
|
$roleId: UUID!
|
||||||
|
$offset: Int
|
||||||
|
$limit: Int
|
||||||
|
) @auth(level: USER) {
|
||||||
|
applications(
|
||||||
|
where: {
|
||||||
|
shiftId: { eq: $shiftId }
|
||||||
|
roleId: { eq: $roleId }
|
||||||
|
status: { eq: ACCEPTED }
|
||||||
|
}
|
||||||
|
offset: $offset
|
||||||
|
limit: $limit
|
||||||
|
orderBy: { appliedAt: ASC }
|
||||||
|
) {
|
||||||
|
id
|
||||||
|
checkInTime
|
||||||
|
checkOutTime
|
||||||
|
staff { id fullName email phone photoUrl }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#getting staffs of an shiftrole ACCEPTED for orders of the day view client
|
||||||
|
query listAcceptedApplicationsByBusinessForDay(
|
||||||
|
$businessId: UUID!
|
||||||
|
$dayStart: Timestamp!
|
||||||
|
$dayEnd: Timestamp!
|
||||||
|
$offset: Int
|
||||||
|
$limit: Int
|
||||||
|
) @auth(level: USER) {
|
||||||
|
applications(
|
||||||
|
where: {
|
||||||
|
status: { eq: ACCEPTED }
|
||||||
|
shift: {
|
||||||
|
date: { ge: $dayStart, le: $dayEnd }
|
||||||
|
order: { businessId: { eq: $businessId } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
offset: $offset
|
||||||
|
limit: $limit
|
||||||
|
orderBy: { appliedAt: ASC }
|
||||||
|
) {
|
||||||
|
id
|
||||||
|
shiftId
|
||||||
|
roleId
|
||||||
|
checkInTime
|
||||||
|
checkOutTime
|
||||||
|
appliedAt
|
||||||
|
staff { id fullName email phone photoUrl }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -293,3 +293,42 @@ query listShiftRolesByVendorId(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#orders view client
|
||||||
|
query listShiftRolesByBusinessAndDateRange(
|
||||||
|
$businessId: UUID!
|
||||||
|
$start: Timestamp!
|
||||||
|
$end: Timestamp!
|
||||||
|
$offset: Int
|
||||||
|
$limit: Int
|
||||||
|
) @auth(level: USER) {
|
||||||
|
shiftRoles(
|
||||||
|
where: {
|
||||||
|
shift: {
|
||||||
|
date: { ge: $start, le: $end }
|
||||||
|
order: { businessId: { eq: $businessId } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
offset: $offset
|
||||||
|
limit: $limit
|
||||||
|
orderBy: { createdAt: DESC }
|
||||||
|
) {
|
||||||
|
shiftId
|
||||||
|
roleId
|
||||||
|
count
|
||||||
|
assigned
|
||||||
|
hours
|
||||||
|
startTime
|
||||||
|
endTime
|
||||||
|
totalValue
|
||||||
|
role { id name }
|
||||||
|
shift {
|
||||||
|
id
|
||||||
|
date
|
||||||
|
location
|
||||||
|
locationAddress
|
||||||
|
title
|
||||||
|
order { id }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user