public static void SetConfigs(IEmailConfigMngr mngr, int userId, UserType type, IEnumerable<EmailConfig> configs) { bool hasElement; mngr.Find(type, userId, out hasElement); if (!hasElement) { mngr.Add(type, userId, configs); return; } mngr.Update(type, userId, configs); }
protected void SendEmailForMembersWithEmailInProject(IEmailConfigMngr mngr, int projectId, string subject, string messageBody, EmailConfig configType) { var membersEnabledForTheProject = _db.Query<Project>() .GetEnabledResponsableAndWorkersForProjectWithEmailFromProjectId(projectId); var adminsEnabled = _db.Query<Member>().GetAdminsEnabledWithEmail(); User dbUser = CurrentUser; Thread t = new Thread(() => { // Normalizar, dos workers, pode haver membros repetidos com admins => Union var collection = membersEnabledForTheProject.Union(adminsEnabled, new LambdaComparer<Member>((m1, m2) => m1.UserID == m2.UserID)); // // Este método pode ser chamado pelos serviços do cliente e do membro. // O Cliente invoca este metodo quando submete um pedido para informar os membros // O membro invoca o método para avisar os membros da progressão.. // => Se o utilizador que invoca é membro então o endereço de email dele tem que ser removido // da lista de endereços. Member dbMember; if ((dbMember = dbUser as Member) != null) { collection = collection.Except(new[] { dbMember }); } List<string> emailAddresses = new List<string>(); foreach (var member in collection) { // Iterar sobre os membros que teem email e verificar se tem config de // quando membro aceita pedido bool hasElement; UserType type = member.IsAdmin ? UserType.admin : UserType.member; var configs = mngr.Find(type, member.UserID, out hasElement); // Verificar se o elemento existe e se existe verificar se o membro pretende que // o sistema envie o email if (hasElement && configs.Any(c => c == configType)) { emailAddresses.Add(member.Email); } } if (emailAddresses.Count > 0) { SendEmailToMembers(emailAddresses, subject, messageBody); } }); t.Start(); }