ar.com.cristal.creditos.client.tambo.animales.alta.AltaAnimalesActivity.java Source code

Java tutorial

Introduction

Here is the source code for ar.com.cristal.creditos.client.tambo.animales.alta.AltaAnimalesActivity.java

Source

/*
 * Copyright 2011 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package ar.com.cristal.creditos.client.tambo.animales.alta;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import ar.com.cristal.creditos.client.ClientFactory;
import ar.com.cristal.creditos.client.clientes.alta.ClienteView;
import ar.com.cristal.creditos.client.clientes.busqueda.BusquedaClientesPlace;
import ar.com.cristal.creditos.client.dto.UsuarioLogueadoDTO;
import ar.com.cristal.creditos.client.event.SelectedItemEvent;
import ar.com.cristal.creditos.client.handler.SelectedItemEventHandler;
import ar.com.cristal.creditos.client.localidad.LocalidadDTO;
import ar.com.cristal.creditos.client.localidad.ui.BusquedaLocalidadActivity;
import ar.com.cristal.creditos.client.localidad.ui.BusquedaLocalidadPlace;
import ar.com.cristal.creditos.client.tambo.dto.CategoriaDTO;
import ar.com.cristal.creditos.client.tambo.dto.EstadoProductivoEnumDTO;
import ar.com.cristal.creditos.client.tambo.dto.EstadoReproductivoEnumDTO;
import ar.com.cristal.creditos.client.tambo.dto.EstadoSanitarioEnumDTO;
import ar.com.cristal.creditos.client.tambo.dto.RazaDTO;
import ar.com.cristal.creditos.client.tambo.dto.VacaDTO;
import ar.com.cristal.creditos.client.tambo.rodeos.ui.BusquedaRodeosActivity;
import ar.com.cristal.creditos.client.tambo.rodeos.ui.BusquedaRodeosPlace;
import ar.com.cristal.creditos.client.tambo.toros.ui.BusquedaTorosActivity;
import ar.com.cristal.creditos.client.tambo.toros.ui.BusquedaTorosPlace;
import ar.com.cristal.creditos.client.ui.util.ConstantesView;
import ar.com.cristal.creditos.client.ui.util.CustomAbstractActivity;
import ar.com.cristal.creditos.client.ui.util.InicializarCombos;
import ar.com.cristal.creditos.client.ui.util.PopUpInfo;
import ar.com.cristal.creditos.client.widget.CustomSiNoDialogBox;
import ar.com.snoop.gwt.commons.client.widget.ListBox;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.place.shared.Place;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.DialogBox;

/**
 * Activities are started and stopped by an ActivityManager associated with a container Widget.
 */
public class AltaAnimalesActivity extends CustomAbstractActivity implements AltaAnimalesView.Presenter {

    private ClientFactory clientFactory;
    public PopUpInfo popup = null;
    private AltaAnimalesView view;
    private String token;
    private VacaDTO vacaActual = null;
    private Place place = null;
    private HandlerRegistration handlerRegistrationAdd;
    private final String ID_COMPONENTE_ACTIVITY = "ABM_ANIMALES";

    private long tiempo = new Date().getTime();

    public AltaAnimalesActivity(AltaAnimalesPlace place, ClientFactory cf) {
        clientFactory = cf;
        popup = clientFactory.getPopUp();
        view = clientFactory.getAltaAnimalesView();
        view.limpiarControles();
        view.setWidth(ConstantesView.maxPanelWidthPixels);
        token = place.getToken();
        this.place = place;
    }

    public void start(AcceptsOneWidget containerWidget, EventBus eventBus) {

        super.start(containerWidget, eventBus, ID_COMPONENTE_ACTIVITY);
        view.setPresenter(this);

        view.clienteDiv.setInnerText("ABM Animales");

        containerWidget.setWidget(view.asWidget());

    }

    @Override
    public String mayStop() {
        return null;
    }

    private void inicializarControles() {
        try {
            view.limpiarControles();
            view.habilitarBotonGuardar(true);
            inicializarCombos();

            if (token == null || token.isEmpty() || token.equalsIgnoreCase("null")) {
                vacaActual = new VacaDTO();
                vacaActual.setFechaAlta(new Date());

            } else {

                if (token != null && !token.isEmpty()) {
                    popup.mostrarMensaje("Espere", "Cargando datos del animal...");
                    clientFactory.getVacasService().obtenerVacaById(Long.valueOf(token),
                            new AsyncCallback<VacaDTO>() {

                                public void onSuccess(VacaDTO c) {
                                    vacaActual = c;
                                    cargarDatosVaca(c);
                                }

                                public void onFailure(Throwable e) {
                                    popup.mostrarMensaje("Error",
                                            "Error al intentar obtener el animal: " + e.getMessage());
                                }
                            });
                }

            }
        } catch (Exception e) {
            popup.mostrarMensaje("Error", "No se pudieron inicializar los controles");
        }

    }

    //   private void inicializarTipoDocumento(String tipoDocumento) {
    //      try {
    //         TipoDocumento[] tiposDocumentoArray = TipoDocumento.values();
    //         List<String> tiposDocumento = new ArrayList<String>();
    //         
    //         tiposDocumento.clear();
    //         for (int i = 0; i < tiposDocumentoArray.length ; i++){
    //               tiposDocumento.add(tiposDocumentoArray[i].name());
    //         }
    //
    //         view.inicializarComboTipoDoc(tiposDocumento);
    //         if (tipoDocumento != null){
    //            view.tipoDoc.selectByText(tipoDocumento);
    //         }
    //      } catch (Exception e) {
    //         popup.mostrarMensaje("Error", "No se pudo inicializar el combo tipo documento");
    //      }
    //      
    //   }
    //

    //   private void inicializarComboProvincia(final String nombreProvincia){
    //      try {
    //         final long tiempoCargaProvincia = new Date().getTime();
    //         localidadFactory.getLocalidadService().obtenerProvincias(new AsyncCallback<List<ProvinciaDTO>>() {
    //
    //            public void onFailure(Throwable caught) {
    //               popup.mostrarMensaje("Error", "No se pudo inicializar el combo provincia");
    //               
    //            }
    //
    //            public void onSuccess(List<ProvinciaDTO> provincias) {
    //               view.provincia.clear();
    //               for (ProvinciaDTO provinciaDTO : provincias) {
    //                  view.provincia.addItem(provinciaDTO);
    //               }
    //               if (provincias!= null) view.provincia.selectByText(nombreProvincia);
    //               
    //               System.out.println("inicializarComboProvincia Tiempo de carga de las provincias: " + (new Date().getTime() - tiempoCargaProvincia));
    //            }
    //
    //         });
    //      } catch (Exception e) {
    //         popup.mostrarMensaje("Error", "No se pudo inicializar el combo provincia");
    //      }
    //   }
    //   
    //

    private void inicializarCombos() {
        //Inicializo combos
        inicializarComboRaza(null);
        InicializarCombos.inicializarComboEstadoProductivo(view.cmbEstadoProd, null);
        InicializarCombos.inicializarComboEstadoReproductivo(view.cmbEstadoReprod, null);
        InicializarCombos.inicializarComboEstadoSanitario(view.cmbEstadoSanitario, null);
        InicializarCombos.inicializarComboRodeos(null, view.cmbRodeo);
        InicializarCombos.inicializarComboProblemasTacto(view.cmbResultadoUltTacto, null);
        InicializarCombos.inicializarComboToros(null, view.cmbPadre);
    }

    private void cargarDatosVaca(VacaDTO c) {

        try {
            view.clienteDiv.setInnerText(c.getRp());
            //Campos de texto
            view.rp.setText(c.getRp());
            view.rc.setText(c.getRc());
            view.rpMadre.setText(c.getRpMadre());
            view.rcMadre.setText(c.getRcMadre());
            view.lactancia.setText(String.valueOf(c.getLactancia()));
            view.grasa.setText(String.valueOf(c.getGrasa()));
            view.proteina.setText(String.valueOf(c.getProteina()));
            view.solTot.setText(String.valueOf(c.getSolidosTotales()));
            view.celSom.setText(String.valueOf(c.getSomaticas()));
            view.prodVitalicia.setText(String.valueOf(c.getProduccionVitalicia()));
            view.ltsPromedio.setText(String.valueOf(c.getLitrosPromedio()));
            view.observaciones.setText(c.getObservaciones());

            //Combos 
            view.cmbCategoria.selectByText(c.getCategoria() == null ? "" : c.getCategoria());
            view.cmbCategMadre.selectByText(c.getCategoriaMadre() == null ? "" : c.getCategoriaMadre());
            view.cmbEstadoProd.selectByText(c.getEstadoProductivo() == null ? "" : c.getEstadoProductivo().name());
            view.cmbEstadoReprod
                    .selectByText(c.getEstadoReproductivo() == null ? "" : c.getEstadoReproductivo().name());
            view.cmbEstadoSanitario
                    .selectByText(c.getEstadoSanitario() == null ? "" : c.getEstadoSanitario().name());
            view.cmbPadre.selectByValue(c.getPadre_id() == null ? "" : c.getPadre_id().toString());
            view.cmbRaza.selectByValue(c.getRaza_id() == null ? "" : c.getRaza_id().toString());
            view.cmbRodeo.selectByValue(c.getRodeo_id() == null ? "" : c.getRodeo_id().toString());
            view.cmbResultadoUltTacto
                    .selectByValue(c.getResultadoTacto_id() == null ? "" : c.getResultadoTacto_id().toString());

            //DatePicker
            view.fechaNacimientoDatePicker.setSelectedDate(c.getFechaNacimiento());

            //Checkboxes
            view.paraVender.setValue(c.getParaVender() == null ? false : c.getParaVender());

        } catch (Exception e) {
            popup.mostrarMensaje("Error", "No se pudo cargar los datos del animal.");
        }
    }

    /**
     * El goTo place es cambiado para dar el comportamiento deseado por la pantalla:
     * Primero se ubica la operacin que se esta tratando de hacer para luego verificar si el cliente y/o el credito
     * cumplen con las precondiciones. Luego se redirige en caso positivo o se muestra un mensaje de error en caso contrario.
     * 
     * @author lucas.napoli
     * @see ClienteView.Presenter#goTo(Place)
     */
    public void goTo(final Place place) {

        clientFactory.getPlaceController().goTo(place);
    }

    public void onAplicar(final Place place) {

        boolean datosValidos = true;

        List<String> errores = new ArrayList<String>();

        ClickHandler siHandler = new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                CustomSiNoDialogBox.ocultar();
                clientFactory.getVacasService().guardarVacaRPC(vacaActual, new AsyncCallback<VacaDTO>() {

                    public void onFailure(Throwable e) {
                        popup.mostrarMensaje("Error", e.getMessage());

                    }

                    public void onSuccess(VacaDTO vaca) {
                        vacaActual = vaca;
                        popup.mostrarMensaje("Los datos han sido guardados con xito.");
                        view.limpiarControles();

                    }
                });

            }

        };

        ClickHandler noHandler = new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                CustomSiNoDialogBox.ocultar();

            }
        };

        datosValidos = validarDatos(errores);
        if (datosValidos) {
            generarDto();
            CustomSiNoDialogBox.dialogBox("Atencin!", "Guardar los cambios?");
            CustomSiNoDialogBox.inicializarTamBotones();
            CustomSiNoDialogBox.setHandlers(siHandler, noHandler);

        } else {
            popup.mostrarMensaje("Error", errores);
        }
    }

    private void generarDto() {
        vacaActual.setCategoria(view.cmbCategoria.getSelectedItemText());
        vacaActual.setCategoriaMadre(view.cmbCategMadre.getSelectedItemText());
        vacaActual.setEliminado(false);
        vacaActual.setEstadoProductivo(EstadoProductivoEnumDTO.valueOf(view.cmbEstadoProd.getSelectedItemText()));
        vacaActual.setEstadoReproductivo(
                EstadoReproductivoEnumDTO.valueOf(view.cmbEstadoReprod.getSelectedItemText()));
        vacaActual
                .setEstadoSanitario(EstadoSanitarioEnumDTO.valueOf(view.cmbEstadoSanitario.getSelectedItemText()));
        vacaActual.setFechaNacimiento(view.fechaNacimientoDatePicker.getSelectedDate());
        vacaActual.setGrasa(view.grasa.getText().length() == 0 ? 0D : Double.valueOf(view.grasa.getText()));
        vacaActual.setLactancia(
                view.lactancia.getText().length() == 0 ? 0 : Integer.valueOf(view.lactancia.getText()));
        vacaActual.setLitrosPromedio(
                view.ltsPromedio.getText().length() == 0 ? 0D : Double.valueOf(view.ltsPromedio.getText()));
        vacaActual.setObservaciones(view.observaciones.getText());
        vacaActual.setPadre_id(
                (view.cmbPadre.getSelectedItemId() == null || view.cmbPadre.getSelectedItemId().equals("")) ? 0L
                        : Long.valueOf(view.cmbPadre.getSelectedItemId()));
        vacaActual.setParaVender(view.paraVender.getValue());
        vacaActual.setProduccionVitalicia(
                view.prodVitalicia.getText().length() == 0 ? 0D : Double.valueOf(view.prodVitalicia.getText()));
        vacaActual
                .setProteina(view.proteina.getText().length() == 0 ? 0D : Double.valueOf(view.proteina.getText()));
        vacaActual.setRaza_id(
                (view.cmbRaza.getSelectedItemId() == null || view.cmbRaza.getSelectedItemId().equals("")) ? 0L
                        : Long.valueOf(view.cmbRaza.getSelectedItemId()));
        vacaActual.setRc(view.rc.getText());
        vacaActual.setRcMadre(view.rcMadre.getText());
        vacaActual.setResultadoTacto_id((view.cmbResultadoUltTacto.getSelectedItemId() == null
                || view.cmbResultadoUltTacto.getSelectedItemId().equals("")) ? 0L
                        : Long.valueOf(view.cmbResultadoUltTacto.getSelectedItemId()));
        vacaActual.setRodeo_id(
                (view.cmbRodeo.getSelectedItemId() == null || view.cmbRodeo.getSelectedItemId().equals("")) ? 0L
                        : Long.valueOf(view.cmbRodeo.getSelectedItemId()));
        vacaActual.setRp(view.rp.getText());
        vacaActual.setRpMadre(view.rpMadre.getText());
        vacaActual.setSolidosTotales(
                view.solTot.getText().length() == 0 ? 0D : Double.valueOf(view.solTot.getText()));
        vacaActual.setSomaticas(view.celSom.getText().length() == 0 ? 0D : Double.valueOf(view.celSom.getText()));

        // FALTA AGREGAR LA IMAGEN
        //vacaActual.setImagen(imagen)

    }

    private boolean validarDatos(List<String> mensajeError) {
        boolean result = true;
        try {

            mensajeError.clear();

            // RP
            if (view.rp.getText().length() == 0) {
                result = false;
                mensajeError.add("El RP es un campo obligatorio.");

            }

            // valida fecha Nacimiento
            Date now = new Date();
            Date selectedDate = view.fechaNacimientoDatePicker.getSelectedDate();

            if (selectedDate != null) {
                long time = now.getTime() - selectedDate.getTime();

                if (time < 0) {
                    result = false;
                    mensajeError.add("La fecha de nacimiento no puede ser posterior a la fecha actual.");
                }
            } else {
                result = false;
                mensajeError.add("La fecha de nacimiento es un campo obligatorio.");
            }

            //valida seleccin de rodeo
            if (view.cmbRodeo.getSelectedItemText().equals("")) {
                result = false;
                mensajeError.add("El rodeo es un campo obligatorio.");
            }

            //valida estado productivo
            if (view.cmbEstadoProd.getSelectedItemText().equals("")) {
                result = false;
                mensajeError.add("El estado productivo es un campo obligatorio.");
            }

            //valida estado reproductivo
            if (view.cmbEstadoReprod.getSelectedItemText().equals("")) {
                result = false;
                mensajeError.add("El estado reproductivo es un campo obligatorio.");
            }

            //valida estado sanitario
            if (view.cmbEstadoSanitario.getSelectedItemText().equals("")) {
                result = false;
                mensajeError.add("El estado sanitario es un campo obligatorio.");
            }

            //Valida Lactancia Actual
            if (view.lactancia.getText().length() == 0) {
                result = false;
                mensajeError.add("El nro. de lactancia es un campo obligatorio.");

            }

        } catch (Exception e) {
            mensajeError.add("Error: " + e.getMessage());
            result = false;
        }

        return result;
    }

    public void onCerrar() {
        //TODO: Ver a donde dirigir cdo cierra
        vacaActual = null;
        Place place = new BusquedaClientesPlace("");
        clientFactory.getPlaceController().goTo(place);

    }

    public VacaDTO getVacaActual() {
        return vacaActual;

    }

    /*
     * true si esta modificando
     */
    private boolean estaModificando() {
        return vacaActual.getId() != null;
    }

    /*
     * true si es supervisor
     */
    private boolean esSupervisor() {
        UsuarioLogueadoDTO u = getClientContext().getUsuarioLogueadoDTO();
        return u.isSupervisor();
    }

    @Override
    public void inicializarActivity() {
        popup.mostrarMensaje("Espere", "Inicializando pantalla...");
        System.out.println("Tiempo de validacin de permisos y usuario [ms]: " + (new Date().getTime() - tiempo));
        tiempo = new Date().getTime();
        inicializarControles();
        //view.anchorDatosPersonales.getElement().getStyle().setBackgroundColor("#006AA4");
        popup.ocultar();
    }

    @Override
    public void cargarCategoriasXRaza(String razaId) {
        if (razaId != null) {
            popup.mostrarMensaje("Espere...", "Cargando categorias...");
            clientFactory.getVacasService().obtenerCategoriasRPC(Long.valueOf(razaId),
                    new AsyncCallback<List<CategoriaDTO>>() {

                        @Override
                        public void onFailure(Throwable caught) {
                            popup.mostrarMensaje("Atencion", "Ha ocurrido un error al cargar las categorias");

                        }

                        @Override
                        public void onSuccess(List<CategoriaDTO> result) {
                            inicializarComboCategorias(view.cmbCategoria, result);
                            popup.ocultar();
                        }

                    });
        }

    }

    private void inicializarComboRaza(final String raza) {
        try {
            final long tiempoCarga = new Date().getTime();
            clientFactory.getVacasService().obtenerRazasRPC(new AsyncCallback<List<RazaDTO>>() {

                public void onFailure(Throwable caught) {
                    popup.mostrarMensaje("Error", "No se pudo inicializar el combo Razas");

                }

                public void onSuccess(List<RazaDTO> razas) {
                    view.cmbRaza.clear();
                    view.cmbRaza.addItem("", "");
                    for (RazaDTO razaDTO : razas) {
                        view.cmbRaza.addItem(razaDTO);
                    }
                    if (raza != null)
                        view.cmbRaza.selectByText(raza);

                    System.out.println(
                            "inicializarComboXRaza Tiempo de carga: " + (new Date().getTime() - tiempoCarga));
                }

            });
        } catch (Exception e) {
            popup.mostrarMensaje("Error", "No se pudo inicializar el combo de razas.");
        }
    }

    private void inicializarComboCategorias(ListBox cmbCategoria, List<CategoriaDTO> result) {
        cmbCategoria.clear();

        for (CategoriaDTO c : result) {
            cmbCategoria.addItem(c);
        }
    }

    /**
     * Abre popUp para seleccionar un Toro como padre.
     */
    @Override
    public void buscarPadre() {
        handlerRegistrationAdd = clientFactory.getEventBus().addHandler(SelectedItemEvent.TYPE,
                new SelectedItemEventHandler() {
                    @Override
                    public void onSelectItem(SelectedItemEvent event) {
                        handlerRegistrationAdd.removeHandler();
                        if (event.getListBoxItem() != null)
                            InicializarCombos.inicializarComboToros(event.getListBoxItem().getItemText(),
                                    view.cmbPadre);
                    }
                });
        BusquedaTorosActivity toroActivity = new BusquedaTorosActivity(new BusquedaTorosPlace(""), clientFactory);
        toroActivity.startInPopUp();

    }

    /**
     * Abre pop Up para buscar Rodeo
     */
    @Override
    public void buscarRodeo() {
        handlerRegistrationAdd = clientFactory.getEventBus().addHandler(SelectedItemEvent.TYPE,
                new SelectedItemEventHandler() {
                    @Override
                    public void onSelectItem(SelectedItemEvent event) {
                        handlerRegistrationAdd.removeHandler();
                        if (event.getListBoxItem() != null)
                            InicializarCombos.inicializarComboRodeos(event.getListBoxItem().getItemText(),
                                    view.cmbRodeo);
                    }
                });
        BusquedaRodeosActivity rodeosActivity = new BusquedaRodeosActivity(new BusquedaRodeosPlace(""),
                clientFactory);
        rodeosActivity.startInPopUp();

    }

    @Override
    public void verificarSiExisteRP() {
        if (vacaActual.getId() == null && view.rp.getText() != null) {
            popup.mostrarMensaje("Espere", "Verificando si existe RP...");
            clientFactory.getVacasService().existeVacaRPC(view.rp.getValue(), new AsyncCallback<Boolean>() {

                @Override
                public void onFailure(Throwable arg) {
                    popup.mostrarMensaje("Error: " + arg);
                }

                @Override
                public void onSuccess(Boolean result) {
                    popup.ocultar();
                    if (result)
                        ofrecerEdicion();

                }

            });

        }

    }

    private void ofrecerEdicion() {
        final DialogBox dialogbox = CustomSiNoDialogBox.dialogBox("Atencin",
                "El animal ya existe. Desea editarlo?");

        ClickHandler siHandler = new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                dialogbox.hide();

                popup.mostrarMensaje("Espere", "Cargando informacion del animal...");
                clientFactory.getVacasService().obtenerVacaDTOPorRP(view.rp.getText(),
                        new AsyncCallback<VacaDTO>() {

                            @Override
                            public void onFailure(Throwable caught) {
                                popup.mostrarMensaje("Atencion",
                                        "Ha ocurrido un error. Espere e intente nuevamente.");

                            }

                            @Override
                            public void onSuccess(VacaDTO result) {
                                vacaActual = result;
                                cargarDatosVaca(result);
                                popup.ocultar();
                            }

                        });
            }
        };
        ClickHandler noHandler = new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                dialogbox.hide();

            }
        };

        CustomSiNoDialogBox.setHandlers(siHandler, noHandler);
    }

}