public static OrderDetModel ToModel(this OrderDet entity) { var model = new OrderDetModel() { Id = entity.Id, OrderId = entity.OrderId, StartDate = entity.StartDate, StartTime = entity.StartTime, EndDate = entity.EndDate, EndTime = entity.EndTime, IOHours = entity.IOHours, Description = entity.Description, Audit = entity.Audit ?? string.Empty, InformLeader = entity.InformLeader ?? false, WorkTransfer = entity.WorkTransfer ?? false, Recipient = entity.Recipient.HasValue ? entity.Recipient.Value : 0, }; using (var dbContext = new MissionskyOAEntities()) { UserService userServer = new UserService(); if (entity.Recipient != null) { var RecipientUser = userServer.GetUserDetail(entity.Recipient.Value); model.RecipientName = RecipientUser == null ? string.Empty : RecipientUser.EnglishName; } } model.StartDate = Convert.ToDateTime(entity.StartDate.ToShortDateString() + " " + entity.StartTime.ToString()); model.EndDate = Convert.ToDateTime(entity.EndDate.ToShortDateString() + " " + entity.EndTime.ToString()); return(model); }
/// <summary> /// 是否撤销的时间的在当前请假时间内 /// </summary> /// <returns>是否撤销的时间的在当前请假时间内</returns> public bool IsRevokeTimeAvailiable(int orderNo, RevokeOrderModel model) { using (var dbcontext = new MissionskyOAEntities()) { var orderEntity = dbcontext.Orders.FirstOrDefault(it => it.OrderNo == orderNo); if (orderEntity == null) { Log.Error(string.Format("无效的撤销申请单, No: {0}", orderNo)); throw new NullReferenceException("无效的撤销申请单。"); } var detailEntity = dbcontext.OrderDets.FirstOrDefault(it => it.OrderId == orderEntity.Id); OrderDetModel detail = detailEntity.ToModel(); return(model.StartDate >= detail.StartDate && model.EndDate <= detail.EndDate); } }
public static OrderDet ToEntity(this OrderDetModel model) { var entity = new OrderDet() { Id = model.Id, OrderId = model.Id, StartDate = model.StartDate, StartTime = model.StartTime, EndDate = model.EndDate, EndTime = model.EndTime, IOHours = model.IOHours, Description = model.Description, Audit = model.Audit, InformLeader = model.InformLeader, WorkTransfer = model.WorkTransfer, Recipient = model.Recipient }; return(entity); }
public static OrderDetModel ConvertToModel(OrderDetails dbOrdDet) { OrderDetModel odm = new OrderDetModel(); odm.orderDetailID = dbOrdDet.orderDetailID; odm.Products.productID = dbOrdDet.Products.productID; odm.Products.proName = dbOrdDet.Products.proName; odm.Products.proPrice = dbOrdDet.Products.proPrice; odm.priceEach = dbOrdDet.priceEach; odm.quantityOrdered = dbOrdDet.quantityOrdered; odm.Orders.orderID = dbOrdDet.Orders.orderID; odm.Employees.employeeID = dbOrdDet.Employees.employeeID; odm.Employees.eFirstName = dbOrdDet.Employees.eFirstName; odm.Employees.eLastName = dbOrdDet.Employees.eLastName; return(odm); }
/// <summary> /// 销请假单或者加班单 /// </summary> /// <returns>取消</returns> public bool RevokeOrder(int orderNo, RevokeOrderModel model, UserModel applicant) { using (var dbContext = new MissionskyOAEntities()) { #region 申请单信息 var revokeOrder = new OrderModel() { Status = OrderStatus.Apply, ApplyUserId = applicant.Id, IsBatchApply = (model.UserIds.Count() > 1), CreatedTime = DateTime.Now }; var orderDet = new OrderDetModel() { StartDate = model.StartDate, EndDate = model.EndDate, StartTime = model.StartDate.TimeOfDay, EndTime = model.EndDate.TimeOfDay, IOHours = model.IOHours, Description = model.RevokeReason, InformLeader = model.InformLeader, WorkTransfer = model.WorkTransfer, Recipient = model.Recipient }; revokeOrder.OrderNo = _orderService.GenerateOrderNo(dbContext); //生成申请单号 revokeOrder.OrderUsers = _userService.GetOrderUsers(dbContext, model.UserIds); //相关申请单用户 revokeOrder.OrderDets = new List <OrderDetModel>() { orderDet }; //验证申请单 Order oldEntity = null; revokeOrder.OrderUsers.ToList().ForEach(ou => { //申请单是否存在 oldEntity = dbContext.Orders.FirstOrDefault(o => o.UserId == ou.Id && o.OrderNo == orderNo); if (oldEntity == null) { Log.Error("此订单不存在。"); throw new KeyNotFoundException("此订单不存在。"); } ou.OrderId = oldEntity.Id; //撤销单Id //是否已经撤销过 var revokedEntity = dbContext.Orders.FirstOrDefault(o => o.RefOrderId.HasValue && o.RefOrderId == ou.OrderId); if (revokedEntity != null && !revokedEntity.ToModel().CanRevokeOrder()) { Log.Error("已经撤销一次,不能再撤销。"); throw new InvalidOperationException("已经撤销一次,不能再撤销。"); } }); revokeOrder.OrderType = (OrderType)oldEntity.OrderType; //申请单类型 var oldDetailEntity = dbContext.OrderDets.FirstOrDefault(it => it.OrderId == oldEntity.Id); if (oldDetailEntity != null && oldDetailEntity.IOHours.HasValue) { if (Math.Abs(oldDetailEntity.IOHours.Value) < Math.Abs(model.IOHours)) { Log.Error("撤销时长不正确。"); throw new InvalidOperationException("撤销时长不正确。"); } } //验证申请单是否有效,并转换IOHours正负值 ValidOrder(revokeOrder, WorkflowOperation.Revoke); #endregion //添加初始审批信息 AddAuditMessages(dbContext, revokeOrder, applicant); //对于同意的请假单或者加班单,自动填写新的撤销请假单 if (oldEntity.Status == (int)OrderStatus.Approved) { //添加申请单到数据库 var dbOrders = AddOrderToDb(dbContext, revokeOrder, WorkflowOperation.Revoke); //流程申请 WorkflowProcessModel process = _orderService.Apply(dbContext, revokeOrder); if (process == null) { Log.Error("找不到流程。"); throw new InvalidOperationException("找不到流程。"); } //更新申请单工作流 UpdateOrderProcess(dbContext, dbOrders, revokeOrder, process, applicant); try { dbContext.SaveChanges(); } catch (DbEntityValidationException dbEx) { LogDatabaseError(dbEx); throw dbEx; } return(true); } else { Log.Error("流程处理异常。"); throw new InvalidOperationException("流程处理异常。"); } } }
/// <summary> /// 添加请假信息 /// /// 处理请假申请单逻辑 /// /// </summary> /// <param name="model">申请单详细: 对应APP中的申请单详细</param> /// <param name="applicant">流程申请人Id</param> /// <returns>请假单信息</returns> public OrderModel AddOrder(ApplyOrderModel model, UserModel applicant) { /* * * * * **/ #region 申请单详细 // 1、新建申请单变量 var order = new OrderModel() { OrderType = model.OrderType, Status = OrderStatus.Apply, ApplyUserId = applicant.Id, IsBatchApply = (model.UserIds.Count() > 1), CreatedTime = DateTime.Now, }; // 2、新建申请单详情 var orderDet = new OrderDetModel() { StartDate = model.StartDate, EndDate = model.EndDate, StartTime = model.StartDate.TimeOfDay, EndTime = model.EndDate.TimeOfDay, Description = model.Description, InformLeader = model.InformLeader ?? false, WorkTransfer = model.WorkTransfer ?? false, Recipient = model.Recipient ?? 0, IOHours = model.IOHours }; // 3、将申请单详情变量 放入到 申请单变量中 order.OrderDets = new List <OrderDetModel>() { orderDet }; #endregion // 4、逻辑处理 using (var dbContext = new MissionskyOAEntities()) { // 1、生成申请单号 、申请单用户 // OrderNo --> int order.OrderNo = _orderService.GenerateOrderNo(dbContext); //生成申请单号 /* * OrderUsers --> IList<OrderUserModel> * model.UserIds --> 定义为 int[], 表示可以或者可能有多个申请用户 * * **/ order.OrderUsers = _userService.GetOrderUsers(dbContext, model.UserIds); // 2、验证申请单是否有效,并转换IOHours正负值 ValidOrder(order, WorkflowOperation.Apply); // 3、添加初始审批信息 AddAuditMessages(dbContext, order, applicant); // 4、添加申请单到数据库 var dbOrders = AddOrderToDb(dbContext, order, WorkflowOperation.Apply); // 5、流程申请 WorkflowProcessModel process = _orderService.Apply(dbContext, order); if (process == null) { Log.Error("找不到流程。"); throw new InvalidOperationException("找不到流程。"); } // 6、更新申请单工作流 UpdateOrderProcess(dbContext, dbOrders, order, process, applicant); // 7、发送工作交接通知 if (model.WorkTransfer.HasValue && model.WorkTransfer.Value && model.Recipient.HasValue && model.OrderType != OrderType.Overtime) { _orderService.AddNotification(dbContext, order); } // 8、更新申请单其它信息 dbContext.SaveChanges(); // 9、 return(order); } }