autopilot-core-sandbox 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -0
- package/dist/Provider.d.ts +21 -0
- package/dist/Provider.d.ts.map +1 -0
- package/dist/Provider.js +61 -0
- package/dist/Provider.js.map +1 -0
- package/dist/dist/Provider.d.ts +21 -0
- package/dist/dist/Provider.d.ts.map +1 -0
- package/dist/dist/Provider.js +61 -0
- package/dist/dist/Provider.js.map +1 -0
- package/dist/dist/index.d.ts +45 -0
- package/dist/dist/index.d.ts.map +1 -0
- package/dist/dist/index.js +61 -0
- package/dist/dist/index.js.map +1 -0
- package/dist/dist/interfaces/index.d.ts +1238 -0
- package/dist/dist/interfaces/index.d.ts.map +1 -0
- package/dist/dist/interfaces/index.js +3 -0
- package/dist/dist/interfaces/index.js.map +1 -0
- package/dist/dist/migrations/20260608222757_remote_schema.sql +5666 -0
- package/dist/dist/migrations/20260611174826_add_job_item_recurring_id_to_job_item.sql +7 -0
- package/dist/dist/migrations/20260625224612_add_dashboard_guided_tour_dismissed_to_settings_user.sql +5 -0
- package/dist/dist/migrations/20260627031433_support_chat_tables.sql +115 -0
- package/dist/dist/migrations/20260627031434_support_chat_rls.sql +37 -0
- package/dist/dist/migrations/20260704170209_add_estimate_scheduling.sql +121 -0
- package/dist/dist/migrations/20260704170210_add_estimate_scheduling_rls.sql +42 -0
- package/dist/dist/migrations/20260704235034_add_estimate_reminder_settings.sql +11 -0
- package/dist/dist/migrations/20260707003825_blocked_number_table.sql +32 -0
- package/dist/dist/migrations/20260707003826_blocked_number_rls.sql +22 -0
- package/dist/dist/migrations/20260709191055_sms_opt_out_table.sql +38 -0
- package/dist/dist/migrations/20260709191056_sms_opt_out_rls.sql +21 -0
- package/dist/dist/migrations/20260709214507_job_time_entry_table.sql +70 -0
- package/dist/dist/migrations/20260709214508_job_time_entry_rls.sql +21 -0
- package/dist/dist/migrations/20260711185956_phone_call_table.sql +99 -0
- package/dist/dist/migrations/20260711185957_phone_call_rls.sql +25 -0
- package/dist/dist/migrations/20260712014705_ai_voice_assistant_settings.sql +71 -0
- package/dist/dist/migrations/20260712014706_ai_voice_assistant_settings_rls.sql +14 -0
- package/dist/dist/migrations/20260712014707_ai_prompt_templates.sql +28 -0
- package/dist/dist/migrations/20260712014708_ai_prompt_templates_rls.sql +5 -0
- package/dist/dist/migrations/20260712014709_ai_prompt_templates_seed.sql +77 -0
- package/dist/dist/migrations/20260715011550_reminder_dispatch_table.sql +47 -0
- package/dist/dist/migrations/20260715011551_reminder_dispatch_rls.sql +22 -0
- package/dist/dist/migrations/20260715192923_dedup_sequence_contact_add_unique_constraint.sql +27 -0
- package/dist/dist/migrations/20260716194420_add_employee_location_tracking.sql +146 -0
- package/dist/dist/migrations/20260716194421_add_employee_location_tracking_rls.sql +154 -0
- package/dist/dist/migrations/20260716194422_get_client_map_last_completed_jobs.sql +28 -0
- package/dist/dist/migrations/20260717144535_add_blast_email_invalid_skipped_count.sql +2 -0
- package/dist/dist/migrations/20260717162900_create_blast_email_chunk.sql +36 -0
- package/dist/dist/migrations/20260717162901_add_blast_email_chunk_rls.sql +5 -0
- package/dist/dist/migrations/20260717162902_add_blast_email_chunk_progress_columns.sql +3 -0
- package/dist/dist/migrations/20260717162903_add_blast_email_bounce_tracking_columns.sql +4 -0
- package/dist/dist/migrations/20260717162904_create_email_hard_bounced.sql +23 -0
- package/dist/dist/migrations/20260717162905_add_email_hard_bounced_rls.sql +5 -0
- package/dist/dist/migrations/20260717164837_add_sequence_contact_sent_at.sql +19 -0
- package/dist/dist/migrations/20260717170920_add_sequence_contact_claim_index.sql +12 -0
- package/dist/dist/migrations/20260719215139_create_outbound_event.sql +59 -0
- package/dist/dist/migrations/20260719215140_create_outbound_event_rls.sql +16 -0
- package/dist/dist/migrations/20260719215141_create_webhook_delivery.sql +99 -0
- package/dist/dist/migrations/20260719215142_create_webhook_delivery_rls.sql +11 -0
- package/dist/dist/migrations/20260719215143_outbound_event_triggers.sql +219 -0
- package/dist/dist/migrations/20260719215144_create_api_key.sql +34 -0
- package/dist/dist/migrations/20260719215146_create_api_key_rls.sql +12 -0
- package/dist/dist/migrations/20260719215147_webhook_subscription_add_secret_active.sql +28 -0
- package/dist/dist/migrations/20260719215148_api_aggregate_create_functions.sql +479 -0
- package/dist/dist/migrations/20260721174837_webhook_subscription_generic_endpoints.sql +41 -0
- package/dist/dist/migrations/20260721185631_webhook_outbox_retention.sql +87 -0
- package/dist/dist/migrations/20260721190304_create_qb_sync_task.sql +120 -0
- package/dist/dist/migrations/20260721190306_qb_sync_task_rls.sql +8 -0
- package/dist/dist/migrations/20260721190307_qb_mapping_orphan_fks.sql +29 -0
- package/dist/dist/migrations/20260721190308_qb_task_retention.sql +90 -0
- package/dist/dist/migrations/20260721234401_create_permission_role.sql +83 -0
- package/dist/dist/migrations/20260721234402_permission_role_rls.sql +22 -0
- package/dist/dist/migrations/20260721234403_user_role_add_permission_role_id.sql +12 -0
- package/dist/dist/migrations/20260721234404_seed_permission_roles.sql +100 -0
- package/dist/dist/migrations/20260721234405_backfill_user_role_permission_role_id.sql +20 -0
- package/dist/dist/migrations/20260722193800_permission_role_add_manage_employees.sql +56 -0
- package/dist/dist/migrations/20260723025606_staging_new_employee_company_read_rls.sql +10 -0
- package/dist/dist/migrations/20260723134328_create_google_lsa_integration.sql +1016 -0
- package/dist/dist/migrations/20260723134329_google_lsa_integration_rls.sql +205 -0
- package/dist/dist/migrations/20260723150640_google_lsa_hardening.sql +169 -0
- package/dist/dist/migrations/20260723150641_google_lsa_hardening_rls.sql +12 -0
- package/dist/dist/migrations/20260724230721_google_lsa_facebook_exclusivity_attach.sql +104 -0
- package/dist/dist/migrations/20260724230722_google_lsa_facebook_exclusivity_attach_rls.sql +20 -0
- package/dist/dist/migrations/20260725172630_add_message_pagination_and_search.sql +265 -0
- package/dist/dist/migrations/20260725172631_add_message_pagination_and_search_rls.sql +72 -0
- package/dist/dist/migrations/20260725172632_optimize_message_thread_pagination_search.sql +245 -0
- package/dist/dist/migrations/20260725172633_harden_message_search_and_photo_pagination.sql +256 -0
- package/dist/dist/migrations/20260725172634_fix_message_thread_line_filter.sql +250 -0
- package/dist/dist/migrations/20260725174948_google_lsa_attach_bing_exclusivity_guard.sql +23 -0
- package/dist/dist/migrations/20260725200430_client_portal_settings.sql +41 -0
- package/dist/dist/migrations/20260725200431_client_portal_settings_rls.sql +21 -0
- package/dist/dist/migrations/20260725200433_client_portal_auth_tables.sql +81 -0
- package/dist/dist/migrations/20260725200434_client_portal_auth_rls.sql +18 -0
- package/dist/dist/migrations/20260725200435_portal_claim_login_attempt.sql +36 -0
- package/dist/dist/migrations/20260725200436_portal_appointment_request.sql +39 -0
- package/dist/dist/migrations/20260725200437_portal_appointment_request_rls.sql +10 -0
- package/dist/dist/migrations/20260725210000_google_reserve_integration.sql +85 -0
- package/dist/dist/migrations/20260725210001_google_reserve_integration_rls.sql +10 -0
- package/dist/dist/migrations/20260725220000_add_analytics_query_indexes.sql +47 -0
- package/dist/dist/migrations/20260725230000_onboarding_preload_data.sql +1074 -0
- package/dist/dist/migrations/20260725230001_onboarding_preload_data_rls.sql +40 -0
- package/dist/dist/migrations/20260725230002_add_pricebook_query_indexes.sql +13 -0
- package/dist/dist/migrations/20260726000000_facebook_ads_integration.sql +1538 -0
- package/dist/dist/migrations/20260726000001_facebook_ads_integration_rls.sql +356 -0
- package/dist/dist/migrations/20260726000002_facebook_ads_attach_lsa_exclusivity_guard.sql +25 -0
- package/dist/dist/migrations/20260726000003_facebook_ads_attach_bing_exclusivity_guard.sql +22 -0
- package/dist/dist/migrations/20260726010000_create_bing_ads_integration.sql +1112 -0
- package/dist/dist/migrations/20260726010001_bing_ads_integration_rls.sql +227 -0
- package/dist/dist/migrations/20260726220000_add_document_theme_settings.sql +11 -0
- package/dist/dist/migrations/20260726220001_update_document_theme_comments.sql +7 -0
- package/dist/dist/migrations/20260727210319_evolve_tier_for_pricing.sql +68 -0
- package/dist/dist/migrations/20260727210320_create_billing_addon.sql +85 -0
- package/dist/dist/migrations/20260727210321_create_billing_addon_rls.sql +21 -0
- package/dist/dist/migrations/20260728213930_create_usage_metering.sql +189 -0
- package/dist/dist/migrations/20260728213931_create_usage_metering_rls.sql +32 -0
- package/dist/dist/migrations/20260729004305_marketing_charge_txn_functions.sql +242 -0
- package/dist/dist/migrations/20260729004306_marketing_charge_txn_functions_rls.sql +37 -0
- package/dist/dist/migrations/20260729005524_update_deduct_from_balance_errcode.sql +42 -0
- package/dist/dist/migrations/20260730193601_fix_deduct_from_balance_lost_update.sql +46 -0
- package/dist/dist/migrations/20260730193602_add_blast_sms_chunk_reaper_columns.sql +27 -0
- package/dist/dist/migrations/20260731011415_create_google_calendar_connection.sql +84 -0
- package/dist/dist/migrations/20260731011416_google_calendar_connection_rls.sql +23 -0
- package/dist/dist/migrations/20260731011417_create_google_calendar_sync.sql +157 -0
- package/dist/dist/migrations/20260731011418_google_calendar_sync_rls.sql +26 -0
- package/dist/dist/migrations/20260731011419_event_outbound_triggers.sql +28 -0
- package/dist/dist/migrations/20260731011420_add_google_calendar_addon_key.sql +24 -0
- package/dist/dist/migrations/20260731011421_gcal_task_retention.sql +109 -0
- package/dist/dist/migrations/20260731234245_create_estimate_proposal.sql +157 -0
- package/dist/dist/migrations/20260731234247_estimate_proposal_rls.sql +46 -0
- package/dist/dist/migrations/20260731234248_add_proposal_estimate_settings.sql +17 -0
- package/dist/dist/migrations/20260731234249_add_estimate_proposals_addon_key.sql +25 -0
- package/dist/dist/migrations/20260731234250_approve_estimate_proposal_function.sql +133 -0
- package/dist/dist/migrations/20260801010609_save_estimate_proposal_function.sql +154 -0
- package/dist/dist/migrations/20260801173554_add_hide_autopilot_branding_setting.sql +6 -0
- package/dist/dist/migrations/20260806230917_add_client_billing_address_columns.sql +9 -0
- package/dist/dist/migrations/20260806230944_api_create_client_billing_address.sql +93 -0
- package/dist/dist/migrations/20260807014702_create_parent_id_company_id_keys.sql +20 -0
- package/dist/dist/migrations/20260807014703_create_contract_template.sql +30 -0
- package/dist/dist/migrations/20260807014704_create_contract.sql +233 -0
- package/dist/dist/migrations/20260807014705_create_contract_signature.sql +39 -0
- package/dist/dist/migrations/20260807014706_create_item_contract_requirement.sql +38 -0
- package/dist/dist/migrations/20260807014707_create_settings_contract.sql +23 -0
- package/dist/dist/migrations/20260807014708_contract_rls.sql +74 -0
- package/dist/dist/migrations/20260807014709_sign_contract_function.sql +92 -0
- package/dist/dist/migrations/20260807014710_create_settings_rental.sql +34 -0
- package/dist/dist/migrations/20260807014711_create_saved_location.sql +56 -0
- package/dist/dist/migrations/20260807014712_create_rental_task_option.sql +52 -0
- package/dist/dist/migrations/20260807014713_create_asset.sql +90 -0
- package/dist/dist/migrations/20260807014714_add_job_schedule_asset_fkeys.sql +39 -0
- package/dist/dist/migrations/20260807014715_rental_rls.sql +48 -0
- package/dist/dist/migrations/20260807014716_add_job_schedule_any_time.sql +7 -0
- package/dist/dist/migrations/20260807014717_add_job_schedule_target_location.sql +48 -0
- package/dist/dist/migrations/20260807014718_job_schedule_completion_guard.sql +53 -0
- package/dist/dist/migrations/20260807014719_add_job_schedule_list_sort_key.sql +7 -0
- package/dist/dist/migrations/20260807014720_add_item_duration.sql +11 -0
- package/dist/dist/migrations/20260807014721_add_settings_booking_enforce_rental_availability.sql +9 -0
- package/dist/dist/migrations/20260807014722_add_job_unsigned_rental_agreement.sql +10 -0
- package/dist/dist/migrations/20260807014723_add_item_size.sql +12 -0
- package/dist/dist/migrations/20260809193533_add_booking_path_button_labels.sql +11 -0
- package/dist/dist/migrations/20260809231721_add_route_distance_cache.sql +37 -0
- package/dist/dist/migrations/20260809231722_route_distance_cache_rls.sql +15 -0
- package/dist/dist/migrations/20260809231723_apply_rental_route_plan_function.sql +275 -0
- package/dist/dist/migrations/20260810171550_add_settings_job_default_job_types.sql +9 -0
- package/dist/dist/migrations/20260810212430_backfill_rental_task_option_sort_order.sql +61 -0
- package/dist/dist/migrations/20260811224317_add_settings_user_dnd_hint_dismissed.sql +9 -0
- package/dist/dist/migrations/20260813174503_repair_user_role_email_drift.sql +59 -0
- package/dist/dist/migrations/20260813174504_sync_user_role_email_trigger.sql +30 -0
- package/dist/dist/migrations/20260813175210_add_event_list_sort_key.sql +5 -0
- package/dist/dist/migrations/20260814172222_add_client_auto_bill_on_completion.sql +6 -0
- package/dist/dist/migrations/20260816160252_create_automation_rule.sql +99 -0
- package/dist/dist/migrations/20260816160253_automation_rule_rls.sql +19 -0
- package/dist/dist/migrations/20260816160254_create_settings_automation.sql +36 -0
- package/dist/dist/migrations/20260816160255_settings_automation_rls.sql +18 -0
- package/dist/dist/migrations/20260816160256_create_automation_event.sql +71 -0
- package/dist/dist/migrations/20260816160257_automation_event_rls.sql +12 -0
- package/dist/dist/migrations/20260816160258_create_automation_run.sql +129 -0
- package/dist/dist/migrations/20260816160259_automation_run_rls.sql +19 -0
- package/dist/dist/migrations/20260816160300_add_client_created_via.sql +25 -0
- package/dist/dist/migrations/20260816160301_add_estimate_sent_at.sql +39 -0
- package/dist/dist/migrations/20260816160302_add_message_automation_ref.sql +10 -0
- package/dist/dist/migrations/20260816160303_automation_event_triggers.sql +236 -0
- package/dist/dist/migrations/20260816160304_automation_retention.sql +142 -0
- package/dist/dist/migrations/20260816202404_add_automation_center_addon_key.sql +26 -0
- package/dist/dist/migrations/20260816225501_widen_automation_rule_trigger_action_checks.sql +25 -0
- package/dist/dist/migrations/20260816225502_widen_automation_event_type_check.sql +18 -0
- package/dist/dist/migrations/20260816225503_add_invoice_id_to_automation_tables.sql +18 -0
- package/dist/dist/migrations/20260816225504_add_job_rescheduled_capture_trigger.sql +51 -0
- package/dist/dist/migrations/20260816225505_add_lead_converted_capture_trigger.sql +26 -0
- package/dist/dist/migrations/20260816225506_fix_booking_request_import_guard.sql +27 -0
- package/dist/dist/migrations/20260816225507_widen_outbound_event_for_automation.sql +38 -0
- package/dist/dist/migrations/20260817002626_add_user_last_login_platform_columns.sql +14 -0
- package/dist/dist/migrations/20260817221703_create_deletion.sql +34 -0
- package/dist/dist/migrations/20260817221707_deletion_rls.sql +21 -0
- package/dist/dist/migrations/20260817221708_add_soft_delete_columns.sql +82 -0
- package/dist/dist/migrations/20260817221709_trash_functions.sql +434 -0
- package/dist/dist/migrations/20260817221710_outbound_event_soft_delete.sql +55 -0
- package/dist/dist/migrations/20260817221711_automation_soft_delete_events.sql +77 -0
- package/dist/dist/migrations/20260817221712_fix_estimate_address_cascade.sql +14 -0
- package/dist/dist/migrations/20260817232630_trash_batch_function.sql +67 -0
- package/dist/dist/migrations/20260819170204_create_email_spam_complaint.sql +23 -0
- package/dist/dist/migrations/20260819170205_add_email_spam_complaint_rls.sql +5 -0
- package/dist/dist/migrations/20260819170206_email_unsubscribed_upsert_constraints.sql +14 -0
- package/dist/dist/migrations/20260819180151_get_suppressed_emails_function.sql +23 -0
- package/dist/dist/migrations/20260819191143_is_deleted_backfill_guard.sql +29 -0
- package/dist/dist/migrations/20260819191144_trash_functions_no_dual_write.sql +319 -0
- package/dist/dist/migrations/20260819191145_client_map_jobs_deleted_at.sql +33 -0
- package/dist/dist/migrations/20260819191147_booking_declined_deleted_at.sql +28 -0
- package/dist/dist/migrations/20260819191148_onboarding_preload_no_address_is_deleted.sql +1019 -0
- package/dist/dist/migrations/20260820222756_add_settings_job_hide_task_timer.sql +2 -0
- package/dist/dist/migrations/20260824234151_add_blast_chunk_recipients.sql +13 -0
- package/dist/dist/migrations/20260824234152_add_blast_pause_cancel_columns.sql +10 -0
- package/dist/dist/migrations/20260825014725_get_job_ids_in_range.sql +42 -0
- package/dist/dist/migrations/20260825194452_add_failed_job_status.sql +15 -0
- package/dist/dist/migrations/20260825194457_remove_take_to_rental_task_options.sql +24 -0
- package/dist/dist/migrations/20260825194458_remove_take_to_job_schedules.sql +12 -0
- package/dist/dist/migrations/20260825194459_rework_apply_rental_route_plan_no_take_to.sql +168 -0
- package/dist/dist/migrations/20260825194500_drop_job_schedule_target_location.sql +24 -0
- package/dist/dist/migrations/20260825194501_add_job_schedule_size.sql +17 -0
- package/dist/dist/migrations/20260825233001_add_job_schedule_id_company_id_key.sql +11 -0
- package/dist/dist/migrations/20260825233002_create_route_plan.sql +52 -0
- package/dist/dist/migrations/20260825233003_create_route_plan_stop.sql +159 -0
- package/dist/dist/migrations/20260825233004_route_plan_rls.sql +32 -0
- package/dist/dist/migrations/20260825233005_apply_rental_route_plan_v2.sql +351 -0
- package/dist/dist/migrations/20260826150934_facebook_ads_lead_ingestion.sql +1711 -0
- package/dist/dist/migrations/20260826151141_facebook_ads_lead_ingestion_rls_v2.sql +43 -0
- package/dist/dist/migrations/20260826234722_facebook_messenger_ingestion.sql +703 -0
- package/dist/dist/migrations/20260826234723_facebook_messenger_ingestion_rls.sql +80 -0
- package/dist/dist/migrations/20260826234724_widen_automations_messenger.sql +46 -0
- package/dist/dist/migrations/20260827100001_add_route_plan_minutes.sql +10 -0
- package/dist/dist/migrations/20260827100002_add_route_plan_stop_leg_minutes.sql +9 -0
- package/dist/dist/migrations/20260827100003_apply_rental_route_plan_v3.sql +341 -0
- package/dist/dist/migrations/20260827230346_apply_rental_route_plan_v4.sql +366 -0
- package/dist/dist/migrations/20260829090911_create_fleet_schema.sql +3698 -0
- package/dist/dist/migrations/20260829090912_fleet_rls.sql +1011 -0
- package/dist/dist/migrations/20260831102212_add_online_booking_address_display.sql +8 -0
- package/dist/dist/providers/AddressProvider.d.ts +9 -0
- package/dist/dist/providers/AddressProvider.d.ts.map +1 -0
- package/dist/dist/providers/AddressProvider.js +207 -0
- package/dist/dist/providers/AddressProvider.js.map +1 -0
- package/dist/dist/providers/AutomationsProvider.d.ts +11 -0
- package/dist/dist/providers/AutomationsProvider.d.ts.map +1 -0
- package/dist/dist/providers/AutomationsProvider.js +170 -0
- package/dist/dist/providers/AutomationsProvider.js.map +1 -0
- package/dist/dist/providers/BlockedNumbersProvider.d.ts +13 -0
- package/dist/dist/providers/BlockedNumbersProvider.d.ts.map +1 -0
- package/dist/dist/providers/BlockedNumbersProvider.js +71 -0
- package/dist/dist/providers/BlockedNumbersProvider.js.map +1 -0
- package/dist/dist/providers/CategoryProvider.d.ts +8 -0
- package/dist/dist/providers/CategoryProvider.d.ts.map +1 -0
- package/dist/dist/providers/CategoryProvider.js +95 -0
- package/dist/dist/providers/CategoryProvider.js.map +1 -0
- package/dist/dist/providers/ClientProvider.d.ts +39 -0
- package/dist/dist/providers/ClientProvider.d.ts.map +1 -0
- package/dist/dist/providers/ClientProvider.js +253 -0
- package/dist/dist/providers/ClientProvider.js.map +1 -0
- package/dist/dist/providers/CompanyProvider.d.ts +7 -0
- package/dist/dist/providers/CompanyProvider.d.ts.map +1 -0
- package/dist/dist/providers/CompanyProvider.js +114 -0
- package/dist/dist/providers/CompanyProvider.js.map +1 -0
- package/dist/dist/providers/DashboardProvider.d.ts +78 -0
- package/dist/dist/providers/DashboardProvider.d.ts.map +1 -0
- package/dist/dist/providers/DashboardProvider.js +568 -0
- package/dist/dist/providers/DashboardProvider.js.map +1 -0
- package/dist/dist/providers/DiscountProvider.d.ts +8 -0
- package/dist/dist/providers/DiscountProvider.d.ts.map +1 -0
- package/dist/dist/providers/DiscountProvider.js +92 -0
- package/dist/dist/providers/DiscountProvider.js.map +1 -0
- package/dist/dist/providers/EmployeesProvider.d.ts +6 -0
- package/dist/dist/providers/EmployeesProvider.d.ts.map +1 -0
- package/dist/dist/providers/EmployeesProvider.js +185 -0
- package/dist/dist/providers/EmployeesProvider.js.map +1 -0
- package/dist/dist/providers/EstimatesProvider.d.ts +16 -0
- package/dist/dist/providers/EstimatesProvider.d.ts.map +1 -0
- package/dist/dist/providers/EstimatesProvider.js +251 -0
- package/dist/dist/providers/EstimatesProvider.js.map +1 -0
- package/dist/dist/providers/EventsProvider.d.ts +4 -0
- package/dist/dist/providers/EventsProvider.d.ts.map +1 -0
- package/dist/dist/providers/EventsProvider.js +24 -0
- package/dist/dist/providers/EventsProvider.js.map +1 -0
- package/dist/dist/providers/FilesProvider.d.ts +17 -0
- package/dist/dist/providers/FilesProvider.d.ts.map +1 -0
- package/dist/dist/providers/FilesProvider.js +201 -0
- package/dist/dist/providers/FilesProvider.js.map +1 -0
- package/dist/dist/providers/InvoicesProvider.d.ts +13 -0
- package/dist/dist/providers/InvoicesProvider.d.ts.map +1 -0
- package/dist/dist/providers/InvoicesProvider.js +207 -0
- package/dist/dist/providers/InvoicesProvider.js.map +1 -0
- package/dist/dist/providers/ItemProvider.d.ts +9 -0
- package/dist/dist/providers/ItemProvider.d.ts.map +1 -0
- package/dist/dist/providers/ItemProvider.js +201 -0
- package/dist/dist/providers/ItemProvider.js.map +1 -0
- package/dist/dist/providers/JobSourceProvider.d.ts +8 -0
- package/dist/dist/providers/JobSourceProvider.d.ts.map +1 -0
- package/dist/dist/providers/JobSourceProvider.js +75 -0
- package/dist/dist/providers/JobSourceProvider.js.map +1 -0
- package/dist/dist/providers/JobTypeProvider.d.ts +8 -0
- package/dist/dist/providers/JobTypeProvider.d.ts.map +1 -0
- package/dist/dist/providers/JobTypeProvider.js +75 -0
- package/dist/dist/providers/JobTypeProvider.js.map +1 -0
- package/dist/dist/providers/JobsProvider.d.ts +35 -0
- package/dist/dist/providers/JobsProvider.d.ts.map +1 -0
- package/dist/dist/providers/JobsProvider.js +863 -0
- package/dist/dist/providers/JobsProvider.js.map +1 -0
- package/dist/dist/providers/MessagesProvider.d.ts +33 -0
- package/dist/dist/providers/MessagesProvider.d.ts.map +1 -0
- package/dist/dist/providers/MessagesProvider.js +415 -0
- package/dist/dist/providers/MessagesProvider.js.map +1 -0
- package/dist/dist/providers/PaymentProvider.d.ts +9 -0
- package/dist/dist/providers/PaymentProvider.d.ts.map +1 -0
- package/dist/dist/providers/PaymentProvider.js +48 -0
- package/dist/dist/providers/PaymentProvider.js.map +1 -0
- package/dist/dist/providers/PermissionRolesProvider.d.ts +5 -0
- package/dist/dist/providers/PermissionRolesProvider.d.ts.map +1 -0
- package/dist/dist/providers/PermissionRolesProvider.js +30 -0
- package/dist/dist/providers/PermissionRolesProvider.js.map +1 -0
- package/dist/dist/providers/PhoneNumberProvider.d.ts +12 -0
- package/dist/dist/providers/PhoneNumberProvider.d.ts.map +1 -0
- package/dist/dist/providers/PhoneNumberProvider.js +184 -0
- package/dist/dist/providers/PhoneNumberProvider.js.map +1 -0
- package/dist/dist/providers/ProfileProvider.d.ts +6 -0
- package/dist/dist/providers/ProfileProvider.d.ts.map +1 -0
- package/dist/dist/providers/ProfileProvider.js +71 -0
- package/dist/dist/providers/ProfileProvider.js.map +1 -0
- package/dist/dist/providers/RentalsProvider.d.ts +28 -0
- package/dist/dist/providers/RentalsProvider.d.ts.map +1 -0
- package/dist/dist/providers/RentalsProvider.js +438 -0
- package/dist/dist/providers/RentalsProvider.js.map +1 -0
- package/dist/dist/providers/SettingsBookingProvider.d.ts +9 -0
- package/dist/dist/providers/SettingsBookingProvider.d.ts.map +1 -0
- package/dist/dist/providers/SettingsBookingProvider.js +163 -0
- package/dist/dist/providers/SettingsBookingProvider.js.map +1 -0
- package/dist/dist/providers/SettingsProvider.d.ts +8 -0
- package/dist/dist/providers/SettingsProvider.d.ts.map +1 -0
- package/dist/dist/providers/SettingsProvider.js +86 -0
- package/dist/dist/providers/SettingsProvider.js.map +1 -0
- package/dist/dist/providers/TagsProvider.d.ts +12 -0
- package/dist/dist/providers/TagsProvider.d.ts.map +1 -0
- package/dist/dist/providers/TagsProvider.js +210 -0
- package/dist/dist/providers/TagsProvider.js.map +1 -0
- package/dist/dist/providers/TimeCardProvider.d.ts +8 -0
- package/dist/dist/providers/TimeCardProvider.d.ts.map +1 -0
- package/dist/dist/providers/TimeCardProvider.js +93 -0
- package/dist/dist/providers/TimeCardProvider.js.map +1 -0
- package/dist/dist/providers/TrashProvider.d.ts +13 -0
- package/dist/dist/providers/TrashProvider.d.ts.map +1 -0
- package/dist/dist/providers/TrashProvider.js +98 -0
- package/dist/dist/providers/TrashProvider.js.map +1 -0
- package/dist/dist/providers/dashboardAnalytics.d.ts +9 -0
- package/dist/dist/providers/dashboardAnalytics.d.ts.map +1 -0
- package/dist/dist/providers/dashboardAnalytics.js +41 -0
- package/dist/dist/providers/dashboardAnalytics.js.map +1 -0
- package/dist/dist/providers/dashboardAnalytics.test.d.ts +2 -0
- package/dist/dist/providers/dashboardAnalytics.test.d.ts.map +1 -0
- package/dist/dist/providers/dashboardAnalytics.test.js +111 -0
- package/dist/dist/providers/dashboardAnalytics.test.js.map +1 -0
- package/dist/dist/server-safe/BlockedNumberFunctions.d.ts +11 -0
- package/dist/dist/server-safe/BlockedNumberFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/BlockedNumberFunctions.js +16 -0
- package/dist/dist/server-safe/BlockedNumberFunctions.js.map +1 -0
- package/dist/dist/server-safe/EmployeeFunctions.d.ts +14 -0
- package/dist/dist/server-safe/EmployeeFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/EmployeeFunctions.js +70 -0
- package/dist/dist/server-safe/EmployeeFunctions.js.map +1 -0
- package/dist/dist/server-safe/EmployeeLocationFunctions.d.ts +7 -0
- package/dist/dist/server-safe/EmployeeLocationFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/EmployeeLocationFunctions.js +47 -0
- package/dist/dist/server-safe/EmployeeLocationFunctions.js.map +1 -0
- package/dist/dist/server-safe/EstimateFunctions.d.ts +15 -0
- package/dist/dist/server-safe/EstimateFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/EstimateFunctions.js +34 -0
- package/dist/dist/server-safe/EstimateFunctions.js.map +1 -0
- package/dist/dist/server-safe/InvoiceFunctions.d.ts +21 -0
- package/dist/dist/server-safe/InvoiceFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/InvoiceFunctions.js +124 -0
- package/dist/dist/server-safe/InvoiceFunctions.js.map +1 -0
- package/dist/dist/server-safe/JobFunctions.d.ts +15 -0
- package/dist/dist/server-safe/JobFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/JobFunctions.js +56 -0
- package/dist/dist/server-safe/JobFunctions.js.map +1 -0
- package/dist/dist/server-safe/PaymentFunctions.d.ts +16 -0
- package/dist/dist/server-safe/PaymentFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/PaymentFunctions.js +80 -0
- package/dist/dist/server-safe/PaymentFunctions.js.map +1 -0
- package/dist/dist/server-safe/PermissionFunctions.d.ts +7 -0
- package/dist/dist/server-safe/PermissionFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/PermissionFunctions.js +39 -0
- package/dist/dist/server-safe/PermissionFunctions.js.map +1 -0
- package/dist/dist/server-safe/TagFunctions.d.ts +18 -0
- package/dist/dist/server-safe/TagFunctions.d.ts.map +1 -0
- package/dist/dist/server-safe/TagFunctions.js +52 -0
- package/dist/dist/server-safe/TagFunctions.js.map +1 -0
- package/dist/dist/server-safe/autoJobType.d.ts +16 -0
- package/dist/dist/server-safe/autoJobType.d.ts.map +1 -0
- package/dist/dist/server-safe/autoJobType.js +39 -0
- package/dist/dist/server-safe/autoJobType.js.map +1 -0
- package/dist/dist/server-safe/autoJobType.test.d.ts +2 -0
- package/dist/dist/server-safe/autoJobType.test.d.ts.map +1 -0
- package/dist/dist/server-safe/autoJobType.test.js +83 -0
- package/dist/dist/server-safe/autoJobType.test.js.map +1 -0
- package/dist/dist/server-safe/automations.d.ts +197 -0
- package/dist/dist/server-safe/automations.d.ts.map +1 -0
- package/dist/dist/server-safe/automations.js +757 -0
- package/dist/dist/server-safe/automations.js.map +1 -0
- package/dist/dist/server-safe/automations.test.d.ts +2 -0
- package/dist/dist/server-safe/automations.test.d.ts.map +1 -0
- package/dist/dist/server-safe/automations.test.js +441 -0
- package/dist/dist/server-safe/automations.test.js.map +1 -0
- package/dist/dist/server-safe/constants.d.ts +156 -0
- package/dist/dist/server-safe/constants.d.ts.map +1 -0
- package/dist/dist/server-safe/constants.js +186 -0
- package/dist/dist/server-safe/constants.js.map +1 -0
- package/dist/dist/server-safe/contracts.d.ts +3 -0
- package/dist/dist/server-safe/contracts.d.ts.map +1 -0
- package/dist/dist/server-safe/contracts.js +15 -0
- package/dist/dist/server-safe/contracts.js.map +1 -0
- package/dist/dist/server-safe/database.types.d.ts +9510 -0
- package/dist/dist/server-safe/database.types.d.ts.map +1 -0
- package/dist/dist/server-safe/database.types.js +40 -0
- package/dist/dist/server-safe/database.types.js.map +1 -0
- package/dist/dist/server-safe/entitlements.d.ts +99 -0
- package/dist/dist/server-safe/entitlements.d.ts.map +1 -0
- package/dist/dist/server-safe/entitlements.js +487 -0
- package/dist/dist/server-safe/entitlements.js.map +1 -0
- package/dist/dist/server-safe/facebookAdsLeads.d.ts +225 -0
- package/dist/dist/server-safe/facebookAdsLeads.d.ts.map +1 -0
- package/dist/dist/server-safe/facebookAdsLeads.js +376 -0
- package/dist/dist/server-safe/facebookAdsLeads.js.map +1 -0
- package/dist/dist/server-safe/facebookAdsLeads.test.d.ts +2 -0
- package/dist/dist/server-safe/facebookAdsLeads.test.d.ts.map +1 -0
- package/dist/dist/server-safe/facebookAdsLeads.test.js +189 -0
- package/dist/dist/server-safe/facebookAdsLeads.test.js.map +1 -0
- package/dist/dist/server-safe/facebookAdsLeadsSql.test.d.ts +2 -0
- package/dist/dist/server-safe/facebookAdsLeadsSql.test.d.ts.map +1 -0
- package/dist/dist/server-safe/facebookAdsLeadsSql.test.js +32 -0
- package/dist/dist/server-safe/facebookAdsLeadsSql.test.js.map +1 -0
- package/dist/dist/server-safe/facebookMessenger.d.ts +20 -0
- package/dist/dist/server-safe/facebookMessenger.d.ts.map +1 -0
- package/dist/dist/server-safe/facebookMessenger.js +63 -0
- package/dist/dist/server-safe/facebookMessenger.js.map +1 -0
- package/dist/dist/server-safe/facebookMessenger.test.d.ts +2 -0
- package/dist/dist/server-safe/facebookMessenger.test.d.ts.map +1 -0
- package/dist/dist/server-safe/facebookMessenger.test.js +51 -0
- package/dist/dist/server-safe/facebookMessenger.test.js.map +1 -0
- package/dist/dist/server-safe/helpers.d.ts +78 -0
- package/dist/dist/server-safe/helpers.d.ts.map +1 -0
- package/dist/dist/server-safe/helpers.js +569 -0
- package/dist/dist/server-safe/helpers.js.map +1 -0
- package/dist/dist/server-safe/index.d.ts +30 -0
- package/dist/dist/server-safe/index.d.ts.map +1 -0
- package/dist/dist/server-safe/index.js +46 -0
- package/dist/dist/server-safe/index.js.map +1 -0
- package/dist/dist/server-safe/permissions.d.ts +29 -0
- package/dist/dist/server-safe/permissions.d.ts.map +1 -0
- package/dist/dist/server-safe/permissions.js +180 -0
- package/dist/dist/server-safe/permissions.js.map +1 -0
- package/dist/dist/server-safe/proposals.d.ts +6 -0
- package/dist/dist/server-safe/proposals.d.ts.map +1 -0
- package/dist/dist/server-safe/proposals.js +58 -0
- package/dist/dist/server-safe/proposals.js.map +1 -0
- package/dist/dist/server-safe/rentalAvailability.d.ts +56 -0
- package/dist/dist/server-safe/rentalAvailability.d.ts.map +1 -0
- package/dist/dist/server-safe/rentalAvailability.js +124 -0
- package/dist/dist/server-safe/rentalAvailability.js.map +1 -0
- package/dist/dist/server-safe/rentalAvailability.test.d.ts +2 -0
- package/dist/dist/server-safe/rentalAvailability.test.d.ts.map +1 -0
- package/dist/dist/server-safe/rentalAvailability.test.js +290 -0
- package/dist/dist/server-safe/rentalAvailability.test.js.map +1 -0
- package/dist/dist/server-safe/rentals.d.ts +95 -0
- package/dist/dist/server-safe/rentals.d.ts.map +1 -0
- package/dist/dist/server-safe/rentals.js +432 -0
- package/dist/dist/server-safe/rentals.js.map +1 -0
- package/dist/dist/server-safe/rentals.test.d.ts +2 -0
- package/dist/dist/server-safe/rentals.test.d.ts.map +1 -0
- package/dist/dist/server-safe/rentals.test.js +1034 -0
- package/dist/dist/server-safe/rentals.test.js.map +1 -0
- package/dist/dist/server-safe/routeOptimization.d.ts +155 -0
- package/dist/dist/server-safe/routeOptimization.d.ts.map +1 -0
- package/dist/dist/server-safe/routeOptimization.js +120 -0
- package/dist/dist/server-safe/routeOptimization.js.map +1 -0
- package/dist/dist/server-safe/routeOptimization.test.d.ts +2 -0
- package/dist/dist/server-safe/routeOptimization.test.d.ts.map +1 -0
- package/dist/dist/server-safe/routeOptimization.test.js +234 -0
- package/dist/dist/server-safe/routeOptimization.test.js.map +1 -0
- package/dist/dist/server-safe/routePlanFingerprint.d.ts +13 -0
- package/dist/dist/server-safe/routePlanFingerprint.d.ts.map +1 -0
- package/dist/dist/server-safe/routePlanFingerprint.js +49 -0
- package/dist/dist/server-safe/routePlanFingerprint.js.map +1 -0
- package/dist/dist/server-safe/routePlanFingerprint.test.d.ts +2 -0
- package/dist/dist/server-safe/routePlanFingerprint.test.d.ts.map +1 -0
- package/dist/dist/server-safe/routePlanFingerprint.test.js +68 -0
- package/dist/dist/server-safe/routePlanFingerprint.test.js.map +1 -0
- package/dist/dist/server-safe/scheduleListOrder.d.ts +18 -0
- package/dist/dist/server-safe/scheduleListOrder.d.ts.map +1 -0
- package/dist/dist/server-safe/scheduleListOrder.js +92 -0
- package/dist/dist/server-safe/scheduleListOrder.js.map +1 -0
- package/dist/dist/server-safe/scheduleListOrder.test.d.ts +2 -0
- package/dist/dist/server-safe/scheduleListOrder.test.d.ts.map +1 -0
- package/dist/dist/server-safe/scheduleListOrder.test.js +260 -0
- package/dist/dist/server-safe/scheduleListOrder.test.js.map +1 -0
- package/dist/dist/server-safe/serviceMinutes.d.ts +13 -0
- package/dist/dist/server-safe/serviceMinutes.d.ts.map +1 -0
- package/dist/dist/server-safe/serviceMinutes.js +38 -0
- package/dist/dist/server-safe/serviceMinutes.js.map +1 -0
- package/dist/dist/server-safe/serviceMinutes.test.d.ts +2 -0
- package/dist/dist/server-safe/serviceMinutes.test.d.ts.map +1 -0
- package/dist/dist/server-safe/serviceMinutes.test.js +86 -0
- package/dist/dist/server-safe/serviceMinutes.test.js.map +1 -0
- package/dist/dist/server-safe/settingsSearch.d.ts +24 -0
- package/dist/dist/server-safe/settingsSearch.d.ts.map +1 -0
- package/dist/dist/server-safe/settingsSearch.js +8 -0
- package/dist/dist/server-safe/settingsSearch.js.map +1 -0
- package/dist/dist/server-safe/supportChat.d.ts +59 -0
- package/dist/dist/server-safe/supportChat.d.ts.map +1 -0
- package/dist/dist/server-safe/supportChat.js +56 -0
- package/dist/dist/server-safe/supportChat.js.map +1 -0
- package/dist/dist/server-safe/templates.d.ts +15 -0
- package/dist/dist/server-safe/templates.d.ts.map +1 -0
- package/dist/dist/server-safe/templates.js +91 -0
- package/dist/dist/server-safe/templates.js.map +1 -0
- package/dist/dist/server-safe/templates.test.d.ts +2 -0
- package/dist/dist/server-safe/templates.test.d.ts.map +1 -0
- package/dist/dist/server-safe/templates.test.js +62 -0
- package/dist/dist/server-safe/templates.test.js.map +1 -0
- package/dist/dist/server-safe/trash.d.ts +50 -0
- package/dist/dist/server-safe/trash.d.ts.map +1 -0
- package/dist/dist/server-safe/trash.js +100 -0
- package/dist/dist/server-safe/trash.js.map +1 -0
- package/dist/dist/utils/LogHandler.d.ts +3 -0
- package/dist/dist/utils/LogHandler.d.ts.map +1 -0
- package/dist/dist/utils/LogHandler.js +16 -0
- package/dist/dist/utils/LogHandler.js.map +1 -0
- package/dist/dist/utils/convertSupabaseImagesToAssets.d.ts +28 -0
- package/dist/dist/utils/convertSupabaseImagesToAssets.d.ts.map +1 -0
- package/dist/dist/utils/convertSupabaseImagesToAssets.js +14 -0
- package/dist/dist/utils/convertSupabaseImagesToAssets.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/index.d.ts +1238 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +3 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/providers/AddressProvider.d.ts +9 -0
- package/dist/providers/AddressProvider.d.ts.map +1 -0
- package/dist/providers/AddressProvider.js +207 -0
- package/dist/providers/AddressProvider.js.map +1 -0
- package/dist/providers/AutomationsProvider.d.ts +11 -0
- package/dist/providers/AutomationsProvider.d.ts.map +1 -0
- package/dist/providers/AutomationsProvider.js +170 -0
- package/dist/providers/AutomationsProvider.js.map +1 -0
- package/dist/providers/BlockedNumbersProvider.d.ts +7 -0
- package/dist/providers/BlockedNumbersProvider.d.ts.map +1 -0
- package/dist/providers/BlockedNumbersProvider.js +71 -0
- package/dist/providers/BlockedNumbersProvider.js.map +1 -0
- package/dist/providers/CategoryProvider.d.ts +8 -0
- package/dist/providers/CategoryProvider.d.ts.map +1 -0
- package/dist/providers/CategoryProvider.js +95 -0
- package/dist/providers/CategoryProvider.js.map +1 -0
- package/dist/providers/ClientProvider.d.ts +39 -0
- package/dist/providers/ClientProvider.d.ts.map +1 -0
- package/dist/providers/ClientProvider.js +253 -0
- package/dist/providers/ClientProvider.js.map +1 -0
- package/dist/providers/CompanyProvider.d.ts +7 -0
- package/dist/providers/CompanyProvider.d.ts.map +1 -0
- package/dist/providers/CompanyProvider.js +114 -0
- package/dist/providers/CompanyProvider.js.map +1 -0
- package/dist/providers/DashboardProvider.d.ts +78 -0
- package/dist/providers/DashboardProvider.d.ts.map +1 -0
- package/dist/providers/DashboardProvider.js +568 -0
- package/dist/providers/DashboardProvider.js.map +1 -0
- package/dist/providers/DiscountProvider.d.ts +8 -0
- package/dist/providers/DiscountProvider.d.ts.map +1 -0
- package/dist/providers/DiscountProvider.js +92 -0
- package/dist/providers/DiscountProvider.js.map +1 -0
- package/dist/providers/EmployeesProvider.d.ts +6 -0
- package/dist/providers/EmployeesProvider.d.ts.map +1 -0
- package/dist/providers/EmployeesProvider.js +185 -0
- package/dist/providers/EmployeesProvider.js.map +1 -0
- package/dist/providers/EstimatesProvider.d.ts +16 -0
- package/dist/providers/EstimatesProvider.d.ts.map +1 -0
- package/dist/providers/EstimatesProvider.js +251 -0
- package/dist/providers/EstimatesProvider.js.map +1 -0
- package/dist/providers/EventsProvider.d.ts +4 -0
- package/dist/providers/EventsProvider.d.ts.map +1 -0
- package/dist/providers/EventsProvider.js +24 -0
- package/dist/providers/EventsProvider.js.map +1 -0
- package/dist/providers/FilesProvider.d.ts +17 -0
- package/dist/providers/FilesProvider.d.ts.map +1 -0
- package/dist/providers/FilesProvider.js +201 -0
- package/dist/providers/FilesProvider.js.map +1 -0
- package/dist/providers/InvoicesProvider.d.ts +13 -0
- package/dist/providers/InvoicesProvider.d.ts.map +1 -0
- package/dist/providers/InvoicesProvider.js +207 -0
- package/dist/providers/InvoicesProvider.js.map +1 -0
- package/dist/providers/ItemProvider.d.ts +9 -0
- package/dist/providers/ItemProvider.d.ts.map +1 -0
- package/dist/providers/ItemProvider.js +201 -0
- package/dist/providers/ItemProvider.js.map +1 -0
- package/dist/providers/JobSourceProvider.d.ts +8 -0
- package/dist/providers/JobSourceProvider.d.ts.map +1 -0
- package/dist/providers/JobSourceProvider.js +75 -0
- package/dist/providers/JobSourceProvider.js.map +1 -0
- package/dist/providers/JobTypeProvider.d.ts +8 -0
- package/dist/providers/JobTypeProvider.d.ts.map +1 -0
- package/dist/providers/JobTypeProvider.js +75 -0
- package/dist/providers/JobTypeProvider.js.map +1 -0
- package/dist/providers/JobsProvider.d.ts +20 -0
- package/dist/providers/JobsProvider.d.ts.map +1 -0
- package/dist/providers/JobsProvider.js +863 -0
- package/dist/providers/JobsProvider.js.map +1 -0
- package/dist/providers/MessagesProvider.d.ts +14 -0
- package/dist/providers/MessagesProvider.d.ts.map +1 -0
- package/dist/providers/MessagesProvider.js +415 -0
- package/dist/providers/MessagesProvider.js.map +1 -0
- package/dist/providers/PaymentProvider.d.ts +9 -0
- package/dist/providers/PaymentProvider.d.ts.map +1 -0
- package/dist/providers/PaymentProvider.js +48 -0
- package/dist/providers/PaymentProvider.js.map +1 -0
- package/dist/providers/PermissionRolesProvider.d.ts +5 -0
- package/dist/providers/PermissionRolesProvider.d.ts.map +1 -0
- package/dist/providers/PermissionRolesProvider.js +30 -0
- package/dist/providers/PermissionRolesProvider.js.map +1 -0
- package/dist/providers/PhoneNumberProvider.d.ts +12 -0
- package/dist/providers/PhoneNumberProvider.d.ts.map +1 -0
- package/dist/providers/PhoneNumberProvider.js +184 -0
- package/dist/providers/PhoneNumberProvider.js.map +1 -0
- package/dist/providers/ProfileProvider.d.ts +6 -0
- package/dist/providers/ProfileProvider.d.ts.map +1 -0
- package/dist/providers/ProfileProvider.js +71 -0
- package/dist/providers/ProfileProvider.js.map +1 -0
- package/dist/providers/RentalsProvider.d.ts +28 -0
- package/dist/providers/RentalsProvider.d.ts.map +1 -0
- package/dist/providers/RentalsProvider.js +438 -0
- package/dist/providers/RentalsProvider.js.map +1 -0
- package/dist/providers/SettingsBookingProvider.d.ts +9 -0
- package/dist/providers/SettingsBookingProvider.d.ts.map +1 -0
- package/dist/providers/SettingsBookingProvider.js +163 -0
- package/dist/providers/SettingsBookingProvider.js.map +1 -0
- package/dist/providers/SettingsProvider.d.ts +8 -0
- package/dist/providers/SettingsProvider.d.ts.map +1 -0
- package/dist/providers/SettingsProvider.js +86 -0
- package/dist/providers/SettingsProvider.js.map +1 -0
- package/dist/providers/TagsProvider.d.ts +12 -0
- package/dist/providers/TagsProvider.d.ts.map +1 -0
- package/dist/providers/TagsProvider.js +210 -0
- package/dist/providers/TagsProvider.js.map +1 -0
- package/dist/providers/TimeCardProvider.d.ts +8 -0
- package/dist/providers/TimeCardProvider.d.ts.map +1 -0
- package/dist/providers/TimeCardProvider.js +93 -0
- package/dist/providers/TimeCardProvider.js.map +1 -0
- package/dist/providers/TrashProvider.d.ts +13 -0
- package/dist/providers/TrashProvider.d.ts.map +1 -0
- package/dist/providers/TrashProvider.js +98 -0
- package/dist/providers/TrashProvider.js.map +1 -0
- package/dist/providers/dashboardAnalytics.d.ts +9 -0
- package/dist/providers/dashboardAnalytics.d.ts.map +1 -0
- package/dist/providers/dashboardAnalytics.js +41 -0
- package/dist/providers/dashboardAnalytics.js.map +1 -0
- package/dist/providers/dashboardAnalytics.test.d.ts +2 -0
- package/dist/providers/dashboardAnalytics.test.d.ts.map +1 -0
- package/dist/providers/dashboardAnalytics.test.js +111 -0
- package/dist/providers/dashboardAnalytics.test.js.map +1 -0
- package/dist/server-safe/BlockedNumberFunctions.d.ts +11 -0
- package/dist/server-safe/BlockedNumberFunctions.d.ts.map +1 -0
- package/dist/server-safe/BlockedNumberFunctions.js +16 -0
- package/dist/server-safe/BlockedNumberFunctions.js.map +1 -0
- package/dist/server-safe/EmployeeFunctions.d.ts +14 -0
- package/dist/server-safe/EmployeeFunctions.d.ts.map +1 -0
- package/dist/server-safe/EmployeeFunctions.js +70 -0
- package/dist/server-safe/EmployeeFunctions.js.map +1 -0
- package/dist/server-safe/EmployeeLocationFunctions.d.ts +7 -0
- package/dist/server-safe/EmployeeLocationFunctions.d.ts.map +1 -0
- package/dist/server-safe/EmployeeLocationFunctions.js +47 -0
- package/dist/server-safe/EmployeeLocationFunctions.js.map +1 -0
- package/dist/server-safe/EstimateFunctions.d.ts +15 -0
- package/dist/server-safe/EstimateFunctions.d.ts.map +1 -0
- package/dist/server-safe/EstimateFunctions.js +34 -0
- package/dist/server-safe/EstimateFunctions.js.map +1 -0
- package/dist/server-safe/InvoiceFunctions.d.ts +21 -0
- package/dist/server-safe/InvoiceFunctions.d.ts.map +1 -0
- package/dist/server-safe/InvoiceFunctions.js +124 -0
- package/dist/server-safe/InvoiceFunctions.js.map +1 -0
- package/dist/server-safe/JobFunctions.d.ts +15 -0
- package/dist/server-safe/JobFunctions.d.ts.map +1 -0
- package/dist/server-safe/JobFunctions.js +56 -0
- package/dist/server-safe/JobFunctions.js.map +1 -0
- package/dist/server-safe/PaymentFunctions.d.ts +16 -0
- package/dist/server-safe/PaymentFunctions.d.ts.map +1 -0
- package/dist/server-safe/PaymentFunctions.js +80 -0
- package/dist/server-safe/PaymentFunctions.js.map +1 -0
- package/dist/server-safe/PermissionFunctions.d.ts +7 -0
- package/dist/server-safe/PermissionFunctions.d.ts.map +1 -0
- package/dist/server-safe/PermissionFunctions.js +39 -0
- package/dist/server-safe/PermissionFunctions.js.map +1 -0
- package/dist/server-safe/TagFunctions.d.ts +18 -0
- package/dist/server-safe/TagFunctions.d.ts.map +1 -0
- package/dist/server-safe/TagFunctions.js +52 -0
- package/dist/server-safe/TagFunctions.js.map +1 -0
- package/dist/server-safe/autoJobType.d.ts +16 -0
- package/dist/server-safe/autoJobType.d.ts.map +1 -0
- package/dist/server-safe/autoJobType.js +39 -0
- package/dist/server-safe/autoJobType.js.map +1 -0
- package/dist/server-safe/autoJobType.test.d.ts +2 -0
- package/dist/server-safe/autoJobType.test.d.ts.map +1 -0
- package/dist/server-safe/autoJobType.test.js +83 -0
- package/dist/server-safe/autoJobType.test.js.map +1 -0
- package/dist/server-safe/automations.d.ts +197 -0
- package/dist/server-safe/automations.d.ts.map +1 -0
- package/dist/server-safe/automations.js +757 -0
- package/dist/server-safe/automations.js.map +1 -0
- package/dist/server-safe/automations.test.d.ts +2 -0
- package/dist/server-safe/automations.test.d.ts.map +1 -0
- package/dist/server-safe/automations.test.js +441 -0
- package/dist/server-safe/automations.test.js.map +1 -0
- package/dist/server-safe/constants.d.ts +156 -0
- package/dist/server-safe/constants.d.ts.map +1 -0
- package/dist/server-safe/constants.js +186 -0
- package/dist/server-safe/constants.js.map +1 -0
- package/dist/server-safe/contracts.d.ts +3 -0
- package/dist/server-safe/contracts.d.ts.map +1 -0
- package/dist/server-safe/contracts.js +15 -0
- package/dist/server-safe/contracts.js.map +1 -0
- package/dist/server-safe/database.types.d.ts +9510 -0
- package/dist/server-safe/database.types.d.ts.map +1 -0
- package/dist/server-safe/database.types.js +40 -0
- package/dist/server-safe/database.types.js.map +1 -0
- package/dist/server-safe/entitlements.d.ts +99 -0
- package/dist/server-safe/entitlements.d.ts.map +1 -0
- package/dist/server-safe/entitlements.js +487 -0
- package/dist/server-safe/entitlements.js.map +1 -0
- package/dist/server-safe/helpers.d.ts +78 -0
- package/dist/server-safe/helpers.d.ts.map +1 -0
- package/dist/server-safe/helpers.js +569 -0
- package/dist/server-safe/helpers.js.map +1 -0
- package/dist/server-safe/index.d.ts +30 -0
- package/dist/server-safe/index.d.ts.map +1 -0
- package/dist/server-safe/index.js +46 -0
- package/dist/server-safe/index.js.map +1 -0
- package/dist/server-safe/permissions.d.ts +29 -0
- package/dist/server-safe/permissions.d.ts.map +1 -0
- package/dist/server-safe/permissions.js +180 -0
- package/dist/server-safe/permissions.js.map +1 -0
- package/dist/server-safe/proposals.d.ts +6 -0
- package/dist/server-safe/proposals.d.ts.map +1 -0
- package/dist/server-safe/proposals.js +58 -0
- package/dist/server-safe/proposals.js.map +1 -0
- package/dist/server-safe/rentalAvailability.d.ts +56 -0
- package/dist/server-safe/rentalAvailability.d.ts.map +1 -0
- package/dist/server-safe/rentalAvailability.js +124 -0
- package/dist/server-safe/rentalAvailability.js.map +1 -0
- package/dist/server-safe/rentalAvailability.test.d.ts +2 -0
- package/dist/server-safe/rentalAvailability.test.d.ts.map +1 -0
- package/dist/server-safe/rentalAvailability.test.js +290 -0
- package/dist/server-safe/rentalAvailability.test.js.map +1 -0
- package/dist/server-safe/rentals.d.ts +95 -0
- package/dist/server-safe/rentals.d.ts.map +1 -0
- package/dist/server-safe/rentals.js +432 -0
- package/dist/server-safe/rentals.js.map +1 -0
- package/dist/server-safe/rentals.test.d.ts +2 -0
- package/dist/server-safe/rentals.test.d.ts.map +1 -0
- package/dist/server-safe/rentals.test.js +1034 -0
- package/dist/server-safe/rentals.test.js.map +1 -0
- package/dist/server-safe/routeOptimization.d.ts +155 -0
- package/dist/server-safe/routeOptimization.d.ts.map +1 -0
- package/dist/server-safe/routeOptimization.js +120 -0
- package/dist/server-safe/routeOptimization.js.map +1 -0
- package/dist/server-safe/routeOptimization.test.d.ts +2 -0
- package/dist/server-safe/routeOptimization.test.d.ts.map +1 -0
- package/dist/server-safe/routeOptimization.test.js +234 -0
- package/dist/server-safe/routeOptimization.test.js.map +1 -0
- package/dist/server-safe/routePlanFingerprint.d.ts +13 -0
- package/dist/server-safe/routePlanFingerprint.d.ts.map +1 -0
- package/dist/server-safe/routePlanFingerprint.js +49 -0
- package/dist/server-safe/routePlanFingerprint.js.map +1 -0
- package/dist/server-safe/routePlanFingerprint.test.d.ts +2 -0
- package/dist/server-safe/routePlanFingerprint.test.d.ts.map +1 -0
- package/dist/server-safe/routePlanFingerprint.test.js +68 -0
- package/dist/server-safe/routePlanFingerprint.test.js.map +1 -0
- package/dist/server-safe/scheduleListOrder.d.ts +18 -0
- package/dist/server-safe/scheduleListOrder.d.ts.map +1 -0
- package/dist/server-safe/scheduleListOrder.js +92 -0
- package/dist/server-safe/scheduleListOrder.js.map +1 -0
- package/dist/server-safe/scheduleListOrder.test.d.ts +2 -0
- package/dist/server-safe/scheduleListOrder.test.d.ts.map +1 -0
- package/dist/server-safe/scheduleListOrder.test.js +260 -0
- package/dist/server-safe/scheduleListOrder.test.js.map +1 -0
- package/dist/server-safe/serviceMinutes.d.ts +13 -0
- package/dist/server-safe/serviceMinutes.d.ts.map +1 -0
- package/dist/server-safe/serviceMinutes.js +38 -0
- package/dist/server-safe/serviceMinutes.js.map +1 -0
- package/dist/server-safe/serviceMinutes.test.d.ts +2 -0
- package/dist/server-safe/serviceMinutes.test.d.ts.map +1 -0
- package/dist/server-safe/serviceMinutes.test.js +86 -0
- package/dist/server-safe/serviceMinutes.test.js.map +1 -0
- package/dist/server-safe/settingsSearch.d.ts +24 -0
- package/dist/server-safe/settingsSearch.d.ts.map +1 -0
- package/dist/server-safe/settingsSearch.js +8 -0
- package/dist/server-safe/settingsSearch.js.map +1 -0
- package/dist/server-safe/supportChat.d.ts +59 -0
- package/dist/server-safe/supportChat.d.ts.map +1 -0
- package/dist/server-safe/supportChat.js +56 -0
- package/dist/server-safe/supportChat.js.map +1 -0
- package/dist/server-safe/templates.d.ts +15 -0
- package/dist/server-safe/templates.d.ts.map +1 -0
- package/dist/server-safe/templates.js +91 -0
- package/dist/server-safe/templates.js.map +1 -0
- package/dist/server-safe/templates.test.d.ts +2 -0
- package/dist/server-safe/templates.test.d.ts.map +1 -0
- package/dist/server-safe/templates.test.js +62 -0
- package/dist/server-safe/templates.test.js.map +1 -0
- package/dist/server-safe/trash.d.ts +50 -0
- package/dist/server-safe/trash.d.ts.map +1 -0
- package/dist/server-safe/trash.js +100 -0
- package/dist/server-safe/trash.js.map +1 -0
- package/dist/utils/LogHandler.d.ts +3 -0
- package/dist/utils/LogHandler.d.ts.map +1 -0
- package/dist/utils/LogHandler.js +16 -0
- package/dist/utils/LogHandler.js.map +1 -0
- package/dist/utils/convertSupabaseImagesToAssets.d.ts +28 -0
- package/dist/utils/convertSupabaseImagesToAssets.d.ts.map +1 -0
- package/dist/utils/convertSupabaseImagesToAssets.js +14 -0
- package/dist/utils/convertSupabaseImagesToAssets.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
-- RLS for the contracts tables.
|
|
2
|
+
--
|
|
3
|
+
-- Affected tables: contract_template, contract, contract_counter,
|
|
4
|
+
-- contract_signature, item_contract_requirement, settings_contract.
|
|
5
|
+
--
|
|
6
|
+
-- contract_template, contract, item_contract_requirement, settings_contract:
|
|
7
|
+
-- the standard house policy — any authenticated staff member of the owning
|
|
8
|
+
-- company can CRUD. End customers never touch these tables directly; the
|
|
9
|
+
-- public signing page and the booking form go through service-role API
|
|
10
|
+
-- routes, so there are deliberately NO anon policies or grants here.
|
|
11
|
+
--
|
|
12
|
+
-- contract_counter: staff CRUD like job_counter, because the numbering
|
|
13
|
+
-- triggers on contract run with the invoking staff member's privileges and
|
|
14
|
+
-- must be able to upsert the company's counter row.
|
|
15
|
+
--
|
|
16
|
+
-- contract_signature: staff can READ the audit record but never write it —
|
|
17
|
+
-- rows are inserted only by the service-role sign_contract() function, so
|
|
18
|
+
-- the signing audit trail is immutable even to the company that owns it.
|
|
19
|
+
|
|
20
|
+
alter table "public"."contract_template" enable row level security;
|
|
21
|
+
alter table "public"."contract" enable row level security;
|
|
22
|
+
alter table "public"."contract_counter" enable row level security;
|
|
23
|
+
alter table "public"."contract_signature" enable row level security;
|
|
24
|
+
alter table "public"."item_contract_requirement" enable row level security;
|
|
25
|
+
alter table "public"."settings_contract" enable row level security;
|
|
26
|
+
|
|
27
|
+
grant all on table "public"."contract_template" to "authenticated";
|
|
28
|
+
grant all on table "public"."contract_template" to "service_role";
|
|
29
|
+
grant all on table "public"."contract" to "authenticated";
|
|
30
|
+
grant all on table "public"."contract" to "service_role";
|
|
31
|
+
grant all on table "public"."contract_counter" to "authenticated";
|
|
32
|
+
grant all on table "public"."contract_counter" to "service_role";
|
|
33
|
+
grant select on table "public"."contract_signature" to "authenticated";
|
|
34
|
+
grant all on table "public"."contract_signature" to "service_role";
|
|
35
|
+
grant all on table "public"."item_contract_requirement" to "authenticated";
|
|
36
|
+
grant all on table "public"."item_contract_requirement" to "service_role";
|
|
37
|
+
grant all on table "public"."settings_contract" to "authenticated";
|
|
38
|
+
grant all on table "public"."settings_contract" to "service_role";
|
|
39
|
+
|
|
40
|
+
create policy "Anyone with matching company_id can CRUD"
|
|
41
|
+
on "public"."contract_template"
|
|
42
|
+
to "authenticated"
|
|
43
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
|
|
44
|
+
with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|
|
45
|
+
|
|
46
|
+
create policy "Anyone with matching company_id can CRUD"
|
|
47
|
+
on "public"."contract"
|
|
48
|
+
to "authenticated"
|
|
49
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
|
|
50
|
+
with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|
|
51
|
+
|
|
52
|
+
create policy "Anyone with matching company_id can CRUD"
|
|
53
|
+
on "public"."contract_counter"
|
|
54
|
+
to "authenticated"
|
|
55
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
|
|
56
|
+
with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|
|
57
|
+
|
|
58
|
+
create policy "Anyone with matching company_id can read"
|
|
59
|
+
on "public"."contract_signature"
|
|
60
|
+
for select
|
|
61
|
+
to "authenticated"
|
|
62
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|
|
63
|
+
|
|
64
|
+
create policy "Anyone with matching company_id can CRUD"
|
|
65
|
+
on "public"."item_contract_requirement"
|
|
66
|
+
to "authenticated"
|
|
67
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
|
|
68
|
+
with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|
|
69
|
+
|
|
70
|
+
create policy "Anyone with matching company_id can CRUD"
|
|
71
|
+
on "public"."settings_contract"
|
|
72
|
+
to "authenticated"
|
|
73
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
|
|
74
|
+
with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
-- Transactional contract signing.
|
|
2
|
+
--
|
|
3
|
+
-- Signing must atomically (1) verify the contract is still signable,
|
|
4
|
+
-- (2) write the immutable contract_signature audit row — including a hash
|
|
5
|
+
-- of the body text as it stands inside this transaction — and (3) flip the
|
|
6
|
+
-- contract to Signed. Done as separate PostgREST calls, a failure between
|
|
7
|
+
-- steps could leave a Signed contract with no audit row (or vice versa), so
|
|
8
|
+
-- it is one function, one transaction.
|
|
9
|
+
--
|
|
10
|
+
-- The row lock plus the status precondition resolves the double-submit
|
|
11
|
+
-- race: a second concurrent sign call blocks on the lock, then fails the
|
|
12
|
+
-- precondition because the first call already moved the row to Signed.
|
|
13
|
+
--
|
|
14
|
+
-- security definer + service_role-only: the sole caller is
|
|
15
|
+
-- /api/customer-sign-contract, which authenticates the customer by the
|
|
16
|
+
-- contract's hashed link token before calling (the public signing page has
|
|
17
|
+
-- no authenticated user). The caller uploads the signature PNG first and
|
|
18
|
+
-- passes its storage path; a failed function call leaves an orphaned PNG at
|
|
19
|
+
-- worst, never a signed contract without its audit row.
|
|
20
|
+
|
|
21
|
+
create or replace function "public"."sign_contract"(
|
|
22
|
+
"p_contract_id" uuid,
|
|
23
|
+
"p_signer_name" text,
|
|
24
|
+
"p_signer_ip" text,
|
|
25
|
+
"p_signer_user_agent" text,
|
|
26
|
+
"p_signature_storage_path" text
|
|
27
|
+
) returns void
|
|
28
|
+
language plpgsql
|
|
29
|
+
security definer
|
|
30
|
+
set search_path = public
|
|
31
|
+
as $$
|
|
32
|
+
declare
|
|
33
|
+
v_contract "public"."contract"%rowtype;
|
|
34
|
+
begin
|
|
35
|
+
select * into v_contract
|
|
36
|
+
from "public"."contract"
|
|
37
|
+
where "id" = p_contract_id
|
|
38
|
+
for update;
|
|
39
|
+
|
|
40
|
+
if not found then
|
|
41
|
+
raise exception 'contract not found'
|
|
42
|
+
using errcode = 'P0002';
|
|
43
|
+
end if;
|
|
44
|
+
|
|
45
|
+
if v_contract."status" not in ('Sent', 'Opened') then
|
|
46
|
+
raise exception 'contract is not in a signable status: %',
|
|
47
|
+
v_contract."status"
|
|
48
|
+
using errcode = 'P0003';
|
|
49
|
+
end if;
|
|
50
|
+
|
|
51
|
+
if p_signer_name is null or btrim(p_signer_name) = '' then
|
|
52
|
+
raise exception 'signer name is required'
|
|
53
|
+
using errcode = 'P0004';
|
|
54
|
+
end if;
|
|
55
|
+
|
|
56
|
+
insert into "public"."contract_signature" (
|
|
57
|
+
"company_id", "contract_id", "signer_name", "signer_ip",
|
|
58
|
+
"signer_user_agent", "body_sha256", "signature_storage_path"
|
|
59
|
+
) values (
|
|
60
|
+
v_contract."company_id",
|
|
61
|
+
v_contract."id",
|
|
62
|
+
btrim(p_signer_name),
|
|
63
|
+
p_signer_ip,
|
|
64
|
+
p_signer_user_agent,
|
|
65
|
+
encode(sha256(convert_to(v_contract."body", 'UTF8')), 'hex'),
|
|
66
|
+
p_signature_storage_path
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
update "public"."contract"
|
|
70
|
+
set "status" = 'Signed',
|
|
71
|
+
"signed_at" = now()
|
|
72
|
+
where "id" = v_contract."id";
|
|
73
|
+
end;
|
|
74
|
+
$$;
|
|
75
|
+
|
|
76
|
+
alter function "public"."sign_contract"(uuid, text, text, text, text)
|
|
77
|
+
owner to "postgres";
|
|
78
|
+
|
|
79
|
+
-- security definer + service_role-only: the public signing route is the
|
|
80
|
+
-- sole caller; no authenticated/anon path exists.
|
|
81
|
+
revoke all on function "public"."sign_contract"(
|
|
82
|
+
uuid, text, text, text, text
|
|
83
|
+
) from public;
|
|
84
|
+
revoke all on function "public"."sign_contract"(
|
|
85
|
+
uuid, text, text, text, text
|
|
86
|
+
) from "anon";
|
|
87
|
+
revoke all on function "public"."sign_contract"(
|
|
88
|
+
uuid, text, text, text, text
|
|
89
|
+
) from "authenticated";
|
|
90
|
+
grant execute on function "public"."sign_contract"(
|
|
91
|
+
uuid, text, text, text, text
|
|
92
|
+
) to "service_role";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
-- Company-level rentals/assets settings. One row per company, created
|
|
2
|
+
-- lazily. Unlike settings_contract (default-on opt-out), this is
|
|
3
|
+
-- DEFAULT-OFF OPT-IN: an absent row means rentals disabled, owner modal
|
|
4
|
+
-- unanswered, no industry chosen. The one-time owner modal (C2) is the
|
|
5
|
+
-- activation moment that first writes the row. The dumpster_asset_tracking
|
|
6
|
+
-- entitlement gates the feature; rentals_enabled additionally hides the
|
|
7
|
+
-- schedule-card Type dropdown and the rest of the rentals UI when off.
|
|
8
|
+
--
|
|
9
|
+
-- The online-booking availability-enforcement toggle from the spec is
|
|
10
|
+
-- deliberately NOT here — its column lands on the anon-readable
|
|
11
|
+
-- settings_booking (the public booking page reads that table directly)
|
|
12
|
+
-- when online booking for rentals is built.
|
|
13
|
+
|
|
14
|
+
create table if not exists "public"."settings_rental" (
|
|
15
|
+
"company_id" "uuid" not null,
|
|
16
|
+
"created_at" timestamp with time zone default "now"() not null,
|
|
17
|
+
"updated_at" timestamp with time zone,
|
|
18
|
+
"rentals_enabled" boolean default false not null,
|
|
19
|
+
-- Null until the company picks one. Selects which preset task list the
|
|
20
|
+
-- settings task manager offers. Mirrored by RENTAL_INDUSTRIES in
|
|
21
|
+
-- src/server-safe/rentals.ts — the two lists must stay in sync.
|
|
22
|
+
"industry_preset" "text",
|
|
23
|
+
"owner_modal_answered" boolean default false not null,
|
|
24
|
+
constraint "settings_rental_pkey" primary key ("company_id"),
|
|
25
|
+
constraint "settings_rental_industry_preset_check" check (
|
|
26
|
+
"industry_preset" in ('dumpster', 'equipment', 'portable_toilet', 'other')
|
|
27
|
+
)
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
alter table "public"."settings_rental" owner to "postgres";
|
|
31
|
+
|
|
32
|
+
alter table only "public"."settings_rental"
|
|
33
|
+
add constraint "settings_rental_company_id_fkey"
|
|
34
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
-- Company-defined named places (lots, dumps, other) shown on maps and in
|
|
2
|
+
-- the task-completion dropdowns. Deliberately NOT the existing "address"
|
|
3
|
+
-- table: that table is client-owned and every consumer assumes its rows
|
|
4
|
+
-- are customer addresses. Lots and landfills aren't always postal
|
|
5
|
+
-- addresses and nothing ever bills or mails to them, so the address here
|
|
6
|
+
-- is ONE freeform display string plus coordinates — never postal-split.
|
|
7
|
+
--
|
|
8
|
+
-- icon is a curated semantic key each platform maps to its own icon
|
|
9
|
+
-- system (web FontAwesome, mobile ThemeIcon); mirrored by
|
|
10
|
+
-- SAVED_LOCATION_ICONS in src/server-safe/rentals.ts. icon_color is a
|
|
11
|
+
-- free-text hex color.
|
|
12
|
+
--
|
|
13
|
+
-- location_type determines which completion-flow dropdowns offer the
|
|
14
|
+
-- location (lots, dumps/landfills, other); mirrored by
|
|
15
|
+
-- SAVED_LOCATION_TYPES in src/server-safe/rentals.ts.
|
|
16
|
+
--
|
|
17
|
+
-- is_archived removes a location from pickers/maps without breaking
|
|
18
|
+
-- assets currently located there; hard delete is additionally blocked by
|
|
19
|
+
-- asset's ON DELETE RESTRICT while any asset points at the row.
|
|
20
|
+
|
|
21
|
+
create table if not exists "public"."saved_location" (
|
|
22
|
+
"id" "uuid" default "gen_random_uuid"() not null,
|
|
23
|
+
"created_at" timestamp with time zone default "now"() not null,
|
|
24
|
+
"updated_at" timestamp with time zone,
|
|
25
|
+
"company_id" "uuid" not null,
|
|
26
|
+
"label" "text" not null,
|
|
27
|
+
"address" "text" not null,
|
|
28
|
+
-- Nullable: geocoding may not have resolved; map pins skip null
|
|
29
|
+
-- coords (same shape as the address table's nullable latitude).
|
|
30
|
+
"latitude" numeric,
|
|
31
|
+
"longitude" numeric,
|
|
32
|
+
"icon" "text" not null,
|
|
33
|
+
"icon_color" "text" not null,
|
|
34
|
+
"location_type" "text" not null,
|
|
35
|
+
"is_archived" boolean default false not null,
|
|
36
|
+
constraint "saved_location_pkey" primary key ("id"),
|
|
37
|
+
-- Backing key for asset's composite tenant-consistent FK, same
|
|
38
|
+
-- rationale as contract's (id, company_id) unique keys.
|
|
39
|
+
constraint "saved_location_id_company_id_key" unique ("id", "company_id"),
|
|
40
|
+
constraint "saved_location_icon_check" check ("icon" in (
|
|
41
|
+
'park', 'wrench', 'gear', 'house', 'factory',
|
|
42
|
+
'warehouse', 'truck', 'flag'
|
|
43
|
+
)),
|
|
44
|
+
constraint "saved_location_location_type_check" check (
|
|
45
|
+
"location_type" in ('lot', 'dump', 'other')
|
|
46
|
+
)
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
alter table "public"."saved_location" owner to "postgres";
|
|
50
|
+
|
|
51
|
+
alter table only "public"."saved_location"
|
|
52
|
+
add constraint "saved_location_company_id_fkey"
|
|
53
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
54
|
+
|
|
55
|
+
create index "saved_location_company_id_idx"
|
|
56
|
+
on "public"."saved_location" ("company_id");
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
-- The company's schedule-card Type-dropdown vocabulary: one row per
|
|
2
|
+
-- SELECTED preset task plus one row per custom task. Exactly one of
|
|
3
|
+
-- preset_key / label is set — preset rows carry a fixed machine key whose
|
|
4
|
+
-- display label lives in PRESET_TASK_LABELS in core; custom rows carry
|
|
5
|
+
-- only their user-typed label ("just a label", no behavior).
|
|
6
|
+
--
|
|
7
|
+
-- job_schedule.task_type (existing dead text column; stays text, no FK)
|
|
8
|
+
-- will store the machine key for preset tasks and this row's uuid AS TEXT
|
|
9
|
+
-- for custom tasks. Consequences:
|
|
10
|
+
-- * preset rows may be hard-deleted on deselect — history resolves
|
|
11
|
+
-- preset labels from the const map, never from these rows;
|
|
12
|
+
-- * custom rows are ARCHIVED, never deleted, or historical schedules
|
|
13
|
+
-- could no longer display their label.
|
|
14
|
+
|
|
15
|
+
create table if not exists "public"."rental_task_option" (
|
|
16
|
+
"id" "uuid" default "gen_random_uuid"() not null,
|
|
17
|
+
"created_at" timestamp with time zone default "now"() not null,
|
|
18
|
+
"updated_at" timestamp with time zone,
|
|
19
|
+
"company_id" "uuid" not null,
|
|
20
|
+
-- Mirrored by PRESET_TASK_KEYS in src/server-safe/rentals.ts — the
|
|
21
|
+
-- two lists must stay in sync.
|
|
22
|
+
"preset_key" "text",
|
|
23
|
+
"label" "text",
|
|
24
|
+
"sort_order" integer default 0 not null,
|
|
25
|
+
-- Custom rows only; preset rows are deleted on deselect.
|
|
26
|
+
"is_archived" boolean default false not null,
|
|
27
|
+
constraint "rental_task_option_pkey" primary key ("id"),
|
|
28
|
+
constraint "rental_task_option_exactly_one_kind_check" check (
|
|
29
|
+
num_nonnulls("preset_key", "label") = 1
|
|
30
|
+
),
|
|
31
|
+
constraint "rental_task_option_preset_key_check" check (
|
|
32
|
+
"preset_key" is null or "preset_key" in (
|
|
33
|
+
'drop_off', 'pick_up', 'swap', 'live_load', 'relocate',
|
|
34
|
+
'dump_and_return', 'take_to_dump', 'take_to_lot',
|
|
35
|
+
'take_to_other', 'repair', 'service'
|
|
36
|
+
)
|
|
37
|
+
)
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
alter table "public"."rental_task_option" owner to "postgres";
|
|
41
|
+
|
|
42
|
+
alter table only "public"."rental_task_option"
|
|
43
|
+
add constraint "rental_task_option_company_id_fkey"
|
|
44
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
45
|
+
|
|
46
|
+
-- A preset can be selected at most once per company.
|
|
47
|
+
create unique index "rental_task_option_company_id_preset_key_key"
|
|
48
|
+
on "public"."rental_task_option" ("company_id", "preset_key")
|
|
49
|
+
where "preset_key" is not null;
|
|
50
|
+
|
|
51
|
+
create index "rental_task_option_company_id_idx"
|
|
52
|
+
on "public"."rental_task_option" ("company_id");
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
-- Rental assets (dumpsters first; generic rental/assets naming
|
|
2
|
+
-- elsewhere). Identity is a mandatory user-specified label. TS types call
|
|
3
|
+
-- this RentalAsset — core already exports an unrelated image-picker type
|
|
4
|
+
-- named Asset.
|
|
5
|
+
--
|
|
6
|
+
-- Polymorphic current location, ENFORCED by asset_location_shape_check:
|
|
7
|
+
-- 'unknown' -> all location columns null (never placed / unknown)
|
|
8
|
+
-- 'saved' -> saved_location_id set, freeform columns null
|
|
9
|
+
-- 'freeform' -> freeform address set (e.g. a customer address after a
|
|
10
|
+
-- drop-off), saved_location_id null
|
|
11
|
+
-- 'temporary' -> same columns as freeform, but a one-off ephemeral spot
|
|
12
|
+
-- (take-to-dump/other flows); deliberately NO row
|
|
13
|
+
-- anywhere else, overwritten on the asset's next move
|
|
14
|
+
-- Exactly one reader (getAssetLocation) and one writer (moveAsset via
|
|
15
|
+
-- buildAssetLocationColumns) exist in core; no call site on web or mobile
|
|
16
|
+
-- ever touches the raw location columns.
|
|
17
|
+
--
|
|
18
|
+
-- size is nullable: entered as a number of yards for dumpsters, but
|
|
19
|
+
-- generic assets (equipment, toilets) may have no meaningful numeric
|
|
20
|
+
-- size; per-industry requiredness is a UI concern.
|
|
21
|
+
--
|
|
22
|
+
-- fullness transitions are the completion flows' job (C3); every asset
|
|
23
|
+
-- stays 'unknown' until those ship. Mirrored by ASSET_FULLNESSES in
|
|
24
|
+
-- src/server-safe/rentals.ts.
|
|
25
|
+
--
|
|
26
|
+
-- is_archived, not delete: schedule history (job_schedule.asset_id) will
|
|
27
|
+
-- reference assets once tasks ship. The job_schedule FK's ON DELETE SET
|
|
28
|
+
-- NULL is only a backstop for out-of-band hard deletes.
|
|
29
|
+
|
|
30
|
+
create table if not exists "public"."asset" (
|
|
31
|
+
"id" "uuid" default "gen_random_uuid"() not null,
|
|
32
|
+
"created_at" timestamp with time zone default "now"() not null,
|
|
33
|
+
"updated_at" timestamp with time zone,
|
|
34
|
+
"company_id" "uuid" not null,
|
|
35
|
+
"label" "text" not null,
|
|
36
|
+
"size" numeric,
|
|
37
|
+
"fullness" "text" default 'unknown' not null,
|
|
38
|
+
-- Mirrored by ASSET_LOCATION_KINDS in src/server-safe/rentals.ts.
|
|
39
|
+
"location_kind" "text" default 'unknown' not null,
|
|
40
|
+
"saved_location_id" "uuid",
|
|
41
|
+
"location_address" "text",
|
|
42
|
+
"location_latitude" numeric,
|
|
43
|
+
"location_longitude" numeric,
|
|
44
|
+
"is_archived" boolean default false not null,
|
|
45
|
+
constraint "asset_pkey" primary key ("id"),
|
|
46
|
+
-- Backing key for job_schedule's composite asset FKs.
|
|
47
|
+
constraint "asset_id_company_id_key" unique ("id", "company_id"),
|
|
48
|
+
constraint "asset_fullness_check" check (
|
|
49
|
+
"fullness" in ('unknown', 'empty', 'full')
|
|
50
|
+
),
|
|
51
|
+
constraint "asset_location_kind_check" check (
|
|
52
|
+
"location_kind" in ('unknown', 'saved', 'freeform', 'temporary')
|
|
53
|
+
),
|
|
54
|
+
constraint "asset_location_shape_check" check (
|
|
55
|
+
("location_kind" = 'unknown'
|
|
56
|
+
and "saved_location_id" is null
|
|
57
|
+
and "location_address" is null
|
|
58
|
+
and "location_latitude" is null
|
|
59
|
+
and "location_longitude" is null)
|
|
60
|
+
or ("location_kind" = 'saved'
|
|
61
|
+
and "saved_location_id" is not null
|
|
62
|
+
and "location_address" is null
|
|
63
|
+
and "location_latitude" is null
|
|
64
|
+
and "location_longitude" is null)
|
|
65
|
+
or ("location_kind" in ('freeform', 'temporary')
|
|
66
|
+
and "saved_location_id" is null
|
|
67
|
+
and "location_address" is not null)
|
|
68
|
+
)
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
alter table "public"."asset" owner to "postgres";
|
|
72
|
+
|
|
73
|
+
alter table only "public"."asset"
|
|
74
|
+
add constraint "asset_company_id_fkey"
|
|
75
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
76
|
+
|
|
77
|
+
-- Composite tenant-consistent FK. RESTRICT, not SET NULL: nulling
|
|
78
|
+
-- saved_location_id would both silently strand the asset's location and
|
|
79
|
+
-- violate asset_location_shape_check (kind 'saved' with a null id), so
|
|
80
|
+
-- deleting an occupied location fails loudly instead — the UI flow is to
|
|
81
|
+
-- archive the location, or move the assets first.
|
|
82
|
+
alter table only "public"."asset"
|
|
83
|
+
add constraint "asset_saved_location_id_fkey"
|
|
84
|
+
foreign key ("saved_location_id", "company_id")
|
|
85
|
+
references "public"."saved_location"("id", "company_id")
|
|
86
|
+
on delete restrict;
|
|
87
|
+
|
|
88
|
+
create index "asset_company_id_idx" on "public"."asset" ("company_id");
|
|
89
|
+
create index "asset_saved_location_id_idx"
|
|
90
|
+
on "public"."asset" ("saved_location_id");
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
-- Wire job_schedule's baseline-era asset columns to the new asset table.
|
|
2
|
+
--
|
|
3
|
+
-- asset_id / secondary_asset_id are dead columns from the pre-migration
|
|
4
|
+
-- baseline dump: written as null by all five web call sites, never read,
|
|
5
|
+
-- no FK, no target table until now. Defensive null-out first so any
|
|
6
|
+
-- conceivable baseline-era garbage can't fail FK validation; expected to
|
|
7
|
+
-- update 0 rows in production.
|
|
8
|
+
|
|
9
|
+
update "public"."job_schedule"
|
|
10
|
+
set "asset_id" = null where "asset_id" is not null;
|
|
11
|
+
update "public"."job_schedule"
|
|
12
|
+
set "secondary_asset_id" = null where "secondary_asset_id" is not null;
|
|
13
|
+
|
|
14
|
+
-- Semantics frozen in the rentals data-model contract: for a Swap task,
|
|
15
|
+
-- asset_id is the DROP-OFF (swapped-in) asset and secondary_asset_id is
|
|
16
|
+
-- the PICK-UP (swapped-out) asset; every single-asset task uses asset_id
|
|
17
|
+
-- only and leaves secondary_asset_id null.
|
|
18
|
+
--
|
|
19
|
+
-- Composite (fk, company_id) FKs so a schedule can never point at another
|
|
20
|
+
-- tenant's asset, with the PG15 column-list ON DELETE SET NULL form so a
|
|
21
|
+
-- hard-deleted asset nulls only the pointer, never company_id. Archival
|
|
22
|
+
-- is the product path for assets; this is a backstop.
|
|
23
|
+
|
|
24
|
+
alter table only "public"."job_schedule"
|
|
25
|
+
add constraint "job_schedule_asset_id_fkey"
|
|
26
|
+
foreign key ("asset_id", "company_id")
|
|
27
|
+
references "public"."asset"("id", "company_id")
|
|
28
|
+
on delete set null ("asset_id");
|
|
29
|
+
|
|
30
|
+
alter table only "public"."job_schedule"
|
|
31
|
+
add constraint "job_schedule_secondary_asset_id_fkey"
|
|
32
|
+
foreign key ("secondary_asset_id", "company_id")
|
|
33
|
+
references "public"."asset"("id", "company_id")
|
|
34
|
+
on delete set null ("secondary_asset_id");
|
|
35
|
+
|
|
36
|
+
create index "job_schedule_asset_id_idx"
|
|
37
|
+
on "public"."job_schedule" ("asset_id");
|
|
38
|
+
create index "job_schedule_secondary_asset_id_idx"
|
|
39
|
+
on "public"."job_schedule" ("secondary_asset_id");
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
-- RLS for the rentals foundation tables.
|
|
2
|
+
--
|
|
3
|
+
-- Affected tables: settings_rental, saved_location, rental_task_option,
|
|
4
|
+
-- asset.
|
|
5
|
+
--
|
|
6
|
+
-- All four use the standard house policy (contracts template): any
|
|
7
|
+
-- authenticated staff member of the owning company can CRUD. End
|
|
8
|
+
-- customers never touch these tables directly — online booking's
|
|
9
|
+
-- availability counts will go through a service-role web API route — so
|
|
10
|
+
-- there are deliberately NO anon policies or grants here.
|
|
11
|
+
|
|
12
|
+
alter table "public"."settings_rental" enable row level security;
|
|
13
|
+
alter table "public"."saved_location" enable row level security;
|
|
14
|
+
alter table "public"."rental_task_option" enable row level security;
|
|
15
|
+
alter table "public"."asset" enable row level security;
|
|
16
|
+
|
|
17
|
+
grant all on table "public"."settings_rental" to "authenticated";
|
|
18
|
+
grant all on table "public"."settings_rental" to "service_role";
|
|
19
|
+
grant all on table "public"."saved_location" to "authenticated";
|
|
20
|
+
grant all on table "public"."saved_location" to "service_role";
|
|
21
|
+
grant all on table "public"."rental_task_option" to "authenticated";
|
|
22
|
+
grant all on table "public"."rental_task_option" to "service_role";
|
|
23
|
+
grant all on table "public"."asset" to "authenticated";
|
|
24
|
+
grant all on table "public"."asset" to "service_role";
|
|
25
|
+
|
|
26
|
+
create policy "Anyone with matching company_id can CRUD"
|
|
27
|
+
on "public"."settings_rental"
|
|
28
|
+
to "authenticated"
|
|
29
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
|
|
30
|
+
with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|
|
31
|
+
|
|
32
|
+
create policy "Anyone with matching company_id can CRUD"
|
|
33
|
+
on "public"."saved_location"
|
|
34
|
+
to "authenticated"
|
|
35
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
|
|
36
|
+
with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|
|
37
|
+
|
|
38
|
+
create policy "Anyone with matching company_id can CRUD"
|
|
39
|
+
on "public"."rental_task_option"
|
|
40
|
+
to "authenticated"
|
|
41
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
|
|
42
|
+
with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|
|
43
|
+
|
|
44
|
+
create policy "Anyone with matching company_id can CRUD"
|
|
45
|
+
on "public"."asset"
|
|
46
|
+
to "authenticated"
|
|
47
|
+
using (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"))
|
|
48
|
+
with check (((nullif(trim(both '"'::"text" from ("public"."get_my_claim"('autopilot_company_id'::"text"))::"text"), ''::"text"))::"uuid" = "company_id"));
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
-- C2 (task creation & display): any-time flag for task-typed schedules.
|
|
2
|
+
-- start_time/end_time stay NOT NULL — when any_time is true the client still
|
|
3
|
+
-- writes a real all-day range (00:00–23:59 of the selected date) so lagging
|
|
4
|
+
-- mobile clients render sanely. Default false keeps every existing row and
|
|
5
|
+
-- every normal-job write unchanged.
|
|
6
|
+
alter table job_schedule
|
|
7
|
+
add column any_time boolean not null default false;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
-- C3 (task completion): destination for the take-to task family
|
|
2
|
+
-- (take_to_dump / take_to_lot / take_to_other). Two shapes, mutually
|
|
3
|
+
-- exclusive, both-null allowed (destination not chosen yet — the completion
|
|
4
|
+
-- flow asks for it at latest before completing):
|
|
5
|
+
-- saved -> target_saved_location_id set, freeform columns all null
|
|
6
|
+
-- freeform -> target_address set (one-off spot); lat/lng nullable because
|
|
7
|
+
-- geocoding is best-effort (saved_location precedent)
|
|
8
|
+
-- Exactly one reader (getTaskTarget) and one writer (buildTaskTargetColumns)
|
|
9
|
+
-- exist in src/server-safe/rentals.ts — no call site touches the raw columns,
|
|
10
|
+
-- same rule as the asset location columns.
|
|
11
|
+
|
|
12
|
+
alter table "public"."job_schedule"
|
|
13
|
+
add column "target_saved_location_id" "uuid",
|
|
14
|
+
add column "target_address" "text",
|
|
15
|
+
add column "target_latitude" numeric,
|
|
16
|
+
add column "target_longitude" numeric;
|
|
17
|
+
|
|
18
|
+
alter table "public"."job_schedule"
|
|
19
|
+
add constraint "job_schedule_target_location_shape_check" check (
|
|
20
|
+
(
|
|
21
|
+
"target_saved_location_id" is null
|
|
22
|
+
and "target_address" is null
|
|
23
|
+
and "target_latitude" is null
|
|
24
|
+
and "target_longitude" is null
|
|
25
|
+
)
|
|
26
|
+
or (
|
|
27
|
+
"target_saved_location_id" is not null
|
|
28
|
+
and "target_address" is null
|
|
29
|
+
and "target_latitude" is null
|
|
30
|
+
and "target_longitude" is null
|
|
31
|
+
)
|
|
32
|
+
or (
|
|
33
|
+
"target_saved_location_id" is null
|
|
34
|
+
and "target_address" is not null
|
|
35
|
+
)
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
-- Composite tenant-consistent FK, ON DELETE RESTRICT like
|
|
39
|
+
-- asset_saved_location_id_fkey: SET NULL would silently strand a task's
|
|
40
|
+
-- destination. Product-flow deletes are archive-first anyway (C1 semantics).
|
|
41
|
+
alter table only "public"."job_schedule"
|
|
42
|
+
add constraint "job_schedule_target_saved_location_id_fkey"
|
|
43
|
+
foreign key ("target_saved_location_id", "company_id")
|
|
44
|
+
references "public"."saved_location"("id", "company_id")
|
|
45
|
+
on delete restrict;
|
|
46
|
+
|
|
47
|
+
create index "job_schedule_target_saved_location_id_idx"
|
|
48
|
+
on "public"."job_schedule" ("target_saved_location_id");
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
-- C3 (task completion): old-client guard. A task-typed schedule must have its
|
|
2
|
+
-- asset selected before it can be completed — the completion flow writes the
|
|
3
|
+
-- asset's fullness/location, and a null asset would silently skip the state
|
|
4
|
+
-- machine. Fires ONLY on the transition INTO 'Completed':
|
|
5
|
+
-- * re-saving an already-Completed row -> old.status = 'Completed', skip
|
|
6
|
+
-- * un-completing (Completed -> anything) -> new.status <> 'Completed', skip
|
|
7
|
+
-- * Canceled -> new.status <> 'Completed', skip
|
|
8
|
+
-- * normal jobs (task_type null) -> skip
|
|
9
|
+
-- Triggers fire for service_role too (unlike RLS), so this also covers the
|
|
10
|
+
-- API v1 routes and bulk import. Recurring this_and_future fan-out never hits
|
|
11
|
+
-- task rows (tasks cannot recur), so the guard cannot abort those batches.
|
|
12
|
+
-- The raise text surfaces RAW in lagging C2-era clients' error toasts, so it
|
|
13
|
+
-- is worded as an instruction.
|
|
14
|
+
|
|
15
|
+
create or replace function "public"."prevent_task_completion_without_asset"()
|
|
16
|
+
returns trigger
|
|
17
|
+
language plpgsql
|
|
18
|
+
security definer
|
|
19
|
+
set search_path = ''
|
|
20
|
+
as $$
|
|
21
|
+
begin
|
|
22
|
+
if new."status" <> 'Completed' or new."task_type" is null then
|
|
23
|
+
return new;
|
|
24
|
+
end if;
|
|
25
|
+
if TG_OP = 'UPDATE' and old."status" = 'Completed' then
|
|
26
|
+
return new;
|
|
27
|
+
end if;
|
|
28
|
+
|
|
29
|
+
if new."asset_id" is null then
|
|
30
|
+
raise exception 'Select the asset before completing this task.'
|
|
31
|
+
using errcode = '23514',
|
|
32
|
+
constraint = 'job_schedule_completion_requires_asset';
|
|
33
|
+
end if;
|
|
34
|
+
|
|
35
|
+
if new."task_type" = 'swap' and new."secondary_asset_id" is null then
|
|
36
|
+
raise exception 'Select both assets before completing this swap task.'
|
|
37
|
+
using errcode = '23514',
|
|
38
|
+
constraint = 'job_schedule_completion_requires_asset';
|
|
39
|
+
end if;
|
|
40
|
+
|
|
41
|
+
return new;
|
|
42
|
+
end;
|
|
43
|
+
$$;
|
|
44
|
+
|
|
45
|
+
alter function "public"."prevent_task_completion_without_asset"() owner to "postgres";
|
|
46
|
+
|
|
47
|
+
-- Column list applies to UPDATE only (INSERT always fires): a row cannot
|
|
48
|
+
-- transition into Completed without status in the SET list, and the existing
|
|
49
|
+
-- outbound-event triggers on job_schedule are AFTER, so ordering is clean.
|
|
50
|
+
create or replace trigger "job_schedule_completion_guard"
|
|
51
|
+
before insert or update of "status" on "public"."job_schedule"
|
|
52
|
+
for each row
|
|
53
|
+
execute function "public"."prevent_task_completion_without_asset"();
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
-- C4 (schedule views): manual ordering key for the schedule List View.
|
|
2
|
+
-- Meaningful only for any-time tasks (task_type non-null and any_time true);
|
|
3
|
+
-- null means the default position 0 (top of day). Timed rows order by
|
|
4
|
+
-- start_time and ignore this. The key is day-relative, so date moves never
|
|
5
|
+
-- rewrite it. Reordering writes only this column — never start_time/end_time.
|
|
6
|
+
alter table job_schedule
|
|
7
|
+
add column list_sort_key numeric null;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
-- C5 (online booking for rentals): rental duration on pricebook/booking items.
|
|
2
|
+
-- Non-null duration is THE rental marker — an item with a duration IS a
|
|
3
|
+
-- rental; null keeps it a normal service. Value is the rental length in
|
|
4
|
+
-- whole days: pick-up date = drop-off date + duration (duration 1 => pick-up
|
|
5
|
+
-- the next day). The CHECK forbids 0/negatives — no same-day rentals.
|
|
6
|
+
-- No RLS change needed: item's "If is_booking, public can read" policy makes
|
|
7
|
+
-- the column anon-readable on booking items, which is exactly what the public
|
|
8
|
+
-- booking page needs.
|
|
9
|
+
alter table item
|
|
10
|
+
add column duration integer null
|
|
11
|
+
constraint item_duration_check check (duration > 0);
|
package/dist/dist/migrations/20260807014721_add_settings_booking_enforce_rental_availability.sql
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
-- C5 (online booking for rentals): availability-enforcement toggle.
|
|
2
|
+
-- Lives on the anon-readable settings_booking (NOT settings_rental) because
|
|
3
|
+
-- the public booking page reads this table directly — reserved by the
|
|
4
|
+
-- comment in 20260807014710_create_settings_rental.sql. Default false =
|
|
5
|
+
-- spec's "infinite availability": rental days never block. When true, the
|
|
6
|
+
-- booking form (and customer-create-job's server re-check) limit rental
|
|
7
|
+
-- bookings by the company's real non-archived asset count.
|
|
8
|
+
alter table settings_booking
|
|
9
|
+
add column enforce_rental_availability boolean not null default false;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
-- C5 (online booking for rentals): "Rental agreement not signed" warning
|
|
2
|
+
-- flag, mirroring unpaid_upfront's boolean|null shape (null/false = no
|
|
3
|
+
-- warning). Denormalized on the job because mobile cannot cheaply resolve
|
|
4
|
+
-- item_contract_requirement per render. Set when a rental (duration) item
|
|
5
|
+
-- with contract requirements lands on a job with no Signed contract —
|
|
6
|
+
-- server-side for booking-created jobs, at item-add for manual jobs.
|
|
7
|
+
-- Cleared automatically by /api/customer-sign-contract when the job's last
|
|
8
|
+
-- outstanding contract is signed, or manually dismissed like unpaid_upfront.
|
|
9
|
+
alter table job
|
|
10
|
+
add column unsigned_rental_agreement boolean null;
|