657 lines
24 KiB
SQL
657 lines
24 KiB
SQL
CREATE TABLE "crm_approval_actions" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"approval_request_id" text NOT NULL,
|
|
"step_number" integer NOT NULL,
|
|
"action" text NOT NULL,
|
|
"remark" text,
|
|
"acted_by" text NOT NULL,
|
|
"acted_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_approval_requests" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"workflow_id" text NOT NULL,
|
|
"entity_type" text NOT NULL,
|
|
"entity_id" text NOT NULL,
|
|
"current_step" integer DEFAULT 1 NOT NULL,
|
|
"status" text NOT NULL,
|
|
"requested_by" text NOT NULL,
|
|
"requested_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"completed_at" timestamp with time zone,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_approval_steps" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"workflow_id" text NOT NULL,
|
|
"step_number" integer NOT NULL,
|
|
"role_code" text NOT NULL,
|
|
"role_name" text NOT NULL,
|
|
"is_required" boolean DEFAULT true NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_approval_workflows" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"code" text NOT NULL,
|
|
"name" text NOT NULL,
|
|
"entity_type" text NOT NULL,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_contact_shares" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"contact_id" text NOT NULL,
|
|
"shared_to_user_id" text NOT NULL,
|
|
"shared_by_user_id" text NOT NULL,
|
|
"shared_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"remark" text,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_customer_contacts" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"customer_id" text NOT NULL,
|
|
"name" text NOT NULL,
|
|
"position" text,
|
|
"department" text,
|
|
"phone" text,
|
|
"mobile" text,
|
|
"email" text,
|
|
"is_primary" boolean DEFAULT false NOT NULL,
|
|
"notes" text,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone,
|
|
"created_by" text NOT NULL,
|
|
"updated_by" text NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_customer_owner_history" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"customer_id" text NOT NULL,
|
|
"old_owner_user_id" text,
|
|
"new_owner_user_id" text,
|
|
"changed_by" text NOT NULL,
|
|
"changed_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"remark" text,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_customers" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"branch_id" text,
|
|
"code" text NOT NULL,
|
|
"name" text NOT NULL,
|
|
"abbr" text,
|
|
"tax_id" text,
|
|
"customer_type" text NOT NULL,
|
|
"customer_status" text NOT NULL,
|
|
"address" text,
|
|
"province" text,
|
|
"district" text,
|
|
"sub_district" text,
|
|
"postal_code" text,
|
|
"country" text,
|
|
"phone" text,
|
|
"fax" text,
|
|
"email" text,
|
|
"website" text,
|
|
"lead_channel" text,
|
|
"customer_group" text,
|
|
"customer_sub_group" text,
|
|
"owner_user_id" text,
|
|
"owner_assigned_at" timestamp with time zone,
|
|
"owner_assigned_by" text,
|
|
"notes" text,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone,
|
|
"created_by" text NOT NULL,
|
|
"updated_by" text NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_document_artifacts" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"entity_type" text NOT NULL,
|
|
"entity_id" text NOT NULL,
|
|
"document_type" text NOT NULL,
|
|
"artifact_type" text NOT NULL,
|
|
"template_version_id" text,
|
|
"storage_provider" text NOT NULL,
|
|
"storage_key" text NOT NULL,
|
|
"file_name" text NOT NULL,
|
|
"content_type" text NOT NULL,
|
|
"file_size" integer,
|
|
"checksum" text,
|
|
"status" text DEFAULT 'active' NOT NULL,
|
|
"generated_by" text NOT NULL,
|
|
"generated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"locked_at" timestamp with time zone,
|
|
"locked_by" text,
|
|
"voided_at" timestamp with time zone,
|
|
"voided_by" text,
|
|
"void_reason" text,
|
|
"metadata" jsonb,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_document_template_mappings" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"template_version_id" text NOT NULL,
|
|
"placeholder_key" text NOT NULL,
|
|
"source_path" text NOT NULL,
|
|
"data_type" text NOT NULL,
|
|
"sheet_name" text,
|
|
"default_value" text,
|
|
"format_mask" text,
|
|
"sort_order" integer DEFAULT 0 NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_document_template_table_columns" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"mapping_id" text NOT NULL,
|
|
"column_name" text NOT NULL,
|
|
"source_field" text NOT NULL,
|
|
"column_letter" text,
|
|
"sort_order" integer DEFAULT 0 NOT NULL,
|
|
"format_mask" text,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_document_template_versions" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"template_id" text NOT NULL,
|
|
"version" text NOT NULL,
|
|
"file_path" text,
|
|
"schema_json" jsonb NOT NULL,
|
|
"preview_image_url" text,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone,
|
|
"created_by" text NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_document_templates" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"document_type" text NOT NULL,
|
|
"product_type" text NOT NULL,
|
|
"file_type" text NOT NULL,
|
|
"template_name" text NOT NULL,
|
|
"description" text,
|
|
"is_default" boolean DEFAULT false NOT NULL,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone,
|
|
"created_by" text NOT NULL,
|
|
"updated_by" text NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_enquiries" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"branch_id" text,
|
|
"lead_id" text,
|
|
"code" text NOT NULL,
|
|
"customer_id" text NOT NULL,
|
|
"contact_id" text,
|
|
"title" text NOT NULL,
|
|
"description" text,
|
|
"requirement" text,
|
|
"project_name" text,
|
|
"project_location" text,
|
|
"product_type" text NOT NULL,
|
|
"status" text NOT NULL,
|
|
"priority" text NOT NULL,
|
|
"lead_channel" text,
|
|
"estimated_value" double precision,
|
|
"chance_percent" integer,
|
|
"expected_close_date" timestamp with time zone,
|
|
"competitor" text,
|
|
"source" text,
|
|
"notes" text,
|
|
"is_hot_project" boolean DEFAULT false NOT NULL,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"pipeline_stage" text DEFAULT 'lead' NOT NULL,
|
|
"closed_won_at" timestamp with time zone,
|
|
"closed_lost_at" timestamp with time zone,
|
|
"closed_by_user_id" text,
|
|
"po_number" text,
|
|
"po_date" timestamp with time zone,
|
|
"po_amount" double precision,
|
|
"po_currency" text,
|
|
"lost_reason" text,
|
|
"lost_competitor" text,
|
|
"lost_remark" text,
|
|
"assigned_to_user_id" text,
|
|
"assigned_at" timestamp with time zone,
|
|
"assigned_by" text,
|
|
"assignment_remark" text,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone,
|
|
"created_by" text NOT NULL,
|
|
"updated_by" text NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_enquiry_attachments" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"enquiry_id" text NOT NULL,
|
|
"category" text NOT NULL,
|
|
"file_name" text NOT NULL,
|
|
"original_file_name" text NOT NULL,
|
|
"storage_provider" text NOT NULL,
|
|
"storage_key" text NOT NULL,
|
|
"file_size" integer,
|
|
"file_type" text,
|
|
"description" text,
|
|
"uploaded_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"uploaded_by" text NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_enquiry_customers" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"enquiry_id" text NOT NULL,
|
|
"customer_id" text NOT NULL,
|
|
"role" text NOT NULL,
|
|
"remark" text,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_enquiry_followups" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"enquiry_id" text NOT NULL,
|
|
"followup_date" timestamp with time zone NOT NULL,
|
|
"followup_type" text NOT NULL,
|
|
"contact_id" text,
|
|
"outcome" text,
|
|
"notes" text,
|
|
"next_followup_date" timestamp with time zone,
|
|
"next_action" text,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone,
|
|
"created_by" text NOT NULL,
|
|
"updated_by" text NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_leads" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"branch_id" text,
|
|
"code" text NOT NULL,
|
|
"customer_id" text,
|
|
"contact_id" text,
|
|
"description" text,
|
|
"project_name" text,
|
|
"project_location" text,
|
|
"product_type" text,
|
|
"priority" text,
|
|
"estimated_value" double precision,
|
|
"awareness_id" text,
|
|
"status" text DEFAULT 'new_job' NOT NULL,
|
|
"followup_status" text,
|
|
"lost_reason" text,
|
|
"outcome" text DEFAULT 'open' NOT NULL,
|
|
"owner_marketing_user_id" text,
|
|
"assigned_sales_owner_id" text,
|
|
"assigned_at" timestamp with time zone,
|
|
"assigned_by" text,
|
|
"assignment_remark" text,
|
|
"created_by" text NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_quotation_attachments" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"quotation_id" text NOT NULL,
|
|
"file_name" text NOT NULL,
|
|
"original_file_name" text NOT NULL,
|
|
"file_path" text NOT NULL,
|
|
"file_size" integer,
|
|
"file_type" text,
|
|
"description" text,
|
|
"uploaded_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"uploaded_by" text NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_quotation_customers" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"quotation_id" text NOT NULL,
|
|
"customer_id" text NOT NULL,
|
|
"role" text NOT NULL,
|
|
"is_primary" boolean DEFAULT false NOT NULL,
|
|
"remark" text,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_quotation_followups" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"quotation_id" text NOT NULL,
|
|
"followup_date" timestamp with time zone NOT NULL,
|
|
"followup_type" text NOT NULL,
|
|
"contact_id" text,
|
|
"outcome" text,
|
|
"notes" text,
|
|
"next_followup_date" timestamp with time zone,
|
|
"next_action" text,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone,
|
|
"created_by" text NOT NULL,
|
|
"updated_by" text NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_quotation_items" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"quotation_id" text NOT NULL,
|
|
"item_number" integer NOT NULL,
|
|
"product_type" text NOT NULL,
|
|
"description" text NOT NULL,
|
|
"quantity" double precision DEFAULT 0 NOT NULL,
|
|
"unit" text,
|
|
"unit_price" double precision DEFAULT 0 NOT NULL,
|
|
"discount" double precision DEFAULT 0 NOT NULL,
|
|
"discount_type" text,
|
|
"tax_rate" double precision DEFAULT 0 NOT NULL,
|
|
"total_price" double precision DEFAULT 0 NOT NULL,
|
|
"notes" text,
|
|
"sort_order" integer DEFAULT 0 NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_quotation_topic_items" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"topic_id" text NOT NULL,
|
|
"content" text NOT NULL,
|
|
"sort_order" integer DEFAULT 0 NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_quotation_topics" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"quotation_id" text NOT NULL,
|
|
"topic_type" text NOT NULL,
|
|
"title" text NOT NULL,
|
|
"sort_order" integer DEFAULT 0 NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_quotations" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"branch_id" text,
|
|
"code" text NOT NULL,
|
|
"enquiry_id" text,
|
|
"customer_id" text NOT NULL,
|
|
"contact_id" text,
|
|
"quotation_date" timestamp with time zone NOT NULL,
|
|
"valid_until" timestamp with time zone,
|
|
"quotation_type" text NOT NULL,
|
|
"project_name" text,
|
|
"project_location" text,
|
|
"attention" text,
|
|
"reference" text,
|
|
"notes" text,
|
|
"status" text NOT NULL,
|
|
"revision" integer DEFAULT 0 NOT NULL,
|
|
"parent_quotation_id" text,
|
|
"revision_remark" text,
|
|
"currency" text NOT NULL,
|
|
"exchange_rate" double precision DEFAULT 1 NOT NULL,
|
|
"subtotal" double precision DEFAULT 0 NOT NULL,
|
|
"discount" double precision DEFAULT 0 NOT NULL,
|
|
"discount_type" text,
|
|
"tax_rate" double precision DEFAULT 0 NOT NULL,
|
|
"tax_amount" double precision DEFAULT 0 NOT NULL,
|
|
"total_amount" double precision DEFAULT 0 NOT NULL,
|
|
"chance_percent" integer,
|
|
"is_hot_project" boolean DEFAULT false NOT NULL,
|
|
"competitor" text,
|
|
"salesman_id" text,
|
|
"is_sent" boolean DEFAULT false NOT NULL,
|
|
"sent_at" timestamp with time zone,
|
|
"sent_via" text,
|
|
"approved_at" timestamp with time zone,
|
|
"approved_artifact_id" text,
|
|
"approved_pdf_url" text,
|
|
"approved_snapshot" jsonb,
|
|
"approved_template_version_id" text,
|
|
"accepted_at" timestamp with time zone,
|
|
"rejected_at" timestamp with time zone,
|
|
"rejection_reason" text,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone,
|
|
"created_by" text NOT NULL,
|
|
"updated_by" text NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_report_definitions" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"code" text NOT NULL,
|
|
"name" text NOT NULL,
|
|
"description" text,
|
|
"category" text NOT NULL,
|
|
"is_system" boolean DEFAULT true NOT NULL,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_role_profiles" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"code" text NOT NULL,
|
|
"name" text NOT NULL,
|
|
"description" text,
|
|
"permissions" text[] DEFAULT '{}' NOT NULL,
|
|
"branch_scope_mode" text DEFAULT 'assigned' NOT NULL,
|
|
"product_scope_mode" text DEFAULT 'assigned' NOT NULL,
|
|
"ownership_scope" text DEFAULT 'own' NOT NULL,
|
|
"approval_authority" text DEFAULT 'none' NOT NULL,
|
|
"is_system" boolean DEFAULT false NOT NULL,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone,
|
|
"created_by" text NOT NULL,
|
|
"updated_by" text NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "crm_user_role_assignments" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"user_id" text NOT NULL,
|
|
"role_profile_id" text NOT NULL,
|
|
"branch_scope_mode" text DEFAULT 'inherit' NOT NULL,
|
|
"branch_scope_ids" text[] DEFAULT '{}' NOT NULL,
|
|
"product_type_scope_mode" text DEFAULT 'inherit' NOT NULL,
|
|
"product_type_scope_ids" text[] DEFAULT '{}' NOT NULL,
|
|
"is_primary" boolean DEFAULT false NOT NULL,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"assigned_by" text NOT NULL,
|
|
"assigned_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"deleted_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "document_sequences" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"branch_id" text DEFAULT '' NOT NULL,
|
|
"document_type" text NOT NULL,
|
|
"prefix" text NOT NULL,
|
|
"period" text NOT NULL,
|
|
"current_number" integer DEFAULT 0 NOT NULL,
|
|
"padding_length" integer DEFAULT 3 NOT NULL,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "memberships" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"user_id" text NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"role" text DEFAULT 'user' NOT NULL,
|
|
"business_role" text DEFAULT 'sales_support' NOT NULL,
|
|
"permissions" text[] DEFAULT '{}' NOT NULL,
|
|
"branch_scope_ids" text[] DEFAULT '{}' NOT NULL,
|
|
"product_type_scope_ids" text[] DEFAULT '{}' NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "ms_options" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"category" text NOT NULL,
|
|
"code" text NOT NULL,
|
|
"label" text NOT NULL,
|
|
"value" text,
|
|
"parent_id" text,
|
|
"sort_order" integer DEFAULT 0 NOT NULL,
|
|
"is_active" boolean DEFAULT true NOT NULL,
|
|
"metadata" jsonb,
|
|
"deleted_at" timestamp with time zone,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "organizations" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"name" text NOT NULL,
|
|
"slug" text NOT NULL,
|
|
"image_url" text,
|
|
"plan" text DEFAULT 'free' NOT NULL,
|
|
"created_by" text NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "products" (
|
|
"id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "products_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1),
|
|
"organization_id" text NOT NULL,
|
|
"name" text NOT NULL,
|
|
"category" text NOT NULL,
|
|
"description" text NOT NULL,
|
|
"photo_url" text NOT NULL,
|
|
"price" double precision NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "tr_audit_logs" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"organization_id" text NOT NULL,
|
|
"branch_id" text,
|
|
"user_id" text NOT NULL,
|
|
"entity_type" text NOT NULL,
|
|
"entity_id" text NOT NULL,
|
|
"action" text NOT NULL,
|
|
"before_data" jsonb,
|
|
"after_data" jsonb,
|
|
"request_id" text,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "users" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"name" text NOT NULL,
|
|
"email" text NOT NULL,
|
|
"password_hash" text NOT NULL,
|
|
"system_role" text DEFAULT 'user' NOT NULL,
|
|
"image" text,
|
|
"active_organization_id" text,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_approval_steps_workflow_step_idx" ON "crm_approval_steps" USING btree ("workflow_id","step_number");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_approval_workflows_org_code_idx" ON "crm_approval_workflows" USING btree ("organization_id","code");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_contact_shares_org_contact_shared_user_idx" ON "crm_contact_shares" USING btree ("organization_id","contact_id","shared_to_user_id");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_customers_org_code_idx" ON "crm_customers" USING btree ("organization_id","code");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_document_template_mappings_version_placeholder_idx" ON "crm_document_template_mappings" USING btree ("template_version_id","placeholder_key");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_document_template_table_columns_mapping_name_idx" ON "crm_document_template_table_columns" USING btree ("mapping_id","column_name");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_document_template_versions_template_version_idx" ON "crm_document_template_versions" USING btree ("template_id","version");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_document_templates_org_doc_product_file_name_idx" ON "crm_document_templates" USING btree ("organization_id","document_type","product_type","file_type","template_name");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_enquiries_org_code_idx" ON "crm_enquiries" USING btree ("organization_id","code");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_leads_org_code_idx" ON "crm_leads" USING btree ("organization_id","code");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_quotations_org_code_idx" ON "crm_quotations" USING btree ("organization_id","code");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_report_definitions_org_code_idx" ON "crm_report_definitions" USING btree ("organization_id","code");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_role_profiles_org_code_idx" ON "crm_role_profiles" USING btree ("organization_id","code");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "crm_user_role_assignments_org_user_role_idx" ON "crm_user_role_assignments" USING btree ("organization_id","user_id","role_profile_id");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "document_sequences_org_doc_period_branch_idx" ON "document_sequences" USING btree ("organization_id","document_type","period","branch_id");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "ms_options_org_category_code_idx" ON "ms_options" USING btree ("organization_id","category","code");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "organizations_slug_idx" ON "organizations" USING btree ("slug");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "users_email_idx" ON "users" USING btree ("email"); |