public void saveGR() {
   LogManager log = new LogManager();
   try {
     // µÃǨÇèÒµéͧÁÕ¡ÒáÓ˹´ StorageLocation
     /*for (GoodsReceiptItem grItem : grItemList) {
     	if (grItem.getStorageLocation()== null ){
     		throw new ControllerException("¡ÃسÒÃкØʶҹ·Õè¨Ñ´à¡çºãËé¡Ñº·Ø¡ÃÒ¡Ò÷Õèµéͧ¡ÒÃÃѺà¢éÒ¤Åѧ");
     	}
     }*/
     if (isItemAmountOrPriceChanged == true && !editGR.getTotalDiscountAmount().equals(zero)) {
       throw new ControllerException("¡Ãسҡ´»ØèÁ¡ÃШÒÂÊèǹŴÍÕ¡¤ÃÑé§");
     }
     editGR.setGoodsReceiptItems(grItemList);
     if (editGR.getId() == null) {
       editGR.setBudgetYear(budgetYear);
       editGR = grController.saveGoodsReceipt(editGR);
       log.recordCreateGr(editGR.getFormattedGrNumber(), editGR.getTotalPrice());
     } else {
       editGR = grController.saveGoodsReceipt(editGR);
       log.recordUpdateGr(editGR.getFormattedGrNumber(), editGR.getTotalPrice());
     }
     createPOSelectItemList();
     listGR();
     grTableRowClicked();
     isGrSaved = true;
   } catch (ControllerException e) {
     FacesUtils.reportError(FacesContext.getCurrentInstance(), e.getMessage(), e.getMessage(), e);
     e.printStackTrace();
   }
 }
 public void closeGR() {
   LogManager log = new LogManager();
   try {
     if (editGR.getId() == null) {
       throw new ControllerException("äÁèÊÒÁÒö»Ô´ãºÃѺ·ÕèÂѧäÁèä´éºÑ¹·Ö¡ä´é");
     }
     log.recordCloseGr(editGR.getFormattedGrNumber());
     editGR = grController.closeGoodsReceipt(editGR);
     createPOSelectItemList();
     listGR();
     grTableRowClicked();
   } catch (ControllerException e) {
     FacesUtils.reportError(FacesContext.getCurrentInstance(), e.getMessage(), e.getMessage(), e);
     e.printStackTrace();
   }
 }
  public void printGR() {
    LogManager log = new LogManager();
    try {
      JasperReport report = null;
      report =
          (JasperReport)
              JRLoader.loadObject(this.getClass().getResource("/welfare/reports/grForm.jasper"));
      // report = (JasperReport)JRLoader.loadObject("D:/grForm.jasper");

      ArrayList<PurchasingGRReportData> grReportList = new ArrayList<PurchasingGRReportData>();

      for (GoodsReceiptItem goodsReceiptItem : grItemList) {
        PurchasingGRReportData grReport = new PurchasingGRReportData();

        grReport.setItemNo(goodsReceiptItem.getItemNumber());
        grReport.setOrderQty(goodsReceiptItem.getOrderQty());
        grReport.setReceivedQty(goodsReceiptItem.getReceivedQty());
        grReport.setUnit(goodsReceiptItem.getReceiveUnit());
        grReport.setUnitPrice(goodsReceiptItem.getUnitPrice());

        String material = "";
        if (goodsReceiptItem.getMaterial() == null) {
          material = goodsReceiptItem.getOtherMaterial();
        } else {
          material = goodsReceiptItem.getMaterial().getDescription();
        }
        grReport.setMaterial(material);
        grReportList.add(grReport);
      }

      vendor = poController.getVendorForReport(editGR.getPurchaseOrder().getId());
      String text = "";
      if (editGR.getStatus().toString().equals("GR-FULL")) {
        text = "ÃѺàµçÁ¨Ó¹Ç¹";
      }
      if (editGR.getStatus().toString().equals("GR-PAR")) {
        text = "ÃѺäÁèàµçÁ¨Ó¹Ç¹";
      }

      HashMap grReportHashMap = new HashMap();
      grReportHashMap.put("grNo", editGR.getFormattedGrNumber());
      grReportHashMap.put("receivedDate", editGR.getReceivedDate());
      grReportHashMap.put("poNo", editGR.getPurchaseOrder().getFormattedPoNumber());
      grReportHashMap.put("status", editGR.getStatus().toString());
      grReportHashMap.put("invoiceNo", editGR.getInvoiceNumber());
      if (vendor != null) {
        grReportHashMap.put("vendor", vendor.getName());
      } else {
        grReportHashMap.put("vendor", editGR.getPurchaseOrder().getOtherVendor());
      }
      grReportHashMap.put("text", text);
      grReportHashMap.put("recipientName", editGR.getRecipientName());
      grReportHashMap.put("entryName", editGR.getEntryName());
      grReportHashMap.put("recipientPos", editGR.getRecipientPos());
      grReportHashMap.put("entryPos", editGR.getEntryPos());
      grReportHashMap.put("totalPrice", editGR.getTotalPrice());
      grReportHashMap.put("totalDiscount", editGR.getTotalDiscountAmount());
      grReportHashMap.put("LOGO", this.getClass().getResource("/welfare/reports/logo.gif"));
      grReportHashMap.put("logo", this.getClass().getResource("/welfare/reports/aerologo.png"));

      JasperPrint jasperPrint =
          JasperFillManager.fillReport(
              report, grReportHashMap, new JRBeanCollectionDataSource(grReportList));

      // JasperExportManager.exportReportToPdfFile(jasperPrint,"D:/testGR.pdf");
      byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
      ReportUtils.displayPdfReport(bytes);
      log.recordPrintGr(editGR.getFormattedGrNumber());

    } catch (JRException e) {
      // TODO: handle exception
      e.printStackTrace();
      e.getMessage();
    } catch (ControllerException e) {
      FacesUtils.reportError(FacesContext.getCurrentInstance(), e.getMessage(), e.getMessage(), e);
      e.printStackTrace();
    } catch (IOException e) {
      // TODO: handle exception
      e.printStackTrace();
    }
  }