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));
}
}