Publier Globinours 1.0.0-rc.3

This commit is contained in:
Alexandre NOEL 2026-09-03 12:39:15 +02:00
commit 9a2b4068da
325 changed files with 38230 additions and 20 deletions

View file

@ -0,0 +1,76 @@
PRAGMA foreign_keys = ON;
CREATE TABLE IF NOT EXISTS directory_contacts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
kind TEXT NOT NULL DEFAULT 'person' CHECK(kind IN ('person','organization')),
name TEXT NOT NULL,
phone TEXT,
email TEXT,
address TEXT,
postal_code TEXT,
city TEXT,
country TEXT NOT NULL DEFAULT 'France',
organization_id INTEGER,
notes TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
deleted_at TEXT,
FOREIGN KEY(organization_id) REFERENCES directory_contacts(id) ON DELETE SET NULL
);
CREATE TABLE IF NOT EXISTS directory_contact_roles (
contact_id INTEGER NOT NULL,
role TEXT NOT NULL CHECK(role IN ('fa','benevole','dirigeant','veterinaire','cabinet','crematorium','adoptant')),
PRIMARY KEY(contact_id, role),
FOREIGN KEY(contact_id) REFERENCES directory_contacts(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_directory_name ON directory_contacts(name);
CREATE INDEX IF NOT EXISTS idx_directory_role ON directory_contact_roles(role, contact_id);
ALTER TABLE medical_notes ADD COLUMN vet_contact_id INTEGER REFERENCES directory_contacts(id) ON DELETE SET NULL;
ALTER TABLE medical_notes ADD COLUMN clinic_contact_id INTEGER REFERENCES directory_contacts(id) ON DELETE SET NULL;
ALTER TABLE treatments ADD COLUMN vet_contact_id INTEGER REFERENCES directory_contacts(id) ON DELETE SET NULL;
ALTER TABLE treatments ADD COLUMN clinic_contact_id INTEGER REFERENCES directory_contacts(id) ON DELETE SET NULL;
ALTER TABLE vaccinations ADD COLUMN vet_contact_id INTEGER REFERENCES directory_contacts(id) ON DELETE SET NULL;
ALTER TABLE vaccinations ADD COLUMN clinic_contact_id INTEGER REFERENCES directory_contacts(id) ON DELETE SET NULL;
ALTER TABLE adoptions ADD COLUMN adopter_contact_id INTEGER REFERENCES directory_contacts(id) ON DELETE SET NULL;
INSERT INTO directory_contacts(kind, name)
SELECT 'organization', c.name FROM clinics c
WHERE NOT EXISTS (SELECT 1 FROM directory_contacts dc WHERE dc.kind='organization' AND lower(dc.name)=lower(c.name));
INSERT OR IGNORE INTO directory_contact_roles(contact_id, role)
SELECT dc.id, 'cabinet' FROM directory_contacts dc JOIN clinics c ON lower(c.name)=lower(dc.name);
INSERT INTO directory_contacts(kind, name, phone, email, address, postal_code, city)
SELECT 'person', a.adopter_name, MAX(a.adopter_phone), MAX(a.adopter_email), MAX(a.adopter_address), MAX(a.adopter_postal_code), MAX(a.adopter_city)
FROM adoptions a
WHERE NOT EXISTS (
SELECT 1 FROM directory_contacts dc
WHERE dc.kind='person' AND lower(dc.name)=lower(a.adopter_name)
AND lower(COALESCE(dc.email,''))=lower(COALESCE(a.adopter_email,''))
)
GROUP BY lower(a.adopter_name), lower(COALESCE(a.adopter_email,''));
INSERT OR IGNORE INTO directory_contact_roles(contact_id, role)
SELECT DISTINCT dc.id, 'adoptant' FROM directory_contacts dc JOIN adoptions a
ON dc.kind='person' AND lower(dc.name)=lower(a.adopter_name)
AND lower(COALESCE(dc.email,''))=lower(COALESCE(a.adopter_email,''));
UPDATE adoptions SET adopter_contact_id = (
SELECT dc.id FROM directory_contacts dc
WHERE dc.kind='person' AND lower(dc.name)=lower(adoptions.adopter_name)
AND lower(COALESCE(dc.email,''))=lower(COALESCE(adoptions.adopter_email,'')) LIMIT 1
) WHERE adopter_contact_id IS NULL;
INSERT INTO directory_contacts(kind, name)
SELECT 'person', vet_name FROM (
SELECT vet_name FROM medical_notes UNION SELECT vet_name FROM treatments UNION SELECT vet_name FROM vaccinations
) vets
WHERE vet_name IS NOT NULL AND trim(vet_name)!=''
AND NOT EXISTS (SELECT 1 FROM directory_contacts dc WHERE dc.kind='person' AND lower(dc.name)=lower(vets.vet_name));
INSERT OR IGNORE INTO directory_contact_roles(contact_id, role)
SELECT dc.id, 'veterinaire' FROM directory_contacts dc
WHERE EXISTS (
SELECT 1 FROM medical_notes WHERE lower(vet_name)=lower(dc.name)
UNION SELECT 1 FROM treatments WHERE lower(vet_name)=lower(dc.name)
UNION SELECT 1 FROM vaccinations WHERE lower(vet_name)=lower(dc.name)
);