ServiceFeeRepositoryImpl.java
package com.tradecloud.repository.impl;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.model.organisationalunit.tradefinance.ServiceFee;
import com.tradecloud.repository.ServiceFeeRepository;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
* Created by ds on 2017/06/21.
*/
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
@Repository(value = "serviceFeeRepository")
public class ServiceFeeRepositoryImpl extends RepositoryBaseImpl<ServiceFee, Object> implements ServiceFeeRepository {
private static Logger log = Logger.getLogger(ServiceFeeRepositoryImpl.class);
@Override
public List<ServiceFee> findAllForOrganisationalUnit(OrganisationalUnit organisationalUnit) {
Criteria searchCriteria = getSessionCustom().createCriteria(ServiceFee.class);
searchCriteria.add(Restrictions.eq("organisationalUnit", organisationalUnit));
return searchCriteria.list();
}
@Override
public ServiceFee findFirstAvailableForOrganisationalUnitAndDate(OrganisationalUnit organisationalUnit, Date date) {
Criteria searchCriteria = getSessionCustom().createCriteria(ServiceFee.class);
searchCriteria.add(Restrictions.eq("organisationalUnit", organisationalUnit));
searchCriteria.add(Restrictions.lt("effectiveDate", date));
searchCriteria.addOrder(org.hibernate.criterion.Order.desc("effectiveDate"));
List<ServiceFee> serviceFeeList = searchCriteria.list();
if(serviceFeeList.isEmpty() && organisationalUnit.getParent() != null) {
return findFirstAvailableForOrganisationalUnitAndDate(organisationalUnit.getParent(), new Date());
} else {
return !serviceFeeList.isEmpty() ? serviceFeeList.get(0) : null;
}
}
}