using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using EMIS.ViewModel.CacheManage;
using System.ComponentModel.DataAnnotations;

namespace EMIS.ViewModel.MinorManage.MinorCourseManage
{
    public class MinorSpecialtyCourseView
    {
        /// <summary>
        /// 主键ID
        /// </summary>
        public Guid? MinorCourseID { get; set; }
        /// <summary>
        /// 院系所ID
        /// </summary>
        [Display(ResourceType = typeof(EMIS.Resources.DataAnnotations.Label), Name = "College")]
        public Guid? CollegeID { get; set; }
        /// <summary>
        /// 教研室
        /// </summary>
        [Required]
        [DisplayName("教研室")]
        public Guid? DepartmentID { get; set; }

        /// <summary>
        /// 教研室代码
        /// </summary>
        [DisplayName("教研室代码")]
        public string DepartmentCode { get; set; }

        /// <summary>
        /// 教研室
        /// </summary>
        [DisplayName("教研室")]
        public string DepartmentName { get; set; }

        /// <summary>
        /// 标准专业
        /// </summary>
        [DisplayName("专业名称")]
        public int? StandardID { get; set; }

        /// <summary>
        /// 专业代码(国标码)
        /// </summary>
        [DisplayName("专业代码")]
        public string Code { get; set; }

        /// <summary>
        /// 专业代码(国标码)
        /// </summary>
        [DisplayName("专业代码")]
        public string SpecialtyCode
        {
            get
            {
                var inistStandardCode = IdNameExt.GetDictionaryItem(DictionaryItem.CF_Standard.ToString())
                    .Where(x => x.Value == StandardID)
                    .Select(x => x.Code).FirstOrDefault();
                return (inistStandardCode != null ? inistStandardCode.PadLeft(6, '0') : "");
            }
        }
        [DisplayName("专业代码")]
        public string SpecialtyCodeStr { get; set; }
        /// <summary>
        /// 专业名称
        /// </summary>
        [DisplayName("专业名称")]
        public string StandardName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_Standard.ToString())
                    .Where(x => x.Value == StandardID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        [DisplayName("专业名称")]
        public string StandardNameStr { get; set; }

        [DisplayName("学制")]
        public string LearnSystemStr { get; set; }

        [Display(ResourceType = typeof(EMIS.Resources.DataAnnotations.Label), Name = "EducationID")]
        public string EducationNameStr { get; set; }

        [DisplayName("学习形式")]
        public string LearningformNameStr { get; set; }


        /// <summary>
        /// 学制
        /// </summary>
        [DisplayName("学制")]
        public decimal? LearnSystem { get; set; }

        /// <summary>
        /// 培养层次
        /// </summary>
        [Display(ResourceType = typeof(EMIS.Resources.DataAnnotations.Label), Name = "EducationID")]
        public int? EducationID { get; set; }

        /// <summary>
        /// 培养层次名称
        /// </summary>
        [Display(ResourceType = typeof(EMIS.Resources.DataAnnotations.Label), Name = "EducationName")]
        public string EducationName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_Education.ToString())
                    .Where(x => x.Value == EducationID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 学习形式
        /// </summary>
        [DisplayName("学习形式")]
        public int? LearningformID { get; set; }

        /// <summary>
        /// 学习形式名称
        /// </summary>
        [DisplayName("学习形式名称")]
        public string LearningformName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_Learningform.ToString())
                    .Where(x => x.Value == LearningformID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 课程资料
        /// </summary>
        [Required]
        [DisplayName("课程资料")]
        public Guid? CoursematerialID { get; set; }

        /// <summary>
        /// 课程资料代码
        /// </summary>
        [DisplayName("课程资料代码")]
        public string CourseCode { get; set; }

        /// <summary>
        /// 课程名称
        /// </summary>
        [DisplayName("课程名称")]
        public string CourseName { get; set; }

        /// <summary>
        /// 课程结构
        /// </summary>
        [DisplayName("课程结构")]
        public int? CourseStructureID { get; set; }

        [DisplayName("课程结构")]
        public string CourseStructureNameStr { get; set; }
        /// <summary>
        /// 课程结构
        /// </summary>
        [DisplayName("课程结构")]
        public string CourseStructureName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_CourseStructure.ToString())
                    .Where(x => x.Value == CourseStructureID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 课程类别
        /// </summary>
        [Required]
        [DisplayName("课程属性")]
        public int? CourseCategoryID { get; set; }

        [DisplayName("课程属性")]
        public string CourseCategoryNameStr { get; set; }
        /// <summary>
        /// 课程类别
        /// </summary>
        [DisplayName("课程属性")]
        public string CourseCategoryName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_CourseCategory.ToString())
                    .Where(x => x.Value == CourseCategoryID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 课程类型
        /// </summary>
        [Required]
        [DisplayName("课程类型")]
        public int? CourseTypeID { get; set; }

        [DisplayName("课程类型")]
        public string CourseTypeStr { get; set; }

        /// <summary>
        /// 课程类型名称
        /// </summary>
        [DisplayName("课程类型名称")]
        public string CourseTypeName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_CourseType.ToString())
                    .Where(x => x.Value == CourseTypeID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 课程性质
        /// </summary>
        [Required]
        [DisplayName("课程性质")]
        public int? CourseQualityID { get; set; }
        [DisplayName("课程性质名称")]
        public string CourseQualityNameStr { get; set; }
        ///<summary>
        ///学生课程类型
        /// </summary>
        [DisplayName("课程类型")]
        public string StuCourseTypeName
        {
            get
            {
                var type = CourseQualityName;
                if (type == "必修课")
                {
                    return "是";
                }
                else
                {
                    return "否";
                }
            }
        }
        /// <summary>
        /// 课程性质
        /// </summary>
        [DisplayName("课程性质名称")]
        public string CourseQualityName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_CourseQuality.ToString())
                    .Where(x => x.Value == CourseQualityID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 授课方式
        /// </summary>
        [DisplayName("授课方式")]
        public List<int> TeachingModeID { get; set; }

        [DisplayName("授课方式")]
        public string TeachingModeStr { get; set; }

        /// <summary>
        /// 授课地点
        /// </summary>
        [DisplayName("授课地点")]
        public List<int> TeachingPlaceID { get; set; }

        [DisplayName("授课地点")]
        public string TeachingPlaceStr { get; set; }

        /// <summary>
        /// 实践类型
        /// </summary>
        [DisplayName("实践类型")]
        public int? PracticeTypeID { get; set; }


        [DisplayName("实践类型")]
        public string PracticeTypeNameStr { get; set; }

        /// <summary>
        /// 实践类型
        /// </summary>
        [DisplayName("实践类型")]
        public string PracticeTypeName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.EM_PracticeType.ToString())
                    .Where(x => x.Value == PracticeTypeID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 考试方式
        /// </summary>
        [Required]
        [DisplayName("考试方式")]
        public int? ExaminationModeID { get; set; }


        [DisplayName("考试方式名称")]
        public string ExaminationModeNameStr { get; set; }
        /// <summary>
        /// 考试方式名称
        /// </summary>
        [DisplayName("考试方式名称")]
        public string ExaminationModeName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_ExaminationMode.ToString())
                    .Where(x => x.Value == ExaminationModeID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 授课语言
        /// </summary>
        [DisplayName("授课语言")]
        public int? TeachinglanguageID { get; set; }


        [DisplayName("授课语言")]
        public string TeachinglanguageNameStr { get; set; }
        /// <summary>
        /// 授课语言
        /// </summary>
        [DisplayName("授课语言")]
        public string TeachinglanguageName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_Teachinglanguage.ToString())
                    .Where(x => x.Value == TeachinglanguageID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 开课学年
        /// </summary>
        [Required]
        [DisplayName("开课学年")]
        public int? SchoolyearNumID { get; set; }

        [DisplayName("开课学年")]
        public string SchoolyearNumNameStr { get; set; }

        /// <summary>
        /// 开课学年
        /// </summary>
        [DisplayName("开课学年")]
        public string SchoolyearNumName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_SchoolyearNum.ToString())
                    .Where(x => x.Value == SchoolyearNumID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 学期
        /// </summary>
        [Required]
        [DisplayName("学期")]
        public int? SchoolcodeID { get; set; }

        [DisplayName("学期")]
        public string SchoolcodeStr { get; set; }

        /// <summary>
        /// 学期
        /// </summary>
        [DisplayName("学期")]
        public string SchoolcodeName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_Semester.ToString()).Where(x => x.Value == SchoolcodeID).Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 开课学期
        /// </summary>
        [Required]
        [DisplayName("开课学期")]
        public int? StarttermID { get; set; }

        /// <summary>
        /// 开课学期
        /// </summary>
        [DisplayName("开课学期")]
        public string StarttermName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_Startterm.ToString())
                    .Where(x => x.Value == StarttermID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 精品课程
        /// </summary>
        [DisplayName("精品课程")]
        public int? CourseFineID { get; set; }

        [DisplayName("精品课程")]
        public string CourseFineNameStr { get; set; }

        /// <summary>
        /// 精品课程
        /// </summary>
        [DisplayName("精品课程")]
        public string CourseFineName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_CourseFine.ToString())
                    .Where(x => x.Value == CourseFineID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }
        /// <summary>
        /// 成绩类型
        /// </summary>
        [Required]
        [DisplayName("成绩类型")]
        public int? ResultTypeID { get; set; }

        /// <summary>
        /// 成绩类型
        /// </summary>
        [DisplayName("成绩类型")]
        public string ResultTypeName
        {
            get
            {
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_ResultType.ToString())
                    .Where(x => x.Value == ResultTypeID)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 成绩类型
        /// </summary>
        [DisplayName("成绩类型")]
        public string ResultTypeNameStr { get; set; }

        /// <summary>
        /// 是否专业核心
        /// </summary>
        [DisplayName("是否专业核心")]
        public bool IsSpecialtycore { get; set; }



        /// <summary>
        /// 是否专业核心
        /// </summary>
        [DisplayName("是否专业核心")]
        public string IsSpecialtycoreName { get; set; }

        /// <summary>
        /// 是否合作开发课
        /// </summary>
        [DisplayName("是否合作开发课")]
        public bool IsCooperation { get; set; }

        /// <summary>
        /// 是否合作开发课
        /// </summary>
        [DisplayName("是否合作开发课")]
        public string IsCooperationName { get; set; }

        /// <summary>
        /// 是否必修课
        /// </summary>
        [Display(ResourceType = typeof(EMIS.Resources.DataAnnotations.Label), Name = "IsRequired")]
        public bool IsRequired { get; set; }

        /// <summary>
        /// 是否必修课
        /// </summary>
        [DisplayName("是否必修课")]
        public string IsRequiredName { get; set; }

        /// <summary>
        /// 是否网上选修课
        /// </summary>
        [DisplayName("是否网上选修课")]
        public bool IsElective { get; set; }

        /// <summary>
        /// 是否网上选修课
        /// </summary>
        [DisplayName("是否网上选修课")]
        public string IsElectiveName { get; set; }

        /// <summary>
        /// 是否网络课程
        /// </summary>
        [DisplayName("是否网络课程")]
        public bool IsNetworkCourse { get; set; }

        /// <summary>
        /// 是否网络课程
        /// </summary>
        [DisplayName("是否网络课程")]
        public string IsNetworkCourseName { get; set; }

        /// <summary>
        /// 是否学位主干课
        /// </summary>
        [DisplayName("是否学位主干课")]
        public bool IsMainCourse { get; set; }

        /// <summary>
        /// 是否学位主干课
        /// </summary>
        [DisplayName("是否学位主干课")]
        public string IsMainCourseName { get; set; }

        /// <summary>
        /// 是否启用
        /// </summary>
        public bool IsCourseEnable { get; set; }

        /// <summary>
        /// 是否启用
        /// </summary>
        [DisplayName("是否启用")]
        public bool IsEnable { get; set; }

        /// <summary>
        /// 学期
        /// </summary>
        [DisplayName("是否启用")]
        public string IsEnableName
        {
            get
            {
                int value = 0;
                if (IsEnable==true)
                {
                    value = 1;
                }
                return IdNameExt.GetDictionaryItem(DictionaryItem.CF_GeneralPurpose.ToString())
                    .Where(x => x.Value == value)
                    .Select(x => x.Name).FirstOrDefault();
            }
        }

        /// <summary>
        /// 是否启用
        /// </summary>
        [DisplayName("是否启用")]
        public string IsEnableStr { get; set; }

        /// <summary>
        /// 学分
        /// </summary>
        [Required]
        [DisplayName("学分")]
        [DisplayFormat(DataFormatString = "{0:#.0}")]
        [RegularExpression(@"^\d+(\.\d{1,1})?$", ErrorMessage = "请输整数或保留1位小数")]
        public decimal? Credit { get; set; }

        [DisplayName("学分")]
        public string CreditStr { get; set; }

        /// <summary>
        /// 总学时
        /// </summary>
        [DisplayName("总学时")]
        [RegularExpression(@"^[0-9]*$", ErrorMessage = "请输整数")]
        public int? Totalhours { get; set; }

        /// <summary>
        /// 理论学时
        /// </summary>
        [Required]
        [DisplayName("理论学时")]
        [RegularExpression(@"^[0-9]*$", ErrorMessage = "请输整数")]
        public int? TheoryCourse { get; set; }

        [DisplayName("理论学时")]
        public string TheoryCourseStr { get; set; }

        /// <summary>
        /// 实践学时
        /// </summary>
        [Required]
        [DisplayName("实践学时")]
        [RegularExpression(@"^[0-9]*$", ErrorMessage = "请输整数")]
        public int? Practicehours { get; set; }

        [DisplayName("实践学时")]
        public string PracticehoursStr { get; set; }

        /// <summary>
        /// 实验学时
        /// </summary>
        [Required]
        [DisplayName("实验学时")]
        [RegularExpression(@"^[0-9]*$", ErrorMessage = "请输整数")]
        public int? Trialhours { get; set; }

        [DisplayName("实验学时")]
        public string TrialhoursStr { get; set; }

        /// <summary>
        /// 总周次
        /// </summary>
        [DisplayName("总周次")]
        [RegularExpression(@"^[0-9]*$", ErrorMessage = "请输整数")]
        public int? SchoolweeksNum { get; set; }

        /// <summary>
        /// 每周次数
        /// </summary>
        [DisplayName("每周次数")]
        public int? WeeklyNum { get; set; }

        /// <summary>
        /// 理论周次
        /// </summary>
        [DisplayName("理论周次")]
        public int? TheoryWeeklyNum { get; set; }

        /// <summary>
        /// 实践周次
        /// </summary>
        [DisplayName("实践周次")]
        public int? PracticeWeeklyNum { get; set; }

        /// <summary>
        /// 实验周次
        /// </summary>
        [DisplayName("实验周次")]
        public int? TrialWeeklyNum { get; set; }

        /// <summary>
        /// 开始周次
        /// </summary>
        [DisplayName("开始周次")]
        [Required]
        [RegularExpression(@"^[0-9]*$", ErrorMessage = "请输整数")]
        public int? StartWeeklyNum { get; set; }

        /// <summary>
        /// 结束周次
        /// </summary>
        [DisplayName("结束周次")]
        [Required]
        [RegularExpression(@"^[0-9]*$", ErrorMessage = "请输整数")]
        public int? EndWeeklyNum { get; set; }

        /// <summary>
        /// 周学时
        /// </summary>
        [DisplayName("周学时")]
        public int? WeeklyHours { get; set; }

        /// <summary>
        /// 创建人
        /// </summary>
        [DisplayName("创建人")]
        public Guid? CreateUserID { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        [DisplayName("创建时间")]
        public DateTime? CreateTime { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        [DisplayName("备注")]
        public string Remarks { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        [DisplayName("错误信息")]
        public string ErrorMessage { get; set; }

        private bool _isExcelVaildateOK = true;

        /// <summary>
        /// Excel验证是否通过,默认为true
        /// <para>true:通过;false:不通过</para>
        /// </summary>
        public bool IsExcelVaildateOK
        {
            get { return _isExcelVaildateOK; }
            set { _isExcelVaildateOK = value; }
        }
    }
}