Commit 6bd4ef6e authored by 吴春's avatar 吴春

解决冲突

parents 20d8c6d1 0ab11107
......@@ -14,11 +14,14 @@ namespace Edu.Common.WeChatPayAPIv3
/// </summary>
public class AesGcmHelper
{
private static string ALGORITHM = "AES/GCM/NoPadding";
private static int TAG_LENGTH_BIT = 128;
private static int NONCE_LENGTH_BYTE = 12;
private static string AES_KEY = string.Empty;
/// <summary>
/// 解密微信
/// </summary>
/// <param name="associatedData"></param>
/// <param name="nonce"></param>
/// <param name="ciphertext"></param>
/// <param name="APIV3Key"></param>
/// <returns></returns>
public static string AesGcmDecrypt(string associatedData, string nonce, string ciphertext, string APIV3Key)
{
GcmBlockCipher gcmBlockCipher = new GcmBlockCipher(new AesEngine());
......
......@@ -112,6 +112,11 @@ namespace Edu.Model.CacheModel
/// </summary>
public string PostName { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 功能权限列表
/// </summary>
......
using Edu.Common.Enum;
using System;
using VT.FW.DB;
namespace Edu.Model.Entity.Course
{
/// <summary>
/// 班级关联课程实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_Class_Course
{
/// <summary>
/// 主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 班级编号
/// </summary>
public int ClassId { get; set; }
/// <summary>
/// 课程编号
/// </summary>
public int CourseId { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 修改人
/// </summary>
public int UpdateBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 删除状态(0-正常,1-禁用)
/// </summary>
public DateStateEnum Status { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Common.Enum;
using VT.FW.DB;
namespace Edu.Model.Entity.Course
{
/// <summary>
/// 班级备案评论实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_Class_LessonComment
{ /// <summary>
{
/// <summary>
/// 教案评论id
/// </summary>
public int LessonCommentId { get; set; }
......
......@@ -199,5 +199,20 @@ namespace Edu.Model.Entity.Course
/// (教育订单使用)订单性质(1-直通车,2-代收代付,3-返佣)
/// </summary>
public decimal OldPreferPrice { get; set; }
/// <summary>
/// 课程编号
/// </summary>
public int CourseId { get; set; }
/// <summary>
/// 插班开始课时
/// </summary>
public int StartClassHours { get; set; }
/// <summary>
/// 是否插班报入
/// </summary>
public int IsChaBan { get; set; }
}
}
using Edu.Model.Entity.Course;
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Model.ViewModel.Course
{
/// <summary>
/// 班级关联课程扩展实体类
/// </summary>
public class RB_Class_Course_Extend : RB_Class_Course
{
/// <summary>
/// 班级编号【查询使用】
/// </summary>
public string QClassIds { get; set; }
/// <summary>
/// 课程名称
/// </summary>
public string CourseName { get; set; }
/// <summary>
/// 课程课时
/// </summary>
public int ClassHours { get; set; }
/// <summary>
/// 课程价格
/// </summary>
public decimal SellPrice { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Model.Entity.Course;
using Edu.Model.Entity.Course;
namespace Edu.Model.ViewModel.Course
{
/// <summary>
/// 班级备案评论扩展实体类
/// </summary>
public class RB_Class_LessonComment_ViewModel : RB_Class_LessonComment
{
/// <summary>
......
......@@ -73,6 +73,7 @@ namespace Edu.Model.ViewModel.Course
/// 上课开始时间
/// </summary>
public string StartTime { get; set; }
/// <summary>
/// 上课结束时间
/// </summary>
......@@ -92,5 +93,10 @@ namespace Edu.Model.ViewModel.Course
/// 学生id
/// </summary>
public int StuId { get; set; }
/// <summary>
/// 每一节课分钟数
/// </summary>
public int ClassMinutes { get; set; }
}
}
......@@ -187,6 +187,11 @@ namespace Edu.Model.ViewModel.Course
/// 课程原价
/// </summary>
public decimal CourseOriginalPrice { get; set; }
/// <summary>
/// 关联其他课程列表
/// </summary>
public List<RB_Class_Course_Extend> OtherCourseList { get; set; }
}
/// <summary>
......
using System;
using Edu.Common.Enum.Sale;
using System;
using System.Collections.Generic;
namespace Edu.Model.ViewModel.Course
......@@ -81,5 +82,27 @@ namespace Edu.Model.ViewModel.Course
{
get; set;
}
/// <summary>
/// 课程编号
/// </summary>
public int CourseId { get; set; }
/// <summary>
/// 订单类型
/// </summary>
public OrderTypeEnum OrderType { get; set; }
/// <summary>
/// 开始课时
/// </summary>
public int StartClassHours { get; set; }
/// <summary>
/// 是否插班报入(1-是)
/// </summary>
public int IsChaBan { get; set; }
}
}
\ No newline at end of file
......@@ -44,11 +44,6 @@ namespace Edu.Model.ViewModel.Course
/// </summary>
public string GuestName { get; set; }
/// <summary>
/// 课程id
/// </summary>
public int CouseId { get; set; }
/// <summary>
/// 订单查询状态 1正常 2取消
/// </summary>
......@@ -126,5 +121,12 @@ namespace Edu.Model.ViewModel.Course
/// 协助人员姓名
/// </summary>
public string HelpEnterName { get; set; }
/// <summary>
/// 课程名称
/// </summary>
public string CourseName { get; set; }
}
}
\ No newline at end of file
......@@ -72,5 +72,10 @@ namespace Edu.Model.ViewModel.User
/// 岗位名称
/// </summary>
public string PostName { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string Email { get; set; }
}
}
\ No newline at end of file
......@@ -98,15 +98,22 @@ namespace Edu.Module.Course
/// 课程基础配置
/// </summary>
private readonly RB_Class_LessonPlanProjectsRepository ClassLessonPlanProjectsRepository = new RB_Class_LessonPlanProjectsRepository();
private readonly RB_Class_LessonCommentRepository classLessonCommentRepository = new RB_Class_LessonCommentRepository();
/// <summary>
/// 班级备案评论仓储层对象
/// </summary>
private readonly RB_Class_LessonCommentRepository classLessonCommentRepository = new RB_Class_LessonCommentRepository();
/// <summary>
/// 课程基础配置
/// </summary>
private readonly RB_Class_LessonPlanRepository ClassLessonPlanRepository = new RB_Class_LessonPlanRepository();
/// <summary>
/// 班级关联课程仓储层对象
/// </summary>
private readonly RB_Class_CourseRepository class_CourseRepository = new RB_Class_CourseRepository();
/// <summary>
/// 获取班级列表
/// </summary>
......@@ -190,11 +197,13 @@ namespace Edu.Module.Course
var classTimeList = new List<RB_Class_Time_ViewModel>();
var classOrderList = new List<RB_Order_ViewModel>();
var stepPriceList = new List<RB_Class_StepPrice_ViewModel>();
var otherCourseList = new List<RB_Class_Course_Extend>();
string ids = string.Join(",", list.Select(qitem => qitem.ClassId));
if (!string.IsNullOrEmpty(ids))
{
classTimeList = class_TimeRepository.GetClassTimeListRepository(ids);
classOrderList = orderRepository.GetClassOrderPeopleNum(ids);
otherCourseList= GetClassCourseListModule(new RB_Class_Course_Extend() { QClassIds = ids });
}
if (isGetStepPrice)
{
......@@ -210,6 +219,7 @@ namespace Edu.Module.Course
{
item.ClassStepPriceList = stepPriceList?.Where(qitem => qitem.ClassId == item.ClassId)?.ToList() ?? new List<RB_Class_StepPrice_ViewModel>();
}
item.OtherCourseList = otherCourseList?.Where(qitem => qitem.ClassId == item.ClassId)?.ToList() ?? new List<RB_Class_Course_Extend>();
}
}
return list;
......@@ -423,7 +433,6 @@ namespace Edu.Module.Course
}
}
#endregion
return flag;
}
......@@ -502,7 +511,6 @@ namespace Edu.Module.Course
var flag2 = class_PlanRepository.DeleteClassPlanRepository(ids);
}
}
List<RB_Class_Plan_ViewModel> classPlanList = new List<RB_Class_Plan_ViewModel>();
if (model.ClassHours > 0)
{
......@@ -664,7 +672,6 @@ namespace Edu.Module.Course
{
}
}
return classPlanList;
}
......@@ -1054,7 +1061,7 @@ namespace Edu.Module.Course
/// <param name="DropOutRemark"></param>
/// <returns></returns>
[TransactionCallHandler]
public bool UpdateClassStudentDropOutModule(string ids, string dropOutRemark, int classId, int createBy, int group_Id, int school_Id, string studentName)
public virtual bool UpdateClassStudentDropOutModule(string ids, string dropOutRemark, int classId, int createBy, int group_Id, int school_Id, string studentName)
{
bool flag = false;
foreach (var item in ids.Split(","))
......@@ -1105,7 +1112,6 @@ namespace Edu.Module.Course
{
{nameof(RB_Student_ViewModel.StuStatus),3},
};
//写日志
studentRepository.Update(fileds, new WhereHelper(nameof(RB_Student_ViewModel.StuId), model.StudentId));
var classLogModel = new Model.Entity.Log.RB_Class_Log()
......@@ -1385,7 +1391,6 @@ namespace Edu.Module.Course
/// <returns></returns>
public bool SetClassFinance(RB_Class_Finance_ViewModel model)
{
var oldModel = GetClassFinanceListRepository(model).FirstOrDefault();
if (oldModel == null || oldModel.FinanceId == 0)
{
......@@ -1507,18 +1512,18 @@ namespace Edu.Module.Course
}
}
}
return flag;
}
/// <summary>
/// 新增/修改老师教案
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[TransactionCallHandler]
public bool UpdateClassLessPlan(Class_LessonPlan_ViewModel model)
public virtual bool UpdateClassLessPlan(Class_LessonPlan_ViewModel model)
{
bool flag = false;
bool flag = true;
if (model.LessonPlanList != null && model.LessonPlanList.Any())
{
foreach (var item in model.LessonPlanList)
......@@ -1529,12 +1534,13 @@ namespace Edu.Module.Course
{
{nameof(RB_Class_LessonPlanDetails_ViewModel.Summary),itemDetails.Summary}
};
ClassLessonPlanDetailsRepository.Update(fileds, new WhereHelper(nameof(RB_Class_LessonPlanDetails_ViewModel.LessonPlanDetailsId), itemDetails.LessonPlanDetailsId));
if (flag)
{
flag = ClassLessonPlanDetailsRepository.Update(fileds, new WhereHelper(nameof(RB_Class_LessonPlanDetails_ViewModel.LessonPlanDetailsId), itemDetails.LessonPlanDetailsId));
}
}
}
return true;
}
return flag;
}
......@@ -1592,10 +1598,6 @@ namespace Edu.Module.Course
return ClassLessonPlanRepository.GetLessonPlanListRepository(query);
}
/// <summary>
/// 获取老师计划列表
/// </summary>
......@@ -1876,5 +1878,81 @@ namespace Edu.Module.Course
var flag = classRepository.Update(fileds, new WhereHelper(nameof(RB_Class_ViewModel.ClassId), ClassId));
return flag;
}
#region 班级课程关联管理
/// <summary>
/// 新增修改班级关联课程
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool SetClassCourseModule(List<RB_Class_Course_Extend> list)
{
bool flag = false;
foreach (var model in list)
{
var newModel = class_CourseRepository.GetClassCourseListRepository(new RB_Class_Course_Extend()
{
CourseId = model.CourseId,
ClassId = model.ClassId
})?.FirstOrDefault();
model.Id = newModel?.Id ?? 0;
if (model.Id > 0)
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{nameof(RB_Class_Course_Extend.UpdateBy),model.UpdateBy },
{nameof(RB_Class_Course_Extend.UpdateTime),model.UpdateTime },
};
flag = class_CourseRepository.Update(fileds, new WhereHelper(nameof(RB_Class_Course_Extend.Id), model.Id));
}
else
{
var newId = class_CourseRepository.Insert(model);
model.Id = newId;
flag = newId > 0;
}
}
return flag;
}
/// <summary>
/// 获取班级关联课程列表
/// </summary>
/// <param name="query"></param>
public List<RB_Class_Course_Extend> GetClassCourseListModule(RB_Class_Course_Extend query)
{
return class_CourseRepository.GetClassCourseListRepository(query);
}
/// <summary>
/// 删除班级关联课程
/// </summary>
/// <param name="Id"></param>
/// <param name="message"></param>
/// <returns></returns>
public bool RemoveClassCourseModule(int Id, out string message)
{
message = "";
var classCourse = class_CourseRepository.GetEntity(Id);
var orderList = orderRepository.GetList(new RB_Order_ViewModel()
{
ClassId = classCourse.ClassId,
CourseId = classCourse.CourseId,
OrderState = OrderStateEnum.Normal
});
if (orderList != null && orderList.Count > 0)
{
message = "此关联课程下有正常的订单,不能取消!";
return false;
}
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{nameof(RB_Class_Course_Extend.Status),(int)DateStateEnum.Delete },
};
var flag = class_CourseRepository.Update(fileds, new WhereHelper(nameof(RB_Class_Course_Extend.Id), Id));
return flag;
}
#endregion
}
}
This diff is collapsed.
......@@ -39,7 +39,6 @@ WHERE 1=1
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.Group_Id), query.Group_Id);
}
if (query.ClassId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.ClassId), query.ClassId);
......
using Edu.Common.Enum;
using Edu.Model.Entity.Course;
using Edu.Model.ViewModel.Course;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Edu.Repository.Course
{
/// <summary>
/// 班级关联课程仓储层
/// </summary>
public class RB_Class_CourseRepository : BaseRepository<RB_Class_Course>
{
/// <summary>
/// 获取班级关联课程列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Class_Course_Extend> GetClassCourseListRepository(RB_Class_Course_Extend query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.* ,IFNULL(B.CourseName,'') AS CourseName,IFNULL(B.ClassHours,0) AS ClassHours,IFNULL(B.SellPrice,0) AS SellPrice
FROM RB_Class_Course AS A LEFT JOIN rb_course AS B ON A.CourseId=B.CourseId
WHERE 1=1
");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Course_Extend.Status), (int)DateStateEnum.Normal);
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Course_Extend.Group_Id), query.Group_Id);
}
if (query.ClassId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Course_Extend.ClassId), query.ClassId);
}
if (query.CourseId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Course_Extend.CourseId), query.CourseId);
}
if (!string.IsNullOrEmpty(query.QClassIds))
{
builder.AppendFormat(" AND A.{0} IN({1}) ", nameof(RB_Class_Course_Extend.ClassId), query.QClassIds);
}
}
return Get<RB_Class_Course_Extend>(builder.ToString()).ToList();
}
}
}
......@@ -7,6 +7,9 @@ using Edu.Model.ViewModel.Course;
namespace Edu.Repository.Course
{
/// <summary>
/// 班级备案评论仓储层
/// </summary>
public class RB_Class_LessonCommentRepository : BaseRepository<RB_Class_LessonComment>
{
/// <summary>
......
......@@ -24,8 +24,10 @@ namespace Edu.Repository.Course
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*,IFNULL(B.RoomName,'') AS RoomName,IFNULL(T.TeacherName,'') AS TeacherName,IFNULL(T.TeacherHead,'') AS UserIcon
,Time.StartTime,time.EndTime,TIMESTAMPDIFF(MINUTE, CONCAT('2020-12-16',' ',time.StartTime), CONCAT('2020-12-16',' ',time.EndTime)) AS ClassMinutes
FROM RB_Class_Plan AS A LEFT JOIN rb_class_room AS B ON A.ClassRoomId=B.RoomId
LEFT JOIN rb_teacher AS T ON A.TeacherId=T.TId
LEFT JOIN rb_class_time AS time ON A.ClassPlanId=Time.ClassPlanId
WHERE 1=1
");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Status), (int)DateStateEnum.Normal);
......@@ -59,10 +61,61 @@ WHERE 1=1
{
builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y/%m')>='{1}' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.StartTime);
}
if (!string.IsNullOrEmpty(query.EndTime))
{
builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y/%m')<='{1} 23:59:59' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime);
}
}
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 获取班级上课计划
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="rowsCount"></param>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Class_Plan_ViewModel> GetClassPlanModelRepository(RB_Class_Plan_ViewModel query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT a.*
FROM rb_class_plan as a
WHERE a.`Status`=0 ");
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id);
}
if (query.School_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id);
}
if (query.ClassId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId);
}
if (query.Status >= 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Status), (int)query.Status);
}
if (!string.IsNullOrEmpty(query.QClassDateStr))
{
builder.AppendFormat(@" AND DATE_FORMAT(a.ClassDate,'%Y-%m-%d')=DATE_FORMAT('{0}','%Y-%m-%d') ", query.QClassDateStr);
}
else
{
builder.AppendFormat(@" AND DATE_FORMAT(a.ClassDate,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') ");
}
}
builder.AppendFormat(@" ORDER BY ClassDate DESC ");
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 判断是否存在
/// </summary>
......@@ -115,10 +168,12 @@ WHERE ClassId={1} AND ClassDate>'{2}'
public List<RB_Class_Plan_ViewModel> GetClassPlanList_V2(RB_Class_Plan_ViewModel query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@" SELECT a.*,c.Teacher_Id,c.ClassName,c.ClassType,T.TeacherName from rb_class_plan as a
left join rb_class c on a.ClassId = c.ClassId
LEFT JOIN rb_teacher AS T ON a.TeacherId=T.TId
where a.`Status`=0 ");
builder.AppendFormat(@"
SELECT a.*,c.Teacher_Id,c.ClassName,c.ClassType,T.TeacherName
FROM rb_class_plan as a
LEFT JOIN rb_class c on a.ClassId = c.ClassId
LEFT JOIN rb_teacher AS T ON a.TeacherId=T.TId
where a.`Status`=0 ");
if (query != null)
{
if (query.Group_Id > 0)
......@@ -157,7 +212,6 @@ LEFT JOIN rb_teacher AS T ON a.TeacherId=T.TId
{
builder.AppendFormat(" AND A.{0} <='{1} 23:59:59' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime);
}
}
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
......@@ -174,12 +228,13 @@ LEFT JOIN rb_teacher AS T ON a.TeacherId=T.TId
/// <returns></returns>
public List<RB_Class_Plan_ViewModel> GetClassPlanLogPageListRepository(int pageIndex, int pageSize, out long rowsCount, RB_Class_Plan_ViewModel query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@" SELECT a.*,b.Teacher_Id,c.TeacherName from rb_class_plan as a
LEFT JOIN rb_class as b on a.ClassId=b.ClassId
LEFT JOIN rb_teacher as c on c.TId=a.TeacherId
where a.`Status`=0 and DATE_FORMAT(a.ClassDate,'%Y-%m-%d')<=DATE_FORMAT(NOW(),'%Y-%m-%d') ");
builder.AppendFormat(@"
SELECT a.*,b.Teacher_Id,c.TeacherName
FROM rb_class_plan as a
LEFT JOIN rb_class as b on a.ClassId=b.ClassId
LEFT JOIN rb_teacher as c on c.TId=a.TeacherId
WHERE a.`Status`=0 and DATE_FORMAT(a.ClassDate,'%Y-%m-%d')<=DATE_FORMAT(NOW(),'%Y-%m-%d') ");
if (query != null)
{
if (query.Group_Id > 0)
......@@ -202,59 +257,12 @@ LEFT JOIN rb_teacher as c on c.TId=a.TeacherId
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Status), (int)query.Status);
}
}
builder.AppendFormat(@" order by ClassDate desc ");
return GetPage<RB_Class_Plan_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
}
/// <summary>
/// 获取班级上课计划
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="rowsCount"></param>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Class_Plan_ViewModel> GetClassPlanModelRepository(RB_Class_Plan_ViewModel query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT a.*
FROM rb_class_plan as a
WHERE a.`Status`=0 ");
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id);
}
if (query.School_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id);
}
if (query.ClassId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId);
}
if (query.Status >= 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Status), (int)query.Status);
}
if (!string.IsNullOrEmpty(query.QClassDateStr))
{
builder.AppendFormat(@" AND DATE_FORMAT(a.ClassDate,'%Y-%m-%d')=DATE_FORMAT('{0}','%Y-%m-%d') ", query.QClassDateStr);
}
else
{
builder.AppendFormat(@" AND DATE_FORMAT(a.ClassDate,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') ");
}
}
builder.AppendFormat(@" ORDER BY ClassDate DESC ");
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 获取班级累计上课时间(分钟)
/// </summary>
......@@ -280,10 +288,6 @@ WHERE p.`Status`=0 AND p.Group_Id={group_Id} AND p.ClassId ={classId}
}
/// <summary>
/// 获取班级上课计划列表
/// </summary>
......
......@@ -111,16 +111,6 @@ FROM rb_class_time AS B INNER JOIN rb_class_plan AS A ON A.ClassPlanId=B.ClassPl
}
/// <summary>
/// 根据班级编号删除班级上课时间
/// </summary>
/// <param name="ClassId">班级编号</param>
/// <returns></returns>
public bool DeleteClassTimeRepository(int ClassId)
{
return base.DeleteOne(new VT.FW.DB.WhereHelper(nameof(RB_Class_Time_ViewModel.ClassId), ClassId));
}
/// <summary>
/// 根据上课计划编号删除上课计划
/// </summary>
......
......@@ -47,6 +47,10 @@ namespace Edu.Repository.Course
{
where += $@" and o.{nameof(RB_Order_ViewModel.SourceId)} ={demodel.SourceId}";
}
if (demodel.CourseId > 0)
{
where += $@" and o.{nameof(RB_Order_ViewModel.CourseId)} ={demodel.CourseId}";
}
if (!string.IsNullOrEmpty(demodel.ClassIds))
{
where += $@" and o.{nameof(RB_Order_ViewModel.ClassId)} in({demodel.ClassIds})";
......@@ -97,12 +101,15 @@ namespace Edu.Repository.Course
orderBy = " o.CreateTime desc";
}
string sql = $@" select o.*,c.ClassName,t.TeacherName,t.TeacherIcon from RB_Order o
left join rb_class c on o.ClassId = c.ClassId
left join rb_teacher t on c.Teacher_Id = t.TId
where {where} order by {orderBy}
string sql = $@"
SELECT o.*,c.ClassName,t.TeacherName,t.TeacherIcon,IFNULL(course.CourseName,'') AS CourseName
FROM RB_Order o
LEFT JOIN rb_class c on o.ClassId = c.ClassId
LEFT JOIN rb_teacher t on c.Teacher_Id = t.TId
LEFT JOIN rb_course AS course ON (o.CourseId=course.CourseId AND o.CourseId>0 AND o.OrderType=1)
WHERE {where}
ORDER BY {orderBy}
";
return Get<RB_Order_ViewModel>(sql).ToList();
}
......@@ -180,9 +187,9 @@ where {where} order by {orderBy}
where += $@" and o.OrderId in (select OrderId from rb_order_guest where Status =0 and GuestName like '%{demodel.GuestName}%')";
}
}
if (demodel.CouseId > 0)
if (demodel.CourseId > 0)
{
where += $@" and c.{nameof(RB_Class.CouseId)} ={demodel.CouseId}";
where += $@" and c.{nameof(RB_Class.CouseId)} ={demodel.CourseId}";
}
if (!string.IsNullOrEmpty(demodel.StartTime))
{
......@@ -282,9 +289,9 @@ where {where} order by {orderBy}
where += $@" and o.OrderId in (select OrderId from rb_order_guest where Status =0 and GuestName like '%{demodel.GuestName}%')";
}
}
if (demodel.CouseId > 0)
if (demodel.CourseId > 0)
{
where += $@" and c.{nameof(RB_Class.CouseId)} ={demodel.CouseId}";
where += $@" and c.{nameof(RB_Class.CouseId)} ={demodel.CourseId}";
}
if (!string.IsNullOrEmpty(demodel.StartTime))
{
......
......@@ -126,38 +126,42 @@ namespace Edu.Repository.Course
/// <returns></returns>
public List<RB_Order_Guest_ViewModel> GetPageList(int pageIndex, int pageSize, out long rowsCount, RB_Order_Guest_ViewModel demodel)
{
string where = $@" 1=1 and Status=0";
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.* ,IFNULL(course.CourseName,'') AS CourseName,tOrder.CourseId,tOrder.OrderType,tOrder.StartClassHours,tOrder.IsChaBan
FROM RB_Order_Guest AS A LEFT JOIN RB_Order as tOrder ON A.OrderId=tOrder.OrderId
LEFT JOIN rb_course AS course ON (tOrder.CourseId=course.CourseId AND tOrder.CourseId>0 AND tOrder.OrderType=1)
WHERE 1=1 AND A.Status=0
");
if (demodel.Group_Id > 0)
{
where += $@" and {nameof(RB_Order_Guest_ViewModel.Group_Id)} ={demodel.Group_Id}";
builder.AppendFormat($@" AND A.{nameof(RB_Order_Guest_ViewModel.Group_Id)} ={demodel.Group_Id}");
}
if (demodel.School_Id > 0)
{
where += $@" and {nameof(RB_Order_Guest_ViewModel.School_Id)} ={demodel.School_Id}";
builder.AppendFormat($@" AND A.{nameof(RB_Order_Guest_ViewModel.School_Id)} ={demodel.School_Id}");
}
if (demodel.OrderId > 0)
{
where += $@" and {nameof(RB_Order_Guest_ViewModel.OrderId)} ={demodel.OrderId}";
builder.AppendFormat($@" AND A.{nameof(RB_Order_Guest_ViewModel.OrderId)} ={demodel.OrderId}");
}
if (demodel.ClassId > 0)
{
where += $@" and {nameof(RB_Order_Guest_ViewModel.ClassId)} ={demodel.ClassId}";
builder.AppendFormat($@" AND A.{nameof(RB_Order_Guest_ViewModel.ClassId)} ={demodel.ClassId}");
}
if (demodel.SourceId > 0)
{
where += $@" and {nameof(RB_Order_Guest_ViewModel.SourceId)} ={demodel.SourceId}";
builder.AppendFormat($@" AND A.{nameof(RB_Order_Guest_ViewModel.SourceId)} ={demodel.SourceId}");
}
if (!string.IsNullOrEmpty(demodel.GuestName))
{
where += $@" and {nameof(RB_Order_Guest_ViewModel.GuestName)} like '%{demodel.GuestName}%'";
builder.AppendFormat($@" AND A.{nameof(RB_Order_Guest_ViewModel.GuestName)} like '%{demodel.GuestName}%'");
}
if (demodel.GuestState > 0)
{
where += $@" and {nameof(RB_Order_Guest_ViewModel.GuestState)} ={demodel.GuestState}";
builder.AppendFormat($@" AND A.{nameof(RB_Order_Guest_ViewModel.GuestState)} ={demodel.GuestState}");
}
string sql = $@" select * from RB_Order_Guest where {where}";
return GetPage<RB_Order_Guest_ViewModel>(pageIndex, pageSize, out rowsCount, sql).ToList();
return GetPage<RB_Order_Guest_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
}
......@@ -197,7 +201,6 @@ namespace Edu.Repository.Course
{
where += $@" and {nameof(RB_Order_Guest_ViewModel.GuestState)} ={demodel.GuestState}";
}
string sql = $@" select count(0) from RB_Order_Guest where {where}";
var obj = ExecuteScalar(sql);
if (obj == null)
......
......@@ -136,17 +136,17 @@ SELECT A.*,IFNULL(G.GroupName,'') AS GroupName,IFNULL(s.SName,'') AS SchoolName,
FROM
(
SELECT A.Id,A.Account,A.`Password`,A.AccountType,A.AccountId,A.CreateBy,A.CreateTime,A.UpdateBy,A.UpdateTime,A.Group_Id,B.School_Id,A.`Status`
,A.AnnualLeaveDay, A.DirectSupervisor,A.OpenId,A.ActivationStatus,IFNULL(B.MName,'') AS AccountName,B.MHead AS UserIcon,B.Dept_Id,B.Post_Id
,A.AnnualLeaveDay, A.DirectSupervisor,A.OpenId,A.ActivationStatus,IFNULL(B.MName,'') AS AccountName,B.MHead AS UserIcon,B.Dept_Id,B.Post_Id,IFNULL(B.Email,'') AS Email
FROM rb_account AS A INNER JOIN rb_manager AS B ON A.AccountId=B.MId AND A.AccountType=1
WHERE 1=1 {0}
UNION ALL
SELECT A.Id,A.Account,A.`Password`,A.AccountType,A.AccountId,A.CreateBy,A.CreateTime,A.UpdateBy,A.UpdateTime,A.Group_Id,B.School_Id,A.`Status`
,A.AnnualLeaveDay, A.DirectSupervisor,A.OpenId,A.ActivationStatus,IFNULL(B.TeacherName,'') AS AccountName,B.TeacherIcon AS UserIcon,B.Dept_Id,B.Post_Id
,A.AnnualLeaveDay, A.DirectSupervisor,A.OpenId,A.ActivationStatus,IFNULL(B.TeacherName,'') AS AccountName,B.TeacherIcon AS UserIcon,B.Dept_Id,B.Post_Id,IFNULL(B.Email,'') AS Email
FROM rb_account AS A INNER JOIN rb_teacher AS B ON A.AccountId=B.TId AND A.AccountType=2
WHERE 1=1 {0}
UNION ALL
SELECT A.Id,A.Account,A.`Password`,A.AccountType,A.AccountId,A.CreateBy,A.CreateTime,A.UpdateBy,A.UpdateTime,A.Group_Id,B.School_Id,A.`Status`
,A.AnnualLeaveDay, A.DirectSupervisor,A.OpenId,A.ActivationStatus,IFNULL(B.AssistName,'') AS AccountName,B.AssistIcon AS UserIcon,B.Dept_Id,B.Post_Id
,A.AnnualLeaveDay, A.DirectSupervisor,A.OpenId,A.ActivationStatus,IFNULL(B.AssistName,'') AS AccountName,B.AssistIcon AS UserIcon,B.Dept_Id,B.Post_Id,IFNULL(B.Email,'') AS Email
FROM rb_account AS A INNER JOIN rb_assist AS B ON A.AccountId=B.AId AND A.AccountType=3
WHERE 1=1 {0}
) AS A LEFT JOIN rb_group AS g ON A.Group_Id=g.GId
......
......@@ -76,6 +76,7 @@ namespace Edu.WebApi.Controllers.Course
item.NewPlanDateTime,
item.ClassStatus,
item.Status,
item.OtherCourseList,
});
}
pageModel.Count = rowsCount;
......@@ -369,8 +370,10 @@ namespace Edu.WebApi.Controllers.Course
EndTime = jobj["EndTime"].ToString(),
});
}
List<ClassTimeItem> slist = new List<ClassTimeItem>();
slist.Add(model);
List<ClassTimeItem> slist = new List<ClassTimeItem>
{
model
};
bool flag = classModule.UpdateClassTimeModule(item.ClassId, Common.Plugin.JsonHelper.Serialize(slist));
}
}
......@@ -390,7 +393,7 @@ namespace Edu.WebApi.Controllers.Course
};
if (extModel.ClassId <= 0)
{
return ApiResult.ParamIsNull(message: "获取到班级编号,请刷新页面重试!");
return ApiResult.ParamIsNull(message: "获取到班级编号,请刷新页面重试!");
}
bool flag = classModule.SetClassStatusModule(extModel.ClassStatus, extModel.ClassId);
return flag ? ApiResult.Success() : ApiResult.Failed();
......@@ -467,7 +470,6 @@ namespace Edu.WebApi.Controllers.Course
public ApiResult GetCourseClassTypeEnumList()
{
var list = Common.Plugin.EnumHelper.EnumToList(typeof(CourseClassTypeEnum));
return ApiResult.Success(data: list);
}
......@@ -479,11 +481,112 @@ namespace Edu.WebApi.Controllers.Course
public ApiResult GetStudentNumTypeEnumList()
{
var list = Common.Plugin.EnumHelper.EnumToList(typeof(StudentNumTypeEnum));
return ApiResult.Success(data: list);
}
#endregion
#region 班级关联课程管理
/// <summary>
/// 添加修改班级
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetClassCourse()
{
JArray jarray = JArray.Parse(base.ParmJObj.GetStringValue("courseMsg"));
List<RB_Class_Course_Extend> list = new List<RB_Class_Course_Extend>();
if (jarray != null && jarray.Count > 0)
{
foreach (var jItem in jarray)
{
JObject jobj = JObject.Parse(jItem.ToString());
var extModel = new RB_Class_Course_Extend()
{
Id = jobj.GetInt("Id"),
ClassId = jobj.GetInt("ClassId"),
CourseId = jobj.GetInt("CourseId"),
CourseName=jobj.GetStringValue("CourseName"),
CreateBy = UserInfo.Id,
CreateTime = DateTime.Now,
UpdateBy = UserInfo.Id,
UpdateTime = DateTime.Now,
Group_Id = this.UserInfo.Group_Id,
School_Id = this.UserInfo.School_Id,
Status = Common.Enum.DateStateEnum.Normal
};
list.Add(extModel);
}
}
else
{
return ApiResult.ParamIsNull(message: "请选择要关联的课程!");
}
var groupList = list.GroupBy(qitem => new { qitem.CourseId,qitem.CourseName }).Where(qitem=>qitem.Count()>1).Select(qitem => new { qitem.Key.CourseId,qitem.Key.CourseName});
string message = "";
if (groupList != null && groupList.Count() > 0)
{
foreach (var item in groupList)
{
message += "," + item.CourseName + "、";
}
}
if (!string.IsNullOrEmpty(message))
{
return ApiResult.ParamIsNull(message: message.TrimStart(',').TrimEnd('、') + "重复!请删除后再提交!");
}
var classModel = classModule.GetClassModule(list[0].ClassId);
if (list.Where(qitem => qitem.CourseId == classModel.CouseId).Count() > 0)
{
var model = list.Where(qitem => qitem.CourseId == classModel.CouseId)?.FirstOrDefault();
return ApiResult.ParamIsNull(message: string.Format("此班级已绑定{0}课程,请删除后再提交!", (model?.CourseName ?? "")));
}
bool flag = classModule.SetClassCourseModule(list);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
/// <summary>
/// 获取班级关联课程列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetClassCourseList()
{
var query = new RB_Class_Course_Extend()
{
ClassId = base.ParmJObj.GetInt("ClassId"),
};
var list = classModule.GetClassCourseListModule(query);
return ApiResult.Success(data: list.Select(qitem => new
{
qitem.Id,
qitem.ClassId,
qitem.CourseName,
qitem.CourseId,
qitem.ClassHours,
qitem.SellPrice,
}));
}
/// <summary>
/// 删除班级关联课程
/// </summary>
/// <returns></returns>
public ApiResult RemoveClassCourse()
{
var extModel = new RB_Class_Course_Extend()
{
Id = base.ParmJObj.GetInt("Id"),
};
if (extModel.Id <= 0)
{
return ApiResult.ParamIsNull(message: "未获取到班级关联课程编号,请刷新页面重试!");
}
bool flag = classModule.RemoveClassCourseModule(extModel.Id,out string message);
return flag ? ApiResult.Success(message:message) : ApiResult.Failed(message:message);
}
#endregion
#region 上课计划
/// <summary>
......@@ -1471,7 +1574,6 @@ namespace Edu.WebApi.Controllers.Course
/// <returns></returns>
public ApiResult GetNowUserLessonComment()
{
var query = new RB_Class_LessonComment_ViewModel()
{
ClassPlanId = base.ParmJObj.GetInt("ClassPlanId"),
......@@ -1492,8 +1594,6 @@ namespace Edu.WebApi.Controllers.Course
}
#endregion
#region 老师上课挂件
[HttpGet]
......@@ -1712,6 +1812,5 @@ namespace Edu.WebApi.Controllers.Course
return ApiResult.Success(data: data);
}
#endregion
}
}
......@@ -116,7 +116,7 @@ namespace Edu.WebApi.Controllers.User
var actionList = menuModule.GetPostMenuFunctionListModule(model.Post_Id.ToString());
//上传配置
var uploadConfig = publicModule.GetFileStoreList(new Model.Public.RB_File_Store() { Group_Id = model.Group_Id, IsDefault = 1 })?.FirstOrDefault();
UserInfo obj = new UserInfo
{
Id = model.Id,
......@@ -139,6 +139,7 @@ namespace Edu.WebApi.Controllers.User
DeptName = model.DeptName,
PostId = model.Post_Id,
PostName = model.PostName,
Email=model.Email,
ActionMenuList = actionList?.Select(qitem => new { qitem.FunctionCode, qitem.FunctionName, qitem.MenuName, qitem.MenuUrl }),
UploadConfig = new
{
......@@ -396,7 +397,7 @@ namespace Edu.WebApi.Controllers.User
}
var result = new
{
TeacherName = modelTeacher.FirstOrDefault()?.TeacherName,
modelTeacher.FirstOrDefault()?.TeacherName,
tempList = tempList.Select(x => new { x.RoomName, x.TeacherName, NewPlanDateTime = x.NewPlanDateTime.HasValue ? x.NewPlanDateTime.Value.ToString("yyyy-MM-dd HH:mm") : "", NewEndPlanDateTime = x.NewEndPlanDateTime.HasValue ? x.NewEndPlanDateTime.Value.ToString("yyyy-MM-dd HH:mm") : "" })
};
return ApiResult.Failed(message: $"本教室没有找到您的课", data: result);
......
......@@ -88,7 +88,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
[HttpPost]
[HttpGet]
[AllowAnonymous]
public async Task<WxPayCallbackRespModel> WxPayCallback(WxPayNotifyModel wxPayNotifyModel)
public WxPayCallbackRespModel WxPayCallback(WxPayNotifyModel wxPayNotifyModel)
{
var viewModel = new WxPayCallbackRespModel();
try
......@@ -112,7 +112,6 @@ namespace Edu.WebApi.Controllers.WeChatPay
}
else
{
if (payModel != null && payModel.trade_state == "SUCCESS")//生成财务单据
{ //然后进行数据库更新处理……等等其他操作
UpdateFinance(payModel);//生成财务单据以及生成支付记录
......@@ -123,6 +122,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "WxPayCallback");
viewModel.code = "FAIL";
viewModel.message = "数据解密失败";
}
......@@ -137,7 +137,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
/// <returns></returns>
[AllowAnonymous]
public async Task UpdateFinance(WxPayResourceDecryptModel payModel)
public void UpdateFinance(WxPayResourceDecryptModel payModel)
{
LogHelper.WriteInfo("我是回调" + System.DateTime.Now);
int contractId = Convert.ToInt32(payModel.out_trade_no[17..]);
......@@ -158,7 +158,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
{
LogHelper.WriteInfo(payModel.out_trade_no + "我要新增财务单据啦...." + System.DateTime.Now);
var orderModle = educationContractModule.GetEducationContractModule(contractId);
var orderModel = orderModule.GetClassOrderInfo(orderModle.OrderId);
var orderModel = orderModule.GetClassOrderInfoModule(orderModle.OrderId);
var financeConfig = educationContractModule.GetFinanceConfigList(new Model.ViewModel.Course.RB_Finance_Config_ViewModel { Group_Id = orderModle.Group_Id, Type = Common.Enum.Course.FinanceConfigTypeEnum.Tuition }).FirstOrDefault();
if (financeConfig == null)
{
......@@ -183,15 +183,17 @@ namespace Edu.WebApi.Controllers.WeChatPay
ServiceFee = OriginalFee
};
#region 财务单据数据组装
var detailList = new List<object>();
detailList.Add(new
var detailList = new List<object>
{
CostTypeId = financeConfig?.CostTypeId ?? 533,
Number = 1,
OriginalMoney = Convert.ToDecimal(payModel.amount.payer_total) / 100,
UnitPrice = Convert.ToDecimal(payModel.amount.payer_total) / 100,
Remark = orderModle.StudentName + orderModle.CourseName + payModel.out_trade_no
});
new
{
CostTypeId = financeConfig?.CostTypeId ?? 533,
Number = 1,
OriginalMoney = Convert.ToDecimal(payModel.amount.payer_total) / 100,
UnitPrice = Convert.ToDecimal(payModel.amount.payer_total) / 100,
Remark = orderModle.StudentName + orderModle.CourseName + payModel.out_trade_no
}
};
var financeObj = new
{
......@@ -216,8 +218,8 @@ namespace Edu.WebApi.Controllers.WeChatPay
RB_BranchName = userInfo.SchoolName,
RB_GroupName = userInfo.GroupName,
FinanceType = 2,
GuestId = orderModle.GuestId,
OrderId = orderModle.OrderId,
orderModle.GuestId,
orderModle.OrderId,
TCIDList = orderModel.ClassId > 0 ? new List<int>() { orderModel.ClassId } : new List<int>(),
};
#endregion
......@@ -363,7 +365,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
[HttpPost]
[HttpGet]
[AllowAnonymous]
public async Task<RefundsCallbackRespModel> RefundsCallback(RefundsCallbackModel wxPayNotifyModel)
public RefundsCallbackRespModel RefundsCallback(RefundsCallbackModel wxPayNotifyModel)
{
//我没有使用官方的那种验证数据安全性的方法,我解密出来数据之后,直接拿着商户退款订单号再去查询一下订单状态,然后再更新到数据库中。我嫌麻烦……
var resource = wxPayNotifyModel?.resource ?? new RefundsCallbackResourceModel();
......@@ -420,7 +422,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
[AllowAnonymous]
public async Task UpdateRefundsCallbackFinance(RefundsCallbackDecryptModel payModel)
public void UpdateRefundsCallbackFinance(RefundsCallbackDecryptModel payModel)
{
int contractId = Convert.ToInt32(payModel.out_trade_no[17..]);
bool isAdd = false;
......@@ -439,7 +441,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
if (isAdd)
{
var orderModle = educationContractModule.GetEducationContractModule(contractId);
var orderModel = orderModule.GetClassOrderInfo(orderModle.OrderId);
var orderModel = orderModule.GetClassOrderInfoModule(orderModle.OrderId);
var payOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no }).FirstOrDefault();
var userInfo = employeeModule.GetEmployeeListModule(new Model.ViewModel.User.Employee_ViewModel { Id = orderModel.EnterID, Group_Id = orderModel.Group_Id }).ToList().FirstOrDefault();
var OriginalFee = Math.Round(Convert.ToDecimal((Convert.ToDecimal(Config.SettlementRate) / 100) * (Convert.ToDecimal(payModel.amount.payer_total) / 100)), 2, MidpointRounding.AwayFromZero);//手续费
......
......@@ -466,7 +466,7 @@ namespace Edu.WebApi.Controllers.Web
dmodel.Group_Id = groupId;
}
dmodel.Saleplat = "2,3";
var list = orderModule.GetClassPruductList(pageModel.PageIndex, pageModel.PageSize, out long count, dmodel);
var list = orderModule.GetClassPruductListModule(pageModel.PageIndex, pageModel.PageSize, out long count, dmodel);
pageModel.Count = Convert.ToInt32(count);
pageModel.PageData = list.Select(x => new
{
......
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