/**
   * Overridden to guarantee that form of copied document is set to whatever the entry mode of the
   * document is
   *
   * @see org.kuali.rice.kns.web.struts.action.KualiTransactionalDocumentActionBase#copy
   *     (org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm,
   *     javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
   */
  @Override
  public ActionForward copy(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    ActionForward forward = null;
    String docID = "docId";
    if (request.getParameter(docID) == null) {
      forward = super.copy(mapping, form, request, response);
    } else {
      // this is copy document from Procurement Gateway:
      // use this url to call:
      // http://localhost:8080/kfs-dev/purapRequisition.do?methodToCall=copy&docId=xxxx
      String docId = request.getParameter(docID);
      KualiDocumentFormBase kualiDocumentFormBase = (KualiDocumentFormBase) form;

      CuRequisitionDocument document = null;
      document = (CuRequisitionDocument) getDocumentService().getByDocumentHeaderId(docId);
      document.toCopyFromGateway();

      kualiDocumentFormBase.setDocument(document);
      WorkflowDocument workflowDocument = document.getDocumentHeader().getWorkflowDocument();
      kualiDocumentFormBase.setDocTypeName(workflowDocument.getDocumentTypeName());
      SpringContext.getBean(SessionDocumentService.class)
          .addDocumentToUserSession(GlobalVariables.getUserSession(), workflowDocument);

      forward = mapping.findForward(RiceConstants.MAPPING_BASIC);
    }
    return forward;
  }
  @SuppressWarnings("unchecked")
  @Override
  public ActionForward addItem(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    PurchasingFormBase purchasingForm = (PurchasingFormBase) form;
    PurApItem item = purchasingForm.getNewPurchasingItemLine();
    RequisitionItem requisitionItem = (RequisitionItem) item;
    PurchasingDocument purDocument = (PurchasingDocument) purchasingForm.getDocument();

    if (StringUtils.isBlank(requisitionItem.getPurchasingCommodityCode())) {
      boolean commCodeParam =
          SpringContext.getBean(ParameterService.class)
              .getParameterValueAsBoolean(
                  CuRequisitionDocument.class,
                  PurapParameterConstants.ENABLE_DEFAULT_VENDOR_COMMODITY_CODE_IND);

      if (commCodeParam) {
        if (purchasingForm instanceof RequisitionForm) {
          CuRequisitionDocument reqs = (CuRequisitionDocument) purchasingForm.getDocument();
          VendorDetail dtl = reqs.getVendorDetail();
          if (ObjectUtils.isNotNull(dtl)) {
            List<VendorCommodityCode> vcc = dtl.getVendorCommodities();
            String defaultCommodityCode = "";
            Iterator<VendorCommodityCode> it = vcc.iterator();
            while (it.hasNext()) {
              VendorCommodityCode commodity = it.next();
              if (commodity.isCommodityDefaultIndicator()) {
                defaultCommodityCode = commodity.getPurchasingCommodityCode();
                requisitionItem.setPurchasingCommodityCode(defaultCommodityCode);
              }
            }
          }
        }
      }
    }

    boolean rulePassed =
        SpringContext.getBean(KualiRuleService.class)
            .applyRules(new AttributedAddPurchasingAccountsPayableItemEvent("", purDocument, item));

    if (rulePassed) {
      item = purchasingForm.getAndResetNewPurchasingItemLine();
      purDocument.addItem(item);
      // KFSPTS-985
      if (((PurchasingDocumentBase) (purDocument)).isIntegratedWithFavoriteAccount()) {
        populatePrimaryFavoriteAccount(
            item.getSourceAccountingLines(),
            getAccountClassFromNewPurApAccountingLine(purchasingForm));
      }
    }

    return mapping.findForward(KFSConstants.MAPPING_BASIC);
  }
  public ActionForward clearVendor(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    PurchasingFormBase baseForm = (PurchasingFormBase) form;
    CuRequisitionDocument document = (CuRequisitionDocument) baseForm.getDocument();

    document.setVendorHeaderGeneratedIdentifier(null);
    document.setVendorDetailAssignedIdentifier(null);
    document.setVendorDetail(null);
    document.setVendorName("");
    document.setVendorLine1Address("");
    document.setVendorLine2Address("");
    document.setVendorAddressInternationalProvinceName("");
    document.setVendorCityName("");
    document.setVendorStateCode("");
    document.setVendorPostalCode("");
    document.setVendorCountryCode("");
    document.setVendorContractGeneratedIdentifier(null);
    document.setVendorContract(null);
    document.setVendorFaxNumber("");
    document.setVendorCustomerNumber("");
    document.setVendorAttentionName("");
    document.setVendorAddressGeneratedIdentifier(null);
    // clearing value that was set in PurchasingDocumentBase.templateVendorAction
    document.setVendorAddressGeneratedIdentifier(null);
    // clearing value that was set in PurchasingDocumentBase.templateVendorAction
    return mapping.findForward(KFSConstants.MAPPING_BASIC);
  }