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);
        }
        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);
        }
Example #3
0
        /// <summary>
        /// 确认接收资料
        /// </summary>
        /// <param name="expenseId">申请单号</param>
        /// <param name="approver">审批人</param>
        /// <returns>是否成功</returns>
        public bool ReciveExpenseFile(int expenseId, UserModel approver)
        {
            if (expenseId < 1 || approver == null)
            {
                Log.Error("无效的操作");
                throw new InvalidOperationException("无效的操作。");
            }

            using (var dbContext = new MissionskyOAEntities())
            {
                //报销单
                var expenseMainEntity = dbContext.ExpenseMains.FirstOrDefault(it => it.Id == expenseId); //报销申请单

                if (expenseMainEntity == null)
                {
                    Log.Error("报销单无效");
                    throw new InvalidOperationException("报销单无效");
                }

                if (approver.Email.EqualsIgnoreCase(Global.FinancialEmail))
                {
                    var financialUserEntity = new User();                //财务专员
                    var auditEntity         = new ExpenseAuditHistory(); //当前审批节点
                    var curAduitUser        = new User();                //当前审批人
                    var applicant           = new User();                //申请人详细

                    //获取报销单相关信息
                    FillRelatedInfo(dbContext, expenseMainEntity, out financialUserEntity, out curAduitUser, out applicant, out auditEntity);

                    //审计信息
                    var message = new AuditMessageModel()
                    {
                        Type        = AuditMessageType.None,
                        Status      = AuditMessageStatus.Unread,
                        CreatedTime = DateTime.Now,
                        Message     = string.Format("{0}已提交报销纸资申请资料", applicant.EnglishName)
                    };

                    //推送消息
                    var notificationModel = new NotificationModel()
                    {
                        Target = applicant.Email,
                        //MessageType = NotificationType.PushMessage,
                        MessageType   = NotificationType.Email,
                        BusinessType  = BusinessType.Approving,
                        Title         = "Missionsky OA Notification",
                        MessagePrams  = "报销流程处理",
                        Scope         = NotificationScope.User,
                        CreatedTime   = DateTime.Now,
                        TargetUserIds = new List <int> {
                            applicant.Id
                        }
                    };

                    //确认提交纸质材料
                    expenseMainEntity.ConfirmForm = true;

                    //设置原审批人同意
                    auditEntity.Status               = (int)OrderStatus.Recieved;
                    auditEntity.NextAudit            = null;
                    auditEntity.CreatedTime          = DateTime.Now;
                    message.Type                     = AuditMessageType.Confirm_Expense_File_Message;
                    notificationModel.MessageContent = string.Format("{0}已收到你的报销申请材料", financialUserEntity.EnglishName);

                    this._notificationService.Add(notificationModel, Global.IsProduction); //消息推送
                    dbContext.AuditMessages.Add(message.ToEntity());

                    dbContext.SaveChanges();
                }
                else
                {
                    Log.Error("无确认权限");
                    throw new InvalidOperationException("无确认权限");
                }
            }

            return(true);
        }
Example #4
0
        /// <summary>
        /// 获取报销申请相关信息
        /// </summary>
        /// <param name="dbContext"></param>
        /// <param name="expenseMainEntity"></param>
        /// <param name="financialUserEntity"></param>
        /// <param name="curAduitUser"></param>
        /// <param name="applicant"></param>
        /// <param name="auditEntity"></param>
        private void FillRelatedInfo(MissionskyOAEntities dbContext, ExpenseMain expenseMainEntity,
                                     out User financialUserEntity, out User curAduitUser, out User applicant, out ExpenseAuditHistory auditEntity)
        {
            //申请人详细
            applicant = dbContext.Users.FirstOrDefault(it => it.Id == expenseMainEntity.ApplyUserId);
            if (applicant == null)
            {
                Log.Error("找不到报销申请人。");
                throw new KeyNotFoundException("找不到报销申请人。");
            }

            //财务专员
            financialUserEntity =
                dbContext.Users.FirstOrDefault(
                    it => it.Email != null && it.Email.ToLower().Contains(Global.FinancialEmail));
            if (financialUserEntity == null)
            {
                Log.Error("找不到财务专号。");
                throw new KeyNotFoundException("找不到财务专员。");
            }

            //当前审批节点
            auditEntity =
                dbContext.ExpenseAuditHistories.Where(it => it.ExpenseId == expenseMainEntity.Id)
                .OrderByDescending(it => it.Id)
                .FirstOrDefault();
            if (auditEntity == null)
            {
                Log.Error("无效的当前审批步骤。");
                throw new KeyNotFoundException("无效的当前审批步骤。");
            }

            //当前审批人
            var currentAuditId = auditEntity.CurrentAudit;

            curAduitUser = (auditEntity.CurrentAudit == financialUserEntity.Id
                ? financialUserEntity
                : dbContext.Users.FirstOrDefault(it => it.Id == currentAuditId));
            if (curAduitUser == null)
            {
                Log.Error("无效的当前审批人。");
                throw new KeyNotFoundException("无效的当前审批人。");
            }
        }
Example #5
0
        /// <summary>
        /// 财务审批
        /// </summary>
        /// <param name="dbContext"></param>
        /// <param name="expenseMainEntity">报销单</param>
        /// <param name="reason">报销人员</param>
        /// <param name="isApproveExpense"></param>
        /// <returns>报销申请</returns>
        public void AuditExpenseByFinacertHeader(MissionskyOAEntities dbContext, ExpenseMain expenseMainEntity, string reason, bool isApproveExpense)
        {
            var financialUserEntity = new User();                //财务专员
            var auditEntity         = new ExpenseAuditHistory(); //当前审批节点
            var curAduitUser        = new User();                //当前审批人
            var applicant           = new User();                //申请人详细

            //获取报销单相关信息
            FillRelatedInfo(dbContext, expenseMainEntity, out financialUserEntity, out curAduitUser, out applicant, out auditEntity);

            //审计信息
            var message = new AuditMessageModel()
            {
                Type        = AuditMessageType.None,
                Status      = AuditMessageStatus.Unread,
                CreatedTime = DateTime.Now,
                Message     = "{0}{1}{2}的报销申请。" //A同意或拒绝B的报销申请
            };

            //推送消息
            var notificationModel = new NotificationModel()
            {
                Target = applicant.Email,
                //MessageType = NotificationType.PushMessage,
                MessageType   = NotificationType.Email,
                BusinessType  = BusinessType.Approving,
                Title         = "Missionsky OA Notification",
                MessagePrams  = "报销流程处理",
                Scope         = NotificationScope.User,
                CreatedTime   = DateTime.Now,
                TargetUserIds = new List <int> {
                    applicant.Id
                }
            };

            if (isApproveExpense)
            {
                //设置原审批人同意
                auditEntity.Status               = (int)OrderStatus.Approved;
                auditEntity.AuditMessage         = reason;
                auditEntity.NextAudit            = null;
                auditEntity.CreatedTime          = DateTime.Now;
                message.Type                     = AuditMessageType.Approve_Expense_Application_Message;
                message.Message                  = string.Format(message.Message, financialUserEntity.EnglishName, "同意", applicant.EnglishName);
                notificationModel.MessageContent = string.Format("{0}同意了你的报销申请,请及时提交纸质报销单", financialUserEntity.EnglishName);

                //发送报销申请单
                SendExpenseForm(expenseMainEntity.Id, applicant.ToModel(), financialUserEntity.ToModel());
                expenseMainEntity.PrintForm++;
            }
            else
            {
                //设置原审批人拒绝
                auditEntity.Status               = (int)OrderStatus.Rejected;
                auditEntity.AuditMessage         = reason;
                auditEntity.CreatedTime          = DateTime.Now;
                auditEntity.NextAudit            = null;
                message.Type                     = AuditMessageType.Recject_Expense_Application_Message;
                message.Message                  = string.Format(message.Message, financialUserEntity.EnglishName, "拒绝", applicant.EnglishName);
                notificationModel.MessageContent = string.Format("{0}拒绝了你的报销申请,原因:{1}", financialUserEntity.EnglishName, reason);
            }

            this._notificationService.Add(notificationModel, Global.IsProduction); //消息推送
            dbContext.AuditMessages.Add(message.ToEntity());

            dbContext.SaveChanges();
        }