Beispiel #1
0
        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!");
        }
Beispiel #3
0
        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!");
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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}");
                    }
                }
            }
        }