Example usage for org.hibernate.criterion Projections sum

List of usage examples for org.hibernate.criterion Projections sum

Introduction

In this page you can find the example usage for org.hibernate.criterion Projections sum.

Prototype

public static AggregateProjection sum(String propertyName) 

Source Link

Document

A property value sum projection

Usage

From source file:org.openbravo.costing.LCMatchingProcess.java

License:Open Source License

/**
 * Method to process a Landed Cost./* w  w  w  .j  a v a2 s.c o m*/
 * 
 * @param _lcCost
 *          the landed cost to be processed.
 * @return the message to be shown to the user properly formatted and translated to the user
 *         language.
 */
public JSONObject processLCMatching(LandedCostCost _lcCost) {
    LandedCostCost lcCost = _lcCost;
    JSONObject message = new JSONObject();
    OBContext.setAdminMode(true);
    try {
        message.put("severity", "success");
        message.put("title", "");
        message.put("text", OBMessageUtils.messageBD("Success"));
        try {
            doChecks(lcCost, message);
        } catch (OBException e) {
            message.put("severity", "error");
            message.put("text", e.getMessage());
            return message;
        }
        OBCriteria<LCMatched> critMatched = OBDal.getInstance().createCriteria(LCMatched.class);
        critMatched.add(Restrictions.eq(LCMatched.PROPERTY_LANDEDCOSTCOST, lcCost));
        critMatched.setProjection(Projections.sum(LCMatched.PROPERTY_AMOUNT));
        BigDecimal matchedAmt = (BigDecimal) critMatched.uniqueResult();
        if (matchedAmt != null) {
            lcCost.setMatchingAmount(matchedAmt);
            OBDal.getInstance().save(lcCost);
        }

        if (lcCost.isMatchingAdjusted() && lcCost.getAmount().compareTo(matchedAmt) != 0) {
            distributeAmounts(lcCost);
            String strMatchCAId = generateCostAdjustment(lcCost.getId(), message);
            lcCost.setMatchingCostAdjustment(
                    (CostAdjustment) OBDal.getInstance().getProxy(CostAdjustment.ENTITY_NAME, strMatchCAId));
            OBDal.getInstance().save(lcCost);
        }

        lcCost = OBDal.getInstance().get(LandedCostCost.class, lcCost.getId());
        lcCost.setMatched(Boolean.TRUE);
        lcCost.setProcessed(Boolean.TRUE);
        OBDal.getInstance().save(lcCost);
    } catch (JSONException ignore) {
    } finally {
        OBContext.restorePreviousMode();
    }
    return message;
}

From source file:org.openbravo.erpCommon.ReportsUtility.java

License:Open Source License

public static BigDecimal getBeginningBalance(String orgId, String acctSchemaId, String bpartnerId,
        String dateFrom, boolean isCustomer) {
    if (dateFrom == null || "".equals(dateFrom)) {
        return BigDecimal.ZERO;
    }/*from ww w . j  a  v  a  2s  .  c  o m*/
    OBCriteria<AccountingFact> obc = OBDal.getInstance().createCriteria(AccountingFact.class);
    obc.add(Restrictions.eq(AccountingFact.PROPERTY_ACCOUNTINGSCHEMA,
            OBDal.getInstance().get(AcctSchema.class, acctSchemaId)));
    obc.add(Restrictions.eq(AccountingFact.PROPERTY_BUSINESSPARTNER,
            OBDal.getInstance().get(BusinessPartner.class, bpartnerId)));
    obc.add(Restrictions.in(AccountingFact.PROPERTY_ORGANIZATION, getOrgList(orgId)));
    try {
        obc.add(Restrictions.lt(AccountingFact.PROPERTY_ACCOUNTINGDATE, OBDateUtils.getDate(dateFrom)));
    } catch (ParseException pe) {
        // do nothing
    }
    if (isCustomer) {
        obc.add(Restrictions.in(AccountingFact.PROPERTY_ACCOUNT,
                getValidAccountsList(acctSchemaId, bpartnerId)));
    } else {
        obc.add(Restrictions.in(AccountingFact.PROPERTY_ACCOUNT,
                getValidAccountsListVendor(acctSchemaId, bpartnerId)));
    }
    obc.setFilterOnReadableOrganization(false);

    ProjectionList projections = Projections.projectionList();
    projections.add(Projections.sum(AccountingFact.PROPERTY_DEBIT));
    projections.add(Projections.sum(AccountingFact.PROPERTY_CREDIT));
    obc.setProjection(projections);

    @SuppressWarnings("rawtypes")
    List o = obc.list();
    if (o != null && o.size() > 0) {
        Object[] resultSet = (Object[]) o.get(0);
        BigDecimal debit = (resultSet[0] != null) ? (BigDecimal) resultSet[0] : BigDecimal.ZERO;
        BigDecimal credit = (resultSet[1] != null) ? (BigDecimal) resultSet[1] : BigDecimal.ZERO;
        return debit.subtract(credit);
    }
    return BigDecimal.ZERO;

}

From source file:org.openmrs.module.hospitalcore.db.hibernate.HibernateInventoryDAO.java

public Integer sumCurrentQuantityDrugOfStore(Integer storeId, Integer drugId, Integer formulationId)
        throws DAOException {
    Criteria criteria = sessionFactory.getCurrentSession()
            .createCriteria(InventoryStoreDrugTransactionDetail.class, "transactionDetail")
            .createAlias("transactionDetail.transaction", "transaction")
            .add(Restrictions.eq("transaction.store.id", storeId))
            .add(Restrictions.eq("transaction.typeTransaction", ActionValue.TRANSACTION[0]))
            .add(Restrictions.eq("transactionDetail.drug.id", drugId))
            .add(Restrictions.eq("transactionDetail.formulation.id", formulationId));

    criteria.add(Restrictions.gt("transactionDetail.currentQuantity", 0));
    criteria.add(Restrictions.gt("transactionDetail.dateExpiry", new Date()));
    ProjectionList proList = Projections.projectionList();
    proList.add(Projections.sum("currentQuantity"));
    criteria.setProjection(proList);//ww  w  .  j  a  v  a  2  s  .  c  o m
    Object l = criteria.uniqueResult();
    return l != null ? (Integer) l : 0;
}

From source file:org.openmrs.module.hospitalcore.db.hibernate.HibernateInventoryDAO.java

public List<InventoryStoreDrugTransactionDetail> listStoreDrugAvaiable(Integer storeId,
        Collection<Integer> drugs, Collection<Integer> formulations) throws DAOException {
    Criteria criteria = sessionFactory.getCurrentSession()
            .createCriteria(InventoryStoreDrugTransactionDetail.class, "transactionDetail")
            .createAlias("transactionDetail.transaction", "transaction")
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

    ProjectionList proList = Projections.projectionList();
    proList.add(Projections.groupProperty("drug")).add(Projections.groupProperty("formulation"))
            .add(Projections.sum("currentQuantity"));
    criteria.add(Restrictions.eq("transaction.store.id", storeId));
    if (drugs != null) {
        criteria.createCriteria("transactionDetail.drug", Criteria.INNER_JOIN)
                .add(Restrictions.in("id", drugs));
    }//www.  j av a 2 s. c om
    criteria.add(Restrictions.eq("transaction.typeTransaction", ActionValue.TRANSACTION[0]));
    if (formulations != null) {
        criteria.createCriteria("transactionDetail.formulation", Criteria.INNER_JOIN)
                .add(Restrictions.in("id", formulations));
    }
    criteria.setProjection(proList);
    criteria.add(Restrictions.ge("transactionDetail.dateExpiry", new Date()));
    List<Object> lst = criteria.list();
    if (lst == null || lst.size() == 0)
        return null;
    List<InventoryStoreDrugTransactionDetail> list = new ArrayList<InventoryStoreDrugTransactionDetail>();
    // System.out.println("lst size: "+lst.size());
    for (int i = 0; i < lst.size(); i++) {
        Object[] row = (Object[]) lst.get(i);
        InventoryStoreDrugTransactionDetail tDetail = new InventoryStoreDrugTransactionDetail();
        tDetail.setDrug((InventoryDrug) row[0]);
        tDetail.setFormulation((InventoryDrugFormulation) row[1]);
        tDetail.setCurrentQuantity((Integer) row[2]);
        list.add(tDetail);
        // System.out.println("I: "+i+" drug: "+tDetail.getDrug().getName()+" formulation: "+tDetail.getFormulation().getName()+" quantity: "+tDetail.getCurrentQuantity());
    }
    return list;
}

From source file:org.openmrs.module.hospitalcore.db.hibernate.HibernateInventoryDAO.java

public List<InventoryStoreDrugTransactionDetail> listViewStockBalance(Integer storeId, Integer categoryId,
        String drugName, String fromDate, String toDate, boolean isExpiry, int min, int max)
        throws DAOException {
    Criteria criteria = sessionFactory.getCurrentSession()
            .createCriteria(InventoryStoreDrugTransactionDetail.class, "transactionDetail")
            .createAlias("transactionDetail.transaction", "transaction")
            .createAlias("transactionDetail.drug", "drugAlias")
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

    ProjectionList proList = Projections.projectionList();
    proList.add(Projections.groupProperty("drug")).add(Projections.groupProperty("formulation"))
            .add(Projections.sum("currentQuantity")).add(Projections.sum("quantity"))
            .add(Projections.sum("issueQuantity"));
    criteria.add(Restrictions.eq("transaction.store.id", storeId));
    if (categoryId != null) {
        criteria.add(Restrictions.eq("drugAlias.category.id", categoryId));
    }/*from   w  w  w.java2 s .  com*/
    if (!StringUtils.isBlank(drugName)) {
        criteria.add(Restrictions.like("drugAlias.name", "%" + drugName + "%"));
    }
    if (!StringUtils.isBlank(fromDate) && StringUtils.isBlank(toDate)) {
        String startFromDate = fromDate + " 00:00:00";
        String endFromDate = fromDate + " 23:59:59";
        try {
            criteria.add(Restrictions.and(
                    Restrictions.ge("transactionDetail.createdOn", formatter.parse(startFromDate)),
                    Restrictions.le("transactionDetail.createdOn", formatter.parse(endFromDate))));
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("listSubStoreIndent>>Error convert date: " + e.toString());
            e.printStackTrace();
        }
    } else if (StringUtils.isBlank(fromDate) && !StringUtils.isBlank(toDate)) {
        String startToDate = toDate + " 00:00:00";
        String endToDate = toDate + " 23:59:59";
        try {
            criteria.add(Restrictions.and(
                    Restrictions.ge("transactionDetail.createdOn", formatter.parse(startToDate)),
                    Restrictions.le("transactionDetail.createdOn", formatter.parse(endToDate))));
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("listSubStoreIndent>>Error convert date: " + e.toString());
            e.printStackTrace();
        }
    } else if (!StringUtils.isBlank(fromDate) && !StringUtils.isBlank(toDate)) {
        String startToDate = fromDate + " 00:00:00";
        String endToDate = toDate + " 23:59:59";
        try {
            criteria.add(Restrictions.and(
                    Restrictions.ge("transactionDetail.createdOn", formatter.parse(startToDate)),
                    Restrictions.le("transactionDetail.createdOn", formatter.parse(endToDate))));
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("listInventorySubStoreIndent>>Error convert date: " + e.toString());
            e.printStackTrace();
        }
    }
    if (isExpiry) {
        criteria.add(Restrictions.lt("transactionDetail.dateExpiry", new Date()));
    } else {
        criteria.add(Restrictions.ge("transactionDetail.dateExpiry", new Date()));
    }

    /*
     * Sagar Bele : 13-08-2012 Bug #330 ( [INVENTORY]-error in Current
     * quantity of pharmacy )
     */
    criteria.add(Restrictions.ge("transactionDetail.currentQuantity", 0));

    criteria.setProjection(proList);
    if (max > 0) {
        criteria.setFirstResult(min).setMaxResults(max);
    }
    List<Object> lst = criteria.list();
    if (lst == null || lst.size() == 0)
        return null;
    List<InventoryStoreDrugTransactionDetail> list = new ArrayList<InventoryStoreDrugTransactionDetail>();
    for (int i = 0; i < lst.size(); i++) {
        Object[] row = (Object[]) lst.get(i);
        InventoryStoreDrugTransactionDetail tDetail = new InventoryStoreDrugTransactionDetail();
        tDetail.setDrug((InventoryDrug) row[0]);
        tDetail.setFormulation((InventoryDrugFormulation) row[1]);
        tDetail.setCurrentQuantity((Integer) row[2]);
        tDetail.setQuantity((Integer) row[3]);
        tDetail.setIssueQuantity((Integer) row[4]);
        list.add(tDetail);
    }

    return list;
}

From source file:org.openmrs.module.hospitalcore.db.hibernate.HibernateInventoryDAO.java

public Integer countViewStockBalance(Integer storeId, Integer categoryId, String drugName, String fromDate,
        String toDate, boolean isExpiry) throws DAOException {
    Criteria criteria = sessionFactory.getCurrentSession()
            .createCriteria(InventoryStoreDrugTransactionDetail.class, "transactionDetail")
            .createAlias("transactionDetail.transaction", "transaction")
            .createAlias("transactionDetail.drug", "drugAlias");

    ProjectionList proList = Projections.projectionList();
    proList.add(Projections.groupProperty("drug")).add(Projections.groupProperty("formulation"))
            .add(Projections.sum("currentQuantity")).add(Projections.sum("quantity"))
            .add(Projections.sum("issueQuantity"));
    criteria.add(Restrictions.eq("transaction.store.id", storeId));
    if (categoryId != null) {
        criteria.add(Restrictions.eq("drugAlias.category.id", categoryId));
    }//from   ww  w .  ja  va  2 s  .  c  o  m
    if (!StringUtils.isBlank(drugName)) {
        criteria.add(Restrictions.like("drugAlias.name", "%" + drugName + "%"));
    }
    if (!StringUtils.isBlank(fromDate) && StringUtils.isBlank(toDate)) {
        String startFromDate = fromDate + " 00:00:00";
        String endFromDate = fromDate + " 23:59:59";
        try {
            criteria.add(Restrictions.and(
                    Restrictions.ge("transactionDetail.createdOn", formatter.parse(startFromDate)),
                    Restrictions.le("transactionDetail.createdOn", formatter.parse(endFromDate))));
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("listSubStoreIndent>>Error convert date: " + e.toString());
            e.printStackTrace();
        }
    } else if (StringUtils.isBlank(fromDate) && !StringUtils.isBlank(toDate)) {
        String startToDate = toDate + " 00:00:00";
        String endToDate = toDate + " 23:59:59";
        try {
            criteria.add(Restrictions.and(
                    Restrictions.ge("transactionDetail.createdOn", formatter.parse(startToDate)),
                    Restrictions.le("transactionDetail.createdOn", formatter.parse(endToDate))));
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("listSubStoreIndent>>Error convert date: " + e.toString());
            e.printStackTrace();
        }
    } else if (!StringUtils.isBlank(fromDate) && !StringUtils.isBlank(toDate)) {
        String startToDate = fromDate + " 00:00:00";
        String endToDate = toDate + " 23:59:59";
        try {
            criteria.add(Restrictions.and(
                    Restrictions.ge("transactionDetail.createdOn", formatter.parse(startToDate)),
                    Restrictions.le("transactionDetail.createdOn", formatter.parse(endToDate))));
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("listInventorySubStoreIndent>>Error convert date: " + e.toString());
            e.printStackTrace();
        }
    }
    if (isExpiry) {
        criteria.add(Restrictions.lt("transactionDetail.dateExpiry", new Date()));
    } else {
        criteria.add(Restrictions.ge("transactionDetail.dateExpiry", new Date()));
    }
    criteria.setProjection(proList);
    List<Object> list = criteria.list();
    Number total = 0;
    if (!CollectionUtils.isEmpty(list)) {
        total = (Number) list.size();
    }
    return total.intValue();
}

From source file:org.openmrs.module.inventory.db.hibernate.HibernateInventoryDAO.java

License:Open Source License

public List<InventoryStoreDrugTransactionDetail> listStoreDrugAvaiable(Integer storeId,
        Collection<Integer> drugs, Collection<Integer> formulations) throws DAOException {
    Criteria criteria = sessionFactory.getCurrentSession()
            .createCriteria(InventoryStoreDrugTransactionDetail.class, "transactionDetail")
            .createAlias("transactionDetail.transaction", "transaction")
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

    ProjectionList proList = Projections.projectionList();
    proList.add(Projections.groupProperty("drug")).add(Projections.groupProperty("formulation"))
            .add(Projections.sum("currentQuantity"));
    criteria.add(Restrictions.eq("transaction.store.id", storeId));
    if (drugs != null) {
        criteria.createCriteria("transactionDetail.drug", Criteria.INNER_JOIN)
                .add(Restrictions.in("id", drugs));
    }/*from  w ww . j  ava2 s. c o  m*/
    criteria.add(Restrictions.eq("transaction.typeTransaction", ActionValue.TRANSACTION[0]));
    if (formulations != null) {
        criteria.createCriteria("transactionDetail.formulation", Criteria.INNER_JOIN)
                .add(Restrictions.in("id", formulations));
    }
    criteria.setProjection(proList);
    criteria.add(Restrictions.ge("transactionDetail.dateExpiry", new Date()));
    List<Object> lst = criteria.list();
    if (lst == null || lst.size() == 0) {
        return null;
    }
    List<InventoryStoreDrugTransactionDetail> list = new ArrayList<InventoryStoreDrugTransactionDetail>();
    // System.out.println("lst size: "+lst.size());
    for (int i = 0; i < lst.size(); i++) {
        Object[] row = (Object[]) lst.get(i);
        InventoryStoreDrugTransactionDetail tDetail = new InventoryStoreDrugTransactionDetail();
        tDetail.setDrug((InventoryDrug) row[0]);
        tDetail.setFormulation((InventoryDrugFormulation) row[1]);
        tDetail.setCurrentQuantity((Integer) row[2]);
        list.add(tDetail);
        // System.out.println("I: "+i+" drug: "+tDetail.getDrug().getName()+" formulation: "+tDetail.getFormulation().getName()+" quantity: "+tDetail.getCurrentQuantity());
    }
    return list;
}

From source file:org.openmrs.module.inventory.db.hibernate.HibernateInventoryDAO.java

License:Open Source License

public List<InventoryStoreDrugTransactionDetail> listViewStockBalance(Integer storeId, Integer categoryId,
        String drugName, String fromDate, String toDate, boolean isExpiry, int min, int max)
        throws DAOException {
    Criteria criteria = sessionFactory.getCurrentSession()
            .createCriteria(InventoryStoreDrugTransactionDetail.class, "transactionDetail")
            .createAlias("transactionDetail.transaction", "transaction")
            .createAlias("transactionDetail.drug", "drugAlias")
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

    ProjectionList proList = Projections.projectionList();
    proList.add(Projections.groupProperty("drug")).add(Projections.groupProperty("formulation"))
            .add(Projections.sum("currentQuantity")).add(Projections.sum("quantity"))
            .add(Projections.sum("issueQuantity"));
    criteria.add(Restrictions.eq("transaction.store.id", storeId));
    if (categoryId != null) {
        criteria.add(Restrictions.eq("drugAlias.category.id", categoryId));
    }/*from ww w.  ja  v a2s. c  o  m*/
    if (!StringUtils.isBlank(drugName)) {
        criteria.add(Restrictions.like("drugAlias.name", "%" + drugName + "%"));
    }
    if (!StringUtils.isBlank(fromDate) && StringUtils.isBlank(toDate)) {
        String startFromDate = fromDate + " 00:00:00";
        String endFromDate = fromDate + " 23:59:59";
        try {
            criteria.add(Restrictions.and(
                    Restrictions.ge("transactionDetail.createdOn", formatter.parse(startFromDate)),
                    Restrictions.le("transactionDetail.createdOn", formatter.parse(endFromDate))));
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("listSubStoreIndent>>Error convert date: " + e.toString());
            e.printStackTrace();
        }
    } else if (StringUtils.isBlank(fromDate) && !StringUtils.isBlank(toDate)) {
        String startToDate = toDate + " 00:00:00";
        String endToDate = toDate + " 23:59:59";
        try {
            criteria.add(Restrictions.and(
                    Restrictions.ge("transactionDetail.createdOn", formatter.parse(startToDate)),
                    Restrictions.le("transactionDetail.createdOn", formatter.parse(endToDate))));
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("listSubStoreIndent>>Error convert date: " + e.toString());
            e.printStackTrace();
        }
    } else if (!StringUtils.isBlank(fromDate) && !StringUtils.isBlank(toDate)) {
        String startToDate = fromDate + " 00:00:00";
        String endToDate = toDate + " 23:59:59";
        try {
            criteria.add(Restrictions.and(
                    Restrictions.ge("transactionDetail.createdOn", formatter.parse(startToDate)),
                    Restrictions.le("transactionDetail.createdOn", formatter.parse(endToDate))));
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("listInventorySubStoreIndent>>Error convert date: " + e.toString());
            e.printStackTrace();
        }
    }
    if (isExpiry) {
        criteria.add(Restrictions.lt("transactionDetail.dateExpiry", new Date()));
    } else {
        criteria.add(Restrictions.ge("transactionDetail.dateExpiry", new Date()));
    }

    /*
     * Sagar Bele : 13-08-2012 Bug #330 ( [INVENTORY]-error in Current
     * quantity of pharmacy )
     */
    criteria.add(Restrictions.ge("transactionDetail.currentQuantity", 0));

    criteria.setProjection(proList);
    if (max > 0) {
        criteria.setFirstResult(min).setMaxResults(max);
    }
    List<Object> lst = criteria.list();
    if (lst == null || lst.size() == 0) {
        return null;
    }
    List<InventoryStoreDrugTransactionDetail> list = new ArrayList<InventoryStoreDrugTransactionDetail>();
    for (int i = 0; i < lst.size(); i++) {
        Object[] row = (Object[]) lst.get(i);
        InventoryStoreDrugTransactionDetail tDetail = new InventoryStoreDrugTransactionDetail();
        tDetail.setDrug((InventoryDrug) row[0]);
        tDetail.setFormulation((InventoryDrugFormulation) row[1]);
        tDetail.setCurrentQuantity((Integer) row[2]);
        tDetail.setQuantity((Integer) row[3]);
        tDetail.setIssueQuantity((Integer) row[4]);
        list.add(tDetail);
    }

    return list;
}

From source file:org.openmrs.module.inventory.db.hibernate.HibernateInventoryDAO.java

License:Open Source License

@Override
public Integer sumStoreItemCurrentQuantity(Integer storeId, Integer itemId, Integer specificationId)
        throws DAOException {
    Criteria criteria = sessionFactory.getCurrentSession()
            .createCriteria(InventoryStoreItemTransactionDetail.class, "transactionDetail")
            .createAlias("transactionDetail.transaction", "transaction")
            .add(Restrictions.eq("transaction.store.id", storeId))
            .add(Restrictions.eq("transaction.typeTransaction", ActionValue.TRANSACTION[0]))
            .add(Restrictions.eq("transactionDetail.item.id", itemId));
    if (specificationId != null && specificationId > 0) {
        criteria.add(Restrictions.eq("transactionDetail.specification.id", specificationId));
    } else {/*from  w  w w .  j  ava 2 s.com*/
        criteria.add(Restrictions.isNull("transactionDetail.specification"));
    }

    criteria.add(Restrictions.gt("transactionDetail.currentQuantity", 0));
    ProjectionList proList = Projections.projectionList();
    proList.add(Projections.sum("currentQuantity"));
    criteria.setProjection(proList);
    Object l = criteria.uniqueResult();
    return l != null ? (Integer) l : 0;
}

From source file:org.openmrs.module.inventory.db.hibernate.HibernateInventoryDAO.java

License:Open Source License

@Override
public List<InventoryStoreItemTransactionDetail> listStoreItemAvaiable(Integer storeId,
        Collection<Integer> items, Collection<Integer> specifications) throws DAOException {
    Criteria criteria = sessionFactory.getCurrentSession()
            .createCriteria(InventoryStoreItemTransactionDetail.class, "transactionDetail")
            .createAlias("transactionDetail.transaction", "transaction")
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

    ProjectionList proList = Projections.projectionList();
    proList.add(Projections.groupProperty("item")).add(Projections.groupProperty("specification"))
            .add(Projections.sum("currentQuantity"));
    criteria.add(Restrictions.eq("transaction.store.id", storeId));
    if (CollectionUtils.isNotEmpty(items)) {
        criteria.createCriteria("transactionDetail.item", Criteria.INNER_JOIN)
                .add(Restrictions.in("id", items));
    }/*ww w.j a va 2s  . co m*/
    criteria.add(Restrictions.eq("transaction.typeTransaction", ActionValue.TRANSACTION[0]));
    if (CollectionUtils.isNotEmpty(specifications)) {
        criteria.createCriteria("transactionDetail.specification", Criteria.LEFT_JOIN)
                .add(Restrictions.in("id", specifications));
    }
    criteria.setProjection(proList);
    List<Object> lst = criteria.list();
    if (lst == null || lst.size() == 0) {
        return null;
    }
    List<InventoryStoreItemTransactionDetail> list = new ArrayList<InventoryStoreItemTransactionDetail>();
    // System.out.println("lst size: "+lst.size());
    for (int i = 0; i < lst.size(); i++) {
        Object[] row = (Object[]) lst.get(i);
        InventoryStoreItemTransactionDetail tDetail = new InventoryStoreItemTransactionDetail();
        tDetail.setItem((InventoryItem) row[0]);
        tDetail.setSpecification((InventoryItemSpecification) row[1]);
        tDetail.setCurrentQuantity((Integer) row[2]);
        list.add(tDetail);
        // System.out.println("I: "+i+" item: "+tDetail.getItem().getName()+" specification: "+(tDetail.getSpecification()
        // != null ?tDetail.getSpecification().getName() : " null ")
        // +" quantity: "+tDetail.getCurrentQuantity());
    }
    // System.out.println("list available: "+list);
    return list;
}