public OrderPurchase createNewOrder(OrderPurchase orderPurchase) {
   if (orderPurchase.getDateCreate() == null) {
     orderPurchase.setDateCreate(new Date());
   }
   orderPurchase.setDateUpdate(new Date());
   if (orderPurchase.getId() == null) {
     orderPurchase = createNewOrderWithRightOrderNumber(orderPurchase);
   }
   return orderPurchase;
 }
  public OrderPurchase getOrderByOrderNum(final String orderNum, Object... params) {
    Criteria criteria = createDefaultCriteria(OrderPurchase.class);

    FetchPlan fetchPlan = handleSpecificOrderFetchMode(criteria, params);

    criteria.add(Restrictions.eq("orderNum", orderNum));
    OrderPurchase orderPurchase = (OrderPurchase) criteria.uniqueResult();
    if (orderPurchase != null) {
      orderPurchase.setFetchPlan(fetchPlan);
    }
    return orderPurchase;
  }
 public void setLastOrder(OrderPurchase lastOrder) {
   if (lastOrders != null && Hibernate.isInitialized(lastOrders) && lastOrder != null) {
     for (OrderPurchase orderPurchase : lastOrders) {
       if (orderPurchase != null
           && getCurrentMarketArea() != null
           && getCurrentMarketAreaRetailer() != null
           && orderPurchase.getMarketAreaId().equals(getCurrentMarketArea().getId())
           && orderPurchase.getRetailerId().equals(getCurrentMarketAreaRetailer().getId()))
         lastOrders.remove(orderPurchase);
     }
     lastOrders.add(lastOrder);
   }
 }
 public OrderPurchase getLastOrder() {
   if (lastOrders != null && Hibernate.isInitialized(lastOrders)) {
     for (OrderPurchase orderPurchase : lastOrders) {
       if (orderPurchase != null
           && getCurrentMarketArea() != null
           && getCurrentMarketAreaRetailer() != null
           && orderPurchase.getMarketAreaId().equals(getCurrentMarketArea().getId())
           && orderPurchase.getRetailerId().equals(getCurrentMarketAreaRetailer().getId()))
         return orderPurchase;
     }
   }
   return null;
 }
  protected OrderPurchase createNewOrderWithRightOrderNumber(final OrderPurchase orderPurchase) {
    OrderPurchase mergedOrSavedOrderPurchase = null;
    try {
      Session session = (Session) em.getDelegate();
      String hql = "FROM OrderNumber";
      Query query = session.createQuery(hql);
      OrderNumber orderNumber = (OrderNumber) query.uniqueResult();
      Integer previousLastOrderNumber = orderNumber.getLastOrderNumber();
      Integer newLastOrderNumber = orderNumber.getLastOrderNumber() + 1;

      orderPurchase.setPrefixHashFolder(CoreUtil.generateEntityCode());
      orderPurchase.setOrderNum("" + newLastOrderNumber);

      //            if (orderPurchase.getId() != null) {
      //                if (em.contains(orderPurchase)) {
      //                    em.refresh(orderPurchase);
      //                }
      //                mergedOrSavedOrderPurchase = em.merge(orderPurchase);
      //                em.flush();
      //                return orderPurchase;
      //            } else {
      //                em.persist(orderPurchase);
      //                mergedOrSavedOrderPurchase = orderPurchase;
      //            }
      mergedOrSavedOrderPurchase = em.merge(orderPurchase);

      hql =
          "UPDATE OrderNumber SET lastOrderNumber = :newLastOrderNumber WHERE lastOrderNumber = :previousLastOrderNumber";
      query = session.createQuery(hql);
      query.setInteger("newLastOrderNumber", newLastOrderNumber);
      query.setInteger("previousLastOrderNumber", previousLastOrderNumber);
      int rowCount = query.executeUpdate();

      if (rowCount == 0) {
        em.getTransaction().rollback();
        mergedOrSavedOrderPurchase = createNewOrderWithRightOrderNumber(orderPurchase);
      }

    } catch (RollbackException e) {
      logger.debug("Failed to create a new Order with a specific OrderNumber increment", e);
    } catch (Exception e) {
      logger.error("Failed to create a new Order with a specific OrderNumber increment", e);
    }
    return mergedOrSavedOrderPurchase;
  }
  public OrderPurchase saveOrUpdateOrder(OrderPurchase orderPurchase) {
    if (orderPurchase.getDateCreate() == null) {
      orderPurchase.setDateCreate(new Date());
    }
    orderPurchase.setDateUpdate(new Date());
    //        if (orderPurchase.getId() != null) {
    //            if(em.contains(orderPurchase)){
    //                em.refresh(orderPurchase);
    //            }
    //            OrderPurchase mergedOrderPurchase = em.merge(orderPurchase);
    //            em.flush();
    //            return mergedOrderPurchase;
    //        } else {
    //            em.persist(orderPurchase);
    //            return orderPurchase;
    //        }

    if (em.contains(orderPurchase)) {
      em.refresh(orderPurchase);
    }
    OrderPurchase mergedOrderPurchase = em.merge(orderPurchase);
    em.flush();
    return mergedOrderPurchase;
  }