Commit e88266c4 authored by 黄奎's avatar 黄奎

新增单据类型

parent 8314e080
......@@ -406,6 +406,17 @@ namespace Edu.Common
}
/// <summary>
/// 订单分拆流程编号
/// </summary>
public static int OrderSplitClassFlowId
{
get
{
int.TryParse(ReadConfigKey("OrderSplitClassFlowId"), out int OrderSplitClassFlowId);
return OrderSplitClassFlowId;
}
}
/// <summary>
......
......@@ -37,5 +37,11 @@ namespace Edu.Common.Enum.Finance
/// </summary>
[EnumField("订单转班")]
OrderTransClass = 5,
/// <summary>
/// 订单分拆
/// </summary>
[EnumField("订单分拆")]
OrderSplitClass = 6,
}
}
......@@ -319,6 +319,18 @@ namespace Edu.Module.EduTask
});
}
#endregion
#region 订单分拆
if (subItem.ReceiptType == Common.Enum.Finance.ReceiptTypeEnum.OrderSplitClass)
{
string transClassIds = string.Join(",", list.Where(qitem => qitem.ReceiptType == subItem.ReceiptType).Select(qitem => qitem.RelationId));
orderTransList = order_ChangeRepository.GetOrderChangeListRepository(new RB_Order_Change_ViewModel()
{
QIds = transClassIds,
ChangeType = 2,
});
}
#endregion
}
foreach (var item in list)
......@@ -401,7 +413,12 @@ namespace Edu.Module.EduTask
//订单转班
if (item.ReceiptType == Common.Enum.Finance.ReceiptTypeEnum.OrderTransClass)
{
DataObj = orderTransList?.Where(qitem => qitem.Id == item.RelationId)?.FirstOrDefault();
DataObj = orderTransList?.Where(qitem => qitem.Id == item.RelationId && qitem.ChangeType==1)?.FirstOrDefault();
}
//订单分拆
if (item.ReceiptType == Common.Enum.Finance.ReceiptTypeEnum.OrderSplitClass)
{
DataObj = orderTransList?.Where(qitem => qitem.Id == item.RelationId && qitem.ChangeType == 2)?.FirstOrDefault();
}
object AuditObj = new object();
if (item.VerifyStatus == EduTaskRrocessStatus.NotAudit || item.VerifyStatus == EduTaskRrocessStatus.AuditIng)
......
......@@ -84,7 +84,7 @@ namespace Edu.Module.EduTask
private readonly RB_Class_PlanRepository class_PlanRepository = new RB_Class_PlanRepository();
/// <summary>
/// 新增订单转班、分拆
/// 新增订单转班
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
......@@ -480,5 +480,185 @@ namespace Edu.Module.EduTask
#endregion
return frid;
}
#region 分拆订单
/// <summary>
/// 新增订单拆分申请
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[TransactionCallHandler]
public virtual bool SetOrderSplitModule(RB_Order_Change_ViewModel model, out string message)
{
message = "";
bool flag = false;
var newId = order_ChangeRepository.Insert(model);
model.Id = newId;
flag = newId > 0;
if (flag)
{
var educationReceipt = new RB_Education_Receipt()
{
Id = 0,
Title = "订单分拆申请",
ReceiptType = Common.Enum.Finance.ReceiptTypeEnum.OrderSplitClass,
RelationId = newId,
OrderId = model.SourceOrderId,
ClassId = model.NewClassId,
Group_Id = model.Group_Id,
School_Id = model.School_Id,
CreateBy = model.CreateBy,
CreateTime = model.CreateTime,
UpdateBy = model.UpdateBy,
UpdateTime = model.UpdateTime,
VerifyStatus = Common.Enum.EduTask.EduTaskRrocessStatus.NotAudit,
IsCreate = 0,
EffectiveDate = model.EffectiveDate
};
flag = education_ReceiptRepository.SetEducationReceiptRepository(educationReceipt, out message);
Dictionary<string, object> guestFileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest_ViewModel.GuestState),8}
};
if (flag)
{
flag = guestRepository.Update(guestFileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), model.OrderGuestId));
}
}
return flag;
}
/// <summary>
/// 订单分拆处理类方法
/// </summary>
/// <returns></returns>
public bool UpdateOrderSplitModule(RB_Education_Receipt receiptModel)
{
bool flag = false;
if (receiptModel.RelationId > 0)
{
var orderChangeModel = order_ChangeRepository.GetEntity<RB_Order_Change_ViewModel>(receiptModel.RelationId);
if (orderChangeModel != null && orderChangeModel.Id > 0)
{
if (orderChangeModel.EffectiveDate < DateTime.Now)
{
return false;
}
var oldOrderModel = orderRepository.GetEntity(orderChangeModel.SourceOrderId);
var newClassModel = classRepository.GetEntity(orderChangeModel.NewClassId);
var newCourseModel = courseRepository.GetEntity(orderChangeModel.NewCourseId);
var userInfo = UserReidsCache.GetUserLoginInfo(oldOrderModel.EnterID);
var guestClassHours = GetGuestFinishMinutesModule(orderChangeModel.OrderGuestId.ToString());
var guestModel = guestRepository.GetEntity(orderChangeModel.OrderGuestId);
//计算课时单价
//老订单应收
//单个人员的课时单价
var unitPrice = (oldOrderModel.Income + oldOrderModel.PlatformTax) / oldOrderModel.GuestNum / guestModel.TotalHours;
//单人已完成应收
var singleFinishPrice = Math.Round(guestClassHours.FinishClassHours * unitPrice, 2);
//单人应收
var singlePreferPrice = Math.Round(guestModel.TotalHours * unitPrice, 2);
//原订单应收=原订单应收-单人应收+单人完成
decimal oldPreferPrice = oldOrderModel.PreferPrice - singlePreferPrice + singleFinishPrice;
//新订单应收和退款一致
decimal newPreferPrice = singlePreferPrice - singleFinishPrice;
#region 生成新订单
var orderModel = new RB_Order_ViewModel()
{
OrderId = 0,
ClassId = orderChangeModel.NewClassId,//班级编号
GuestNum = 1,
OrderSource = oldOrderModel.OrderSource,
OrderType = oldOrderModel.OrderType,
Class_Price = newCourseModel.SellPrice,//单价
Unit_Price = newCourseModel.SellPrice,//成交单价
PreferPrice = newPreferPrice,//应收,
Income = 0,
HelpEnterId = 0,
GeneralOccupation = "",
EduOccupation = "",
SaleRemark = orderChangeModel.Remarks,//销售备注
SourceId = 0,
IsLessPrice = 0,
LessPrice = 0,
OrderNature = oldOrderModel.OrderNature,
OldPreferPrice = newPreferPrice,//应收,
CourseId = orderChangeModel.NewCourseId,
StartClassHours = 0,
UpOrderId = 0,
VisitorReserveId = 0,
JoinType = Common.Enum.Sale.OrderJoinTypeEnum.TransOrder,
TargetJoinType = Common.Enum.Sale.OrderJoinTypeEnum.Normal,
EffectTime = orderChangeModel.EffectiveDate,
};
orderModel.SourceOrderId = orderChangeModel.SourceOrderId;
orderModel.Group_Id = userInfo.Group_Id;
orderModel.School_Id = userInfo.School_Id;
orderModel.Dept_Id = userInfo.DeptId;
orderModel.OrderForm = OrderFormEnum.Computer;
orderModel.EnterID = userInfo.Id;
orderModel.OrderState = OrderStateEnum.Normal;
orderModel.TradeWay = TradeWayEnum.OnLine;
orderModel.CreateBy = userInfo.Id;
orderModel.CreateTime = DateTime.Now;
orderModel.UpdateBy = userInfo.Id;
orderModel.UpdateTime = DateTime.Now;
orderModel.OldGuestId = orderChangeModel.OrderGuestId;
flag = orderModule.SetClassOrderCommonModule(orderModel, userInfo, false, out string message);
#endregion
if (flag)
{
#region 修改老订单 【目标订单和应收】
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{nameof(RB_Order_ViewModel.TargetOrderId),orderModel.OrderId },
{nameof(RB_Order_ViewModel.PreferPrice),oldPreferPrice },
{nameof(RB_Order_ViewModel.TargetJoinType),(int) Common.Enum.Sale.OrderJoinTypeEnum.TransOrder },
};
flag = orderRepository.Update(fileds, new WhereHelper(nameof(RB_Order_ViewModel.OrderId), orderChangeModel.SourceOrderId));
#endregion
#region 修改老学员课时相关
Dictionary<string, object> guestFileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest_ViewModel.TotalHours),guestClassHours.FinishClassHours },
{nameof(RB_Order_Guest_ViewModel.GuestState),7 },
};
if (flag)
{
flag = guestRepository.Update(guestFileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), orderChangeModel.OrderGuestId));
}
#endregion
#region 生成财务单据
if (flag)
{
//var RelevanceFrId = CreateExpenditure(newPreferPrice, guestModel.Id, guestModel.GuestName, userInfo, oldOrderModel.ClassId, oldOrderModel.OrderId, out string msg1);
//var InCome = CreateInCome(newPreferPrice, orderModel.NewGuestId, guestModel.GuestName, userInfo, orderModel.ClassId, orderModel.OrderId, RelevanceFrId, out string msg2);
//flag = RelevanceFrId > 0 && InCome > 0;
}
#endregion
}
if (flag)
{
//Dictionary<string, object> fileds = new Dictionary<string, object>()
//{
// {nameof(RB_Education_Receipt.IsCreate),1}
//};
//flag = education_ReceiptRepository.Update(fileds, new WhereHelper(nameof(RB_Education_Receipt.Id), receiptModel.Id));
}
}
}
return flag;
}
#endregion
}
}
......@@ -259,6 +259,15 @@ WHERE 1=1
return false;
}
}
else if (model.ReceiptType == Common.Enum.Finance.ReceiptTypeEnum.OrderSplitClass)
{
flowModel = flowRepository.GetFlowRepository(Common.Config.OrderSplitClassFlowId);
if (flowModel == null)
{
message = "未配置订单分拆流程!";
return false;
}
}
if (flowModel?.FlowNodeList?.Count == 0)
{
message = "未配置审核流程!";
......
......@@ -106,5 +106,46 @@ namespace Edu.WebApi.Controllers.EduTask
bool flag = orderChangeModule.SetOrderChangeModule(model, out string message);
return flag ? ApiResult.Success() : ApiResult.Failed(message: message);
}
/// <summary>
/// 订单拆分申请
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetOrderSplit()
{
var model = new RB_Order_Change_ViewModel()
{
Id = base.ParmJObj.GetInt("Id"),
SourceOrderId = base.ParmJObj.GetInt("SourceOrderId"),
ChangeType = base.ParmJObj.GetInt("ChangeType"),
NewClassId = base.ParmJObj.GetInt("NewClassId"),
NewCourseId = base.ParmJObj.GetInt("NewCourseId"),
EffectiveDate = base.ParmJObj.GetDateTime("EffectiveDate"),
Remarks = base.ParmJObj.GetStringValue("Remarks"),
OrderGuestId = base.ParmJObj.GetInt("OrderGuestId"),
OutTime = base.ParmJObj.GetDateTime("OutTime"),
};
var oldOrderModel = orderModule.GetClassOrderInfoModule(model.SourceOrderId);
if (oldOrderModel == null)
{
return ApiResult.ParamIsNull(message: "原订单号不存在!");
}
if (oldOrderModel.PreferPrice != (oldOrderModel.Income + oldOrderModel.PlatformTax - oldOrderModel.Refund))
{
return ApiResult.ParamIsNull(message: "原订单款未收齐,不能转班!");
}
var classModel = classModule.GetClassModule(model.NewClassId);
model.CreateBy = base.UserInfo.Id;
model.CreateTime = DateTime.Now;
model.Group_Id = base.UserInfo.Group_Id;
model.School_Id = classModel.School_Id;
model.UpdateBy = base.UserInfo.Id;
model.UpdateTime = DateTime.Now;
bool flag = orderChangeModule.SetOrderSplitModule(model, out string message);
return flag ? ApiResult.Success() : ApiResult.Failed(message: message);
}
}
}
......@@ -87,5 +87,7 @@
//临时上课邀请流程编号
"TempInvitationClassFlowId": 4,
//订单转班流程编号
"OrderTransClassFlowId": 5
"OrderTransClassFlowId": 5,
//订单分拆流程编号
"OrderSplitClassFlowId": 6
}
\ No newline at end of file
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