using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Bowin.Common.Linq.Entity;
using EMIS.Entities;
using EMIS.ViewModel;
using EMIS.CommonLogic.SystemServices;
using EMIS.ViewModel.GraduationManage.GraduateCardManage;
using EMIS.ViewModel.ScoreManage;

namespace EMIS.CommonLogic.GraduationManage.GraduateCardManage
{
    public interface IGraduateCardApplyServices : IBaseWorkflowServices<ER_GraduateCardApply>
    {
        /// <summary>
        /// 查询去向申请信息View
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="gradSchoolyearID"></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="graduationTypeID"></param>
        /// <param name="inSchoolStatus"></param>
        /// <param name="approvalStatus"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        IGridResultSet<GraduateCardApplyView> GetGraduateCardApplyViewGrid(ConfiguretView configuretView, Guid? gradSchoolyearID,
                Guid? campusID, Guid? collegeID, int? yearID, int? standardID, int? educationID, int? learningformID, string learnSystem,
                int? graduationTypeID, int? inSchoolStatus, int? approvalStatus, int pageIndex, int pageSize);

        /// <summary>
        /// 查询去向申请信息List
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="gradSchoolyearID"></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="graduationTypeID"></param>
        /// <param name="inSchoolStatus"></param>
        /// <param name="approvalStatus"></param>
        /// <returns></returns>
        IList<GraduateCardApplyView> GetGraduateCardApplyViewList(ConfiguretView configuretView, Guid? gradSchoolyearID,
                Guid? campusID, Guid? collegeID, int? yearID, int? standardID, int? educationID, int? learningformID, string learnSystem,
                int? graduationTypeID, int? inSchoolStatus, int? approvalStatus);

        /// <summary>
        /// 查询对应的去向申请信息GraduateCardApplyView
        /// </summary>
        /// <param name="graduateCardApplyID"></param>
        /// <returns></returns>
        GraduateCardApplyView GetGraduateCardApplyView(Guid? graduateCardApplyID);

        /// <summary>
        /// 名单生成(新增、修改)
        /// 新增包括:毕业学期小于等于当前启用的毕业学期、学籍信息为在校(排除在校状态为结业、毕业的信息)、在毕业申请允许最大年限(年)范围内
        /// 修改:未提交
        /// 业务主键:学生信息ID、毕业学期ID(实际的毕业学期)
        /// </summary>
        /// <returns></returns>
        string GraduateCardApplyEdit();

        /// <summary>
        /// 编辑(新增、修改,业务主键:学生信息ID、毕业学期ID(实际的毕业学期))
        /// </summary>
        /// <param name="graduateCardApplyView"></param>
        /// <param name="fileList"></param>
        void GraduateCardApplyEdit(GraduateCardApplyView graduateCardApplyView, List<FileUploadView> fileList);

        /// <summary>
        /// 去向申请批量新增(业务主键:学生信息ID、毕业学期ID(实际的毕业学期))
        /// </summary>
        /// <param name="graduationStudentViewList"></param>
        /// <param name="graduateCardApplyView"></param>
        /// <returns></returns>
        string GraduateCardApplyBatchAdd(List<GraduateCardApplyView> graduationStudentViewList, GraduateCardApplyView graduateCardApplyView);

        /// <summary>
        /// 查询未新增毕业学生信息GraduateCardApplyView
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="campusID"></param>
        /// <param name="collegeID"></param>
        /// <param name="schoolyearID"></param>
        /// <param name="standardID"></param>
        /// <param name="educationID"></param>
        /// <param name="learningformID"></param>
        /// <param name="learnSystem"></param>
        /// <param name="inSchoolStatus"></param>
        /// <param name="gradSchoolyearID"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        IGridResultSet<GraduateCardApplyView> GetGraduationStudentNoAddViewGrid(ConfiguretView configuretView, Guid? campusID,
                Guid? collegeID, int? schoolyearID, int? standardID, int? educationID, int? learningformID, string learnSystem,
                int? inSchoolStatus, Guid? gradSchoolyearID, int pageIndex, int pageSize);

        /// <summary>
        /// 查询未新增毕业学生信息List
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="campusID"></param>
        /// <param name="collegeID"></param>
        /// <param name="schoolyearID"></param>
        /// <param name="standardID"></param>
        /// <param name="educationID"></param>
        /// <param name="learningformID"></param>
        /// <param name="learnSystem"></param>
        /// <param name="inSchoolStatus"></param>
        /// <param name="gradSchoolyearID"></param>
        /// <returns></returns>
        IList<GraduateCardApplyView> GetGraduationStudentNoAddViewList(ConfiguretView configuretView, Guid? campusID, Guid? collegeID,
                int? schoolyearID, int? standardID, int? educationID, int? learningformID, string learnSystem,
                int? inSchoolStatus, Guid? gradSchoolyearID);

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

        /// <summary>
        /// 查询去向申请对应的学生最终成绩信息FinallyScoreView
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="graduateCardApplyID"></param>
        /// <param name="schoolyearID"></param>
        /// <param name="courseTypeID"></param>
        /// <param name="courseSelectTypeID"></param>
        /// <param name="examsCategoryID"></param>
        /// <param name="starttermID"></param>
        /// <param name="isMainCourse"></param>
        /// <param name="handleModeID"></param>
        /// <param name="isExecutablePlan"></param>
        /// <param name="executablePlanStatus"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        IGridResultSet<FinallyScoreView> GetFinallyScoreViewGrid(ConfiguretView configuretView, Guid? graduateCardApplyID, Guid? schoolyearID,
                int? courseTypeID, int? courseSelectTypeID, int? examsCategoryID, int? starttermID, int? isMainCourse, int? handleModeID,
                int? isExecutablePlan, int? executablePlanStatus, int pageIndex, int pageSize);

        /// <summary>
        /// 查询去向申请对应的学生最终成绩信息List
        /// </summary>
        /// <param name="configuretView"></param>
        /// <param name="graduateCardApplyID"></param>
        /// <param name="schoolyearID"></param>
        /// <param name="courseTypeID"></param>
        /// <param name="courseSelectTypeID"></param>
        /// <param name="examsCategoryID"></param>
        /// <param name="starttermID"></param>
        /// <param name="isMainCourse"></param>
        /// <param name="handleModeID"></param>
        /// <param name="isExecutablePlan"></param>
        /// <param name="executablePlanStatus"></param>
        /// <returns></returns>
        IList<FinallyScoreView> GetFinallyScoreViewList(ConfiguretView configuretView, Guid? graduateCardApplyID, Guid? schoolyearID,
                int? courseTypeID, int? courseSelectTypeID, int? examsCategoryID, int? starttermID, int? isMainCourse, int? handleModeID,
                int? isExecutablePlan, int? executablePlanStatus);

        /// <summary>
        /// 流程已退回跳转函数(工作流平台中配置)
        /// </summary>
        /// <param name="graduateCardApplyIDList"></param>
        /// <param name="userID"></param>
        void OnApproveReturn(List<Guid> graduateCardApplyIDList, Guid? userID);

    }
}