Skip to content

Commit b1b1147

Browse files
authored
Merge pull request #172 from reshmabidikar/work-for-ts-54
Work for TS#54 (Round 3)
2 parents c56d7cb + 5368ca2 commit b1b1147

39 files changed

Lines changed: 702 additions & 222 deletions

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

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

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.

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

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

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

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Invoice Aging Report
2+
3+
This report lists all customer invoice aging with remaining balances, breaking them into standard aging buckets and converting amounts to USD for easy comparison.
4+
5+
The snapshot view is: `v_report_invoice_aging`
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_aging",
21+
"reportType": "TABLE",
22+
"reportPrettyName": "Invoice Aging Report",
23+
"sourceTableName": "report_invoice_aging",
24+
"refreshProcedureName": "refresh_report_invoice_aging",
25+
"refreshFrequency": "DAILY"}' \
26+
"http://127.0.0.1:8080/plugins/killbill-analytics/reports"
27+
```
28+
29+
## Report UI:
30+
31+
![invoice-aging.png](invoice-aging.png)
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 CASE WHEN a.currency != 'USD' THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE a.invoice_original_amount_charged END 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 CASE WHEN a.currency != 'USD' THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE a.invoice_original_amount_charged END 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 CASE WHEN a.currency != 'USD' THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE a.invoice_original_amount_charged END 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 CASE WHEN a.currency != 'USD' THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE a.invoice_original_amount_charged END 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 CASE WHEN a.currency != 'USD' THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE a.invoice_original_amount_charged END ELSE 0 END AS "Balance due 120-150 Days USD",
56+
CASE WHEN a.invoice_creation_date < b.d_120_150 THEN CASE WHEN a.currency != 'USD' THEN ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) ELSE a.invoice_original_amount_charged END ELSE 0 END AS "Balance due 150+ Days USD",
57+
58+
CASE WHEN a.currency != 'USD' THEN cc.reference_rate * a.invoice_original_amount_charged ELSE a.invoice_original_amount_charged END 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+
case when a.currency != 'USD' then ROUND(cc.reference_rate * a.invoice_original_amount_charged, 4) else a.invoice_original_amount_charged end AS "Invoice Amount USD",
69+
case when a.currency != 'USD' then ROUND(cc.reference_rate * a.invoice_balance, 4) else a.invoice_balance end AS "Invoice Balance USD",
70+
a.tenant_record_id
71+
FROM invoice_data a
72+
LEFT OUTER 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;

0 commit comments

Comments
 (0)