基于UIF2的通用修订按钮

package nc.ui.ewm.budget_repair.action;

import java.awt.event.ActionEvent;
import java.util.List;

import javax.swing.Action;

import nc.bs.framework.common.NCLocator;
import nc.bs.pubapp.pf.util.ApproveFlowUtil;
import nc.itf.uap.billtemplate.IBillTemplateQry;
import nc.md.data.access.NCObject;
import nc.ui.pub.bill.BillItem;
import nc.ui.pub.bill.BillModel;
import nc.ui.pub.bill.BillScrollPane;
import nc.ui.pub.bill.BillTabbedPane;
import nc.ui.pubapp.uif2app.AppUiState;
import nc.ui.pubapp.uif2app.actions.EditAction;
import nc.ui.pubapp.uif2app.actions.pflow.ApproveStatus;
import nc.ui.pubapp.uif2app.view.ShowUpableBillForm;
import nc.ui.trade.business.HYPubBO_Client;
import nc.uif.pub.exception.UifException;
import nc.vo.pub.bill.BillTempletBodyVO;
import nc.vo.pub.bill.BillTempletVO;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.pub.pftemplate.SystemplateVO;
import nc.vo.pubapp.AppContext;

/**
 * 基于UIF2的通用修订按钮
 */
public class DeployReviseAction extends EditAction {
	private ShowUpableBillForm billForm;

	public ShowUpableBillForm getBillForm() {
		return billForm;
	}

	public void setBillForm(ShowUpableBillForm billForm) {
		this.billForm = billForm;
	}

	public DeployReviseAction() {
		setCode("DEPLOYREVISE");
		setBtnName("修订");
	}

	@Override
	public void doAction(ActionEvent paramActionEvent) throws Exception {
		// 将界面设置为编辑态
		super.doAction(paramActionEvent);
		disableAllHeadItems(); // 表头字段不可编辑
		disableAllBodyItems(); // 表体所有页签字段不可编辑
		disabledAllBodyLineActions(); // 表体行操作按钮不可点击
		// 获取单据模板
		String templateId = getDefaultTemplateId();
		if(templateId==null)throw new RuntimeException("找不到默认单据模板");
		IBillTemplateQry iBillTemplateQry = NCLocator.getInstance().lookup(IBillTemplateQry.class);
		BillTempletVO template = iBillTemplateQry.findTempletData(templateId);
		// 取出所有字段
		BillTempletBodyVO[] reviseItems = template.getBodyVO();
		// 然后再释放可以编辑的字段
		for (BillTempletBodyVO item : reviseItems) {
			String table_code = item.getTable_code();
			String itemKey = item.getItemkey();
			if (itemKey == null||table_code==null)continue;
			if (item.getReviseflag().equals(UFBoolean.FALSE))continue; // 不是修订字段,不释放编辑状态
			BillModel billModel = getBillForm().getBillCardPanel().getBillModel(table_code);
			if(billModel==null){
				// 允许对应的表头字段编辑
				getBillForm().getBillCardPanel().getHeadItem(itemKey).setEnabled(true);
			}else{
				// 允许对应的表体字段编辑
				billModel.getItemByKey(itemKey).setEnabled(true);
			}
		}
	}

	private void disabledAllBodyLineActions() {
		List<Action> bodyLineActions = getBillForm().getBodyLineActions();
		for(Action action:bodyLineActions){
			action.setEnabled(false);
		}
	}

	/**
	 * 禁用所有表体字段(包含分页签)
	 */
	private void disableAllBodyItems() {
		BillTabbedPane tabbedPane = getBillForm().getBillCardPanel().getBodyTabbedPane();
		int tabCount = tabbedPane.getTabCount();
		for(int i=0;i<tabCount;i++){
			BillScrollPane tab = (BillScrollPane) tabbedPane.getComponentAt(i);
			String tabCode = tab.getTableCode();
			BillItem[] items = tab.getTableModel().getBodyItems();
			for(BillItem item:items){
				item.setEnabled(false);
			}
		}
	}

	/**
	 * 禁用所有表头字段
	 */
	private void disableAllHeadItems() {
		BillItem[] headItems = getBillForm().getBillCardPanel().getHeadItems();
		for (BillItem item : headItems) {
			item.setEnabled(false);
		}
	}

	/**
	 * 获取当前单据的单据模板主键
	 * @return
	 * @throws UifException
	 */
	private String getDefaultTemplateId() throws UifException {
		String templateId = null;

		String billType = getBillForm().getBillCardPanel().getBillType();
		String pk_group = AppContext.getInstance().getPkGroup();
		String nodeKey = getBillForm().getNodekey();
		SystemplateVO[] defaultSystemplate = (SystemplateVO[]) HYPubBO_Client
				.queryByCondition(
						SystemplateVO.class,
						"templateflag = 'N' AND nvl ( operator, '~' ) = '~' AND upper ( funnode ) = upper ( '"
								+ billType
								+ "' ) AND pk_corp = '"
								+ pk_group
								+ "' AND tempstyle = 0 AND nodekey = '"
								+ nodeKey + "'");
		if (defaultSystemplate != null && defaultSystemplate.length != 0) {
			templateId = defaultSystemplate[0].getTemplateid();
		}
		return templateId;
	}

	@Override
	public boolean isActionEnable() {
		// 重写isActionEnable,只有当单据是提交状态才能修订
		Object selectedObj = getModel().getSelectedData();
		if (selectedObj == null) {
			return false;
		}

		Object selectedData = getModel().getSelectedData();
		int status = -1;
		if (selectedData != null) {
			NCObject obj = NCObject.newInstance(selectedData);
			if (obj != null) {
				status = ApproveFlowUtil.getBillStatus(obj).intValue();
			}

		}

		// 审批态判断
		// boolean isEnable = (getModel().getAppUiState() ==
		// AppUiState.NOT_EDIT)
		// && (selectedData != null)
		// && (((status == 1) || (status == 2) || (status == 0)));

		// 提交态判断
		boolean isEnable = (getModel().getAppUiState() == AppUiState.NOT_EDIT)
				&& (selectedData != null) && (status == ApproveStatus.COMMIT);

		return isEnable;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值