Package honeycrm.client.mvp.presenters

Source Code of honeycrm.client.mvp.presenters.ServiceTablePresenter$Display

package honeycrm.client.mvp.presenters;

import honeycrm.client.dto.Dto;
import honeycrm.client.dto.ModuleDto;
import honeycrm.client.misc.NumberParser;
import honeycrm.client.misc.View;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.TakesValue;
import com.google.gwt.view.client.ListDataProvider;

public class ServiceTablePresenter implements TakesValue<List<Dto>> {
  public interface Display extends TakesValue<ServiceTablePresenter> {
    ListDataProvider<Dto> getProvider();
    void initColumns(ModuleDto moduleDto, View viewMode);
    void updateOverallSum(double sum);
    HasClickHandlers getAdd();
    void hideAddButton();
    void add(Dto newService);
  }

  private final View viewMode;
  private final Display view;
  private final ModuleDto relatedModule;

  public ServiceTablePresenter(final Display view, final View viewMode, final String module, final String fieldName) {
    this.view = view;
    this.relatedModule = ModuleDto.getRelatedDto(module, fieldName);
    this.viewMode = viewMode;
    bind();
  }

  private void bind() {
    view.setValue(this);
    view.initColumns(relatedModule, viewMode);

    if (View.isReadOnly(viewMode)) {
      view.hideAddButton();
    } else {
      view.getAdd().addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
          add();
        }
      });
    }
  }

  @Override
  public void setValue(List<Dto> value) {
    if (null == value) {
      value = new ArrayList<Dto>();
    }
   
    view.getProvider().setList(value);
    // make sure the sum is displayed properly intially
    view.updateOverallSum(getSum(view.getProvider().getList()));
  }

  @Override
  public List<Dto> getValue() {
    final ArrayList<Dto> l = new ArrayList<Dto>();
    for (final Dto d : view.getProvider().getList()) {
      l.add(d);
    }
    return l;
  }

  public void onItemUpdated(int index, Dto object) {
    object.set("sum", getSumForSingleDto(object));
    view.getProvider().refresh();
    view.updateOverallSum(getSum(view.getProvider().getList()));
  }

  private double getSum(final Collection<Dto> data) {
    double currentSum = 0.0;
    for (Dto service : data) {
      currentSum += getSumForSingleDto(service);
    }
    return currentSum;
  }

  public double getSumForSingleDto(final Dto service) {
    final double price = NumberParser.convertToDouble(service.get("price"));
    final double discountValue = NumberParser.convertToDouble(service.get("discount"));
    final double discount = ("%".equals(service.get("kindOfDiscount"))) ? (discountValue / 100 * price) : (discountValue);
    final double qty = NumberParser.convertToDouble(service.get("quantity"));

    return (price - discount) * qty;
  }

  public void add() {
    final Dto newService = relatedModule.createDto();
    newService.set("quantity", 1);
    newService.set("discount", 0);
    newService.set("productCode", "");
    newService.set("sum", getSumForSingleDto(newService));
    newService.set("price", 0);

    view.add(newService);
    view.updateOverallSum(getSum(view.getProvider().getList()));
  }
}
TOP

Related Classes of honeycrm.client.mvp.presenters.ServiceTablePresenter$Display

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.