Task IProjectGrain.PostProjectExpenses(ProjectExpenses source) { if (Kernel == null) { throw new ProjectNotFoundException(); } Database.Execute((DbTransaction dbTransaction) => { source.InsertSelf(dbTransaction); Kernel.UpdateSelf(dbTransaction, NameValue.Set <ProjectInfo>(p => p.TotalReimbursementAmount, p => p.TotalReimbursementAmount + source.ReimbursementAmount)); }); ProjectExpensesList.Add(source); return(Task.CompletedTask); }
async Task IProjectGrain.DeleteProjectExpenses(long id) { if (Kernel == null) { throw new ProjectNotFoundException(); } if (!await IsMyProject()) { throw new SecurityException("非请毋删!"); } ProjectExpenses projectExpenses = null; foreach (ProjectExpenses item in ProjectExpensesList) { if (item.Id == id) { projectExpenses = item; break; } } if (projectExpenses == null) { throw new ValidationException(String.Format("未找到 {0} 可删除的报销记录!", Kernel.ProjectName)); } Database.Execute((DbTransaction dbTransaction) => { projectExpenses.DeleteSelf(dbTransaction); Kernel.UpdateSelf(dbTransaction, NameValue.Set <ProjectInfo>(p => p.TotalReimbursementAmount, p => p.TotalReimbursementAmount - projectExpenses.ReimbursementAmount)); }); ProjectExpensesList.Remove(projectExpenses); }