package nc.ui.hrtrn.regmng.model;

import java.util.ArrayList;

import nc.bs.framework.common.NCLocator;
import nc.hr.utils.PubEnv;
import nc.hr.utils.ResHelper;
import nc.itf.hi.IPsndocQryService;
import nc.ui.hr.infoset.model.DefaultHookClient;
import nc.ui.pub.bill.IBillItem;
import nc.vo.hi.psndoc.EduVO;
import nc.vo.hi.psndoc.PsnChgVO;
import nc.vo.hi.psndoc.PsnJobVO;
import nc.vo.hi.psndoc.PsnOrgVO;
import nc.vo.hi.psndoc.PsndocVO;
import nc.vo.hr.infoset.InfoItemVO;
import nc.vo.hr.infoset.InfoSetHelper;
import nc.vo.hr.infoset.InfoSetVO;
import nc.vo.hr.infoset.InfoSortVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.trn.regmng.RegapplyVO;
import nccloud.commons.lang.ArrayUtils;

public class RegmngInfoSetClientHook extends DefaultHookClient {
	/****************************************************************************
	 * {@inheritDoc}<br>
	 * Created on 2010-6-2 10:05:25<br>
	 * @see nc.ui.hr.infoset.model.DefaultHookClient#getDefaultVO(nc.vo.hr.infoset.InfoSortVO, nc.vo.hr.infoset.InfoSetVO)
	 * @author Rocex Wang
	 ****************************************************************************/
	@Override
	public InfoSetVO getDefaultVO(InfoSortVO infoSortVO, InfoSetVO infoSetVO)
	{
		int iIndex = 0;

		infoSetVO.setPk_field_code(EduVO.PK_PSNDOC_SUB);

		ArrayList<InfoItemVO> listInfoItemVO = new ArrayList<InfoItemVO>();

		// 人员子表主键
		InfoItemVO infoItemVO = new InfoItemVO();
		infoItemVO.setItem_code(EduVO.PK_PSNDOC_SUB);
		infoItemVO.setItem_name(ResHelper.getString("6007psn", "06007psn0133")/* @res "人员子表主键" */);
		infoItemVO.setData_type(IBillItem.STRING);
		infoItemVO.setHided(UFBoolean.TRUE);
		infoItemVO.setNullable(UFBoolean.TRUE);
		infoItemVO.setMax_length(InfoSetHelper.hashDataLength.get(IBillItem.UFREF));
		infoItemVO.setShoworder(iIndex++);
		infoItemVO.setPk_group(PubEnv.getPk_group());
		infoItemVO.setPk_org(infoSetVO.getPk_org());
		infoItemVO.setRespath("6007psn");
		infoItemVO.setResid("06007psn0133");
		listInfoItemVO.add(infoItemVO);

		// 人员档案主键
		infoItemVO = (InfoItemVO) infoItemVO.clone();
		infoItemVO.setItem_code(RegapplyVO.PK_HI_REGAPPLY);
		infoItemVO.setItem_name("转正单主键");
		infoItemVO.setShoworder(iIndex++);
		listInfoItemVO.add(infoItemVO);

		// 开始日期
		infoItemVO = (InfoItemVO) infoItemVO.clone();
		infoItemVO.setItem_code(EduVO.BEGINDATE);
		infoItemVO.setItem_name(ResHelper.getString("common", "UC000-0001892")/* @res "开始日期" */);
		infoItemVO.setData_type(IBillItem.LITERALDATE);
		infoItemVO.setHided(UFBoolean.FALSE);
		infoItemVO.setResid("UC000-0001892");
		infoItemVO.setShoworder(iIndex++);
		infoItemVO.setMax_length(InfoSetHelper.hashDataLength.get(IBillItem.LITERALDATE));
		listInfoItemVO.add(infoItemVO);

		// 结束日期
		infoItemVO = (InfoItemVO) infoItemVO.clone();
		infoItemVO.setItem_code(EduVO.ENDDATE);
		infoItemVO.setItem_name(ResHelper.getString("common", "UC000-0003230")/* @res "结束日期" */);
		infoItemVO.setResid("UC000-0003230");
		infoItemVO.setShoworder(iIndex++);
		listInfoItemVO.add(infoItemVO);

		// 记录序号
		infoItemVO = (InfoItemVO) infoItemVO.clone();
		infoItemVO.setItem_code(EduVO.RECORDNUM);
		infoItemVO.setItem_name(ResHelper.getString("6007psn", "06007psn0134")/* @res "记录序号" */);
		infoItemVO.setData_type(IBillItem.INTEGER);
		infoItemVO.setResid("06007psn0134");
		infoItemVO.setShoworder(iIndex++);
		infoItemVO.setHided(UFBoolean.TRUE);
		infoItemVO.setMax_length(InfoSetHelper.hashDataLength.get(IBillItem.INTEGER));
		listInfoItemVO.add(infoItemVO);

		// 最近记录标志
		infoItemVO = (InfoItemVO) infoItemVO.clone();
		infoItemVO.setItem_code(EduVO.LASTFLAG);
		infoItemVO.setItem_name(ResHelper.getString("6007psn", "06007psn0135")/* @res "最近记录标志" */);
		infoItemVO.setResid("06007psn0135");
		infoItemVO.setShoworder(iIndex++);
		infoItemVO.setData_type(IBillItem.BOOLEAN);
		infoItemVO.setMax_length(InfoSetHelper.hashDataLength.get(IBillItem.BOOLEAN));
		listInfoItemVO.add(infoItemVO);

		// 把审计信息也加进来
		listInfoItemVO.addAll(getAuditItem(infoSetVO, 99));

		infoSetVO.setInfo_item((InfoItemVO[]) ArrayUtils.addAll(infoSetVO.getInfo_item(), listInfoItemVO.toArray(new InfoItemVO[0])));

		return infoSetVO;
	}

	@Override
	public void afterSyncMetaData(InfoSortVO infoSortVO, InfoSetVO... infoSetVOs) throws BusinessException
	{
		ArrayList<String[]> al = NCLocator.getInstance().lookup(IPsndocQryService.class).queryInfosetMetaID();
		for (String[] str : al)
		{
			InfoSetHelper.clearMdCache(str);
		}
	}

	/****************************************************************************
	 * {@inheritDoc}<br>
	 * Created on 2010-7-27 18:28:32<br>
	 * @see nc.ui.hr.infoset.model.DefaultHookClient#isSuportDateFormula(InfoSortVO, nc.vo.hr.infoset.InfoSetVO)
	 * @author Rocex Wang
	 ****************************************************************************/
	@Override
	public boolean isSuportDateFormula(InfoSortVO infoSortVO, InfoSetVO infoSetVO)
	{
		if (infoSetVO == null || infoSetVO.getInfoset_code() == null)
		{
			return super.isSuportDateFormula(infoSortVO, infoSetVO);
		}

		// 只有 人员的 基本信息、组织关系、任职记录、流动情况 支持日期公式
		return ArrayUtils.contains(new String[] { PsndocVO.getDefaultTableName(), PsnJobVO.getDefaultTableName(), PsnOrgVO.getDefaultTableName(),
				PsnChgVO.getDefaultTableName() }, infoSetVO.getInfoset_code());
	}

	/****************************************************************************
	 * {@inheritDoc}<br>
	 * Created on 2010-8-2 16:44:33<br>
	 * @see nc.ui.hr.infoset.model.DefaultHookClient#isSyncFromSub(nc.vo.hr.infoset.InfoSortVO, nc.vo.hr.infoset.InfoSetVO)
	 * @author Rocex Wang
	 ****************************************************************************/
	@Override
	public boolean isSyncFromSub(InfoSortVO infoSortVO, InfoSetVO infoSetVO)
	{
		return true;
	}

	@Override
	public boolean isSuportInfoItemMap()
	{
		return true;
	}

	@Override
	public String getSourceInfoItemRefWhere(String strInfoSetCode)
	{
	    //将异动事件、异动类型、异动原因三个字段放出来
//		return " and item_code not in ('assgid','begindate','clerkcode','creationtime','creator','dataoriginflag','dr','enddate','endflag','ismainjob','lastflag','modifiedtime','modifier','occupation','oribillpk','oribilltype','pk_dept','pk_dept_v','pk_group','pk_hrgroup','pk_hrorg','pk_job','pk_org','pk_org_v','pk_post','pk_psndoc','pk_psnjob','pk_psnorg','psntype','recordnum','trial_flag','trial_type','trnsevent','trnsreason','trnstype','ts')";
	    return " and item_code not in ('assgid','begindate','clerkcode','creationtime','creator','dataoriginflag','dr','enddate','endflag','ismainjob','lastflag','modifiedtime','modifier','occupation','oribillpk','oribilltype','pk_dept','pk_dept_v','pk_group','pk_hrgroup','pk_hrorg','pk_job','pk_org','pk_org_v','pk_post','pk_psndoc','pk_psnjob','pk_psnorg','psntype','recordnum','trial_flag','trial_type','ts')";
	}

	@Override
	public String getSourceInfoSetRefWhere(String strInfoSetCode)
	{
		return "  meta_data_id in ('0d7c6e1a-bcfd-4286-a998-75c04879d18a','7156d223-4531-4337-b192-492ab40098f1') ";
	}

	@Override
	public String getTargetInfoItemRefWhere(String strInfoSetCode)
	{
		return " and item_code not in ('begindate','creationtime','creator','dr','enddate','lastflag','modifiedtime','modifier','pk_group','pk_org','pk_psndoc','pk_psndoc_sub','pk_psnjob','pk_psnorg','recordnum','ts','workcorp','workdept','workjob','workpost')";
	}

	@Override
	public String getTargetInfoSetRefWhere(String strInfoSetCode)
	{
		return "  meta_data_id in ('c5f3fa84-3505-4096-bb4d-bb40527a608e') ";
	}
}
