This is an automated email from the ASF dual-hosted git repository.

arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new 865b9efc6 FINERACT-1670: Add UTC auditable fields and submitted on 
date to Journal Entry
865b9efc6 is described below

commit 865b9efc6e32c14e87322f312ec0e8d1436a5502
Author: Adam Saghy <[email protected]>
AuthorDate: Wed Aug 3 21:34:37 2022 +0200

    FINERACT-1670: Add UTC auditable fields and submitted on date to Journal 
Entry
---
 .../journalentry/domain/JournalEntry.java          | 13 +++-
 .../JournalEntryReadPlatformServiceImpl.java       |  4 +-
 ...ournalEntryRunningBalanceUpdateServiceImpl.java | 32 ++++----
 .../PostInterestForSavingTasklet.java              |  3 +
 .../service/SavingsSchedularInterestPoster.java    | 44 +++++------
 .../db/changelog/tenant/changelog-tenant.xml       |  1 +
 .../0025_add_audit_entries_to_journal_entry.xml    | 85 ++++++++++++++++++++++
 7 files changed, 139 insertions(+), 43 deletions(-)

diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntry.java
 
b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntry.java
index b207954ad..b54f7d23f 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntry.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntry.java
@@ -28,7 +28,8 @@ import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.fineract.accounting.glaccount.domain.GLAccount;
-import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom;
+import 
org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom;
+import org.apache.fineract.infrastructure.core.service.DateUtils;
 import org.apache.fineract.organisation.office.domain.Office;
 import org.apache.fineract.portfolio.client.domain.ClientTransaction;
 import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
@@ -37,7 +38,7 @@ import 
org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction;
 
 @Entity
 @Table(name = "acc_gl_journal_entry")
-public class JournalEntry extends AbstractAuditableCustom {
+public class JournalEntry extends AbstractAuditableWithUTCDateTimeCustom {
 
     @ManyToOne
     @JoinColumn(name = "office_id", nullable = false)
@@ -103,6 +104,9 @@ public class JournalEntry extends AbstractAuditableCustom {
     @Column(name = "ref_num")
     private String referenceNumber;
 
+    @Column(name = "submitted_on_date", nullable = false)
+    private LocalDate submittedOnDate;
+
     public static JournalEntry createNew(final Office office, final 
PaymentDetail paymentDetail, final GLAccount glAccount,
             final String currencyCode, final String transactionId, final 
boolean manualEntry, final LocalDate transactionDate,
             final JournalEntryType journalEntryType, final BigDecimal amount, 
final String description, final Integer entityType,
@@ -141,6 +145,7 @@ public class JournalEntry extends AbstractAuditableCustom {
         this.clientTransaction = clientTransaction;
         this.paymentDetail = paymentDetail;
         this.shareTransactionId = shareTransactionId;
+        this.submittedOnDate = DateUtils.getBusinessLocalDate();
     }
 
     public boolean isDebitEntry() {
@@ -227,4 +232,8 @@ public class JournalEntry extends AbstractAuditableCustom {
         return this.description;
     }
 
+    public LocalDate getSubmittedOnDate() {
+        return this.submittedOnDate;
+    }
+
 }
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java
index d21c14b5e..907286de7 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java
@@ -101,7 +101,7 @@ public class JournalEntryReadPlatformServiceImpl implements 
JournalEntryReadPlat
                     .append(" journalEntry.type_enum as 
entryType,journalEntry.amount as amount, journalEntry.transaction_id as 
transactionId,")
                     .append(" journalEntry.entity_type_enum as entityType, 
journalEntry.entity_id as entityId, creatingUser.id as createdByUserId, ")
                     .append(" creatingUser.username as createdByUserName, 
journalEntry.description as comments, ")
-                    .append(" journalEntry.created_date as createdDate, 
journalEntry.reversed as reversed, ")
+                    .append(" journalEntry.submitted_on_date as createdDate, 
journalEntry.reversed as reversed, ")
                     .append(" journalEntry.currency_code as currencyCode, 
curr.name as currencyName, curr.internationalized_name_code as 
currencyNameCode, ")
                     .append(" curr.display_symbol as currencyDisplaySymbol, 
curr.decimal_places as currencyDigits, curr.currency_multiplesof as 
inMultiplesOf ");
             if (associationParametersData.isRunningBalanceRequired()) {
@@ -120,7 +120,7 @@ public class JournalEntryReadPlatformServiceImpl implements 
JournalEntryReadPlat
             sb.append(" from acc_gl_journal_entry as journalEntry ")
                     .append(" left join acc_gl_account as glAccount on 
glAccount.id = journalEntry.account_id")
                     .append(" left join m_office as office on office.id = 
journalEntry.office_id")
-                    .append(" left join m_appuser as creatingUser on 
creatingUser.id = journalEntry.createdby_id ")
+                    .append(" left join m_appuser as creatingUser on 
creatingUser.id = journalEntry.created_by ")
                     .append(" join m_currency curr on curr.code = 
journalEntry.currency_code ");
             if (associationParametersData.isTransactionDetailsRequired()) {
                 sb.append(" left join m_loan_transaction as lt on 
journalEntry.loan_transaction_id = lt.id ")
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryRunningBalanceUpdateServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryRunningBalanceUpdateServiceImpl.java
index 42ea871a7..9a711e0f2 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryRunningBalanceUpdateServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryRunningBalanceUpdateServiceImpl.java
@@ -40,7 +40,9 @@ import 
org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuild
 import org.apache.fineract.infrastructure.core.data.EnumOptionData;
 import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
 import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
+import org.apache.fineract.infrastructure.core.service.DateUtils;
 import 
org.apache.fineract.infrastructure.core.service.database.DatabaseSpecificSQLGenerator;
+import 
org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
 import org.apache.fineract.organisation.office.domain.OfficeRepositoryWrapper;
 import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -63,6 +65,8 @@ public class JournalEntryRunningBalanceUpdateServiceImpl 
implements JournalEntry
 
     private final GLJournalEntryMapper entryMapper = new 
GLJournalEntryMapper();
 
+    private final PlatformSecurityContext platformSecurityContext;
+
     @Override
     public void updateRunningBalance() {
         String dateFinder = "select MIN(je.entry_date) as entityDate from 
acc_gl_journal_entry  je "
@@ -154,8 +158,10 @@ public class JournalEntryRunningBalanceUpdateServiceImpl 
implements JournalEntry
         if (entryDatas.size() > 0) {
             // run a batch update of 1000 SQL statements at a time
             final Integer batchUpdateSize = 1000;
-            ArrayList<String> updateSql = new ArrayList<>();
+            List<Object[]> params = new ArrayList<>();
             int batchIndex = 0;
+            String sql = "UPDATE acc_gl_journal_entry SET 
is_running_balance_calculated=?, organization_running_balance=?,"
+                    + "office_running_balance=?, last_modified_by=?, 
last_modified_on_utc=?  WHERE  id=?";
             for (int index = 0; index < entryDatas.size(); index++) {
                 JournalEntryData entryData = entryDatas.get(index);
                 Map<Long, BigDecimal> officeRunningBalanceMap = null;
@@ -167,18 +173,15 @@ public class JournalEntryRunningBalanceUpdateServiceImpl 
implements JournalEntry
                 }
                 BigDecimal officeRunningBalance = 
calculateRunningBalance(entryData, officeRunningBalanceMap);
                 BigDecimal runningBalance = calculateRunningBalance(entryData, 
runningBalanceMap);
-                String sql = "UPDATE acc_gl_journal_entry SET 
is_running_balance_calculated=true, organization_running_balance="
-                        + runningBalance + ",office_running_balance=" + 
officeRunningBalance + " WHERE  id=" + entryData.getId();
-                updateSql.add(sql);
+
+                params.add(new Object[] { Boolean.TRUE, runningBalance, 
officeRunningBalance,
+                        platformSecurityContext.authenticatedUser().getId(), 
DateUtils.getOffsetDateTimeOfTenant(), entryData.getId() });
                 batchIndex++;
                 if (batchIndex == batchUpdateSize || index == 
entryDatas.size() - 1) {
-                    // run a batch update of the 1000 update SQL statements
-                    String[] batch = new String[updateSql.size()];
-                    updateSql.toArray(batch);
-                    this.jdbcTemplate.batchUpdate(batch);
+                    this.jdbcTemplate.batchUpdate(sql, params);
                     // reset counter and string array
                     batchIndex = 0;
-                    updateSql.clear();
+                    params.clear();
                 }
             }
         }
@@ -202,14 +205,15 @@ public class JournalEntryRunningBalanceUpdateServiceImpl 
implements JournalEntry
             }
         }
         List<JournalEntryData> entryDatas = 
jdbcTemplate.query(entryMapper.officeRunningBalanceSchema(), entryMapper, 
officeId, entityDate);
-        String[] updateSql = new String[entryDatas.size()];
-        int i = 0;
+        List<Object[]> params = new ArrayList<>();
+
+        String sql = "UPDATE acc_gl_journal_entry SET 
office_running_balance=?, last_modified_by=?, last_modified_on_utc=? WHERE 
id=?";
         for (JournalEntryData entryData : entryDatas) {
             BigDecimal runningBalance = calculateRunningBalance(entryData, 
runningBalanceMap);
-            String sql = "UPDATE acc_gl_journal_entry SET 
office_running_balance=" + runningBalance + " WHERE id=" + entryData.getId();
-            updateSql[i++] = sql;
+            params.add(new Object[] { runningBalance, 
platformSecurityContext.authenticatedUser().getId(),
+                    DateUtils.getOffsetDateTimeOfTenant(), entryData.getId() 
});
         }
-        this.jdbcTemplate.batchUpdate(updateSql);
+        this.jdbcTemplate.batchUpdate(sql, params);
     }
 
     private BigDecimal calculateRunningBalance(JournalEntryData entry, 
Map<Long, BigDecimal> runningBalanceMap) {
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/jobs/postinterestforsavings/PostInterestForSavingTasklet.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/jobs/postinterestforsavings/PostInterestForSavingTasklet.java
index 2fd5839b9..020e109fa 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/jobs/postinterestforsavings/PostInterestForSavingTasklet.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/jobs/postinterestforsavings/PostInterestForSavingTasklet.java
@@ -36,6 +36,7 @@ import org.apache.commons.collections4.CollectionUtils;
 import 
org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
 import org.apache.fineract.infrastructure.core.domain.FineractContext;
 import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
+import 
org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
 import org.apache.fineract.portfolio.savings.data.SavingsAccountData;
 import org.apache.fineract.portfolio.savings.domain.SavingsAccountAssembler;
 import 
org.apache.fineract.portfolio.savings.domain.SavingsAccountRepositoryWrapper;
@@ -66,6 +67,7 @@ public class PostInterestForSavingTasklet implements Tasklet {
     private final Queue<List<SavingsAccountData>> queue = new ArrayDeque<>();
     private final ApplicationContext applicationContext;
     private final int queueSize = 1;
+    private final PlatformSecurityContext securityContext;
 
     @Override
     public RepeatStatus execute(StepContribution contribution, ChunkContext 
chunkContext) throws Exception {
@@ -157,6 +159,7 @@ public class PostInterestForSavingTasklet implements 
Tasklet {
             
savingsSchedularInterestPoster.setBackdatedTxnsAllowedTill(backdatedTxnsAllowedTill);
             
savingsSchedularInterestPoster.setTransactionTemplate(transactionTemplate);
             
savingsSchedularInterestPoster.setConfigurationDomainService(configurationDomainService);
+            
savingsSchedularInterestPoster.setPlatformSecurityContext(securityContext);
 
             posters.add(savingsSchedularInterestPoster);
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularInterestPoster.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularInterestPoster.java
index 729479168..2a1b92391 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularInterestPoster.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularInterestPoster.java
@@ -39,6 +39,7 @@ import 
org.apache.fineract.infrastructure.core.domain.FineractContext;
 import org.apache.fineract.infrastructure.core.service.DateUtils;
 import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
 import org.apache.fineract.infrastructure.jobs.exception.JobExecutionException;
+import 
org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
 import org.apache.fineract.portfolio.savings.data.SavingsAccountData;
 import org.apache.fineract.portfolio.savings.data.SavingsAccountSummaryData;
 import 
org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionData;
@@ -82,6 +83,7 @@ public class SavingsSchedularInterestPoster implements 
Callable<Void> {
     private CommandStrategyProvider strategyProvider;
     private ResolutionHelper resolutionHelper;
     private SavingsAccountReadPlatformService 
savingsAccountReadPlatformService;
+    private PlatformSecurityContext platformSecurityContext;
 
     @Override
     @SuppressFBWarnings(value = {
@@ -172,6 +174,7 @@ public class SavingsSchedularInterestPoster implements 
Callable<Void> {
     private void batchUpdateJournalEntries(final List<SavingsAccountData> 
savingsAccountDataList,
             final HashMap<String, SavingsAccountTransactionData> 
savingsAccountTransactionDataHashMap)
             throws DataAccessException, NullPointerException {
+        Long userId = platformSecurityContext.authenticatedUser().getId();
         String queryForJGLUpdate = batchQueryForJournalEntries();
         List<Object[]> paramsForGLInsertion = new ArrayList<>();
         for (SavingsAccountData savingsAccountData : savingsAccountDataList) {
@@ -182,7 +185,6 @@ public class SavingsSchedularInterestPoster implements 
Callable<Void> {
                 if (savingsAccountTransactionData.getId() == null) {
                     final String key = 
savingsAccountTransactionData.getRefNo();
                     if (savingsAccountTransactionDataHashMap.containsKey(key)) 
{
-                        LocalDate currentDate = 
DateUtils.getLocalDateOfTenant();
                         final SavingsAccountTransactionData dataFromFetch = 
savingsAccountTransactionDataHashMap.get(key);
                         
savingsAccountTransactionData.setId(dataFromFetch.getId());
                         if 
(savingsAccountData.getGlAccountIdForSavingsControl() != 0
@@ -191,31 +193,23 @@ public class SavingsSchedularInterestPoster implements 
Callable<Void> {
                                     savingsAccountData.getOfficeId(), null, 
currencyCode,
                                     SAVINGS_TRANSACTION_IDENTIFIER + 
savingsAccountTransactionData.getId().toString(),
                                     savingsAccountTransactionData.getId(), 
null, false, null, false,
-                                    
Date.from(savingsAccountTransactionData.getTransactionDate()
-                                            
.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()),
-                                    
JournalEntryType.CREDIT.getValue().longValue(), 
savingsAccountTransactionData.getAmount(), null,
-                                    
JournalEntryType.CREDIT.getValue().longValue(), savingsAccountData.getId(),
-                                    
Date.from(currentDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()),
-                                    
Date.from(currentDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()),
 false,
-                                    BigDecimal.ZERO, BigDecimal.ZERO, null,
-                                    
Date.from(savingsAccountTransactionData.getTransactionDate()
-                                            
.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()),
-                                    null, Integer.valueOf(1), 
Integer.valueOf(1) });
+                                    
savingsAccountTransactionData.getTransactionDate(), 
JournalEntryType.CREDIT.getValue().longValue(),
+                                    savingsAccountTransactionData.getAmount(), 
null, JournalEntryType.CREDIT.getValue().longValue(),
+                                    savingsAccountData.getId(), 
DateUtils.getOffsetDateTimeOfTenant(),
+                                    DateUtils.getOffsetDateTimeOfTenant(), 
false, BigDecimal.ZERO, BigDecimal.ZERO, null,
+                                    
savingsAccountTransactionData.getTransactionDate(), null, userId, userId,
+                                    DateUtils.getBusinessLocalDate() });
 
                             paramsForGLInsertion.add(new Object[] { 
savingsAccountData.getGlAccountIdForInterestOnSavings(),
                                     savingsAccountData.getOfficeId(), null, 
currencyCode,
                                     SAVINGS_TRANSACTION_IDENTIFIER + 
savingsAccountTransactionData.getId().toString(),
                                     savingsAccountTransactionData.getId(), 
null, false, null, false,
-                                    
Date.from(savingsAccountTransactionData.getTransactionDate()
-                                            
.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()),
-                                    
JournalEntryType.DEBIT.getValue().longValue(), 
savingsAccountTransactionData.getAmount(), null,
-                                    
JournalEntryType.DEBIT.getValue().longValue(), savingsAccountData.getId(),
-                                    
Date.from(currentDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()),
-                                    
Date.from(currentDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()),
 false,
-                                    BigDecimal.ZERO, BigDecimal.ZERO, null,
-                                    
Date.from(savingsAccountTransactionData.getTransactionDate()
-                                            
.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()),
-                                    null, Integer.valueOf(1), 
Integer.valueOf(1) });
+                                    
savingsAccountTransactionData.getTransactionDate(), 
JournalEntryType.DEBIT.getValue().longValue(),
+                                    savingsAccountTransactionData.getAmount(), 
null, JournalEntryType.DEBIT.getValue().longValue(),
+                                    savingsAccountData.getId(), 
DateUtils.getOffsetDateTimeOfTenant(),
+                                    DateUtils.getOffsetDateTimeOfTenant(), 
false, BigDecimal.ZERO, BigDecimal.ZERO, null,
+                                    
savingsAccountTransactionData.getTransactionDate(), null, userId, userId,
+                                    DateUtils.getBusinessLocalDate() });
                         }
                     }
                 }
@@ -232,10 +226,10 @@ public class SavingsSchedularInterestPoster implements 
Callable<Void> {
 
         query.append("INSERT INTO 
acc_gl_journal_entry(account_id,office_id,reversal_id,currency_code,transaction_id,");
         
query.append("savings_transaction_id,client_transaction_id,reversed,ref_num,manual_entry,entry_date,type_enum,");
-        
query.append("amount,description,entity_type_enum,entity_id,created_date,");
-        
query.append("lastmodified_date,is_running_balance_calculated,office_running_balance,organization_running_balance,");
-        
query.append("payment_details_id,transaction_date,share_transaction_id, 
createdby_id, lastmodifiedby_id) ");
-        query.append("VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 
?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
+        
query.append("amount,description,entity_type_enum,entity_id,created_on_utc,");
+        
query.append("last_modified_on_utc,is_running_balance_calculated,office_running_balance,organization_running_balance,");
+        
query.append("payment_details_id,transaction_date,share_transaction_id, 
created_by, last_modified_by, submitted_on_date) ");
+        query.append("VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
 
         return query.toString();
     }
diff --git 
a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml 
b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
index cb283230e..86ee3e172 100644
--- 
a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
+++ 
b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
@@ -44,4 +44,5 @@
     <include file="parts/0022_add_batch_business_step_configuration_table.xml" 
relativeToChangelogFile="true"/>
     <include file="parts/0023_use_the_proper_date_or_datetime_type.xml" 
relativeToChangelogFile="true"/>
     <include file="parts/0024_add_audit_entries.xml" 
relativeToChangelogFile="true"/>
+    <include file="parts/0025_add_audit_entries_to_journal_entry.xml" 
relativeToChangelogFile="true"/>
 </databaseChangeLog>
diff --git 
a/fineract-provider/src/main/resources/db/changelog/tenant/parts/0025_add_audit_entries_to_journal_entry.xml
 
b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0025_add_audit_entries_to_journal_entry.xml
new file mode 100644
index 000000000..156f83c7a
--- /dev/null
+++ 
b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0025_add_audit_entries_to_journal_entry.xml
@@ -0,0 +1,85 @@
+<?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.3.xsd";>
+    <!--Journal entry-->
+    <changeSet author="fineract" id="journal-entry-1" context="mysql">
+        <addColumn tableName="acc_gl_journal_entry">
+            <column name="created_on_utc" type="DATETIME"/>
+            <column name="last_modified_on_utc" type="DATETIME"/>
+        </addColumn>
+    </changeSet>
+    <changeSet author="fineract" id="journal-entry-1" context="postgresql">
+        <addColumn tableName="acc_gl_journal_entry">
+            <column name="created_on_utc" type="TIMESTAMP WITH TIME ZONE"/>
+            <column name="last_modified_on_utc" type="TIMESTAMP WITH TIME 
ZONE"/>
+        </addColumn>
+    </changeSet>
+
+    <changeSet id="journal-entry-2" author="fineract">
+        <dropNotNullConstraint tableName="acc_gl_journal_entry" 
columnName="created_date" columnDataType="datetime"/>
+        <dropNotNullConstraint tableName="acc_gl_journal_entry" 
columnName="lastmodified_date" columnDataType="datetime"/>
+    </changeSet>
+    <changeSet id="journal-entry-3" author="fineract">
+        <renameColumn tableName="acc_gl_journal_entry" 
oldColumnName="createdby_id" newColumnName="created_by" 
columnDataType="BIGINT"/>
+        <renameColumn tableName="acc_gl_journal_entry" 
oldColumnName="lastmodifiedby_id" newColumnName="last_modified_by" 
columnDataType="BIGINT"/>
+    </changeSet>
+    <changeSet author="fineract" id="journal-entry-4">
+        <addForeignKeyConstraint baseColumnNames="created_by" 
baseTableName="acc_gl_journal_entry"
+                                 constraintName="FK_journal_entry_created_by" 
deferrable="false" initiallyDeferred="false"
+                                 onDelete="RESTRICT" onUpdate="RESTRICT" 
referencedColumnNames="id"
+                                 referencedTableName="m_appuser" 
validate="true"/>
+        <addForeignKeyConstraint baseColumnNames="last_modified_by" 
baseTableName="acc_gl_journal_entry"
+                                 
constraintName="FK_journal_entry_last_modified_by" deferrable="false" 
initiallyDeferred="false"
+                                 onDelete="RESTRICT" onUpdate="RESTRICT" 
referencedColumnNames="id"
+                                 referencedTableName="m_appuser" 
validate="true"/>
+    </changeSet>
+    <changeSet id="journal-entry-5" author="fineract" context="mysql">
+        <preConditions onFail="MARK_RAN">
+            <sqlCheck expectedResult="0">select count(*) from 
acc_gl_journal_entry</sqlCheck>
+        </preConditions>
+        <addNotNullConstraint tableName="acc_gl_journal_entry" 
columnName="created_on_utc" columnDataType="DATETIME"/>
+        <addNotNullConstraint tableName="acc_gl_journal_entry" 
columnName="last_modified_on_utc" columnDataType="DATETIME"/>
+    </changeSet>
+    <changeSet id="journal-entry-5" author="fineract" context="postgresql">
+        <preConditions onFail="MARK_RAN">
+            <sqlCheck expectedResult="0">select count(*) from 
acc_gl_journal_entry</sqlCheck>
+        </preConditions>
+        <addNotNullConstraint tableName="acc_gl_journal_entry" 
columnName="created_on_utc" columnDataType="TIMESTAMP WITH TIME ZONE"/>
+        <addNotNullConstraint tableName="acc_gl_journal_entry" 
columnName="last_modified_on_utc" columnDataType="TIMESTAMP WITH TIME ZONE"/>
+    </changeSet>
+    <changeSet id="journal-entry-6" author="fineract">
+        <addColumn tableName="acc_gl_journal_entry">
+            <column name="submitted_on_date" type="DATE" 
valueComputed="created_date">
+                <constraints nullable="false"/>
+            </column>
+        </addColumn>
+    </changeSet>
+    <changeSet author="fineract" id="journal-entry-7">
+        <setColumnRemarks
+                columnName="transaction_date"
+                remarks="Unfinished. Not maintained."
+                columnDataType="date"
+                tableName="acc_gl_journal_entry"/>
+    </changeSet>
+</databaseChangeLog>

Reply via email to