Refactorization and splitting of schema files
This commit is contained in:
7
schema/views/01_AvailableCredits.sql
Normal file
7
schema/views/01_AvailableCredits.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
DROP VIEW IF EXISTS AvailableCredits;
|
||||
CREATE VIEW AvailableCredits AS
|
||||
SELECT credId, account, purpose, date,
|
||||
value - spent AS difference
|
||||
FROM Credit
|
||||
WHERE value != spent
|
||||
;
|
||||
11
schema/views/02_CurrentArrears.sql
Normal file
11
schema/views/02_CurrentArrears.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
DROP VIEW IF EXISTS CurrentArrears;
|
||||
CREATE VIEW CurrentArrears AS
|
||||
SELECT billId,
|
||||
debtor,
|
||||
targetCredit,
|
||||
purpose,
|
||||
date,
|
||||
value - paid AS difference
|
||||
FROM Debit
|
||||
WHERE value != paid
|
||||
;
|
||||
31
schema/views/03_History.sql
Normal file
31
schema/views/03_History.sql
Normal file
@@ -0,0 +1,31 @@
|
||||
-- Log of internal transfers
|
||||
DROP VIEW IF EXISTS History;
|
||||
CREATE VIEW History AS
|
||||
-- internal transfers with account as source
|
||||
SELECT DATE(timestamp) AS date,
|
||||
d.purpose AS purpose,
|
||||
d.debtor AS account,
|
||||
t.credId AS credId,
|
||||
t.amount AS debit,
|
||||
NULL AS credit,
|
||||
d.targetCredit AS contra,
|
||||
d.billId AS billId,
|
||||
t.note AS note
|
||||
FROM Transfer t
|
||||
LEFT JOIN Debit AS d ON d.billId = t.billId
|
||||
-- internal transfers with account as target
|
||||
UNION
|
||||
SELECT DATE(timestamp) AS date,
|
||||
d.purpose AS purpose,
|
||||
c.account AS account,
|
||||
d.targetCredit AS credId,
|
||||
NULL AS debit,
|
||||
t.amount AS credit,
|
||||
t.credId AS contra,
|
||||
d.billId AS billId,
|
||||
t.note AS note
|
||||
FROM Transfer t
|
||||
LEFT JOIN Debit AS d ON d.billId = t.billId
|
||||
LEFT JOIN Credit AS c ON c.credId = d.targetCredit
|
||||
ORDER BY date ASC
|
||||
;
|
||||
47
schema/views/04_Balance.sql
Normal file
47
schema/views/04_Balance.sql
Normal file
@@ -0,0 +1,47 @@
|
||||
DROP VIEW IF EXISTS Balance;
|
||||
CREATE VIEW Balance AS
|
||||
SELECT Account.ID AS ID,
|
||||
IFNULL(ac.allCredits,0) AS available,
|
||||
IFNULL(hi.credit,0) AS earned,
|
||||
IFNULL(hi.debit,0) AS spent,
|
||||
IFNULL(pr.allPromises, 0) AS promised,
|
||||
IFNULL(ca.allArrears, 0) AS arrears,
|
||||
even.until AS even_until
|
||||
FROM Account
|
||||
LEFT OUTER JOIN (
|
||||
SELECT debtor, sum(difference) AS allArrears
|
||||
FROM CurrentArrears
|
||||
GROUP BY debtor
|
||||
) AS ca ON Account.ID=ca.debtor
|
||||
LEFT OUTER JOIN (
|
||||
SELECT account, sum(difference) AS allCredits
|
||||
FROM AvailableCredits
|
||||
GROUP BY account
|
||||
) AS ac ON Account.ID=ac.account
|
||||
LEFT OUTER JOIN (
|
||||
SELECT a.ID AS ID, sum(difference) AS allPromises
|
||||
FROM CurrentArrears ca
|
||||
JOIN Credit c ON ca.targetCredit = c.credId
|
||||
JOIN Account a ON a.ID = c.account
|
||||
GROUP BY a.ID
|
||||
) AS pr ON Account.ID=pr.ID
|
||||
LEFT OUTER JOIN (
|
||||
SELECT account,
|
||||
sum(credit) AS credit,
|
||||
sum(debit) AS debit
|
||||
FROM History
|
||||
GROUP BY account
|
||||
) AS hi ON Account.ID=hi.account
|
||||
LEFT OUTER JOIN (
|
||||
SELECT d.debtor AS account,
|
||||
max(d.date) AS until
|
||||
FROM Debit d
|
||||
LEFT OUTER JOIN CurrentArrears ca ON d.debtor = ca.debtor
|
||||
GROUP BY d.debtor, ca.debtor
|
||||
HAVING COUNT(
|
||||
-- Restricts the counting to the settled debts:
|
||||
CASE d.value WHEN d.paid THEN 1 ELSE NULL END
|
||||
) -- Considers that there might be no current arrears:
|
||||
AND d.date <= IFNULL( min(ca.date), '9999-99-99' )
|
||||
) AS even ON Account.ID=even.account
|
||||
;
|
||||
21
schema/views/05_ReconstructedBankStatement.sql
Normal file
21
schema/views/05_ReconstructedBankStatement.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
DROP VIEW IF EXISTS ReconstructedBankStatement;
|
||||
CREATE VIEW ReconstructedBankStatement AS
|
||||
SELECT c.date AS date,
|
||||
c.purpose AS purpose,
|
||||
account,
|
||||
c.value AS credit,
|
||||
NULL AS debit
|
||||
FROM Credit AS c
|
||||
LEFT OUTER JOIN Debit AS d ON c.credId = d.targetCredit
|
||||
GROUP BY c.credId
|
||||
HAVING count(d.billId) == 0 -- exclude internal transfers
|
||||
UNION
|
||||
SELECT date,
|
||||
purpose,
|
||||
debtor AS account,
|
||||
NULL AS credit,
|
||||
value AS debit
|
||||
FROM Debit
|
||||
WHERE targetCredit IS NULL -- exclude internal transfers
|
||||
ORDER BY date ASC
|
||||
;
|
||||
54
schema/views/06_Report.sql
Normal file
54
schema/views/06_Report.sql
Normal file
@@ -0,0 +1,54 @@
|
||||
DROP VIEW IF EXISTS CreditsInFocus;
|
||||
CREATE VIEW CreditsInFocus AS
|
||||
SELECT account, date, credId, value, purpose
|
||||
FROM Credit
|
||||
WHERE value > spent
|
||||
UNION
|
||||
SELECT c.account, date, credId, value, purpose
|
||||
FROM Credit c
|
||||
JOIN Balance b ON b.ID = c.account
|
||||
WHERE c.date >= b.even_until
|
||||
GROUP BY c.credId
|
||||
;
|
||||
|
||||
-- Report view may be of use in communication with club members who are due
|
||||
-- of outstanding fees, listing what they have paid and what is yet to pay.
|
||||
DROP VIEW IF EXISTS Report;
|
||||
CREATE VIEW Report AS
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT account, date, credId, value, purpose -- relevant incomes
|
||||
FROM CreditsInFocus
|
||||
UNION
|
||||
SELECT debtor AS account, -- partial payments
|
||||
DATE(t.timestamp)
|
||||
AS date,
|
||||
t.credId AS credId,
|
||||
t.amount * -1 AS value,
|
||||
d.purpose || ' [' || d.billId || ']'
|
||||
|| CASE WHEN t.note IS NULL
|
||||
THEN ''
|
||||
ELSE ( x'0a' || '(' || t.note || ')' )
|
||||
END
|
||||
AS purpose
|
||||
FROM Debit d
|
||||
JOIN Transfer t ON t.billId = d.billId
|
||||
JOIN CreditsInFocus fc ON fc.credId=t.credId
|
||||
UNION
|
||||
SELECT debtor AS account, -- current arrears
|
||||
date,
|
||||
NULL AS credId,
|
||||
difference * -1 AS value,
|
||||
purpose || ' [' || billId || ']'
|
||||
|| x'0a' || '(YET TO PAY)'
|
||||
FROM CurrentArrears
|
||||
)
|
||||
ORDER BY account, credId IS NULL, credId,
|
||||
value < 0, date ASC
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user