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;
}
}