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); }
/// <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); }
/// <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("无效的当前审批人。"); } }
/// <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(); }