コード例 #1
0
 /// <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());
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #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("无效的当前审批人。");
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
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();
        }