using System;
using System.Collections.Generic;
using System.Linq;
using Bowin.Common.Linq.Entity;
using System.Text;
using EMIS.ViewModel;
using EMIS.ViewModel.ChargeManage.ChargeSituation;
using EMIS.Entities;
using EMIS.ViewModel.UniversityManage.SpecialtyClassManage;
using EMIS.ViewModel.Students;

namespace EMIS.CommonLogic.ChargeManage.ChargeSituation
{
   public interface IChargeStandardServices
    {
       /// <summary>
       /// 获取收费标准信息列表
       /// </summary>
       /// <param name="chargeStandardID">主键ID</param>
       /// <returns></returns>
       IGridResultSet<ChargeStandardView> GetChargeStandardViewGrid(ConfiguretView configuretView, Guid? collegeID, int? yearID, int? chargeYearID,
           int? standardID, int? educationID, int? learningformID, Guid? chargeProjectID, string LearnSystem, int? inschoolstatus, int pageIndex, int pageSize);

       /// <summary>
       /// 获取收费标准信息列表
       /// </summary>
       /// <param name="configuretView"></param>
       /// <param name="standardID"></param>
       /// <param name="educationID"></param>
       /// <param name="learningformID"></param>
       /// <returns></returns>
       List<ChargeStandardView> GetChargeStandardList(ConfiguretView configuretView, Guid? collegeID, int? yearID,
            int? standardID, int? learningformID, int? chargeYearID, Guid? chargeProjectID, string LearnSystem, int? educationID, int? inSchoolStatus);

       /// <summary>
       /// 收费标准新增年级专业列表
       /// </summary>
       /// <param name="configuretView"></param>
       /// <param name="gradeMajorID"></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="inschoolstatus"></param>
       /// <param name="chargeYearID"></param>
       /// <param name="chargeProjectID"></param>
       /// <param name="pageIndex"></param>
       /// <param name="pageSize"></param>
       /// <returns></returns>
       IGridResultSet<GrademajorView> GetGradeMajorViewGrid(ConfiguretView configuretView, Guid? gradeMajorID, Guid? collegeID, 
           int? yearID, int? standardID, int? educationID, int? learningformID, string learnSystem, 
           int? inschoolstatus, int? chargeYearID, Guid? chargeProjectID, int pageIndex, int pageSize);

       /// <summary>
       /// 刷新名单(生成对应的收费标准应收名单)
       /// </summary>
       /// <param name="chargeStandardIDs"></param>
       /// <param name="inschoolstatus"></param>
       /// <returns></returns>
       string CreatStudentChargeList(List<Guid?> chargeStandardIDs, int? inschoolStatus);

       /// <summary>
       /// 收费标准新增(批量新增,同时生成应收名单)
       /// </summary>
       /// <param name="gradeMajorIDs"></param>
       /// <param name="chargeStandardView"></param>
       /// <returns></returns>
       string ChargeStandardAdd(List<Guid?> gradeMajorIDs, ChargeStandardView chargeStandardView);

       /// <summary>
       /// 获取年级专业各在校状态学生
       /// </summary>
       /// <param name="grademajorID"></param>
       /// <param name="inschoolstatus"></param>
       /// <param name="pageIndex"></param>
       /// <param name="pageSize"></param>
       /// <returns></returns>
       IGridResultSet<StudentsView> GetGradeMajorStudentViewGrid(Guid? grademajorID, int? inschoolstatus, int pageIndex, int pageSize);

       /// <summary>
       /// 获取年级专业各在校状态学生
       /// </summary>
       /// <param name="grademajorID"></param>
       /// <param name="inschoolstatus"></param>
       /// <returns></returns>
       List<StudentsView> GetGradeMajorStudentViewGrid(Guid? grademajorID, int? inschoolstatus);

       /// <summary>
       /// 获取收费标准对应的年级专业应收名单
       /// </summary>
       /// <param name="grademajorID"></param>
       /// <param name="chargeYearID"></param>
       /// <param name="chargeProjectID"></param>
       /// <param name="inschoolStatus"></param>
       /// <param name="pageIndex"></param>
       /// <param name="pageSize"></param>
       /// <returns></returns>
       IGridResultSet<StudentChargeView> GetGradeMajorStudentChargeViewGrid(Guid? grademajorID, int? chargeYearID, Guid? chargeProjectID, int? inschoolStatus, int pageIndex, int pageSize);

       /// <summary>
       /// 获取收费标准对应的年级专业应收名单
       /// </summary>
       /// <param name="grademajorID"></param>
       /// <param name="chargeYearID"></param>
       /// <param name="chargeProjectID"></param>
       /// <param name="inschoolStatus"></param>
       /// <returns></returns>
       List<StudentChargeView> GetGradeMajorStudentChargeViewGrid(Guid? grademajorID, int? chargeYearID, Guid? chargeProjectID, int? inschoolStatus);

       /// <summary>
       /// 查询收费标准信息View(ChargeStandardView)
       /// </summary>
       /// <param name="chargeStandardID"></param>
       /// <returns></returns>
       ChargeStandardView GetChargeStandardView(Guid? chargeStandardID);

       /// <summary>
       /// 查询收费标准信息实体
       /// </summary>
       /// <param name="chargeStandardID"></param>
       /// <returns></returns>
       EC_ChargeStandard GetChargeStandard(Guid? chargeStandardID);

       /// <summary>
       /// 查询应收名单实体
       /// </summary>
       /// <param name="studentChargeID"></param>
       /// <returns></returns>
       EC_StudentCharge GetStudentCharge(Guid? studentChargeID);

       /// <summary>
       /// 新增、修改(处理方式:当存在对应的应收名单时,无法修改)
       /// </summary>
       /// <param name="chargeStandardView"></param>
       /// <returns></returns>
       void ChargeStandardEdit(ChargeStandardView chargeStandardView);

       /// <summary>
       /// 删除(当选择删除的信息中存在的应收名单时,无法删除)
       /// </summary>
       /// <param name="chargeStandardIDs"></param>
       /// <returns></returns>
       bool ChargeStandardDelete(List<Guid> chargeStandardIDs);

       /// <summary>
       /// 收费标准验证(业务主键:年级专业ID、缴费学年、收费项目ID)
       /// </summary>
       /// <param name="chargeStandardID"></param>
       /// <param name="grademajorID"></param>
       /// <param name="chargeYearID"></param>
       /// <param name="chargeProjectID"></param>
       /// <returns></returns>
       string GetVerification(Guid? chargeStandardID, Guid? grademajorID, int? chargeYearID, Guid? chargeProjectID);
       
    }
}