예제 #1
0
 /// <summary>
 /// 添加或者替换单位预算信息
 /// </summary>
 /// <param name="budget">单位预算信息</param>
 /// <returns></returns>
 public HttpResponseMessage Post(AddInstTotalWithAnnualBudget budget)
 {
     try
     {
         var instBudget = repository.AddInstBudget(budget, privilege.UserEditApplication);
         return(ResponseWrapper.SuccessResponse());
     }
     catch (Exception e)
     {
         return(ResponseWrapper.ExceptionResponse(e));
     }
 }
예제 #2
0
        /// <summary>
        /// 添加单位预算
        /// </summary>
        /// <param name="budgetDTO">单位预算信息</param>
        /// <returns>
        /// 需要下一步修改
        /// </returns>
        public InstBudget AddInstBudget(AddInstTotalWithAnnualBudget budgetDTO, Func <Application, CurrentUser, bool> privilege)
        {
            using (var ctx = new AspodesDB())
            {
                using (var transaction = ctx.Database.BeginTransaction())
                {
                    var application = ctx.Applications.FirstOrDefault(a => a.ApplicationId == budgetDTO.ApplicationId);
                    if (application == null)
                    {
                        throw new NotFoundException("未找到申请书");
                    }
                    var userInfo = UserHelper.GetCurrentUser();
                    if (!privilege(application, userInfo))
                    {
                        throw new UnauthorizationException();
                    }
                    InstBudget instBudget = new InstBudget()
                    {
                        InstituteId   = budgetDTO.InstituteId,
                        ApplicationId = budgetDTO.ApplicationId,
                        Amount        = budgetDTO.Amount
                    };

                    try
                    {
                        //如果有旧的记录,删除
                        var old = ctx.InstBudgets.FirstOrDefault(ib => ib.ApplicationId == budgetDTO.ApplicationId && ib.InstituteId == budgetDTO.InstituteId);
                        if (old != null)
                        {
                            ctx.InstBudgets.Remove(old);
                        }
                        //添加新的单位预算
                        instBudget = ctx.InstBudgets.Add(instBudget);
                        ctx.SaveChanges();

                        //添加单位预算的年度预算
                        if (budgetDTO.AnnualBudgets != null)
                        {
                            int year = 1;
                            foreach (var ab in budgetDTO.AnnualBudgets)
                            {
                                if (ab < 0)
                                {
                                    throw new OtherException("预算额不能是负数");
                                }
                                InstAnnualBudget annual = new InstAnnualBudget()
                                {
                                    InstBudgetId = instBudget.InstBudgetId,
                                    Year         = year++,
                                    Amount       = ab
                                };
                                ctx.InstAnnualBudgets.Add(annual);
                            }
                        }
                        ctx.SaveChanges();
                        transaction.Commit();
                        return(instBudget);
                    }
                    catch (Exception e)
                    {
                        transaction.Rollback();
                        throw e;
                    }
                }
            }
        }