Package no.ugland.utransprod.dao.hibernate

Source Code of no.ugland.utransprod.dao.hibernate.NokkelProduksjonVDAOHibernate

package no.ugland.utransprod.dao.hibernate;

import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.List;

import no.ugland.utransprod.dao.NokkelProduksjonVDAO;
import no.ugland.utransprod.model.NokkelProduksjonV;
import no.ugland.utransprod.model.NokkelProduksjonVPK;
import no.ugland.utransprod.util.Util;
import no.ugland.utransprod.util.YearWeek;

import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateCallback;

/**
* Implementasjon av DAO for view NOKKEL_PRODUKSJON_V
* @author atle.brekka
*/
public class NokkelProduksjonVDAOHibernate extends
        BaseDAOHibernate<NokkelProduksjonV> implements NokkelProduksjonVDAO {
    /**
     * Konstrukt�r
     */
    public NokkelProduksjonVDAOHibernate() {
        super(NokkelProduksjonV.class);
    }

    /**
     * @see no.ugland.utransprod.dao.NokkelProduksjonVDAO#findByWeek(java.lang.Integer,
     *      java.lang.Integer)
     */
    public final NokkelProduksjonV findByWeek(final Integer year,
            final Integer week) {
        return (NokkelProduksjonV) getHibernateTemplate().execute(
                new HibernateCallback() {

                    @SuppressWarnings("unchecked")
                    public Object doInHibernate(final Session session) {
                        List<NokkelProduksjonV> list = session.createCriteria(
                                NokkelProduksjonV.class).add(
                                Restrictions.eq(
                                        "nokkelProduksjonVPK.orderReadyYear",
                                        year)).add(
                                Restrictions.eq(
                                        "nokkelProduksjonVPK.orderReadyWeek",
                                        week)).list();

                        NokkelProduksjonV nokkelProduksjonV = null;
                        if (list != null) {
                            nokkelProduksjonV = new NokkelProduksjonV(null, 0,
                                    BigDecimal.valueOf(0), 0, BigDecimal
                                            .valueOf(0), BigDecimal.valueOf(0),
                                    BigDecimal.valueOf(0), BigDecimal
                                            .valueOf(0));
                            for (NokkelProduksjonV nokkel : list) {
                                if (nokkel != null) {
                                    nokkelProduksjonV
                                            .setBudgetDeviation(nokkelProduksjonV
                                                    .getBudgetDeviation()
                                                    .add(
                                                            nokkel
                                                                    .getBudgetDeviation()));
                                    nokkelProduksjonV.setBudgetValue(nokkel
                                            .getBudgetValue());
                                    nokkelProduksjonV
                                            .setCountOrderReady(nokkelProduksjonV
                                                    .getCountOrderReady()
                                                    + nokkel
                                                            .getCountOrderReady());
                                    nokkelProduksjonV
                                            .setPackageSumWeek(nokkelProduksjonV
                                                    .getPackageSumWeek()
                                                    .add(
                                                            Util
                                                                    .convertNullToBigDecimal(nokkel
                                                                            .getPackageSumWeek())));
                                    nokkelProduksjonV.calculateDeviationProc();
                                }
                            }
                        }

                        return nokkelProduksjonV;
                    }

                });
    }

    /**
     * @see no.ugland.utransprod.dao.NokkelProduksjonVDAO#
     *      aggreagateYearWeek(no.ugland.utransprod.util.YearWeek,
     *      java.lang.String)
     */
    public final NokkelProduksjonV aggreagateYearWeek(
            final YearWeek currentYearWeek, final String productArea) {
        return (NokkelProduksjonV) getHibernateTemplate().execute(
                new HibernateCallback() {

                    @SuppressWarnings("unchecked")
                    public Object doInHibernate(final Session session) {
                        NokkelProduksjonV nokkelProduksjonV = null;
                        List<Object> list = session
                                .createQuery(
                                        "select sum(nokkelProduksjonV.packageSumWeek),"
                                                + "sum(nokkelProduksjonV.budgetValue),"
                                                + "sum(nokkelProduksjonV.budgetDeviation),"
                                                + "sum(nokkelProduksjonV.countOrderReady),"
                                                + "sum(nokkelProduksjonV.deviationCount),"
                                                + "sum(nokkelProduksjonV.internalCost)"
                                                + "from NokkelProduksjonV nokkelProduksjonV "
                                                + "where nokkelProduksjonV.nokkelProduksjonVPK.orderReadyYear"
                                                + "=:year and "
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.orderReadyWeek "
                                                + "<=:week and "
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.productArea="
                                                + ":productArea")
                                .setParameter("year", currentYearWeek.getYear())
                                .setParameter("week", currentYearWeek.getWeek())
                                .setParameter("productArea", productArea)
                                .list();
                        if (list != null && list.size() == 1) {
                            Object[] result = (Object[]) list.get(0);
                            nokkelProduksjonV = new NokkelProduksjonV();
                            nokkelProduksjonV
                                    .setNokkelProduksjonVPK(new NokkelProduksjonVPK(
                                            currentYearWeek.getYear(),
                                            currentYearWeek.getWeek(),
                                            productArea, null));
                            nokkelProduksjonV
                                    .setCountOrderReady((Integer) result[3]);
                            nokkelProduksjonV
                                    .setDeviationCount((Integer) result[4]);
                            nokkelProduksjonV
                                    .setInternalCost((BigDecimal) result[5]);
                            nokkelProduksjonV
                                    .setPackageSumWeek((BigDecimal) result[0]);
                            nokkelProduksjonV
                                    .setBudgetValue((BigDecimal) result[1]);
                            nokkelProduksjonV
                                    .setBudgetDeviation((BigDecimal) result[2]);

                            if (nokkelProduksjonV.getBudgetValue() != null
                                    && nokkelProduksjonV.getBudgetValue()
                                            .intValue() != 0) {
                                nokkelProduksjonV
                                        .setBudgetDeviationProc(nokkelProduksjonV
                                                .getBudgetDeviation()
                                                .divide(
                                                        nokkelProduksjonV
                                                                .getBudgetValue(),
                                                        2, RoundingMode.HALF_UP)
                                                .multiply(
                                                        BigDecimal.valueOf(100),
                                                        new MathContext(
                                                                100,
                                                                RoundingMode.HALF_UP)));
                            } else {
                                nokkelProduksjonV
                                        .setBudgetDeviationProc(BigDecimal
                                                .valueOf(100));
                            }

                        }
                        return nokkelProduksjonV;
                    }

                });
    }

    @SuppressWarnings("unchecked")
    public final List<NokkelProduksjonV> findByYearWeekProductArea(
            final Integer year, final Integer weekFrom, final Integer weekTo,
            final String productAreaName) {
        return (List<NokkelProduksjonV>) getHibernateTemplate().execute(
                new HibernateCallback() {

                    public Object doInHibernate(final Session session) {

                        return session
                                .createQuery(
                                        "select "
                                                + "new NokkelProduksjonV("
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.orderReadyYear,"
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.orderReadyWeek,"
                                                + "sum(nokkelProduksjonV.countOrderReady),"
                                                + "sum(nokkelProduksjonV.budgetValue),"
                                                + "sum(nokkelProduksjonV.packageSumWeek),"
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.productArea, "
                                                + "sum(nokkelProduksjonV.budgetDeviation))"
                                                + "from NokkelProduksjonV nokkelProduksjonV "
                                                + "where nokkelProduksjonV.nokkelProduksjonVPK.productArea="
                                                + ":productArea and "
                                                + " nokkelProduksjonV.nokkelProduksjonVPK.orderReadyYear="
                                                + ":year and "
                                                + " nokkelProduksjonV.nokkelProduksjonVPK.orderReadyWeek"
                                                + " between :weekFrom and :weekTo "
                                                + "group by "
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.orderReadyYear,"
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.orderReadyWeek,"
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.productArea")
                                .setParameter("year", year).setParameter(
                                        "weekFrom", weekFrom).setParameter(
                                        "weekTo", weekTo).setParameter(
                                        "productArea", productAreaName).list();
                    }

                });
    }

    /**
     * @see no.ugland.utransprod.dao.NokkelProduksjonVDAO#
     *      findBetweenYearWeek(no.ugland.utransprod.util.YearWeek,
     *      no.ugland.utransprod.util.YearWeek, java.lang.String)
     */
    @SuppressWarnings("unchecked")
    public final List<NokkelProduksjonV> findBetweenYearWeek(
            final YearWeek fromYearWeek, final YearWeek toYearWeek,
            final String productArea) {
        return (List<NokkelProduksjonV>) getHibernateTemplate().execute(
                new HibernateCallback() {

                    public Object doInHibernate(final Session session) {
                        String query = "select nokkelProduksjonV "
                                + "from NokkelProduksjonV nokkelProduksjonV "
                                + "where "
                                + "cast(nokkelProduksjonV.nokkelProduksjonVPK.orderReadyYear as string)"
                                + "||"
                                + "cast(nokkelProduksjonV.nokkelProduksjonVPK.orderReadyWeek+10 as string) "
                                + "between  :fromString and :toString and "
                                + "nokkelProduksjonV.nokkelProduksjonVPK.productArea=:productArea";

                        return session.createQuery(query).setParameter(
                                "fromString",
                                fromYearWeek.getFormattetYearWeekAdd10())
                                .setParameter("toString",
                                        toYearWeek.getFormattetYearWeekAdd10())
                                .setParameter("productArea", productArea)
                                .list();
                    }

                });
    }

    @SuppressWarnings("unchecked")
    public final List<NokkelProduksjonV> findByYearWeekProductAreaGroup(
            final Integer year, final Integer weekFrom, final Integer weekTo,
            final String productAreaGroupName) {
        return (List<NokkelProduksjonV>) getHibernateTemplate().execute(
                new HibernateCallback() {

                    public Object doInHibernate(final Session session) {

                        return session
                                .createQuery(
                                        "select "
                                                + "new NokkelProduksjonV("
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.orderReadyYear,"
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.orderReadyWeek,"
                                                + "sum(nokkelProduksjonV.countOrderReady),"
                                                + "sum(nokkelProduksjonV.budgetValue),"
                                                + "sum(nokkelProduksjonV.packageSumWeek),"
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.productArea, "
                                                + "sum(nokkelProduksjonV.budgetDeviation),"
                                                + "nokkelProduksjonV.nokkelProduksjonVPK."
                                                + "productAreaGroupName)"
                                                + "from NokkelProduksjonV nokkelProduksjonV "
                                                + "where "
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.productAreaGroupName"
                                                + "=:productAreaGroupName and "
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.orderReadyYear="
                                                + ":year and "
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.orderReadyWeek "
                                                + "between :weekFrom and :weekTo "
                                                + "group by "
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.orderReadyYear,"
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.orderReadyWeek,"
                                                + "nokkelProduksjonV.nokkelProduksjonVPK.productArea,"
                                                + "nokkelProduksjonV.nokkelProduksjonVPK."
                                                + "productAreaGroupName")
                                .setParameter("year", year).setParameter(
                                        "weekFrom", weekFrom).setParameter(
                                        "weekTo", weekTo).setParameter(
                                        "productAreaGroupName",
                                        productAreaGroupName).list();
                    }

                });
    }

}
TOP

Related Classes of no.ugland.utransprod.dao.hibernate.NokkelProduksjonVDAOHibernate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.