FINERACT-2386: Update read query to support other products
This commit is contained in:
+66
-16
@@ -79,25 +79,75 @@ public class JournalEntryAggregationJobReader extends JdbcCursorItemReader<Journ
|
|||||||
|
|
||||||
private String buildAggregationQuery() {
|
private String buildAggregationQuery() {
|
||||||
return """
|
return """
|
||||||
SELECT lp.id AS productId,
|
SELECT
|
||||||
acc_gl_account.id AS glAccountId,
|
COALESCE(
|
||||||
acc_gl_journal_entry.entity_type_enum AS entityTypeEnum,
|
loan_product.id,
|
||||||
acc_gl_journal_entry.office_id AS officeId,
|
savings_product.id,
|
||||||
aw.owner_id AS externalOwner,
|
prov_product.id,
|
||||||
SUM(CASE WHEN acc_gl_journal_entry.type_enum = 2 THEN amount ELSE 0 END) AS debitAmount,
|
share_product.id
|
||||||
SUM(CASE WHEN acc_gl_journal_entry.type_enum = 1 THEN amount ELSE 0 END) AS creditAmount,
|
) AS productId,
|
||||||
acc_gl_journal_entry.submitted_on_date as aggregatedOnDate,
|
acc_gl_account.id AS glAccountId,
|
||||||
acc_gl_journal_entry.currency_code as currencyCode
|
acc_gl_journal_entry.entity_type_enum AS entityTypeEnum,
|
||||||
|
acc_gl_journal_entry.office_id AS officeId,
|
||||||
|
aw.owner_id AS externalOwner,
|
||||||
|
SUM(CASE WHEN acc_gl_journal_entry.type_enum = 2 THEN amount ELSE 0 END) AS debitAmount,
|
||||||
|
SUM(CASE WHEN acc_gl_journal_entry.type_enum = 1 THEN amount ELSE 0 END) AS creditAmount,
|
||||||
|
acc_gl_journal_entry.submitted_on_date AS aggregatedOnDate,
|
||||||
|
acc_gl_journal_entry.currency_code AS currencyCode
|
||||||
FROM acc_gl_account
|
FROM acc_gl_account
|
||||||
JOIN acc_gl_journal_entry ON acc_gl_account.id = acc_gl_journal_entry.account_id
|
JOIN acc_gl_journal_entry
|
||||||
JOIN m_loan m ON m.id = acc_gl_journal_entry.entity_id
|
ON acc_gl_account.id = acc_gl_journal_entry.account_id
|
||||||
JOIN m_product_loan lp ON lp.id = m.product_id
|
|
||||||
|
-- entity_type_enum = 1 → LOAN
|
||||||
|
LEFT JOIN m_loan loan
|
||||||
|
ON loan.id = acc_gl_journal_entry.entity_id
|
||||||
|
AND acc_gl_journal_entry.entity_type_enum = 1
|
||||||
|
LEFT JOIN m_product_loan loan_product
|
||||||
|
ON loan_product.id = loan.product_id
|
||||||
|
AND acc_gl_journal_entry.entity_type_enum = 1
|
||||||
|
|
||||||
|
-- entity_type_enum = 2 → SAVING
|
||||||
|
LEFT JOIN m_savings_account savings
|
||||||
|
ON savings.id = acc_gl_journal_entry.entity_id
|
||||||
|
AND acc_gl_journal_entry.entity_type_enum = 2
|
||||||
|
LEFT JOIN m_savings_product savings_product
|
||||||
|
ON savings_product.id = savings.product_id
|
||||||
|
AND acc_gl_journal_entry.entity_type_enum = 2
|
||||||
|
|
||||||
|
-- entity_type_enum = 3 → PROVISIONING
|
||||||
|
LEFT JOIN m_provisioning_history prov
|
||||||
|
ON prov.id = acc_gl_journal_entry.entity_id
|
||||||
|
AND acc_gl_journal_entry.entity_type_enum = 3
|
||||||
|
LEFT JOIN m_loanproduct_provisioning_entry prov_entry
|
||||||
|
ON prov_entry.history_id = prov.id
|
||||||
|
AND acc_gl_journal_entry.entity_type_enum = 3
|
||||||
|
LEFT JOIN m_product_loan prov_product
|
||||||
|
ON prov_product.id = prov_entry.product_id
|
||||||
|
AND acc_gl_journal_entry.entity_type_enum = 3
|
||||||
|
|
||||||
|
-- entity_type_enum = 4 → SHARED
|
||||||
|
LEFT JOIN m_share_account share
|
||||||
|
ON share.id = acc_gl_journal_entry.entity_id
|
||||||
|
AND acc_gl_journal_entry.entity_type_enum = 4
|
||||||
|
LEFT JOIN m_share_product share_product
|
||||||
|
ON share_product.id = share.product_id
|
||||||
|
AND acc_gl_journal_entry.entity_type_enum = 4
|
||||||
|
|
||||||
|
-- external owner
|
||||||
LEFT JOIN m_external_asset_owner_journal_entry_mapping aw
|
LEFT JOIN m_external_asset_owner_journal_entry_mapping aw
|
||||||
ON aw.journal_entry_id = acc_gl_journal_entry.id
|
ON aw.journal_entry_id = acc_gl_journal_entry.id
|
||||||
WHERE acc_gl_journal_entry.entity_type_enum = 1
|
|
||||||
AND acc_gl_journal_entry.submitted_on_date > ?
|
WHERE acc_gl_journal_entry.submitted_on_date > ?
|
||||||
AND acc_gl_journal_entry.submitted_on_date <= ?
|
AND acc_gl_journal_entry.submitted_on_date <= ?
|
||||||
GROUP BY productId, glAccountId, externalOwner, aggregatedOnDate, currencyCode, entityTypeEnum, officeId
|
|
||||||
|
GROUP BY
|
||||||
|
productId,
|
||||||
|
glAccountId,
|
||||||
|
externalOwner,
|
||||||
|
aggregatedOnDate,
|
||||||
|
currencyCode,
|
||||||
|
entityTypeEnum,
|
||||||
|
officeId
|
||||||
""";
|
""";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+120
-20
@@ -112,26 +112,6 @@
|
|||||||
<addForeignKeyConstraint baseColumnNames="created_by" baseTableName="m_journal_entry_aggregation_tracking" constraintName="FK_GL_JOURNAL_ENTRY_AGGREGATION_TRACKING_ON_CREATED_BY" referencedColumnNames="id" referencedTableName="m_appuser"/>
|
<addForeignKeyConstraint baseColumnNames="created_by" baseTableName="m_journal_entry_aggregation_tracking" constraintName="FK_GL_JOURNAL_ENTRY_AGGREGATION_TRACKING_ON_CREATED_BY" referencedColumnNames="id" referencedTableName="m_appuser"/>
|
||||||
<addForeignKeyConstraint baseColumnNames="last_modified_by" baseTableName="m_journal_entry_aggregation_tracking" constraintName="FK_GL_JOURNAL_ENTRY_AGGREGATION_TRACKING_ON_LAST_MODIFIED_BY" referencedColumnNames="id" referencedTableName="m_appuser"/>
|
<addForeignKeyConstraint baseColumnNames="last_modified_by" baseTableName="m_journal_entry_aggregation_tracking" constraintName="FK_GL_JOURNAL_ENTRY_AGGREGATION_TRACKING_ON_LAST_MODIFIED_BY" referencedColumnNames="id" referencedTableName="m_appuser"/>
|
||||||
</changeSet>
|
</changeSet>
|
||||||
<changeSet id="4" author="fineract" runInTransaction="false" context="postgresql">
|
|
||||||
<preConditions onFail="MARK_RAN">
|
|
||||||
<not>
|
|
||||||
<indexExists tableName="m_journal_entry_aggregation_tracking" columnNames="submitted_on_date"/>
|
|
||||||
</not>
|
|
||||||
</preConditions>
|
|
||||||
<sql>
|
|
||||||
create index concurrently idx_m_journal_entry_aggregation_tracking on m_journal_entry_aggregation_tracking(submitted_on_date);
|
|
||||||
</sql>
|
|
||||||
</changeSet>
|
|
||||||
<changeSet id="5" author="fineract" runInTransaction="false" context="postgresql">
|
|
||||||
<preConditions onFail="MARK_RAN">
|
|
||||||
<not>
|
|
||||||
<indexExists tableName="m_journal_entry_aggregation_tracking" columnNames="aggregated_on_date_to"/>
|
|
||||||
</not>
|
|
||||||
</preConditions>
|
|
||||||
<sql>
|
|
||||||
create unique index concurrently idx2_m_journal_entry_aggregation_tracking on m_journal_entry_aggregation_tracking(aggregated_on_date_to);
|
|
||||||
</sql>
|
|
||||||
</changeSet>
|
|
||||||
|
|
||||||
<changeSet id="6" author="fineract" context="mysql">
|
<changeSet id="6" author="fineract" context="mysql">
|
||||||
<preConditions onFail="MARK_RAN">
|
<preConditions onFail="MARK_RAN">
|
||||||
@@ -223,6 +203,26 @@
|
|||||||
<addForeignKeyConstraint baseColumnNames="created_by" baseTableName="m_journal_entry_aggregation_tracking" constraintName="FK_GL_JOURNAL_ENTRY_AGGREGATION_TRACKING_ON_CREATED_BY" referencedColumnNames="id" referencedTableName="m_appuser"/>
|
<addForeignKeyConstraint baseColumnNames="created_by" baseTableName="m_journal_entry_aggregation_tracking" constraintName="FK_GL_JOURNAL_ENTRY_AGGREGATION_TRACKING_ON_CREATED_BY" referencedColumnNames="id" referencedTableName="m_appuser"/>
|
||||||
<addForeignKeyConstraint baseColumnNames="last_modified_by" baseTableName="m_journal_entry_aggregation_tracking" constraintName="FK_GL_JOURNAL_ENTRY_AGGREGATION_TRACKING_ON_LAST_MODIFIED_BY" referencedColumnNames="id" referencedTableName="m_appuser"/>
|
<addForeignKeyConstraint baseColumnNames="last_modified_by" baseTableName="m_journal_entry_aggregation_tracking" constraintName="FK_GL_JOURNAL_ENTRY_AGGREGATION_TRACKING_ON_LAST_MODIFIED_BY" referencedColumnNames="id" referencedTableName="m_appuser"/>
|
||||||
</changeSet>
|
</changeSet>
|
||||||
|
<changeSet id="4" author="fineract" runInTransaction="false" context="postgresql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<indexExists tableName="m_journal_entry_aggregation_tracking" columnNames="submitted_on_date"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
<sql>
|
||||||
|
create index concurrently idx_m_journal_entry_aggregation_tracking on m_journal_entry_aggregation_tracking(submitted_on_date);
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="5" author="fineract" runInTransaction="false" context="postgresql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<indexExists tableName="m_journal_entry_aggregation_tracking" columnNames="aggregated_on_date_to"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
<sql>
|
||||||
|
create unique index concurrently idx2_m_journal_entry_aggregation_tracking on m_journal_entry_aggregation_tracking(aggregated_on_date_to);
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
<changeSet id="9" author="fineract" runInTransaction="false" context="mysql">
|
<changeSet id="9" author="fineract" runInTransaction="false" context="mysql">
|
||||||
<preConditions onFail="MARK_RAN">
|
<preConditions onFail="MARK_RAN">
|
||||||
<not>
|
<not>
|
||||||
@@ -243,4 +243,104 @@
|
|||||||
create unique index idx2_m_journal_entry_aggregation_tracking on m_journal_entry_aggregation_tracking(aggregated_on_date_to);
|
create unique index idx2_m_journal_entry_aggregation_tracking on m_journal_entry_aggregation_tracking(aggregated_on_date_to);
|
||||||
</sql>
|
</sql>
|
||||||
</changeSet>
|
</changeSet>
|
||||||
|
<changeSet id="11" author="fineract" runInTransaction="false" context="postgresql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<indexExists tableName="m_journal_entry_aggregation_tracking" columnNames="job_execution_id"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
<sql>
|
||||||
|
create index concurrently idx_m_jour_ent_aggr_trac_job_exec_id on m_journal_entry_aggregation_tracking(job_execution_id);
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="12" author="fineract" runInTransaction="false" context="mysql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<indexExists tableName="m_journal_entry_aggregation_tracking" columnNames="job_execution_id"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
<sql>
|
||||||
|
create index idx_m_jour_ent_aggr_trac_job_exec_id on m_journal_entry_aggregation_tracking(job_execution_id);
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="13" author="fineract" runInTransaction="false" context="postgresql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<indexExists tableName="m_journal_entry_aggregation_summary" columnNames="job_execution_id"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
<sql>
|
||||||
|
create index concurrently idx_m_jour_ent_aggr_sum_job_exec_id on m_journal_entry_aggregation_summary(job_execution_id);
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="14" author="fineract" runInTransaction="false" context="mysql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<indexExists tableName="m_journal_entry_aggregation_summary" columnNames="job_execution_id"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
<sql>
|
||||||
|
create index idx_m_jour_ent_aggr_sum_job_exec_id on m_journal_entry_aggregation_summary(job_execution_id);
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="15" author="fineract" runInTransaction="false" context="postgresql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<indexExists tableName="m_journal_entry_aggregation_summary" columnNames="product_id,entity_type_enum"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
<sql>
|
||||||
|
create index concurrently idx_m_jour_ent_aggr_sum_prod_id_entity_type on m_journal_entry_aggregation_summary(product_id, entity_type_enum);
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="16" author="fineract" runInTransaction="false" context="mysql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<indexExists tableName="m_journal_entry_aggregation_summary" columnNames="product_id,entity_type_enum"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
<sql>
|
||||||
|
create index idx_m_jour_ent_aggr_sum_prod_id_entity_type on m_journal_entry_aggregation_summary(product_id, entity_type_enum);
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="17" author="fineract" runInTransaction="false" context="postgresql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<indexExists tableName="m_journal_entry_aggregation_summary" columnNames="aggregated_on_date"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
<sql>
|
||||||
|
create index concurrently idx_m_jour_ent_aggr_sum_aggr_date on m_journal_entry_aggregation_summary(aggregated_on_date);
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="18" author="fineract" runInTransaction="false" context="mysql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<indexExists tableName="m_journal_entry_aggregation_summary" columnNames="aggregated_on_date"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
<sql>
|
||||||
|
create index idx_m_jour_ent_aggr_sum_aggr_date on m_journal_entry_aggregation_summary(aggregated_on_date);
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="19" author="fineract" runInTransaction="false" context="postgresql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<indexExists tableName="m_journal_entry_aggregation_summary" columnNames="office_id"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
<sql>
|
||||||
|
create index concurrently idx_m_jour_ent_aggr_sum_office_id on m_journal_entry_aggregation_summary(office_id);
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
|
<changeSet id="20" author="fineract" runInTransaction="false" context="mysql">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<indexExists tableName="m_journal_entry_aggregation_summary" columnNames="office_id"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
<sql>
|
||||||
|
create index idx_m_jour_ent_aggr_sum_office_id on m_journal_entry_aggregation_summary(office_id);
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
|
|||||||
+1
-5
@@ -23,7 +23,7 @@
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
|
||||||
|
|
||||||
<changeSet author="fineract" id="trial-balance-summary-with-asset-owner-update-1">
|
<changeSet author="fineract" id="trial-balance-summary-with-asset-owner-update-2">
|
||||||
<update tableName="stretchy_report">
|
<update tableName="stretchy_report">
|
||||||
<column name="report_sql" value="WITH retained_earning AS (
|
<column name="report_sql" value="WITH retained_earning AS (
|
||||||
SELECT DISTINCT '${endDate}' AS postingdate,
|
SELECT DISTINCT '${endDate}' AS postingdate,
|
||||||
@@ -46,7 +46,6 @@
|
|||||||
FROM m_journal_entry_aggregation_tracking
|
FROM m_journal_entry_aggregation_tracking
|
||||||
),
|
),
|
||||||
summary_snapshot_baseline_data AS (
|
summary_snapshot_baseline_data AS (
|
||||||
--using m_journal_entry_aggregation_summary to fetch aggregated journal entry data
|
|
||||||
SELECT lp.NAME AS productname,
|
SELECT lp.NAME AS productname,
|
||||||
acc_gl_account.gl_code AS glcode,
|
acc_gl_account.gl_code AS glcode,
|
||||||
acc_gl_account.NAME AS glname,
|
acc_gl_account.NAME AS glname,
|
||||||
@@ -63,7 +62,6 @@
|
|||||||
GROUP BY productname, glcode, glname, assetowner
|
GROUP BY productname, glcode, glname, assetowner
|
||||||
),
|
),
|
||||||
post_snapshot_delta_data AS (
|
post_snapshot_delta_data AS (
|
||||||
-- still using acc_gl_journal_entry for dates after last aggregated data and before the cob date
|
|
||||||
SELECT lp.NAME AS productname,
|
SELECT lp.NAME AS productname,
|
||||||
acc_gl_account.gl_code AS glcode,
|
acc_gl_account.gl_code AS glcode,
|
||||||
acc_gl_account.NAME AS glname,
|
acc_gl_account.NAME AS glname,
|
||||||
@@ -82,7 +80,6 @@
|
|||||||
AND (acc_gl_journal_entry.office_id = ${officeId})
|
AND (acc_gl_journal_entry.office_id = ${officeId})
|
||||||
GROUP BY productname, glcode, glname, assetowner
|
GROUP BY productname, glcode, glname, assetowner
|
||||||
),
|
),
|
||||||
-- fetch all data before cob date
|
|
||||||
merged_historical_data AS (
|
merged_historical_data AS (
|
||||||
SELECT summary_snapshot_baseline_data.productname,
|
SELECT summary_snapshot_baseline_data.productname,
|
||||||
summary_snapshot_baseline_data.glcode,
|
summary_snapshot_baseline_data.glcode,
|
||||||
@@ -95,7 +92,6 @@
|
|||||||
AND summary_snapshot_baseline_data.productname = post_snapshot_delta_data.productname
|
AND summary_snapshot_baseline_data.productname = post_snapshot_delta_data.productname
|
||||||
AND summary_snapshot_baseline_data.assetowner = post_snapshot_delta_data.assetowner
|
AND summary_snapshot_baseline_data.assetowner = post_snapshot_delta_data.assetowner
|
||||||
),
|
),
|
||||||
-- fetch data for cob date
|
|
||||||
current_cob_data AS (
|
current_cob_data AS (
|
||||||
SELECT lp.name AS productname,
|
SELECT lp.name AS productname,
|
||||||
account_id,
|
account_id,
|
||||||
|
|||||||
Reference in New Issue
Block a user