48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
"""Supplements CRUD."""
|
|
from .connection import query, execute, execute_returning
|
|
|
|
|
|
def insert(contract_id, document_id, supp_type="additional"):
|
|
return execute_returning(
|
|
"""INSERT INTO supplements (contract_id, document_id, type)
|
|
VALUES (%s, %s, %s) RETURNING *""",
|
|
(contract_id, document_id, supp_type),
|
|
)
|
|
|
|
|
|
def list_by_contract(contract_id):
|
|
"""Supplements with parsed documents, ordered by created_at."""
|
|
return query(
|
|
"""SELECT s.id, s.type, s.document_id, d.filename
|
|
FROM supplements s
|
|
JOIN documents d ON s.document_id = d.id
|
|
WHERE s.contract_id = %s AND d.elements_json IS NOT NULL
|
|
ORDER BY s.created_at""",
|
|
(contract_id,),
|
|
)
|
|
|
|
|
|
def get(supp_id):
|
|
rows = query("SELECT * FROM supplements WHERE id = %s", (supp_id,))
|
|
return rows[0] if rows else None
|
|
|
|
|
|
def delete_by_document(contract_id, filename):
|
|
"""Delete supplement+document by contract+filename."""
|
|
row = query(
|
|
"""SELECT s.id as sid, s.document_id FROM supplements s
|
|
JOIN documents d ON d.id = s.document_id
|
|
WHERE s.contract_id = %s AND d.filename = %s""",
|
|
(contract_id, filename),
|
|
)
|
|
if row:
|
|
r = row[0]
|
|
execute("DELETE FROM supplements WHERE id = %s", (r["sid"],))
|
|
execute("DELETE FROM documents WHERE id = %s", (r["document_id"],))
|
|
return True
|
|
return False
|
|
|
|
|
|
def delete(supp_id):
|
|
return execute("DELETE FROM supplements WHERE id = %s", (supp_id,))
|