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,154 @@
|
|
|
1
|
+
-- Transactional proposal save (replace-children).
|
|
2
|
+
--
|
|
3
|
+
-- The builder always persists its full state. Done as separate PostgREST
|
|
4
|
+
-- calls (delete options/add-ons, then re-insert), a failure between the
|
|
5
|
+
-- delete and the inserts left the stored proposal empty or partially
|
|
6
|
+
-- rebuilt — losing previously saved packages if the user walked away
|
|
7
|
+
-- instead of retrying. One function, one transaction: a failed save leaves
|
|
8
|
+
-- the previous proposal intact.
|
|
9
|
+
--
|
|
10
|
+
-- security invoker: called by authenticated staff sessions (mobile calls it
|
|
11
|
+
-- directly, web's /api/proposals calls it after its entitlement check), so
|
|
12
|
+
-- every read and write inside runs under the caller's RLS. p_company_id is
|
|
13
|
+
-- belt only — an authenticated caller cannot see or write another tenant's
|
|
14
|
+
-- rows regardless, and the composite FKs (see create_estimate_proposal)
|
|
15
|
+
-- make cross-tenant references unrepresentable.
|
|
16
|
+
|
|
17
|
+
create or replace function "public"."save_estimate_proposal"(
|
|
18
|
+
"p_company_id" uuid,
|
|
19
|
+
"p_estimate_id" uuid,
|
|
20
|
+
"p_options" jsonb,
|
|
21
|
+
"p_addons" jsonb
|
|
22
|
+
) returns uuid
|
|
23
|
+
language plpgsql
|
|
24
|
+
security invoker
|
|
25
|
+
set search_path = public
|
|
26
|
+
as $$
|
|
27
|
+
declare
|
|
28
|
+
v_estimate_status text;
|
|
29
|
+
v_proposal_id uuid;
|
|
30
|
+
v_proposal_status text;
|
|
31
|
+
v_option jsonb;
|
|
32
|
+
v_option_id uuid;
|
|
33
|
+
v_option_index integer := 0;
|
|
34
|
+
v_item jsonb;
|
|
35
|
+
v_item_index integer;
|
|
36
|
+
v_addon jsonb;
|
|
37
|
+
v_addon_index integer := 0;
|
|
38
|
+
begin
|
|
39
|
+
if p_options is null
|
|
40
|
+
or jsonb_typeof(p_options) <> 'array'
|
|
41
|
+
or jsonb_array_length(p_options) < 1
|
|
42
|
+
or jsonb_array_length(p_options) > 3 then
|
|
43
|
+
raise exception 'a proposal needs 1-3 options'
|
|
44
|
+
using errcode = 'P0006';
|
|
45
|
+
end if;
|
|
46
|
+
|
|
47
|
+
select "status" into v_estimate_status
|
|
48
|
+
from "public"."estimate"
|
|
49
|
+
where "id" = p_estimate_id and "company_id" = p_company_id
|
|
50
|
+
for update;
|
|
51
|
+
if not found then
|
|
52
|
+
raise exception 'estimate not found'
|
|
53
|
+
using errcode = 'P0002';
|
|
54
|
+
end if;
|
|
55
|
+
|
|
56
|
+
select "id", "status" into v_proposal_id, v_proposal_status
|
|
57
|
+
from "public"."estimate_proposal"
|
|
58
|
+
where "estimate_id" = p_estimate_id
|
|
59
|
+
for update;
|
|
60
|
+
|
|
61
|
+
if v_proposal_id is not null then
|
|
62
|
+
if v_proposal_status = 'Approved' then
|
|
63
|
+
raise exception 'proposal is approved and can no longer be edited'
|
|
64
|
+
using errcode = 'P0003';
|
|
65
|
+
end if;
|
|
66
|
+
delete from "public"."estimate_proposal_option"
|
|
67
|
+
where "proposal_id" = v_proposal_id;
|
|
68
|
+
delete from "public"."estimate_proposal_addon"
|
|
69
|
+
where "proposal_id" = v_proposal_id;
|
|
70
|
+
else
|
|
71
|
+
if v_estimate_status = 'Approved' then
|
|
72
|
+
raise exception 'estimate is already approved'
|
|
73
|
+
using errcode = 'P0007';
|
|
74
|
+
end if;
|
|
75
|
+
insert into "public"."estimate_proposal" ("company_id", "estimate_id")
|
|
76
|
+
values (p_company_id, p_estimate_id)
|
|
77
|
+
returning "id" into v_proposal_id;
|
|
78
|
+
end if;
|
|
79
|
+
|
|
80
|
+
for v_option in select * from jsonb_array_elements(p_options) loop
|
|
81
|
+
insert into "public"."estimate_proposal_option"
|
|
82
|
+
("company_id", "proposal_id", "sort_order")
|
|
83
|
+
values (p_company_id, v_proposal_id, v_option_index)
|
|
84
|
+
returning "id" into v_option_id;
|
|
85
|
+
|
|
86
|
+
v_item_index := 0;
|
|
87
|
+
for v_item in
|
|
88
|
+
select * from jsonb_array_elements(coalesce(v_option->'items', '[]'::jsonb))
|
|
89
|
+
loop
|
|
90
|
+
insert into "public"."estimate_proposal_option_item" (
|
|
91
|
+
"company_id", "option_id", "item_name", "item_price",
|
|
92
|
+
"item_cost", "quantity", "taxable", "description",
|
|
93
|
+
"payment_upfront", "sort_order"
|
|
94
|
+
) values (
|
|
95
|
+
p_company_id,
|
|
96
|
+
v_option_id,
|
|
97
|
+
v_item->>'item_name',
|
|
98
|
+
(v_item->>'item_price')::numeric,
|
|
99
|
+
coalesce((v_item->>'item_cost')::numeric, 0),
|
|
100
|
+
(v_item->>'quantity')::numeric,
|
|
101
|
+
coalesce((v_item->>'taxable')::boolean, false),
|
|
102
|
+
v_item->>'description',
|
|
103
|
+
(v_item->>'payment_upfront')::boolean,
|
|
104
|
+
v_item_index
|
|
105
|
+
);
|
|
106
|
+
v_item_index := v_item_index + 1;
|
|
107
|
+
end loop;
|
|
108
|
+
|
|
109
|
+
v_option_index := v_option_index + 1;
|
|
110
|
+
end loop;
|
|
111
|
+
|
|
112
|
+
for v_addon in
|
|
113
|
+
select * from jsonb_array_elements(coalesce(p_addons, '[]'::jsonb))
|
|
114
|
+
loop
|
|
115
|
+
insert into "public"."estimate_proposal_addon" (
|
|
116
|
+
"company_id", "proposal_id", "item_name", "item_price",
|
|
117
|
+
"item_cost", "quantity", "taxable", "description",
|
|
118
|
+
"is_selected", "sort_order"
|
|
119
|
+
) values (
|
|
120
|
+
p_company_id,
|
|
121
|
+
v_proposal_id,
|
|
122
|
+
v_addon->>'item_name',
|
|
123
|
+
(v_addon->>'item_price')::numeric,
|
|
124
|
+
coalesce((v_addon->>'item_cost')::numeric, 0),
|
|
125
|
+
coalesce((v_addon->>'quantity')::numeric, 1),
|
|
126
|
+
coalesce((v_addon->>'taxable')::boolean, false),
|
|
127
|
+
v_addon->>'description',
|
|
128
|
+
coalesce((v_addon->>'is_selected')::boolean, false),
|
|
129
|
+
v_addon_index
|
|
130
|
+
);
|
|
131
|
+
v_addon_index := v_addon_index + 1;
|
|
132
|
+
end loop;
|
|
133
|
+
|
|
134
|
+
return v_proposal_id;
|
|
135
|
+
end;
|
|
136
|
+
$$;
|
|
137
|
+
|
|
138
|
+
alter function "public"."save_estimate_proposal"(uuid, uuid, jsonb, jsonb)
|
|
139
|
+
owner to "postgres";
|
|
140
|
+
|
|
141
|
+
-- Authenticated staff and the web server's admin client may call it; anon
|
|
142
|
+
-- (the public estimate page) never saves proposals.
|
|
143
|
+
revoke all on function "public"."save_estimate_proposal"(
|
|
144
|
+
uuid, uuid, jsonb, jsonb
|
|
145
|
+
) from public;
|
|
146
|
+
revoke all on function "public"."save_estimate_proposal"(
|
|
147
|
+
uuid, uuid, jsonb, jsonb
|
|
148
|
+
) from "anon";
|
|
149
|
+
grant execute on function "public"."save_estimate_proposal"(
|
|
150
|
+
uuid, uuid, jsonb, jsonb
|
|
151
|
+
) to "authenticated";
|
|
152
|
+
grant execute on function "public"."save_estimate_proposal"(
|
|
153
|
+
uuid, uuid, jsonb, jsonb
|
|
154
|
+
) to "service_role";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
-- Additive and backward-compatible: existing rows default to false (branding shows).
|
|
2
|
+
alter table public.settings_company
|
|
3
|
+
add column if not exists hide_autopilot_branding boolean not null default false;
|
|
4
|
+
|
|
5
|
+
comment on column public.settings_company.hide_autopilot_branding is
|
|
6
|
+
'Hide "Powered by Autopilot" branding on customer-facing documents, forms, and emails. Only effective when the plan includes the hide_autopilot_branding entitlement (Grow and Scale); enforcement is serve-time, so a downgrade restores branding without rewriting this value.';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
alter table "public"."client"
|
|
2
|
+
add column "billing_address" text,
|
|
3
|
+
add column "billing_address2" text,
|
|
4
|
+
add column "billing_city" text,
|
|
5
|
+
add column "billing_state" text,
|
|
6
|
+
add column "billing_zip_code" text;
|
|
7
|
+
|
|
8
|
+
comment on column "public"."client"."billing_address" is
|
|
9
|
+
'Billing street address. Rows in the address table are the client''s service addresses; these columns are the single billing address, populated only when it differs from the service address (null = same as service address). No lat/lng by design.';
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
-- api_create_client: accept the client billing address columns.
|
|
2
|
+
-- Same body as 20260719215148, with billing_address/billing_address2/
|
|
3
|
+
-- billing_city/billing_state/billing_zip_code added to the client insert.
|
|
4
|
+
-- Null billing columns mean "same as the service address" — the function
|
|
5
|
+
-- stores them only when the payload provides them.
|
|
6
|
+
|
|
7
|
+
create or replace function "public"."api_create_client"("p" jsonb)
|
|
8
|
+
returns uuid
|
|
9
|
+
language "plpgsql"
|
|
10
|
+
security definer
|
|
11
|
+
set search_path = 'public'
|
|
12
|
+
as $$
|
|
13
|
+
declare
|
|
14
|
+
v_company_id uuid := (p ->> 'company_id')::uuid;
|
|
15
|
+
v_client_id uuid;
|
|
16
|
+
v_addresses jsonb := coalesce(p -> 'addresses', '[]'::jsonb);
|
|
17
|
+
v_primary_count integer;
|
|
18
|
+
a jsonb;
|
|
19
|
+
v_idx integer := 0;
|
|
20
|
+
v_tag_id uuid;
|
|
21
|
+
begin
|
|
22
|
+
perform api_assert_company_ref('job_source', (p ->> 'source_id')::uuid, v_company_id);
|
|
23
|
+
|
|
24
|
+
insert into client (
|
|
25
|
+
company_id, email, first_name, last_name, client_company_name,
|
|
26
|
+
client_notes, client_or_lead, primary_phone_number, source_id,
|
|
27
|
+
is_do_not_service, is_do_not_sms, is_do_not_marketing_sms,
|
|
28
|
+
billing_address, billing_address2, billing_city, billing_state,
|
|
29
|
+
billing_zip_code
|
|
30
|
+
) values (
|
|
31
|
+
v_company_id,
|
|
32
|
+
p ->> 'email',
|
|
33
|
+
p ->> 'first_name',
|
|
34
|
+
p ->> 'last_name',
|
|
35
|
+
p ->> 'client_company_name',
|
|
36
|
+
p ->> 'client_notes',
|
|
37
|
+
coalesce((p ->> 'client_or_lead')::client_or_lead_enum, 'client'),
|
|
38
|
+
p ->> 'primary_phone_number',
|
|
39
|
+
(p ->> 'source_id')::uuid,
|
|
40
|
+
coalesce((p ->> 'is_do_not_service')::boolean, false),
|
|
41
|
+
coalesce((p ->> 'is_do_not_sms')::boolean, false),
|
|
42
|
+
coalesce((p ->> 'is_do_not_marketing_sms')::boolean, false),
|
|
43
|
+
p ->> 'billing_address',
|
|
44
|
+
p ->> 'billing_address2',
|
|
45
|
+
p ->> 'billing_city',
|
|
46
|
+
p ->> 'billing_state',
|
|
47
|
+
p ->> 'billing_zip_code'
|
|
48
|
+
) returning id into v_client_id;
|
|
49
|
+
|
|
50
|
+
-- exactly one primary address: error on several; when NONE is marked
|
|
51
|
+
-- true (absent or explicit false alike), the first becomes primary —
|
|
52
|
+
-- a client with addresses but no primary is an app-level anomaly
|
|
53
|
+
select count(*) into v_primary_count
|
|
54
|
+
from jsonb_array_elements(v_addresses) as t(addr)
|
|
55
|
+
where (addr ->> 'is_primary')::boolean;
|
|
56
|
+
if v_primary_count > 1 then
|
|
57
|
+
raise exception 'at most one address may be primary' using errcode = '23514';
|
|
58
|
+
end if;
|
|
59
|
+
|
|
60
|
+
for a in select * from jsonb_array_elements(v_addresses) loop
|
|
61
|
+
insert into address (
|
|
62
|
+
company_id, client_id, address, address2, city, state, zip_code,
|
|
63
|
+
is_primary, latitude, longitude
|
|
64
|
+
) values (
|
|
65
|
+
v_company_id,
|
|
66
|
+
v_client_id,
|
|
67
|
+
a ->> 'address',
|
|
68
|
+
a ->> 'address2',
|
|
69
|
+
a ->> 'city',
|
|
70
|
+
a ->> 'state',
|
|
71
|
+
a ->> 'zip_code',
|
|
72
|
+
coalesce((a ->> 'is_primary')::boolean, false)
|
|
73
|
+
or (v_primary_count = 0 and v_idx = 0),
|
|
74
|
+
(a ->> 'latitude')::double precision,
|
|
75
|
+
(a ->> 'longitude')::double precision
|
|
76
|
+
);
|
|
77
|
+
v_idx := v_idx + 1;
|
|
78
|
+
end loop;
|
|
79
|
+
|
|
80
|
+
for v_tag_id in select value::uuid from jsonb_array_elements_text(coalesce(p -> 'tag_ids', '[]'::jsonb)) loop
|
|
81
|
+
perform api_assert_company_ref('client_tag', v_tag_id, v_company_id);
|
|
82
|
+
insert into client_tag_link (company_id, client_id, client_tag_id)
|
|
83
|
+
values (v_company_id, v_client_id, v_tag_id);
|
|
84
|
+
end loop;
|
|
85
|
+
|
|
86
|
+
return v_client_id;
|
|
87
|
+
end;
|
|
88
|
+
$$;
|
|
89
|
+
|
|
90
|
+
revoke all on function "public"."api_create_client"(jsonb) from public;
|
|
91
|
+
revoke all on function "public"."api_create_client"(jsonb) from "anon";
|
|
92
|
+
revoke all on function "public"."api_create_client"(jsonb) from "authenticated";
|
|
93
|
+
grant execute on function "public"."api_create_client"(jsonb) to "service_role";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-- Backing unique keys for composite tenant-consistent foreign keys.
|
|
2
|
+
--
|
|
3
|
+
-- The contract table (next migration) references job, invoice, client, and
|
|
4
|
+
-- item via composite (fk, company_id) foreign keys so a contract can never
|
|
5
|
+
-- point at another tenant's parent — the same rationale as
|
|
6
|
+
-- estimate_id_company_id_key in 20260731234245_create_estimate_proposal.sql,
|
|
7
|
+
-- which already covers estimate. (id) is already the primary key on each of
|
|
8
|
+
-- these tables, so the composite uniqueness holds for every existing row.
|
|
9
|
+
|
|
10
|
+
alter table only "public"."job"
|
|
11
|
+
add constraint "job_id_company_id_key" unique ("id", "company_id");
|
|
12
|
+
|
|
13
|
+
alter table only "public"."invoice"
|
|
14
|
+
add constraint "invoice_id_company_id_key" unique ("id", "company_id");
|
|
15
|
+
|
|
16
|
+
alter table only "public"."client"
|
|
17
|
+
add constraint "client_id_company_id_key" unique ("id", "company_id");
|
|
18
|
+
|
|
19
|
+
alter table only "public"."item"
|
|
20
|
+
add constraint "item_id_company_id_key" unique ("id", "company_id");
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
-- The "contracts book": reusable contract templates a company maintains in
|
|
2
|
+
-- Contract Settings. Attaching a contract to a job/invoice/estimate/client
|
|
3
|
+
-- snapshots the template's title/body onto the contract instance (next
|
|
4
|
+
-- migration), so editing a template never mutates contracts already created
|
|
5
|
+
-- from it.
|
|
6
|
+
--
|
|
7
|
+
-- is_archived removes a template from the book without breaking the
|
|
8
|
+
-- provenance link from instances that were created from it.
|
|
9
|
+
|
|
10
|
+
create table if not exists "public"."contract_template" (
|
|
11
|
+
"id" "uuid" default "gen_random_uuid"() not null,
|
|
12
|
+
"created_at" timestamp with time zone default "now"() not null,
|
|
13
|
+
"updated_at" timestamp with time zone,
|
|
14
|
+
"company_id" "uuid" not null,
|
|
15
|
+
"name" "text" not null,
|
|
16
|
+
-- Plain text, rendered with pre-wrap; never interpreted as HTML.
|
|
17
|
+
"body" "text" default '' not null,
|
|
18
|
+
"is_archived" boolean default false not null,
|
|
19
|
+
constraint "contract_template_pkey" primary key ("id"),
|
|
20
|
+
constraint "contract_template_id_company_id_key" unique ("id", "company_id")
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
alter table "public"."contract_template" owner to "postgres";
|
|
24
|
+
|
|
25
|
+
alter table only "public"."contract_template"
|
|
26
|
+
add constraint "contract_template_company_id_fkey"
|
|
27
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
28
|
+
|
|
29
|
+
create index "contract_template_company_id_idx"
|
|
30
|
+
on "public"."contract_template" ("company_id");
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
-- Contract instances: an actual contract attached to exactly one of a job,
|
|
2
|
+
-- invoice, estimate, or client (a "lead" is a client row with
|
|
3
|
+
-- client_or_lead = 'lead', so lead contracts use client_id).
|
|
4
|
+
--
|
|
5
|
+
-- title/body are denormalized snapshots taken when the contract is created
|
|
6
|
+
-- from a template (or typed for a one-off), so later template edits never
|
|
7
|
+
-- change an existing contract — same rationale as the estimate proposal
|
|
8
|
+
-- option-item snapshots. template_id is provenance only; its composite FK
|
|
9
|
+
-- uses the PG15 column-list ON DELETE SET NULL form so deleting a template
|
|
10
|
+
-- nulls only template_id, never company_id (the trap that forced
|
|
11
|
+
-- selected_option_id in the proposals migration to stay single-column).
|
|
12
|
+
--
|
|
13
|
+
-- Parent references are composite (fk, company_id) foreign keys onto
|
|
14
|
+
-- (id, company_id) so a contract can never point at another tenant's parent
|
|
15
|
+
-- (backing unique keys added in 20260807014702).
|
|
16
|
+
--
|
|
17
|
+
-- access_token_nonce backs the public signing link: the link token is
|
|
18
|
+
-- HMAC-SHA256(AUTOPILOT_API_KEY, contract id + nonce), computed and verified
|
|
19
|
+
-- only on the web server (see autopilot-web's contractSignToken.ts, same
|
|
20
|
+
-- model as bookingBillingToken.ts). The DB never holds the token itself, so
|
|
21
|
+
-- a database dump alone cannot forge signing links, while the server can
|
|
22
|
+
-- always rebuild the link for "Copy link"/re-send. Rotating the nonce
|
|
23
|
+
-- revokes every previously issued link.
|
|
24
|
+
|
|
25
|
+
create table if not exists "public"."contract" (
|
|
26
|
+
"id" "uuid" default "gen_random_uuid"() not null,
|
|
27
|
+
"created_at" timestamp with time zone default "now"() not null,
|
|
28
|
+
"updated_at" timestamp with time zone,
|
|
29
|
+
"company_id" "uuid" not null,
|
|
30
|
+
-- Set by set_contract_number() below; user-editable like job/invoice/
|
|
31
|
+
-- estimate numbers, guarded by update_contract_number().
|
|
32
|
+
"contract_number" integer not null,
|
|
33
|
+
"template_id" "uuid",
|
|
34
|
+
"job_id" "uuid",
|
|
35
|
+
"invoice_id" "uuid",
|
|
36
|
+
"estimate_id" "uuid",
|
|
37
|
+
"client_id" "uuid",
|
|
38
|
+
"title" "text" not null,
|
|
39
|
+
-- Plain text, rendered with pre-wrap; never interpreted as HTML.
|
|
40
|
+
"body" "text" not null,
|
|
41
|
+
"status" "text" default 'Unsent' not null,
|
|
42
|
+
"access_token_nonce" "uuid",
|
|
43
|
+
"sent_at" timestamp with time zone,
|
|
44
|
+
"signed_at" timestamp with time zone,
|
|
45
|
+
constraint "contract_pkey" primary key ("id"),
|
|
46
|
+
constraint "contract_id_company_id_key" unique ("id", "company_id"),
|
|
47
|
+
constraint "contract_company_id_contract_number_key" unique ("company_id", "contract_number"),
|
|
48
|
+
constraint "contract_status_check" check ("status" in (
|
|
49
|
+
'Unsent', 'Sent', 'Opened', 'Signed', 'Voided'
|
|
50
|
+
)),
|
|
51
|
+
constraint "contract_exactly_one_parent_check" check (
|
|
52
|
+
num_nonnulls("job_id", "invoice_id", "estimate_id", "client_id") = 1
|
|
53
|
+
)
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
alter table "public"."contract" owner to "postgres";
|
|
57
|
+
|
|
58
|
+
alter table only "public"."contract"
|
|
59
|
+
add constraint "contract_company_id_fkey"
|
|
60
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
61
|
+
|
|
62
|
+
alter table only "public"."contract"
|
|
63
|
+
add constraint "contract_template_id_fkey"
|
|
64
|
+
foreign key ("template_id", "company_id")
|
|
65
|
+
references "public"."contract_template"("id", "company_id")
|
|
66
|
+
on delete set null ("template_id");
|
|
67
|
+
|
|
68
|
+
alter table only "public"."contract"
|
|
69
|
+
add constraint "contract_job_id_fkey"
|
|
70
|
+
foreign key ("job_id", "company_id")
|
|
71
|
+
references "public"."job"("id", "company_id") on delete cascade;
|
|
72
|
+
|
|
73
|
+
alter table only "public"."contract"
|
|
74
|
+
add constraint "contract_invoice_id_fkey"
|
|
75
|
+
foreign key ("invoice_id", "company_id")
|
|
76
|
+
references "public"."invoice"("id", "company_id") on delete cascade;
|
|
77
|
+
|
|
78
|
+
alter table only "public"."contract"
|
|
79
|
+
add constraint "contract_estimate_id_fkey"
|
|
80
|
+
foreign key ("estimate_id", "company_id")
|
|
81
|
+
references "public"."estimate"("id", "company_id") on delete cascade;
|
|
82
|
+
|
|
83
|
+
alter table only "public"."contract"
|
|
84
|
+
add constraint "contract_client_id_fkey"
|
|
85
|
+
foreign key ("client_id", "company_id")
|
|
86
|
+
references "public"."client"("id", "company_id") on delete cascade;
|
|
87
|
+
|
|
88
|
+
create index "contract_company_id_idx" on "public"."contract" ("company_id");
|
|
89
|
+
create index "contract_template_id_idx" on "public"."contract" ("template_id");
|
|
90
|
+
create index "contract_job_id_idx" on "public"."contract" ("job_id");
|
|
91
|
+
create index "contract_invoice_id_idx" on "public"."contract" ("invoice_id");
|
|
92
|
+
create index "contract_estimate_id_idx" on "public"."contract" ("estimate_id");
|
|
93
|
+
create index "contract_client_id_idx" on "public"."contract" ("client_id");
|
|
94
|
+
-- Contract Settings renders a newest-first history of every contract.
|
|
95
|
+
create index "contract_company_id_created_at_idx"
|
|
96
|
+
on "public"."contract" ("company_id", "created_at" desc);
|
|
97
|
+
|
|
98
|
+
-- Per-company numbering, same model as job/invoice/estimate numbers but with
|
|
99
|
+
-- a unique company_id + upsert increment instead of the PERFORM ... FOR
|
|
100
|
+
-- UPDATE idiom in set_job_number(): that idiom locks nothing when the
|
|
101
|
+
-- counter row doesn't exist yet, so the first two concurrent inserts for a
|
|
102
|
+
-- company can race to the same number. The upsert takes a real row lock in
|
|
103
|
+
-- both cases.
|
|
104
|
+
|
|
105
|
+
create table if not exists "public"."contract_counter" (
|
|
106
|
+
"id" "uuid" default "gen_random_uuid"() not null,
|
|
107
|
+
"created_at" timestamp with time zone default "now"() not null,
|
|
108
|
+
"company_id" "uuid" not null,
|
|
109
|
+
"next_contract_number" integer not null,
|
|
110
|
+
constraint "contract_counter_pkey" primary key ("id"),
|
|
111
|
+
constraint "contract_counter_company_id_key" unique ("company_id")
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
alter table "public"."contract_counter" owner to "postgres";
|
|
115
|
+
|
|
116
|
+
alter table only "public"."contract_counter"
|
|
117
|
+
add constraint "contract_counter_company_id_fkey"
|
|
118
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
119
|
+
|
|
120
|
+
create or replace function "public"."set_contract_number"() returns "trigger"
|
|
121
|
+
language "plpgsql"
|
|
122
|
+
as $$
|
|
123
|
+
declare
|
|
124
|
+
next_number integer;
|
|
125
|
+
begin
|
|
126
|
+
-- Row is locked by the upsert whether it existed or not; the returned
|
|
127
|
+
-- value is the counter AFTER increment, so the assigned number is one
|
|
128
|
+
-- less.
|
|
129
|
+
insert into contract_counter (company_id, next_contract_number)
|
|
130
|
+
values (new.company_id, 2)
|
|
131
|
+
on conflict (company_id)
|
|
132
|
+
do update set next_contract_number = contract_counter.next_contract_number + 1
|
|
133
|
+
returning next_contract_number into next_number;
|
|
134
|
+
|
|
135
|
+
new.contract_number := next_number - 1;
|
|
136
|
+
|
|
137
|
+
return new;
|
|
138
|
+
end;
|
|
139
|
+
$$;
|
|
140
|
+
|
|
141
|
+
alter function "public"."set_contract_number"() owner to "postgres";
|
|
142
|
+
|
|
143
|
+
-- Guard for manual number edits, mirroring update_job_number(): reject
|
|
144
|
+
-- duplicates within the company and keep the counter above the high-water
|
|
145
|
+
-- mark so future automatic numbers never collide.
|
|
146
|
+
create or replace function "public"."update_contract_number"() returns "trigger"
|
|
147
|
+
language "plpgsql"
|
|
148
|
+
as $$
|
|
149
|
+
declare
|
|
150
|
+
next_number integer;
|
|
151
|
+
begin
|
|
152
|
+
perform * from contract_counter
|
|
153
|
+
where company_id = new.company_id for update;
|
|
154
|
+
|
|
155
|
+
if exists (
|
|
156
|
+
select 1 from contract
|
|
157
|
+
where company_id = new.company_id
|
|
158
|
+
and contract_number = new.contract_number
|
|
159
|
+
) then
|
|
160
|
+
raise exception 'Contract number % already exists', new.contract_number;
|
|
161
|
+
end if;
|
|
162
|
+
|
|
163
|
+
select next_contract_number into next_number
|
|
164
|
+
from contract_counter
|
|
165
|
+
where company_id = new.company_id;
|
|
166
|
+
|
|
167
|
+
if new.contract_number >= next_number then
|
|
168
|
+
update contract_counter
|
|
169
|
+
set next_contract_number = new.contract_number + 1
|
|
170
|
+
where company_id = new.company_id;
|
|
171
|
+
end if;
|
|
172
|
+
|
|
173
|
+
return new;
|
|
174
|
+
end;
|
|
175
|
+
$$;
|
|
176
|
+
|
|
177
|
+
alter function "public"."update_contract_number"() owner to "postgres";
|
|
178
|
+
|
|
179
|
+
-- DB backstop for signing integrity, closing both direct-update bypasses of
|
|
180
|
+
-- the sign_contract() workflow:
|
|
181
|
+
--
|
|
182
|
+
-- * Once Signed, a contract is frozen entirely — title, body, status, and
|
|
183
|
+
-- signed_at. Without the status clause, staff could move a row out of
|
|
184
|
+
-- Signed, edit the text, and restore the status, leaving the body
|
|
185
|
+
-- diverged from the audited body_sha256; without the signed_at clause,
|
|
186
|
+
-- the contract's timestamp could be rewritten to conflict with the
|
|
187
|
+
-- audit row's.
|
|
188
|
+
-- * Entering Signed requires the contract_signature audit row to already
|
|
189
|
+
-- exist. sign_contract() inserts it in the same transaction before its
|
|
190
|
+
-- status update, and staff have no insert grant on contract_signature,
|
|
191
|
+
-- so a directly forged Signed status (with no audit evidence) is
|
|
192
|
+
-- unrepresentable.
|
|
193
|
+
create or replace function "public"."enforce_contract_signing_integrity"() returns "trigger"
|
|
194
|
+
language "plpgsql"
|
|
195
|
+
as $$
|
|
196
|
+
begin
|
|
197
|
+
if old.status = 'Signed' then
|
|
198
|
+
if new.status is distinct from old.status
|
|
199
|
+
or new.body is distinct from old.body
|
|
200
|
+
or new.title is distinct from old.title
|
|
201
|
+
or new.signed_at is distinct from old.signed_at
|
|
202
|
+
then
|
|
203
|
+
raise exception 'signed contracts cannot be modified'
|
|
204
|
+
using errcode = 'P0010';
|
|
205
|
+
end if;
|
|
206
|
+
elsif new.status = 'Signed' then
|
|
207
|
+
if not exists (
|
|
208
|
+
select 1 from "public"."contract_signature"
|
|
209
|
+
where "contract_id" = new.id
|
|
210
|
+
) then
|
|
211
|
+
raise exception 'contracts can only be signed through sign_contract()'
|
|
212
|
+
using errcode = 'P0011';
|
|
213
|
+
end if;
|
|
214
|
+
end if;
|
|
215
|
+
|
|
216
|
+
return new;
|
|
217
|
+
end;
|
|
218
|
+
$$;
|
|
219
|
+
|
|
220
|
+
alter function "public"."enforce_contract_signing_integrity"() owner to "postgres";
|
|
221
|
+
|
|
222
|
+
create or replace trigger "set_contract_number_trigger"
|
|
223
|
+
before insert on "public"."contract"
|
|
224
|
+
for each row execute function "public"."set_contract_number"();
|
|
225
|
+
|
|
226
|
+
create or replace trigger "update_contract_number_trigger"
|
|
227
|
+
before update of "contract_number" on "public"."contract"
|
|
228
|
+
for each row when (("old"."contract_number" is distinct from "new"."contract_number"))
|
|
229
|
+
execute function "public"."update_contract_number"();
|
|
230
|
+
|
|
231
|
+
create or replace trigger "enforce_contract_signing_integrity_trigger"
|
|
232
|
+
before update on "public"."contract"
|
|
233
|
+
for each row execute function "public"."enforce_contract_signing_integrity"();
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
-- Immutable audit record of a contract signing. One row per contract,
|
|
2
|
+
-- written exclusively by the service-role sign_contract() function
|
|
3
|
+
-- (20260807014709) in the same transaction that flips the contract to
|
|
4
|
+
-- Signed — staff get no insert/update/delete grants at all (see the rls
|
|
5
|
+
-- migration).
|
|
6
|
+
--
|
|
7
|
+
-- body_sha256 hashes contract.body as it stood inside the signing
|
|
8
|
+
-- transaction, so the row proves exactly what text was agreed to even
|
|
9
|
+
-- though the contract row itself is also frozen by trigger after signing.
|
|
10
|
+
|
|
11
|
+
create table if not exists "public"."contract_signature" (
|
|
12
|
+
"id" "uuid" default "gen_random_uuid"() not null,
|
|
13
|
+
"company_id" "uuid" not null,
|
|
14
|
+
"contract_id" "uuid" not null,
|
|
15
|
+
"signed_at" timestamp with time zone default "now"() not null,
|
|
16
|
+
-- Name the customer typed on the signing page.
|
|
17
|
+
"signer_name" "text" not null,
|
|
18
|
+
"signer_ip" "text",
|
|
19
|
+
"signer_user_agent" "text",
|
|
20
|
+
"body_sha256" "text" not null,
|
|
21
|
+
-- Path of the drawn-signature PNG in the company storage bucket.
|
|
22
|
+
"signature_storage_path" "text" not null,
|
|
23
|
+
constraint "contract_signature_pkey" primary key ("id"),
|
|
24
|
+
constraint "contract_signature_contract_id_key" unique ("contract_id")
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
alter table "public"."contract_signature" owner to "postgres";
|
|
28
|
+
|
|
29
|
+
alter table only "public"."contract_signature"
|
|
30
|
+
add constraint "contract_signature_company_id_fkey"
|
|
31
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
32
|
+
|
|
33
|
+
alter table only "public"."contract_signature"
|
|
34
|
+
add constraint "contract_signature_contract_id_fkey"
|
|
35
|
+
foreign key ("contract_id", "company_id")
|
|
36
|
+
references "public"."contract"("id", "company_id") on delete cascade;
|
|
37
|
+
|
|
38
|
+
create index "contract_signature_company_id_idx"
|
|
39
|
+
on "public"."contract_signature" ("company_id");
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
-- Which contract templates a booking item requires. When the online booking
|
|
2
|
+
-- form takes an upfront payment and the cart contains items with rows here,
|
|
3
|
+
-- the customer must sign one contract per distinct required template before
|
|
4
|
+
-- the payment step unlocks.
|
|
5
|
+
--
|
|
6
|
+
-- Composite (fk, company_id) foreign keys keep both sides of the join
|
|
7
|
+
-- tenant-consistent (backing unique keys: item in 20260807014702,
|
|
8
|
+
-- contract_template in 20260807014703).
|
|
9
|
+
|
|
10
|
+
create table if not exists "public"."item_contract_requirement" (
|
|
11
|
+
"created_at" timestamp with time zone default "now"() not null,
|
|
12
|
+
"company_id" "uuid" not null,
|
|
13
|
+
"item_id" "uuid" not null,
|
|
14
|
+
"contract_template_id" "uuid" not null,
|
|
15
|
+
constraint "item_contract_requirement_pkey"
|
|
16
|
+
primary key ("item_id", "contract_template_id")
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
alter table "public"."item_contract_requirement" owner to "postgres";
|
|
20
|
+
|
|
21
|
+
alter table only "public"."item_contract_requirement"
|
|
22
|
+
add constraint "item_contract_requirement_company_id_fkey"
|
|
23
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|
|
24
|
+
|
|
25
|
+
alter table only "public"."item_contract_requirement"
|
|
26
|
+
add constraint "item_contract_requirement_item_id_fkey"
|
|
27
|
+
foreign key ("item_id", "company_id")
|
|
28
|
+
references "public"."item"("id", "company_id") on delete cascade;
|
|
29
|
+
|
|
30
|
+
alter table only "public"."item_contract_requirement"
|
|
31
|
+
add constraint "item_contract_requirement_contract_template_id_fkey"
|
|
32
|
+
foreign key ("contract_template_id", "company_id")
|
|
33
|
+
references "public"."contract_template"("id", "company_id") on delete cascade;
|
|
34
|
+
|
|
35
|
+
create index "item_contract_requirement_company_id_idx"
|
|
36
|
+
on "public"."item_contract_requirement" ("company_id");
|
|
37
|
+
create index "item_contract_requirement_contract_template_id_idx"
|
|
38
|
+
on "public"."item_contract_requirement" ("contract_template_id");
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
-- Company-level contracts settings. One row per company, created lazily on
|
|
2
|
+
-- first save; an absent row means enabled (default-on opt-out idiom, same
|
|
3
|
+
-- as settings_estimate.proposals_enabled — the dumpster_asset_tracking
|
|
4
|
+
-- entitlement is what actually gates the feature, so is_enabled grants
|
|
5
|
+
-- nothing by itself and turning it off is never blocked).
|
|
6
|
+
--
|
|
7
|
+
-- When is_enabled is false, contract cards are hidden on jobs, invoices,
|
|
8
|
+
-- estimates, clients, and leads, and online booking skips required
|
|
9
|
+
-- contracts.
|
|
10
|
+
|
|
11
|
+
create table if not exists "public"."settings_contract" (
|
|
12
|
+
"company_id" "uuid" not null,
|
|
13
|
+
"created_at" timestamp with time zone default "now"() not null,
|
|
14
|
+
"updated_at" timestamp with time zone,
|
|
15
|
+
"is_enabled" boolean default true not null,
|
|
16
|
+
constraint "settings_contract_pkey" primary key ("company_id")
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
alter table "public"."settings_contract" owner to "postgres";
|
|
20
|
+
|
|
21
|
+
alter table only "public"."settings_contract"
|
|
22
|
+
add constraint "settings_contract_company_id_fkey"
|
|
23
|
+
foreign key ("company_id") references "public"."company"("id") on delete cascade;
|