/*
* Licensed to csti consulting
* You may obtain a copy of the License at
*
* http://www.csticonsulting.com
* Copyright (c) 2006-Aug 24, 2010 Consultation CS-TI inc.
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.salesmanager.core.service.order.impl.dao;
// Generated Oct 1, 2008 11:18:03 AM by Hibernate Tools 3.2.0.beta8
import java.util.Collection;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import com.salesmanager.core.constants.OrderConstants;
import com.salesmanager.core.entity.orders.Order;
import com.salesmanager.core.entity.orders.SearchOrderResponse;
import com.salesmanager.core.entity.orders.SearchOrdersCriteria;
/**
* Home object for domain model class Orders.
*
* @see com.salesmanager.core.test.Orders
* @author Hibernate Tools
*/
@Repository
public class OrderDao extends HibernateDaoSupport implements IOrderDao {
private static final Log log = LogFactory.getLog(OrderDao.class);
@Autowired
public OrderDao(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
/*
* (non-Javadoc)
*
* @see
* com.salesmanager.core.service.order.impl.IOrderDao#persist(com.salesmanager
* .core.entity.orders.Order)
*/
public void persist(Order transientInstance) {
try {
super.getHibernateTemplate().persist(transientInstance);
} catch (RuntimeException re) {
log.error("persist failed", re);
throw re;
}
}
/*
* (non-Javadoc)
*
* @seecom.salesmanager.core.service.order.impl.IOrderDao#saveOrUpdate(com.
* salesmanager.core.entity.orders.Order)
*/
public void saveOrUpdate(Order instance) {
try {
super.getHibernateTemplate().saveOrUpdate(instance);
} catch (RuntimeException re) {
log.error("attach failed", re);
throw re;
}
}
/*
* (non-Javadoc)
*
* @see
* com.salesmanager.core.service.order.impl.IOrderDao#delete(com.salesmanager
* .core.entity.orders.Order)
*/
public void delete(Order persistentInstance) {
try {
super.getHibernateTemplate().delete(persistentInstance);
} catch (RuntimeException re) {
log.error("delete failed", re);
throw re;
}
}
/*
* (non-Javadoc)
*
* @see
* com.salesmanager.core.service.order.impl.IOrderDao#merge(com.salesmanager
* .core.entity.orders.Order)
*/
public Order merge(Order detachedInstance) {
try {
Order result = (Order) super.getHibernateTemplate().merge(
detachedInstance);
return result;
} catch (RuntimeException re) {
log.error("merge failed", re);
throw re;
}
}
public Order createRawOrder(long orderId) {
try {
Session session = getHibernateTemplate().getSessionFactory()
.getCurrentSession();
session.createSQLQuery(
"INSERT INTO orders(orders_id) values (" + orderId + ")")
.executeUpdate();
Order result = findById(orderId);
return result;
} catch (Exception re) {
log.error("merge failed", re);
throw new RuntimeException(re);
}
}
/*
* (non-Javadoc)
*
* @see com.salesmanager.core.service.order.impl.IOrderDao#findById(int)
*/
public Order findById(long id) {
try {
Order instance = (Order) super.getHibernateTemplate().get(
"com.salesmanager.core.entity.orders.Order", id);
return instance;
} catch (RuntimeException re) {
log.error("get failed", re);
throw re;
}
}
@SuppressWarnings("unchecked")
public List<Order> findOrdersByCustomer(long customerId) {
Criteria criteria = super.getSession().createCriteria(Order.class).add(
Restrictions.eq("customerId", customerId)).addOrder(
org.hibernate.criterion.Order.desc("orderId"))
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return criteria.list();
}
public List<Order> findOrdersByMerchant(int merchantId) {
Criteria criteria = super.getSession().createCriteria(Order.class).add(
Restrictions.eq("merchantId", merchantId)).addOrder(
org.hibernate.criterion.Order.desc("orderId"))
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return criteria.list();
}
@SuppressWarnings("unchecked")
public Collection<Order> findInvoicesByCustomer(long customerId) {
Criteria criteria = super.getSession().createCriteria(Order.class).add(
Restrictions.eq("customerId", customerId)).add(
Restrictions.eq("channel", OrderConstants.INVOICE_CHANNEL))
.addOrder(org.hibernate.criterion.Order.desc("orderId"));
return criteria.list();
}
@SuppressWarnings("unchecked")
public Collection<Order> findInvoicesByCustomerAndStartDate(
long customerId, Date startDate) {
Criteria criteria = super.getSession().createCriteria(Order.class).add(
Restrictions.eq("customerId", customerId)).add(
Restrictions.eq("channel", OrderConstants.INVOICE_CHANNEL))
.add(Restrictions.ge("datePurchased", startDate)).addOrder(
org.hibernate.criterion.Order.desc("orderId"));
return criteria.list();
}
public SearchOrderResponse searchInvoice(SearchOrdersCriteria searchCriteria) {
Criteria criteria = super
.getSession()
.createCriteria(Order.class)
.add(
Restrictions.eq("merchantId", searchCriteria
.getMerchantId()))
.add(Restrictions.eq("channel", OrderConstants.INVOICE_CHANNEL))
.add(
Restrictions.eq("orderStatus",
OrderConstants.STATUSINVOICED)).addOrder(
org.hibernate.criterion.Order.desc("orderId"))
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
StringBuffer q = new StringBuffer();
q.append(" select o from Order o where o.merchantId=:mId");
q.append(" and channel=:channel and orderStatus=:status");
if (searchCriteria != null) {
if (!StringUtils.isBlank(searchCriteria.getCustomerName())) {
q.append(" and o.customerName like %:cName%");
}
if (searchCriteria.getOrderId() != -1) {
q.append(" and o.orderId=:oId");
}
if (searchCriteria.getEdate() != null
|| searchCriteria.getSdate() != null) {
if (searchCriteria.getSdate() != null) {
q.append(" and o.datePurchased > :sDate");
} else {
q.append(" and o.datePurchased > :sDate");
}
if (searchCriteria.getEdate() != null) {
q.append(" and o.datePurchased < :eDate");
} else {
q.append(" and o.datePurchased < :eDate");
}
}
}
q.append(" order by o.orderId desc");
Query c = super.getSession().createQuery(q.toString());
c.setInteger("channel", OrderConstants.INVOICE_CHANNEL);
c.setInteger("status", OrderConstants.STATUSINVOICED);
c.setInteger("mId", searchCriteria.getMerchantId());
if (searchCriteria != null) {
if (!StringUtils.isBlank(searchCriteria.getCustomerName())) {
criteria.add(Restrictions.like("customerName", "%"
+ searchCriteria.getCustomerName() + "%"));
c.setString("cName", "%" + searchCriteria.getCustomerName()
+ "%");
}
if (searchCriteria.getOrderId() != -1) {
criteria.add(Restrictions.eq("orderId", searchCriteria
.getOrderId()));
c.setLong("oId", searchCriteria.getOrderId());
}
if (searchCriteria.getEdate() != null
|| searchCriteria.getSdate() != null) {
if (searchCriteria.getSdate() != null) {
criteria.add(Restrictions.ge("datePurchased",
searchCriteria.getSdate()));
c.setDate("sDate", searchCriteria.getSdate());
} else {
criteria.add(Restrictions.ge("datePurchased", DateUtils
.addDays(new Date(), -1)));
c.setDate("sDate", DateUtils.addDays(new Date(), -1));
}
if (searchCriteria.getEdate() != null) {
criteria.add(Restrictions.le("datePurchased",
searchCriteria.getEdate()));
c.setDate("eDate", searchCriteria.getEdate());
} else {
criteria.add(Restrictions.ge("datePurchased", DateUtils
.addDays(new Date(), +1)));
c.setDate("eDate", DateUtils.addDays(new Date(), +1));
}
}
}
criteria.setProjection(Projections.rowCount());
Integer count = (Integer) criteria.uniqueResult();
criteria.setProjection(null);
int max = searchCriteria.getQuantity();
List list = null;
if (max != -1 && count > 0) {
list = c.setMaxResults(searchCriteria.getUpperLimit(count))
.setFirstResult(searchCriteria.getLowerLimit()).list();
} else {
list = c.list();
}
SearchOrderResponse response = new SearchOrderResponse();
response.setCount(count);
response.setOrders(list);
return response;
}
public SearchOrderResponse searchOrder(SearchOrdersCriteria searchCriteria) {
Criteria criteria = super.getSession().createCriteria(Order.class).add(
Restrictions.eq("merchantId", searchCriteria.getMerchantId()))
.add(Restrictions.eq("channel", OrderConstants.ONLINE_CHANNEL))
.addOrder(org.hibernate.criterion.Order.desc("orderId"))
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
StringBuffer q = new StringBuffer();
q.append(" select o from Order o where o.merchantId=:mId");
q.append(" and channel=:channel");
if (searchCriteria != null) {
if (!StringUtils.isBlank(searchCriteria.getCustomerName())) {
q.append(" and o.customerName like :cName");
}
if (searchCriteria.getOrderId() != -1) {
q.append(" and o.orderId= :oId");
}
if (searchCriteria.getEdate() != null
|| searchCriteria.getSdate() != null) {
if (searchCriteria.getSdate() != null) {
q.append(" and o.datePurchased > :sDate");
} else {
q.append(" and o.datePurchased > :sDate");
}
if (searchCriteria.getEdate() != null) {
q.append(" and o.datePurchased < :eDate");
} else {
q.append(" and o.datePurchased < :eDate");
}
}
}
q.append(" order by o.orderId desc");
Query c = super.getSession().createQuery(q.toString());
c.setInteger("channel", OrderConstants.ONLINE_CHANNEL);
c.setInteger("mId", searchCriteria.getMerchantId());
if (searchCriteria != null) {
if (!StringUtils.isBlank(searchCriteria.getCustomerName())) {
criteria.add(Restrictions.like("customerName", "%"
+ searchCriteria.getCustomerName() + "%"));
c.setString("cName", "%" + searchCriteria.getCustomerName()
+ "%");
}
if (searchCriteria.getOrderId() != -1) {
criteria.add(Restrictions.eq("orderId", searchCriteria
.getOrderId()));
c.setLong("oId", searchCriteria.getOrderId());
}
if (searchCriteria.getEdate() != null
|| searchCriteria.getSdate() != null) {
if (searchCriteria.getSdate() != null) {
criteria.add(Restrictions.ge("datePurchased",
searchCriteria.getSdate()));
c.setDate("sDate", searchCriteria.getSdate());
} else {
criteria.add(Restrictions.ge("datePurchased", DateUtils
.addDays(new Date(), -1)));
c.setDate("sDate", DateUtils.addDays(new Date(), -1));
}
if (searchCriteria.getEdate() != null) {
criteria.add(Restrictions.le("datePurchased",
searchCriteria.getEdate()));
c.setDate("eDate", searchCriteria.getEdate());
} else {
criteria.add(Restrictions.ge("datePurchased", DateUtils
.addDays(new Date(), +1)));
c.setDate("eDate", DateUtils.addDays(new Date(), +1));
}
}
}
criteria.setProjection(Projections.rowCount());
Integer count = (Integer) criteria.uniqueResult();
criteria.setProjection(null);
int max = searchCriteria.getQuantity();
List list = null;
if (max != -1 && count > 0) {
c.setMaxResults(searchCriteria.getUpperLimit(count));
c.setFirstResult(searchCriteria.getLowerLimit());
list = c.list();
} else {
list = c.list();
}
SearchOrderResponse response = new SearchOrderResponse();
response.setCount(count);
response.setOrders(list);
return response;
}
public SearchOrderResponse searchOrderByCustomer(
SearchOrdersCriteria searchCriteria) {
Criteria criteria = super.getSession().createCriteria(Order.class).add(
Restrictions.eq("customerId", searchCriteria.getCustomerId()))
.add(
Restrictions.eq("merchantId", searchCriteria
.getMerchantId())).add(
Restrictions.eq("channel",
OrderConstants.ONLINE_CHANNEL)).addOrder(
org.hibernate.criterion.Order.desc("orderId"));
StringBuffer q = new StringBuffer();
q.append(" select o from Order o where o.merchantId=:mId");
q.append(" and channel=:channel");
q.append(" and o.customerId = :cId");
q.append(" and o.merchantId = :mId");
q.append(" order by o.orderId desc");
Query query = super.getSession().createQuery(q.toString());
query.setInteger("channel", OrderConstants.ONLINE_CHANNEL);
query.setInteger("mId", searchCriteria.getMerchantId());
query.setLong("cId", searchCriteria.getCustomerId());
query.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
criteria.setProjection(Projections.rowCount());
Integer count = (Integer) criteria.uniqueResult();
criteria.setProjection(null);
int max = searchCriteria.getQuantity();
List list = null;
if (max != -1 && count > 0) {
query.setMaxResults(searchCriteria.getUpperLimit(count));
query.setFirstResult(searchCriteria.getLowerLimit());
list = query.list();
} else {
list = query.list();
}
SearchOrderResponse response = new SearchOrderResponse();
response.setCount(count);
response.setOrders(list);
return response;
}
}