You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by al...@apache.org on 2023/02/19 20:59:47 UTC
[fineract] branch 1.8.4 updated: FINERACT-1857: Backport Flyway migrations to Liquibase for version 1.4 to 1.6 for releases 1.8.x
This is an automated email from the ASF dual-hosted git repository.
aleks pushed a commit to branch 1.8.4
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/1.8.4 by this push:
new 22e085416 FINERACT-1857: Backport Flyway migrations to Liquibase for version 1.4 to 1.6 for releases 1.8.x
22e085416 is described below
commit 22e08541623fee42a4d79c0f6785284541470b15
Author: Aleks <al...@apache.org>
AuthorDate: Wed Jan 25 12:04:38 2023 +0100
FINERACT-1857: Backport Flyway migrations to Liquibase for version 1.4 to 1.6 for releases 1.8.x
---
fineract-provider/build.gradle | 20 +
.../tenant-store/upgrades/0000_upgrade_to_1.6.xml | 35 ++
.../tenant/upgrades/0000_upgrade_to_1.5.xml | 100 ++++
.../tenant/upgrades/0000_upgrade_to_1.6.xml | 526 +++++++++++++++++++++
4 files changed, 681 insertions(+)
diff --git a/fineract-provider/build.gradle b/fineract-provider/build.gradle
index edafbab2d..a477deb14 100644
--- a/fineract-provider/build.gradle
+++ b/fineract-provider/build.gradle
@@ -303,6 +303,26 @@ jib {
}
}
+task migrateDatabase {
+ doFirst {
+ println "Executing liquibase database migration to version $dbVersion"
+
+ def dbUrl = "jdbc:$dbType://$dbHost:$dbPort/$dbName"
+ def changeLogFilePath = "fineract-provider/src/main/resources/db/changelog/tenant/upgrades/0000_upgrade_to_$dbVersion.xml"
+
+ liquibase {
+ activities {
+ main {
+ changeLogFile changeLogFilePath
+ url dbUrl
+ username project.ext.mysqlUser
+ password project.ext.mysqlPassword
+ }
+ }
+ }
+ }
+}
+
tasks.jibDockerBuild.dependsOn(bootJar)
// Configuration for git properties gradle plugin
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant-store/upgrades/0000_upgrade_to_1.6.xml b/fineract-provider/src/main/resources/db/changelog/tenant-store/upgrades/0000_upgrade_to_1.6.xml
new file mode 100644
index 000000000..83e384d5f
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/tenant-store/upgrades/0000_upgrade_to_1.6.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+ 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.1.xsd">
+ <!-- V5__add_schema_connection_parameters.sql -->
+ <changeSet author="fineract" id="5">
+ <addColumn tableName="tenant_server_connections">
+ <column name="schema_connection_parameters" type="TEXT" defaultValueComputed="NULL"/>
+ </addColumn>
+ </changeSet>
+ <!-- V6__add_unique_tenant_identifier.sql -->
+ <changeSet author="fineract" id="6">
+ <addUniqueConstraint tableName="tenants" columnNames="identifier" />
+ </changeSet>
+</databaseChangeLog>
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/upgrades/0000_upgrade_to_1.5.xml b/fineract-provider/src/main/resources/db/changelog/tenant/upgrades/0000_upgrade_to_1.5.xml
new file mode 100644
index 000000000..832b65aee
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/tenant/upgrades/0000_upgrade_to_1.5.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+ 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.1.xsd">
+ <!-- V362__reschedule_interest_to_lrs.sql -->
+ <changeSet author="fineract" id="362">
+ <addColumn tableName="m_loan_repayment_schedule">
+ <column name="reschedule_interest_portion" type="decimal(19,6)" defaultValueComputed="NULL" position="14" />
+ </addColumn>
+ </changeSet>
+ <!-- V363__mnote_indexing_for_performance.sql -->
+ <changeSet author="fineract" id="363">
+ <createIndex indexName="savings_account_transaction_id" tableName="m_note">
+ <column defaultValueComputed="NULL" name="savings_account_transaction_id"/>
+ </createIndex>
+ </changeSet>
+ <!-- V364__elastic_hook_template.sql -->
+ <changeSet author="fineract" id="364">
+ <insert tableName="m_hook_templates">
+ <column name="id" valueNumeric="3"/>
+ <column name="name" value="Elastic Search"/>
+ </insert>
+ <insert tableName="m_hook_schema">
+ <column name="id" valueNumeric="8"/>
+ <column name="hook_template_id" valueNumeric="3"/>
+ <column name="field_type" value="string"/>
+ <column name="field_name" value="Payload URL"/>
+ <column name="placeholder" value="http://<host>/<index name>/<type name>"/>
+ <column name="optional" valueBoolean="false"/>
+ </insert>
+ <insert tableName="m_hook_schema">
+ <column name="id" valueNumeric="9"/>
+ <column name="hook_template_id" valueNumeric="3"/>
+ <column name="field_type" value="string"/>
+ <column name="field_name" value="Content Type"/>
+ <column name="placeholder" value="json"/>
+ <column name="optional" valueBoolean="false"/>
+ </insert>
+ <insert tableName="m_hook_schema">
+ <column name="id" valueNumeric="10"/>
+ <column name="hook_template_id" valueNumeric="3"/>
+ <column name="field_type" value="string"/>
+ <column name="field_name" value="Index Name"/>
+ <column name="placeholder"/>
+ <column name="optional" valueBoolean="true"/>
+ </insert>
+ </changeSet>
+ <!-- V365__reportCategoryList-FINERACT-1306.sql -->
+ <changeSet author="fineract" id="365">
+ <insert tableName="stretchy_parameter">
+ <column name="id" valueNumeric="1003"/>
+ <column name="parameter_name" value="reportCategoryList"/>
+ <column name="parameter_variable"/>
+ <column name="parameter_label" value="n/a"/>
+ <column name="parameter_displayType" value="n/a"/>
+ <column name="parameter_FormatType" value="n/a"/>
+ <column name="parameter_default" value="n/a"/>
+ <column name="special" value="Y"/>
+ <column name="selectOne"/>
+ <column name="selectAll"/>
+ <column name="parameter_sql"
+ value="select r.id as report_id, r.report_name, r.report_type, r.report_subtype, r.report_category, rp.id as parameter_id, rp.report_parameter_name, p.parameter_name from stretchy_report r left join stretchy_report_parameter rp on rp.report_id = r.id left join stretchy_parameter p on p.id = rp.parameter_id where r.report_category = '${reportCategory}' and r.use_report is true and r.self_service_user_report = '${isSelfServiceUser}' [...]
+ <column name="parent_id"/>
+ </insert>
+ <insert tableName="stretchy_parameter">
+ <column name="id" valueNumeric="1004"/>
+ <column name="parameter_name" value="selectAccount"/>
+ <column name="parameter_variable" value="accountNo"/>
+ <column name="parameter_label" value="Enter Account No"/>
+ <column name="parameter_displayType" value="text"/>
+ <column name="parameter_FormatType" value="string"/>
+ <column name="parameter_default" value="n/a"/>
+ <column name="special"/>
+ <column name="selectOne"/>
+ <column name="selectAll"/>
+ <column name="parameter_sql"/>
+ <column name="parent_id"/>
+ </insert>
+ </changeSet>
+</databaseChangeLog>
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/upgrades/0000_upgrade_to_1.6.xml b/fineract-provider/src/main/resources/db/changelog/tenant/upgrades/0000_upgrade_to_1.6.xml
new file mode 100644
index 000000000..d031036ce
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/tenant/upgrades/0000_upgrade_to_1.6.xml
@@ -0,0 +1,526 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+ 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.1.xsd">
+ <!-- V366_remove_leading_or_trailing_spaces_in_reportnames.sql -->
+ <changeSet author="fineract" id="366">
+ <sql>
+ UPDATE stretchy_report SET report_name = TRIM(report_name) WHERE id IN (SELECT id FROM (SELECT id FROM stretchy_report WHERE CHAR_LENGTH(report_name) != CHAR_LENGTH(TRIM(report_name)))Y);
+ </sql>
+ </changeSet>
+ <!-- V367__reports_for_email_campaigns.sql -->
+ <changeSet author="fineract" id="367">
+ <preConditions onFail="MARK_RAN">
+ <sqlCheck expectedResult="0">
+ SELECT COUNT(*) FROM stretchy_report WHERE report_name IN ('Loan Approved - Email','Loan Rejected - Email','Loan Repayment - Email');
+ </sqlCheck>
+ </preConditions>
+ <insert tableName="stretchy_report">
+ <column name="report_name" value="Loan Approved - Email"/>
+ <column name="report_type" value="Email"/>
+ <column name="report_subtype" value="Triggered"/>
+ <column name="report_category"/>
+ <column name="report_sql"
+ value="select ml.id as loanId, ifnull(mc.id,mc2.id) as id, ifnull(mc.firstname,mc2.firstname) as firstname, ifnull(mc.middlename,ifnull(mc2.middlename,(''))) as middlename, ifnull(mc.lastname,mc2.lastname) as lastname, ifnull(mc.display_name,mc2.display_name) as display_name, ifnull(mc.status_enum,mc2.status_enum) as status_enum, ifnull(mc.mobile_no,mc2.mobile_no) as mobile_no, ifnull(mg.office_id,mc2.office_id) as office_id, ifnull(mg.staff_id,m [...]
+ <column name="description" value="Loan and client data of approved loan"/>
+ <column name="core_report" valueBoolean="false"/>
+ <column name="use_report" valueBoolean="true"/>
+ <column name="self_service_user_report" valueBoolean="false"/>
+ </insert>
+ <insert tableName="stretchy_report">
+ <column name="report_name" value="Loan Rejected - Email"/>
+ <column name="report_type" value="Email"/>
+ <column name="report_subtype" value="Triggered"/>
+ <column name="report_category"/>
+ <column name="report_sql"
+ value="select ml.id as loanId, ifnull(mc.id,mc2.id) as id, ifnull(mc.firstname,mc2.firstname) as firstname, ifnull(mc.middlename,ifnull(mc2.middlename,(''))) as middlename, ifnull(mc.lastname,mc2.lastname) as lastname, ifnull(mc.display_name,mc2.display_name) as display_name, ifnull(mc.status_enum,mc2.status_enum) as status_enum, ifnull(mc.mobile_no,mc2.mobile_no) as mobile_no, ifnull(mg.office_id,mc2.office_id) as office_id, ifnull(mg.staff_id,m [...]
+ <column name="description" value="Loan and client data of rejected loan"/>
+ <column name="core_report" valueBoolean="false"/>
+ <column name="use_report" valueBoolean="true"/>
+ <column name="self_service_user_report" valueBoolean="false"/>
+ </insert>
+ <insert tableName="stretchy_report">
+ <column name="report_name" value="Loan Repayment - Email"/>
+ <column name="report_type" value="Email"/>
+ <column name="report_subtype" value="Triggered"/>
+ <column name="report_category"/>
+ <column name="report_sql"
+ value="select ml.id as loanId, ifnull(mc.id,mc2.id) as id, ifnull(mc.firstname,mc2.firstname) as firstname, ifnull(mc.middlename,ifnull(mc2.middlename,(''))) as middlename, ifnull(mc.lastname,mc2.lastname) as lastname, ifnull(mc.display_name,mc2.display_name) as display_name, ifnull(mc.status_enum,mc2.status_enum) as status_enum, ifnull(mc.mobile_no,mc2.mobile_no) as mobile_no, ifnull(mg.office_id,mc2.office_id) as office_id, ifnull(mg.staff_id,m [...]
+ <column name="description" value="Loan and client data of rejected loan"/>
+ <column name="core_report" valueBoolean="false"/>
+ <column name="use_report" valueBoolean="true"/>
+ <column name="self_service_user_report" valueBoolean="false"/>
+ </insert>
+ <modifyDataType tableName="scheduled_email_campaign" columnName="email_attachment_file_format" newDataType="VARCHAR(10) NULL"/>
+ <modifyDataType tableName="scheduled_email_campaign" columnName="stretchy_report_id" newDataType="INT NULL"/>
+ </changeSet>
+ <!-- V368__collateral_management.sql -->
+ <changeSet author="fineract" id="368">
+ <createTable tableName="m_collateral_management">
+ <column autoIncrement="true" name="id" type="BIGINT">
+ <constraints nullable="false" primaryKey="true"/>
+ </column>
+ <column name="name" type="VARCHAR(50)">
+ <constraints nullable="false"/>
+ </column>
+ <column name="quality" type="VARCHAR(40)">
+ <constraints nullable="false"/>
+ </column>
+ <column name="base_price" type="DECIMAL(20, 5)">
+ <constraints nullable="false"/>
+ </column>
+ <column name="unit_type" type="VARCHAR(10)">
+ <constraints nullable="false"/>
+ </column>
+ <column name="pct_to_base" type="DECIMAL(20, 5)">
+ <constraints nullable="false"/>
+ </column>
+ <column defaultValueComputed="NULL" name="currency" type="BIGINT"/>
+ </createTable>
+ <createIndex indexName="fkCurrencyCode" tableName="m_collateral_management">
+ <column defaultValueComputed="NULL" name="currency"/>
+ </createIndex>
+ <createTable tableName="m_client_collateral_management">
+ <column autoIncrement="true" name="id" type="BIGINT">
+ <constraints nullable="false" primaryKey="true"/>
+ </column>
+ <column name="quantity" type="DECIMAL(20, 5)">
+ <constraints nullable="false"/>
+ </column>
+ <column defaultValueComputed="NULL" name="client_id" type="BIGINT"/>
+ <column defaultValueComputed="NULL" name="collateral_id" type="BIGINT"/>
+ </createTable>
+ <createIndex indexName="fkClient" tableName="m_client_collateral_management">
+ <column defaultValueComputed="NULL" name="client_id"/>
+ </createIndex>
+ <createIndex indexName="fkCollateral" tableName="m_client_collateral_management">
+ <column defaultValueComputed="NULL" name="collateral_id"/>
+ </createIndex>
+ <createTable tableName="m_loan_collateral_management">
+ <column autoIncrement="true" name="id" type="BIGINT">
+ <constraints nullable="false" primaryKey="true"/>
+ </column>
+ <column name="quantity" type="DECIMAL(20, 5)">
+ <constraints nullable="false"/>
+ </column>
+ <column defaultValueComputed="NULL" name="loan_id" type="BIGINT"/>
+ <column defaultValueComputed="NULL" name="client_collateral_id" type="BIGINT"/>
+ <column defaultValueBoolean="false" name="is_released" type="boolean"/>
+ <column defaultValueComputed="NULL" name="transaction_id" type="BIGINT"/>
+ </createTable>
+ <createIndex indexName="fkClientCollateral" tableName="m_loan_collateral_management">
+ <column defaultValueComputed="NULL" name="client_collateral_id"/>
+ </createIndex>
+ <createIndex indexName="fkLoan" tableName="m_loan_collateral_management">
+ <column defaultValueComputed="NULL" name="loan_id"/>
+ </createIndex>
+ <createIndex indexName="fkTransaction" tableName="m_loan_collateral_management">
+ <column defaultValueComputed="NULL" name="transaction_id"/>
+ </createIndex>
+ <addForeignKeyConstraint baseColumnNames="collateral_id" baseTableName="m_client_collateral_management"
+ constraintName="fkCollateral" deferrable="false" initiallyDeferred="false"
+ onDelete="CASCADE" onUpdate="CASCADE" referencedColumnNames="id"
+ referencedTableName="m_collateral_management" validate="true"/>
+ <addForeignKeyConstraint baseColumnNames="currency" baseTableName="m_collateral_management"
+ constraintName="fkCurrencyCode" deferrable="false" initiallyDeferred="false"
+ onDelete="CASCADE" onUpdate="RESTRICT" referencedColumnNames="id"
+ referencedTableName="m_currency" validate="true"/>
+ <addForeignKeyConstraint baseColumnNames="client_id" baseTableName="m_client_collateral_management"
+ constraintName="fkClient" deferrable="false" initiallyDeferred="false"
+ onDelete="CASCADE" onUpdate="CASCADE" referencedColumnNames="id"
+ referencedTableName="m_client" validate="true"/>
+ <addForeignKeyConstraint baseColumnNames="client_collateral_id" baseTableName="m_loan_collateral_management"
+ constraintName="fkClientCollateral" deferrable="false" initiallyDeferred="false"
+ onDelete="CASCADE" onUpdate="CASCADE" referencedColumnNames="id"
+ referencedTableName="m_client_collateral_management" validate="true"/>
+ <addForeignKeyConstraint baseColumnNames="loan_id" baseTableName="m_loan_collateral_management"
+ constraintName="fkLoan" deferrable="false" initiallyDeferred="false" onDelete="CASCADE"
+ onUpdate="CASCADE" referencedColumnNames="id" referencedTableName="m_loan"
+ validate="true"/>
+ <addForeignKeyConstraint baseColumnNames="transaction_id" baseTableName="m_loan_collateral_management"
+ constraintName="fkTransaction" deferrable="false" initiallyDeferred="false"
+ onDelete="CASCADE" onUpdate="CASCADE" referencedColumnNames="id"
+ referencedTableName="m_loan_transaction" validate="true"/>
+ <insert tableName="m_permission">
+ <column name="grouping" value="portfolio"/>
+ <column name="code" value="CREATE_CLIENT_COLLATERAL_PRODUCT"/>
+ <column name="entity_name" value="CLIENT_COLLATERAL_PRODUCT"/>
+ <column name="action_name" value="CREATE"/>
+ <column name="can_maker_checker" valueBoolean="false"/>
+ </insert>
+ <insert tableName="m_permission">
+ <column name="grouping" value="portfolio"/>
+ <column name="code" value="CREATE_COLLATERAL_PRODUCT"/>
+ <column name="entity_name" value="COLLATERAL_PRODUCT"/>
+ <column name="action_name" value="CREATE"/>
+ <column name="can_maker_checker" valueBoolean="false"/>
+ </insert>
+ <insert tableName="m_permission">
+ <column name="grouping" value="portfolio"/>
+ <column name="code" value="DELETE_CLIENT_COLLATERAL_PRODUCT"/>
+ <column name="entity_name" value="CLIENT_COLLATERAL_PRODUCT"/>
+ <column name="action_name" value="DELETE"/>
+ <column name="can_maker_checker" valueBoolean="false"/>
+ </insert>
+ <insert tableName="m_permission">
+ <column name="grouping" value="portfolio"/>
+ <column name="code" value="DELETE_COLLATERAL_PRODUCT"/>
+ <column name="entity_name" value="COLLATERAL_PRODUCT"/>
+ <column name="action_name" value="DELETE"/>
+ <column name="can_maker_checker" valueBoolean="false"/>
+ </insert>
+ <insert tableName="m_permission">
+ <column name="grouping" value="portfolio"/>
+ <column name="code" value="DELETE_LOAN_COLLATERAL_PRODUCT"/>
+ <column name="entity_name" value="LOAN_COLLATERAL_PRODUCT"/>
+ <column name="action_name" value="DELETE"/>
+ <column name="can_maker_checker" valueBoolean="false"/>
+ </insert>
+ <insert tableName="m_permission">
+ <column name="grouping" value="portfolio"/>
+ <column name="code" value="UPDATE_CLIENT_COLLATERAL_PRODUCT"/>
+ <column name="entity_name" value="CLIENT_COLLATERAL_PRODUCT"/>
+ <column name="action_name" value="UPDATE"/>
+ <column name="can_maker_checker" valueBoolean="false"/>
+ </insert>
+ <insert tableName="m_permission">
+ <column name="grouping" value="portfolio"/>
+ <column name="code" value="UPDATE_COLLATERAL_PRODUCT"/>
+ <column name="entity_name" value="COLLATERAL_PRODUCT"/>
+ <column name="action_name" value="UPDATE"/>
+ <column name="can_maker_checker" valueBoolean="false"/>
+ </insert>
+ </changeSet>
+ <!-- V369__repayment_with_post_dated_checks.sql -->
+ <changeSet author="fineract" id="369">
+ <createTable tableName="m_repayment_with_post_dated_checks">
+ <column autoIncrement="true" name="id" type="BIGINT">
+ <constraints nullable="false" primaryKey="true"/>
+ </column>
+ <column name="check_no" type="BIGINT">
+ <constraints nullable="false" unique="true"/>
+ </column>
+ <column name="amount" type="DECIMAL(20, 5)">
+ <constraints nullable="false"/>
+ </column>
+ <column defaultValueComputed="NULL" name="loan_id" type="BIGINT"/>
+ <column defaultValueComputed="NULL" name="repayment_id" type="BIGINT"/>
+ <column name="account_no" type="BIGINT">
+ <constraints nullable="false"/>
+ </column>
+ <column name="bank_name" type="VARCHAR(200)">
+ <constraints nullable="false"/>
+ </column>
+ <column name="repayment_date" type="date">
+ <constraints nullable="false"/>
+ </column>
+ <column defaultValueNumeric="0" name="status" type="SMALLINT"/>
+ </createTable>
+ <createIndex indexName="fkloanrepayment" tableName="m_repayment_with_post_dated_checks">
+ <column defaultValueComputed="NULL" name="loan_id"/>
+ </createIndex>
+ <createIndex indexName="fkrepaymentwithpostdated" tableName="m_repayment_with_post_dated_checks">
+ <column defaultValueComputed="NULL" name="repayment_id"/>
+ </createIndex>
+ <addForeignKeyConstraint baseColumnNames="loan_id" baseTableName="m_repayment_with_post_dated_checks"
+ constraintName="fkloanrepayment" deferrable="false" initiallyDeferred="false"
+ onDelete="CASCADE" onUpdate="CASCADE" referencedColumnNames="id"
+ referencedTableName="m_loan" validate="true"/>
+ <addForeignKeyConstraint baseColumnNames="repayment_id" baseTableName="m_repayment_with_post_dated_checks"
+ constraintName="fkrepaymentwithpostdated" deferrable="false" initiallyDeferred="false"
+ onDelete="CASCADE" onUpdate="CASCADE" referencedColumnNames="id"
+ referencedTableName="m_loan_repayment_schedule" validate="true"/>
+ <insert tableName="m_permission">
+ <column name="grouping" value="portfolio"/>
+ <column name="code" value="UPDATE_REPAYMENT_WITH_POSTDATEDCHECKS"/>
+ <column name="entity_name" value="REPAYMENT_WITH_POSTDATEDCHECKS"/>
+ <column name="action_name" value="UPDATE"/>
+ <column name="can_maker_checker" valueBoolean="false"/>
+ </insert>
+ <insert tableName="m_permission">
+ <column name="grouping" value="portfolio"/>
+ <column name="code" value="DELETE_REPAYMENT_WITH_POSTDATEDCHECKS"/>
+ <column name="entity_name" value="REPAYMENT_WITH_POSTDATEDCHECKS"/>
+ <column name="action_name" value="DELETE"/>
+ <column name="can_maker_checker" valueBoolean="false"/>
+ </insert>
+ <insert tableName="m_permission">
+ <column name="grouping" value="portfolio"/>
+ <column name="code" value="BOUNCE_REPAYMENT_WITH_POSTDATEDCHECKS"/>
+ <column name="entity_name" value="REPAYMENT_WITH_POSTDATEDCHECKS"/>
+ <column name="action_name" value="BOUNCE"/>
+ <column name="can_maker_checker" valueBoolean="false"/>
+ </insert>
+ </changeSet>
+ <!-- V370__message_gateway_hook_template.sql -->
+ <changeSet author="fineract" id="370">
+ <insert tableName="m_hook_templates">
+ <column name="id" valueNumeric="4"/>
+ <column name="name" value="Message Gateway"/>
+ </insert>
+ <insert tableName="m_hook_schema">
+ <column name="id" valueNumeric="11"/>
+ <column name="hook_template_id" valueNumeric="4"/>
+ <column name="field_type" value="string"/>
+ <column name="field_name" value="SMS Provider Id"/>
+ <column name="placeholder"/>
+ <column name="optional" valueBoolean="false"/>
+ </insert>
+ </changeSet>
+ <!-- V371__loan_net_disbursal_amount.sql -->
+ <changeSet author="fineract" id="371">
+ <addColumn tableName="m_loan">
+ <column name="net_disbursal_amount"
+ type="DECIMAL(19, 6)">
+ <constraints nullable="false" />
+ </column>
+ </addColumn>
+ <addColumn tableName="m_loan_disbursement_detail">
+ <column name="net_disbursal_amount"
+ type="DECIMAL(19, 6)" defaultValueComputed="NULL" />
+ </addColumn>
+ </changeSet>
+ <!-- V372__fixed_principal_percentage.sql -->
+ <changeSet author="fineract" id="372">
+ <addColumn tableName="m_product_loan">
+ <column name="fixed_principal_percentage_per_installment"
+ type="DECIMAL(5, 2)" defaultValueComputed="NULL" />
+ </addColumn>
+ <addColumn tableName="m_loan">
+ <column name="fixed_principal_percentage_per_installment"
+ type="DECIMAL(5, 2)" defaultValueComputed="NULL" />
+ </addColumn>
+ </changeSet>
+ <!-- V373__node_aware_scheduler_jobs.sql -->
+ <changeSet author="fineract" id="373">
+ <addColumn tableName="job">
+ <column name="node_id"
+ type="INT" defaultValueComputed="1" />
+ </addColumn>
+ <addColumn tableName="job">
+ <column name="is_mismatched_job"
+ type="boolean" defaultValueBoolean="true" />
+ </addColumn>
+ <insert tableName="job">
+ <column name="id" valueNumeric="31"/>
+ <column name="name" value="Execute All Dirty Jobs"/>
+ <column name="display_name" value="Execute All Dirty Jobs"/>
+ <column name="cron_expression" value="0 1 0 1/1 * ? *"/>
+ <column name="create_time" valueDate="CURRENT_TIMESTAMP"/>
+ <column name="task_priority" valueNumeric="5"/>
+ <column name="group_name"/>
+ <column name="previous_run_start_time"/>
+ <column name="job_key" value="Execute All Dirty JobsJobDetail1 _ DEFAULT"/>
+ <column name="initializing_errorlog"/>
+ <column name="is_active" valueBoolean="true"/>
+ <column name="currently_running" valueBoolean="false"/>
+ <column name="updates_allowed" valueBoolean="true"/>
+ <column name="scheduler_group" valueNumeric="0"/>
+ <column name="is_misfired" valueBoolean="false"/>
+ <column name="node_id" valueNumeric="0"/>
+ <column name="is_mismatched_job" valueBoolean="false"/>
+ </insert>
+ </changeSet>
+ <!-- V374__adding_expenseliablity_to_paymentorfeetype.sql -->
+ <changeSet author="fineract" id="374">
+ <addColumn tableName="c_configuration">
+ <column name="string_value"
+ type="VARCHAR(100)" defaultValueComputed="NULL" position="5"/>
+ </addColumn>
+ <insert tableName="c_configuration">
+ <column name="id" valueNumeric="35"/>
+ <column name="name" value="account-mapping-for-payment-type"/>
+ <column name="value"/>
+ <column name="date_value"/>
+ <column name="string_value" value="Asset"/>
+ <column name="enabled" valueBoolean="true"/>
+ <column name="is_trap_door" valueBoolean="false"/>
+ <column name="description"
+ value="Asset: default for asset, Use comma seperated values for Liability, Asset and Expense accounts"/>
+ </insert>
+ <insert tableName="c_configuration">
+ <column name="id" valueNumeric="36"/>
+ <column name="name" value="account-mapping-for-charge"/>
+ <column name="value"/>
+ <column name="date_value"/>
+ <column name="string_value" value="Income"/>
+ <column name="enabled" valueBoolean="true"/>
+ <column name="is_trap_door" valueBoolean="false"/>
+ <column name="description"
+ value="Income: default for Income, Use comma seperated values for Income, Liability and Expense accounts"/>
+ </insert>
+ </changeSet>
+ <!-- V375__transfer_fixed_deposit_interest_next_day_for_period_end_posting.sql -->
+ <changeSet author="fineract" id="375">
+ <insert tableName="c_configuration">
+ <column name="id" valueNumeric="37"/>
+ <column name="name" value="fixed-deposit-transfer-interest-next-day-for-period-end-posting"/>
+ <column name="value"/>
+ <column name="date_value"/>
+ <column name="string_value"/>
+ <column name="enabled" valueBoolean="false"/>
+ <column name="is_trap_door" valueBoolean="false"/>
+ <column name="description" value="Transfer fixed transfer interest next day(t+1) for period end posting"/>
+ </insert>
+ </changeSet>
+ <!-- V376__savings_last_transaction_date.sql -->
+ <changeSet author="fineract" id="376">
+ <addColumn tableName="m_savings_account">
+ <column name="interest_posted_till_date"
+ type="date" defaultValueComputed="NULL" />
+ </addColumn>
+ <insert tableName="c_configuration">
+ <column name="id" valueNumeric="38"/>
+ <column name="name" value="allow-backdated-transaction-before-interest-posting"/>
+ <column name="value" valueNumeric="0"/>
+ <column name="date_value"/>
+ <column name="string_value"/>
+ <column name="enabled" valueBoolean="true"/>
+ <column name="is_trap_door" valueBoolean="false"/>
+ <column name="description" value="Avoid retrieving all transactions in a savings account"/>
+ </insert>
+ <insert tableName="c_configuration">
+ <column name="id" valueNumeric="39"/>
+ <column name="name" value="allow-backdated-transaction-before-interest-posting-date-for-days"/>
+ <column name="value" valueNumeric="0"/>
+ <column name="date_value"/>
+ <column name="string_value"/>
+ <column name="enabled" valueBoolean="false"/>
+ <column name="is_trap_door" valueBoolean="false"/>
+ <column name="description" value="One time configuration to relax the backdated transactions"/>
+ </insert>
+ </changeSet>
+ <!-- V377__job_prams_for_parallelizing_savings_interest_posting.sql -->
+ <changeSet author="fineract" id="377">
+ <insert tableName="job_parameters">
+ <column name="id" valueNumeric="4"/>
+ <column name="job_id" valueNumeric="6"/>
+ <column name="parameter_name" value="thread-pool-size"/>
+ <column name="parameter_value" valueNumeric="10"/>
+ </insert>
+ <insert tableName="job_parameters">
+ <column name="id" valueNumeric="5"/>
+ <column name="job_id" valueNumeric="6"/>
+ <column name="parameter_name" value="batch-size"/>
+ <column name="parameter_value" valueNumeric="100"/>
+ </insert>
+ </changeSet>
+ <!-- V378__configuration_for_variable_length_acoountNumber.sql -->
+ <changeSet author="fineract" id="378">
+ <insert tableName="c_configuration">
+ <column name="id" valueNumeric="40"/>
+ <column name="name" value="custom-account-number-length"/>
+ <column name="value"/>
+ <column name="date_value"/>
+ <column name="string_value"/>
+ <column name="enabled" valueBoolean="false"/>
+ <column name="is_trap_door" valueBoolean="false"/>
+ <column name="description"
+ value="if enabled, the value if this configuration will set accounnumber length"/>
+ </insert>
+ </changeSet>
+ <!-- V379__user_cannot_change_password.sql -->
+ <changeSet author="fineract" id="379">
+ <addColumn tableName="m_appuser">
+ <column defaultValueBoolean="false" name="cannot_change_password" type="boolean"/>
+ </addColumn>
+ </changeSet>
+ <!-- V380__configuration_for_random_account_number.sql -->
+ <changeSet author="fineract" id="380">
+ <insert tableName="c_configuration">
+ <column name="id" valueNumeric="41"/>
+ <column name="name" value="random-account-number"/>
+ <column name="value"/>
+ <column name="date_value"/>
+ <column name="string_value"/>
+ <column name="enabled" valueBoolean="false"/>
+ <column name="is_trap_door" valueBoolean="false"/>
+ <column name="description"
+ value="if enabled, the client accounts, saving accounts, loan accounts will be created with Random Account Number"/>
+ </insert>
+ </changeSet>
+ <!-- V381__update_currencies_new_currencies.sql -->
+ <changeSet author="fineract" id="381">
+ <insert tableName="m_currency">
+ <column name="id" valueNumeric="164"/>
+ <column name="code" value="SSP"/>
+ <column name="decimal_places" valueNumeric="2"/>
+ <column name="currency_multiplesof"/>
+ <column name="display_symbol" value="SSĀ£"/>
+ <column name="name" value="South Sudanese Pound"/>
+ <column name="internationalized_name_code" value="currency.SSP"/>
+ </insert>
+ <update tableName="m_currency">
+ <column name="name" value="Eswatini Lilangeni"/>
+ <where>code = 'SZL'</where>
+ </update>
+ <update tableName="m_organisation_currency">
+ <column name="name" value="Eswatini Lilangeni"/>
+ <where>code = 'SZL'</where>
+ </update>
+ </changeSet>
+ <!-- V390__clientdoc-code.sql -->
+ <changeSet author="fineract" id="390">
+ <insert tableName="m_code">
+ <column name="id" valueNumeric="34"/>
+ <column name="code_name" value="Customer Documents"/>
+ <column name="is_system_defined" valueBoolean="true"/>
+ </insert>
+ </changeSet>
+ <!-- V391__add_transaction_ref_column.sql -->
+ <changeSet author="fineract" id="391">
+ <addColumn tableName="m_savings_account_transaction">
+ <column name="ref_no" type="VARCHAR(128)">
+ <constraints unique="true"/>
+ </column>
+ </addColumn>
+ </changeSet>
+ <!-- V392__interest_recovery_conf_for_rescedule.sql -->
+ <changeSet author="fineract" id="392">
+ <delete tableName="c_configuration">
+ <where>name = 'is-interest-to-be-appropriated-equally-when-greater-than-emi'</where>
+ </delete>
+ <insert tableName="c_configuration">
+ <column name="id" valueNumeric="42"/>
+ <column name="name" value="is-interest-to-be-recovered-first-when-greater-than-emi"/>
+ <column name="value" valueNumeric="0"/>
+ <column name="date_value"/>
+ <column name="string_value"/>
+ <column name="enabled" valueBoolean="false"/>
+ <column name="is_trap_door" valueBoolean="false"/>
+ <column name="description"
+ value="If enabled, when interest amount is greater than EMI, the additional interest is recovered first before principal"/>
+ </insert>
+ <insert tableName="c_configuration">
+ <column name="id" valueNumeric="43"/>
+ <column name="name" value="is-principal-compounding-disabled-for-overdue-loans"/>
+ <column name="value" valueNumeric="0"/>
+ <column name="date_value"/>
+ <column name="string_value"/>
+ <column name="enabled" valueBoolean="false"/>
+ <column name="is_trap_door" valueBoolean="false"/>
+ <column name="description"
+ value="If enabled, it donot consider principal of an unpaid installment for calculating interest of next installment. this is for testing back-dated loan schedule"/>
+ </insert>
+ </changeSet>
+</databaseChangeLog>