using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Bowin.Common.Linq.Entity;
using EMIS.ViewModel;
using EMIS.ViewModel.CultureplanManage;
using EMIS.ViewModel.CultureplanManage.PlanManagement;
using EMIS.ViewModel.UniversityManage.SpecialtyClassManage;
using EMIS.ViewModel.Students;

namespace EMIS.CommonLogic.CultureplanManage.PlanManagement
{
    public interface ISpecialtyPlanServices
    {
        /// <summary>
        /// 查询对应的专业计划信息SpecialtyPlanView
        /// 注:普教版本(年级专业)
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="schoolyearID"></param>
        /// <param name="campusID"></param>
        /// <param name="collegeID"></param>
        /// <param name="yearID"></param>
        /// <param name="standardID"></param>
        /// <param name="educationID"></param>
        /// <param name="learningformID"></param>
        /// <param name="learnSystem"></param>
        /// <param name="grademajorID"></param>
        /// <param name="coursematerialID"></param>
        /// <param name="teachingModeID"></param>
        /// <param name="handleModeID"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        IGridResultSet<SpecialtyPlanView> GetSpecialtyPlanViewGrid(ConfiguretView configuretView, Guid? schoolyearID, Guid? campusID, 
                Guid? collegeID, int? yearID, int? standardID, int? educationID, int? learningformID, string learnSystem, Guid? grademajorID,
                Guid? coursematerialID, int? teachingModeID, int? handleModeID, int pageIndex, int pageSize);

        /// <summary>
        /// 查询对应的专业计划信息List
        /// 注:普教版本(年级专业)
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="schoolyearID"></param>
        /// <param name="campusID"></param>
        /// <param name="collegeID"></param>
        /// <param name="yearID"></param>
        /// <param name="standardID"></param>
        /// <param name="educationID"></param>
        /// <param name="learningformID"></param>
        /// <param name="learnSystem"></param>
        /// <param name="grademajorID"></param>
        /// <param name="coursematerialID"></param>
        /// <param name="teachingModeID"></param>
        /// <param name="handleModeID"></param>
        /// <returns></returns>
        IList<SpecialtyPlanView> GetSpecialtyPlanViewList(ConfiguretView configuretView, Guid? schoolyearID, Guid? campusID, 
                Guid? collegeID, int? yearID, int? standardID, int? educationID, int? learningformID, string learnSystem, Guid? grademajorID,
                Guid? coursematerialID, int? teachingModeID, int? handleModeID);

        /// <summary>
        /// 查询对应的专业计划信息SpecialtyPlanView(根据专业计划ID)
        /// </summary>
        /// <param name="specialtyPlanID"></param>
        /// <returns></returns>
        SpecialtyPlanView GetSpecialtyPlanView(Guid? specialtyPlanID);

        /// <summary>
        /// 编辑(新增、修改,业务主键:学年学期ID、年级专业ID、课程信息ID)
        /// 注:刷新相关的执行计划信息
        /// </summary>
        /// <param name="specialtyPlanView"></param>
        void SpecialtyPlanEdit(SpecialtyPlanView specialtyPlanView);

        /// <summary>
        /// 专业课程模版批量新增
        /// </summary>
        /// <param name="specialtyCourseViewList"></param>
        /// <param name="specialtyPlanView"></param>
        /// <returns></returns>
        string SpecialtyPlanBatchAdd(List<SpecialtyCourseView> specialtyCourseViewList, SpecialtyPlanView specialtyPlanView);

        /// <summary>
        /// 查询对应的未新增专业课程信息SpecialtyCourseView
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="departmentID"></param>
        /// <param name="standardID"></param>
        /// <param name="educationID"></param>
        /// <param name="learningformID"></param>
        /// <param name="learnSystem"></param>
        /// <param name="coursematerialID"></param>
        /// <param name="starttermID"></param>
        /// <param name="handleModeID"></param>
        /// <param name="yearID"></param>
        /// <param name="grademajorID"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        IGridResultSet<SpecialtyCourseView> GetSpecialtyCourseViewNoAddGrid(ConfiguretView configuretView, Guid? departmentID,
                int? standardID, int? educationID, int? learningformID, string learnSystem, Guid? coursematerialID,
                int? starttermID, int? handleModeID, int? yearID, Guid? grademajorID, int pageIndex, int pageSize);

        /// <summary>
        /// 查询对应的未新增专业课程信息List
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="departmentID"></param>
        /// <param name="standardID"></param>
        /// <param name="educationID"></param>
        /// <param name="learningformID"></param>
        /// <param name="learnSystem"></param>
        /// <param name="coursematerialID"></param>
        /// <param name="starttermID"></param>
        /// <param name="handleModeID"></param>
        /// <param name="yearID"></param>
        /// <param name="grademajorID"></param>
        /// <returns></returns>
        IList<SpecialtyCourseView> GetSpecialtyCourseViewNoAddList(ConfiguretView configuretView, Guid? departmentID,
                int? standardID, int? educationID, int? learningformID, string learnSystem, Guid? coursematerialID,
                int? starttermID, int? handleModeID, int? yearID, Guid? grademajorID);

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="specialtyPlanIDs"></param>
        /// <returns></returns>
        bool SpecialtyPlanDelete(List<Guid?> specialtyPlanIDs);

        /// <summary>
        /// 专业计划执行
        /// 注:普教版本(年级专业)
        /// </summary>
        /// <param name="specialtyPlanIDList"></param>
        /// <returns></returns>
        string SpecialtyPlanExecute(List<Guid?> specialtyPlanIDList);

        /// <summary>
        /// 查询专业计划对应的授课方式List
        /// </summary>
        /// <param name="specialtyPlanID"></param>
        /// <returns></returns>
        List<string> GetTeachingModeTypeList(Guid? specialtyPlanID);

        /// <summary>
        /// 查询专业计划对应的授课地点List
        /// </summary>
        /// <param name="specialtyPlanID"></param>
        /// <returns></returns>
        List<string> GetTeachingPlaceList(Guid? specialtyPlanID);

        /// <summary>
        /// 查询专业计划对应的计划范围信息ClassmajorView
        /// 注:注:普教版本(年级专业)
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="specialtyPlanID"></param>
        /// <param name="classmajorID"></param>
        /// <param name="inSchoolStatus"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        IGridResultSet<ClassmajorView> GetPlanRangeViewGrid(ConfiguretView configuretView, Guid? specialtyPlanID, 
                Guid? classmajorID, int? inSchoolStatus, int pageIndex, int pageSize);

        /// <summary>
        /// 查询专业计划对应的计划范围信息List
        /// 注:注:普教版本(年级专业)
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="specialtyPlanID"></param>
        /// <param name="classmajorID"></param>
        /// <param name="inSchoolStatus"></param>
        /// <returns></returns>
        IList<ClassmajorView> GetPlanRangeViewList(ConfiguretView configuretView, Guid? specialtyPlanID, 
                Guid? classmajorID, int? inSchoolStatus);

        /// <summary>
        /// 查询专业计划对应的学生信息BaseStudentView
        /// 注:普教版本(年级专业)
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="specialtyPlanID"></param>
        /// <param name="classmajorID"></param>
        /// <param name="inSchoolStatus"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        IGridResultSet<BaseStudentView> GetBaseStudentViewGrid(ConfiguretView configuretView, Guid? specialtyPlanID,
                Guid? classmajorID, int? inSchoolStatus, int pageIndex, int pageSize);

        /// <summary>
        /// 查询专业计划对应的学生信息List
        /// 注:普教版本(年级专业)
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="specialtyPlanID"></param>
        /// <param name="classmajorID"></param>
        /// <param name="inSchoolStatus"></param>
        /// <returns></returns>
        IList<BaseStudentView> GetBaseStudentViewList(ConfiguretView configuretView, Guid? specialtyPlanID,
                Guid? classmajorID, int? inSchoolStatus);

        /// <summary>
        /// 新增(数据库表,用于报表)
        /// </summary>
        /// <param name="tempTableName"></param>
        /// <param name="ids"></param>
        void CreateIDTempTable(string tempTableName, List<Guid?> ids);

        /// <summary>
        /// 删除(数据库表,用于报表)
        /// </summary>
        /// <param name="tempTableName"></param>
        /// <returns></returns>
        bool DeleteTempTable(string tempTableName);

        /// <summary>
        /// 专业计划信息Excel导入
        /// 注:年级专业
        /// </summary>
        /// <param name="cellheader"></param>
        /// <param name="inCount"></param>
        /// <param name="upCount"></param>
        /// <param name="errdataList"></param>
        /// <param name="errCount"></param>
        /// <param name="sourcePhysicalPath"></param>
        void SpecialtyPlanImport(Dictionary<string, string> cellheader, out int? inCount, out int? upCount, 
                out List<SpecialtyPlanView> errdataList, out int? errCount, string sourcePhysicalPath);

    }
}