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

655 lines
26 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 = 0, Name = "用户名")]
public string UserName { get; set; }
[SkipSearch, SkipList]
[HiddenInput]
[ReadOnly(true)]
[ScaffoldColumn(false)]
[Display(Order = 1, 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 = 3, Name = "申请修改状态")]
public string RequestEditStatus { get; set; } = "未申请";
[SelectList]
[ReadOnly(true)]
[Required(ErrorMessage = "必填项")]
[Display(Order = 4, Name = "审核状态")]
public string CheckStatus { get; set; } = "未提交";
[ExcelHeader("序号")]
[HiddenInput]
public int DisplayOrder { get; set; }
[ExcelHeader("工作单位")]
[ReadOnly(true)]
[SkipSearch, SkipList]
[Display(Order = 10, Name = "工作单位")]
[Required(ErrorMessage = "必填项")]
public string Organ { get; set; } = "测试数据";
[ExcelHeader("姓名")]
[ReadOnly(true)]
[RegularExpression(@"^[\u4e00-\u9fa5\d]+$", ErrorMessage = "")]
[Display(Order = 20, Name = "教师姓名")]
[Required(ErrorMessage = "必填项")]
public string RealName { get; set; }
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 30, Name = "人员类别")]
[Required(ErrorMessage = "必填项")]
public string UserType { get; set; }
[ExcelHeader("性别")]
[SkipSearch]
[SelectList]
[Display(Order = 40, Name = "性别")]
[Required(ErrorMessage = "必填项")]
public string Sex { get; set; }
[ExcelHeader("出生年月")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 50, Name = "出生日期")]
[Required(ErrorMessage = "必填项")]
public DateTime? Birthday { get; set; }
[ExcelHeader("年龄")]
[SkipSearch, SkipList]
[HiddenInput]
[Description("根据身份证计算")]
[Display(Order = 60, Name = "年龄")]
[NotMapped]
public int? Age { get; set; }
[ExcelHeader("民族")]
[Description("选择项中没有则手动填写")]
[SkipSearch]
[SelectList(true)]
[Display(Order = 70, Name = "民族")]
[Required(ErrorMessage = "必填项")]
public string Nation { get; set; }
[ExcelHeader("籍贯")]
[SkipSearch]
[Description("以 省/自治区/直辖市 + 区/县 等形式填写")]
[Display(Order = 80, Name = "籍贯")]
[Required(ErrorMessage = "必填项")]
public string NativePlace { get; set; }
[ExcelHeader("联系电话")]
[SkipSearch, SkipList]
[RegularExpression(@"(^$|^\d{7}$|^\d{11}$)", ErrorMessage = "电话号码格式错误")]
[Display(Order = 90, Name = "联系电话")]
[Required(ErrorMessage = "必填项")]
public string PhoneNumber { get; set; }
[ExcelHeader("身份证号")]
[SkipSearch, SkipList]
[RegularExpression(@"^(\d{15}|\d{17}(X|\d))$", ErrorMessage = "身份证号格式错误")]
[Display(Order = 100, Name = "身份证号")]
[Required(ErrorMessage = "必填项")]
public string IdNumber { get; set; }
[ExcelHeader("参加工作\r\n时间")]
[Description("是否必填")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 110, Name = "参加工作时间")]
[Required(ErrorMessage = "必填项")]
public DateTime? JobStart { get; set; }
[ExcelHeader("任教时间")]
[Description("是否必填")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 120, Name = "任教时间")]
public DateTime? TeachDate { get; set; }
[ExcelHeader("到\r\n现所在校\r\n时间")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 130, Name = "到现所在校时间")]
[Required(ErrorMessage = "必填项")]
public DateTime? CurrentJobStart { get; set; }
[SkipSearch, SkipList]
[Display(Order = 131, Name = "到现所在校时间-已审核")]
public bool CurrentJobStartChecked { get; set; }
[ExcelHeader("工龄(年)")]
[SkipSearch, SkipList]
[HiddenInput]
[Description("根据参加工作时间计算")]
[Display(Order = 132, Name = "工龄(年)")]
[NotMapped]
public int? JobAgeYear { get; set; }
[ExcelHeader("工龄(月)")]
[SkipSearch, SkipList]
[HiddenInput]
[Description("根据参加工作时间计算")]
[Display(Order = 133, Name = "工龄(月)")]
[NotMapped]
public int? JobAgeMonth { get; set; }
[ExcelHeader("政治面貌")]
[Description("是否必填")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 150, Name = "政治面貌")]
[Required(ErrorMessage = "必填项")]
public string Politics { get; set; }
[ExcelHeader("入党(派)\r\n时间")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 160, Name = "入党(派)时间")]
public DateTime? JoinPartyDate { get; set; }
[ExcelHeader("最高职称")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 170, Name = "最高职称")]
[Required(ErrorMessage = "必填项")]
public string MaxTitle { get; set; }
[SkipSearch, SkipList]
[Display(Order = 171, Name = "最高职称-已审核")]
public bool MaxTitleChecked { get; set; }
[ExcelHeader("最高职称\r\n取得时间")]
[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]
[Display(Order = 185, Name = "最高职称已聘")]
[Required(ErrorMessage = "必填项")]
public bool? IsJobAsMaxTitle { get; set; }
[ExcelHeader("最高职称聘任时间,已聘\r\n(聘任时间)","2,2")]
[HtmlData("JobAsMaxTitle1")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Remote(nameof(JobAsMaxTitleDate), "Ajax", AdditionalFields = nameof(IsJobAsMaxTitle))]
[Display(Order = 190, Name = "最高职称已聘聘任时间")]
[Required(ErrorMessage = "必填项")]
public DateTime? JobAsMaxTitleDate { get; set; }
[SkipSearch, SkipList]
[Display(Order = 191, Name = "已审核")]
public bool JobAsMaxTitleDateChecked { get; set; }
[ExcelHeader("最高职称聘任时间,未聘,原由", "2,1,1")]
[HtmlData("JobAsMaxTitle2")]
[SkipSearch, SkipList]
[Description("如:乡村教师职评、暂未岗位变更、新考/调入等")]
[Display(Order = 200, Name = "最高职称未聘原由")]
[Required(ErrorMessage = "必填项")]
public string JobAsNotMaxTitleReason { get; set; }
[SkipSearch, SkipList]
[Display(Order = 191, Name = "已审核")]
public bool JobAsNotMaxTitleReasonChecked { get; set; }
[ExcelHeader("最高职称聘任时间,未聘,现聘任职称", "2,1,1")]
[HtmlData("JobAsMaxTitle2")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 210, Name = "现聘任职称")]
[Required(ErrorMessage = "必填项")]
public string NotMaxTitle { get; set; }
[SkipSearch, SkipList]
[Display(Order = 211, Name = "已审核")]
public bool NotMaxTitleChecked { get; set; }
[ExcelHeader("最高职称聘任时间,未聘,现聘任职称\r\n取得时间", "2,1,1")]
[HtmlData("JobAsMaxTitle2")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 220, Name = "现聘任职称取得时间")]
[Required(ErrorMessage = "必填项")]
public DateTime? NotMaxTitleStart { get; set; }
[SkipSearch, SkipList]
[Display(Order = 221, Name = "已审核")]
public bool NotMaxTitleStartChecked { get; set; }
[ExcelHeader("最高职称聘任时间,未聘,现聘任职称\r\n聘任时间", "2,1,1")]
[HtmlData("JobAsMaxTitle2")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 230, Name = "现聘任职称聘任时间")]
[Required(ErrorMessage = "必填项")]
public DateTime? JobAsNotMaxTitleDate { get; set; }
[SkipSearch, SkipList]
[Display(Order = 231, Name = "已审核")]
public bool JobAsNotMaxTitleDateChecked { get; set; }
[ExcelHeader("岗位类别")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 240, Name = "岗位类别")]
[Required(ErrorMessage = "必填项")]
public string PostType { get; set; }
[ExcelHeader("现岗位等级")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 250, Name = "现岗位等级")]
[Required(ErrorMessage = "必填项")]
public string PostGrade { get; set; }
[SkipSearch, SkipList]
[Display(Order = 251, Name = "已审核")]
public bool PostGradeChecked { get; set; }
[ExcelHeader("变更至现岗位等级时间\r\n以文件\r\n等为准")]
[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; }
[ExcelHeader("享受学历\r\n待遇等级")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 270, Name = "享受学历待遇等级")]
public string EducationGrade { get; set; }
[SkipSearch, SkipList]
[Display(Order = 271, Name = "已审核")]
public bool EducationGradeChecked { get; set; }
[ExcelHeader("享受学历\r\n待遇等级时间\r\n以文件为准")]
[Description("以文件为准")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 280, Name = "享受学历待遇等级时间")]
[Required(ErrorMessage = "必填项")]
public DateTime? EducationGradeDate { get; set; }
[SkipSearch, SkipList]
[Display(Order = 281, Name = "已审核")]
public bool EducationGradeDateChecked { get; set; }
[ExcelHeader("全日制教育,毕业院校\r\n以毕业证为准","2,2")]
[Description("填写毕业院校全称")]
[SkipSearch, SkipList]
[Display(Order = 290, Name = "全日制教育毕业院校")]
[Required(ErrorMessage = "必填项")]
public string FullTimeSchool { get; set; }
[ExcelHeader("全日制教育,毕业院校分类", "2,2")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 300, Name = "全日制教育毕业院校分类")]
[Required(ErrorMessage = "必填项")]
public string FullTimeSchoolType { get; set; }
[ExcelHeader("全日制教育,专业\r\n以毕业证书为准", "2,2")]
[Description("严格按照毕业证书填写")]
[SkipSearch, SkipList]
[Display(Order = 310, Name = "全日制教育毕业证书专业")]
[Required(ErrorMessage = "必填项")]
public string FullTimeSchoolMajor { get; set; }
[ExcelHeader("全日制教育,学历", "2,2")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 320, Name = "全日制教育学历")]
[Required(ErrorMessage = "必填项")]
public string FullTimeSchoolEducation { get; set; }
[ExcelHeader("全日制教育,学历\r\n取得时间","2,2")]
[SkipSearch, SkipList]
[Display(Order = 330, Name = "全日制教育学历取得时间")]
[DataType(DataType.Date)]
[Required(ErrorMessage = "必填项")]
public DateTime? FullTimeSchoolEducationDate { get; set; }
[ExcelHeader("在职教育,毕业院校\r\n以毕业证为准", "2,2")]
[Description("是否提示【填写毕业院校全称】")]
[SkipSearch, SkipList]
[Display(Order = 350, Name = "在职教育毕业院校")]
public string JobTimeSchool { get; set; }
[ExcelHeader("在职教育,毕业院校分类", "2,2")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 340, Name = "在职教育毕业院校分类")]
public string JobTimeSchoolType { get; set; }
[ExcelHeader("在职教育,专业\r\n以毕业证书为准", "2,2")]
[Description("是否提示【严格按照毕业证书填写】")]
[SkipSearch, SkipList]
[Display(Order = 360, Name = "在职教育毕业证书专业")]
public string JobTimeSchoolMajor { get; set; }
[ExcelHeader("在职教育,学历", "2,2")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 370, Name = "在职教育学历")]
public string JobTimeSchoolEducation { get; set; }
[ExcelHeader("在职教育,学历\r\n取得时间", "2,2")]
[SkipSearch, SkipList]
[Display(Order = 380, Name = "在职教育学历取得时间")]
[DataType(DataType.Date)]
public DateTime? JobTimeSchoolEducationDate { get; set; }
[ExcelHeader("最高\r\n学历")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 390, Name = "最高学历")]
public string MaxEducation { get; set; }
[ExcelHeader("最高\r\n学位")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 400, Name = "最高学位")]
public string MaxDegree { get; set; }
[ExcelHeader("是否担任班主任")]
[SkipSearch, SkipList]
[Display(Order = 410, Name = "是否担任班主任")]
public bool IsClassTeacher { get; set; }
[SkipSearch, SkipList]
[Display(Order = 411, Name = "已审核")]
public bool IsClassTeacherChecked { get; set; }
[ExcelHeader("主要任教学段")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 420, Name = "主要任教学段")]
[Required(ErrorMessage = "必填项")]
public string MainTeachPeriod { get; set; }
[SkipSearch, SkipList]
[Display(Order = 421, Name = "已审核")]
public bool MainTeachPeriodChecked { get; set; }
[ExcelHeader("主要任教学科")]
[Description("选择项中没有则手动填写")]
[SkipSearch, SkipList]
[SelectList(true)]
[Display(Order = 430, Name = "主要任教学科")]
[Required(ErrorMessage = "必填项")]
public string MainTeachSubject { get; set; }
[SkipSearch, SkipList]
[Display(Order = 432, Name = "已审核")]
public bool MainTeachSubjectChecked { get; set; }
[ExcelHeader("主要任教\r\n年级")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 440, Name = "主要任教年级")]
[Required(ErrorMessage = "必填项")]
public string MainTeachGrade { get; set; }
[SkipSearch, SkipList]
[Display(Order = 441, Name = "已审核")]
public bool MainTeachGradeChecked { get; set; }
[ExcelHeader("兼职任教学段")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 450, Name = "兼职任教学段")]
public string OtherTeachPeriod { get; set; }
[SkipSearch, SkipList]
[Display(Order = 451, Name = "已审核")]
public bool OtherTeachPeriodChecked { get; set; }
[ExcelHeader("兼职任教学科")]
[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; }
[ExcelHeader("在编人员在岗情况,在编在岗\r\n是否为学校中层及以上,是,职务","1,1,1,1")]
[Description("选择项中没有则手动填写")]
[HtmlData("HasPosition11")]
[SkipSearch, SkipList]
[SelectList(true)]
[Display(Order = 470, Name = "职务")]
[Required(ErrorMessage = "必填项")]
public string Position { get; set; }
[SkipSearch, SkipList]
[Display(Order = 471, Name = "已审核")]
public bool PositionChecked { get; set; }
[ExcelHeader("在编人员在岗情况,在编在岗\r\n是否为学校中层及以上,是,任命时间", "1,1,1,1")]
[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; }
[ExcelHeader("在编人员在岗情况,在编在岗\r\n是否为学校中层及以上,否\r\n(一线教师)", "1,1,2")]
[Description("填写所教学科全称")]
[HtmlData("HasPosition12")]
[SkipSearch, SkipList]
[Required(ErrorMessage = "必填项")]
[Display(Order = 490, Name = "一线教师")]
public string FrontTeacher { get; set; }
[ExcelHeader("在编人员在岗情况,在编不在岗,原由", "1,1,2")]
[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; }
[ExcelHeader("在编人员在岗情况,在编不在岗,不在岗\r\n起始时间", "1,1,2")]
[HtmlData("HasPosition2")]
[SkipSearch, SkipList]
[DataType(DataType.Date)]
[Display(Order = 510, Name = "不在岗起始时间")]
[Required(ErrorMessage = "必填项")]
public DateTime? NotOnPostReasonDate { get; set; }
[SkipSearch, SkipList]
[Display(Order = 511, Name = "已审核")]
public bool NotOnPostReasonDateChecked { get; set; }
[ExcelHeader("教师资格证\r\n种类")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 520, Name = "教师资格证种类")]
[Required(ErrorMessage = "必填项")]
public string TeacherCardType { get; set; }
[ExcelHeader("教师资格证\r\n任教学科\r\n(严格按照资格证书填写)")]
[Description("严格按照资格证书填写")]
[SkipSearch, SkipList]
[Display(Order = 530, Name = "任教学科")]
public string TeacherCardSubject { get; set; }
[ExcelHeader("普通话\r\n等级")]
[SkipSearch, SkipList]
[SelectList]
[Display(Order = 540, Name = "普通话等级")]
public string TeacherCardLangLevel { get; set; }
[ExcelHeader("现住址详细地址-区县")]
[SkipSearch, SkipList]
[SelectList(true)]
[Display(Order = 550, Name = "现家庭地址-区县")]
[Required(ErrorMessage = "必填项")]
public string CurrentAddressArea { get; set; }
[ExcelHeader("现住址详细地址\r\n街道 - 小区)")]
[SkipSearch, SkipList]
[Display(Order = 560, Name = "现家庭详细地址")]
[Required(ErrorMessage = "必填项")]
public string CurrentAddressStreat { get; set; }
[ExcelHeader("备注")]
[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) });
}
}
}
}
}
}