44 lines
1.1 KiB
SQL
44 lines
1.1 KiB
SQL
-- When a transfer is revoked, the targetCredit of the associated bill is reduced. Hence we must
|
|
-- check if we can still have paid the debts linked to this transfer in an "is paid from" relation,
|
|
-- otherwise we have to revoke these transfers as well.
|
|
CREATE TRIGGER rebalanceReducedCredit
|
|
AFTER UPDATE OF value ON Credit
|
|
WHEN NEW.value < OLD.spent
|
|
BEGIN
|
|
|
|
REPLACE INTO __DO_NOT_MANIPULATE__trigger_memory (d, m)
|
|
SELECT
|
|
'from_' || NEW.credId,
|
|
billId
|
|
FROM Transfer
|
|
WHERE credId = NEW.credId
|
|
ORDER BY timestamp DESC
|
|
LIMIT 1
|
|
;
|
|
|
|
DELETE
|
|
FROM Transfer
|
|
WHERE credId = NEW.credId
|
|
AND billId IN (
|
|
SELECT billId
|
|
FROM __DO_NOT_MANIPULATE__trigger_memory
|
|
WHERE c = 'from_' || NEW.credId
|
|
)
|
|
;
|
|
|
|
INSERT INTO Transfer (credId, billId)
|
|
SELECT NEW.credId, m
|
|
FROM __DO_NOT_MANIPULATE__trigger_memory
|
|
WHERE d = 'from_' || NEW.credId
|
|
AND NEW.value > (
|
|
SELECT spent
|
|
FROM Credit
|
|
WHERE credId = NEW.credId
|
|
)
|
|
;
|
|
|
|
DELETE FROM __DO_NOT_MANIPULATE__trigger_memory WHERE d = 'from_' || NEW.credId;
|
|
|
|
END;
|
|
|