Example usage for org.hibernate.criterion ProjectionList add

List of usage examples for org.hibernate.criterion ProjectionList add

Introduction

In this page you can find the example usage for org.hibernate.criterion ProjectionList add.

Prototype

public ProjectionList add(Projection projection) 

Source Link

Document

Add a projection to this list of projections

Usage

From source file:com.evolveum.midpoint.repo.sql.query.QueryInterpreter.java

License:Apache License

public Criteria interpret(ObjectQuery query, Class<? extends ObjectType> type,
        Collection<SelectorOptions<GetOperationOptions>> options, PrismContext prismContext,
        boolean countingObjects, Session session) throws QueryException {
    Validate.notNull(type, "Type must not be null.");
    Validate.notNull(session, "Session must not be null.");
    Validate.notNull(prismContext, "Prism context must not be null.");

    if (LOGGER.isTraceEnabled()) {
        LOGGER.trace("Interpreting query for type '{}', query:\n{}", new Object[] { type, query });
    }/*  www .j  av a  2s.  com*/

    Criteria criteria;
    if (query != null && query.getFilter() != null) {
        criteria = interpretQuery(query, type, prismContext, session);
    } else {
        criteria = session.createCriteria(ClassMapper.getHQLTypeClass(type));
    }

    if (!countingObjects && query != null && query.getPaging() != null) {
        criteria = updatePagingAndSorting(criteria, type, query.getPaging());
    }

    if (!countingObjects) {
        ProjectionList projections = Projections.projectionList();
        projections.add(Projections.property("fullObject"));

        projections.add(Projections.property("stringsCount"));
        projections.add(Projections.property("longsCount"));
        projections.add(Projections.property("datesCount"));
        projections.add(Projections.property("referencesCount"));
        projections.add(Projections.property("polysCount"));

        criteria.setProjection(projections);
    }

    return criteria;
}

From source file:com.evolveum.midpoint.repo.sql.QueryInterpreterTest.java

License:Apache License

private void addFullObjectProjectionList(String prefix, ProjectionList list, boolean group) {
    if (prefix == null) {
        prefix = "";
    } else {//from w  w  w.  java2  s  . co m
        prefix = prefix + ".";
    }

    if (group) {
        list.add(Projections.groupProperty(prefix + "fullObject"));
        list.add(Projections.groupProperty(prefix + "stringsCount"));
        list.add(Projections.groupProperty(prefix + "longsCount"));
        list.add(Projections.groupProperty(prefix + "datesCount"));
        list.add(Projections.groupProperty(prefix + "referencesCount"));
        list.add(Projections.groupProperty(prefix + "polysCount"));
    } else {
        list.add(Projections.property(prefix + "fullObject"));
        list.add(Projections.property(prefix + "stringsCount"));
        list.add(Projections.property(prefix + "longsCount"));
        list.add(Projections.property(prefix + "datesCount"));
        list.add(Projections.property(prefix + "referencesCount"));
        list.add(Projections.property(prefix + "polysCount"));
    }
}

From source file:com.evolveum.midpoint.repo.sql.QueryInterpreterTest.java

License:Apache License

@Test
public void test310QueryNameAndOrg() throws Exception {
    Session session = open();//from w w w  . jav a 2s .c  o  m

    try {
        DetachedCriteria detached = DetachedCriteria.forClass(ROrgClosure.class, "cl");
        detached.setProjection(Projections.distinct(Projections.property("cl.descendantOid")));
        detached.add(Restrictions.eq("cl.ancestorOid", "1234"));
        detached.add(Restrictions.ne("cl.descendantOid", "1234"));

        Criteria main = session.createCriteria(RUser.class, "u");
        String mainAlias = "u";

        ProjectionList projections = Projections.projectionList();
        projections.add(Projections.property("fullObject"));

        projections.add(Projections.property("stringsCount"));
        projections.add(Projections.property("longsCount"));
        projections.add(Projections.property("datesCount"));
        projections.add(Projections.property("referencesCount"));
        projections.add(Projections.property("polysCount"));

        main.setProjection(projections);

        Conjunction c = Restrictions.conjunction();
        c.add(Restrictions.and(Restrictions.eq("u.name.orig", "cpt. Jack Sparrow"),
                Restrictions.eq("u.name.norm", "cpt jack sparrow")));
        c.add(Subqueries.propertyIn(mainAlias + ".oid", detached));
        main.add(c);

        main.addOrder(Order.asc("u.name.orig"));

        String expected = HibernateToSqlTranslator.toSql(main);

        EqualFilter eqFilter = EqualFilter.createEqual(ObjectType.F_NAME, ObjectType.class, prismContext, null,
                new PolyString("cpt. Jack Sparrow", "cpt jack sparrow"));

        OrgFilter orgFilter = OrgFilter.createOrg("12341234-1234-1234-1234-123412341234");

        ObjectQuery query = ObjectQuery.createObjectQuery(AndFilter.createAnd(eqFilter, orgFilter));
        query.setPaging(ObjectPaging.createPaging(null, null, ObjectType.F_NAME, OrderDirection.ASCENDING));

        String real = getInterpretedQuery(session, UserType.class, query);

        LOGGER.info("exp. query>\n{}\nreal query>\n{}", new Object[] { expected, real });
        AssertJUnit.assertEquals(expected, real);
    } finally {
        close(session);
    }
}

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  w  w.  ja va 2  s  .c  om*/
    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;/*ww w .  ja  va 2  s  .  co  m*/
    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   ww w  . j a va  2 s .c o  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  ww  .j  av a2 s  .  c o 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 w  w .j a  v  a  2s  . 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);
    }
}

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

License:Open Source License

public TicketSummary getOpenTicketSummary() {
    Session session = null;/*from  w w w  .j a va  2s. co m*/
    TicketSummary ticketSummary = new TicketSummary();
    try {
        session = getSession();
        Criteria criteria = session.createCriteria(Ticket.class);
        criteria.add(Restrictions.eq(Ticket.PROP_CLOSED, Boolean.FALSE));
        criteria.add(Restrictions.eq(Ticket.PROP_VOIDED, Boolean.FALSE));
        criteria.add(Restrictions.eq(Ticket.PROP_REFUNDED, Boolean.FALSE));
        criteria.add(Restrictions.eq(Ticket.PROP_DRAWER_RESETTED, Boolean.FALSE));

        ProjectionList projectionList = Projections.projectionList();
        projectionList.add(Projections.count(Ticket.PROP_ID));
        projectionList.add(Projections.sum(Ticket.PROP_TOTAL_AMOUNT));
        criteria.setProjection(projectionList);

        List list = criteria.list();
        if (list.size() > 0) {
            Object[] o = (Object[]) list.get(0);
            ticketSummary.setTotalTicket(((Integer) o[0]).intValue());
            ticketSummary.setTotalPrice(o[1] == null ? 0 : ((Double) o[1]).doubleValue());
        }
        return ticketSummary;
    } finally {
        closeSession(session);
    }
}

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

License:Open Source License

public TicketSummary getClosedTicketSummary(Terminal terminal) {

    Session session = null;//  ww  w  .j  av  a  2 s .  c  o m
    TicketSummary ticketSummary = new TicketSummary();
    try {
        session = getSession();
        Criteria criteria = session.createCriteria(Ticket.class);
        criteria.add(Restrictions.eq(Ticket.PROP_CLOSED, Boolean.TRUE));
        criteria.add(Restrictions.eq(Ticket.PROP_VOIDED, Boolean.FALSE));
        criteria.add(Restrictions.eq(Ticket.PROP_REFUNDED, Boolean.FALSE));
        criteria.add(Restrictions.eq(Ticket.PROP_DRAWER_RESETTED, Boolean.FALSE));
        criteria.add(Restrictions.eq(Ticket.PROP_TERMINAL, terminal));

        ProjectionList projectionList = Projections.projectionList();
        projectionList.add(Projections.count(Ticket.PROP_ID));
        projectionList.add(Projections.sum(Ticket.PROP_TOTAL_AMOUNT));
        criteria.setProjection(projectionList);

        List list = criteria.list();
        if (list.size() > 0) {
            Object[] o = (Object[]) list.get(0);
            ticketSummary.setTotalTicket(((Integer) o[0]).intValue());
            ticketSummary.setTotalPrice(o[1] == null ? 0 : ((Double) o[1]).doubleValue());
        }
        return ticketSummary;
    } finally {
        closeSession(session);
    }
}