package com.yonyou.hrcloud.pm.ps.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.yonyou.hrcloud.adder.generic.DBIgnore;
import com.yonyou.hrcloud.berry.model.TenantEntity;
import com.yonyou.hrcloud.pm.common.model.CommonValue;

import lombok.Data;

/**
 * 考核方案实体
 * 
 * @author Flysea
 *
 */
@Data
public class Scheme extends TenantEntity {
	private static final long serialVersionUID = 1L;
	public static final String TABLE_NAME = "pm_scheme";

	/**
	 * 编码
	 */
	private String schemecode;

	/**
	 * 名称
	 */
	private String schemename;

	/**
	 * 方案说明
	 */
	private String remark;

	/**
	 * 绩效周期
	 */
	private String periodid;

	/**
	 * 绩效值
	 */
	private String periodcode;

	/**
	 * 周期名称<br>
	 * 非存储
	 */
	private String periodname;

	/**
	 * 考核结果等级id
	 */
	private String gradeid;

	/**
	 * 考核结果等级名称<br>
	 * 非存储
	 */
	private String gradename;

	/**
	 * 评分规则id
	 */
	private String scoreruleid;

	/**
	 * 评分规则名称<br>
	 * 非存储
	 */
	private String scorerulename;

	/**
	 * 方案类型<br>
	 * 0=PBC考核，1=360度评估，4=价值观，10=汇总方案
	 */
	private int schememode;

	/**
	 * 方案类型名称<br>
	 * 非存储
	 */
	private String schememodename;

	/**
	 * 状态<br>
	 * 1=方案设置中，0=设置已完成，2=方案填报中，3=填报已结束，4=评分进行中，5=评分已结束，6=结果审核中，7=结果已审核，8=结果已发布，9=方案已封存，10=汇总已完成，11=结果汇总中
	 */
	private int schemestate;

	/**
	 * 完成状态，0 未完成 1已完成<br>
	 * 非存储
	 */
	private Integer state;

	/**
	 * 状态名称<br>
	 * 非存储
	 */
	private String schemestatename;

	/**
	 * 考核结果需要审核
	 */
	private boolean isresultaudited;

	/**
	 * 按轮次顺序打分
	 */
	private boolean isturn;

	/**
	 * 总分汇总规则<br>
	 * 1=加权求和，2=算术求和，3=算术平均，4=按权重计算
	 */
	private int scoreway;

	/**
	 * 适用对象<br>
	 * 1=人员，2=组织
	 */
	private int applyobj = 1;

	/**
	 * 允许员工填报
	 */
	private boolean isallowfillup;

	/**
	 * 是否需要员工确认
	 */
	private boolean isresultconfirm;

	/**
	 * 是否方案已结束
	 */
	private boolean isend;

	/**
	 * 弃权处理方式<br>
	 * 0 不处理;1 按权重平均分配给其他人;2 取默认值
	 */
	private int abstentionmode = 1;

	/**
	 * 强制分布id
	 */
	private String distid;

	/**
	 * 方案开始时间，启动时写入
	 */
	private Date fdate;

	/**
	 * 方案发布时间，发布时写入
	 */
	private Date pdate;

	/**
	 * 方案结束时间，结束时写入
	 */
	private Date tdate;

	/**
	 * 前面多人时只收到最后一条消息
	 */
	private boolean ismergemsg;

	/**
	 * 所属组织
	 */
	private String orgid = CommonValue.EnumDataBaseSpecial.Empty.getSymbol();

	/**
	 * 进度百分比<br>
	 * 非存储
	 */
	private Integer percent;

	/**
	 * 按指标分类、指标两级设置权重
	 */
	private boolean isdoubleweight;

	/**
	 * 是否允许创建中期回顾
	 */
	private boolean isallowmtr;

	/**
	 * 是否支持指标评分
	 */
	private boolean isallowcalc = true;

	/**
	 * 标签id
	 */
	private String tagid;

	/**
	 * 指标来源<br>
	 * 0员工填报;1HR统一分配;2上级下达
	 */
	private int indisource;

	/**
	 * 组下考核对象组集合<br>
	 * 非存储
	 */
	private List<EvaGroup> oGroups;

	/**
	 * 考核流程<br>
	 * 非存储
	 */
	private List<EvaAppraiser> oEvaAppraiser;

	/**
	 * 汇总方案扩展<br>
	 * 非存储
	 */
	private SchemeExtend oSchemeExtend;

	/**
	 * 组织名称<br>
	 * 非存储
	 */
	private String orgname;

	/**
	 * 汇总方案明细<br>
	 * 非存储
	 */
	private List<SchemeRelation> oSchemeRelation;

	/**
	 * 方案下属子方案的列表<br>
	 * 非存储
	 */
	private List<Scheme> subSchemeList;

	/**
	 * 中期回顾方案对应的主方案id<br>
	 * 非存储
	 */
	private String parentId = "";

	/**
	 * 是否已发布<br>
	 * 非存储
	 */
	private boolean ispublished;

	@DBIgnore
	public String getPeriodname() {
		return periodname;
	}

	@DBIgnore
	public String getScorerulename() {
		return scorerulename;
	}

	@DBIgnore
	public String getSchememodename() {
		return schememodename;
	}

	@DBIgnore
	public Integer getState() {
		return state;
	}

	@DBIgnore
	public String getSchemestatename() {
		return schemestatename;
	}

	@DBIgnore
	public Integer getPercent() {
		return percent;
	}

	@DBIgnore
	public List<EvaGroup> getOGroups() {
		return oGroups;
	}

	@DBIgnore
	public List<EvaAppraiser> getOEvaAppraiser() {
		return oEvaAppraiser;
	}

	@DBIgnore
	public SchemeExtend getOSchemeExtend() {
		return oSchemeExtend;
	}

	@DBIgnore
	public String getOrgname() {
		return orgname;
	}

	@DBIgnore
	public String getGradename() {
		return gradename;
	}

	@DBIgnore
	public List<SchemeRelation> getOSchemeRelation() {
		return oSchemeRelation;
	}

	@DBIgnore
	public List<Scheme> getSubSchemeList() {
		return subSchemeList;
	}

	@DBIgnore
	public String getParentId() {
		return parentId;
	}

	@DBIgnore
	public boolean isIspublished() {
		if (schemestate == CommonValue.EnumSchemeState.State9.getIndex() || isend)
			return true;
		else
			return false;
	}
	
	/**
	 * begin hzq
	 */
	/**
	 * 查看结果选项<br>
	 * 0不限；1仅查看等级；2仅查看总分；3仅查看等级与总分
	 */
	private int viewresults;
	/**
	 * end
	 */
	
	/**
	 * 导入结果 add by zengcl
	 */
	private boolean isimportresult;
	
	/**
	 * end
	 */
	
	/**
	 * 结果审核是否可问责 add by 
	 */
	private boolean isaccount;
	
	/**
	 * 员工是否能查看结果
	 */
	private boolean isviewresult;
}
