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:com.eucalyptus.objectstorage.metadata.DbBucketMetadataManagerImpl.java

License:Open Source License

@Override
public long totalSizeOfAllBuckets() throws MetadataOperationFailureException {
    long size = -1;
    try (TransactionResource db = Entities.transactionFor(Bucket.class)) {
        size = Objects/* w  ww . ja va2  s .com*/
                .firstNonNull(
                        (Number) Entities.createCriteria(Bucket.class)
                                .setProjection(Projections.sum("bucketSize")).setReadOnly(true).uniqueResult(),
                        0)
                .longValue();
        db.commit();
    } catch (Exception e) {
        LOG.warn("Error getting buckets cumulative size", e);
        throw new MetadataOperationFailureException(e);
    }
    return size;
}

From source file:com.eucalyptus.objectstorage.metadata.DbMpuPartMetadataManagerImpl.java

License:Open Source License

@Override
public void removeParts(final Bucket bucket, final String uploadId) throws Exception {
    Predicate<String> removePredicate = new Predicate<String>() {
        public boolean apply(String uploadId) {
            try (TransactionResource db = Entities.transactionFor(PartEntity.class)) {
                //Calculate the sum size of the parts to update the bucket size.
                PartEntity searchExample = new PartEntity().withUploadId(uploadId)
                        .withState(ObjectState.extant);
                long size = Objects.firstNonNull(
                        (Number) Entities.createCriteria(PartEntity.class).add(Example.create(searchExample))
                                .setProjection(Projections.sum("size")).setReadOnly(true).uniqueResult(),
                        0).longValue();/*from ww  w.j  a v  a  2 s  .  co m*/

                //Remove all part records with this upload id
                Entities.deleteAllMatching(PartEntity.class,
                        "where part_number IS NOT NULL and upload_id=:uploadId",
                        Collections.singletonMap("uploadId", uploadId));
                db.commit();
            } catch (Exception e) {
                LOG.trace("Error finalizing part-removal transaction. Will retry.", e);
                throw new RuntimeException(e);
            }

            return true;
        }
    };

    Entities.asTransaction(PartEntity.class, removePredicate).apply(uploadId);
}

From source file:com.eucalyptus.objectstorage.metadata.DbMpuPartMetadataManagerImpl.java

License:Open Source License

@Override
public long getTotalSize(Bucket bucket) throws Exception {
    try (TransactionResource trans = Entities.transactionFor(PartEntity.class)) {
        Criteria queryCriteria = Entities.createCriteria(PartEntity.class)
                .add(Restrictions.or(Restrictions.eq("state", ObjectState.creating),
                        Restrictions.eq("state", ObjectState.extant)))
                .setProjection(Projections.sum("size"));
        if (bucket != null) {
            queryCriteria = getSearchByBucket(queryCriteria, bucket);
        }/* w w w.  j av a  2s.  c  om*/
        queryCriteria.setReadOnly(true);
        final Number count = (Number) queryCriteria.uniqueResult();
        return count == null ? 0 : count.longValue();
    } catch (Throwable e) {
        LOG.error("Error getting part total size for bucket " + bucket.getBucketName(), e);
        throw new Exception(e);
    }
}

From source file:com.eucalyptus.objectstorage.metadata.DbObjectMetadataManagerImpl.java

License:Open Source License

@Override
public long getTotalSize(Bucket bucket) throws Exception {
    try (TransactionResource trans = Entities.transactionFor(ObjectEntity.class)) {
        Criteria queryCriteria = Entities.createCriteria(ObjectEntity.class)
                .add(Restrictions.or(Restrictions.eq("state", ObjectState.creating),
                        Restrictions.eq("state", ObjectState.extant)))
                .setProjection(Projections.sum("size"));
        if (bucket != null) {
            queryCriteria = getSearchByBucket(queryCriteria, bucket);
        }/*from   w  ww  .  j a va  2s  .  com*/
        queryCriteria.setReadOnly(true);
        final Number count = (Number) queryCriteria.uniqueResult();
        return count == null ? 0 : count.longValue();
    } catch (Throwable e) {
        LOG.error("Error getting object total size for "
                + (bucket == null ? "all buckets" : "bucket " + bucket.getBucketName()), e);
        throw new Exception(e);
    }
}

From source file:com.eucalyptus.objectstorage.policy.WalrusQuotaUtil.java

License:Open Source License

/**
 * Return the total size in bytes of objects in the Walrus.
 *
 * @return The size or -1 if the size could not be determined.
 *//*from   w w  w . j ava2  s .c  o m*/
public static long countTotalObjectSize() {
    long size = -1;
    final EntityTransaction db = Entities.get(BucketInfo.class);
    try {
        size = Objects
                .firstNonNull(
                        (Number) Entities.createCriteria(BucketInfo.class)
                                .setProjection(Projections.sum("bucketSize")).setReadOnly(true).uniqueResult(),
                        0)
                .longValue();
        db.commit();
    } catch (Exception e) {
        db.rollback();
    }
    return size;
}

From source file:com.floreantpos.model.dao.PosTransactionDAO.java

License:Open Source License

public TransactionSummary getTransactionSummary(Terminal terminal, Class transactionClass, Date from, Date to) {
    Session session = null;//  w ww  . j  a v a  2 s  .  c  o m
    TransactionSummary summary = new TransactionSummary();
    try {
        session = getSession();

        Criteria criteria = session.createCriteria(transactionClass);
        criteria.add(Restrictions.eq(PosTransaction.PROP_DRAWER_RESETTED, Boolean.FALSE));

        if (terminal != null) {
            criteria.add(Restrictions.eq(PosTransaction.PROP_TERMINAL, terminal));
        }

        if (from != null && to != null) {
            criteria.add(Restrictions.ge(PosTransaction.PROP_TRANSACTION_TIME, from));
            criteria.add(Restrictions.le(PosTransaction.PROP_TRANSACTION_TIME, to));
        }

        ProjectionList projectionList = Projections.projectionList();
        projectionList.add(Projections.count(PosTransaction.PROP_ID));
        projectionList.add(Projections.sum(PosTransaction.PROP_AMOUNT));
        projectionList.add(Projections.sum(PosTransaction.PROP_TIPS_AMOUNT));

        criteria.setProjection(projectionList);

        List list = criteria.list();

        if (list == null || list.size() == 0)
            return summary;

        Object[] o = (Object[]) list.get(0);
        int index = 0;

        summary.setCount(HibernateProjectionsUtil.getInt(o, index++));
        summary.setAmount(HibernateProjectionsUtil.getDouble(o, index++));
        summary.setTipsAmount(HibernateProjectionsUtil.getDouble(o, index++));

        return summary;
    } finally {
        closeSession(session);
    }
}

From source file:com.floreantpos.model.dao.RefundTransactionDAO.java

License:Open Source License

public RefundSummary getTotalRefundForTerminal(Terminal terminal) {
    Session session = null;/*www .j  av a2  s .  com*/
    RefundSummary refundSummary = new RefundSummary();

    try {
        session = getSession();

        Criteria criteria = session.createCriteria(getReferenceClass());

        ProjectionList projectionList = Projections.projectionList();
        projectionList.add(Projections.rowCount());
        projectionList.add(Projections.sum(RefundTransaction.PROP_AMOUNT));
        criteria.setProjection(projectionList);

        criteria.add(Restrictions.eq(RefundTransaction.PROP_TERMINAL, terminal));
        criteria.add(Restrictions.eq(RefundTransaction.PROP_DRAWER_RESETTED, Boolean.FALSE));

        List list = criteria.list();
        if (list.size() > 0) {
            Object[] objects = (Object[]) list.get(0);

            if (objects.length > 0 && objects[0] != null) {
                refundSummary.setCount(((Number) objects[0]).intValue());
            }

            if (objects.length > 1 && objects[1] != null) {
                refundSummary.setAmount(((Number) objects[1]).doubleValue());
            }
        }
        return refundSummary;
    } finally {
        closeSession(session);
    }

}

From source file:com.floreantpos.model.dao.SalesSummaryDAO.java

License:Open Source License

public List<SalesAnalysisData> findSalesAnalysis(Date start, Date end, UserType userType, Terminal terminal) {
    Session session = null;/*from w  w  w .j a v  a  2 s  .co  m*/

    try {
        ArrayList<SalesAnalysisData> list = new ArrayList<SalesAnalysisData>();

        session = getSession();

        Criteria criteria = session.createCriteria(Shift.class);
        List<Shift> shifts = criteria.list();

        criteria = session.createCriteria(MenuCategory.class);
        List<MenuCategory> categories = criteria.list();
        MenuCategory miscCategory = new MenuCategory();
        miscCategory.setName(Messages.getString("SalesSummaryDAO.0")); //$NON-NLS-1$
        categories.add(miscCategory);

        //find food sales
        criteria = session.createCriteria(TicketItem.class, "item"); //$NON-NLS-1$
        criteria.createCriteria("ticket", "t"); //$NON-NLS-1$ //$NON-NLS-2$
        criteria.createCriteria("t.owner", "u"); //$NON-NLS-1$ //$NON-NLS-2$
        ProjectionList projectionList = Projections.projectionList();
        projectionList.add(Projections.sum(TicketItem.PROP_ITEM_COUNT));
        projectionList.add(Projections.sum(TicketItem.PROP_SUBTOTAL_AMOUNT));
        projectionList.add(Projections.sum(TicketItem.PROP_DISCOUNT_AMOUNT));
        criteria.setProjection(projectionList);
        criteria.add(Restrictions.eq("item." + TicketItem.PROP_BEVERAGE, Boolean.FALSE)); //$NON-NLS-1$
        criteria.add(Restrictions.ge("t." + Ticket.PROP_ACTIVE_DATE, start)); //$NON-NLS-1$
        criteria.add(Restrictions.le("t." + Ticket.PROP_ACTIVE_DATE, end)); //$NON-NLS-1$

        if (userType != null) {
            criteria.add(Restrictions.eq("u." + User.PROP_TYPE, userType)); //$NON-NLS-1$
        }
        if (terminal != null) {
            criteria.add(Restrictions.eq("t." + Ticket.PROP_TERMINAL, terminal)); //$NON-NLS-1$
        }
        List datas = criteria.list();
        if (datas.size() > 0) {
            Object[] objects = (Object[]) datas.get(0);

            SalesAnalysisData data = new SalesAnalysisData();
            data.setShiftName(""); //$NON-NLS-1$
            data.setCategoryName(Messages.getString("SalesSummaryDAO.1")); //$NON-NLS-1$

            if (objects.length > 0 && objects[0] != null)
                data.setCount(((Number) objects[0]).intValue());

            if (objects.length > 1 && objects[1] != null)
                data.setGross(((Number) objects[1]).doubleValue());

            if (objects.length > 2 && objects[2] != null)
                data.setDiscount(((Number) objects[2]).doubleValue());

            data.calculate();
            list.add(data);
        }

        //find non food sales
        criteria = session.createCriteria(TicketItem.class, "item"); //$NON-NLS-1$
        criteria.createCriteria("ticket", "t"); //$NON-NLS-1$ //$NON-NLS-2$
        criteria.createCriteria("t.owner", "u"); //$NON-NLS-1$ //$NON-NLS-2$
        projectionList = Projections.projectionList();
        projectionList.add(Projections.sum(TicketItem.PROP_ITEM_COUNT));
        projectionList.add(Projections.sum(TicketItem.PROP_SUBTOTAL_AMOUNT));
        projectionList.add(Projections.sum(TicketItem.PROP_DISCOUNT_AMOUNT));
        criteria.setProjection(projectionList);
        criteria.add(Restrictions.eq("item." + TicketItem.PROP_BEVERAGE, Boolean.TRUE)); //$NON-NLS-1$
        criteria.add(Restrictions.ge("t." + Ticket.PROP_ACTIVE_DATE, start)); //$NON-NLS-1$
        criteria.add(Restrictions.le("t." + Ticket.PROP_ACTIVE_DATE, end)); //$NON-NLS-1$

        if (userType != null) {
            criteria.add(Restrictions.eq("u." + User.PROP_TYPE, userType)); //$NON-NLS-1$
        }
        if (terminal != null) {
            criteria.add(Restrictions.eq("t." + Ticket.PROP_TERMINAL, terminal)); //$NON-NLS-1$
        }
        datas = criteria.list();
        if (datas.size() > 0) {
            Object[] objects = (Object[]) datas.get(0);

            SalesAnalysisData data = new SalesAnalysisData();
            data.setShiftName(""); //$NON-NLS-1$
            data.setCategoryName(Messages.getString("SalesSummaryDAO.2")); //$NON-NLS-1$

            if (objects.length > 0 && objects[0] != null)
                data.setCount(((Number) objects[0]).intValue());

            if (objects.length > 1 && objects[1] != null)
                data.setGross(((Number) objects[1]).doubleValue());

            if (objects.length > 2 && objects[2] != null)
                data.setDiscount(((Number) objects[2]).doubleValue());

            data.calculate();
            list.add(data);
        }

        //find shift wise salse
        for (Shift shift : shifts) {

            for (MenuCategory category : categories) {

                criteria = session.createCriteria(TicketItem.class, "item"); //$NON-NLS-1$
                criteria.createCriteria("ticket", "t"); //$NON-NLS-1$ //$NON-NLS-2$
                criteria.createCriteria("t.owner", "u"); //$NON-NLS-1$ //$NON-NLS-2$
                projectionList = Projections.projectionList();
                projectionList.add(Projections.sum(TicketItem.PROP_ITEM_COUNT));
                projectionList.add(Projections.sum(TicketItem.PROP_SUBTOTAL_AMOUNT));
                projectionList.add(Projections.sum(TicketItem.PROP_DISCOUNT_AMOUNT));
                criteria.setProjection(projectionList);
                criteria.add(Restrictions.eq("item." + TicketItem.PROP_CATEGORY_NAME, category.getName())); //$NON-NLS-1$
                criteria.add(Restrictions.eq("t." + Ticket.PROP_SHIFT, shift)); //$NON-NLS-1$
                criteria.add(Restrictions.ge("t." + Ticket.PROP_ACTIVE_DATE, start)); //$NON-NLS-1$
                criteria.add(Restrictions.le("t." + Ticket.PROP_ACTIVE_DATE, end)); //$NON-NLS-1$

                if (userType != null) {
                    criteria.add(Restrictions.eq("u." + User.PROP_TYPE, userType)); //$NON-NLS-1$
                }
                if (terminal != null) {
                    criteria.add(Restrictions.eq("t." + Ticket.PROP_TERMINAL, terminal)); //$NON-NLS-1$
                }
                datas = criteria.list();
                if (datas.size() > 0) {
                    Object[] objects = (Object[]) datas.get(0);

                    SalesAnalysisData data = new SalesAnalysisData();
                    data.setShiftName(shift.getName());
                    data.setCategoryName(category.getName());

                    if (objects.length > 0 && objects[0] != null)
                        data.setCount(((Number) objects[0]).intValue());

                    if (objects.length > 1 && objects[1] != null)
                        data.setGross(((Number) objects[1]).doubleValue());

                    if (objects.length > 2 && objects[2] != null)
                        data.setDiscount(((Number) objects[2]).doubleValue());

                    data.calculate();
                    list.add(data);
                }
            }
        }

        //find all sales
        for (MenuCategory category : categories) {

            criteria = session.createCriteria(TicketItem.class, "item"); //$NON-NLS-1$
            criteria.createCriteria("ticket", "t"); //$NON-NLS-1$ //$NON-NLS-2$
            criteria.createCriteria("t.owner", "u"); //$NON-NLS-1$ //$NON-NLS-2$
            projectionList = Projections.projectionList();
            projectionList.add(Projections.sum(TicketItem.PROP_ITEM_COUNT));
            projectionList.add(Projections.sum(TicketItem.PROP_SUBTOTAL_AMOUNT));
            projectionList.add(Projections.sum(TicketItem.PROP_DISCOUNT_AMOUNT));
            criteria.setProjection(projectionList);
            criteria.add(Restrictions.eq("item." + TicketItem.PROP_CATEGORY_NAME, category.getName())); //$NON-NLS-1$
            criteria.add(Restrictions.ge("t." + Ticket.PROP_ACTIVE_DATE, start)); //$NON-NLS-1$
            criteria.add(Restrictions.le("t." + Ticket.PROP_ACTIVE_DATE, end)); //$NON-NLS-1$

            if (userType != null) {
                criteria.add(Restrictions.eq("u." + User.PROP_TYPE, userType)); //$NON-NLS-1$
            }
            if (terminal != null) {
                criteria.add(Restrictions.eq("t." + Ticket.PROP_TERMINAL, terminal)); //$NON-NLS-1$
            }
            datas = criteria.list();
            if (datas.size() > 0) {
                Object[] objects = (Object[]) datas.get(0);

                SalesAnalysisData data = new SalesAnalysisData();
                data.setShiftName("ALL DAY"); //$NON-NLS-1$
                data.setCategoryName(category.getName());

                if (objects.length > 0 && objects[0] != null)
                    data.setCount(((Number) objects[0]).intValue());

                if (objects.length > 1 && objects[1] != null)
                    data.setGross(((Number) objects[1]).doubleValue());

                if (objects.length > 2 && objects[2] != null)
                    data.setDiscount(((Number) objects[2]).doubleValue());

                data.calculate();
                list.add(data);
            }
        }
        return list;
    } finally {
        if (session != null) {
            closeSession(session);
        }
    }
}

From source file:com.floreantpos.model.dao.SalesSummaryDAO.java

License:Open Source License

public SalesStatistics findKeyStatistics(Date start, Date end, UserType userType, Terminal terminal) {
    Session session = null;/*w w w  .ja v  a2  s .co  m*/

    try {
        SalesStatistics salesSummary = new SalesStatistics();

        session = getSession();

        //retrieve restaurant information and set it to sales summary
        Restaurant restaurant = (Restaurant) get(Restaurant.class, new Integer(1), session);
        if (restaurant != null) {
            salesSummary
                    .setCapacity(restaurant.getCapacity() != null ? restaurant.getCapacity().intValue() : 0);
            salesSummary.setTables(restaurant.getTables() != null ? restaurant.getTables().intValue() : 0);
        }

        {
            //find gross sale, discount and tax. this excludes void tickets
            //net sale = gross_sale - discount
            Criteria criteria = session.createCriteria(Ticket.class, "ticket"); //$NON-NLS-1$
            criteria.createCriteria(Ticket.PROP_OWNER, "u"); //$NON-NLS-1$

            ProjectionList projectionList = Projections.projectionList();
            projectionList.add(Projections.rowCount());
            projectionList.add(Projections.sum(Ticket.PROP_SUBTOTAL_AMOUNT));
            projectionList.add(Projections.sum(Ticket.PROP_DISCOUNT_AMOUNT));
            projectionList.add(Projections.sum(Ticket.PROP_TAX_AMOUNT));
            criteria.setProjection(projectionList);
            criteria.add(Restrictions.ge(Ticket.PROP_CREATE_DATE, start));
            criteria.add(Restrictions.le(Ticket.PROP_CREATE_DATE, end));

            //do not take into account void tickets
            criteria.add(Restrictions.eq(Ticket.PROP_VOIDED, Boolean.FALSE));
            criteria.add(Restrictions.eq(Ticket.PROP_REFUNDED, Boolean.FALSE));

            if (userType != null) {
                criteria.add(Restrictions.eq("u." + User.PROP_TYPE, userType)); //$NON-NLS-1$
            }

            if (terminal != null) {
                criteria.add(Restrictions.eq(Ticket.PROP_TERMINAL, terminal));
            }
            List list = criteria.list();
            if (list.size() > 0) {
                Object[] objects = (Object[]) list.get(0);

                if (objects.length > 1 && objects[1] != null) {
                    salesSummary.setGrossSale(((Number) objects[1]).doubleValue());
                }
                if (objects.length > 2 && objects[2] != null) {
                    salesSummary.setDiscount(((Number) objects[2]).intValue());
                }
                if (objects.length > 3 && objects[3] != null) {
                    salesSummary.setTax(((Number) objects[3]).intValue());
                }
            }
        }

        {
            //determine number of guests within the specified time. this includes void tickets, 
            Criteria criteria = session.createCriteria(Ticket.class, "ticket"); //$NON-NLS-1$
            criteria.createCriteria(Ticket.PROP_OWNER, "u"); //$NON-NLS-1$

            ProjectionList projectionList = Projections.projectionList();
            projectionList.add(Projections.rowCount());
            projectionList.add(Projections.sum(Ticket.PROP_NUMBER_OF_GUESTS));
            criteria.setProjection(projectionList);
            criteria.add(Restrictions.ge(Ticket.PROP_CREATE_DATE, start));
            criteria.add(Restrictions.le(Ticket.PROP_CREATE_DATE, end));

            if (userType != null) {
                criteria.add(Restrictions.eq("u." + User.PROP_TYPE, userType)); //$NON-NLS-1$
            }

            if (terminal != null) {
                criteria.add(Restrictions.eq(Ticket.PROP_TERMINAL, terminal));
            }
            List list = criteria.list();
            if (list.size() > 0) {
                Object[] objects = (Object[]) list.get(0);
                salesSummary.setCheckCount(((Number) objects[0]).intValue());

                if (objects.length > 1 && objects[1] != null) {
                    salesSummary.setGuestCount(((Number) objects[1]).intValue());
                }
            }
        }

        {
            //find number of open tickets and its total amount
            Criteria criteria = session.createCriteria(Ticket.class, "ticket"); //$NON-NLS-1$
            criteria.createCriteria(Ticket.PROP_OWNER, "u"); //$NON-NLS-1$

            ProjectionList projectionList = Projections.projectionList();
            projectionList.add(Projections.rowCount());
            projectionList.add(Projections.sum(Ticket.PROP_TOTAL_AMOUNT));
            criteria.setProjection(projectionList);
            criteria.add(Restrictions.ge(Ticket.PROP_CREATE_DATE, start));
            criteria.add(Restrictions.le(Ticket.PROP_CREATE_DATE, end));
            criteria.add(Restrictions.eq(Ticket.PROP_CLOSED, Boolean.FALSE));

            if (userType != null) {
                criteria.add(Restrictions.eq("u." + User.PROP_TYPE, userType)); //$NON-NLS-1$
            }
            if (terminal != null) {
                criteria.add(Restrictions.eq(Ticket.PROP_TERMINAL, terminal));
            }
            List list = criteria.list();
            if (list.size() > 0) {
                Object[] objects = (Object[]) list.get(0);
                salesSummary.setOpenChecks(((Number) objects[0]).intValue());

                if (objects.length > 1 && objects[1] != null) {
                    salesSummary.setOpenAmount(((Number) objects[1]).doubleValue());
                }
            }
        }

        {
            //find number of void tickets and its total amount
            Criteria criteria = session.createCriteria(Ticket.class, "ticket"); //$NON-NLS-1$
            criteria.createCriteria(Ticket.PROP_OWNER, "u"); //$NON-NLS-1$
            ProjectionList projectionList = Projections.projectionList();
            projectionList.add(Projections.rowCount());
            projectionList.add(Projections.sum(Ticket.PROP_TOTAL_AMOUNT));
            criteria.setProjection(projectionList);
            criteria.add(Restrictions.ge(Ticket.PROP_CREATE_DATE, start));
            criteria.add(Restrictions.le(Ticket.PROP_CREATE_DATE, end));
            criteria.add(Restrictions.eq(Ticket.PROP_CLOSED, Boolean.TRUE));
            criteria.add(Restrictions.eq(Ticket.PROP_VOIDED, Boolean.TRUE));

            if (userType != null) {
                criteria.add(Restrictions.eq("u." + User.PROP_TYPE, userType)); //$NON-NLS-1$
            }
            if (terminal != null) {
                criteria.add(Restrictions.eq(Ticket.PROP_TERMINAL, terminal));
            }
            List list = criteria.list();
            if (list.size() > 0) {
                Object[] objects = (Object[]) list.get(0);
                salesSummary.setVoidChecks(((Number) objects[0]).intValue());

                if (objects.length > 1 && objects[1] != null) {
                    salesSummary.setVoidAmount(((Number) objects[1]).doubleValue());
                }
            }
        }

        {
            //find non taxable sales
            Criteria criteria = session.createCriteria(Ticket.class, "ticket"); //$NON-NLS-1$
            criteria.createCriteria(Ticket.PROP_OWNER, "u"); //$NON-NLS-1$
            ProjectionList projectionList = Projections.projectionList();
            projectionList.add(Projections.rowCount());
            projectionList.add(Projections.sum(Ticket.PROP_TOTAL_AMOUNT));
            criteria.setProjection(projectionList);
            criteria.add(Restrictions.ge(Ticket.PROP_CREATE_DATE, start));
            criteria.add(Restrictions.le(Ticket.PROP_CREATE_DATE, end));
            criteria.add(Restrictions.eq(Ticket.PROP_VOIDED, Boolean.FALSE));
            criteria.add(Restrictions.eq(Ticket.PROP_REFUNDED, Boolean.FALSE));
            criteria.add(Restrictions.eq(Ticket.PROP_TAX_EXEMPT, Boolean.TRUE));

            if (userType != null) {
                criteria.add(Restrictions.eq("u." + User.PROP_TYPE, userType)); //$NON-NLS-1$
            }
            if (terminal != null) {
                criteria.add(Restrictions.eq(Ticket.PROP_TERMINAL, terminal));
            }
            List list = criteria.list();
            if (list.size() > 0) {
                Object[] objects = (Object[]) list.get(0);
                salesSummary.setNtaxChecks(((Number) objects[0]).intValue());

                if (objects.length > 1 && objects[1] != null) {
                    salesSummary.setNtaxAmount(((Number) objects[1]).doubleValue());
                }
            }
        }
        {
            //find reopen statistics
            Criteria criteria = session.createCriteria(Ticket.class, "ticket"); //$NON-NLS-1$
            criteria.createCriteria(Ticket.PROP_OWNER, "u"); //$NON-NLS-1$
            ProjectionList projectionList = Projections.projectionList();
            projectionList.add(Projections.rowCount());
            projectionList.add(Projections.sum(Ticket.PROP_TOTAL_AMOUNT));
            criteria.setProjection(projectionList);
            criteria.add(Restrictions.ge(Ticket.PROP_CREATE_DATE, start));
            criteria.add(Restrictions.le(Ticket.PROP_CREATE_DATE, end));
            criteria.add(Restrictions.eq(Ticket.PROP_RE_OPENED, Boolean.TRUE));

            if (userType != null) {
                criteria.add(Restrictions.eq("u." + User.PROP_TYPE, userType)); //$NON-NLS-1$
            }
            if (terminal != null) {
                criteria.add(Restrictions.eq(Ticket.PROP_TERMINAL, terminal));
            }
            List list = criteria.list();
            if (list.size() > 0) {
                Object[] objects = (Object[]) list.get(0);
                salesSummary.setRopnChecks(((Number) objects[0]).intValue());

                if (objects.length > 1 && objects[1] != null) {
                    salesSummary.setRopnAmount(((Number) objects[1]).doubleValue());
                }
            }
        }

        {
            //calculate totalLaborHours in the specified period
            Criteria criteria = session.createCriteria(AttendenceHistory.class, "history"); //$NON-NLS-1$
            criteria.createCriteria(AttendenceHistory.PROP_USER, "u"); //$NON-NLS-1$
            criteria.add(Restrictions.ge(AttendenceHistory.PROP_CLOCK_IN_TIME, start));
            criteria.add(Restrictions.le(AttendenceHistory.PROP_CLOCK_IN_TIME, end));

            if (userType != null) {
                criteria.add(Restrictions.eq("u." + User.PROP_TYPE, userType)); //$NON-NLS-1$
            }
            if (terminal != null) {
                criteria.add(Restrictions.eq(AttendenceHistory.PROP_TERMINAL, terminal));
            }
            List list = criteria.list();

            double laborHours = 0;
            double laborCost = 0;
            for (Object object : list) {
                AttendenceHistory attendenceHistory = (AttendenceHistory) object;
                double laborHourInMillisecond = 0;
                if (!attendenceHistory.isClockedOut() || attendenceHistory.getClockOutTime() == null) {
                    Shift attendenceShift = attendenceHistory.getShift();
                    laborHourInMillisecond = Math
                            .abs(end.getTime() - attendenceHistory.getClockInTime().getTime());
                    if (laborHourInMillisecond > attendenceShift.getShiftLength()) {
                        laborHourInMillisecond = attendenceShift.getShiftLength();
                    }
                } else {
                    laborHourInMillisecond = Math.abs(attendenceHistory.getClockInTime().getTime()
                            - attendenceHistory.getClockInTime().getTime());
                }
                double hour = (laborHourInMillisecond * (2.77777778 * Math.pow(10, -7)));
                laborHours += hour;
                laborCost += hour * (attendenceHistory.getUser().getCostPerHour() == null ? 0
                        : attendenceHistory.getUser().getCostPerHour());
            }
            salesSummary.setLaborHour(laborHours);
            salesSummary.setLaborCost(laborCost);
        }

        {
            //find summary by shift
            Criteria criteria = session.createCriteria(Shift.class);
            List shifts = criteria.list();
            for (Object object : shifts) {
                Shift shift = (Shift) object;

                List<OrderType> values = Application.getInstance().getOrderTypes(); //change enum
                for (OrderType ticketType : values) {
                    findRecordByProfitCenter(start, end, userType, terminal, session, salesSummary, shift,
                            ticketType);
                }

            }
        }

        salesSummary.calculateOthers();
        return salesSummary;
    } finally {
        if (session != null) {
            closeSession(session);
        }
    }
}

From source file:com.floreantpos.model.dao.SalesSummaryDAO.java

License:Open Source License

private void findRecordByProfitCenter(Date start, Date end, UserType userType, Terminal terminal,
        Session session, SalesStatistics salesSummary, Shift shift, OrderType ticketType) {
    Criteria criteria;//from  w ww . j  a v  a2s .  co  m
    criteria = session.createCriteria(Ticket.class, "ticket"); //$NON-NLS-1$
    criteria.createCriteria(Ticket.PROP_OWNER, "u"); //$NON-NLS-1$
    ProjectionList projectionList = Projections.projectionList();
    projectionList.add(Projections.rowCount());
    projectionList.add(Projections.sum(Ticket.PROP_NUMBER_OF_GUESTS));
    projectionList.add(Projections.sum(Ticket.PROP_SUBTOTAL_AMOUNT));
    criteria.setProjection(projectionList);
    criteria.add(Restrictions.ge(Ticket.PROP_CREATE_DATE, start));
    criteria.add(Restrictions.le(Ticket.PROP_CREATE_DATE, end));
    criteria.add(Restrictions.eq(Ticket.PROP_SHIFT, shift));
    criteria.add(Restrictions.eq(Ticket.PROP_TICKET_TYPE, ticketType.name()));

    if (userType != null) {
        criteria.add(Restrictions.eq("u." + User.PROP_TYPE, userType)); //$NON-NLS-1$
    }
    if (terminal != null) {
        criteria.add(Restrictions.eq(Ticket.PROP_TERMINAL, terminal));
    }
    List list = criteria.list();
    if (list.size() > 0) {
        ShiftwiseSalesTableData data = new ShiftwiseSalesTableData();
        data.setProfitCenter(ticketType.toString());
        Object[] objects = (Object[]) list.get(0);

        data.setShiftName(shift.getName());
        data.setCheckCount(((Number) objects[0]).intValue());

        if (objects.length > 1 && objects[1] != null) {
            data.setGuestCount(((Number) objects[1]).intValue());
        }
        if (objects.length > 2 && objects[2] != null) {
            data.setTotalSales(((Number) objects[2]).doubleValue());
        }
        data.setPercentage(data.getTotalSales() * 100 / salesSummary.getGrossSale());
        data.calculateOthers();
        salesSummary.addSalesTableData(data);
    }
}