diff --git a/apps/mobile/apps/staff/android/app/google-services.json b/apps/mobile/apps/staff/android/app/google-services.json index f4d57e10..5718b28d 100644 --- a/apps/mobile/apps/staff/android/app/google-services.json +++ b/apps/mobile/apps/staff/android/app/google-services.json @@ -31,10 +31,10 @@ "client_type": 3 }, { - "client_id": "933560802882-dppsapp5i3lsfrlm1mhob2s21peofg1t.apps.googleusercontent.com", + "client_id": "933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com", "client_type": 2, "ios_info": { - "bundle_id": "com.krow.app.staff.dev" + "bundle_id": "com.krowwithus.staff" } } ] @@ -67,10 +67,10 @@ "client_type": 3 }, { - "client_id": "933560802882-dppsapp5i3lsfrlm1mhob2s21peofg1t.apps.googleusercontent.com", + "client_id": "933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com", "client_type": 2, "ios_info": { - "bundle_id": "com.krow.app.staff.dev" + "bundle_id": "com.krowwithus.staff" } } ] @@ -86,47 +86,11 @@ }, "oauth_client": [ { - "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", - "client_type": 3 - }, - { - "client_id": "933560802882-dppsapp5i3lsfrlm1mhob2s21peofg1t.apps.googleusercontent.com", - "client_type": 2, - "ios_info": { - "bundle_id": "com.krow.app.staff.dev" - } - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:933560802882:android:1ae05d85c865f77c7757db", - "android_client_info": { - "package_name": "com.krowwithus.staff" - } - }, - "oauth_client": [ - { - "client_id": "933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com", + "client_id": "933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com", "client_type": 1, "android_info": { - "package_name": "com.krowwithus.staff", - "certificate_hash": "ac917ae8470ab29f1107c773c6017ff5ea5d102d" + "package_name": "com.krowwithus.client", + "certificate_hash": "c3efbe1642239c599c16ad04c7fac340902fe280" } }, { @@ -147,10 +111,46 @@ "client_type": 3 }, { - "client_id": "933560802882-dppsapp5i3lsfrlm1mhob2s21peofg1t.apps.googleusercontent.com", + "client_id": "933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com", "client_type": 2, "ios_info": { - "bundle_id": "com.krow.app.staff.dev" + "bundle_id": "com.krowwithus.staff" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:933560802882:android:1ae05d85c865f77c7757db", + "android_client_info": { + "package_name": "com.krowwithus.staff" + } + }, + "oauth_client": [ + { + "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.krowwithus.staff" } } ] diff --git a/apps/mobile/apps/staff/android/app/google-services.json_back b/apps/mobile/apps/staff/android/app/google-services.json_back new file mode 100644 index 00000000..f4d57e10 --- /dev/null +++ b/apps/mobile/apps/staff/android/app/google-services.json_back @@ -0,0 +1,162 @@ +{ + "project_info": { + "project_number": "933560802882", + "project_id": "krow-workforce-dev", + "storage_bucket": "krow-workforce-dev.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:933560802882:android:edcddb83ea4bbb517757db", + "android_client_info": { + "package_name": "com.krow.app.business.dev" + } + }, + "oauth_client": [ + { + "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "933560802882-dppsapp5i3lsfrlm1mhob2s21peofg1t.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.krow.app.staff.dev" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:933560802882:android:d49b8c0f4d19e95e7757db", + "android_client_info": { + "package_name": "com.krow.app.staff.dev" + } + }, + "oauth_client": [ + { + "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "933560802882-dppsapp5i3lsfrlm1mhob2s21peofg1t.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.krow.app.staff.dev" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:933560802882:android:da13569105659ead7757db", + "android_client_info": { + "package_name": "com.krowwithus.client" + } + }, + "oauth_client": [ + { + "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "933560802882-dppsapp5i3lsfrlm1mhob2s21peofg1t.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.krow.app.staff.dev" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:933560802882:android:1ae05d85c865f77c7757db", + "android_client_info": { + "package_name": "com.krowwithus.staff" + } + }, + "oauth_client": [ + { + "client_id": "933560802882-ikdfv3o5f47g36qqgvfq55o4m19n7gk4.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.krowwithus.staff", + "certificate_hash": "ac917ae8470ab29f1107c773c6017ff5ea5d102d" + } + }, + { + "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "933560802882-dppsapp5i3lsfrlm1mhob2s21peofg1t.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.krow.app.staff.dev" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/apps/mobile/packages/features/staff/authentication/lib/src/presentation/pages/phone_verification_page.dart b/apps/mobile/packages/features/staff/authentication/lib/src/presentation/pages/phone_verification_page.dart index 0192487c..2a1bc849 100644 --- a/apps/mobile/packages/features/staff/authentication/lib/src/presentation/pages/phone_verification_page.dart +++ b/apps/mobile/packages/features/staff/authentication/lib/src/presentation/pages/phone_verification_page.dart @@ -27,6 +27,7 @@ class PhoneVerificationPage extends StatelessWidget { required BuildContext context, required String phoneNumber, }) { + print('Phone verification input: "$phoneNumber" len=${phoneNumber.length}'); if (phoneNumber.length == 10) { BlocProvider.of( context, diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/form_i9_page.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/form_i9_page.dart index e22d97e8..fc513b7a 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/form_i9_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/form_i9_page.dart @@ -159,7 +159,7 @@ class _FormI9PageState extends State { SizedBox( width: double.infinity, child: ElevatedButton( - onPressed: () => Modular.to.pop(), + onPressed: () => Modular.to.pop(true), style: ElevatedButton.styleFrom( backgroundColor: UiColors.primary, foregroundColor: UiColors.bgPopup, @@ -513,23 +513,23 @@ class _FormI9PageState extends State { _buildRadioOption( context, state, - 'citizen', + 'CITIZEN', '1. A citizen of the United States', ), const SizedBox(height: 12), _buildRadioOption( context, state, - 'noncitizen_national', + 'NONCITIZEN', '2. A noncitizen national of the United States', ), const SizedBox(height: 12), _buildRadioOption( context, state, - 'permanent_resident', + 'PERMANENT_RESIDENT', '3. A lawful permanent resident', - child: state.citizenshipStatus == 'permanent_resident' + child: state.citizenshipStatus == 'PERMANENT_RESIDENT' ? Padding( padding: const EdgeInsets.only(top: 12), child: _buildTextField( @@ -545,9 +545,9 @@ class _FormI9PageState extends State { _buildRadioOption( context, state, - 'alien_authorized', + 'ALIEN', '4. An alien authorized to work', - child: state.citizenshipStatus == 'alien_authorized' + child: state.citizenshipStatus == 'ALIEN' ? Padding( padding: const EdgeInsets.only(top: 12), child: Column( @@ -765,13 +765,13 @@ class _FormI9PageState extends State { String _getReadableCitizenship(String status) { switch (status) { - case 'citizen': + case 'CITIZEN': return 'US Citizen'; - case 'noncitizen_national': + case 'NONCITIZEN': return 'Noncitizen National'; - case 'permanent_resident': + case 'PERMANENT_RESIDENT': return 'Permanent Resident'; - case 'alien_authorized': + case 'ALIEN': return 'Alien Authorized to Work'; default: return 'Unknown'; diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/form_w4_page.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/form_w4_page.dart index 46139bb2..7d147b91 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/form_w4_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/form_w4_page.dart @@ -205,7 +205,7 @@ class _FormW4PageState extends State { SizedBox( width: double.infinity, child: ElevatedButton( - onPressed: () => Modular.to.pop(), + onPressed: () => Modular.to.pop(true), style: ElevatedButton.styleFrom( backgroundColor: UiColors.primary, foregroundColor: UiColors.bgPopup, @@ -460,7 +460,7 @@ class _FormW4PageState extends State { _buildRadioOption( context, state, - 'single', + 'SINGLE', 'Single or Married filing separately', null, ), @@ -468,7 +468,7 @@ class _FormW4PageState extends State { _buildRadioOption( context, state, - 'married', + 'MARRIED', 'Married filing jointly or Qualifying surviving spouse', null, ), @@ -476,7 +476,7 @@ class _FormW4PageState extends State { _buildRadioOption( context, state, - 'head_of_household', + 'HEAD', 'Head of household', 'Check only if you\'re unmarried and pay more than half the costs of keeping up a home', ), diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/tax_forms_page.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/tax_forms_page.dart index bc241a7b..f214a99b 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/tax_forms_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/tax_forms/lib/src/presentation/pages/tax_forms_page.dart @@ -75,7 +75,7 @@ class TaxFormsPage extends StatelessWidget { spacing: UiConstants.space6, children: [ _buildProgressOverview(state.forms), - ...state.forms.map(_buildFormCard), + ...state.forms.map((TaxForm form) => _buildFormCard(context, form)), _buildInfoCard(), ], ), @@ -138,16 +138,22 @@ class TaxFormsPage extends StatelessWidget { ); } - Widget _buildFormCard(TaxForm form) { + Widget _buildFormCard(BuildContext context, TaxForm form) { // Helper to get icon based on type (could be in entity or a mapper) final String icon = form is I9TaxForm ? '🛂' : '📋'; return GestureDetector( - onTap: () { + onTap: () async { if (form is I9TaxForm) { - Modular.to.pushNamed('i9', arguments: form); + final result = await Modular.to.pushNamed('i9', arguments: form); + if (result == true && context.mounted) { + BlocProvider.of(context).loadTaxForms(); + } } else if (form is W4TaxForm) { - Modular.to.pushNamed('w4', arguments: form); + final result = await Modular.to.pushNamed('w4', arguments: form); + if (result == true && context.mounted) { + BlocProvider.of(context).loadTaxForms(); + } } }, child: Container( diff --git a/backend/dataconnect/functions/clean.gql b/backend/dataconnect/functions/clean.gql new file mode 100644 index 00000000..df8e84d5 --- /dev/null +++ b/backend/dataconnect/functions/clean.gql @@ -0,0 +1,67 @@ +mutation unseedAll @auth(level: USER) { + # ---------------------------------- + # Leaf/Join tables + # ---------------------------------- + taskComment_deleteMany(all: true) + memberTask_deleteMany(all: true) + assignment_deleteMany(all: true) + application_deleteMany(all: true) + message_deleteMany(all: true) + userConversation_deleteMany(all: true) + conversation_deleteMany(all: true) + activityLog_deleteMany(all: true) + clientFeedback_deleteMany(all: true) + recentPayment_deleteMany(all: true) + invoice_deleteMany(all: true) + invoiceTemplate_deleteMany(all: true) + customRateCard_deleteMany(all: true) + vendorRate_deleteMany(all: true) + vendorBenefitPlan_deleteMany(all: true) + staffCourse_deleteMany(all: true) + staffDocument_deleteMany(all: true) + staffRole_deleteMany(all: true) + staffAvailability_deleteMany(all: true) + staffAvailabilityStats_deleteMany(all: true) + emergencyContact_deleteMany(all: true) + taxForm_deleteMany(all: true) + certificate_deleteMany(all: true) + + # ---------------------------------- + # Tasks / Shifts / Orders + # ---------------------------------- + task_deleteMany(all: true) + shiftRole_deleteMany(all: true) + shift_deleteMany(all: true) + order_deleteMany(all: true) + + # ---------------------------------- + # Teams / Hubs / Org + # ---------------------------------- + teamMember_deleteMany(all: true) + teamHudDepartment_deleteMany(all: true) + team_deleteMany(all: true) + teamHub_deleteMany(all: true) + hub_deleteMany(all: true) + + # ---------------------------------- + # Catalog / Config + # ---------------------------------- + roleCategory_deleteMany(all: true) + role_deleteMany(all: true) + category_deleteMany(all: true) + level_deleteMany(all: true) + course_deleteMany(all: true) + faqData_deleteMany(all: true) + benefitsData_deleteMany(all: true) + attireOption_deleteMany(all: true) + document_deleteMany(all: true) + + # ---------------------------------- + # Core entities + # ---------------------------------- + staff_deleteMany(all: true) + vendor_deleteMany(all: true) + business_deleteMany(all: true) + account_deleteMany(all: true) + user_deleteMany(all: true) +} diff --git a/backend/dataconnect/functions/seed.gql b/backend/dataconnect/functions/seed.gql new file mode 100644 index 00000000..f59eda6f --- /dev/null +++ b/backend/dataconnect/functions/seed.gql @@ -0,0 +1,1726 @@ +mutation seedAll @transaction { + # Users + user_1: user_insert( + + data: { + id: "dvpWnaBjT6UksS5lo04hfMTyq1q1" + email: "legendary@krowd.com" + fullName: "Krow" + role: USER + userRole: "BUSINESS" + } + ) + user_2: user_insert( + data: { + id: "hWjFHY11K3X1MChMseVVaCDfAl32" + email: "mariana.torres@gmail.com" + fullName: "Mariana" + role: USER + userRole: "STAFF" + } + ) + + # Business + business_1: business_insert( + data: { + id: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + businessName: "Krow" + userId: "dvpWnaBjT6UksS5lo04hfMTyq1q1" + contactName: "Krow Ops" + email: "legendary@krowd.com" + phone: "+1-818-555-0148" + address: "5000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + area: SOUTHERN_CALIFORNIA + sector: OTHER + rateGroup: PREMIUM + status: ACTIVE + } + ) + + # Team + team_1: team_insert( + data: { + id: "9508c187-7612-4084-90de-4ece4a63773f" + teamName: "Krow" + ownerId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + ownerName: "Krow" + ownerRole: "ADMIN" + totalHubs: 3 + } + ) + + # Team Hubs + team_hub_1: teamHub_insert( + data: { + id: "22a0b119-e6dc-4011-9043-d857cd4c12f3" + teamId: "9508c187-7612-4084-90de-4ece4a63773f" + hubName: "City Operations Center" + address: "5000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw1MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + isActive: true + } + ) + team_hub_2: teamHub_insert( + data: { + id: "9c8eb9c6-c186-4d55-877e-35be852c3e86" + teamId: "9508c187-7612-4084-90de-4ece4a63773f" + hubName: "Central Operations Hub" + address: "4000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw0MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + isActive: true + } + ) + team_hub_3: teamHub_insert( + data: { + id: "75c70d83-1680-4b28-ab61-2fe64a74fc5f" + teamId: "9508c187-7612-4084-90de-4ece4a63773f" + hubName: "Downtown Operations Hub" + address: "6800 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw2ODAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + isActive: true + } + ) + + # Vendor + vendor_1: vendor_insert( + data: { + id: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + userId: "xP7mQ2rL8vK5tR1nC3yH6uJ9wA0" + companyName: "Golden Gate Event Services" + legalName: "Golden Gate Event Services LLC" + doingBusinessAs: "GGE Services" + email: "hello@ggevents.com" + phone: "+1-415-555-0136" + address: "2100 Sunset Blvd, Los Angeles, CA 90026" + billingAddress: "2100 Sunset Blvd, Los Angeles, CA 90026" + city: "Los Angeles" + state: "CA" + region: "Southern California" + timezone: "America/Los_Angeles" + serviceSpecialty: "Event staffing and concessions" + approvalStatus: APPROVED + isActive: true + markup: 0.25 + fee: 2.5 + csat: 4.7 + tier: PREFERRED + } + ) + + # Role Categories + role_category_1: roleCategory_insert( + data: { id: "a8716f27-9e4c-4141-9ae2-6c9b91083b94", roleName: "Kitchen & Culinary", category: KITCHEN_AND_CULINARY } + ) + role_category_2: roleCategory_insert( + data: { id: "cb256793-50a5-4e0f-8464-e4092b25b6ab", roleName: "Concessions", category: CONCESSIONS } + ) + role_category_3: roleCategory_insert( + data: { id: "19e5e945-658f-4889-89b2-9fb14082650b", roleName: "Facilities", category: FACILITIES } + ) + role_category_4: roleCategory_insert( + data: { id: "291dd656-e801-4c69-aac1-90e4c22480d6", roleName: "Bartending", category: BARTENDING } + ) + role_category_5: roleCategory_insert( + data: { id: "4b4622c9-cc55-4b1a-970f-a01643fdb01c", roleName: "Security", category: SECURITY } + ) + role_category_6: roleCategory_insert( + data: { id: "2f8bf4ab-854b-4094-ac1c-cfd08fc79d9b", roleName: "Event Staff", category: EVENT_STAFF } + ) + role_category_7: roleCategory_insert( + data: { id: "143dee86-d7d4-476d-a5b0-e9c6fff0b64a", roleName: "Management", category: MANAGEMENT } + ) + role_category_8: roleCategory_insert( + data: { id: "2042d478-695d-4577-9781-47215188572a", roleName: "Technical", category: TECHNICAL } + ) + role_category_9: roleCategory_insert( + data: { id: "2951c364-202e-4a62-adf9-2270842150ab", roleName: "Other", category: OTHER } + ) + + # Roles + role_1: role_insert( + data: { + id: "e51f3553-f2ee-400b-91e6-92b534239697" + name: "Cook" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + roleCategoryId: "a8716f27-9e4c-4141-9ae2-6c9b91083b94" + costPerHour: 24 + } + ) + role_2: role_insert( + data: { + id: "7de956ce-743b-4271-b826-73313a5f07f5" + name: "Bartender" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + roleCategoryId: "291dd656-e801-4c69-aac1-90e4c22480d6" + costPerHour: 26 + } + ) + role_3: role_insert( + data: { + id: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + name: "Event Staff" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + roleCategoryId: "2f8bf4ab-854b-4094-ac1c-cfd08fc79d9b" + costPerHour: 20 + } + ) + role_4: role_insert( + data: { + id: "67ab1dcb-5b54-4dd9-aeb5-9cc58bdda0ed" + name: "Security Guard" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + roleCategoryId: "4b4622c9-cc55-4b1a-970f-a01643fdb01c" + costPerHour: 28 + } + ) + + # Staff (6 total) + staff_1: staff_insert( + data: { + id: "633df3ce-b92c-473f-90d8-38dd027fdf57" + userId: "hWjFHY11K3X1MChMseVVaCDfAl32" + fullName: "Mariana Torres" + email: "mariana.torres@gmail.com" + phone: "+1-818-555-0101" + ownerId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + city: "Los Angeles" + addres: "North Hollywood, Los Angeles, CA" + englishRequired: true + isRecommended: true + totalShifts: 4 + averageRating: 4.5 + onTimeRate: 100 + noShowCount: 0 + cancellationCount: 1 + reliabilityScore: 95 + } + ) + staff_2: staff_insert( + data: { + id: "9631581a-1601-4e06-8e5e-600e9f305bcf" + userId: "V7mQ2pL8sKx5tR1nC3yH6uJ9wA0" + fullName: "Ethan Walker" + email: "ethan.walker@gmail.com" + phone: "+1-818-555-0102" + ownerId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + city: "Los Angeles" + addres: "Burbank, CA" + englishRequired: true + } + ) + staff_3: staff_insert( + data: { + id: "2b678a6d-b8cd-4d5e-95ae-f35e4569f92c" + userId: "aB3cD5eF7gH9iJ2kL4mN6pQ8rS1" + fullName: "Sofia Ramirez" + email: "sofia.ramirez@gmail.com" + phone: "+1-818-555-0103" + ownerId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + city: "Los Angeles" + addres: "Glendale, CA" + englishRequired: true + } + ) + staff_4: staff_insert( + data: { + id: "d62605f9-366d-42c5-8f3b-f276c0d27ea3" + userId: "Z9yX7wV5uT3sR1qP8nM6lK4jH2" + fullName: "Lucas Chen" + email: "lucas.chen@gmail.com" + phone: "+1-818-555-0104" + ownerId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + city: "Los Angeles" + addres: "Pasadena, CA" + englishRequired: true + } + ) + staff_5: staff_insert( + data: { + id: "c6428f90-9c29-4e5c-b362-dc67a9a8cbba" + userId: "mN2bV5cX7zL9kJ4hG6fD1sA3qW8" + fullName: "Priya Patel" + email: "priya.patel@gmail.com" + phone: "+1-818-555-0105" + ownerId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + city: "Los Angeles" + addres: "Studio City, CA" + englishRequired: true + } + ) + staff_6: staff_insert( + data: { + id: "56d7178c-f4ab-4c50-9b1f-d6efe25ba50b" + userId: "tR8yU6iO4pL2kJ9hG7fD5sA3qW1" + fullName: "Miguel Alvarez" + email: "miguel.alvarez@gmail.com" + phone: "+1-818-555-0106" + ownerId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + city: "Los Angeles" + addres: "Granada Hills, CA" + englishRequired: true + } + ) + + # Orders (20 total) + order_01: order_insert( + data: { + id: "0e3b8fbb-ffd7-496d-a20a-2375b9205f54" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: COMPLETED + eventName: "Krow Opening Night" + teamHubId: "22a0b119-e6dc-4011-9043-d857cd4c12f3" + date: "2026-01-26T05:00:00Z" + requested: 1 + total: 192 + } + ) + order_02: order_insert( + data: { + id: "8927e7c7-7e99-400b-ba26-3e94d7039605" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: COMPLETED + eventName: "Downtown Launch Mixer" + teamHubId: "9c8eb9c6-c186-4d55-877e-35be852c3e86" + date: "2026-01-26T05:00:00Z" + requested: 1 + total: 208 + } + ) + order_03: order_insert( + data: { + id: "8bb46c96-74cd-48d6-bbb1-287823376e30" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: COMPLETED + eventName: "Community Night Market" + teamHubId: "75c70d83-1680-4b28-ab61-2fe64a74fc5f" + date: "2026-01-27T05:00:00Z" + requested: 1 + total: 160 + } + ) + order_04: order_insert( + data: { + id: "83b7dd83-2223-4585-a75f-b247368ebfcb" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: COMPLETED + eventName: "Krow Partner Showcase" + teamHubId: "22a0b119-e6dc-4011-9043-d857cd4c12f3" + date: "2026-01-28T05:00:00Z" + requested: 1 + total: 224 + } + ) + order_05: order_insert( + data: { + id: "1f7589f3-5bac-4174-82ed-844995ffb36e" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: COMPLETED + eventName: "Vendor Appreciation Lunch" + teamHubId: "9c8eb9c6-c186-4d55-877e-35be852c3e86" + date: "2026-01-28T05:00:00Z" + requested: 1 + total: 192 + } + ) + order_06: order_insert( + data: { + id: "df585e06-05f9-4859-865f-de23d8fa29fe" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: COMPLETED + eventName: "Operations Wrap-Up" + teamHubId: "75c70d83-1680-4b28-ab61-2fe64a74fc5f" + date: "2026-01-29T05:00:00Z" + requested: 1 + total: 208 + } + ) + order_07: order_insert( + data: { + id: "c3c5dca6-c8f9-4948-bb8c-10d8129914b3" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: COMPLETED + eventName: "Krow Friday Preview" + teamHubId: "22a0b119-e6dc-4011-9043-d857cd4c12f3" + date: "2026-01-30T05:00:00Z" + requested: 2 + total: 320 + } + ) + order_08: order_insert( + data: { + id: "a1fe2d34-cd5e-4372-bd73-e220a1840e1d" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: COMPLETED + eventName: "Saturday Security Detail" + teamHubId: "9c8eb9c6-c186-4d55-877e-35be852c3e86" + date: "2026-01-30T05:00:00Z" + requested: 1 + total: 224 + } + ) + order_09: order_insert( + data: { + id: "858753bc-dfa3-46fd-b383-ecd38de40b05" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: COMPLETED + eventName: "Weekend Brunch" + teamHubId: "75c70d83-1680-4b28-ab61-2fe64a74fc5f" + date: "2026-01-31T05:00:00Z" + requested: 1 + total: 192 + } + ) + order_10: order_insert( + data: { + id: "634386c5-45f3-46a0-a267-9971f0c19728" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: COMPLETED + eventName: "Sunday Service" + teamHubId: "22a0b119-e6dc-4011-9043-d857cd4c12f3" + date: "2026-02-01T05:00:00Z" + requested: 2 + total: 416 + } + ) + order_11: order_insert( + data: { + id: "43d593ed-0c58-4675-ae12-34aa27cb0d0c" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: COMPLETED + eventName: "Monday Concessions" + teamHubId: "9c8eb9c6-c186-4d55-877e-35be852c3e86" + date: "2026-02-02T05:00:00Z" + requested: 2 + total: 320 + } + ) + order_12: order_insert( + data: { + id: "7abf0183-a989-4c2a-b420-e959663da61b" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: COMPLETED + eventName: "Night Security Coverage" + teamHubId: "75c70d83-1680-4b28-ab61-2fe64a74fc5f" + date: "2026-02-02T05:00:00Z" + requested: 1 + total: 224 + } + ) + order_13: order_insert( + data: { + id: "2d2d1d8a-1771-4499-831c-2146207105c2" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: POSTED + eventName: "Tuesday Kitchen Prep" + teamHubId: "22a0b119-e6dc-4011-9043-d857cd4c12f3" + date: "2026-02-03T05:00:00Z" + requested: 1 + total: 192 + } + ) + order_14: order_insert( + data: { + id: "fb29987a-945d-434c-84e4-9870d04146e7" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: PARTIAL_STAFFED + eventName: "Midweek Bar Service" + teamHubId: "9c8eb9c6-c186-4d55-877e-35be852c3e86" + date: "2026-02-04T05:00:00Z" + requested: 2 + total: 416 + } + ) + order_15: order_insert( + data: { + id: "baee688f-6eb9-41cf-a88c-b5c4826767a5" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: PARTIAL_STAFFED + eventName: "Community Volunteer Night" + teamHubId: "75c70d83-1680-4b28-ab61-2fe64a74fc5f" + date: "2026-02-04T05:00:00Z" + requested: 2 + total: 320 + } + ) + order_16: order_insert( + data: { + id: "724eb236-aee2-4529-b702-65c8dfc7dcc0" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: POSTED + eventName: "Thursday Security Watch" + teamHubId: "22a0b119-e6dc-4011-9043-d857cd4c12f3" + date: "2026-02-05T05:00:00Z" + requested: 1 + total: 224 + } + ) + order_17: order_insert( + data: { + id: "ed2f36a7-1198-4515-8a24-f2495cf95dda" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: PARTIAL_STAFFED + eventName: "Friday Kitchen Support" + teamHubId: "9c8eb9c6-c186-4d55-877e-35be852c3e86" + date: "2026-02-06T05:00:00Z" + requested: 2 + total: 384 + } + ) + order_18: order_insert( + data: { + id: "5cf4ca96-fdf4-4d08-bcee-79fae59812b6" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: POSTED + eventName: "Friday Bar Coverage" + teamHubId: "75c70d83-1680-4b28-ab61-2fe64a74fc5f" + date: "2026-02-06T05:00:00Z" + requested: 1 + total: 208 + } + ) + order_19: order_insert( + data: { + id: "60307e4b-d9d8-4cd1-9516-8c52227072da" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: PARTIAL_STAFFED + eventName: "Saturday Event Support" + teamHubId: "22a0b119-e6dc-4011-9043-d857cd4c12f3" + date: "2026-02-07T05:00:00Z" + requested: 2 + total: 320 + } + ) + order_20: order_insert( + data: { + id: "700d75e6-4ad8-4ed2-8c52-4f23e0a1bd4c" + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderType: ONE_TIME + status: POSTED + eventName: "Sunday Security Patrol" + teamHubId: "9c8eb9c6-c186-4d55-877e-35be852c3e86" + date: "2026-02-08T05:00:00Z" + requested: 1 + total: 224 + } + ) + + # Shifts (1 per order) + shift_01: shift_insert( + data: { + id: "97475714-44d9-4a52-8486-672977689bc0" + title: "Krow Opening Night Shift" + orderId: "0e3b8fbb-ffd7-496d-a20a-2375b9205f54" + date: "2026-01-26T05:00:00Z" + startTime: "2026-01-26T14:00:00Z" + endTime: "2026-01-26T22:00:00Z" + hours: 8 + cost: 192 + locationAddress: "5000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw1MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: COMPLETED + workersNeeded: 1 + filled: 1 + } + ) + shift_02: shift_insert( + data: { + id: "50493c45-ad80-4a7b-993b-cd54a9bb1cbf" + title: "Downtown Launch Mixer Shift" + orderId: "8927e7c7-7e99-400b-ba26-3e94d7039605" + date: "2026-01-26T05:00:00Z" + startTime: "2026-01-26T14:00:00Z" + endTime: "2026-01-26T22:00:00Z" + hours: 8 + cost: 208 + locationAddress: "4000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw0MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: COMPLETED + workersNeeded: 1 + filled: 1 + } + ) + shift_03: shift_insert( + data: { + id: "05101aa0-48b5-4f6e-8327-3c3679fd59dd" + title: "Community Night Market Shift" + orderId: "8bb46c96-74cd-48d6-bbb1-287823376e30" + date: "2026-01-27T05:00:00Z" + startTime: "2026-01-27T14:00:00Z" + endTime: "2026-01-27T22:00:00Z" + hours: 8 + cost: 160 + locationAddress: "6800 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw2ODAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: COMPLETED + workersNeeded: 1 + filled: 1 + } + ) + shift_04: shift_insert( + data: { + id: "dafa7ede-5245-436c-af4a-1d1f20d68ab5" + title: "Krow Partner Showcase Shift" + orderId: "83b7dd83-2223-4585-a75f-b247368ebfcb" + date: "2026-01-28T05:00:00Z" + startTime: "2026-01-28T14:00:00Z" + endTime: "2026-01-28T22:00:00Z" + hours: 8 + cost: 224 + locationAddress: "5000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw1MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: COMPLETED + workersNeeded: 1 + filled: 1 + } + ) + shift_05: shift_insert( + data: { + id: "ab51c851-8d93-4a7c-907a-d768d6908b7f" + title: "Vendor Appreciation Lunch Shift" + orderId: "1f7589f3-5bac-4174-82ed-844995ffb36e" + date: "2026-01-28T05:00:00Z" + startTime: "2026-01-28T14:00:00Z" + endTime: "2026-01-28T22:00:00Z" + hours: 8 + cost: 192 + locationAddress: "4000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw0MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: COMPLETED + workersNeeded: 1 + filled: 1 + } + ) + shift_06: shift_insert( + data: { + id: "dbb94e32-7f51-4fd4-bfc9-148a90867437" + title: "Operations Wrap-Up Shift" + orderId: "df585e06-05f9-4859-865f-de23d8fa29fe" + date: "2026-01-29T05:00:00Z" + startTime: "2026-01-29T14:00:00Z" + endTime: "2026-01-29T22:00:00Z" + hours: 8 + cost: 208 + locationAddress: "6800 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw2ODAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: COMPLETED + workersNeeded: 1 + filled: 1 + } + ) + shift_07: shift_insert( + data: { + id: "7dc230cb-5680-4799-b45a-8a8269675a42" + title: "Krow Friday Preview Shift" + orderId: "c3c5dca6-c8f9-4948-bb8c-10d8129914b3" + date: "2026-01-30T05:00:00Z" + startTime: "2026-01-30T14:00:00Z" + endTime: "2026-01-30T22:00:00Z" + hours: 8 + cost: 320 + locationAddress: "5000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw1MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: COMPLETED + workersNeeded: 2 + filled: 2 + } + ) + shift_08: shift_insert( + data: { + id: "5e4cc4e0-51a4-406b-82cd-39bfa3a0970a" + title: "Saturday Security Detail Shift" + orderId: "a1fe2d34-cd5e-4372-bd73-e220a1840e1d" + date: "2026-01-30T05:00:00Z" + startTime: "2026-01-30T14:00:00Z" + endTime: "2026-01-30T22:00:00Z" + hours: 8 + cost: 224 + locationAddress: "4000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw0MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: COMPLETED + workersNeeded: 1 + filled: 1 + } + ) + shift_09: shift_insert( + data: { + id: "07be57d0-a580-46b7-b98e-1e29249cff63" + title: "Weekend Brunch Shift" + orderId: "858753bc-dfa3-46fd-b383-ecd38de40b05" + date: "2026-01-31T05:00:00Z" + startTime: "2026-01-31T14:00:00Z" + endTime: "2026-01-31T22:00:00Z" + hours: 8 + cost: 192 + locationAddress: "6800 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw2ODAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: COMPLETED + workersNeeded: 1 + filled: 1 + } + ) + shift_10: shift_insert( + data: { + id: "845b366b-3ec6-4322-b3cf-b386e6ad8ba5" + title: "Sunday Service Shift" + orderId: "634386c5-45f3-46a0-a267-9971f0c19728" + date: "2026-02-01T05:00:00Z" + startTime: "2026-02-01T14:00:00Z" + endTime: "2026-02-01T22:00:00Z" + hours: 8 + cost: 416 + locationAddress: "5000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw1MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: COMPLETED + workersNeeded: 2 + filled: 2 + } + ) + shift_11: shift_insert( + data: { + id: "940ae08f-a9f4-4fe4-ab8b-a219c53f3bfa" + title: "Monday Concessions Shift" + orderId: "43d593ed-0c58-4675-ae12-34aa27cb0d0c" + date: "2026-02-02T05:00:00Z" + startTime: "2026-02-02T14:00:00Z" + endTime: "2026-02-02T22:00:00Z" + hours: 8 + cost: 320 + locationAddress: "4000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw0MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: COMPLETED + workersNeeded: 2 + filled: 2 + } + ) + shift_12: shift_insert( + data: { + id: "738cd678-9179-4360-bf24-426700651a37" + title: "Night Security Coverage Shift" + orderId: "7abf0183-a989-4c2a-b420-e959663da61b" + date: "2026-02-02T05:00:00Z" + startTime: "2026-02-02T14:00:00Z" + endTime: "2026-02-02T22:00:00Z" + hours: 8 + cost: 224 + locationAddress: "6800 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw2ODAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: COMPLETED + workersNeeded: 1 + filled: 1 + } + ) + shift_13: shift_insert( + data: { + id: "c08dd45c-ce93-4f98-948a-5ba6a8f15296" + title: "Tuesday Kitchen Prep Shift" + orderId: "2d2d1d8a-1771-4499-831c-2146207105c2" + date: "2026-02-03T05:00:00Z" + startTime: "2026-02-03T14:00:00Z" + endTime: "2026-02-03T22:00:00Z" + hours: 8 + cost: 192 + locationAddress: "5000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw1MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: OPEN + workersNeeded: 1 + filled: 0 + } + ) + shift_14: shift_insert( + data: { + id: "38b194b2-55f4-4af7-991d-38d46c95916c" + title: "Midweek Bar Service Shift" + orderId: "fb29987a-945d-434c-84e4-9870d04146e7" + date: "2026-02-04T05:00:00Z" + startTime: "2026-02-04T14:00:00Z" + endTime: "2026-02-04T22:00:00Z" + hours: 8 + cost: 416 + locationAddress: "4000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw0MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: ASSIGNED + workersNeeded: 2 + filled: 1 + } + ) + shift_15: shift_insert( + data: { + id: "9cdd54c7-7e48-4149-bb79-0cd142550328" + title: "Community Volunteer Night Shift" + orderId: "baee688f-6eb9-41cf-a88c-b5c4826767a5" + date: "2026-02-04T05:00:00Z" + startTime: "2026-02-04T14:00:00Z" + endTime: "2026-02-04T22:00:00Z" + hours: 8 + cost: 320 + locationAddress: "6800 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw2ODAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: ASSIGNED + workersNeeded: 2 + filled: 1 + } + ) + shift_16: shift_insert( + data: { + id: "96896f2c-525f-4a71-980a-843007b6115b" + title: "Thursday Security Watch Shift" + orderId: "724eb236-aee2-4529-b702-65c8dfc7dcc0" + date: "2026-02-05T05:00:00Z" + startTime: "2026-02-05T14:00:00Z" + endTime: "2026-02-05T22:00:00Z" + hours: 8 + cost: 224 + locationAddress: "5000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw1MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: OPEN + workersNeeded: 1 + filled: 0 + } + ) + shift_17: shift_insert( + data: { + id: "1cd2e3d1-42d5-4c04-8778-171d599fe157" + title: "Friday Kitchen Support Shift" + orderId: "ed2f36a7-1198-4515-8a24-f2495cf95dda" + date: "2026-02-06T05:00:00Z" + startTime: "2026-02-06T14:00:00Z" + endTime: "2026-02-06T22:00:00Z" + hours: 8 + cost: 384 + locationAddress: "4000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw0MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: ASSIGNED + workersNeeded: 2 + filled: 1 + } + ) + shift_18: shift_insert( + data: { + id: "fa6e2567-bbcc-4eee-a4ac-16cca06283ad" + title: "Friday Bar Coverage Shift" + orderId: "5cf4ca96-fdf4-4d08-bcee-79fae59812b6" + date: "2026-02-06T05:00:00Z" + startTime: "2026-02-06T14:00:00Z" + endTime: "2026-02-06T22:00:00Z" + hours: 8 + cost: 208 + locationAddress: "6800 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw2ODAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: OPEN + workersNeeded: 1 + filled: 0 + } + ) + shift_19: shift_insert( + data: { + id: "0f451a6b-610f-4b50-8617-d8b668227ec7" + title: "Saturday Event Support Shift" + orderId: "60307e4b-d9d8-4cd1-9516-8c52227072da" + date: "2026-02-07T05:00:00Z" + startTime: "2026-02-07T14:00:00Z" + endTime: "2026-02-07T22:00:00Z" + hours: 8 + cost: 320 + locationAddress: "5000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw1MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: ASSIGNED + workersNeeded: 2 + filled: 1 + } + ) + shift_20: shift_insert( + data: { + id: "5f70a60f-283d-4cb6-a666-ae2691f46ddc" + title: "Sunday Security Patrol Shift" + orderId: "700d75e6-4ad8-4ed2-8c52-4f23e0a1bd4c" + date: "2026-02-08T05:00:00Z" + startTime: "2026-02-08T14:00:00Z" + endTime: "2026-02-08T22:00:00Z" + hours: 8 + cost: 224 + locationAddress: "4000 San Jose Street, Granada Hills, CA, USA" + city: "Los Angeles" + state: "CA" + street: "San Jose Street" + country: "US" + placeId: "Eiw0MDAwIFNhbiBKb3NlIFN0cmVldCwgR3JhbmFkYSBIaWxscywgQ0EsIFVTQSIuKiwKFAoSCYNJZBTdmsKAEddGOfBj8LvTEhQKEglnNXI0zZrCgBEjR6om62lcVw" + latitude: 34.2611486 + longitude: -118.5010287 + status: OPEN + workersNeeded: 1 + filled: 0 + } + ) + + # Shift Roles (1 per shift) + shift_role_01: shiftRole_insert( + data: { + id: "29b997e3-8d76-4031-ac0b-c6cb85c9dda0" + shiftId: "97475714-44d9-4a52-8486-672977689bc0" + roleId: "e51f3553-f2ee-400b-91e6-92b534239697" + count: 1 + assigned: 1 + startTime: "2026-01-26T14:00:00Z" + endTime: "2026-01-26T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 192 + } + ) + shift_role_02: shiftRole_insert( + data: { + id: "6c72edc0-2bb5-45e2-b38a-f17685b243ad" + shiftId: "50493c45-ad80-4a7b-993b-cd54a9bb1cbf" + roleId: "7de956ce-743b-4271-b826-73313a5f07f5" + count: 1 + assigned: 1 + startTime: "2026-01-26T14:00:00Z" + endTime: "2026-01-26T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 208 + } + ) + shift_role_03: shiftRole_insert( + data: { + id: "74567266-347d-476a-83f4-e95b4f7cd25c" + shiftId: "05101aa0-48b5-4f6e-8327-3c3679fd59dd" + roleId: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + count: 1 + assigned: 1 + startTime: "2026-01-27T14:00:00Z" + endTime: "2026-01-27T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 160 + } + ) + shift_role_04: shiftRole_insert( + data: { + id: "6b07d4e3-e9f2-4d6c-8aef-31668d834ff0" + shiftId: "dafa7ede-5245-436c-af4a-1d1f20d68ab5" + roleId: "67ab1dcb-5b54-4dd9-aeb5-9cc58bdda0ed" + count: 1 + assigned: 1 + startTime: "2026-01-28T14:00:00Z" + endTime: "2026-01-28T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 224 + } + ) + shift_role_05: shiftRole_insert( + data: { + id: "0e081523-a8a3-497d-8221-26ddad17c75a" + shiftId: "ab51c851-8d93-4a7c-907a-d768d6908b7f" + roleId: "e51f3553-f2ee-400b-91e6-92b534239697" + count: 1 + assigned: 1 + startTime: "2026-01-28T14:00:00Z" + endTime: "2026-01-28T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 192 + } + ) + shift_role_06: shiftRole_insert( + data: { + id: "cfa2d60e-f96c-49e9-bd4d-a112ff01485c" + shiftId: "dbb94e32-7f51-4fd4-bfc9-148a90867437" + roleId: "7de956ce-743b-4271-b826-73313a5f07f5" + count: 1 + assigned: 1 + startTime: "2026-01-29T14:00:00Z" + endTime: "2026-01-29T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 208 + } + ) + shift_role_07: shiftRole_insert( + data: { + id: "27481670-6f28-4d37-8b2d-8768f650c561" + shiftId: "7dc230cb-5680-4799-b45a-8a8269675a42" + roleId: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + count: 2 + assigned: 2 + startTime: "2026-01-30T14:00:00Z" + endTime: "2026-01-30T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 320 + } + ) + shift_role_08: shiftRole_insert( + data: { + id: "2ddb7112-b9de-41b6-9637-48f12c7cf63e" + shiftId: "5e4cc4e0-51a4-406b-82cd-39bfa3a0970a" + roleId: "67ab1dcb-5b54-4dd9-aeb5-9cc58bdda0ed" + count: 1 + assigned: 1 + startTime: "2026-01-30T14:00:00Z" + endTime: "2026-01-30T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 224 + } + ) + shift_role_09: shiftRole_insert( + data: { + id: "25718f64-ae53-4c28-813a-26d6af1bb533" + shiftId: "07be57d0-a580-46b7-b98e-1e29249cff63" + roleId: "e51f3553-f2ee-400b-91e6-92b534239697" + count: 1 + assigned: 1 + startTime: "2026-01-31T14:00:00Z" + endTime: "2026-01-31T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 192 + } + ) + shift_role_10: shiftRole_insert( + data: { + id: "944bc40d-bdab-44e7-8ca9-c4ec23f235cb" + shiftId: "845b366b-3ec6-4322-b3cf-b386e6ad8ba5" + roleId: "7de956ce-743b-4271-b826-73313a5f07f5" + count: 2 + assigned: 2 + startTime: "2026-02-01T14:00:00Z" + endTime: "2026-02-01T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 416 + } + ) + shift_role_11: shiftRole_insert( + data: { + id: "443052d5-d0c7-4948-8607-e42520a6d069" + shiftId: "940ae08f-a9f4-4fe4-ab8b-a219c53f3bfa" + roleId: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + count: 2 + assigned: 2 + startTime: "2026-02-02T14:00:00Z" + endTime: "2026-02-02T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 320 + } + ) + shift_role_12: shiftRole_insert( + data: { + id: "bdd79b68-f4ab-4039-b7b0-c89e3a29bb9a" + shiftId: "738cd678-9179-4360-bf24-426700651a37" + roleId: "67ab1dcb-5b54-4dd9-aeb5-9cc58bdda0ed" + count: 1 + assigned: 1 + startTime: "2026-02-02T14:00:00Z" + endTime: "2026-02-02T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 224 + } + ) + shift_role_13: shiftRole_insert( + data: { + id: "59ce3054-ac51-44bd-9b67-1fb9ffc01c79" + shiftId: "c08dd45c-ce93-4f98-948a-5ba6a8f15296" + roleId: "e51f3553-f2ee-400b-91e6-92b534239697" + count: 1 + assigned: 0 + startTime: "2026-02-03T14:00:00Z" + endTime: "2026-02-03T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 192 + } + ) + shift_role_14: shiftRole_insert( + data: { + id: "7731be5a-780f-4fed-8bc4-963d84a8f14f" + shiftId: "38b194b2-55f4-4af7-991d-38d46c95916c" + roleId: "7de956ce-743b-4271-b826-73313a5f07f5" + count: 2 + assigned: 1 + startTime: "2026-02-04T14:00:00Z" + endTime: "2026-02-04T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 416 + } + ) + shift_role_15: shiftRole_insert( + data: { + id: "8a9ca09f-fe02-4a31-aba3-8920da941bcc" + shiftId: "9cdd54c7-7e48-4149-bb79-0cd142550328" + roleId: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + count: 2 + assigned: 1 + startTime: "2026-02-04T14:00:00Z" + endTime: "2026-02-04T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 320 + } + ) + shift_role_16: shiftRole_insert( + data: { + id: "184be03d-257f-4e6b-b796-a9d0da89b2cc" + shiftId: "96896f2c-525f-4a71-980a-843007b6115b" + roleId: "67ab1dcb-5b54-4dd9-aeb5-9cc58bdda0ed" + count: 1 + assigned: 0 + startTime: "2026-02-05T14:00:00Z" + endTime: "2026-02-05T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 224 + } + ) + shift_role_17: shiftRole_insert( + data: { + id: "0ae7fa52-ffea-43b7-a2a5-03c5a7cc0c4f" + shiftId: "1cd2e3d1-42d5-4c04-8778-171d599fe157" + roleId: "e51f3553-f2ee-400b-91e6-92b534239697" + count: 2 + assigned: 1 + startTime: "2026-02-06T14:00:00Z" + endTime: "2026-02-06T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 384 + } + ) + shift_role_18: shiftRole_insert( + data: { + id: "812b9b83-2913-4d59-92d9-e110b4f4c0ad" + shiftId: "fa6e2567-bbcc-4eee-a4ac-16cca06283ad" + roleId: "7de956ce-743b-4271-b826-73313a5f07f5" + count: 1 + assigned: 0 + startTime: "2026-02-06T14:00:00Z" + endTime: "2026-02-06T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 208 + } + ) + shift_role_19: shiftRole_insert( + data: { + id: "fb27127e-7162-43ec-a98d-220517f5c326" + shiftId: "0f451a6b-610f-4b50-8617-d8b668227ec7" + roleId: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + count: 2 + assigned: 1 + startTime: "2026-02-07T14:00:00Z" + endTime: "2026-02-07T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 320 + } + ) + shift_role_20: shiftRole_insert( + data: { + id: "360616bf-8083-4dff-8d22-82380304d838" + shiftId: "5f70a60f-283d-4cb6-a666-ae2691f46ddc" + roleId: "67ab1dcb-5b54-4dd9-aeb5-9cc58bdda0ed" + count: 1 + assigned: 0 + startTime: "2026-02-08T14:00:00Z" + endTime: "2026-02-08T22:00:00Z" + hours: 8 + breakType: MIN_30 + totalValue: 224 + } + ) + + # Applications + application_01: application_insert( + data: { + id: "89f99e27-999b-41e4-a8d8-c918759a5638" + shiftId: "97475714-44d9-4a52-8486-672977689bc0" + staffId: "633df3ce-b92c-473f-90d8-38dd027fdf57" + roleId: "e51f3553-f2ee-400b-91e6-92b534239697" + status: COMPLETED + origin: STAFF + } + ) + application_02: application_insert( + data: { + id: "fc772ef9-eb2c-4f03-a594-7e439b6ca74e" + shiftId: "50493c45-ad80-4a7b-993b-cd54a9bb1cbf" + staffId: "9631581a-1601-4e06-8e5e-600e9f305bcf" + roleId: "7de956ce-743b-4271-b826-73313a5f07f5" + status: COMPLETED + origin: STAFF + } + ) + application_03: application_insert( + data: { + id: "a8090a7c-56ca-4164-9f1f-1c3ed9aa80de" + shiftId: "05101aa0-48b5-4f6e-8327-3c3679fd59dd" + staffId: "2b678a6d-b8cd-4d5e-95ae-f35e4569f92c" + roleId: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + status: COMPLETED + origin: STAFF + } + ) + application_04: application_insert( + data: { + id: "245c496f-19f7-4a6a-a913-2b741f998c14" + shiftId: "dafa7ede-5245-436c-af4a-1d1f20d68ab5" + staffId: "d62605f9-366d-42c5-8f3b-f276c0d27ea3" + roleId: "67ab1dcb-5b54-4dd9-aeb5-9cc58bdda0ed" + status: COMPLETED + origin: STAFF + } + ) + application_05: application_insert( + data: { + id: "b28c4cd4-372a-43b2-9b27-13afec1be3a0" + shiftId: "ab51c851-8d93-4a7c-907a-d768d6908b7f" + staffId: "c6428f90-9c29-4e5c-b362-dc67a9a8cbba" + roleId: "e51f3553-f2ee-400b-91e6-92b534239697" + status: COMPLETED + origin: STAFF + } + ) + application_06: application_insert( + data: { + id: "0ec8cf17-d56b-4d19-bda5-3e5e1aa86c3f" + shiftId: "dbb94e32-7f51-4fd4-bfc9-148a90867437" + staffId: "56d7178c-f4ab-4c50-9b1f-d6efe25ba50b" + roleId: "7de956ce-743b-4271-b826-73313a5f07f5" + status: COMPLETED + origin: STAFF + } + ) + application_07: application_insert( + data: { + id: "e59efae5-5fda-4a45-b26a-608ccd014c8f" + shiftId: "7dc230cb-5680-4799-b45a-8a8269675a42" + staffId: "633df3ce-b92c-473f-90d8-38dd027fdf57" + roleId: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + status: COMPLETED + origin: STAFF + } + ) + application_08: application_insert( + data: { + id: "37259af7-27b9-48d5-b762-3ce8abf61316" + shiftId: "845b366b-3ec6-4322-b3cf-b386e6ad8ba5" + staffId: "9631581a-1601-4e06-8e5e-600e9f305bcf" + roleId: "7de956ce-743b-4271-b826-73313a5f07f5" + status: COMPLETED + origin: STAFF + } + ) + application_09: application_insert( + data: { + id: "7bc24537-2a03-4ac2-a6d8-2f3441c479af" + shiftId: "940ae08f-a9f4-4fe4-ab8b-a219c53f3bfa" + staffId: "2b678a6d-b8cd-4d5e-95ae-f35e4569f92c" + roleId: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + status: COMPLETED + origin: STAFF + } + ) + application_10: application_insert( + data: { + id: "a6d76379-7634-4bee-a3c2-9e8b81fae6ac" + shiftId: "38b194b2-55f4-4af7-991d-38d46c95916c" + staffId: "d62605f9-366d-42c5-8f3b-f276c0d27ea3" + roleId: "7de956ce-743b-4271-b826-73313a5f07f5" + status: CONFIRMED + origin: STAFF + } + ) + application_11: application_insert( + data: { + id: "8ece3010-2da7-4bda-a97d-fa4bd5113760" + shiftId: "9cdd54c7-7e48-4149-bb79-0cd142550328" + staffId: "c6428f90-9c29-4e5c-b362-dc67a9a8cbba" + roleId: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + status: CONFIRMED + origin: STAFF + } + ) + application_12: application_insert( + data: { + id: "da453bf7-a25d-462b-930c-f0a490e29890" + shiftId: "1cd2e3d1-42d5-4c04-8778-171d599fe157" + staffId: "56d7178c-f4ab-4c50-9b1f-d6efe25ba50b" + roleId: "e51f3553-f2ee-400b-91e6-92b534239697" + status: CONFIRMED + origin: STAFF + } + ) + application_13: application_insert( + data: { + id: "661e1078-aa64-4188-b438-5088b3dfb75a" + shiftId: "0f451a6b-610f-4b50-8617-d8b668227ec7" + staffId: "633df3ce-b92c-473f-90d8-38dd027fdf57" + roleId: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + status: CONFIRMED + origin: STAFF + } + ) + application_14: application_insert( + data: { + id: "f5a68adc-6bd3-4fe2-b156-09375c5761e5" + shiftId: "7dc230cb-5680-4799-b45a-8a8269675a42" + staffId: "d62605f9-366d-42c5-8f3b-f276c0d27ea3" + roleId: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + status: COMPLETED + origin: STAFF + } + ) + application_15: application_insert( + data: { + id: "89a62213-06b3-49fd-8ed6-54baa595862f" + shiftId: "5e4cc4e0-51a4-406b-82cd-39bfa3a0970a" + staffId: "9631581a-1601-4e06-8e5e-600e9f305bcf" + roleId: "67ab1dcb-5b54-4dd9-aeb5-9cc58bdda0ed" + status: COMPLETED + origin: STAFF + } + ) + application_16: application_insert( + data: { + id: "beb9770e-2e1c-41d7-80bf-4a2f6acb33d3" + shiftId: "07be57d0-a580-46b7-b98e-1e29249cff63" + staffId: "2b678a6d-b8cd-4d5e-95ae-f35e4569f92c" + roleId: "e51f3553-f2ee-400b-91e6-92b534239697" + status: COMPLETED + origin: STAFF + } + ) + application_17: application_insert( + data: { + id: "94578e49-9ecb-475c-825b-6bf5a4642f13" + shiftId: "845b366b-3ec6-4322-b3cf-b386e6ad8ba5" + staffId: "c6428f90-9c29-4e5c-b362-dc67a9a8cbba" + roleId: "7de956ce-743b-4271-b826-73313a5f07f5" + status: COMPLETED + origin: STAFF + } + ) + application_18: application_insert( + data: { + id: "22b93790-36a6-405c-b0c7-546d2cfd4411" + shiftId: "940ae08f-a9f4-4fe4-ab8b-a219c53f3bfa" + staffId: "56d7178c-f4ab-4c50-9b1f-d6efe25ba50b" + roleId: "73fdb09b-ecbd-402e-8eb4-e7d79237d017" + status: COMPLETED + origin: STAFF + } + ) + application_19: application_insert( + data: { + id: "b8c4b723-346d-4bcd-9667-35944ba5dbbd" + shiftId: "738cd678-9179-4360-bf24-426700651a37" + staffId: "633df3ce-b92c-473f-90d8-38dd027fdf57" + roleId: "67ab1dcb-5b54-4dd9-aeb5-9cc58bdda0ed" + status: COMPLETED + origin: STAFF + } + ) + + # Invoices (for completed orders) + invoice_01: invoice_insert( + data: { + id: "16e27caa-9d1e-44de-afed-e7bd4546e35e" + status: PAID + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderId: "0e3b8fbb-ffd7-496d-a20a-2375b9205f54" + paymentTerms: NET_30 + invoiceNumber: "INV-2026-0001" + issueDate: "2026-01-26T05:00:00Z" + dueDate: "2026-02-25T05:00:00Z" + amount: 192 + staffCount: 1 + chargesCount: 1 + } + ) + invoice_02: invoice_insert( + data: { + id: "fde8af05-374c-44ea-a5ed-75bc8088bd5f" + status: PAID + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderId: "8927e7c7-7e99-400b-ba26-3e94d7039605" + paymentTerms: NET_30 + invoiceNumber: "INV-2026-0002" + issueDate: "2026-01-26T05:00:00Z" + dueDate: "2026-02-25T05:00:00Z" + amount: 208 + staffCount: 1 + chargesCount: 1 + } + ) + invoice_03: invoice_insert( + data: { + id: "ba0529be-7906-417f-8ec7-c866d0633fee" + status: PAID + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderId: "8bb46c96-74cd-48d6-bbb1-287823376e30" + paymentTerms: NET_30 + invoiceNumber: "INV-2026-0003" + issueDate: "2026-01-27T05:00:00Z" + dueDate: "2026-02-26T05:00:00Z" + amount: 160 + staffCount: 1 + chargesCount: 1 + } + ) + invoice_04: invoice_insert( + data: { + id: "8cfdce8b-f794-454a-8c05-aa1b3af5dbc6" + status: APPROVED + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderId: "83b7dd83-2223-4585-a75f-b247368ebfcb" + paymentTerms: NET_30 + invoiceNumber: "INV-2026-0004" + issueDate: "2026-01-28T05:00:00Z" + dueDate: "2026-02-27T05:00:00Z" + amount: 224 + staffCount: 1 + chargesCount: 1 + } + ) + invoice_05: invoice_insert( + data: { + id: "c473807f-f77c-4ea4-8ee0-dbd7430704b2" + status: APPROVED + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderId: "1f7589f3-5bac-4174-82ed-844995ffb36e" + paymentTerms: NET_30 + invoiceNumber: "INV-2026-0005" + issueDate: "2026-01-28T05:00:00Z" + dueDate: "2026-02-27T05:00:00Z" + amount: 192 + staffCount: 1 + chargesCount: 1 + } + ) + invoice_06: invoice_insert( + data: { + id: "24826ae1-d18f-4b7b-9a1f-3a73aff11412" + status: APPROVED + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderId: "df585e06-05f9-4859-865f-de23d8fa29fe" + paymentTerms: NET_30 + invoiceNumber: "INV-2026-0006" + issueDate: "2026-01-29T05:00:00Z" + dueDate: "2026-02-28T05:00:00Z" + amount: 208 + staffCount: 1 + chargesCount: 1 + } + ) + invoice_07: invoice_insert( + data: { + id: "2d7fd51e-b9ca-439a-abbd-c3bd382232eb" + status: APPROVED + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderId: "c3c5dca6-c8f9-4948-bb8c-10d8129914b3" + paymentTerms: NET_30 + invoiceNumber: "INV-2026-0007" + issueDate: "2026-01-30T05:00:00Z" + dueDate: "2026-03-01T05:00:00Z" + amount: 320 + staffCount: 2 + chargesCount: 1 + } + ) + invoice_08: invoice_insert( + data: { + id: "dfc9ea8e-17fc-474e-9948-df14ed24cd79" + status: APPROVED + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderId: "a1fe2d34-cd5e-4372-bd73-e220a1840e1d" + paymentTerms: NET_30 + invoiceNumber: "INV-2026-0008" + issueDate: "2026-01-30T05:00:00Z" + dueDate: "2026-03-01T05:00:00Z" + amount: 224 + staffCount: 1 + chargesCount: 1 + } + ) + invoice_09: invoice_insert( + data: { + id: "10a71d9a-4d35-476c-9f6a-d491e699b657" + status: APPROVED + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderId: "858753bc-dfa3-46fd-b383-ecd38de40b05" + paymentTerms: NET_30 + invoiceNumber: "INV-2026-0009" + issueDate: "2026-01-31T05:00:00Z" + dueDate: "2026-03-02T05:00:00Z" + amount: 192 + staffCount: 1 + chargesCount: 1 + } + ) + invoice_10: invoice_insert( + data: { + id: "76d7647f-eb9d-4b3d-adb2-637be41123d2" + status: APPROVED + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderId: "634386c5-45f3-46a0-a267-9971f0c19728" + paymentTerms: NET_30 + invoiceNumber: "INV-2026-0010" + issueDate: "2026-02-01T05:00:00Z" + dueDate: "2026-03-03T05:00:00Z" + amount: 416 + staffCount: 2 + chargesCount: 1 + } + ) + invoice_11: invoice_insert( + data: { + id: "43b63f62-105b-4de3-b59e-bd8c9f334417" + status: APPROVED + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderId: "43d593ed-0c58-4675-ae12-34aa27cb0d0c" + paymentTerms: NET_30 + invoiceNumber: "INV-2026-0011" + issueDate: "2026-02-02T05:00:00Z" + dueDate: "2026-03-04T05:00:00Z" + amount: 320 + staffCount: 2 + chargesCount: 1 + } + ) + invoice_12: invoice_insert( + data: { + id: "c23f3ed2-7fa1-43f5-88e9-4227e34cb5eb" + status: APPROVED + vendorId: "c3b25c47-0ebd-4402-a9b1-b8a875a7f71a" + businessId: "ef69e942-d6e5-48e5-a8bc-69d3faa63b2f" + orderId: "7abf0183-a989-4c2a-b420-e959663da61b" + paymentTerms: NET_30 + invoiceNumber: "INV-2026-0012" + issueDate: "2026-02-02T05:00:00Z" + dueDate: "2026-03-04T05:00:00Z" + amount: 224 + staffCount: 1 + chargesCount: 1 + } + ) + + # Recent Payments (only for PAID invoices) + recent_payment_01: recentPayment_insert( + data: { + id: "2297f0e5-a99b-476c-9c65-69743ec7788f" + workedTime: "8h" + status: PAID + staffId: "633df3ce-b92c-473f-90d8-38dd027fdf57" + applicationId: "89f99e27-999b-41e4-a8d8-c918759a5638" + invoiceId: "16e27caa-9d1e-44de-afed-e7bd4546e35e" + } + ) + recent_payment_02: recentPayment_insert( + data: { + id: "949fbd9e-041b-405a-bba1-04216fa778b8" + workedTime: "8h" + status: PAID + staffId: "9631581a-1601-4e06-8e5e-600e9f305bcf" + applicationId: "fc772ef9-eb2c-4f03-a594-7e439b6ca74e" + invoiceId: "fde8af05-374c-44ea-a5ed-75bc8088bd5f" + } + ) + recent_payment_03: recentPayment_insert( + data: { + id: "4d45192e-34fe-4e07-a4f9-708e7591a9a5" + workedTime: "8h" + status: PAID + staffId: "2b678a6d-b8cd-4d5e-95ae-f35e4569f92c" + applicationId: "a8090a7c-56ca-4164-9f1f-1c3ed9aa80de" + invoiceId: "ba0529be-7906-417f-8ec7-c866d0633fee" + } + ) +} diff --git a/makefiles/dataconnect.mk b/makefiles/dataconnect.mk index d1be5e32..ba7298ef 100644 --- a/makefiles/dataconnect.mk +++ b/makefiles/dataconnect.mk @@ -1,6 +1,6 @@ # --- Data Connect / Backend --- -.PHONY: dataconnect-enable-apis dataconnect-init dataconnect-deploy dataconnect-sql-migrate dataconnect-generate-sdk dataconnect-sync dataconnect-bootstrap-db check-gcloud-beta +.PHONY: dataconnect-enable-apis dataconnect-init dataconnect-deploy dataconnect-sql-migrate dataconnect-generate-sdk dataconnect-sync dataconnect-bootstrap-db check-gcloud-beta dataconnect-clean # Enable all required APIs for Firebase Data Connect + Cloud SQL dataconnect-enable-apis: @@ -50,9 +50,16 @@ dataconnect-sync: # Execute seed in Firebase Data Connect dataconnect-seed: @echo "--> Exec seed in Firebase Data Connect..." - @firebase dataconnect:execute seeds/seed_min.graphql --project=$(FIREBASE_ALIAS) + @firebase dataconnect:execute backend/dataconnect/functions/seed.gql --project=$(FIREBASE_ALIAS) @echo "✅ Seed executed successfully." + +# Execute clean, to delete all the data in Firebase Data Connect +dataconnect-clean: + @echo "--> Exec clean all the data in Firebase Data Connect..." + @firebase dataconnect:execute backend/dataconnect/functions/clean.gql --project=$(FIREBASE_ALIAS) + @echo "✅ Clean information executed successfully." + # Run tests for Data Connect deployment and migrations dataconnect-test: @echo "--> Running Data Connect tests..."