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.PaidTransactionModel;
import devopsdistilled.operp.server.data.entity.account.PaidTransaction;
import devopsdistilled.operp.server.data.repo.account.PaidTransactionRepository;
import devopsdistilled.operp.server.data.service.account.PaidTransactionService;
import devopsdistilled.operp.server.data.service.account.PayableAccountService;
@Service
public class PaidTransactionServiceImpl
extends
TransactionServiceImpl<PaidTransaction, PaidTransactionRepository, PaidTransactionModel>
implements PaidTransactionService {
private static final long serialVersionUID = 8946536638729817665L;
@Inject
private PaidTransactionRepository repo;
@Inject
private PayableAccountService payableAccountService;
@Override
protected PaidTransactionRepository getRepo() {
return repo;
}
@Override
@Transactional
public <S extends PaidTransaction> 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);
payableAccountService.save(transaction.getAccount());
return transaction;
}
@Override
@Transactional
public void delete(PaidTransaction paidTransaction) {
Double afterTranBalance = paidTransaction.getAccount().getBalance();
Double initBalance = afterTranBalance + paidTransaction.getAmount();
paidTransaction.getAccount().setBalance(initBalance);
payableAccountService.save(paidTransaction.getAccount());
super.delete(paidTransaction);
}
}