Skip to content

Commit 82a6546

Browse files
committed
Reports from extracts/finance
1 parent a980896 commit 82a6546

31 files changed

Lines changed: 547 additions & 129 deletions

src/main/resources/extracts/finance/invoice_aging.sql

Lines changed: 0 additions & 58 deletions
This file was deleted.

src/main/resources/extracts/finance/invoice_aging_no_pmt.sql

Lines changed: 0 additions & 60 deletions
This file was deleted.
228 KB
Loading
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
create table report_invoice_aging as select * from v_report_invoice_aging limit 0;
2+
3+
drop procedure if exists refresh_report_invoice_aging;
4+
DELIMITER //
5+
CREATE PROCEDURE refresh_report_invoice_aging()
6+
BEGIN
7+
8+
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
9+
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
10+
11+
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
12+
START TRANSACTION;
13+
delete from report_invoice_aging;
14+
insert into report_invoice_aging select * from v_report_invoice_aging;
15+
COMMIT;
16+
17+
END;
18+
//
19+
DELIMITER ;
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
CREATE OR REPLACE VIEW v_report_invoice_aging AS
2+
WITH date_buckets AS (
3+
SELECT
4+
CURRENT_DATE AS today,
5+
CURRENT_DATE - INTERVAL 30 DAY AS d_0_30,
6+
CURRENT_DATE - INTERVAL 60 DAY AS d_30_60,
7+
CURRENT_DATE - INTERVAL 90 DAY AS d_60_90,
8+
CURRENT_DATE - INTERVAL 120 DAY AS d_90_120,
9+
CURRENT_DATE - INTERVAL 150 DAY AS d_120_150
10+
),
11+
invoice_data AS (
12+
SELECT
13+
ii.invoice_number,
14+
ii.account_name,
15+
ii.account_external_key,
16+
CAST(ii.created_date AS DATE) AS invoice_creation_date,
17+
CAST(ii.invoice_date AS DATE) AS invoice_date,
18+
CAST(ii.start_date AS DATE) AS service_start_date,
19+
CAST(ii.end_date AS DATE) AS service_end_date,
20+
ii.bundle_external_key,
21+
ii.product_name,
22+
ii.slug,
23+
ii.currency,
24+
ii.invoice_original_amount_charged,
25+
ii.invoice_balance,
26+
ii.amount,
27+
ii.created_date,
28+
ii.invoice_item_record_id,
29+
ii.tenant_record_id
30+
FROM analytics_invoice_items ii
31+
WHERE ii.invoice_date < CAST(DATE_FORMAT(SYSDATE(), '%Y-%m-01') AS DATE)
32+
AND ii.report_group != 'test'
33+
AND ii.invoice_balance > 0
34+
)
35+
SELECT
36+
a.account_name AS "Customer Name",
37+
a.account_external_key AS "Account Number",
38+
a.currency AS "Currency",
39+
40+
-- Balance due buckets
41+
CASE WHEN a.invoice_creation_date > b.d_0_30 THEN a.invoice_original_amount_charged ELSE 0 END AS "Balance due 0-30 Days",
42+
CASE WHEN a.invoice_creation_date BETWEEN b.d_30_60 AND b.d_0_30 THEN a.invoice_original_amount_charged ELSE 0 END AS "Balance due 30-60 Days",
43+
CASE WHEN a.invoice_creation_date BETWEEN b.d_60_90 AND b.d_30_60 THEN a.invoice_original_amount_charged ELSE 0 END AS "Balance due 60-90 Days",
44+
CASE WHEN a.invoice_creation_date BETWEEN b.d_90_120 AND b.d_60_90 THEN a.invoice_original_amount_charged ELSE 0 END AS "Balance due 90-120 Days",
45+
CASE WHEN a.invoice_creation_date BETWEEN b.d_120_150 AND b.d_90_120 THEN a.invoice_original_amount_charged ELSE 0 END AS "Balance due 120-150 Days",
46+
CASE WHEN a.invoice_creation_date < b.d_120_150 THEN a.invoice_original_amount_charged ELSE 0 END AS "Balance due 150+ Days",
47+
48+
a.invoice_original_amount_charged AS "Total Balance Due",
49+
50+
-- Balance due in USD
51+
CASE WHEN a.invoice_creation_date > b.d_0_30 THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE 0 END AS "Balance due 0-30 Days USD",
52+
CASE WHEN a.invoice_creation_date BETWEEN b.d_30_60 AND b.d_0_30 THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE 0 END AS "Balance due 30-60 Days USD",
53+
CASE WHEN a.invoice_creation_date BETWEEN b.d_60_90 AND b.d_30_60 THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE 0 END AS "Balance due 60-90 Days USD",
54+
CASE WHEN a.invoice_creation_date BETWEEN b.d_90_120 AND b.d_60_90 THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE 0 END AS "Balance due 90-120 Days USD",
55+
CASE WHEN a.invoice_creation_date BETWEEN b.d_120_150 AND b.d_90_120 THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE 0 END AS "Balance due 120-150 Days USD",
56+
CASE WHEN a.invoice_creation_date < b.d_120_150 THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE 0 END AS "Balance due 150+ Days USD",
57+
58+
cc.reference_rate * a.invoice_original_amount_charged AS "Total Balance Due USD",
59+
60+
a.invoice_number AS "Invoice Number",
61+
a.bundle_external_key AS "Bundle External Key",
62+
a.slug AS "Slug",
63+
a.service_start_date AS "Service Start Date",
64+
a.service_end_date AS "Service End Date",
65+
a.invoice_date AS "Invoice Date",
66+
a.invoice_original_amount_charged AS "Invoice Amount",
67+
a.invoice_balance AS "Invoice Balance",
68+
ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) AS "Invoice Amount USD",
69+
ROUND(cc.reference_rate * a.invoice_balance, 4) AS "Invoice Balance USD",
70+
a.tenant_record_id
71+
FROM invoice_data a
72+
JOIN analytics_currency_conversion cc
73+
ON a.created_date >= cc.start_date
74+
AND a.created_date <= cc.end_date
75+
AND cc.currency = a.currency
76+
CROSS JOIN date_buckets b
77+
ORDER BY a.account_name, a.invoice_number, a.invoice_item_record_id;
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
WITH date_buckets AS (
2+
SELECT
3+
CURRENT_DATE AS today,
4+
CURRENT_DATE - INTERVAL 30 DAY AS d_0_30,
5+
CURRENT_DATE - INTERVAL 60 DAY AS d_30_60,
6+
CURRENT_DATE - INTERVAL 90 DAY AS d_60_90,
7+
CURRENT_DATE - INTERVAL 120 DAY AS d_90_120,
8+
CURRENT_DATE - INTERVAL 150 DAY AS d_120_150
9+
),
10+
invoice_data AS (
11+
SELECT
12+
ii.invoice_number,
13+
ii.account_name,
14+
ii.account_external_key,
15+
CAST(ii.created_date AS DATE) AS invoice_creation_date,
16+
CAST(ii.invoice_date AS DATE) AS invoice_date,
17+
CAST(ii.start_date AS DATE) AS service_start_date,
18+
CAST(ii.end_date AS DATE) AS service_end_date,
19+
ii.bundle_external_key,
20+
ii.product_name,
21+
ii.slug,
22+
ii.currency,
23+
ii.invoice_original_amount_charged,
24+
ii.invoice_balance,
25+
ii.amount,
26+
ii.created_date,
27+
ii.invoice_item_record_id,
28+
ii.tenant_record_id
29+
FROM analytics_invoice_items ii
30+
WHERE ii.invoice_date < CAST(DATE_FORMAT(SYSDATE(), '%Y-%m-01') AS DATE)
31+
AND ii.report_group != 'test'
32+
and ii.amount > 0
33+
and ii.invoice_amount_paid=0
34+
and ii.invoice_amount_charged=ii.invoice_original_amount_charged
35+
)
36+
SELECT
37+
a.account_name AS "Customer Name",
38+
a.account_external_key AS "Account Number",
39+
a.currency AS "Currency",
40+
41+
-- Balance due buckets
42+
CASE WHEN a.invoice_creation_date > b.d_0_30 THEN a.invoice_original_amount_charged ELSE 0 END AS "Balance due 0-30 Days",
43+
CASE WHEN a.invoice_creation_date BETWEEN b.d_30_60 AND b.d_0_30 THEN a.invoice_original_amount_charged ELSE 0 END AS "Balance due 30-60 Days",
44+
CASE WHEN a.invoice_creation_date BETWEEN b.d_60_90 AND b.d_30_60 THEN a.invoice_original_amount_charged ELSE 0 END AS "Balance due 60-90 Days",
45+
CASE WHEN a.invoice_creation_date BETWEEN b.d_90_120 AND b.d_60_90 THEN a.invoice_original_amount_charged ELSE 0 END AS "Balance due 90-120 Days",
46+
CASE WHEN a.invoice_creation_date BETWEEN b.d_120_150 AND b.d_90_120 THEN a.invoice_original_amount_charged ELSE 0 END AS "Balance due 120-150 Days",
47+
CASE WHEN a.invoice_creation_date < b.d_120_150 THEN a.invoice_original_amount_charged ELSE 0 END AS "Balance due 150+ Days",
48+
49+
a.invoice_original_amount_charged AS "Total Balance Due",
50+
51+
-- Balance due in USD
52+
CASE WHEN a.invoice_creation_date > b.d_0_30 THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE 0 END AS "Balance due 0-30 Days USD",
53+
CASE WHEN a.invoice_creation_date BETWEEN b.d_30_60 AND b.d_0_30 THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE 0 END AS "Balance due 30-60 Days USD",
54+
CASE WHEN a.invoice_creation_date BETWEEN b.d_60_90 AND b.d_30_60 THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE 0 END AS "Balance due 60-90 Days USD",
55+
CASE WHEN a.invoice_creation_date BETWEEN b.d_90_120 AND b.d_60_90 THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE 0 END AS "Balance due 90-120 Days USD",
56+
CASE WHEN a.invoice_creation_date BETWEEN b.d_120_150 AND b.d_90_120 THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE 0 END AS "Balance due 120-150 Days USD",
57+
CASE WHEN a.invoice_creation_date < b.d_120_150 THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE 0 END AS "Balance due 150+ Days USD",
58+
59+
cc.reference_rate * a.invoice_original_amount_charged AS "Total Balance Due USD",
60+
61+
a.invoice_number AS "Invoice Number",
62+
a.bundle_external_key AS "Bundle External Key",
63+
a.slug AS "Slug",
64+
a.service_start_date AS "Service Start Date",
65+
a.service_end_date AS "Service End Date",
66+
a.invoice_date AS "Invoice Date",
67+
a.invoice_original_amount_charged AS "Invoice Amount",
68+
a.invoice_balance AS "Invoice Balance",
69+
ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) AS "Invoice Amount USD",
70+
ROUND(cc.reference_rate * a.invoice_balance, 4) AS "Invoice Balance USD",
71+
a.tenant_record_id
72+
FROM invoice_data a
73+
JOIN analytics_currency_conversion cc
74+
ON a.created_date >= cc.start_date
75+
AND a.created_date <= cc.end_date
76+
AND cc.currency = a.currency
77+
CROSS JOIN date_buckets b
78+
ORDER BY a.account_name, a.invoice_number, a.invoice_item_record_id;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Invoice Credits Monthly Report
2+
3+
Report of all invoice credits from the previous month, showing amounts in both original currency and USD equivalents.
4+
5+
The snapshot view is: `v_report_invoice_credits_monthly`
6+
7+
## Prerequisites
8+
9+
This report requires the `analytics_currency_conversion` table to be populated. See [insertMonthlyCurrencyConversionRates.ddl](../utils/insertMonthlyCurrencyConversionRates.ddl)
10+
11+
## Report Creation
12+
13+
```
14+
curl -v \
15+
-X POST \
16+
-u admin:password \
17+
-H "X-Killbill-ApiKey:bob" \
18+
-H "X-Killbill-ApiSecret:lazar" \
19+
-H 'Content-Type: application/json' \
20+
-d '{"reportName": "report_invoice_credits_monthly",
21+
"reportType": "TABLE",
22+
"reportPrettyName": "Invoice Credits Monthly Report",
23+
"sourceTableName": "report_invoice_credits_monthly",
24+
"refreshProcedureName": "refresh_report_invoice_credits_monthly",
25+
"refreshFrequency": "DAILY"}' \
26+
"http://127.0.0.1:8080/plugins/killbill-analytics/reports"
27+
```
28+
29+
## Report UI:
30+
31+
![invoice-credits-monthly.png](invoice-credits-monthly.png)
152 KB
Loading
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
create table report_invoice_credits_monthly as select * from v_report_invoice_credits_monthly limit 0;
2+
3+
drop procedure if exists refresh_report_invoice_credits_monthly;
4+
DELIMITER //
5+
CREATE PROCEDURE refresh_report_invoice_credits_monthly()
6+
BEGIN
7+
8+
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
9+
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
10+
11+
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
12+
START TRANSACTION;
13+
delete from report_invoice_credits_monthly;
14+
insert into report_invoice_credits_monthly select * from v_report_invoice_credits_monthly;
15+
COMMIT;
16+
17+
END;
18+
//
19+
DELIMITER ;

0 commit comments

Comments
 (0)