OverstayAndStorageRepositoryImpl.java
package com.tradecloud.repository.demurrage;
import com.tradecloud.domain.base.utils.DateRange;
import com.tradecloud.domain.demurrage.OverstayAndStorageTransaction;
import com.tradecloud.dto.demurrage.OverstayAndStorageTransactionSearch;
import com.tradecloud.repository.base.impl.CriteriaValue;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import org.hibernate.Query;
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.Collection;
import java.util.LinkedHashSet;
import java.util.List;
@Repository(value = "overstayAndStorageRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class OverstayAndStorageRepositoryImpl extends RepositoryBaseImpl<OverstayAndStorageTransaction, OverstayAndStorageTransactionSearch>
implements OverstayAndStorageRepository {
private static final String EFFECTIVE_DATE = "effectiveDate";
private static final String CONTAINER_TYPE = "containerType";
private static final String PLACE_OF_DISCHARGE = "shipmentContainer.placeOfDischarge";
private static final String TURN_IN_DEPOT = "turnInDepot";
private static final String CARRIER = "seaShipment.carrier";
private static final String CONTAINER_REFERENCE = "shipmentContainer.reference";
private static final String SHIPMENT_NUMBER = "shipmentContainer.shipment.number";
private static final String SHIPMENT_REFERENCE = "shipmentContainer.shipment.reference";
private static final String TRANSACTION_STATE = "state";
private static final String CREATED_DATE = "created";
private static final String FREE_PERIOD_DATE = "shipmentContainer.overstayAndStorageFreePeriodEnd";
private static final String SIGNED_OFF_DATE = "signedOffDate";
private static final String PORT_STORAGE_DATE_FROM = "portStorageFromDate";
private static final String PORT_STORAGE_DATE_TO = "portStorageToDate";
private static final String OVERSTAY_DATE_FROM = "overstayFromDate";
private static final String OVERSTAY_DATE_TO = "overstayToDate";
private static final String ACTIVE = "active";
@Override
public List<OverstayAndStorageTransaction> search(OverstayAndStorageTransactionSearch search) {
Query query = createQuery(search, false, mapFieldsToValues(search));
return getQueryList(query, search.getSearchMetaParams());
}
@Override
protected Collection<CriteriaValue> mapFieldsToValues(OverstayAndStorageTransactionSearch search) {
Collection<CriteriaValue> fields = new LinkedHashSet<CriteriaValue>();
fields.add(CriteriaValue.like(CONTAINER_REFERENCE, search.getContainerReference()));
fields.add(CriteriaValue.like(SHIPMENT_REFERENCE, search.getShipmentReference()));
fields.add(CriteriaValue.like(SHIPMENT_NUMBER, search.getShipmentNumber()));
fields.add(CriteriaValue.eq(TRANSACTION_STATE, search.getState()));
fields.add(CriteriaValue.eq(PLACE_OF_DISCHARGE, search.getPlaceOfDischarge()));
fields.add(CriteriaValue.eq(CARRIER, search.getCarrier()));
if(search.getCreatedDateRange() != null) {
DateRange dr = search.getCreatedDateRange();
fields.add(CriteriaValue.gt(CREATED_DATE, dr.getFromAsStartOfDay()));
fields.add(CriteriaValue.lt(CREATED_DATE, dr.getToAsEndOfDay()));
}
if(search.getFreePeriodEndDateRange() != null) {
DateRange dr = search.getFreePeriodEndDateRange();
fields.add(CriteriaValue.gt(FREE_PERIOD_DATE, dr.getFromAsStartOfDay()));
fields.add(CriteriaValue.lt(FREE_PERIOD_DATE, dr.getToAsEndOfDay()));
}
if(search.getPortStorageDateRange() != null) {
DateRange dr = search.getPortStorageDateRange();
fields.add(CriteriaValue.gt(PORT_STORAGE_DATE_FROM, dr.getFromAsStartOfDay()));
fields.add(CriteriaValue.lt(PORT_STORAGE_DATE_TO, search.getPortStorageDateRange().getTo()));
}
if(search.getOverstayDateRange() != null) {
DateRange dr = search.getOverstayDateRange();
fields.add(CriteriaValue.gt(OVERSTAY_DATE_FROM, dr.getFromAsStartOfDay()));
fields.add(CriteriaValue.lt(OVERSTAY_DATE_TO, dr.getToAsEndOfDay()));
}
if(search.getSignedOffDateRange() != null) {
DateRange dr = search.getSignedOffDateRange();
fields.add(CriteriaValue.gt(SIGNED_OFF_DATE, dr.getFromAsStartOfDay()));
fields.add(CriteriaValue.lt(SIGNED_OFF_DATE, dr.getToAsEndOfDay()));
}
// fields.add(CriteriaValue.eq(ACTIVE, true));
return fields;
}
}