Package ar.com.AmberSoft.iEvenTask.client.menu

Source Code of ar.com.AmberSoft.iEvenTask.client.menu.MainTabTareas

package ar.com.AmberSoft.iEvenTask.client.menu;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import ar.com.AmberSoft.iEvenTask.client.CommentWindows;
import ar.com.AmberSoft.iEvenTask.client.Context;
import ar.com.AmberSoft.iEvenTask.client.DialogFactory;
import ar.com.AmberSoft.iEvenTask.client.DialogInfo;
import ar.com.AmberSoft.iEvenTask.client.IEvenTask;
import ar.com.AmberSoft.iEvenTask.client.PermissionsConst;
import ar.com.AmberSoft.iEvenTask.client.Seleccionable;
import ar.com.AmberSoft.iEvenTask.client.TaskWindow;
import ar.com.AmberSoft.iEvenTask.client.resources.Resources;
import ar.com.AmberSoft.iEvenTask.client.utils.Grid;
import ar.com.AmberSoft.iEvenTask.shared.DispatcherUtil;
import ar.com.AmberSoft.iEvenTask.shared.ParamsConst;
import ar.com.AmberSoft.iEvenTask.shared.ServiceNameConst;

import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.data.BaseModel;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.TabItem;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.HtmlEditor;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.filters.DateFilter;
import com.extjs.gxt.ui.client.widget.grid.filters.StringFilter;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class MainTabTareas extends TabItem implements Seleccionable {

  public static final Integer GRID_WIDTH = IEvenTask.APP_WINDOW_WIDTH - (IEvenTask.APP_WINDOW_WIDTH/4);
  public static final Integer GRID_HEIGTH = IEvenTask.MAIN_TAB_PANEL_HEIGTH;
  public static final Integer COMMENT_WIDTH = IEvenTask.APP_WINDOW_WIDTH - GRID_WIDTH;
  public static final Integer COMMENT_HEIGTH = IEvenTask.MAIN_TAB_PANEL_HEIGTH + 10;
  public static final Integer COMMENT_BOX_WIDTH = COMMENT_WIDTH - 5; //estos 10 son para que se vea la barra de scroll
  public static final Integer COMMENT_BOX_HEIGTH = 390;
 
  public static final String COMMENT_FORMAT_START = "<STRONG><EM><FONT size=2>";
  public static final String COMMENT_FORMAT_END = "</FONT></EM></STRONG>";
 
  public static Integer DELAY = 1000000000;
 
  @SuppressWarnings("unchecked")
  public final Grid grid = new Grid(this, ServiceNameConst.LIST_TASK_WITH_VISIBLE_FILTER, getGridConfig(), 18);
 
 
  public MainTabTareas(){
    super("Tareas");

    grid.addFilter(new StringFilter(ParamsConst.NOMBRE_TAREA));
    grid.addFilter(new DateFilter(ParamsConst.FECHA_COMIENZO));
    grid.addFilter(new DateFilter(ParamsConst.FECHA_FIN));
    //FIXME: revisar como filtrar correctamente los numero
    //grid.addFilter(new NumericFilter(ParamsConst.CUMPLIMIENTO));
    grid.addFilter(new StringFilter(ParamsConst.ESTADO));
    grid.addFilter(new StringFilter(ParamsConst.DESCRIPCION));
    grid.addFilter(new StringFilter(ParamsConst.ASIGNADO));
   
    Context.getInstance().setTaskGrid(grid);
   
    // TODO acomodar posicion
    setSize(IEvenTask.APP_WINDOW_WIDTH.toString(), IEvenTask.DEFAULT_MENU_HEIGTH.toString());
   
    //componentes del panel de tareas
    HorizontalPanel horizontalPanel = new HorizontalPanel();
    VerticalPanel verticalPanel_grilla = new VerticalPanel();
    VerticalPanel verticalPanel_comentarios = new VerticalPanel();
    //Context.getInstance().getUsuario()
   
    //seteo las propiedades al componente Grid
    grid.setSize(GRID_WIDTH, GRID_HEIGTH);
    grid.defaultContextMenuTask();
    grid.defaultActionOnSelectItemTask();
    grid.setBorders(true);
    verticalPanel_grilla.add(grid.getToolBar());
    verticalPanel_grilla.add(grid);
   
   
    horizontalPanel.add(verticalPanel_grilla);
    verticalPanel_comentarios.add(addComentarios());
   
    horizontalPanel.add(verticalPanel_comentarios);
    this.add(horizontalPanel);
   
    autoRefresh();
  }

  public void autoRefresh() {
    Timer timer = new Timer() {
     
      @Override
      public void run() {
        Context.getInstance().getTaskGrid().getStore().getLoader().load();
      }
    };
    timer.scheduleRepeating(DELAY);
  }
 
  private ContentPanel addComentarios(){
   
    final ContentPanel commentPanel = new ContentPanel();
    commentPanel.setHeading("Comentarios");
    commentPanel.setSize(COMMENT_WIDTH.toString(), COMMENT_HEIGTH.toString());

    if ((Context.getInstance().isAvaiable(PermissionsConst.COMENTARIOS))
      || (Context.getInstance().isAvaiable(PermissionsConst.COMENTARIOS_NO_ASIGNADOS))){
      Button btnAddComment = new Button("Comentario");
      commentPanel.add(btnAddComment);
     
      btnAddComment.setIcon(Resources.ICONS.addComment());
      btnAddComment.addSelectionListener(new SelectionListener<ButtonEvent>() {
        public void componentSelected(ButtonEvent be) {
          List seleccionados = grid.getSelectionModel().getSelectedItems();   
          if (seleccionados.size()==1){
            BaseModel baseModel = (BaseModel) seleccionados.iterator().next();
            Map actual = grid.search(ParamsConst.ID, baseModel.get(ParamsConst.ID));
           
            if ((Context.getInstance().getUsuario().get(ParamsConst.ID).equals(actual.get(ParamsConst.ID_USUARIO))) ||
                (!(Context.getInstance().getUsuario().get(ParamsConst.ID).equals(actual.get(ParamsConst.ID_USUARIO)))
                    && Context.getInstance().isAvaiable(PermissionsConst.COMENTARIOS_NO_ASIGNADOS))){
              //Context.getInstance().windowShow(new CommentWindows((Integer)actual.get(ParamsConst.ID), (String)actual.get(ParamsConst.NOMBRE_TAREA)));
              CommentWindows windows = new CommentWindows((Integer)actual.get(ParamsConst.ID), (String)actual.get(ParamsConst.NOMBRE_TAREA));
              windows.show();
            } else {
              DialogFactory.info("No tiene permisos para agregar comentarios en tareas no asignadas");
            }
          } else {
            if (seleccionados.size()==0){
              DialogInfo dialogInfo = new DialogInfo(
                  "Seleccione una tarea para agregar comentarios.");
            } else {
              DialogInfo dialogInfo = new DialogInfo(
                "Seleccione solo una tarea para agregar comentarios.");
            }
          }
        }
      });
    }
   
    /*Html html = new Html();
    commentPanel.add(html);
    html.setWidth(COMMENT_BOX_WIDTH);
    html.setHeight(COMMENT_BOX_HEIGTH);
    html.setBorders(Boolean.TRUE);
    Context.getInstance().setHtml(html);*/

    final HtmlEditor htmlEditor = new HtmlEditor();
    commentPanel.add(htmlEditor);
    htmlEditor.setWidth(COMMENT_BOX_WIDTH);
    htmlEditor.setHeight(COMMENT_BOX_HEIGTH);
    htmlEditor.setShowToolbar(Boolean.FALSE);
    htmlEditor.setReadOnly(Boolean.TRUE);
    Context.getInstance().setHtmlEditor(htmlEditor);
       
    return commentPanel;
  }
 
  @SuppressWarnings("rawtypes")
  private List getGridConfig() {
    List<ColumnConfig> configs = new ArrayList<ColumnConfig>();
    DateTimeFormat dtf = DateTimeFormat.getFormat("dd-MM-yyyy");
   
    // Se agrega esta columna para mantener el identificador de las tareas
    ColumnConfig clmncnfgId = new ColumnConfig(ParamsConst.ID, ParamsConst.ID, 1);
    clmncnfgId.setHidden(Boolean.TRUE);
    configs.add(clmncnfgId);

    ColumnConfig clmncnfgNombreTarea = new ColumnConfig(ParamsConst.NOMBRE_TAREA, "Nombre", 100);
    configs.add(clmncnfgNombreTarea);
   
    ColumnConfig clmncnfgFechaComienzo = new ColumnConfig(ParamsConst.FECHA_COMIENZO, "Fecha de Comienzo", 100);
    clmncnfgFechaComienzo.setDateTimeFormat(dtf);
    configs.add(clmncnfgFechaComienzo);
   
    ColumnConfig clmncnfgFechaFin = new ColumnConfig(ParamsConst.FECHA_FIN, "Fecha de Fin", 100);
    clmncnfgFechaFin.setDateTimeFormat(dtf);
    configs.add(clmncnfgFechaFin);

    ColumnConfig clmncnfgCumplimiento = new ColumnConfig(ParamsConst.CUMPLIMIENTO, "Cumplimiento (%)", 100);
    configs.add(clmncnfgCumplimiento);

    ColumnConfig clmncnfgEstado = new ColumnConfig(ParamsConst.ESTADO, "Estado", 130);
    configs.add(clmncnfgEstado);
   
    ColumnConfig clmncnfgResponsable = new ColumnConfig(ParamsConst.ID_USUARIO, "Responsable", 140);
    configs.add(clmncnfgResponsable);
    clmncnfgResponsable.setHidden(Boolean.TRUE);

    ColumnConfig clmncnfgAsignado = new ColumnConfig(ParamsConst.ASIGNADO, "Responsable", 100);
    configs.add(clmncnfgAsignado);

    ColumnConfig clmncnfgDescripcion = new ColumnConfig(ParamsConst.DESCRIPCION, "Descripcion", 325);
    configs.add(clmncnfgDescripcion);

    return configs;
  }

  @SuppressWarnings({"rawtypes", "unchecked"})
  @Override
  public void onDelete() {
    Collection ids = new ArrayList();
    List seleccionados = grid.getSelectionModel().getSelectedItems();
    Boolean validNoAsignada = Boolean.TRUE;
    Iterator it = seleccionados.iterator();
    while (it.hasNext()) {
      BaseModel model = (BaseModel) it.next();
      ids.add(model.get(ParamsConst.ID));
      if (validNoAsignada){
        validNoAsignada = ((Context.getInstance().getUsuario().get(ParamsConst.ID).equals(model.get(ParamsConst.ID_USUARIO))) ||
            (!(Context.getInstance().getUsuario().get(ParamsConst.ID).equals(model.get(ParamsConst.ID_USUARIO)))
                && Context.getInstance().isAvaiable(PermissionsConst.TAREAS_NO_ASIGNADAS)));
      } else {
        break;
      }
    }
    if (validNoAsignada){
      Map params = new HashMap<String, String>();
      params.put(ParamsConst.IDS, ids);
      params.put(ServiceNameConst.SERVICIO, ServiceNameConst.DELETE_TASK);
      DispatcherUtil.getDispatcher().execute(params,
          new AsyncCallback() {
 
            @Override
            public void onFailure(Throwable caught) {
              DialogFactory.error("No se han podido eliminar las tareas. Aguarde un momento y vuelva a intentarlo.");
            }
 
            @Override
            public void onSuccess(Object result) {
              DialogFactory.info("Se eliminaron las tareas con exito.");
              grid.getStore().getLoader().load();
            }
 
          });
    } else {
      DialogFactory.info("No tiene permisos para borrar tareas no asignadas.");
    }
  }
   
  @SuppressWarnings("rawtypes")
  /**
   * Se invoca cuando se realiza una accion de seleccion
   */
  public void onSelect(List selected){
    if (selected.size() == 1) {
      Iterator it = selected.iterator();
      if (it.hasNext()) {
        beforeUpdate((BaseModel) it.next());
      }
    } else {
      Context.getInstance().getHtmlEditor().setValue("");
    }
  }


  @SuppressWarnings({"rawtypes", "unchecked"})
  public void onModify() {
    List seleccionados = grid.getSelectionModel().getSelectedItems();
    Map<Object,Object> actual = null;
    if (seleccionados.size() == 1) {
      Iterator it = seleccionados.iterator();
      if (it.hasNext()) {
        BaseModel model = (BaseModel) it.next();
        actual = grid.search(ParamsConst.ID, model.get(ParamsConst.ID));
      }
    }
    if ((Context.getInstance().getUsuario().get(ParamsConst.ID).equals(actual.get(ParamsConst.ID_USUARIO))) ||
      (!(Context.getInstance().getUsuario().get(ParamsConst.ID).equals(actual.get(ParamsConst.ID_USUARIO)))
          && Context.getInstance().isAvaiable(PermissionsConst.TAREAS_NO_ASIGNADAS))){
     
      // Antes de abrir la ventana de modificacion, se verifica si no esta siendo modificado por otro usuario
      final Map<Object,Object> actualFinal = actual;
      Map params = new HashMap<String, String>();
      params.put(ParamsConst.ID, actual.get(ParamsConst.ID));
      params.put(ServiceNameConst.SERVICIO, ServiceNameConst.LOCK);
      DispatcherUtil.getDispatcher().execute(params,
          new AsyncCallback() {
 
            @Override
            public void onFailure(Throwable caught) {
              DialogFactory.error("No se ha podido bloquear la tarea a editar.");
            }
 
            @Override
            public void onSuccess(Object result) {
              Map user = (Map)((Map)result).get(ParamsConst.USER);
              if (user!=null){
                DialogFactory.info("La tarea se encuentra bloqueada por el usuario " + user.get(ParamsConst.NAME));
              } else {
                TaskWindow taskWindow = new TaskWindow(false);
                Context.getInstance().addDetailExecution("TaskWindow llamada a setear valores");
                taskWindow.setValuesToUpdate(actualFinal);
                taskWindow.show();
              }
            }
 
          });
     
     
    } else {
      DialogFactory.info("No tiene permisos para modificar tareas no asignadas.");
    }
  }
 

  public void beforeUpdate(BaseModel baseModel) {
   
    Map actual = grid.search(ParamsConst.ID, baseModel.get(ParamsConst.ID));
   
    viewComment((Collection) actual.get(ParamsConst.COMENTARIOS));

  }
 
  private void viewComment(Collection comentarios) {
    Context.getInstance().getHtmlEditor().setValue("");
    if (comentarios!=null){
      Iterator it = comentarios.iterator();
      while (it.hasNext()) {
        Map actual= (Map) it.next();
        Context.getInstance().addComment(
            (String) actual.get(ParamsConst.COMENTARIO),
            (Date) actual.get(ParamsConst.FECHA),
            (String) actual.get(ParamsConst.USUARIO_NOMBRE));
      }
    }
  }

  @Override
  public void onDividir() {
    DialogFactory.division("en:", this);
  }
}
TOP

Related Classes of ar.com.AmberSoft.iEvenTask.client.menu.MainTabTareas

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.