cimav.client.view.nomina.NominaMovimientosUI.java Source code

Java tutorial

Introduction

Here is the source code for cimav.client.view.nomina.NominaMovimientosUI.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 cimav.client.view.nomina;

import cimav.client.data.domain.ETipoConcepto;
import cimav.client.data.domain.Movimiento;
import cimav.client.view.common.ICustomDataGridResource;
import cimav.client.view.common.Utils;
import com.google.gwt.cell.client.SafeHtmlCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiConstructor;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.DataGrid;
import com.google.gwt.user.cellview.client.SafeHtmlHeader;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.ListDataProvider;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 *
 * @author juan.calderon
 */
public class NominaMovimientosUI extends Composite {

    private static NominaMovimientosUIUiBinder uiBinder = GWT.create(NominaMovimientosUIUiBinder.class);

    interface NominaMovimientosUIUiBinder extends UiBinder<Widget, NominaMovimientosUI> {
    }

    @UiField(provided = true)
    DataGrid<Movimiento> dataGrid;

    private ListDataProvider<Movimiento> provider;

    private final ETipoConcepto tipoConcepto;

    @UiConstructor
    public NominaMovimientosUI(String idTipoConcepto) {

        this.tipoConcepto = ETipoConcepto.get(idTipoConcepto);

        this.buildGrid(); // antes del initWidget

        initWidget(uiBinder.createAndBindUi(this));

    }

    private void buildGrid() {

        List<Movimiento> nominaQuincenalList = new ArrayList<>();
        provider = new ListDataProvider<>(nominaQuincenalList);

        ICustomDataGridResource dataGridResource = GWT.create(ICustomDataGridResource.class);
        dataGridResource.dataGridStyle().ensureInjected();

        dataGrid = new DataGrid<>(60, dataGridResource);

        dataGrid.setAutoHeaderRefreshDisabled(true);

        dataGrid.setEmptyTableWidget(new Label("Sin movimientos de momento"));

        dataGrid.setPageSize(20);
        dataGrid.setMinimumTableWidth(400, Style.Unit.PX);

        initTableColumns();

        provider.addDataDisplay(dataGrid);

    }

    private void initTableColumns() {

        // Concepto
        Column<Movimiento, SafeHtml> conceptoCol = new Column<Movimiento, SafeHtml>(new SafeHtmlCell()) {
            @Override
            public SafeHtml getValue(Movimiento object) {
                SafeHtmlBuilder a = new SafeHtmlBuilder();
                if (object.getConcepto().getSuma()) {
                    a.appendHtmlConstant("<span>" + object.getConcepto().getName() + "</span>");
                } else {
                    a.appendHtmlConstant("<span style='color: grey; font-style: italic;'>"
                            + object.getConcepto().getName() + "</span>");
                }
                return a.toSafeHtml();
            }
        };
        dataGrid.addColumn(conceptoCol, "Concepto");
        dataGrid.setColumnWidth(conceptoCol, 80, Style.Unit.PCT);

        // Cantidad
        Column<Movimiento, SafeHtml> cantidadCol = new Column<Movimiento, SafeHtml>(new SafeHtmlCell()) {
            @Override
            public SafeHtml getValue(Movimiento object) {
                String result = Utils.formatCantidad(object.getCantidad());
                SafeHtmlBuilder a = new SafeHtmlBuilder();
                if (object.getConcepto().getSuma()) {
                    a.appendHtmlConstant("<span style='padding-right: 5px;'>" + result + "</span>");
                } else {
                    a.appendHtmlConstant("<span style='padding-right: 5px; color: grey; font-style: italic;'>"
                            + result + "</span>");
                }
                return a.toSafeHtml();
            }
        };
        cantidadCol.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
        SafeHtmlHeader headerCantidad = new SafeHtmlHeader(new SafeHtml() {
            @Override
            public String asString() {
                return "<p style='text-align:center; margin-bottom: 0px;'>Cantidad</p>";
            }
        });
        if (ETipoConcepto.PERCEPCION.equals(this.tipoConcepto)
                || ETipoConcepto.DEDUCCION.equals(this.tipoConcepto)) {
            SafeHtmlHeader footerCantidad = new SafeHtmlHeader(new SafeHtml() {
                @Override
                public String asString() {
                    String result = "0.00";
                    List<Movimiento> items = dataGrid.getVisibleItems();
                    if (!items.isEmpty()) {
                        // create MathContext object with 2 precision
                        BigDecimal totalPercepciones = BigDecimal.ZERO;
                        for (Movimiento nomQuin : items) {
                            if (nomQuin.getConcepto().getSuma()) { // si el concepto suma (ej. Despensa no suma)
                                totalPercepciones = totalPercepciones.add(nomQuin.getCantidad());
                            }
                        }
                        result = Utils.formatCurrency(totalPercepciones);
                    }
                    return "<p style=\"text-align:right;\">" + result.trim() + "</p>";
                }
            });
            dataGrid.addColumn(cantidadCol, headerCantidad, footerCantidad);
        } else {
            dataGrid.addColumn(cantidadCol, headerCantidad);
        }
        dataGrid.setColumnWidth(cantidadCol, 20, Style.Unit.PCT);
    }

    public void setList(List<Movimiento> percepciones) {

        Collections.sort(percepciones, new Comparator<Movimiento>() {
            @Override
            public int compare(Movimiento obj1, Movimiento obj2) {
                return obj1.getConcepto().getCode().compareTo(obj2.getConcepto().getCode());
            }
        });

        provider.setList(percepciones);
    }

    //    // <editor-fold defaultstate="collapsed" desc="interface ActionListener"> 
    //    public interface ActionListener extends java.util.EventListener {
    //        void onActionEditor(MethodEvent restEvent);
    //    }
    //    private final ArrayList listeners = new ArrayList();
    //    public void addActionListener(ActionListener listener) {
    //        listeners.add(listener);
    //    }
    //    public void removeActionListener(ActionListener listener) {
    //        listeners.remove(listener);
    //    }
    //    public void onAction(MethodEvent restEvent) {
    //        for(Iterator it = listeners.iterator(); it.hasNext();) {
    //            ActionListener listener = (ActionListener) it.next();
    //            listener.onActionEditor(restEvent);
    //        }
    //    }
    //    // </editor-fold>
}