Java tutorial
/* * 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; } }