dashboard

This commit is contained in:
Lucas Tettamanti
2026-01-27 02:41:39 -03:00
parent 493f26af17
commit df9420b954
19 changed files with 2105 additions and 111 deletions

View File

@@ -0,0 +1,90 @@
-- migrate:up
-- Tabla de cache de pedidos de WooCommerce
-- Almacena pedidos localmente para estadísticas y listado rápido
CREATE TABLE woo_orders_cache (
id SERIAL PRIMARY KEY,
tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
woo_order_id BIGINT NOT NULL,
status VARCHAR(50),
total NUMERIC(12,2),
currency VARCHAR(10) DEFAULT 'ARS',
date_created TIMESTAMPTZ NOT NULL,
date_paid TIMESTAMPTZ,
-- Filtros del dashboard
source VARCHAR(20) DEFAULT 'web', -- 'whatsapp' | 'web'
is_delivery BOOLEAN DEFAULT false,
is_cash BOOLEAN DEFAULT false,
-- Cliente
customer_name VARCHAR(255),
customer_phone VARCHAR(50),
customer_email VARCHAR(255),
-- Dirección de envío (para futuro mapa de calor)
shipping_address_1 VARCHAR(255),
shipping_address_2 VARCHAR(255),
shipping_city VARCHAR(100),
shipping_state VARCHAR(100),
shipping_postcode VARCHAR(20),
shipping_country VARCHAR(10) DEFAULT 'AR',
-- Dirección de facturación
billing_address_1 VARCHAR(255),
billing_city VARCHAR(100),
billing_state VARCHAR(100),
billing_postcode VARCHAR(20),
-- Raw para debugging
raw JSONB,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(tenant_id, woo_order_id)
);
CREATE INDEX idx_woo_orders_tenant_date ON woo_orders_cache(tenant_id, date_created DESC);
CREATE INDEX idx_woo_orders_source ON woo_orders_cache(tenant_id, source);
CREATE INDEX idx_woo_orders_city ON woo_orders_cache(tenant_id, shipping_city);
-- Tabla de detalle de items (productos por pedido)
-- Permite calcular stats por producto (kg vendidos, unidades, facturación)
CREATE TABLE woo_order_items (
id SERIAL PRIMARY KEY,
tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
woo_order_id BIGINT NOT NULL,
woo_product_id BIGINT,
-- Datos del producto
product_name VARCHAR(255) NOT NULL,
sku VARCHAR(100),
-- Cantidades y precios
quantity NUMERIC(10,3) NOT NULL, -- Soporta decimales para kg
unit_price NUMERIC(12,2), -- Precio unitario
line_total NUMERIC(12,2), -- quantity * unit_price
-- Tipo de unidad (para stats de kg vs unidades)
sell_unit VARCHAR(20) DEFAULT 'unit', -- 'kg' | 'unit' | 'pack'
created_at TIMESTAMPTZ DEFAULT NOW(),
FOREIGN KEY (tenant_id, woo_order_id)
REFERENCES woo_orders_cache(tenant_id, woo_order_id) ON DELETE CASCADE
);
CREATE INDEX idx_woo_items_order ON woo_order_items(tenant_id, woo_order_id);
CREATE INDEX idx_woo_items_product ON woo_order_items(tenant_id, woo_product_id);
-- migrate:down
DROP INDEX IF EXISTS idx_woo_items_product;
DROP INDEX IF EXISTS idx_woo_items_order;
DROP TABLE IF EXISTS woo_order_items;
DROP INDEX IF EXISTS idx_woo_orders_city;
DROP INDEX IF EXISTS idx_woo_orders_source;
DROP INDEX IF EXISTS idx_woo_orders_tenant_date;
DROP TABLE IF EXISTS woo_orders_cache;