private static IList <BillUserGroupDebitor> GetDebitors(IList <BillUserGroupDebitorDto> debitors, User creator) { Dictionary <UserGroupMembership, List <BillUserGroupDebitorDto> > debitorsByMembership = debitors.GroupBy(dto => dto.UserGroupMembership).ToDictionary(g => g.Key, g => g.ToList()); IList <BillUserGroupDebitor> debitorEntities = new List <BillUserGroupDebitor>(); foreach (UserGroupMembership userGroupMembership in debitorsByMembership.Keys) { BillAcceptState billAcceptState; if (creator.Equals(userGroupMembership.User)) { /*Wenn ich selber die Rechnung erstelle, kann ich die auch gleich akzeptieren*/ billAcceptState = BillAcceptState.Accepted; } else { /*Die anderen müssen die Rechnung explizit akzeptieren.*/ billAcceptState = BillAcceptState.Pending; } BillUserGroupDebitor billUserGroupDebitor = new BillUserGroupDebitor(userGroupMembership, debitorsByMembership[userGroupMembership].Sum(dto => dto.Portion), billAcceptState); debitorEntities.Add(billUserGroupDebitor); } return(debitorEntities); }
public void DeclineBill(Bill bill, User debitor, string refuseComment, User user, string billUrl) { Require.NotNull(bill, "bill"); Require.NotNull(debitor, "debitor"); Require.NotNullOrWhiteSpace(refuseComment, "refuseComment"); Require.NotNullOrWhiteSpace(billUrl, "billUrl"); BillAcceptState?billAcceptState = bill.GetDebitorState(debitor); if (billAcceptState != null && billAcceptState != BillAcceptState.Refused) { BillUserGroupDebitor rejectingDebitor = bill.RefuseByDebitor(debitor, refuseComment, new EntityChangedDto(user, DateTime.Now)); if (rejectingDebitor != null) { NotificationService.SendBillDeclinedNotification(bill, rejectingDebitor, billUrl); } } }
public void SendBillDeclinedNotification(Bill bill, BillUserGroupDebitor decliningDebitor, string billUrl) { Require.NotNull(bill, "bill"); Require.NotNull(decliningDebitor, "decliningDebitor"); if (bill.Creditor.User.NotifyMeAsCreditorOnDeclinedBills) { string userEmail = bill.Creditor.User.Email; ModelMap modelMap = new ModelMap(); modelMap.Add("creditor", bill.Creditor.User); modelMap.Add("debitor", decliningDebitor.UserGroupMembership.User); modelMap.Add("userGroupDebitor", decliningDebitor); modelMap.Add("bill", bill); modelMap.Add("billUrl", billUrl); MailMessage mailMessage = EmailService.CreateMailMessage(userEmail, modelMap, "BillDeclined"); EmailService.SendMessage(mailMessage); } }