SalesOrderRepositoryImpl.java
package com.tradecloud.repository.impl;
import com.tradecloud.domain.dto.base.SearchBase;
import com.tradecloud.domain.model.ordermanagement.Consignment;
import com.tradecloud.domain.model.ordermanagement.SalesOrder;
import com.tradecloud.dto.order.OrderConfirmationSearchResult;
import com.tradecloud.dto.order.SalesOrderSearch;
import com.tradecloud.repository.SalesOrderRepository;
import com.tradecloud.repository.base.impl.CriteriaOperation;
import com.tradecloud.repository.base.impl.CriteriaValue;
import org.apache.commons.lang3.ObjectUtils;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityGraph;
import java.util.Collection;
import java.util.List;
/**
* Sales Order specific repository.
* <p>
* This is an empty implementation. It's used so Spring can differentiate
* between Purchase and Sales Order repository beans.
*/
@Repository(value = "salesOrderRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class SalesOrderRepositoryImpl extends OrderRepositoryImpl<SalesOrder, SalesOrderSearch> implements SalesOrderRepository {
@Override
protected Collection<CriteriaValue> mapFieldsToValues(SalesOrderSearch search) {
String tableName = ((SearchBase) search).getTableName();
String alias = tableName.toLowerCase() + ".";
Collection<CriteriaValue> fields = super.mapFieldsToValues(search);
if (search.getCustomerReference() != null)
fields.add(new CriteriaValue(CriteriaOperation.LIKE, alias + "customerReference", search.getCustomerReference()));
if (search.getExportParty() != null)
fields.add(new CriteriaValue(CriteriaOperation.EQUALS, alias + "exportParty", search.getExportParty()));
if (search.getShippingReference() != null)
fields.add(new CriteriaValue(CriteriaOperation.LIKE, SALES_SHIPPING_REFERENCE, search.getShippingReference()));
if (search.getStyleReference() != null)
fields.add(new CriteriaValue(CriteriaOperation.LIKE, alias + "li.stylereference", search.getStyleReference()));
if (search.getStyleDescription() != null)
fields.add(new CriteriaValue(CriteriaOperation.LIKE, alias + "li.styledescription", search.getStyleDescription()));
if (search.getItemReference() != null)
fields.add(new CriteriaValue(CriteriaOperation.LIKE, "li.code", search.getItemReference()));
if (search.getItemDescription() != null)
fields.add(new CriteriaValue(CriteriaOperation.LIKE, "li.description", search.getItemDescription()));
return fields;
}
@Override
protected void addJoins(SalesOrderSearch search, StringBuilder sb, String alias) {
if (ObjectUtils.anyNotNull(search.getItemDescription(), search.getItemReference(), search.getStyleDescription(), search.getStyleReference())) {
sb.append(" join " + alias + ".lineItems li ");
}
}
@Override
public List<OrderConfirmationSearchResult> confirmationSearchTransformed(SalesOrderSearch orderSearch) {
return null;
}
@Override
public List<SalesOrder> findOrdersForLiteConsignment(Consignment consignment) {
return null;
}
@Override
protected void setOrderPlannedSettlementSpecificfields(SalesOrderSearch search, DetachedCriteria criteria) {
}
@Override
protected String getEntityName() {
return SalesOrder.class.getSimpleName();
}
@Override
public SalesOrder retrieveWithConsignment(long id) {
EntityGraph<?> graph = getCurrentSession().getEntityGraph("graph.SalesOrderConsignment");
return (SalesOrder) getCurrentSession()
.createQuery("SELECT o FROM SalesOrder o where o.id=:id", getPersistentClass())
.setParameter("id", id)
.setHint("HINT_SPEC_FETCH_GRAPH", graph)
.setParameter("id", id)
.uniqueResult();
}
}