public void materialComboBoxSelected() {
   try {
     selectedMaterial = matController.getMaterial(selectedMaterialID);
     editGRItem.setMaterial(selectedMaterial);
     if (selectedMaterial != null) {
       editGRItem.setReceiveUnit(selectedMaterial.getOrderUnit());
       editGRItem.setUnitPrice(selectedMaterial.getOrderUnitPrice());
     }
   } catch (ControllerException e) {
     FacesUtils.reportError(FacesContext.getCurrentInstance(), e.getMessage(), e.getMessage(), e);
     e.printStackTrace();
   }
 }
 public void poComboBoxSelected() {
   try {
     /*
     if(selectedPOType == null || selectedPOType.equalsIgnoreCase("-1")) {
     	selectedPrID = Long.valueOf(-1);
     	throw new ControllerException("¡ÃسÒàÅ×Í¡»ÃÐàÀ·¡ÒèѴ«×éÍ/¨éÒ§");
     }
     */
     // newGR();
     editPO = poController.getPurchaseOrder(selectedPoID);
     if (editPO == null) return;
     // ÊÃéÒ§ PO â´Â copy ¢éÍÁÙÅÁÒ¨Ò¡ PR
     editGR.setPurchaseOrder(editPO);
     editGR.setReason(editPO.getReason());
     editGR.setRecipientName(editPO.getReceiverName());
     GoodsReceiptItem grItem;
     grItemList.clear();
     for (PurchaseOrderItem poItem : editPO.getPurchaseOrderItems()) {
       if (poItem.getRemainQty().doubleValue() > 0) {
         grItem = new GoodsReceiptItem();
         grItem.setGoodsReceipt(editGR);
         grItem.setItemNumber(poItem.getItemNumber());
         grItem.setMaterial(poItem.getMaterial());
         grItem.setOtherMaterial(poItem.getOtherMaterial());
         grItem.setBudgetItem(poItem.getBudgetItem());
         grItem.setReceivedQty(poItem.getRemainQty());
         grItem.setOrderQty(poItem.getRemainQty());
         grItem.setOrderUnitPrice(poItem.getUnitPrice());
         grItem.setReceiveUnit(poItem.getOrderUnit());
         grItem.setUnitPrice(poItem.getUnitPrice());
         grItem.setTotalprice(poItem.getRemainQty().multiply(poItem.getUnitPrice()));
         grItem.setNetPrice(poItem.getRemainQty().multiply(poItem.getUnitPrice()));
         grItem.setAvgPrice(poItem.getUnitPrice());
         grItemList.add(grItem);
       }
     }
   } catch (ControllerException e) {
     FacesUtils.reportError(FacesContext.getCurrentInstance(), e.getMessage(), e.getMessage(), e);
     e.printStackTrace();
   }
 }
  private void recalculate(BigDecimal difference, int itemNumber) {
    ArrayList<GoodsReceiptItem> tempGrItemList = new ArrayList<GoodsReceiptItem>();
    GoodsReceiptItem grItem;

    tempGrItemList.addAll(grItemList);
    grItemList.clear();

    for (GoodsReceiptItem item : tempGrItemList) {
      grItem = new GoodsReceiptItem();
      grItem.setBudgetItem(item.getBudgetItem());
      grItem.setGoodsReceipt(item.getGoodsReceipt());
      grItem.setId(item.getId());
      grItem.setItemNumber(item.getItemNumber());
      grItem.setMaterial(item.getMaterial());
      grItem.setOldReceivedQty(item.getOldReceivedQty());
      grItem.setOrderQty(item.getOrderQty());
      grItem.setOrderUnitPrice(item.getOrderUnitPrice());
      grItem.setOtherMaterial(item.getOtherMaterial());
      grItem.setReceivedQty(item.getReceivedQty());
      grItem.setReceiveUnit(item.getReceiveUnit());
      grItem.setStatus(item.getStatus());
      grItem.setStockMovements(item.getStockMovements());
      grItem.setStorageLocation(item.getStorageLocation());
      grItem.setUnitPrice(item.getUnitPrice());
      grItem.setTotalprice(item.getTotalprice());
      if (item.getItemNumber() == itemNumber) {
        grItem.setDiscountAmount(item.getDiscountAmount().add(difference));
        grItem.setNetPrice(item.getNetPrice().subtract(difference));
        grItem.setAvgPrice(
            (item.getNetPrice()
                .subtract(difference)
                .divide(item.getReceivedQty(), 2, RoundingMode.HALF_UP)));
      } else {
        grItem.setDiscountAmount(item.getDiscountAmount());
        grItem.setNetPrice(item.getNetPrice());
        grItem.setAvgPrice(item.getAvgPrice());
      }
      grItemList.add(grItem);
    }
  }
  public void grTableRowClicked() {
    try {
      editGR = grController.getGoodsReceipt(editGR.getId());
      selectedGRType = editGR.getGrType().getID();
      grItemList.clear();
      // grItemList.addAll(editGR.getGoodsReceiptItems());
      ArrayList<GoodsReceiptItem> grList = new ArrayList<GoodsReceiptItem>();
      grList.addAll(editGR.getGoodsReceiptItems());

      for (GoodsReceiptItem grItem : grList) {
        GoodsReceiptItem item = new GoodsReceiptItem();
        item.setBudgetExpensedAmount(grItem.getBudgetExpensedAmount());
        item.setBudgetItem(grItem.getBudgetItem());
        item.setGoodsReceipt(grItem.getGoodsReceipt());
        item.setId(grItem.getId());
        item.setItemNumber(grItem.getItemNumber());
        item.setMaterial(grItem.getMaterial());
        item.setOldReceivedQty(grItem.getReceivedQty());
        item.setOrderQty(grItem.getOrderQty());
        item.setOrderUnitPrice(grItem.getOrderUnitPrice());
        item.setOtherMaterial(grItem.getOtherMaterial());
        item.setReceivedQty(grItem.getReceivedQty());
        item.setReceiveUnit(grItem.getReceiveUnit());
        item.setStatus(grItem.getStatus());
        item.setStockMovements(grItem.getStockMovements());
        item.setStorageLocation(grItem.getStorageLocation());
        item.setUnitPrice(grItem.getUnitPrice());
        item.setTotalprice(grItem.getTotalprice());
        item.setAvgPrice(grItem.getAvgPrice());
        item.setNetPrice(grItem.getNetPrice());
        item.setDiscountAmount(grItem.getDiscountAmount());
        grItemList.add(item);
      }
      fakeItemNo = grItemList.size() + 1;
      System.out.println(editGR.getTotalPrice());
    } catch (ControllerException e) {
      FacesUtils.reportError(FacesContext.getCurrentInstance(), e.getMessage(), e.getMessage(), e);
      e.printStackTrace();
    }
  }
 public void grItemTableRowClicked() {
   selectedMaterialGroupID = Long.valueOf(-1);
   selectedMaterialID = Long.valueOf(-1);
   selectedMaterialGroup = null;
   selectedMaterial = null;
   selectedBudgetItem = editGRItem.getBudgetItem();
   if (editGRItem.getMaterial() != null) {
     selectedMaterialGroupID = editGRItem.getMaterial().getMaterialGroup().getId();
     selectedMaterialID = editGRItem.getMaterial().getId();
     selectedMaterialGroup = editGRItem.getMaterial().getMaterialGroup();
     selectedMaterial = editGRItem.getMaterial();
   }
   createMaterialSelectItem();
   editGRItem.setOldReceivedQty(editGRItem.getReceivedQty());
   editGRItem.setMaterial(selectedMaterial);
   /*if (selectedMaterial != null ){
   	editGRItem.setReceiveUnit(selectedMaterial.getOrderUnit());
   	editGRItem.setUnitPrice(selectedMaterial.getOrderUnitPrice());
   }*/
   isNewGrItem = false;
   isGrItemSaved = false;
 }
  public void distributeDiscount() {
    System.out.println("distributed discount");
    BigDecimal sumTotalPrice = new BigDecimal("0.00");
    BigDecimal maxTotalPrice = new BigDecimal("0.00");
    BigDecimal sumOfTotalDiscount = new BigDecimal("0.00");
    BigDecimal difference = new BigDecimal("0.00");
    int itemNumberOfmaxTotalPrice = 0;
    GoodsReceiptItem grItem;
    ArrayList<GoodsReceiptItem> tempGrItemList = new ArrayList<GoodsReceiptItem>();

    tempGrItemList.addAll(grItemList);
    grItemList.clear();

    for (GoodsReceiptItem item : tempGrItemList) {
      if (maxTotalPrice.compareTo(item.getTotalprice()) == -1) {
        maxTotalPrice = item.getTotalprice();
        itemNumberOfmaxTotalPrice = item.getItemNumber();
      }
      sumTotalPrice = sumTotalPrice.add(item.getTotalprice());
    }

    for (GoodsReceiptItem item : tempGrItemList) {
      BigDecimal discountAmount = new BigDecimal("0.00");
      BigDecimal netPrice = new BigDecimal("0.00");
      BigDecimal avgprice = new BigDecimal("0.00");

      discountAmount =
          (item.getTotalprice().divide(sumTotalPrice, 2, RoundingMode.HALF_UP))
              .multiply(editGR.getTotalDiscountAmount());
      netPrice = item.getTotalprice().subtract(discountAmount);
      avgprice = netPrice.divide(item.getReceivedQty(), 2, RoundingMode.HALF_UP);
      sumOfTotalDiscount = sumOfTotalDiscount.add(discountAmount);

      grItem = new GoodsReceiptItem();
      grItem.setBudgetItem(item.getBudgetItem());
      grItem.setGoodsReceipt(item.getGoodsReceipt());
      grItem.setId(item.getId());
      grItem.setItemNumber(item.getItemNumber());
      grItem.setMaterial(item.getMaterial());
      grItem.setOldReceivedQty(item.getOldReceivedQty());
      grItem.setOrderQty(item.getOrderQty());
      grItem.setOrderUnitPrice(item.getOrderUnitPrice());
      grItem.setOtherMaterial(item.getOtherMaterial());
      grItem.setReceivedQty(item.getReceivedQty());
      grItem.setReceiveUnit(item.getReceiveUnit());
      grItem.setStatus(item.getStatus());
      grItem.setStockMovements(item.getStockMovements());
      grItem.setStorageLocation(item.getStorageLocation());
      grItem.setUnitPrice(item.getUnitPrice());
      grItem.setTotalprice(item.getTotalprice());
      grItem.setDiscountAmount(discountAmount);
      grItem.setNetPrice(netPrice);
      grItem.setAvgPrice(avgprice);
      grItemList.add(grItem);
    }

    difference = editGR.getTotalDiscountAmount().subtract(sumOfTotalDiscount);
    if (difference.compareTo(zero) != 0) {
      recalculate(difference, itemNumberOfmaxTotalPrice);
    }
    isItemAmountOrPriceChanged = false;
  }