52 lines
2.9 KiB
SQL
52 lines
2.9 KiB
SQL
CREATE TABLE animal_surgeries (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
animal_id INTEGER NOT NULL REFERENCES animals(id) ON DELETE CASCADE,
|
|
category TEXT NOT NULL,
|
|
procedure_name TEXT NOT NULL,
|
|
surgery_date TEXT NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'completed' CHECK(status IN ('planned','completed','cancelled')),
|
|
clinic_contact_id INTEGER REFERENCES directory_contacts(id) ON DELETE SET NULL,
|
|
veterinarian_contact_id INTEGER REFERENCES directory_contacts(id) ON DELETE SET NULL,
|
|
tariff_id INTEGER REFERENCES clinic_tariffs(id) ON DELETE SET NULL,
|
|
amount_cents INTEGER CHECK(amount_cents IS NULL OR amount_cents>=0),
|
|
anesthesia TEXT, notes TEXT, follow_up TEXT,
|
|
created_by INTEGER REFERENCES users(id) ON DELETE SET NULL,
|
|
created_at TEXT NOT NULL DEFAULT(datetime('now')), updated_at TEXT NOT NULL DEFAULT(datetime('now'))
|
|
);
|
|
CREATE INDEX idx_animal_surgeries_animal_date ON animal_surgeries(animal_id,surgery_date);
|
|
|
|
CREATE TABLE accounting_invoices (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
vendor_contact_id INTEGER REFERENCES directory_contacts(id) ON DELETE SET NULL,
|
|
reference TEXT NOT NULL COLLATE NOCASE,
|
|
invoice_date TEXT NOT NULL, due_date TEXT,
|
|
document_type TEXT NOT NULL DEFAULT 'invoice' CHECK(document_type IN ('invoice','credit','adjustment')),
|
|
status TEXT NOT NULL DEFAULT 'to_pay' CHECK(status IN ('to_pay','partial','paid','disputed','cancelled','credit')),
|
|
payment_method TEXT CHECK(payment_method IS NULL OR payment_method IN ('transfer','card','check','cash','direct_debit','other')),
|
|
paid_on TEXT,
|
|
total_ht_cents INTEGER,
|
|
total_ttc_cents INTEGER NOT NULL,
|
|
amount_due_cents INTEGER,
|
|
notes TEXT, source TEXT,
|
|
original_filename TEXT, stored_filename TEXT, mime_type TEXT, file_size INTEGER,
|
|
created_by INTEGER REFERENCES users(id) ON DELETE SET NULL,
|
|
created_at TEXT NOT NULL DEFAULT(datetime('now')), updated_at TEXT NOT NULL DEFAULT(datetime('now')),
|
|
UNIQUE(vendor_contact_id,reference)
|
|
);
|
|
CREATE INDEX idx_accounting_invoice_date ON accounting_invoices(invoice_date,status);
|
|
CREATE INDEX idx_accounting_invoice_vendor ON accounting_invoices(vendor_contact_id,invoice_date);
|
|
|
|
ALTER TABLE role_permissions RENAME TO role_permissions_legacy;
|
|
CREATE TABLE role_permissions (
|
|
role TEXT NOT NULL CHECK(role IN ('admin','responsable','benevole','lecture')),
|
|
module TEXT NOT NULL CHECK(module IN ('dashboard','animals','medical','care','directory','agenda','statistics','administrative','accounting','grants')),
|
|
can_view INTEGER NOT NULL DEFAULT 0 CHECK(can_view IN (0,1)),
|
|
can_edit INTEGER NOT NULL DEFAULT 0 CHECK(can_edit IN (0,1)),
|
|
updated_by INTEGER REFERENCES users(id) ON DELETE SET NULL,
|
|
updated_at TEXT NOT NULL DEFAULT(datetime('now')),
|
|
PRIMARY KEY(role,module)
|
|
);
|
|
INSERT INTO role_permissions SELECT * FROM role_permissions_legacy;
|
|
DROP TABLE role_permissions_legacy;
|
|
INSERT INTO role_permissions(role,module,can_view,can_edit) VALUES
|
|
('admin','accounting',1,1),('responsable','accounting',1,1),('benevole','accounting',0,0),('lecture','accounting',0,0);
|