feat(pos): add v1.1 migration — sale_payments, layaway_items, customer_payments
This commit is contained in:
@@ -13,7 +13,7 @@ MIGRATIONS_DIR = os.path.dirname(os.path.abspath(__file__))
|
|||||||
# Migration registry: version -> filename
|
# Migration registry: version -> filename
|
||||||
MIGRATIONS = {
|
MIGRATIONS = {
|
||||||
'v1.0': 'v1.0_initial.sql',
|
'v1.0': 'v1.0_initial.sql',
|
||||||
# Future: 'v1.1': 'v1.1_add_xyz.sql',
|
'v1.1': 'v1.1_pos_tables.sql',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
55
pos/migrations/v1.1_pos_tables.sql
Normal file
55
pos/migrations/v1.1_pos_tables.sql
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
-- /home/Autopartes/pos/migrations/v1.1_pos_tables.sql
|
||||||
|
-- POS Plan 3: Additional tables for sale payments and layaway items.
|
||||||
|
-- Run against each tenant DB.
|
||||||
|
|
||||||
|
-- Sale payments: tracks individual payment methods for a sale (especially mixed payments)
|
||||||
|
CREATE TABLE IF NOT EXISTS sale_payments (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
sale_id INTEGER REFERENCES sales(id),
|
||||||
|
register_id INTEGER REFERENCES cash_registers(id),
|
||||||
|
method VARCHAR(20) NOT NULL, -- efectivo, transferencia, tarjeta
|
||||||
|
amount NUMERIC(12,2) NOT NULL,
|
||||||
|
reference VARCHAR(100), -- transaction ref for non-cash
|
||||||
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_sale_payments_sale ON sale_payments(sale_id);
|
||||||
|
|
||||||
|
-- Customer payments: tracks credit payments (abonos) against customer balance
|
||||||
|
CREATE TABLE IF NOT EXISTS customer_payments (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
customer_id INTEGER REFERENCES customers(id),
|
||||||
|
amount NUMERIC(12,2) NOT NULL,
|
||||||
|
payment_method VARCHAR(20) NOT NULL DEFAULT 'efectivo',
|
||||||
|
reference VARCHAR(100),
|
||||||
|
employee_id INTEGER REFERENCES employees(id),
|
||||||
|
register_id INTEGER REFERENCES cash_registers(id),
|
||||||
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_customer_payments_customer ON customer_payments(customer_id);
|
||||||
|
|
||||||
|
-- Layaway items: line items for a layaway (mirrors quotation_items structure)
|
||||||
|
CREATE TABLE IF NOT EXISTS layaway_items (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
layaway_id INTEGER REFERENCES layaways(id),
|
||||||
|
inventory_id INTEGER REFERENCES inventory(id),
|
||||||
|
part_number VARCHAR(100),
|
||||||
|
name VARCHAR(300),
|
||||||
|
quantity INTEGER NOT NULL,
|
||||||
|
unit_price NUMERIC(12,2) NOT NULL,
|
||||||
|
discount_pct NUMERIC(5,2) DEFAULT 0,
|
||||||
|
tax_rate NUMERIC(5,4) DEFAULT 0.16,
|
||||||
|
subtotal NUMERIC(12,2) NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_layaway_items_layaway ON layaway_items(layaway_id);
|
||||||
|
|
||||||
|
-- Additional indexes for POS query performance
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_sales_register ON sales(register_id) WHERE status = 'completed';
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_sales_customer ON sales(customer_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_sales_created ON sales(created_at DESC);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_sales_branch_date ON sales(branch_id, created_at DESC);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_quotations_customer ON quotations(customer_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_layaways_customer ON layaways(customer_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_cash_registers_employee ON cash_registers(employee_id) WHERE status = 'open';
|
||||||
Reference in New Issue
Block a user