Skip to content

Commit b69227f

Browse files
committed
Corrections to reports
1 parent 230c04e commit b69227f

23 files changed

Lines changed: 110 additions & 69 deletions

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

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

src/main/resources/reports/invoice_aging/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# Invoice Aging Report
22

3-
Displays customer invoice balances by aging buckets in both original currency and USD, along with invoice and account details.
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.
44

55
The snapshot view is: `v_report_invoice_aging`
66

77
## Prerequisites
88

9-
Run stored proc
9+
This report requires the `analytics_currency_conversion` table to be populated. See [insertMonthlyCurrencyConversionRates.ddl](../utils/insertMonthlyCurrencyConversionRates.ddl)
1010

11-
## Report Configuration
11+
## Report Creation
1212

1313
```
1414
curl -v \

src/main/resources/reports/invoice_aging/v_report_invoice_aging.ddl

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ SELECT
4848
a.invoice_original_amount_charged AS "Total Balance Due",
4949

5050
-- 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",
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",
5757

58-
cc.reference_rate * a.invoice_original_amount_charged AS "Total Balance Due USD",
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" ,
5959

6060
a.invoice_number AS "Invoice Number",
6161
a.bundle_external_key AS "Bundle External Key",
@@ -65,11 +65,11 @@ SELECT
6565
a.invoice_date AS "Invoice Date",
6666
a.invoice_original_amount_charged AS "Invoice Amount",
6767
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",
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",
7070
a.tenant_record_id
7171
FROM invoice_data a
72-
JOIN analytics_currency_conversion cc
72+
LEFT OUTER JOIN analytics_currency_conversion cc
7373
ON a.created_date >= cc.start_date
7474
AND a.created_date <= cc.end_date
7575
AND cc.currency = a.currency
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Invoice Aging No Payments Report
2+
3+
This report lists all customer invoices with no payments recorded, categorizing outstanding amounts into standard aging buckets and converting balances into USD for comparison.
4+
5+
The snapshot view is: `v_report_invoice_aging_no_payment`
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_no_payment",
21+
"reportType": "TABLE",
22+
"reportPrettyName": "Invoice Aging No Payments Report",
23+
"sourceTableName": "report_invoice_aging_no_payment",
24+
"refreshProcedureName": "refresh_report_invoice_aging_no_payment",
25+
"refreshFrequency": "DAILY"}' \
26+
"http://127.0.0.1:8080/plugins/killbill-analytics/reports"
27+
```
28+
29+
## Report UI:
30+
31+
![invoice-aging-no-payment.png](invoice-aging-no-payment.png)
287 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_no_payment as select * from v_report_invoice_aging_no_payment limit 0;
2+
3+
drop procedure if exists refresh_report_invoice_aging_no_payment;
4+
DELIMITER //
5+
CREATE PROCEDURE refresh_report_invoice_aging_no_payment()
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_no_payment;
14+
insert into report_invoice_aging_no_payment select * from v_report_invoice_aging_no_payment;
15+
COMMIT;
16+
17+
END;
18+
//
19+
DELIMITER ;

src/main/resources/reports/invoice_aging_no_payment/v_report_invoice_aging_no_payment.ddl

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
CREATE OR REPLACE VIEW v_report_invoice_aging_no_payment AS
12
WITH date_buckets AS (
23
SELECT
34
CURRENT_DATE AS today,
@@ -49,14 +50,14 @@ SELECT
4950
a.invoice_original_amount_charged AS "Total Balance Due",
5051

5152
-- 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",
53+
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",
54+
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",
55+
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",
56+
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",
57+
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",
58+
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",
5859

59-
cc.reference_rate * a.invoice_original_amount_charged AS "Total Balance Due USD",
60+
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" ,
6061

6162
a.invoice_number AS "Invoice Number",
6263
a.bundle_external_key AS "Bundle External Key",
@@ -66,11 +67,11 @@ SELECT
6667
a.invoice_date AS "Invoice Date",
6768
a.invoice_original_amount_charged AS "Invoice Amount",
6869
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",
70+
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",
71+
case when a.currency != 'USD' then ROUND(cc.reference_rate * a.invoice_balance, 4) else a.invoice_balance end AS "Invoice Balance USD",
7172
a.tenant_record_id
7273
FROM invoice_data a
73-
JOIN analytics_currency_conversion cc
74+
LEFT OUTER JOIN analytics_currency_conversion cc
7475
ON a.created_date >= cc.start_date
7576
AND a.created_date <= cc.end_date
7677
AND cc.currency = a.currency

src/main/resources/reports/invoice_credits_monthly/v_report_invoice_credits_monthly.ddl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ select
1515
, ic.invoice_original_amount_charged as "Invoice Amount"
1616
, ic.invoice_balance as "Invoice Balance"
1717
, ic.amount as "Invoice Credit Amount"
18-
, round(cc.reference_rate * ic.invoice_original_amount_charged,4) as "Invoice Amount USD"
19-
, round(cc.reference_rate * ic.invoice_balance,4) as "Invoice Balance USD"
20-
, round(cc.reference_rate * ic.amount,4) as "Invoice Credit Amount USD"
18+
, case when ic.currency != 'USD' THEN round(cc.reference_rate * ic.invoice_original_amount_charged,4) else invoice_original_amount_charged end as "Invoice Amount USD"
19+
, case when ic.currency != 'USD' THEN round(cc.reference_rate * ic.invoice_balance,4) else invoice_balance end as "Invoice Balance USD"
20+
, case when ic.currency != 'USD' THEN round(cc.reference_rate * ic.amount,4) else amount end as "Invoice Credit Amount USD"
2121
, ic.tenant_record_id
2222
from
2323
analytics_invoice_credits ic
24-
join analytics_currency_conversion cc on ic.created_date >= cc.start_date and ic.created_date <= cc.end_date and cc.currency =ic.currency
24+
left outer join analytics_currency_conversion cc on ic.created_date >= cc.start_date and ic.created_date <= cc.end_date and cc.currency =ic.currency
2525
where 1=1
2626
and ic.created_date >= cast(date_format(date_sub(sysdate(), interval '1' month), '%Y-%m-01') as date)
2727
and ic.created_date < cast(date_format(sysdate(), '%Y-%m-01') as date)
2828
and ic.report_group != 'test'
2929
order by
3030
invoice_number
31-
, ic.invoice_item_record_id; -- just for well defined ordering
31+
, ic.invoice_item_record_id; -- just for well defined ordering

src/main/resources/reports/invoice_item_adjustments_monthly/README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@
22

33
Report of all invoice item adjustments from the previous month, showing amounts in both original currency and USD equivalents.
44

5-
TODO: confirm above desc with ChatGPT
6-
75
The snapshot view is: `v_report_invoice_item_adjustments_monthly`
86

97
## Prerequisites
108

119
This report requires the `analytics_currency_conversion` table to be populated. See [insertMonthlyCurrencyConversionRates.ddl](../utils/insertMonthlyCurrencyConversionRates.ddl)
1210

13-
## Report Configuration
11+
## Report Creation
1412

1513
```
1614
curl -v \
36.2 KB
Loading

0 commit comments

Comments
 (0)