Package no.ugland.utransprod.util.report

Source Code of no.ugland.utransprod.util.report.NokkelReport

package no.ugland.utransprod.util.report;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import no.ugland.utransprod.model.NokkelDriftProsjekteringV;
import no.ugland.utransprod.model.NokkelMonteringV;
import no.ugland.utransprod.model.NokkelOkonomiV;
import no.ugland.utransprod.model.NokkelProduksjonV;
import no.ugland.utransprod.model.NokkelSalgV;
import no.ugland.utransprod.model.NokkelTransportV;
import no.ugland.utransprod.model.OrderReserveV;
import no.ugland.utransprod.service.NokkelDriftProsjekteringVManager;
import no.ugland.utransprod.service.NokkelMonteringVManager;
import no.ugland.utransprod.service.NokkelOkonomiVManager;
import no.ugland.utransprod.service.NokkelProduksjonVManager;
import no.ugland.utransprod.service.NokkelSalgVManager;
import no.ugland.utransprod.service.NokkelTransportVManager;
import no.ugland.utransprod.service.OrderReserveVManager;
import no.ugland.utransprod.util.ModelUtil;
import no.ugland.utransprod.util.Util;
import no.ugland.utransprod.util.YearWeek;

/**
* H�ndterer data for n�kkeltallsrapport.
* @author atle.brekka
*/
public class NokkelReport {
    /**
     * �r og uke valgt for rapport.
     */
    private YearWeek currentYearWeek;

    /**
     * Rapport fra �r og uke.
     */
    private YearWeek fromYearWeek;

    /**
     * �r uke minus 2.
     */
    private YearWeek yearWeekN2;

    /**
     * �r uke minus 1.
     */
    private YearWeek yearWeekN1;

    /**
     * �r uke pluss en.
     */
    private YearWeek toYearWeek;

    /**
     * Valgt produktomr�de.
     */
    private String productArea;

    /**
     * Data for salgsrapport.
     */
    private Map<YearWeek, NokkelSalgV> nokkelSalgMap;

    /**
     * Akkumulerte tall for salg.
     */
    private NokkelSalgV nokkelSalgVAllYear;

    /**
     * Data for drift og prosjektering.
     */
    private Map<YearWeek, NokkelDriftProsjekteringV> nokkelDriftMap;

    /**
     * Akkumulerte tall for drift og prosjektering.
     */
    private NokkelDriftProsjekteringV nokkelDriftVAllYear;

    /**
     * Data for transport.
     */
    private Map<YearWeek, NokkelTransportV> nokkelTransportMap;

    /**
     * Akkumulerte tall for transport.
     */
    private NokkelTransportV nokkelTransportVAllYear;

    /**
     * Data for montering.
     */
    private Map<YearWeek, NokkelMonteringV> nokkelMonteringMap;

    /**
     * Akkumulerte tall for montering.
     */
    private NokkelMonteringV nokkelMonteringVAllYear;

    /**
     * Data for �konomi.
     */
    private Map<YearWeek, NokkelOkonomiV> nokkelOkonomiMap;

    /**
     * Akkumulerte tall for �konomi.
     */
    private NokkelOkonomiV nokkelOkonomiVAllYear;

    /**
     * Data for produksjon.
     */
    private Map<YearWeek, NokkelProduksjonV> nokkelProduksjonMap;

    /**
     * Akkumulerte tall for produksjon.
     */
    private NokkelProduksjonV nokkelProduksjonVAllYear;

    private List<OrderReserveV> orderReserveList;

    /**
     * @param year
     * @param week
     * @param aProductArea
     */
    public NokkelReport(final Integer year, final Integer week,
            final String aProductArea) {
        productArea = aProductArea;
        currentYearWeek = new YearWeek(year, week);

        fromYearWeek = Util.addWeek(currentYearWeek, -3);
        yearWeekN2 = Util.addWeek(currentYearWeek, -2);
        yearWeekN1 = Util.addWeek(currentYearWeek, -1);
        toYearWeek = Util.addWeek(currentYearWeek, 1);

    }

    /**
     * @return rapport�r
     */
    public final Integer getReportYear() {
        return currentYearWeek.getYear();
    }

    /**
     * @return rapportuke
     */
    public final Integer getReportWeek() {
        return currentYearWeek.getWeek();
    }

    /**
     * @return produktomr�de
     */
    public final String getProductArea() {
        return productArea;
    }

    /**
     * @return uke minus 3
     */
    public final Integer getWeekN3() {
        return fromYearWeek.getWeek();
    }

    /**
     * @return uke minus 2
     */
    public final Integer getWeekN2() {
        return yearWeekN2.getWeek();
    }

    /**
     * @return uke minus 1
     */
    public final Integer getWeekN1() {
        return yearWeekN1.getWeek();
    }

    /**
     * @return uke pluss en
     */
    public final Integer getWeek1N() {
        return toYearWeek.getWeek();
    }

    public final List<NokkelSalgV> getNokkelTallSalgWeek(final YearWeek yearWeek) {
        initReportSalgDriftTransport();
        NokkelSalgV sale = nokkelSalgMap.get(yearWeek);
        if (sale != null) {
            return Arrays.asList(new NokkelSalgV[] {sale});
        }
        return null;
    }

    /**
     * @return data for salg uke minus 3
     */
    public final List<NokkelSalgV> getNokkelTallSalgWeekN3() {
        return getNokkelTallSalgWeek(fromYearWeek);
    }

    /**
     * @return data for salg uke minus 2
     */
    public final List<NokkelSalgV> getNokkelTallSalgWeekN2() {
        return getNokkelTallSalgWeek(yearWeekN2);
    }

    /**
     * @return data for salg uke minus 1
     */
    public final List<NokkelSalgV> getNokkelTallSalgWeekN1() {
        return getNokkelTallSalgWeek(yearWeekN1);
    }

    /**
     * @return data for salg gjeldende uke
     */
    public final List<NokkelSalgV> getNokkelTallSalgWeekN() {
        return getNokkelTallSalgWeek(currentYearWeek);
    }

    /**
     * @return akkumulerte data for salg
     */
    public final List<NokkelSalgV> getNokkelTallSalgAggregate() {
        initReportSalgDriftTransport();

        if (nokkelSalgVAllYear != null) {
            return Arrays.asList(new NokkelSalgV[] {nokkelSalgVAllYear});
        }
        return null;
    }

    /**
     * @return data for salg uke pluss en
     */
    public final List<NokkelSalgV> getNokkelTallSalgWeek1N() {
        return getNokkelTallSalgWeek(toYearWeek);
    }

    public final List<NokkelDriftProsjekteringV> getNokkelTallDriftProsjektering(
            final YearWeek yearWeek) {
        initReportSalgDriftTransport();
        NokkelDriftProsjekteringV drift = nokkelDriftMap.get(yearWeek);
        if (drift != null) {
            return Arrays.asList(new NokkelDriftProsjekteringV[] {drift});
        }
        return null;
    }

    /**
     * @return data for drift og prosjektering uke minus 3
     */
    public final List<NokkelDriftProsjekteringV> getNokkelTallDriftProsjekteringWeekN3() {
        return getNokkelTallDriftProsjektering(fromYearWeek);
    }

    /**
     * @return data for drift og prosjektering uke minus 2
     */
    public final List<NokkelDriftProsjekteringV> getNokkelTallDriftProsjekteringWeekN2() {
        return getNokkelTallDriftProsjektering(yearWeekN2);
    }

    /**
     * @return data for drift og prosjektering uke minus 1
     */
    public final List<NokkelDriftProsjekteringV> getNokkelTallDriftProsjekteringWeekN1() {
        return getNokkelTallDriftProsjektering(yearWeekN1);
    }

    /**
     * @return data for drift og prosjektering for gjeldende uke
     */
    public final List<NokkelDriftProsjekteringV> getNokkelTallDriftProsjekteringWeekN() {
        return getNokkelTallDriftProsjektering(currentYearWeek);
    }

    /**
     * @return akkumulerte data for drift og prosjektering
     */
    public final List<NokkelDriftProsjekteringV> getNokkelTallDriftProsjekteringAggregate() {
        initReportSalgDriftTransport();

        if (nokkelDriftVAllYear != null) {
            return Arrays
                    .asList(new NokkelDriftProsjekteringV[] {nokkelDriftVAllYear});
        }
        return null;
    }

    /**
     * @return data for drift og prosjektering uke pluss 1
     */
    public final List<NokkelDriftProsjekteringV> getNokkelTallDriftProsjekteringWeek1N() {
        return getNokkelTallDriftProsjektering(toYearWeek);
    }

    public final List<NokkelTransportV> getNokkelTallTransportWeek(
            final YearWeek yearWeek) {
        initReportSalgDriftTransport();
        NokkelTransportV transport = nokkelTransportMap.get(yearWeek);
        if (transport != null) {
            return Arrays.asList(new NokkelTransportV[] {transport});
        }
        return null;
    }

    /**
     * @return data for transport uke minus 3
     */
    public final List<NokkelTransportV> getNokkelTallTransportWeekN3() {
        return getNokkelTallTransportWeek(fromYearWeek);
    }

    /**
     * @return data for transport uke minus 2
     */
    public final List<NokkelTransportV> getNokkelTallTransportWeekN2() {
        return getNokkelTallTransportWeek(yearWeekN2);
    }

    /**
     * @return data for transport uke minus 1
     */
    public final List<NokkelTransportV> getNokkelTallTransportWeekN1() {
        return getNokkelTallTransportWeek(yearWeekN1);
    }

    /**
     * @return data for transport gjeldende uke
     */
    public final List<NokkelTransportV> getNokkelTallTransportWeekN() {
        return getNokkelTallTransportWeek(currentYearWeek);
    }

    /**
     * @return akkumulerte data for transport
     */
    public final List<NokkelTransportV> getNokkelTallTransportAggregate() {
        initReportSalgDriftTransport();

        if (nokkelTransportVAllYear != null) {
            return Arrays
                    .asList(new NokkelTransportV[] {nokkelTransportVAllYear});
        }
        return null;
    }

    /**
     * @return data for transport uke pluss 1
     */
    public final List<NokkelTransportV> getNokkelTallTransportWeek1N() {
        return getNokkelTallTransportWeek(toYearWeek);
    }

    public final List<NokkelMonteringV> getNokkelTallMonteringWeek(
            final YearWeek yearWeek) {
        initReportMonteringOkonomi();
        NokkelMonteringV montering = nokkelMonteringMap.get(yearWeek);
        if (montering != null) {
            return Arrays.asList(new NokkelMonteringV[] {montering});
        }
        return null;
    }

    public final List<NokkelMonteringV> getNokkelTallMonteringWeekN3() {
        return getNokkelTallMonteringWeek(fromYearWeek);
    }

    public final List<NokkelMonteringV> getNokkelTallMonteringWeekN2() {
        return getNokkelTallMonteringWeek(yearWeekN2);
    }

    public final List<NokkelMonteringV> getNokkelTallMonteringWeekN1() {
        return getNokkelTallMonteringWeek(yearWeekN1);
    }

    public final List<NokkelMonteringV> getNokkelTallMonteringWeekN() {
        return getNokkelTallMonteringWeek(currentYearWeek);
    }

    public final List<NokkelMonteringV> getNokkelTallMonteringWeek1N() {
        return getNokkelTallMonteringWeek(toYearWeek);
    }

    public final List<NokkelMonteringV> getNokkelTallMonteringAggregate() {
        initReportMonteringOkonomi();

        if (nokkelMonteringVAllYear != null) {
            return Arrays
                    .asList(new NokkelMonteringV[] {nokkelMonteringVAllYear});
        }
        return null;
    }

    public final List<NokkelOkonomiV> getNokkelTallOkonomiWeek(
            final YearWeek yearWeek) {
        initReportMonteringOkonomi();
        NokkelOkonomiV okonomi = nokkelOkonomiMap.get(yearWeek);
        if (okonomi != null) {
            return Arrays.asList(new NokkelOkonomiV[] {okonomi});
        }
        return null;
    }

    public final List<NokkelOkonomiV> getNokkelTallOkonomiWeekN3() {
        return getNokkelTallOkonomiWeek(fromYearWeek);
    }

    public final List<NokkelOkonomiV> getNokkelTallOkonomiWeekN2() {
        return getNokkelTallOkonomiWeek(yearWeekN2);
    }

    public final List<NokkelOkonomiV> getNokkelTallOkonomiWeekN1() {
        return getNokkelTallOkonomiWeek(yearWeekN1);
    }

    public final List<NokkelOkonomiV> getNokkelTallOkonomiWeekN() {
        return getNokkelTallOkonomiWeek(currentYearWeek);
    }

    public final List<NokkelOkonomiV> getNokkelTallOkonomiWeek1N() {
        return getNokkelTallOkonomiWeek(toYearWeek);
    }

    public final List<NokkelOkonomiV> getNokkelTallOkonomiAggregate() {
        initReportMonteringOkonomi();

        if (nokkelOkonomiVAllYear != null) {
            return Arrays.asList(new NokkelOkonomiV[] {nokkelOkonomiVAllYear});
        }
        return null;
    }

    public final List<NokkelProduksjonV> getNokkelTallProduksjonWeek(
            final YearWeek yearWeek) {
        initReportProduksjon();
        NokkelProduksjonV produksjon = nokkelProduksjonMap.get(yearWeek);
        if (produksjon != null) {
            return Arrays.asList(new NokkelProduksjonV[] {produksjon});
        }
        return null;
    }

    public final List<NokkelProduksjonV> getNokkelTallProduksjonWeekN3() {
        return getNokkelTallProduksjonWeek(fromYearWeek);
    }

    public final List<NokkelProduksjonV> getNokkelTallProduksjonWeekN2() {
        return getNokkelTallProduksjonWeek(yearWeekN2);
    }

    public final List<NokkelProduksjonV> getNokkelTallProduksjonWeekN1() {
        return getNokkelTallProduksjonWeek(yearWeekN1);
    }

    public final List<NokkelProduksjonV> getNokkelTallProduksjonWeekN() {
        return getNokkelTallProduksjonWeek(currentYearWeek);
    }

    public final List<NokkelProduksjonV> getNokkelTallProduksjonWeek1N() {
        return getNokkelTallProduksjonWeek(toYearWeek);
    }

    public final List<NokkelProduksjonV> getNokkelTallProduksjonAggregate() {
        initReportProduksjon();

        if (nokkelProduksjonVAllYear != null) {
            return Arrays
                    .asList(new NokkelProduksjonV[] {nokkelProduksjonVAllYear});
        }
        return null;
    }

    public final List<OrderReserveV> getOrderReserve() {
        initReportProduksjon();

        return orderReserveList;
    }

    private void initReportProduksjon() {
        NokkelProduksjonVManager nokkelProduksjonVManager = (NokkelProduksjonVManager) ModelUtil
                .getBean("nokkelProduksjonVManager");
        OrderReserveVManager orderReserveVManager = (OrderReserveVManager) ModelUtil
                .getBean("orderReserveVManager");
        // produksjon
        if (nokkelProduksjonMap == null) {
            setNokkelProduksjonMap(nokkelProduksjonVManager);
        }

        if (nokkelProduksjonVAllYear == null) {
            nokkelProduksjonVAllYear = nokkelProduksjonVManager
                    .aggreagateYearWeek(currentYearWeek, productArea);
        }

        if (orderReserveList == null) {
            setOrderReserveList(orderReserveVManager);
        }
    }

    private void setOrderReserveList(
            final OrderReserveVManager orderReserveVManager) {
        orderReserveList = new ArrayList<OrderReserveV>();
        List<OrderReserveV> reserve = orderReserveVManager
                .findByProductArea(productArea);
        if (reserve != null) {
            orderReserveList.addAll(reserve);
        }
    }

    private void setNokkelProduksjonMap(
            final NokkelProduksjonVManager nokkelProduksjonVManager) {
        List<NokkelProduksjonV> produksjonList = nokkelProduksjonVManager
                .findBetweenYearWeek(fromYearWeek, toYearWeek, productArea);

        if (produksjonList != null) {
            nokkelProduksjonMap = new Hashtable<YearWeek, NokkelProduksjonV>();
            for (NokkelProduksjonV produksjon : produksjonList) {
                nokkelProduksjonMap.put(new YearWeek(produksjon
                        .getOrderReadyYear(), produksjon.getOrderReadyWeek()),
                        produksjon);
            }
        }
    }

    private void initReportMonteringOkonomi() {
        NokkelMonteringVManager nokkelMonteringVManager = (NokkelMonteringVManager) ModelUtil
                .getBean("nokkelMonteringVManager");
        NokkelOkonomiVManager nokkelOkonomiVManager = (NokkelOkonomiVManager) ModelUtil
                .getBean("nokkelOkonomiVManager");
        // montering
        if (nokkelMonteringMap == null) {

            setNokkelMonteringMap(nokkelMonteringVManager);
        }

        if (nokkelMonteringVAllYear == null) {
            nokkelMonteringVAllYear = nokkelMonteringVManager
                    .aggreagateYearWeek(currentYearWeek, productArea);
        }
        // �konomi
        if (nokkelOkonomiMap == null) {

            setNokkelOkonomiMap(nokkelOkonomiVManager);
        }

        if (nokkelOkonomiVAllYear == null) {
            nokkelOkonomiVAllYear = nokkelOkonomiVManager.aggreagateYearWeek(
                    currentYearWeek, productArea);
        }
    }

    private void setNokkelOkonomiMap(
            final NokkelOkonomiVManager nokkelOkonomiVManager) {
        List<NokkelOkonomiV> okonomiList = nokkelOkonomiVManager
                .findBetweenYearWeek(fromYearWeek, toYearWeek, productArea);

        if (okonomiList != null) {
            nokkelOkonomiMap = new Hashtable<YearWeek, NokkelOkonomiV>();
            for (NokkelOkonomiV okonomi : okonomiList) {
                nokkelOkonomiMap.put(new YearWeek(okonomi.getInvoiceYear(),
                        okonomi.getInvoiceWeek()), okonomi);
            }
        }
    }

    private void setNokkelMonteringMap(
            final NokkelMonteringVManager nokkelMonteringVManager) {
        List<NokkelMonteringV> monteringList = nokkelMonteringVManager
                .findBetweenYearWeek(fromYearWeek, toYearWeek, productArea);

        if (monteringList != null) {
            nokkelMonteringMap = new Hashtable<YearWeek, NokkelMonteringV>();
            for (NokkelMonteringV montering : monteringList) {
                nokkelMonteringMap.put(new YearWeek(montering
                        .getAssembliedYear(), montering.getAssembliedWeek()),
                        montering);
            }
        }
    }

    /**
     * Initierere alle data for rapport for salg/drift/transport.
     */
    private void initReportSalgDriftTransport() {
        NokkelSalgVManager nokkelSalgVManager = (NokkelSalgVManager) ModelUtil
                .getBean("nokkelSalgVManager");
        NokkelDriftProsjekteringVManager nokkelDriftProsjekteringVManager =
            (NokkelDriftProsjekteringVManager) ModelUtil
                .getBean("nokkelDriftProsjekteringVManager");
        NokkelTransportVManager nokkelTransportVManager = (NokkelTransportVManager) ModelUtil
                .getBean("nokkelTransportVManager");
        // salg
        if (nokkelSalgMap == null) {

            setNokkelSalgMap(nokkelSalgVManager);
        }

        if (nokkelSalgVAllYear == null) {
            nokkelSalgVAllYear = nokkelSalgVManager.aggreagateYearWeek(
                    currentYearWeek, productArea);
        }
        // drift og prosjektering
        if (nokkelDriftMap == null) {

            setNokkelDriftMap(nokkelDriftProsjekteringVManager);
        }

        if (nokkelDriftVAllYear == null) {
            nokkelDriftVAllYear = nokkelDriftProsjekteringVManager
                    .aggreagateYearWeek(currentYearWeek, productArea);
        }
        // transport
        if (nokkelTransportMap == null) {

            setNokkelTransportMap(nokkelTransportVManager);
        }

        if (nokkelTransportVAllYear == null) {
            nokkelTransportVAllYear = nokkelTransportVManager
                    .aggreagateYearWeek(currentYearWeek, productArea);
        }
    }

    private void setNokkelTransportMap(
            final NokkelTransportVManager nokkelTransportVManager) {
        List<NokkelTransportV> transportList = nokkelTransportVManager
                .findBetweenYearWeek(fromYearWeek, toYearWeek, productArea);

        if (transportList != null) {
            nokkelTransportMap = new Hashtable<YearWeek, NokkelTransportV>();
            for (NokkelTransportV transport : transportList) {
                nokkelTransportMap.put(new YearWeek(transport
                        .getOrderSentYear(), transport.getOrderSentWeek()),
                        transport);
            }
        }
    }

    private void setNokkelDriftMap(
            final NokkelDriftProsjekteringVManager nokkelDriftProsjekteringVManager) {
        List<NokkelDriftProsjekteringV> driftList = nokkelDriftProsjekteringVManager
                .findBetweenYearWeek(fromYearWeek, toYearWeek, productArea);

        if (driftList != null) {
            nokkelDriftMap = new Hashtable<YearWeek, NokkelDriftProsjekteringV>();
            for (NokkelDriftProsjekteringV drift : driftList) {
                nokkelDriftMap.put(new YearWeek(drift.getPacklistYear(), drift
                        .getPacklistWeek()), drift);
            }
        }
    }

    private void setNokkelSalgMap(final NokkelSalgVManager nokkelSalgVManager) {
        List<NokkelSalgV> saleList = nokkelSalgVManager.findBetweenYearWeek(
                fromYearWeek, toYearWeek, productArea);

        if (saleList != null) {
            nokkelSalgMap = new Hashtable<YearWeek, NokkelSalgV>();
            for (NokkelSalgV sale : saleList) {
                nokkelSalgMap.put(new YearWeek(sale.getAgreementYear(), sale
                        .getAgreementWeek()), sale);
            }
        }
    }

}
TOP

Related Classes of no.ugland.utransprod.util.report.NokkelReport

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.