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
|
||||
MIGRATIONS = {
|
||||
'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