Example #1
0
        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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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);
            }
        }