Commit d7d0bd70 authored by liudong1993's avatar liudong1993

课耗统计调整

parent d53034ca
......@@ -21,10 +21,16 @@ namespace Edu.Model.ViewModel.Course
/// 教师名称
/// </summary>
public string TeacherName { get; set; }
/// <summary>
/// 时间段
/// </summary>
public string TimeBucket { get; set; }
/// <summary>
/// 班级名称
/// </summary>
public string ClassName { get; set; }
/// <summary>
/// 代课课时
/// </summary>
......@@ -39,5 +45,38 @@ namespace Edu.Model.ViewModel.Course
/// 奖金确认 1是
/// </summary>
public int Q_BonusConfirm { get; set; }
#region 报表统计
/// <summary>
/// 课程id
/// </summary>
public int CouseId { get; set; }
/// <summary>
/// 课程名称
/// </summary>
public string CourseName { get; set; }
/// <summary>
/// 课时数量
/// </summary>
public decimal KSNum { get; set; }
/// <summary>
/// 抵扣课时数量
/// </summary>
public decimal DKNum { get; set; }
/// <summary>
/// 小时
/// </summary>
public decimal Hours { get; set; }
/// <summary>
/// 小时课时费
/// </summary>
public decimal HourMoney { get; set; }
#endregion
}
}
\ No newline at end of file
......@@ -605,7 +605,7 @@ namespace Edu.Module.Course
List<int> TeacherIdList = blist.Select(x => x.TeacherId).Distinct().ToList();
foreach (var item in TeacherIdList)
{
var qblist = blist.Where(x => x.TeacherId == item).OrderBy(x => x.UnitPrice).ThenBy(x => x.Date).ToList();
var qblist = blist.Where(x => x.TeacherId == item).OrderBy(x => x.Date).ThenBy(x => x.UnitPrice).ToList();
int BasicHours = configModel.BasicHours;
foreach (var qitem in qblist)
{
......
......@@ -2364,6 +2364,157 @@ namespace Edu.Module.Finance
return RList;
}
/// <summary>
/// 获取老师课时汇总统计
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="count"></param>
/// <param name="teacherId"></param>
/// <param name="schoolId"></param>
/// <param name="startMonth"></param>
/// <param name="endMonth"></param>
/// <param name="groupId"></param>
/// <returns></returns>
public object GetTeacherConsumptionHoursStatistics_V2(int pageIndex, int pageSize, out long count, int teacherId, int schoolId, string startMonth, string endMonth, int groupId)
{
List<object> RList = new List<object>();
//首先查询所有的老师
var userList = accountRepository.GetEmployeePageListRepository(pageIndex, pageSize, out count, new Model.ViewModel.User.Employee_ViewModel() { Group_Id = groupId, AccountId = teacherId, School_Id = schoolId, IsHoursStatistics = 1, AccountTypeStr = "2", HoursStartTime = startMonth, HoursEndTime = endMonth });
if (userList.Any())
{
//班级类型查询
var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = groupId });
//基础配置
var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = groupId });
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return RList; }
//查询当前时间范围 这些老师的上课课时
string userIds = string.Join(",", userList.Select(x => x.AccountId));
List<RB_Teaching_BonusDetail_ViewModel> DateList = new List<RB_Teaching_BonusDetail_ViewModel>();
//根据学生签到表 查询
var list = class_CheckRepository.GetTeacherConsumptionHoursDetialList(userIds, schoolId, startMonth, endMonth, groupId);
if (list.Any())
{
foreach (var item in list)
{
int Minutes = (int)(Convert.ToDateTime("2021-06-29 " + item.EndDate) - Convert.ToDateTime("2021-06-29 " + item.StartDate)).TotalMinutes;
decimal Hours = Math.Round(Convert.ToDecimal(Minutes) / 60, 2, MidpointRounding.AwayFromZero);//小时
//上课课时
decimal KSNum = Math.Round(Convert.ToDecimal(Minutes) / configModel.BasicMinutes, 2, MidpointRounding.AwayFromZero); // 未达到一课时时间 算不算一课时
var typeModel = cTypeList.Where(x => x.CTypeId == item.ClassType).FirstOrDefault();
decimal unitPrice = configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (item?.BaseHourFee ?? 0);
//课时费 需要每个班级 单独计算 因为 班级有附加费用
decimal KSMoney = KSNum * unitPrice;
decimal HourMoney = Math.Round(unitPrice / configModel.BasicMinutes * 60, 2, MidpointRounding.AwayFromZero);//没小时课时费
DateList.Add(new RB_Teaching_BonusDetail_ViewModel
{
Date = item.ClassDate,
TimeBucket = item.StartDate + "~" + item.EndDate,
TeacherId = item.TeacherId,
TeacherName = item.TeacherName,
ClassId = item.ClassId,
ClassName = item.ClassName,
CouseId = item.CouseId,
CourseName = item.CourseName,
KSNum = KSNum,
Hours = Hours,
HourMoney = HourMoney,
UnitPrice = unitPrice,
Money = KSMoney
});
}
}
//查询期间 学生的上课总课时 + 合同课时单价
var sTimeList = class_CheckRepository.GetStudentHoursList(groupId, userIds, startMonth, endMonth);
//根据学生id
//查询课时费 (要注意 需排除每个月老师的基础课时)
foreach (var item in userList)
{
var tlist = DateList.Where(x => x.TeacherId == item.AccountId).ToList();//多班级
//初始化 基础课时
DateTime STime = Convert.ToDateTime(startMonth);
while (true)
{
DateTime ETime = STime.AddMonths(1).AddDays(-1);
var mlist = tlist.Where(x => x.Date >= STime && x.Date <= ETime).ToList();
#region 基础课时处理
decimal DeductionMoney = 0;
if (configModel.BasicHours > 0)
{
//遍历所有老师
List<int> TeacherIdList = mlist.Select(x => x.TeacherId).Distinct().ToList();
foreach (var tId in TeacherIdList)
{
var qblist = mlist.Where(x => x.TeacherId == tId).OrderBy(x => x.Date).ThenBy(x => x.UnitPrice).ToList();
decimal BasicHours = (decimal)configModel.BasicHours;
foreach (var qitem in qblist)
{
decimal CourseHour = 0, DeductionHour = 0;
if (BasicHours > qitem.KSNum)
{
DeductionHour = qitem.KSNum;
BasicHours -= qitem.KSNum;
DeductionMoney += qitem.KSNum * qitem.UnitPrice;
}
else
{
DeductionHour = BasicHours;
CourseHour = qitem.KSNum - BasicHours;
DeductionMoney += BasicHours * qitem.UnitPrice;
BasicHours = 0;
}
qitem.KSNum = CourseHour;
qitem.DKNum = DeductionHour;
qitem.Money = CourseHour * qitem.UnitPrice;
if (BasicHours <= 0)
{
break;
}
}
}
}
#endregion
if (STime.Month == Convert.ToDateTime(endMonth).Month)
{
break;
}
STime = STime.AddMonths(1);
}
decimal ksNum = tlist.Sum(x => x.KSNum);
decimal dkNum = tlist.Sum(x => x.DKNum);
decimal Hours = tlist.Sum(x => x.Hours);
decimal KSMoney = tlist.Sum(x => x.Money);
decimal StuMoney = Math.Round(sTimeList.Where(x => x.TeacherId == item.AccountId).Sum(x => x.CurrentDeductionHours * x.UnitPrice), 2, MidpointRounding.AwayFromZero);
RList.Add(new
{
item.Id,
item.AccountId,
item.EmployeeName,
LeaveStatus = item.LeaveStatus.ToName(),
KSNum = ksNum,
DKNum = dkNum,
Hours,
KSMoney,
StuLearnMoney = StuMoney,
item.SchoolName
});
}
}
return RList;
}
/// <summary>
/// 导出Excel
/// </summary>
......@@ -2380,43 +2531,122 @@ namespace Edu.Module.Finance
var userList = accountRepository.GetEmployeeListRepository(new Model.ViewModel.User.Employee_ViewModel() { Group_Id = groupId, AccountId = teacherId, School_Id = schoolId, IsHoursStatistics = 1, AccountTypeStr = "2", HoursStartTime = startMonth, HoursEndTime = endMonth });
if (userList.Any())
{
//班级类型查询
var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = groupId });
//基础配置
var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = groupId });
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return new List<ExcelDataSource>(); }
//查询当前时间范围 这些老师的上课课时
string userIds = string.Join(",", userList.Select(x => x.AccountId));
var tTimeList = class_CheckRepository.GetTeacherHoursList(groupId, userIds, startMonth, endMonth);
List<RB_Class_ViewModel> ClassList = new List<RB_Class_ViewModel>();
if (tTimeList.Any())
List<RB_Teaching_BonusDetail_ViewModel> DateList = new List<RB_Teaching_BonusDetail_ViewModel>();
//根据学生签到表 查询
var list = class_CheckRepository.GetTeacherConsumptionHoursDetialList(userIds, schoolId, startMonth, endMonth, groupId);
if (list.Any())
{
//查询班级信息
string classIds = string.Join(",", tTimeList.Select(x => x.ClassId).Distinct());
ClassList = classRepository.GetClassListRepository(new RB_Class_ViewModel() { Group_Id = groupId, Q_ClassIds = classIds });
foreach (var item in list)
{
int Minutes = (int)(Convert.ToDateTime("2021-06-29 " + item.EndDate) - Convert.ToDateTime("2021-06-29 " + item.StartDate)).TotalMinutes;
decimal Hours = Math.Round(Convert.ToDecimal(Minutes) / 60, 2, MidpointRounding.AwayFromZero);//小时
//上课课时
decimal KSNum = Math.Round(Convert.ToDecimal(Minutes) / configModel.BasicMinutes, 2, MidpointRounding.AwayFromZero); // 未达到一课时时间 算不算一课时
var typeModel = cTypeList.Where(x => x.CTypeId == item.ClassType).FirstOrDefault();
decimal unitPrice = configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (item?.BaseHourFee ?? 0);
//课时费 需要每个班级 单独计算 因为 班级有附加费用
decimal KSMoney = KSNum * unitPrice;
decimal HourMoney = Math.Round(unitPrice / configModel.BasicMinutes * 60, 2, MidpointRounding.AwayFromZero);//没小时课时费
DateList.Add(new RB_Teaching_BonusDetail_ViewModel
{
Date = item.ClassDate,
TimeBucket = item.StartDate + "~" + item.EndDate,
TeacherId = item.TeacherId,
TeacherName = item.TeacherName,
ClassId = item.ClassId,
ClassName = item.ClassName,
CouseId = item.CouseId,
CourseName = item.CourseName,
KSNum = KSNum,
Hours = Hours,
HourMoney = HourMoney,
UnitPrice = unitPrice,
Money = KSMoney
});
}
//班级类型查询
var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = groupId });
}
//查询期间 学生的上课总课时 + 合同课时单价
var sTimeList = class_CheckRepository.GetStudentHoursList(groupId, userIds, startMonth, endMonth);
//基础配置
var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = groupId });
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return new List<ExcelDataSource>(); }
//根据学生id
//查询课时费 (要注意 需排除每个月老师的基础课时)
int Num = 1;
decimal TKSNum = 0, TStuMoney = 0, THours = 0, TKSMoney = 0;
decimal TKSNum = 0, TDKNum = 0, TStuMoney = 0, THours = 0, TKSMoney = 0;
foreach (var item in userList)
{
var tlist = tTimeList.Where(x => x.TeacherId == item.AccountId).ToList();//多班级
int TotalStudyNum = tlist.Sum(x => x.StudyNum);
decimal ksNum = Math.Round(Convert.ToDecimal(TotalStudyNum) / configModel.BasicMinutes, 2, MidpointRounding.AwayFromZero); // 未达到一课时时间 算不算一课时
decimal Hours = Math.Round(Convert.ToDecimal(TotalStudyNum) / 60, 2, MidpointRounding.AwayFromZero);//小时
decimal KSMoney = 0;
foreach (var qitem in tlist)
var tlist = DateList.Where(x => x.TeacherId == item.AccountId).ToList();//多班级
//初始化 基础课时
DateTime STime = Convert.ToDateTime(startMonth);
while (true)
{
var classModel = ClassList.Where(x => x.ClassId == qitem.ClassId).FirstOrDefault();
var typeModel = cTypeList.Where(x => x.CTypeId == classModel.ClassType).FirstOrDefault();
//课时费 需要每个班级 单独计算 因为 班级有附加费用
KSMoney += Math.Round(Convert.ToDecimal(qitem.StudyNum) / configModel.BasicMinutes * (configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (item?.BaseHourFee ?? 0)), 2, MidpointRounding.AwayFromZero);
DateTime ETime = STime.AddMonths(1).AddDays(-1);
var mlist = tlist.Where(x => x.Date >= STime && x.Date <= ETime).ToList();
#region 基础课时处理
decimal DeductionMoney = 0;
if (configModel.BasicHours > 0)
{
//遍历所有老师
List<int> TeacherIdList = mlist.Select(x => x.TeacherId).Distinct().ToList();
foreach (var tId in TeacherIdList)
{
var qblist = mlist.Where(x => x.TeacherId == tId).OrderBy(x => x.Date).ThenBy(x => x.UnitPrice).ToList();
decimal BasicHours = (decimal)configModel.BasicHours;
foreach (var qitem in qblist)
{
decimal CourseHour = 0, DeductionHour = 0;
if (BasicHours > qitem.KSNum)
{
DeductionHour = qitem.KSNum;
BasicHours -= qitem.KSNum;
DeductionMoney += qitem.KSNum * qitem.UnitPrice;
}
else
{
DeductionHour = BasicHours;
CourseHour = qitem.KSNum - BasicHours;
DeductionMoney += BasicHours * qitem.UnitPrice;
BasicHours = 0;
}
qitem.KSNum = CourseHour;
qitem.DKNum = DeductionHour;
qitem.Money = CourseHour * qitem.UnitPrice;
if (BasicHours <= 0)
{
break;
}
}
}
}
#endregion
if (STime.Month == Convert.ToDateTime(endMonth).Month)
{
break;
}
STime = STime.AddMonths(1);
}
decimal ksNum = tlist.Sum(x => x.KSNum);
decimal dkNum = tlist.Sum(x => x.DKNum);
decimal Hours = tlist.Sum(x => x.Hours);
decimal KSMoney = tlist.Sum(x => x.Money);
decimal StuMoney = Math.Round(sTimeList.Where(x => x.TeacherId == item.AccountId).Sum(x => x.CurrentDeductionHours * x.UnitPrice), 2, MidpointRounding.AwayFromZero);
......@@ -2429,6 +2659,7 @@ namespace Edu.Module.Finance
new ExcelColumn(value: item.LeaveStatus.ToName()){ },
new ExcelColumn(value: item.EmployeeName){ },
new ExcelColumn(value: ksNum.ToString("#0.00")){ },
new ExcelColumn(value: dkNum.ToString("#0.00")){ },
new ExcelColumn(value: StuMoney.ToString("#0.00")){ },
new ExcelColumn(value: Hours.ToString("#0.00")){ },
new ExcelColumn(value: KSMoney.ToString("#0.00")){ }
......@@ -2437,6 +2668,7 @@ namespace Edu.Module.Finance
RList.Add(firstRow);
Num++;
TKSNum += ksNum;
TDKNum += dkNum;
TStuMoney += StuMoney;
THours += Hours;
TKSMoney += KSMoney;
......@@ -2451,6 +2683,7 @@ namespace Edu.Module.Finance
new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
new ExcelColumn(value: TKSNum.ToString("#0.00")){ },
new ExcelColumn(value: TDKNum.ToString("#0.00")){ },
new ExcelColumn(value: TStuMoney.ToString("#0.00")){ },
new ExcelColumn(value: THours.ToString("#0.00")){ },
new ExcelColumn(value: TKSMoney.ToString("#0.00")){ }
......@@ -2476,9 +2709,9 @@ namespace Edu.Module.Finance
/// <param name="contractNo"></param>
/// <param name="group_Id"></param>
/// <returns></returns>
public object GetTeacherConsumptionHoursDetialPageList(int pageIndex, int pageSize, out long count, int teacherId, int schoolId, string startMonth, string endMonth, int groupId)
public List<RB_Teaching_BonusDetail_ViewModel> GetTeacherConsumptionHoursDetialPageList(int pageIndex, int pageSize, out long count, int teacherId, int schoolId, string startMonth, string endMonth, int groupId)
{
List<object> RList = new List<object>();
List<RB_Teaching_BonusDetail_ViewModel> RList = new List<RB_Teaching_BonusDetail_ViewModel>();
//根据学生签到表 查询
var list = class_CheckRepository.GetTeacherConsumptionHoursDetialPageList(pageIndex, pageSize, out count, teacherId, schoolId, startMonth, endMonth, groupId);
if (list.Any()) {
......@@ -2486,7 +2719,7 @@ namespace Edu.Module.Finance
var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = groupId });
//基础配置
var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = groupId });
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return "未配置课时费基础设置"; }
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return RList; }
foreach (var item in list) {
int Minutes = (int)(Convert.ToDateTime("2021-06-29 " + item.EndDate) - Convert.ToDateTime("2021-06-29 " + item.StartDate)).TotalMinutes;
......@@ -2495,28 +2728,69 @@ namespace Edu.Module.Finance
decimal KSNum = Math.Round(Convert.ToDecimal(Minutes) / configModel.BasicMinutes, 2, MidpointRounding.AwayFromZero); // 未达到一课时时间 算不算一课时
var typeModel = cTypeList.Where(x => x.CTypeId == item.ClassType).FirstOrDefault();
decimal unitPrice = configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (item?.BaseHourFee ?? 0);
//课时费 需要每个班级 单独计算 因为 班级有附加费用
decimal KSMoney = KSNum * (configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + item.BaseHourFee);
decimal KSMoney = KSNum * unitPrice;
decimal HourMoney = Math.Round((configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + item.BaseHourFee) / configModel.BasicMinutes * 60, 2, MidpointRounding.AwayFromZero);//没小时课时费
decimal HourMoney = Math.Round(unitPrice / configModel.BasicMinutes * 60, 2, MidpointRounding.AwayFromZero);//没小时课时费
RList.Add(new
RList.Add(new RB_Teaching_BonusDetail_ViewModel
{
ClassDate = item.ClassDate.ToString("yyyy-MM-dd"),
Date = item.ClassDate,
TimeBucket = item.StartDate + "~" + item.EndDate,
item.TeacherId,
item.TeacherName,
item.ClassId,
item.ClassName,
item.CouseId,
item.CourseName,
KSNum,
Hours,
HourMoney,
KSMoney
TeacherId = item.TeacherId,
TeacherName = item.TeacherName,
ClassId = item.ClassId,
ClassName = item.ClassName,
CouseId = item.CouseId,
CourseName = item.CourseName,
KSNum = KSNum,
Hours = Hours,
HourMoney = HourMoney,
UnitPrice = unitPrice,
Money = KSMoney
});
}
#region 基础课时处理
decimal DeductionMoney = 0;
if (configModel.BasicHours > 0)
{
//遍历所有老师
List<int> TeacherIdList = RList.Select(x => x.TeacherId).Distinct().ToList();
foreach (var item in TeacherIdList)
{
var qblist = RList.Where(x => x.TeacherId == item).OrderBy(x => x.UnitPrice).ThenBy(x => x.Date).ToList();
decimal BasicHours = (decimal)configModel.BasicHours;
foreach (var qitem in qblist)
{
decimal CourseHour = 0, DeductionHour = 0;
if (BasicHours > qitem.KSNum)
{
DeductionHour = qitem.KSNum;
BasicHours -= qitem.KSNum;
DeductionMoney += qitem.KSNum * qitem.UnitPrice;
}
else
{
DeductionHour = BasicHours;
CourseHour = qitem.KSNum - BasicHours;
DeductionMoney += BasicHours * qitem.UnitPrice;
BasicHours = 0;
}
qitem.KSNum = CourseHour;
qitem.DKNum = DeductionHour;
qitem.Money = CourseHour * qitem.UnitPrice;
if (BasicHours <= 0)
{
break;
}
}
}
}
#endregion
}
return RList;
}
......@@ -2532,17 +2806,18 @@ namespace Edu.Module.Finance
/// <returns></returns>
public List<ExcelDataSource> GetTeacherConsumptionHoursDetialPageListToExcel(int teacherId, int schoolId, string startMonth, string endMonth, int groupId)
{
List<ExcelDataSource> RList = new List<ExcelDataSource>();
List<ExcelDataSource> RDateList = new List<ExcelDataSource>();
List<RB_Teaching_BonusDetail_ViewModel> RList = new List<RB_Teaching_BonusDetail_ViewModel>();
//根据学生签到表 查询
var list = class_CheckRepository.GetTeacherConsumptionHoursDetialList(teacherId, schoolId, startMonth, endMonth, groupId);
var list = class_CheckRepository.GetTeacherConsumptionHoursDetialList(teacherId.ToString(), schoolId, startMonth, endMonth, groupId);
if (list.Any())
{
//班级类型查询
var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = groupId });
//基础配置
var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = groupId });
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return RList; }
decimal TKSNum = 0, THourMoney = 0, THours = 0, TKSMoney = 0;
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return RDateList; }
decimal TKSNum = 0, TDKNum = 0, THourMoney = 0, THours = 0, TKSMoney = 0;
foreach (var item in list)
{
int Minutes = (int)(Convert.ToDateTime("2021-06-29 " + item.EndDate) - Convert.ToDateTime("2021-06-29 " + item.StartDate)).TotalMinutes;
......@@ -2551,32 +2826,95 @@ namespace Edu.Module.Finance
decimal KSNum = Math.Round(Convert.ToDecimal(Minutes) / configModel.BasicMinutes, 2, MidpointRounding.AwayFromZero); // 未达到一课时时间 算不算一课时
var typeModel = cTypeList.Where(x => x.CTypeId == item.ClassType).FirstOrDefault();
decimal unitPrice = configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (item?.BaseHourFee ?? 0);
//课时费 需要每个班级 单独计算 因为 班级有附加费用
decimal KSMoney = KSNum * (configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + item.BaseHourFee);
decimal KSMoney = KSNum * unitPrice;
decimal HourMoney = Math.Round((configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + item.BaseHourFee) / configModel.BasicMinutes * 60, 2, MidpointRounding.AwayFromZero);//没小时课时费
decimal HourMoney = Math.Round(unitPrice / configModel.BasicMinutes * 60, 2, MidpointRounding.AwayFromZero);//没小时课时费
RList.Add(new RB_Teaching_BonusDetail_ViewModel
{
Date = item.ClassDate,
TimeBucket = item.StartDate + "~" + item.EndDate,
TeacherId = item.TeacherId,
TeacherName = item.TeacherName,
ClassId = item.ClassId,
ClassName = item.ClassName,
CouseId = item.CouseId,
CourseName = item.CourseName,
KSNum = KSNum,
Hours = Hours,
HourMoney = HourMoney,
UnitPrice = unitPrice,
Money = KSMoney
});
}
#region 基础课时处理
decimal DeductionMoney = 0;
if (configModel.BasicHours > 0)
{
//遍历所有老师
List<int> TeacherIdList = RList.Select(x => x.TeacherId).Distinct().ToList();
foreach (var item in TeacherIdList)
{
var qblist = RList.Where(x => x.TeacherId == item).OrderBy(x => x.UnitPrice).ThenBy(x => x.Date).ToList();
decimal BasicHours = (decimal)configModel.BasicHours;
foreach (var qitem in qblist)
{
decimal CourseHour = 0, DeductionHour = 0;
if (BasicHours > qitem.KSNum)
{
DeductionHour = qitem.KSNum;
BasicHours -= qitem.KSNum;
DeductionMoney += qitem.KSNum * qitem.UnitPrice;
}
else
{
DeductionHour = BasicHours;
CourseHour = qitem.KSNum - BasicHours;
DeductionMoney += BasicHours * qitem.UnitPrice;
BasicHours = 0;
}
qitem.KSNum = CourseHour;
qitem.DKNum = DeductionHour;
qitem.Money = CourseHour * qitem.UnitPrice;
if (BasicHours <= 0)
{
break;
}
}
}
}
#endregion
foreach (var item in RList) {
ExcelDataSource firstRow = new ExcelDataSource(30)
{
ExcelRows = new List<ExcelColumn>()
{
new ExcelColumn(value: item.ClassDate.ToString("yyyy-MM-dd")){ },
new ExcelColumn(value: item.StartDate + "~" + item.EndDate){ },
new ExcelColumn(value: item.Date.ToString("yyyy-MM-dd")){ },
new ExcelColumn(value: item.TimeBucket){ },
new ExcelColumn(value: item.ClassName){ },
new ExcelColumn(value: item.CourseName){ },
new ExcelColumn(value: item.TeacherName){ },
new ExcelColumn(value: KSNum.ToString("#0.00")){ },
new ExcelColumn(value: Hours.ToString("#0.00")){ },
new ExcelColumn(value: HourMoney.ToString("#0.00")){ },
new ExcelColumn(value: KSMoney.ToString("#0.00")){ }
new ExcelColumn(value: item.UnitPrice.ToString("#0.00")){ },
new ExcelColumn(value: item.KSNum.ToString("#0.00")){ },
new ExcelColumn(value: item.DKNum.ToString("#0.00")){ },
new ExcelColumn(value: item.Hours.ToString("#0.00")){ },
new ExcelColumn(value: item.HourMoney.ToString("#0.00")){ },
new ExcelColumn(value: item.Money.ToString("#0.00")){ }
}
};
RList.Add(firstRow);
TKSNum += KSNum;
THourMoney += HourMoney;
THours += Hours;
TKSMoney += KSMoney;
RDateList.Add(firstRow);
TKSNum += item.KSNum;
TDKNum += item.DKNum;
THourMoney += item.HourMoney;
THours += item.Hours;
TKSMoney += item.Money;
}
ExcelDataSource firstRowT = new ExcelDataSource(30)
{
ExcelRows = new List<ExcelColumn>()
......@@ -2586,15 +2924,17 @@ namespace Edu.Module.Finance
new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
new ExcelColumn(value: TKSNum.ToString("#0.00")){ },
new ExcelColumn(value: TDKNum.ToString("#0.00")){ },
new ExcelColumn(value: THours.ToString("#0.00")){ },
new ExcelColumn(value: THourMoney.ToString("#0.00")){ },
new ExcelColumn(value: TKSMoney.ToString("#0.00")){ }
}
};
RList.Add(firstRowT);
RDateList.Add(firstRowT);
}
return RList;
return RDateList;
}
/// <summary>
......
......@@ -455,12 +455,12 @@ ORDER BY p.ClassDate ASC
/// <param name="endMonth"></param>
/// <param name="group_Id"></param>
/// <returns></returns>
public List<RB_Class_Check_ViewModel> GetTeacherConsumptionHoursDetialList(int teacherId, int schoolId, string startMonth, string endMonth, int group_Id)
public List<RB_Class_Check_ViewModel> GetTeacherConsumptionHoursDetialList(string teacherIds, int schoolId, string startMonth, string endMonth, int group_Id)
{
string where = $@" ";
if (teacherId > 0)
if (!string.IsNullOrEmpty(teacherIds))
{
where += $@" and p.TeacherId ={teacherId}";
where += $@" and p.TeacherId in({teacherIds})";
}
if (schoolId >= 0)
{
......
......@@ -1457,7 +1457,7 @@ namespace Edu.WebApi.Controllers.Finance
return ApiResult.Failed("日期格式有误");
}
var list = financeModule.GetTeacherConsumptionHoursStatistics(pageModel.PageIndex, pageModel.PageSize, out long count, TeacherId, SchoolId, StartMonth, EndMonth, userInfo.Group_Id);
var list = financeModule.GetTeacherConsumptionHoursStatistics_V2(pageModel.PageIndex, pageModel.PageSize, out long count, TeacherId, SchoolId, StartMonth, EndMonth, userInfo.Group_Id);
pageModel.Count = Convert.ToInt32(count);
pageModel.PageData = list;
return ApiResult.Success("", pageModel);
......@@ -1480,6 +1480,7 @@ namespace Edu.WebApi.Controllers.Finance
new ExcelColumn(value:"专职/兼职"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"老师姓名"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"上课课时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"基础课时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"上课金额"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课时转换/小时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课时费"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }
......@@ -1566,7 +1567,23 @@ namespace Edu.WebApi.Controllers.Finance
var list = financeModule.GetTeacherConsumptionHoursDetialPageList(pageModel.PageIndex, pageModel.PageSize, out long count, TeacherId, SchoolId, StartMonth, EndMonth, userInfo.Group_Id);
pageModel.Count = Convert.ToInt32(count);
pageModel.PageData = list;
pageModel.PageData = list.Select(x => new
{
Date = x.Date.ToString("yyyy-MM-dd"),
x.TimeBucket,
x.TeacherId,
x.TeacherName,
x.ClassId,
x.ClassName,
x.CouseId,
x.CourseName,
x.KSNum,
x.DKNum,
x.Hours,
x.HourMoney,
x.UnitPrice,
KSMoney = x.Money
});
return ApiResult.Success("", pageModel);
}
......@@ -1587,7 +1604,9 @@ namespace Edu.WebApi.Controllers.Finance
new ExcelColumn(value:"班级"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课程"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"老师名称"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课时单价"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"上课课时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"基础课时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课时转换/小时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课时费单价元/小时"){CellWidth=25,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"老师课时费"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment