Package no.ugland.utransprod.gui.model

Source Code of no.ugland.utransprod.gui.model.ProductionApplyList

package no.ugland.utransprod.gui.model;

import java.util.List;

import javax.swing.ListModel;
import javax.swing.table.TableModel;

import no.ugland.utransprod.ProTransException;
import no.ugland.utransprod.gui.Login;
import no.ugland.utransprod.gui.WindowInterface;
import no.ugland.utransprod.model.Colli;
import no.ugland.utransprod.model.Order;
import no.ugland.utransprod.model.OrderLine;
import no.ugland.utransprod.model.PostShipment;
import no.ugland.utransprod.model.Produceable;
import no.ugland.utransprod.model.ProductionUnit;
import no.ugland.utransprod.service.ColliManager;
import no.ugland.utransprod.service.IApplyListManager;
import no.ugland.utransprod.service.ManagerRepository;
import no.ugland.utransprod.service.OrderLineManager;
import no.ugland.utransprod.service.OrderManager;
import no.ugland.utransprod.service.PostShipmentManager;
import no.ugland.utransprod.service.enums.LazyLoadEnum;
import no.ugland.utransprod.service.enums.LazyLoadOrderEnum;
import no.ugland.utransprod.service.enums.LazyLoadPostShipmentEnum;
import no.ugland.utransprod.util.ModelUtil;
import no.ugland.utransprod.util.UserUtil;
import no.ugland.utransprod.util.Util;

import org.hibernate.Hibernate;
import org.jdesktop.swingx.JXTable;

import com.jgoodies.binding.list.SelectionInList;

/**
* H�ndterer produksjon
*
* @author atle.brekka
*/

public class ProductionApplyList extends AbstractApplyList<Produceable> {
  private String colliName;

  private String windowName;

  private Integer[] invisibleCells;
  protected ManagerRepository managerRepository;

  /**
   * @param aUserType
   * @param manager
   * @param aColliName
   * @param aWindowName
   * @param somInvisibleCells
   */
  public ProductionApplyList(final Login login,
      final IApplyListManager<Produceable> manager,
      final String aColliName, final String aWindowName,
      final Integer[] somInvisibleCells,
      final ManagerRepository aManagerRepository) {
    super(login, manager, null);
    managerRepository = aManagerRepository;
    colliName = aColliName;
    windowName = aWindowName;
    invisibleCells = somInvisibleCells != null ? somInvisibleCells.clone()
        : null;
  }

  /**
   * Setter kolli for produsert element
   *
   * @param orderLine
   * @throws ProTransException
   */
  private void doPackage(final OrderLine orderLine, final String aColliName)
      throws ProTransException {
    String currentColliName = aColliName != null ? aColliName : colliName;
    ColliManager colliManager = (ColliManager) ModelUtil
        .getBean("colliManager");
    OrderLineManager orderLineManager = (OrderLineManager) ModelUtil
        .getBean("orderLineManager");
    Colli colli;
    if (orderLine.getPostShipment() != null) {
      colli = colliManager.findByNameAndPostShipment(currentColliName,
          orderLine.getPostShipment());
    } else {
      colli = colliManager.findByNameAndOrder(currentColliName, orderLine
          .getOrder());
    }
    if (colli == null) {
      if (orderLine.getPostShipment() != null) {
        colli = new Colli(null, null, currentColliName, null, null,
            null, orderLine.getPostShipment(), null, Util
                .getCurrentDate());
      } else {
        colli = new Colli(null, orderLine.getOrder(), currentColliName,
            null, null, null, null, null, Util.getCurrentDate());
      }
    } else {
      colliManager.lazyLoad(colli, new LazyLoadEnum[][] { {
          LazyLoadEnum.ORDER_LINES, LazyLoadEnum.NONE } });
    }
    colli.addOrderLine(orderLine);
    colliManager.saveColli(colli);

    orderLine.setColli(colli);

    orderLineManager.saveOrderLine(orderLine);
    checkCompleteness(colli, true);

  }

  /**
   * Sjekker om ordre er komplett
   *
   * @param colli
   * @param applied
   * @throws ProTransException
   */
  protected void checkCompleteness(Colli colli, boolean applied)
      throws ProTransException {
    if (colli != null) {
      Order order = colli.getOrder();
      if (order != null) {
        OrderManager orderManager = (OrderManager) ModelUtil
            .getBean("orderManager");
        if (applied) {
          orderManager.lazyLoadOrder(order, new LazyLoadOrderEnum[] {
              LazyLoadOrderEnum.ORDER_LINES,
              LazyLoadOrderEnum.ORDER_LINE_ORDER_LINES });
          if (order.isDonePackage()) {
            order.setOrderComplete(Util.getCurrentDate());
            orderManager.saveOrder(order);
          }
        } else {
          order.setOrderComplete(null);
          orderManager.saveOrder(order);
        }
      } else {
        PostShipment postShipment = colli.getPostShipment();
        if (postShipment != null) {
          PostShipmentManager postShipmentManager = (PostShipmentManager) ModelUtil
              .getBean("postShipmentManager");
          if (applied) {
            postShipmentManager
                .lazyLoad(
                    postShipment,
                    new LazyLoadPostShipmentEnum[] { LazyLoadPostShipmentEnum.ORDER_LINES });
            if (postShipment.isDonePackage()) {
              postShipment.setPostShipmentComplete(Util
                  .getCurrentDate());
              postShipmentManager.savePostShipment(postShipment);
            }
          } else {
            postShipment.setPostShipmentComplete(null);
            postShipmentManager.savePostShipment(postShipment);
          }
        }
      }
    }
  }

  /**
   * @param object
   * @param applied
   * @param window
   * @see no.ugland.utransprod.gui.model.ApplyListInterface#
   *      setApplied(no.ugland.utransprod.gui.model.Applyable, boolean,
   *      no.ugland.utransprod.gui.WindowInterface)
   */
  public void setApplied(final Produceable object, final boolean applied,
      final WindowInterface window) {
    if (object != null) {
      handleApply(object, applied, window, colliName);
    }

  }

  protected void handleApply(final Produceable object, final boolean applied,
      final WindowInterface window, final String aColliName) {
    OrderLineManager orderLineManager = (OrderLineManager) ModelUtil
        .getBean("orderLineManager");
    OrderLine orderLine = orderLineManager.findByOrderLineId(object
        .getOrderLineId());
    if (orderLine != null) {

      try {
        if (applied) {
          orderLine.setProduced(object.getProduced());
          setProducableApplied(orderLine, aColliName);

        } else {
          setProducableUnapplied(orderLine);

        }
      } catch (ProTransException e1) {
        Util.showErrorDialog(window, "Feil", e1.getMessage());
        e1.printStackTrace();
      }

      refreshAndSaveOrder(window, orderLine);
      applyListManager.refresh(object);
    }
  }

  protected void refreshAndSaveOrder(final WindowInterface window,
      final OrderLine orderLine) {
    Order order = orderLine.getOrder();

    try {
      managerRepository.getOrderManager().refreshObject(order);
      order.setStatus(null);
      managerRepository.getOrderManager().saveOrder(order);
      managerRepository.getOrderLineManager().saveOrderLine(orderLine);
    } catch (ProTransException e) {
      Util.showErrorDialog(window, "Feil", e.getMessage());
      e.printStackTrace();
    }
  }

  private void setProducableUnapplied(final OrderLine orderLine)
      throws ProTransException {
    orderLine.setProduced(null);
    // orderLine.setProductionUnit(null);

    if (colliName != null) {
      checkCompleteness(orderLine.getColli(), false);
      orderLine.setColli(null);
    }
  }

  private void setProducableApplied(final OrderLine orderLine,
      final String aColliName) throws ProTransException {
    // orderLine.setProduced(Util.getCurrentDate());
    String currentColliName = aColliName != null ? aColliName : colliName;
    if (currentColliName != null) {
      doPackage(orderLine, currentColliName);
    }
  }

  /**
   * @see no.ugland.utransprod.gui.model.ApplyListInterface#hasWriteAccess()
   */
  public boolean hasWriteAccess() {
    return UserUtil.hasWriteAccess(login.getUserType(), windowName);
  }

  /**
   * @see no.ugland.utransprod.gui.model.AbstractApplyList#getReportEnum()
   */
  @Override
  public ReportEnum getReportEnum() {
    return null;
  }

  /**
   * @see no.ugland.utransprod.gui.model.AbstractApplyList#getTableModelReport(javax.swing.ListModel,
   *      org.jdesktop.swingx.JXTable,
   *      com.jgoodies.binding.list.SelectionInList)
   */
  @Override
  public TableModel getTableModelReport(final ListModel listModel,
      final JXTable table, final SelectionInList objectSelectionList) {
    return null;
  }

  /**
   * @see no.ugland.utransprod.gui.model.AbstractApplyList#setInvisibleColumns(org.jdesktop.swingx.JXTable)
   */
  @Override
  public void setInvisibleColumns(JXTable table) {
    if (invisibleCells != null && invisibleCells.length != 0) {
      for (int i = 0; i < invisibleCells.length; i++) {
        table.getColumnExt(invisibleCells[i].intValue()).setVisible(
            false);
      }
    }

  }

  /**
   * @see no.ugland.utransprod.gui.model.AbstractApplyList#sortObjectLines(java.util.List)
   */
  @Override
  protected void sortObjectLines(List<Produceable> lines) {
  }

  /**
   * @see no.ugland.utransprod.gui.model.ApplyListInterface#getApplyObject(no.ugland.utransprod.gui.model.Transportable)
   */
  public Produceable getApplyObject(final Transportable transportable,
      final WindowInterface window) {
    List<Produceable> list = applyListManager
        .findApplyableByOrderNr(transportable.getOrder().getOrderNr());

    // return list == null||list.size()==0 ? null : list != null &&
    // list.size() == 1 ? list.get(0) : selectApplyObject(list,window);
    return list != null && list.size() == 1 ? list.get(0) : null;
  }

  public void setStarted(final Produceable object, final boolean started) {
    if (object != null) {

      Produceable currentProduceable = getProduceable(object);
      OrderLine orderLine = managerRepository.getOrderLineManager()
          .findByOrderLineId(currentProduceable.getOrderLineId());
      if (orderLine != null) {
        if (started) {
          orderLine.setActionStarted(Util.getCurrentDate());
        } else {
          orderLine.setActionStarted(null);
        }
        managerRepository.getOrderLineManager()
            .saveOrderLine(orderLine);

        // applyListManager.refresh((Produceable)orderLine);
        applyListManager.refresh(currentProduceable);

      }
    }

  }

  private Produceable getProduceable(Produceable object) {
    if (object.getOrderLineId() != null) {
      return object;
    } else if (object.getRelatedArticles() != null
        && object.getRelatedArticles().size() != 0) {
      return (Produceable) object.getRelatedArticles().get(0);
    }
    return null;
  }

  public void setProductionUnit(ProductionUnit productionUnit,
      Produceable object, WindowInterface window) {
    OrderLineManager orderLineManager = (OrderLineManager) ModelUtil
        .getBean("orderLineManager");
    OrderLine orderLine = orderLineManager.findByOrderLineId(object
        .getOrderLineId());
    if (orderLine != null) {
      orderLine.setProductionUnit(productionUnit);
      refreshAndSaveOrder(window, orderLine);
      applyListManager.refresh(object);

    }
  }

}
TOP

Related Classes of no.ugland.utransprod.gui.model.ProductionApplyList

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.