private IEnumerable <RecipientData> GetRecipients(IEnumerable <RoleType> roles, EventDataForEntity data) { foreach (var role in roles) { switch (role) { case RoleType.Admin: { var recipients = _admins.GetAll() .Select(user => new RecipientData(user.Email, user.Language, RoleType.Admin)); foreach (var recipient in recipients) { yield return(recipient); } } break; case RoleType.Manager: { var recipients = _managers.GetAll() .Select(user => new RecipientData(user.Email, user.Language, RoleType.Manager)); foreach (var recipient in recipients) { yield return(recipient); } } break; case RoleType.Broker: var brokerId = _awbs.Get(data.EntityId).Single().BrokerId; if (brokerId.HasValue) { var broker = _brokers.Get(brokerId.Value); yield return(new RecipientData(broker.Email, broker.Language, role)); } break; case RoleType.Sender: foreach (var email in _awbs.GetSenderEmails(data.EntityId)) { yield return(new RecipientData(email.Email, email.Language, RoleType.Client)); } break; case RoleType.Client: foreach (var emailData in _awbs.GetClientEmails(data.EntityId)) { foreach (var email in EmailsHelper.SplitAndTrimEmails(emailData.Email)) { yield return(new RecipientData(email, emailData.Language, RoleType.Client)); } } break; case RoleType.Forwarder: foreach (var email in _awbs.GetForwarderEmails(data.EntityId)) { yield return(new RecipientData(email.Email, email.Language, RoleType.Client)); } break; case RoleType.Carrier: foreach (var email in _awbs.GetCarrierEmails(data.EntityId)) { yield return(new RecipientData(email.Email, email.Language, RoleType.Client)); } break; default: throw new InvalidOperationException("Unknown role " + role); } } }