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, "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, "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 UNIQUE INDEX "crm_quotations_org_code_idx" ON "crm_quotations" USING btree ("organization_id","code");