blob: 64d45ef44f466bb27bb4c4f61b24a6b4ac5847f5 [file] [log] [blame]
/**
* 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.
*/
package org.apache.fineract.interoperation.data;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.service.MathUtil;
import org.apache.fineract.portfolio.note.domain.Note;
import org.apache.fineract.portfolio.savings.SavingsAccountTransactionType;
import org.apache.fineract.portfolio.savings.domain.SavingsAccount;
import org.apache.fineract.portfolio.savings.domain.SavingsAccountChargePaidBy;
import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction;
import org.apache.fineract.portfolio.savings.service.SavingsEnumerations;
public class InteropTransactionData extends CommandProcessingResult {
// private final SavingsAccountTransactionEnumData transactionType;
// private final PaymentDetailData paymentDetailData;
// private final BigDecimal outstandingChargeAmount;
// private final boolean reversed;
// private final AccountTransferData transfer;
// private final LocalDate submittedOnDate;
// private final boolean interestedPostedAsOn;
// private final String submittedByUsername;
// // templates
// final Collection<PaymentTypeData> paymentTypeOptions;
// //import fields
// private Long paymentTypeId;
// private String checkNumber;
// private String routingCode;
// private String receiptNumber;
// private String bankNumber;
// private String transactionReference;
// private String statementReference;
// private CreditDebitType creditDebit;
// private TransactionStatus status;
// private String transactionInformation;
// private String addressLine;
@NotNull
private final String accountId;
@NotNull
private final String savingTransactionId;
@NotNull
private final SavingsAccountTransactionType transactionType;
@NotNull
private final BigDecimal amount;
private final BigDecimal chargeAmount;
@NotNull
private final String currency;
@NotNull
private final BigDecimal accountBalance;
@NotNull
private final LocalDate bookingDateTime;
@NotNull
private final LocalDate valueDateTime;
private final String note;
public InteropTransactionData(Long entityId, String accountId, String transactionId, SavingsAccountTransactionType transactionType,
BigDecimal amount, BigDecimal chargeAmount, String currency, BigDecimal accountBalance, LocalDate bookingDateTime,
LocalDate valueDateTime, String note) {
super(entityId);
this.accountId = accountId;
this.savingTransactionId = transactionId;
this.transactionType = transactionType;
this.amount = amount;
this.chargeAmount = chargeAmount;
this.currency = currency;
this.accountBalance = accountBalance;
this.bookingDateTime = bookingDateTime;
this.valueDateTime = valueDateTime;
this.note = note;
}
public static InteropTransactionData build(SavingsAccountTransaction transaction) {
if (transaction == null) {
return null;
}
SavingsAccount savingsAccount = transaction.getSavingsAccount();
String transactionId = transaction.getId().toString();
SavingsAccountTransactionType transactionType = transaction.getTransactionType();
BigDecimal amount = transaction.getAmount();
BigDecimal chargeAmount = null;
for (SavingsAccountChargePaidBy charge : transaction.getSavingsAccountChargesPaid()) {
chargeAmount = MathUtil.add(chargeAmount, charge.getAmount());
}
String currency = savingsAccount.getCurrency().getCode();
BigDecimal runningBalance = transaction.getRunningBalance(savingsAccount.getCurrency()).getAmount();
LocalDate bookingDateTime = transaction.getTransactionDate();
LocalDate endOfBalanceLocalDate = transaction.getEndOfBalanceDate();
LocalDate valueDateTime = endOfBalanceLocalDate == null ? bookingDateTime : endOfBalanceLocalDate;
StringBuilder sb = new StringBuilder();
int currLength = 0;
for (Note note : transaction.getNotes()) {
String s = note.getNote();
if (s == null) {
continue;
}
int availableLength = 500 - currLength;
if (availableLength <= 1) {
break;
}
if (currLength > 0) {
sb.append(' ');
availableLength--;
}
if (s.length() > availableLength) {
s = s.substring(availableLength);
}
sb.append(s);
currLength = sb.length();
}
if (currLength == 0) {
sb.append(SavingsEnumerations.transactionType(transactionType).getValue());
}
return new InteropTransactionData(savingsAccount.getId(), savingsAccount.getExternalId().getValue(), transactionId, transactionType,
amount, chargeAmount, currency, runningBalance, bookingDateTime, valueDateTime, sb.toString());
}
}