public async Task PasswordExpiration() { var ActiveUsers = await _userRepository.CustomFind(x => x.UserStatus.Id == (int)UserStatusEnum.Active && x.Office.Id != (int)OfficeEnum.SAC && x.Office.Id != (int)OfficeEnum.BrasilCT, x => x.UserStatus); var userStatusLogList = new List <UserStatusLog>(); var expiredStatus = await _userStatusRepository.GetById((int)UserStatusEnum.PasswordExpired); foreach (var item in ActiveUsers) { var oldStatus = item.UserStatus; item.UserStatus = expiredStatus; userStatusLogList.Add(new UserStatusLog { CreatedAt = DateTime.Now, Description = "Expiração de senha", User = item, UserStatusFrom = oldStatus, UserStatusTo = item.UserStatus }); } _userStatusLogRepository.SaveMany(userStatusLogList); await _unitOfWork.CommitAsync(); }
public async Task <(bool Saved, string Message)> DoCadUserInvited(AccessCodeUserInviteDto accessCodeUserInviteDto) { var code = await _userAccessCodeInviteRepository.CustomFind(x => x.Code.Equals(accessCodeUserInviteDto.Code)); if (!code.Any()) { return(false, "Código de convite inválido"); } var user = (await _userRepository.CustomFind(x => x.Cpf.Equals(Regex.Replace(accessCodeUserInviteDto.Cpf, "[^0-9]", "")))).FirstOrDefault(); if (user != null) { return(false, "Usuario ja cadastrado no programa!"); } _userRepository.Save(new User { CellPhone = accessCodeUserInviteDto.Cellphone, Cpf = Regex.Replace(accessCodeUserInviteDto.Cpf, "[^0-9]", ""), AccessCodeInvite = accessCodeUserInviteDto.Code, UserStatus = await _userStatusRepository.GetById((int)UserStatusEnum.FriendInvitation), Activated = false, Office = await _officeRepository.GetById((int)OfficeEnum.Salesman), PrivacyPolicy = false, CreatedAt = DateTime.Now }); await _unitOfWork.CommitAsync(); return(true, "Usuario cadastrado com sucesso!"); }
public async Task <(UserDto user, bool authenticated, string messageReturning)> DoPreRegistration(UserDto userDto, IFormFile file) { var user = (await _userRepository.CustomFind(x => x.Id == userDto.Id, x => x.Office, x => x.UserStatus)).First(); var lastStatus = user.UserStatus; var accessCodeUser = await _userAccessCodeConfirmationRepository.GetAccessCode(user.Id); if (accessCodeUser == null) { return(userDto, false, "Código de acesso não encontrado"); } if (accessCodeUser.Code != userDto.AccessCode) { return(userDto, false, "Código de acesso inválido"); } if (user.UserStatus.Id != (int)UserStatusEnum.PreRegistration) { return(userDto, false, "Usuário não encontra-se no estado de pré cadastro!"); } if (string.IsNullOrEmpty(userDto.Password)) { return(userDto, false, "informe uma senha"); } if (file != null) { if (file.Length > 0 && file.Length <= 2000000) { var extensions = Path.GetFileName(file.FileName).Split('.').Last(); if (extensions.ToUpper() != "JPG" && extensions.ToUpper() != "JPEG" && extensions.ToUpper() != "PNG") { return(userDto, false, "Foto perfil formato inválido"); } var imageName = $"{DateTime.Now.Year}" + $"{DateTime.Now.Month.ToString().PadLeft(2, '0')}" + $"{DateTime.Now.Day.ToString().PadLeft(2, '0')}" + $"{DateTime.Now.Hour.ToString().PadLeft(2, '0')}" + $"{DateTime.Now.Minute.ToString().PadLeft(2, '0')}" + $"{DateTime.Now.Second.ToString().PadLeft(2, '0')}.{extensions}"; var path = Path.Combine(_env.WebRootPath, $"Content/PhotoPerfil/{Path.GetFileName(imageName)}"); using (var stream = new FileStream(path, FileMode.Create)) { await file.CopyToAsync(stream); } userDto.Photo = imageName; } else { return(userDto, false, "Foto perfil tem limite de tamanho 2MB"); } } _mapper.Map(userDto, user); user.Password = Crypto.Encrypt(userDto.Password, Crypto.Key256, 256); user.Activated = true; user.UserStatus = await _userStatusRepository.GetById((int)UserStatusEnum.Active); _userStatusLogRepository.Save(new UserStatusLog { CreatedAt = DateTime.Now, User = user, UserStatusTo = user.UserStatus, UserStatusFrom = lastStatus, Description = "Pre cadastro" }); var shopUser = (await _shopUserRepository.CustomFind(x => x.User.Id == userDto.Id, x => x.Shop, x => x.Shop.Network)).FirstOrDefault(); if (shopUser == null) { return(userDto, false, "Usuario sem loja cadastrada!"); } userDto.Network = shopUser.Shop.Network.Id; await _unitOfWork.CommitAsync(); _mapper.Map(user, userDto); _emailService.SendConfirmation(user.Cpf, user.Name, user.Email); if (!string.IsNullOrEmpty(user.AccessCodeInvite)) { await FriendInviteSetPunctuation(user); } return(userDto, true, "Usuario atualizado com sucesso!"); }
public async Task <User> UpdateHierarchyUsers(User user, HierarchyFileData hierarchyFileData, Office office, Shop shop) { user.Office = office; var lastSale = await _saleRepository.CustomFindLast(x => x.User.Id == user.Id, x => x.Id); var lastStatus = user.UserStatus; var userShop = await _shopUserRepository.CustomFind(x => x.User.Id == user.Id, x => x.Shop); if (!string.IsNullOrEmpty(hierarchyFileData.Off) && hierarchyFileData.Off.ToUpper().Equals("SIM") && user.UserStatus.Id != (int)UserStatusEnum.PreRegistration) { _logger.Info($" processamento da hierarquia em progresso - usuario com id {user.Id} foi para somente catalogo por desligado sim na planilha"); user.OffIn = DateTime.Now; user.UserStatus = await _userStatusRepository.GetById((int)UserStatusEnum.OnlyCatalog); } else if (!string.IsNullOrEmpty(hierarchyFileData.Off) && hierarchyFileData.Off.ToUpper().Equals("SIM")) { _logger.Info($" processamento da hierarquia em progresso - usuario com id {user.Id} foi para inativo por desligado sim na planilha"); user.OffIn = DateTime.Now; user.UserStatus = await _userStatusRepository.GetById((int)UserStatusEnum.Inactive); } if (office.Id == (int)OfficeEnum.RegionManager && !userShop.Where(x => x.Shop.Id == shop.Id).Any()) { _shopUserRepository.Save(new ShopUser { CreatedAt = DateTime.Now, Activated = true, Shop = shop, User = user }); } else if (office.Id == (int)OfficeEnum.Salesman || office.Id == (int)OfficeEnum.Manager && user.UserStatus.Id != (int)UserStatusEnum.PreRegistration) { if (office.Id == (int)OfficeEnum.Salesman && lastSale != null && lastSale.CreatedAt < DateTime.Now.AddMonths(-2) && user.UserStatus.Id != (int)UserStatusEnum.FriendInvitation && user.UserStatus.Id != (int)UserStatusEnum.PreRegistration && user.UserStatus.Id != (int)UserStatusEnum.OnlyCatalog) { _logger.Info($" processamento da hierarquia em progresso - usuario com id {user.Id} foi para somente catalogo por inatividade nas vendas"); user.UserStatus = await _userStatusRepository.GetById((int)UserStatusEnum.OnlyCatalog); } else if (office.Id == (int)OfficeEnum.Salesman && lastSale != null && lastSale.CreatedAt < DateTime.Now.AddMonths(-3) && user.UserStatus.Id == (int)UserStatusEnum.OnlyCatalog) { _logger.Info($" processamento da hierarquia em progresso - usuario com id {user.Id} foi inativado por inatividade nas vendas"); user.UserStatus = await _userStatusRepository.GetById((int)UserStatusEnum.Inactive); } else if ( office.Id == (int)OfficeEnum.Salesman && lastSale != null && lastSale.CreatedAt > DateTime.Now.AddMonths(-2) && (user.UserStatus.Id == (int)UserStatusEnum.OnlyCatalog || user.UserStatus.Id == (int)UserStatusEnum.Inactive || user.UserStatus.Id == (int)UserStatusEnum.Off) && !string.IsNullOrEmpty(hierarchyFileData.Off) && !hierarchyFileData.Off.ToUpper().Equals("SIM")) { _logger.Info($" processamento da hierarquia em progresso - usuario com id {user.Id} foi reativado"); user.UserStatus = await _userStatusRepository.GetById((int)UserStatusEnum.Active); } _shopUserRepository.DeleteMany(userShop); _shopUserRepository.Save(new ShopUser { CreatedAt = DateTime.Now, Activated = true, Shop = shop, User = user }); } if (user.UserStatus.Id == (int)UserStatusEnum.FriendInvitation) { user.UserStatus = await _userStatusRepository.GetById((int)UserStatusEnum.PreRegistration); user.Name = hierarchyFileData.Name; } if (user.UserStatus.Id != lastStatus.Id) { _userStatusLogRepository.Save(new UserStatusLog { CreatedAt = DateTime.Now, User = user, UserStatusTo = user.UserStatus, UserStatusFrom = lastStatus, Description = "Processamento de hierarquia" }); } await _unitOfWork.CommitAsync(); return(user); }
public async Task UpdateHierarchy() { if (DateTime.Now.Day == 11) { using (var client = new HttpClient()) { client.BaseAddress = new Uri("https://cliente.havan.com.br/ClubePontuacao/Api/"); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "5cb8d9a916c33a25efdf0dd1"); var result = await client.GetAsync("Colaborador/Cadastro"); if (result.IsSuccessStatusCode && result.StatusCode == System.Net.HttpStatusCode.OK) { var offices = await _officeRepository.GetAll(); var preOrder = await _userStatusRepository.GetById((int)UserStatusEnum.PreRegistration); var json = await result.Content.ReadAsStringAsync(); var users = new List <User>(); var shops = await _shopRepository.CustomFind(x => x.Network.Id == (int)NetworkEnum.Havan); var havanUserIntegratio = JsonConvert.DeserializeObject <IEnumerable <HavanUserIntegrationDto> >(json); if (havanUserIntegratio.Any()) { var cpfs = new List <string>(); cpfs.AddRange((havanUserIntegratio.Where(x => !string.IsNullOrEmpty(x.CpfVendedor)).GroupBy(x => x.CpfVendedor).Select(x => x.Key).ToList())); cpfs.AddRange((havanUserIntegratio.Where(x => !string.IsNullOrEmpty(x.CpfGerente)).GroupBy(x => x.CpfGerente).Select(x => x.Key).ToList())); cpfs.AddRange((havanUserIntegratio.Where(x => !string.IsNullOrEmpty(x.CpfGerenteRegional)).GroupBy(x => x.CpfGerenteRegional).Select(x => x.Key).ToList())); await _shopUserRepository.ClearShops(cpfs); users.AddRange(await _userRepository.CustomFind(x => cpfs.Contains(x.Cpf), x => x.UserStatus, x => x.Office)); var havanUserManangers = havanUserIntegratio .Where(x => !string.IsNullOrEmpty(x.CpfGerente)) .GroupBy(x => new { x.CpfGerente, x.NomeGerente }) .Select(x => new HavanUserIntegrationDto { CpfGerente = x.Key.CpfGerente, NomeGerente = x.Key.NomeGerente }).ToList(); var havanUserRegionManangers = havanUserIntegratio .Where(x => !string.IsNullOrEmpty(x.CpfGerenteRegional)) .GroupBy(x => new { x.CpfGerenteRegional, x.NomeGerenteRegional }) .Select(x => new HavanUserIntegrationDto { CpfGerenteRegional = x.Key.CpfGerenteRegional, NomeGerenteRegional = x.Key.NomeGerenteRegional }).ToList(); var regionManagersResult = await DoSaveRegionManagers(havanUserIntegratio, havanUserRegionManangers, shops, offices, preOrder, users); var managersResult = await DoSaveManagers(havanUserIntegratio, havanUserManangers, shops, offices, preOrder, regionManagersResult.Users); await DoSaveSalesman(havanUserIntegratio, shops, offices, preOrder, managersResult.Users); } } else { _logger.Fatal($"Atualização de hierarquia havan - ocorreu uma falha ao tentar acessar api de colaboradores da havan - {result.RequestMessage}"); } } } }