Implement sales CRM workflow foundation
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
ALTER TABLE sales_automation_tasks ADD COLUMN IF NOT EXISTS locked_at TEXT;
|
||||
ALTER TABLE sales_automation_tasks ADD COLUMN IF NOT EXISTS locked_by TEXT;
|
||||
ALTER TABLE sales_automation_tasks ADD COLUMN IF NOT EXISTS completed_at TEXT;
|
||||
ALTER TABLE sales_automation_tasks ADD COLUMN IF NOT EXISTS failed_at TEXT;
|
||||
ALTER TABLE sales_automation_tasks ADD COLUMN IF NOT EXISTS max_retries INTEGER NOT NULL DEFAULT 3;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sales_tasks_lock ON sales_automation_tasks(status, locked_at, locked_by);
|
||||
@@ -0,0 +1,7 @@
|
||||
ALTER TABLE sales_automation_tasks ADD COLUMN locked_at TEXT;
|
||||
ALTER TABLE sales_automation_tasks ADD COLUMN locked_by TEXT;
|
||||
ALTER TABLE sales_automation_tasks ADD COLUMN completed_at TEXT;
|
||||
ALTER TABLE sales_automation_tasks ADD COLUMN failed_at TEXT;
|
||||
ALTER TABLE sales_automation_tasks ADD COLUMN max_retries INTEGER NOT NULL DEFAULT 3;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sales_tasks_lock ON sales_automation_tasks(status, locked_at, locked_by);
|
||||
@@ -0,0 +1,31 @@
|
||||
CREATE TABLE IF NOT EXISTS sales_payment_webhook_events (
|
||||
id SERIAL PRIMARY KEY,
|
||||
tenant_id TEXT NOT NULL,
|
||||
payment_provider TEXT NOT NULL,
|
||||
provider_account_id TEXT,
|
||||
external_event_id TEXT,
|
||||
external_payment_id TEXT,
|
||||
event_type TEXT NOT NULL,
|
||||
event_status TEXT NOT NULL DEFAULT 'received',
|
||||
signature_status TEXT NOT NULL DEFAULT 'unchecked',
|
||||
raw_payload_hash TEXT NOT NULL,
|
||||
normalized_payload_json TEXT NOT NULL DEFAULT '{}',
|
||||
headers_json TEXT NOT NULL DEFAULT '{}',
|
||||
received_at TEXT NOT NULL,
|
||||
processed_at TEXT,
|
||||
error_message TEXT,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sales_payment_webhook_events_received
|
||||
ON sales_payment_webhook_events(tenant_id, received_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_sales_payment_webhook_events_payment
|
||||
ON sales_payment_webhook_events(tenant_id, payment_provider, external_payment_id);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_sales_payment_webhook_events_external_event_unique
|
||||
ON sales_payment_webhook_events(tenant_id, payment_provider, external_event_id)
|
||||
WHERE external_event_id IS NOT NULL;
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_sales_payments_tenant_external_payment_unique
|
||||
ON sales_payments(tenant_id, payment_provider, external_payment_id)
|
||||
WHERE external_payment_id IS NOT NULL;
|
||||
@@ -0,0 +1,31 @@
|
||||
CREATE TABLE IF NOT EXISTS sales_payment_webhook_events (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
tenant_id TEXT NOT NULL,
|
||||
payment_provider TEXT NOT NULL,
|
||||
provider_account_id TEXT,
|
||||
external_event_id TEXT,
|
||||
external_payment_id TEXT,
|
||||
event_type TEXT NOT NULL,
|
||||
event_status TEXT NOT NULL DEFAULT 'received',
|
||||
signature_status TEXT NOT NULL DEFAULT 'unchecked',
|
||||
raw_payload_hash TEXT NOT NULL,
|
||||
normalized_payload_json TEXT NOT NULL DEFAULT '{}',
|
||||
headers_json TEXT NOT NULL DEFAULT '{}',
|
||||
received_at TEXT NOT NULL,
|
||||
processed_at TEXT,
|
||||
error_message TEXT,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sales_payment_webhook_events_received
|
||||
ON sales_payment_webhook_events(tenant_id, received_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_sales_payment_webhook_events_payment
|
||||
ON sales_payment_webhook_events(tenant_id, payment_provider, external_payment_id);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_sales_payment_webhook_events_external_event_unique
|
||||
ON sales_payment_webhook_events(tenant_id, payment_provider, external_event_id)
|
||||
WHERE external_event_id IS NOT NULL;
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_sales_payments_tenant_external_payment_unique
|
||||
ON sales_payments(tenant_id, payment_provider, external_payment_id)
|
||||
WHERE external_payment_id IS NOT NULL;
|
||||
@@ -0,0 +1,44 @@
|
||||
ALTER TABLE sales_communication_sessions ADD COLUMN IF NOT EXISTS channel_provider TEXT;
|
||||
CREATE INDEX IF NOT EXISTS idx_sales_comm_channel_provider ON sales_communication_sessions(channel_provider);
|
||||
|
||||
ALTER TABLE sales_notes ADD COLUMN IF NOT EXISTS source_type TEXT;
|
||||
ALTER TABLE sales_notes ADD COLUMN IF NOT EXISTS source_id TEXT;
|
||||
ALTER TABLE sales_notes ADD COLUMN IF NOT EXISTS updated_at TEXT;
|
||||
ALTER TABLE sales_notes ADD COLUMN IF NOT EXISTS archived_at TEXT;
|
||||
UPDATE sales_notes
|
||||
SET updated_at = created_at
|
||||
WHERE updated_at IS NULL OR TRIM(updated_at) = '';
|
||||
|
||||
ALTER TABLE sales_escalations ADD COLUMN IF NOT EXISTS assigned_at TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN IF NOT EXISTS started_at TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN IF NOT EXISTS canceled_at TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN IF NOT EXISTS resolution_code TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN IF NOT EXISTS resolution_summary TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN IF NOT EXISTS sla_due_at TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN IF NOT EXISTS source_channel TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN IF NOT EXISTS source_communication_session_id TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN IF NOT EXISTS source_automation_task_id TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN IF NOT EXISTS updated_at TEXT;
|
||||
UPDATE sales_escalations
|
||||
SET updated_at = COALESCE(updated_at, resolved_at, created_at)
|
||||
WHERE updated_at IS NULL OR TRIM(updated_at) = '';
|
||||
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN IF NOT EXISTS communication_session_id TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN IF NOT EXISTS previous_communication_session_id TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN IF NOT EXISTS new_communication_session_id TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN IF NOT EXISTS reason_code TEXT DEFAULT 'human_decision';
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN IF NOT EXISTS reason_text TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN IF NOT EXISTS initiated_by_type TEXT DEFAULT 'human';
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN IF NOT EXISTS initiated_by_id TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN IF NOT EXISTS source_type TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN IF NOT EXISTS source_id TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN IF NOT EXISTS recommended_by_task_id TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN IF NOT EXISTS created_at TEXT;
|
||||
UPDATE sales_channel_switches
|
||||
SET communication_session_id = COALESCE(communication_session_id, communication_id),
|
||||
previous_communication_session_id = COALESCE(previous_communication_session_id, communication_id),
|
||||
reason_code = COALESCE(reason_code, 'human_decision'),
|
||||
reason_text = COALESCE(reason_text, reason_for_channel_switch),
|
||||
initiated_by_type = COALESCE(initiated_by_type, 'human'),
|
||||
created_at = COALESCE(created_at, switched_at)
|
||||
WHERE created_at IS NULL OR TRIM(created_at) = '';
|
||||
@@ -0,0 +1,44 @@
|
||||
ALTER TABLE sales_communication_sessions ADD COLUMN channel_provider TEXT;
|
||||
CREATE INDEX IF NOT EXISTS idx_sales_comm_channel_provider ON sales_communication_sessions(channel_provider);
|
||||
|
||||
ALTER TABLE sales_notes ADD COLUMN source_type TEXT;
|
||||
ALTER TABLE sales_notes ADD COLUMN source_id TEXT;
|
||||
ALTER TABLE sales_notes ADD COLUMN updated_at TEXT;
|
||||
ALTER TABLE sales_notes ADD COLUMN archived_at TEXT;
|
||||
UPDATE sales_notes
|
||||
SET updated_at = created_at
|
||||
WHERE updated_at IS NULL OR TRIM(updated_at) = '';
|
||||
|
||||
ALTER TABLE sales_escalations ADD COLUMN assigned_at TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN started_at TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN canceled_at TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN resolution_code TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN resolution_summary TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN sla_due_at TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN source_channel TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN source_communication_session_id TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN source_automation_task_id TEXT;
|
||||
ALTER TABLE sales_escalations ADD COLUMN updated_at TEXT;
|
||||
UPDATE sales_escalations
|
||||
SET updated_at = COALESCE(updated_at, resolved_at, created_at)
|
||||
WHERE updated_at IS NULL OR TRIM(updated_at) = '';
|
||||
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN communication_session_id TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN previous_communication_session_id TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN new_communication_session_id TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN reason_code TEXT DEFAULT 'human_decision';
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN reason_text TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN initiated_by_type TEXT DEFAULT 'human';
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN initiated_by_id TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN source_type TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN source_id TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN recommended_by_task_id TEXT;
|
||||
ALTER TABLE sales_channel_switches ADD COLUMN created_at TEXT;
|
||||
UPDATE sales_channel_switches
|
||||
SET communication_session_id = COALESCE(communication_session_id, communication_id),
|
||||
previous_communication_session_id = COALESCE(previous_communication_session_id, communication_id),
|
||||
reason_code = COALESCE(reason_code, 'human_decision'),
|
||||
reason_text = COALESCE(reason_text, reason_for_channel_switch),
|
||||
initiated_by_type = COALESCE(initiated_by_type, 'human'),
|
||||
created_at = COALESCE(created_at, switched_at)
|
||||
WHERE created_at IS NULL OR TRIM(created_at) = '';
|
||||
Reference in New Issue
Block a user