public async Task CheckInClaim(int projectId, int claimId, int money) { var claim = (await ClaimsRepository.GetClaim(projectId, claimId)).RequestAccess(CurrentUserId); //TODO Specific right claim.EnsureCanChangeStatus(Claim.Status.CheckedIn); var validator = new ClaimCheckInValidator(claim); if (!validator.CanCheckInInPrinciple) { throw new ClaimWrongStatusException(claim); } FinanceOperationEmail financeEmail = null; if (money > 0) { var paymentType = claim.Project.GetCashPaymentType(CurrentUserId); if (paymentType == null) { throw new JoinRpgInvalidUserException(); } financeEmail = await AcceptFeeImpl(".", Now, 0, money, paymentType, claim); } else if (money < 0) { throw new InvalidOperationException(); } if (!validator.CanCheckInNow) { throw new ClaimWrongStatusException(claim); } claim.ClaimStatus = Claim.Status.CheckedIn; claim.CheckInDate = Now; Debug.Assert(claim.Character != null, "claim.Character != null"); MarkChanged(claim.Character); claim.Character.InGame = true; AddCommentImpl(claim, null, ".", true, CommentExtraAction.CheckedIn); await UnitOfWork.SaveChangesAsync(); await EmailService.Email( await CreateClaimEmail <CheckedInEmal>(claim, ".", s => s.ClaimStatusChange, CommentExtraAction.ApproveByMaster)); if (financeEmail != null) { await EmailService.Email(financeEmail); } }
public Task Email(FinanceOperationEmail model) { var message = ""; if (model.FeeChange != 0) { message += $"\nИзменение взноса: {model.FeeChange}\n"; } if (model.Money > 0) { message += $"\nОплата денег игроком: {model.Money}\n"; } if (model.Money < 0) { message += $"\nВозврат денег игроку: {-model.Money}\n"; } return(SendClaimEmail(model, "изменена", message)); }