public ApiResponse <ExpenseMainModel> AddExpense(ApplyExpenseModel model)
        {
            // 1. 检查输入参数
            if (model == null)
            {
                throw new ApiBadRequestException("无效的参数");
            }
            // 2. 构造报销申请模型记录
            var expenseMainDataModel = new ExpenseMainModel()
            {
                DeptNo      = model.DeptNo,
                ProjNo      = model.ProjNo,
                Amount      = model.Amount,
                Reason      = model.Reason,
                ApplyUserId = this.Member.Id,
                CreatedTime = DateTime.Now
            };

            //3 构造请假单详情
            expenseMainDataModel.ExpenseDetails = new List <ExpenseDetailModel>();
            if (model.ExpenseDetails != null && (model.ExpenseDetails.Count > 0))
            {
                foreach (ApplyExpenseDetailModel item in model.ExpenseDetails)
                {
                    var expenseDetailModel = new ExpenseDetailModel()
                    {
                        ODate  = item.ODate,
                        EType  = item.EType,
                        Remark = item.Remark,
                        PCount = 1,
                        Amount = item.Amount
                    };
                    //3.1 构造参与人员
                    List <ExpenseMemberModel> activyParticipants = new List <ExpenseMemberModel>();
                    if (item.participants != null && (item.participants.Length > 0))
                    {
                        foreach (int participantItem in item.participants)
                        {
                            var expenseMemberModel = new ExpenseMemberModel()
                            {
                                MemberId = participantItem
                            };
                            activyParticipants.Add(expenseMemberModel);
                        }
                    }
                    expenseDetailModel.ExpenseMembers = activyParticipants;
                    expenseMainDataModel.ExpenseDetails.Add(expenseDetailModel);
                }
            }

            //新增假单 如果是请假或者提交加班申请需要启动工作申请流程
            // 3. Construct API Response
            var response = new ApiResponse <ExpenseMainModel>()
            {
                Result = ExpenseService.AddExpense(expenseMainDataModel)
            };

            return(response);
        }
Ejemplo n.º 2
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());
     }
 }
        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);
        }
Ejemplo n.º 4
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);
            }
        }
        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);
        }