com.ideaspymes.arthyweb.ventas.web.controllers.ResumenMetasBean.java Source code

Java tutorial

Introduction

Here is the source code for com.ideaspymes.arthyweb.ventas.web.controllers.ResumenMetasBean.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ideaspymes.arthyweb.ventas.web.controllers;

import com.ideaspymes.arthyweb.ventas.model.Feriado;
import com.ideaspymes.arthyweb.ventas.service.impl.ConsultasService;
import com.ideaspymes.arthyweb.ventas.service.impl.GestionComercialService;
import com.ideaspymes.arthyweb.ventas.service.impl.MetaAcum;
import com.ideaspymes.arthyweb.ventas.service.impl.ResumenMetas;
import com.ideaspymes.arthyweb.ventas.service.interfaces.IFeriadoDAO;
import com.ideaspymes.arthyweb.ventas.service.interfaces.IMetaDAO;
import com.ideaspymes.arthyweb.ventas.service.interfaces.IVendedorDAO;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import org.joda.time.Days;
import org.joda.time.LocalDate;

/**
 *
 * @author gilda.perez
 */
@Named
@ViewScoped
public class ResumenMetasBean implements Serializable {

    @EJB
    private ConsultasService consultasService;

    private List<ResumenMetas> resumen;
    private int sucursalId;
    //   private int vendedorid;
    private Date inicio = new Date();
    private Date fin = new Date();
    // private Object ejbVendedor;
    // private Object ejbGC;
    // private Object ejbFeriado;

    @EJB
    private IMetaDAO ejb;
    @EJB
    private GestionComercialService ejbGC;
    @EJB
    private IFeriadoDAO ejbFeriado;
    @EJB
    private IVendedorDAO ejbVendedor;

    @PostConstruct
    public void init() {
        cargaResumen();
    }

    public int getSucursalId() {
        return sucursalId;
    }

    public void setSucursalId(int sucursalId) {
        this.sucursalId = sucursalId;
    }

    public Date getInicio() {
        return inicio;
    }

    public void setInicio(Date inicio) {
        this.inicio = inicio;
    }

    public Date getFin() {
        return fin;
    }

    public void setFin(Date fin) {
        this.fin = fin;
    }

    public List<ResumenMetas> getResumen() {
        return resumen;
    }

    public void setResumen(List<ResumenMetas> resumen) {
        this.resumen = resumen;
    }

    public void cargaResumen() {
        //verificar que no sea nulo los parametros
        System.out.println("sucursal " + sucursalId + "inicio " + inicio + "fin " + fin);
        resumen = consultasService.getMetas(1, inicio, fin, 64);
        cargaDiasTrabajados();

    }

    private void cargaDiasTrabajados() {
        int diasTrabajados = calculaDiasTrabajados(new Date());

        for (ResumenMetas m : resumen) {
            m.setDiastrabajados(diasTrabajados);
            //System.out.println("SucursalId " + m.getSucursalid() + "CodVendedor " + m.getCodVendedor());    

            MetaAcum ma = consultasService.getMetaAcum(m.getSucursalid(), m.getCodVendedor());

            Integer gAcum = m.getVendidaEstandar() + ma.getGruesas().intValue();
            Integer cAcum = m.getVendidaMaxima() + ma.getCajas().intValue();

            System.out.println("gruesasVend " + m.getVendidaEstandar() + "CajasVend " + m.getVendidaMaxima());
            System.out.println("gruesas " + ma.getGruesas() + "Cajas " + ma.getCajas());

            m.setVendidaEstandar(gAcum);
            m.setVendidaMaxima(cAcum);

            Long be = consultasService.getBoletasEmitidas(m.getSucursalid(), m.getCodVendedor());
            Integer boletasemitidas = m.getBoletasemitidas() + be.intValue();

            System.out.println("BoletasEmitidas " + be);

            m.setBoletasemitidas(boletasemitidas);
            double porcentajemes = (gAcum * 100) / m.getMetaUMEstandar();
            double porcentajeboletas = (boletasemitidas * 100) / m.getMetaboletas();

            m.setPorcentajemes(porcentajemes);
            m.setPorcenajeboletas(porcentajeboletas);

            Double faltante100 = m.getMetaUMMaxima() - m.getVendidaMaxima();

            m.setFaltante100(faltante100.intValue());

            Double faltante105 = ((m.getMetaUMMaxima() * 105) / 100) - m.getVendidaMaxima();

            m.setFaltante105(faltante105.intValue());

            Integer diasfaltantes = m.getDiashabiles() - m.getDiastrabajados();
            Integer promediodiario = cAcum / m.getDiastrabajados();
            //System.out.println("Dias Faltantes " + diasfaltantes);   
            // System.out.println("Promedio Diario " + promediodiario);   
            Integer proyeccionUMMaxima = cAcum + (promediodiario * diasfaltantes);
            m.setProyeccionUMMaxima(proyeccionUMMaxima);
            Double porcentajeaAlcanzar = (proyeccionUMMaxima / m.getMetaUMMaxima());
            System.out.println("metaboletas " + m.getMetaboletas());
            m.setProyeccionporcentaje(porcentajeaAlcanzar * 100);
            Integer boletasmetaalcanzada = m.getMetaboletas() / m.getDiashabiles();
            System.out.println("boletas/diashabiles " + boletasmetaalcanzada);
            boletasmetaalcanzada = boletasmetaalcanzada * m.getDiastrabajados();
            System.out.println("*diastrabajados " + boletasmetaalcanzada);
            m.setBoletasmetaalcanzada(boletasmetaalcanzada);
            // System.out.println("Meta a alcanzar " +m.setBoletasmetaalcanzada(boletasmetaalcanzada));   

        }
    }

    public Integer calculaDiasTrabajados(Date fecha) {
        org.joda.time.LocalDate endDate = new org.joda.time.LocalDate(fecha);
        org.joda.time.LocalDate startDate = new org.joda.time.LocalDate(endDate.year().get(),
                endDate.monthOfYear().get(), 1);

        return getDiasTrabajadosIncluyendoHoy(startDate, endDate)
                - getHolydaysIgnoreWeekends(startDate.toDate(), fecha);
    }

    public Integer getDiasTrabajadosIncluyendoHoy(org.joda.time.LocalDate startDate,
            org.joda.time.LocalDate endDate) {
        return getDaysBetweenIgnoreWeekends(startDate, endDate) + 1;
    }

    public Integer getDaysBetweenIgnoreWeekends(org.joda.time.LocalDate startDate,
            org.joda.time.LocalDate endDate) {
        // If the start date is equal to the closing date, spent 0 days
        if (startDate.equals(endDate)) {
            return 0;
        }

        // A number that represents the day for the start date, Monday = 1 , Tuesday = 2 , Wednesday = 3 ...
        int dayOfWeekStartDateNumber = startDate.getDayOfWeek();

        // If the starting date is Saturday or Sunday , pretend to be Monday
        if (dayOfWeekStartDateNumber == 6 || dayOfWeekStartDateNumber == 7) {
            int DaysToAdd = 8 - dayOfWeekStartDateNumber;
            startDate = startDate.plusDays(DaysToAdd);
            dayOfWeekStartDateNumber = Integer.valueOf(startDate.dayOfWeek().getAsString());
        }

        // How many days have passed counting weekends
        int days = Days.daysBetween(startDate, endDate).getDays();

        // How many weeks have passed
        int weeks = days / 7;
        // Excess days left. E.g. one week and three days the excess will be 3
        int excess = days % 7;

        // Excess of days spent for the weekend , then it must be removed two days
        // the final number of days
        if (excess + dayOfWeekStartDateNumber >= 6) {
            // Week count * 5 working days + excess days - the weekend that excess crossed
            return weeks * 5 + excess - 2;
        }
        // Weeks count * 5 working days + excess days
        return weeks * 5 + excess;
    }

    public int getHolydaysIgnoreWeekends(Date startDate, Date endDate) {
        List<Date> fechas = getListOfDaysBetweenTwoDates(startDate, endDate);
        int R = 0;
        List<Date> feriados = getFeriados();
        for (Date f : feriados) {

            for (Date d : fechas) {

                if ((new LocalDate(f).compareTo(new LocalDate(d))) == 0 && !isWeekend(new LocalDate(f))) {
                    R += 1;
                }
            }
        }

        return R;
    }

    public List<Date> getListOfDaysBetweenTwoDates(Date startDate, Date endDate) {
        List<Date> result = new ArrayList<>();
        Calendar start = Calendar.getInstance();
        start.setTime(startDate);
        Calendar end = Calendar.getInstance();
        end.setTime(endDate);
        //end.add(Calendar.DAY_OF_YEAR, 1); //Add 1 day to endDate to make sure endDate is included into the final list
        while (start.before(end)) {
            result.add(start.getTime());
            start.add(Calendar.DAY_OF_YEAR, 1);
        }
        return result;
    }

    private boolean isWeekend(LocalDate date) {
        int dayOfWeek = date.getDayOfWeek();
        return dayOfWeek > 5;
    }

    public List<Date> getFeriados() {
        List<Date> R = new ArrayList<>();
        List<Feriado> feriados = ejbFeriado.findAll();
        for (Feriado f : feriados) {
            R.add(f.getFecha());
        }
        return R;
    }
}