/// <summary> /// 添加报销申请单 /// </summary> /// <param name="model">报销单</param> /// <returns>报销申请</returns> public ExpenseMainModel AddExpense(ExpenseMainModel model) { using (var dbContext = new MissionskyOAEntities()) { model = InitExpenseAudit(model); ExpenseMain expenseMainEntity = model.ToEntity(); dbContext.ExpenseMains.Add(expenseMainEntity); dbContext.SaveChanges(); return(expenseMainEntity.ToModel()); } }
public static ExpenseMainModel ToModel(this ExpenseMain entity) { var model = new ExpenseMainModel() { Id = entity.Id, AuditId = entity.AuditId, DeptNo = entity.DeptNo, ProjNo = entity.ProjNo, Amount = entity.Amount, Reason = entity.Reason, PrintForm = entity.PrintForm.HasValue ? entity.PrintForm.Value : 0, ConfirmForm = entity.ConfirmForm.HasValue ? entity.ConfirmForm.Value : false, CreatedTime = entity.CreatedTime, ApplyUserId = entity.ApplyUserId, }; if (entity.Department == null) { model.Department = null; } else { model.Department = entity.Department.ToModel(); } if (entity.Project == null) { model.Project = null; } else { model.Project = entity.Project.ToModel(); } using (var dbContext = new MissionskyOAEntities()) { //Get english name var userEntity = dbContext.Users.FirstOrDefault(it => it.Id == entity.ApplyUserId); if (userEntity != null) { model.ApplyUserName = userEntity.EnglishName; } } return(model); }
private void SaveExpenseMain(PharmacyDbContext db, string invoiceId) { decimal total = Convert.ToDecimal(lblTotal.Text == "" ? "0" : lblTotal.Text); ExpenseMain main = new ExpenseMain { Id = Guid.NewGuid().ToString(), TotalAmount = total, InvoiceId = invoiceId, Note = txtNote.Text, CreatedBy = currentUser, CreatedDate = DateTime.Now }; db.ExpenseMain.Add(main); SaveVoucher(total, invoiceId, db); SaveExpenseSub(db, main.Id); }
/// <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("无效的当前审批人。"); } }
public static ExpenseMain ToEntity(this ExpenseMainModel model) { var entity = new ExpenseMain() { AuditId = model.AuditId, DeptNo = model.DeptNo, ProjNo = model.ProjNo, Amount = model.Amount, Reason = model.Reason, ApplyUserId = model.ApplyUserId, PrintForm = model.PrintForm, ConfirmForm = model.ConfirmForm, CreatedTime = DateTime.Now }; Collection <ExpenseDetail> expenseDetailsResult = new Collection <ExpenseDetail>(); if (model.ExpenseDetails != null && model.ExpenseDetails.Count > 0) { foreach (ExpenseDetailModel item in model.ExpenseDetails) { expenseDetailsResult.Add(item.ToEntity()); } } entity.ExpenseDetails = expenseDetailsResult; Collection <ExpenseAuditHistory> AuditHistoriesResult = new Collection <ExpenseAuditHistory>(); if (model.ExpenseAuditHistories != null && model.ExpenseAuditHistories.Count > 0) { foreach (ExpenseAuditHistoryModel item in model.ExpenseAuditHistories) { AuditHistoriesResult.Add(item.ToEntity()); } } entity.ExpenseAuditHistories = AuditHistoriesResult; return(entity); }
public static ExpenseMainModel ToModelWithAuditHistory(this ExpenseMain entity) { var model = new ExpenseMainModel() { Id = entity.Id, AuditId = entity.AuditId, DeptNo = entity.DeptNo, ProjNo = entity.ProjNo, Amount = entity.Amount, Reason = entity.Reason, CreatedTime = entity.CreatedTime, ApplyUserId = entity.ApplyUserId, PrintForm = entity.PrintForm.HasValue ? entity.PrintForm.Value : 0, ConfirmForm = entity.ConfirmForm.HasValue ? entity.ConfirmForm.Value : false }; if (entity.Department == null) { model.Department = null; } else { model.Department = entity.Department.ToModel(); } if (entity.Project == null) { model.Project = null; } else { model.Project = entity.Project.ToModel(); } using (var dbContext = new MissionskyOAEntities()) { //Get english name var userEntity = dbContext.Users.FirstOrDefault(it => it.Id == entity.ApplyUserId); if (userEntity != null) { model.ApplyUserName = userEntity.EnglishName; } } //set current status using (var dbContext = new MissionskyOAEntities()) { var financialUserEntity = dbContext.Users.FirstOrDefault( it => it.Email != null && it.Email.ToLower().Contains(Global.FinancialEmail)); var expenseHistory = (entity.AuditId == (int)ExpenseAuditStep.FinacialAudit) ? dbContext.ExpenseAuditHistories.FirstOrDefault(it => it.ExpenseId == entity.Id && it.CurrentAudit == financialUserEntity.Id) : dbContext.ExpenseAuditHistories.FirstOrDefault(it => it.ExpenseId == entity.Id); model.currentAuditStatus = expenseHistory == null ? null : expenseHistory.ToModel(); } List <ExpenseAuditHistoryModel> AuditHistoriesResult = new List <ExpenseAuditHistoryModel>(); if (entity.ExpenseAuditHistories != null && entity.ExpenseAuditHistories.Count > 0) { foreach (ExpenseAuditHistory item in entity.ExpenseAuditHistories) { if (item.Status != (int)OrderStatus.Approving && item.Status != (int)OrderStatus.Apply) { AuditHistoriesResult.Add(item.ToModel()); } } } model.ExpenseAuditHistories = AuditHistoriesResult; return(model); }
/// <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(); }