package devopsdistilled.operp.server.data.service.account.impl;
import java.util.Date;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import devopsdistilled.operp.client.account.models.ReceivedTransactionModel;
import devopsdistilled.operp.server.data.entity.account.ReceivedTransaction;
import devopsdistilled.operp.server.data.repo.account.ReceivedTransactionRepository;
import devopsdistilled.operp.server.data.service.account.ReceivableAccountService;
import devopsdistilled.operp.server.data.service.account.ReceivedTransactionService;
@Service
public class ReceivedTransactionServiceImpl
extends
TransactionServiceImpl<ReceivedTransaction, ReceivedTransactionRepository, ReceivedTransactionModel>
implements ReceivedTransactionService {
private static final long serialVersionUID = -8134555856017276841L;
@Inject
private ReceivedTransactionRepository repo;
@Inject
private ReceivableAccountService receivableAccountService;
@Override
protected ReceivedTransactionRepository getRepo() {
return repo;
}
@Override
@Transactional
public <S extends ReceivedTransaction> S save(S transaction) {
transaction.setTransactionDate(new Date());
transaction = super.save(transaction);
Double initBalance = transaction.getAccount().getBalance();
Double afterTranBalance = initBalance - transaction.getAmount();
transaction.getAccount().setBalance(afterTranBalance);
receivableAccountService.save(transaction.getAccount());
return transaction;
}
@Override
@Transactional
public void delete(ReceivedTransaction receivedTransaction) {
Double afterTranBalance = receivedTransaction.getAccount().getBalance();
Double initBalance = afterTranBalance + receivedTransaction.getAmount();
receivedTransaction.getAccount().setBalance(initBalance);
receivableAccountService.save(receivedTransaction.getAccount());
super.delete(receivedTransaction);
}
}