public static ExpenseAuditHistoryModel ToModelWithExpenseMainInfo(this ExpenseAuditHistory entity)
        {
            var model = new ExpenseAuditHistoryModel()
            {
                Id           = entity.Id,
                CurrentAudit = entity.CurrentAudit,
                NextAudit    = entity.NextAudit,
                ExpenseId    = entity.ExpenseId,
                Status       = (OrderStatus)entity.Status,
                AuditMessage = entity.AuditMessage,
                ExpenseMain  = entity.ExpenseMain.ToModel(),
                CreatedTime  = entity.CreatedTime,
            };

            using (var dbContext = new MissionskyOAEntities())
            {
                //Get english name
                var userEntity = dbContext.Users.FirstOrDefault(it => it.Id == entity.CurrentAudit);
                if (userEntity != null)
                {
                    model.CurrentAuditName = userEntity.EnglishName;
                }
                userEntity = dbContext.Users.FirstOrDefault(it => it.Id == entity.NextAudit);
                if (userEntity != null)
                {
                    model.NextAuditName = userEntity.EnglishName;
                }
            }
            return(model);
        }
Exemple #2
0
        /// <summary>
        /// 修改报销单信息(目前只可修改报销理由)
        /// </summary>
        /// <returns>报销单信息</returns>
        public bool UpdateExpenseOrder(int expenseId, UpdateExpenseModel model, UserModel user)
        {
            using (var dbContext = new MissionskyOAEntities())
            {
                //查询申请信息是否存在
                var expenseMain = dbContext.ExpenseMains.FirstOrDefault(it => it.Id == expenseId);
                if (expenseMain == null)
                {
                    throw new Exception("报销单不存在");
                }
                if (!user.Email.EqualsIgnoreCase(Global.FinancialEmail))
                {
                    ExpenseAuditHistoryModel expenseCurrentStaus = GetExpenseCurrentStatus(expenseMain.Id, expenseMain.AuditId);
                    if (expenseMain.AuditId != (int)ExpenseAuditStep.DepartmentAudit || expenseCurrentStaus.Status != OrderStatus.Apply)
                    {
                        Log.Error("已经处于审批流程,不可修改");
                        throw new InvalidOperationException("已经处于审批流程,不可修改");
                    }
                }

                expenseMain.Reason = model.Reason;
                dbContext.SaveChanges();
                return(true);
            }
        }
        public static ExpenseAuditHistory ToEntity(this ExpenseAuditHistoryModel model)
        {
            var entity = new ExpenseAuditHistory()
            {
                CurrentAudit = model.CurrentAudit,
                NextAudit    = model.NextAudit,
                ExpenseId    = model.ExpenseId,
                Status       = (int)model.Status,
                AuditMessage = model.AuditMessage,
                CreatedTime  = model.CreatedTime,
            };

            return(entity);
        }
Exemple #4
0
        /// <summary>
        /// 取消报销单
        /// </summary>
        /// <returns>取消</returns>
        public bool CancelExpense(int expenseId, UserModel user)
        {
            using (var dbContext = new MissionskyOAEntities())
            {
                //查询申请信息是否存在
                var orders           = dbContext.ExpenseMains.FirstOrDefault(it => it.Id == expenseId);
                var auditMessageType = (int)AuditMessageType.Apply_Expense_Cancel_Application_Message;
                if (orders == null)
                {
                    throw new Exception("报销单不存在");
                }

                if (orders.AuditId == (int)ExpenseAuditStep.DepartmentAudit)
                {
                    ExpenseAuditHistoryModel expenseCurrentStaus = GetExpenseCurrentStatus(orders.Id, orders.AuditId);
                    if (expenseCurrentStaus != null && expenseCurrentStaus.Status == OrderStatus.Apply)
                    {
                        var auditHistory = dbContext.ExpenseAuditHistories.FirstOrDefault(it => it.Id == expenseCurrentStaus.Id);
                        auditHistory.NextAudit    = null;
                        auditHistory.CurrentAudit = 0;
                        auditHistory.Status       = (int)OrderStatus.Canceled;
                        var auditMessageEntitry = new AuditMessage()
                        {
                            Type        = auditMessageType,
                            UserId      = user.Id,
                            Status      = (int)AuditMessageStatus.Unread,
                            Message     = auditMessageType.ToString(),
                            CreatedTime = DateTime.Now
                        };

                        dbContext.AuditMessages.Add(auditMessageEntitry);

                        //更新数据库
                        dbContext.SaveChanges();

                        return(true);
                    }
                    else
                    {
                        throw new InvalidOperationException("已经在审批中,不能直接取消");
                    }
                }
                else
                {
                    throw new InvalidOperationException("已经在审批中,不能直接取消");
                }
            }
        }
Exemple #5
0
        /// <summary>
        /// 初始化审批状态
        /// </summary>
        public ExpenseMainModel InitExpenseAudit(ExpenseMainModel model)
        {
            //2.1 构造审批历史
            model.ExpenseAuditHistories = new List <ExpenseAuditHistoryModel>();
            ExpenseAuditHistoryModel auditHistoryModel = new ExpenseAuditHistoryModel();

            using (var dbContext = new MissionskyOAEntities())
            {
                var financialUserEntity = dbContext.Users.FirstOrDefault(it => it.Email != null && it.Email.ToLower().Contains(Global.FinancialEmail));
                //国内
                if (model.DeptNo == 1)
                {
                    var inlandHeaderUserEntity = dbContext.Users.FirstOrDefault(it => it.Email != null && it.Email.ToLower().Contains(Global.InlandHeaderEmail));
                    if (inlandHeaderUserEntity != null)
                    {
                        auditHistoryModel.CurrentAudit = inlandHeaderUserEntity.Id;
                        auditHistoryModel.NextAudit    = financialUserEntity.Id;
                        auditHistoryModel.Status       = OrderStatus.Apply;
                        auditHistoryModel.CreatedTime  = DateTime.Now;
                    }
                }
                else
                {
                    var overseaHeaderUserEntity = dbContext.Users.FirstOrDefault(it => it.Email != null && it.Email.ToLower().Contains(Global.OverseaHeaderEmail));
                    if (overseaHeaderUserEntity != null)
                    {
                        auditHistoryModel.CurrentAudit = overseaHeaderUserEntity.Id;
                        auditHistoryModel.NextAudit    = financialUserEntity.Id;
                        auditHistoryModel.Status       = OrderStatus.Apply;
                        auditHistoryModel.CreatedTime  = DateTime.Now;
                    }
                }
                model.AuditId = (int)ExpenseAuditStep.DepartmentAudit;
                model.ExpenseAuditHistories.Add(auditHistoryModel);

                return(model);
            }
        }
Exemple #6
0
        /// <summary>
        /// 修改报销详细信息
        /// </summary>
        /// <returns>报销详细信息</returns>
        public bool UpdateExpenseDetailsOrder(int id, ApplyExpenseDetailModel model, UserModel user)
        {
            using (var dbContext = new MissionskyOAEntities())
            {
                //查询申请详细信息是否存在
                var expenseDetail = dbContext.ExpenseDetails.FirstOrDefault(it => it.Id == id);
                if (expenseDetail == null)
                {
                    throw new Exception("报销详细单id不存在");
                }

                if (!user.Email.EqualsIgnoreCase(Global.FinancialEmail))
                {
                    //报销单
                    var expenseMainEntity = dbContext.ExpenseMains.FirstOrDefault(it => it.Id == expenseDetail.MId);
                    ExpenseAuditHistoryModel expenseCurrentStaus = GetExpenseCurrentStatus(expenseMainEntity.Id, expenseMainEntity.AuditId);
                    if (expenseMainEntity.AuditId != (int)ExpenseAuditStep.DepartmentAudit || expenseCurrentStaus.Status != OrderStatus.Apply)
                    {
                        Log.Error("已经处于审批流程,不可修改");
                        throw new InvalidOperationException("已经处于审批流程,不可修改");
                    }
                }

                if (model.Amount > 0 && model.Amount != expenseDetail.Amount)
                {
                    CalculateExpenseSum(expenseDetail.MId, model.Amount - expenseDetail.Amount);
                }

                expenseDetail.ODate  = model.ODate;
                expenseDetail.Remark = model.Remark;
                expenseDetail.Amount = model.Amount;

                if (model.EType != 0)
                {
                    expenseDetail.EType = (int)model.EType;
                }

                #region 更新成员
                if (model.participants != null && model.participants.Count() > 0)
                {
                    var expenseMems = dbContext.ExpenseMembers.Where(it => it.DId == expenseDetail.Id); //原来存在的
                    var maxDetId    = dbContext.ExpenseMembers.Max(it => it.Id);                        //求最大Detail Id

                    //移除现在不存在的
                    expenseMems.ToList().ForEach(it =>
                    {
                        if (!model.participants.Contains(it.MemberId))
                        {
                            dbContext.ExpenseMembers.Remove(it);
                        }
                    });

                    //添加新增的
                    model.participants.ToList().ForEach(it =>
                    {
                        if (expenseMems.Any(m => m.MemberId == it) == false)
                        {
                            dbContext.ExpenseMembers.Add(new ExpenseMember()
                            {
                                MemberId = it, DId = expenseDetail.Id, Id = ++maxDetId
                            });
                        }
                    });
                }
                #endregion

                dbContext.SaveChanges();
                return(true);
            }
        }