You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iot/labs/Teacher/TeacherExt/Models/EditTeacherModel.cs

569 lines
21 KiB

using Infrastructure.Web.Mvc;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace TeacherExt.Models
{
[Display(Name = "教师")]
public class EditTeacherModel:IValidatableObject
{
[SkipSearch, SkipList]
[ReadOnly(true)]
[ScaffoldColumn(false)]
[Display(Order = -4, Name = "用户名")]
public string UserName { get; set; }
[SkipSearch, SkipList]
[HiddenInput]
[ReadOnly(true)]
[ScaffoldColumn(false)]
[Display(Order = -3, Name = "用户Id")]
public Guid UserId { get; set; }
[HiddenInput]
[SkipSearch, SkipList]
[ReadOnly(true)]
[ScaffoldColumn(false)]
[Display(Order = -2, Name = "Id")]
public Guid Id { get; set; } = Guid.NewGuid();
[ReadOnly(true)]
[Required(ErrorMessage = "必填项")]
[Display(Order = -1, Name = "申请修改状态")]
public string RequestEditStatus { get; set; } = "未申请";
[SelectList]
[ReadOnly(true)]
[Required(ErrorMessage = "必填项")]
[Display(Order = 0, Name = "审核状态")]
public string CheckStatus { get; set; } = "未提交";
[ReadOnly(true)]
[SkipSearch, SkipList]
[Display(Order = 10, Name = "工作单位")]
public string Organ { get; set; } = "测试数据";
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 20, Name = "人员类别")]
public string UserType { get; set; }
[ReadOnly(true)]
[RegularExpression(@"^[\u4e00-\u9fa5\d]+$", ErrorMessage = "")]
[Display(Order = 30, Name = "教师姓名")]
public string RealName { get; set; }
[SkipSearch]
[SelectList]
[Required(ErrorMessage = "必填项")]
[Display(Order = 40, Name = "性别")]
public string Sex { get; set; }//current
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Required(ErrorMessage = "必填项")]
[Display(Order = 50, Name = "出生日期")]
public DateTime? Birthday { get; set; }
[SkipSearch, SkipList]
[HiddenInput]
[Description("根据身份证计算")]
[Display(Order = 60, Name = "年龄")]
[NotMapped]
public int? Age { get; set; }//current
[SkipSearch]
[SelectList]
[Required(ErrorMessage = "必填项")]
[Display(Order = 70, Name = "民族")]
public string Nation { get; set; }
[SkipSearch]
[Required(ErrorMessage = "必填项")]
[Description("以 省/自治区/直辖市 + 区/县 等形式填写")]
[Display(Order = 80, Name = "籍贯")]
public string NativePlace { get; set; }
[SkipSearch, SkipList]
[RegularExpression(@"(^$|^\d{7}$|^\d{11}$)",ErrorMessage ="电话号码格式错误")]
[Display(Order = 90, Name = "联系电话")]
public string PhoneNumber { get; set; }
[SkipSearch, SkipList]
[RegularExpression(@"^(\d{15}|\d{17}(X|\d))$", ErrorMessage = "身份证号格式错误")]
[Display(Order = 100, Name = "身份证号")]
public string IdNumber { get; set; }
[Description("是否必填")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 110, Name = "参加工作时间")]
public DateTime? JobStart { get; set; }
[SkipSearch, SkipList]
[HiddenInput]
[Description("根据参加工作时间计算")]
[Display(Order = 120, Name = "工龄")]
[NotMapped]
public int? JobAge { get; set; }
[Description("是否必填")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 130, Name = "任教时间")]
public DateTime? TeachDate { get; set; }
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 140, Name = "到现所在校时间")]
public DateTime? CurrentJobStart { get; set; }
[SkipSearch, SkipList]
[Display(Order = 141, Name = "到现所在校时间-已审核")]
public bool CurrentJobStartChecked { get; set; }
[Description("是否必填")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 150, Name = "政治面貌")]
public string Politics { get; set; }
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 160, Name = "入党(派)时间")]
public DateTime? JoinPartyDate { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 170, Name = "最高职称")]
public string MaxTitle { get; set; }
[SkipSearch, SkipList]
[Display(Order = 171, Name = "最高职称-已审核")]
public bool MaxTitleChecked { get; set; }
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 180, Name = "最高职称取得时间")]
public DateTime? MaxTitleStart { get; set; }
[SkipSearch, SkipList]
[Display(Order = 181, Name = "最高职称取得时间-已审核")]
public bool MaxTitleStartChecked { get; set; }
[SelectList]
[SkipSearch, SkipList]
[Required(ErrorMessage = "必填项")]
[Display(Order = 185, Name = "最高职称已聘")]
public bool? IsJobAsMaxTitle { get; set; }
[HtmlData("JobAsMaxTitle1")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Remote(nameof(JobAsMaxTitleDate), "Ajax",AdditionalFields =nameof(IsJobAsMaxTitle))]
[Required(ErrorMessage = "必填项")]
[Display(Order = 190, Name = "最高职称聘任时间")]
public DateTime? JobAsMaxTitleDate { get; set; }
[SkipSearch, SkipList]
[Display(Order = 191, Name = "已审核")]
public bool JobAsMaxTitleDateChecked { get; set; }
[HtmlData("JobAsMaxTitle2")]
[SkipSearch, SkipList]
[Description("如:乡村教师职评、暂未岗位变更、新考/调入等")]
[Required(ErrorMessage = "必填项")]
[Display(Order = 200, Name = "最高职称未聘原由")]
public string JobAsNotMaxTitleReason { get; set; }
[SkipSearch, SkipList]
[Display(Order = 191, Name = "已审核")]
public bool JobAsNotMaxTitleReasonChecked { get; set; }
[HtmlData("JobAsMaxTitle2")]
[SkipSearch, SkipList]
[SelectList]
[Required(ErrorMessage = "必填项")]
[Display(Order = 210, Name = "现聘任职称")]
public string NotMaxTitle { get; set; }
[SkipSearch, SkipList]
[Display(Order = 211, Name = "已审核")]
public bool NotMaxTitleChecked { get; set; }
[HtmlData("JobAsMaxTitle2")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Required(ErrorMessage = "必填项")]
[Display(Order = 220, Name = "现聘任职称取得时间")]
public DateTime? NotMaxTitleStart { get; set; }
[SkipSearch, SkipList]
[Display(Order = 221, Name = "已审核")]
public bool NotMaxTitleStartChecked { get; set; }
[HtmlData("JobAsMaxTitle2")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Required(ErrorMessage = "必填项")]
[Display(Order = 230, Name = "现聘任职称聘任时间")]
public DateTime? JobAsNotMaxTitleDate { get; set; }
[SkipSearch, SkipList]
[Display(Order = 231, Name = "已审核")]
public bool JobAsNotMaxTitleDateChecked { get; set; }
[Description("是否必填")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 240, Name = "岗位类别")]
public string PostType { get; set; }
[Description("excel单元格提供的选项和批注提供的不一致")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 250, Name = "现岗位等级")]
public string PostGrade { get; set; }
[SkipSearch, SkipList]
[Display(Order = 251, Name = "已审核")]
public bool PostGradeChecked { get; set; }
[Description("以文件为准")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 260, Name = "变更至现岗位等级时间")]
public DateTime? CurrentPostGradeStart { get; set; }
[SkipSearch, SkipList]
[Display(Order = 261, Name = "已审核")]
public bool CurrentPostGradeStartChecked { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 270, Name = "享受学历待遇等级")]
public string EducationGrade { get; set; }
[SkipSearch, SkipList]
[Display(Order = 271, Name = "已审核")]
public bool EducationGradeChecked { get; set; }
[Description("以文件为准")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Required(ErrorMessage = "必填项")]
[Display(Order = 280, Name = "享受学历待遇等级时间")]
public DateTime? EducationGradeDate { get; set; }
[SkipSearch, SkipList]
[Display(Order = 281, Name = "已审核")]
public bool EducationGradeDateChecked { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 290, Name = "全日制教育毕业院校分类")]
public string FullTimeSchoolType { get; set; }
[Description("填写毕业院校全称")]
[SkipSearch, SkipList]
[Display(Order = 300, Name = "全日制教育毕业院校")]
public string FullTimeSchool { get; set; }
[Description("严格按照毕业证书填写")]
[SkipSearch, SkipList]
[Display(Order = 310, Name = "全日制教育毕业证书专业")]
public string FullTimeSchoolMajor { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 320, Name = "全日制教育学历")]
public string FullTimeSchoolEducation { get; set; }
[SkipSearch, SkipList]
[Display(Order = 330, Name = "全日制教育学历取得时间")]
[DataType(DataType.Date)]
public DateTime? FullTimeSchoolEducationDate { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 340, Name = "在职教育毕业院校分类")]
public string JobTimeSchoolType { get; set; }
[Description("是否提示【填写毕业院校全称】")]
[SkipSearch, SkipList]
[Display(Order = 350, Name = "在职教育毕业院校")]
public string JobTimeSchool { get; set; }
[Description("是否提示【严格按照毕业证书填写】")]
[SkipSearch, SkipList]
[Display(Order = 360, Name = "在职教育毕业证书专业")]
public string JobTimeSchoolMajor { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 370, Name = "在职教育学历")]
public string JobTimeSchoolEducation { get; set; }
[SkipSearch, SkipList]
[Display(Order = 380, Name = "在职教育学历取得时间")]
[DataType(DataType.Date)]
public DateTime? JobTimeSchoolEducationDate { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 390, Name = "最高学历")]
public string MaxEducation { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 400, Name = "最高学位")]
public string MaxDegree { get; set; }
[SkipSearch, SkipList]
[Display(Order = 410, Name = "是否担任班主任")]
public bool IsClassTeacher { get; set; }
[SkipSearch, SkipList]
[Display(Order = 411, Name = "已审核")]
public bool IsClassTeacherChecked { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 420, Name = "主要任教学段")]
public string MainTeachPeriod { get; set; }
[SkipSearch, SkipList]
[Display(Order = 421, Name = "已审核")]
public bool MainTeachPeriodChecked { get; set; }
[Description("是否提示【选择项中没有则手动填写】")]
[SkipSearch, SkipList]
[SelectList(true)]
[Display(Order = 430, Name = "主要任教学科")]
public string MainTeachSubject { get; set; }
[SkipSearch, SkipList]
[Display(Order = 432, Name = "已审核")]
public bool MainTeachSubjectChecked { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 440, Name = "主要任教年级")]
public string MainTeachGrade { get; set; }
[SkipSearch, SkipList]
[Display(Order = 441, Name = "已审核")]
public bool MainTeachGradeChecked { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 450, Name = "兼职任教学段")]
public string OtherTeachPeriod { get; set; }
[SkipSearch, SkipList]
[Display(Order = 451, Name = "已审核")]
public bool OtherTeachPeriodChecked { get; set; }
[Description("选择项中没有则手动填写")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 460, Name = "兼职任教学科")]
public string OtherTeachSubject { get; set; }
[SkipSearch, SkipList]
[Display(Order = 462, Name = "已审核")]
public bool OtherTeachSubjectChecked { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Required(ErrorMessage = "必填项")]
[Display(Order = 463, Name = "在编在岗")]
public bool? HasPosition { get; set; }
[HtmlData("HasPosition1")]
[SkipSearch, SkipList]
[SelectList]
[Required(ErrorMessage = "必填项")]
[Display(Order = 464, Name = "是否中层")]
public bool? IsMiddleLevel { get; set; }
[Description("选择项中没有则手动填写")]
[HtmlData("HasPosition11")]
[SkipSearch, SkipList]
[SelectList(true)]
[Required(ErrorMessage = "必填项")]
[Display(Order = 470, Name = "职务")]
public string Position { get; set; }
[SkipSearch, SkipList]
[Display(Order = 471, Name = "已审核")]
public bool PositionChecked { get; set; }
[HtmlData("HasPosition11")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Required(ErrorMessage = "必填项")]
[Display(Order = 480, Name = "职务任命时间")]
public DateTime? PositionStart { get; set; }
[SkipSearch, SkipList]
[Display(Order = 481, Name = "已审核")]
public bool PositionStartChecked { get; set; }
[Description("填写所教学科全称")]
[HtmlData("HasPosition12")]
[SkipSearch, SkipList]
[Required(ErrorMessage = "必填项")]
[Display(Order = 490, Name = "一线教师")]
public string FrontTeacher { get; set; }
[HtmlData("HasPosition2")]
[SkipSearch, SkipList]
[SelectList(true)]
[Description("选择项中没有则手动填写")]
[Required(ErrorMessage = "必填项")]
[Display(Order = 500, Name = "不在岗原由")]
public string NotOnPostReason { get; set; }
[SkipSearch, SkipList]
[Display(Order = 501, Name = "已审核")]
public bool NotOnPostReasonChecked { get; set; }
[HtmlData("HasPosition2")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Required(ErrorMessage = "必填项")]
[Display(Order = 510, Name = "不在岗起始时间")]
public DateTime? NotOnPostReasonDate { get; set; }
[SkipSearch, SkipList]
[Display(Order = 511, Name = "已审核")]
public bool NotOnPostReasonDateChecked { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 520, Name = "教师资格证种类")]
public string TeacherCardType { get; set; }
[Description("是否提示【严格按照资格证书填写】")]
[SkipSearch, SkipList]
[Display(Order = 530, Name = "任教学科")]
public string TeacherCardSubject { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 540, Name = "普通话等级")]
public string TeacherCardLangLevel { get; set; }
[SkipSearch, SkipList]
[SelectList(true)]
[Display(Order = 550, Name = "现家庭详细地址-区县")]
public string CurrentAddressArea { get; set; }
[SkipSearch, SkipList]
[Display(Order = 560, Name = "现家庭详细地址")]
public string CurrentAddressStreat { get; set; }
[SkipSearch, SkipList]
[Display(Order = 570, Name = "审核失败原因")]
public string Comment { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(!this.IsJobAsMaxTitle.HasValue)
{
yield return new ValidationResult("必须选择是否最高职称聘任", new string[] { nameof(this.IsJobAsMaxTitle) });
}
else
{
if(this.IsJobAsMaxTitle.Value)
{
if(!this.JobAsMaxTitleDate.HasValue)
{
yield return new ValidationResult("以最高职称聘任的,必须填写聘任时间", new string[] { nameof(this.JobAsMaxTitleDate) });
}
}
else
{
if(string.IsNullOrEmpty(this.JobAsNotMaxTitleReason))
{
yield return new ValidationResult("未以最高职称聘任的,必须填写原由", new string[] { nameof(this.JobAsNotMaxTitleReason) });
}
if(string.IsNullOrEmpty(NotMaxTitle))
{
yield return new ValidationResult("未以最高职称聘任的,必须填写现聘任职称", new string[] { nameof(this.NotMaxTitle) });
}
if (!this.NotMaxTitleStart.HasValue)
{
yield return new ValidationResult("未以最高职称聘任的,必须填写现聘任职称取得时间", new string[] { nameof(this.NotMaxTitleStart) });
}
if (!this.JobAsNotMaxTitleDate.HasValue)
{
yield return new ValidationResult("未以最高职称聘任的,必须填写现聘任职称聘任时间", new string[] { nameof(this.JobAsNotMaxTitleDate) });
}
}
}
if(!string.IsNullOrEmpty(this.EducationGrade)&&!EducationGradeDate.HasValue)
{
yield return new ValidationResult("享受学历待遇等级的,必须填写时间", new string[] { nameof(this.EducationGradeDate) });
}
if (!this.HasPosition.HasValue)
{
yield return new ValidationResult("必须选择是否在编在岗", new string[] { nameof(this.HasPosition) });
}
else
{
if(this.HasPosition.Value)
{
if(!this.IsMiddleLevel.HasValue)
{
yield return new ValidationResult("必须选择是否中层", new string[] { nameof(this.IsMiddleLevel) });
}
else
{
if(this.IsMiddleLevel.Value)
{
if(string.IsNullOrEmpty(this.Position))
{
yield return new ValidationResult("中层必须选择职务", new string[] { nameof(this.Position) });
}
if(!this.PositionStart.HasValue)
{
yield return new ValidationResult("中层必须选择任命时间", new string[] { nameof(this.PositionStart) });
}
}
else
{
if(string.IsNullOrEmpty(FrontTeacher))
{
yield return new ValidationResult("一线教师必须填写所教学科全称", new string[] { nameof(this.FrontTeacher) });
}
}
}
}
else
{
if (string.IsNullOrEmpty(this.NotOnPostReason))
{
yield return new ValidationResult("必须填写原由", new string[] { nameof(this.Position) });
}
if (!this.NotOnPostReasonDate.HasValue)
{
yield return new ValidationResult("必须填写不在岗起始时间", new string[] { nameof(this.PositionStart) });
}
}
}
}
}
}