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 <(bool Saved, List <User> Users)> DoSaveSalesman(IEnumerable <HavanUserIntegrationDto> havanUserIntegratio, IEnumerable <Shop> shops, IEnumerable <Office> offices, UserStatus preOrder, List <User> users) { foreach (var item in havanUserIntegratio) { if (!string.IsNullOrEmpty(item.CpfVendedor)) { var newShopUser = shops.Where(x => x.Cnpj.Equals(item.CnpjFilial) && x.ShopCode.Equals(item.CodigoFilial)).FirstOrDefault(); var currentUser = users.Where(x => x.Cpf.Equals(item.CpfVendedor)).FirstOrDefault(); if (currentUser == null) { if (newShopUser != null) { var newUser = new User { Activated = false, Cpf = item.CpfVendedor, Office = offices.Where(x => x.Id == (int)OfficeEnum.Salesman).FirstOrDefault(), UserStatus = preOrder, PrivacyPolicy = false, Name = item.NomeVendedor, CreatedAt = DateTime.Now }; _userRepository.Save(newUser); _shopUserRepository.Save(new ShopUser { User = newUser, Shop = newShopUser, Activated = true, CreatedAt = DateTime.Now }); users.Add(newUser); _logger.Info($"Atualização de hierarquia havan - novo usuario inserido no programa em pre cadastro com cpf {item.CpfVendedor}"); } else { _logger.Warn($"Atualização de hierarquia havan - loja com cnpj {item.CnpjFilial} e codigo {item.CodigoFilial} não cadastrada no sistema"); } } else { _logger.Info($"Atualização de hierarquia havan - atualizado usuario no programa com cpf {item.CpfVendedor}"); var lastStatus = currentUser.UserStatus; if (currentUser.Office.Id != (int)OfficeEnum.Salesman) { currentUser.Office = offices.Where(x => x.Id == (int)OfficeEnum.Salesman).FirstOrDefault(); } var lastSale = await _saleRepository.CustomFindLast(x => x.User.Id == currentUser.Id, x => x.Id); if (currentUser.Office.Id == (int)OfficeEnum.Salesman && lastSale != null && lastSale.CreatedAt < DateTime.Now.AddMonths(-2) && currentUser.UserStatus.Id != (int)UserStatusEnum.FriendInvitation && currentUser.UserStatus.Id != (int)UserStatusEnum.PreRegistration && currentUser.UserStatus.Id != (int)UserStatusEnum.OnlyCatalog) { _logger.Info($" processamento da hierarquia em progresso - usuario com id {currentUser.Id} foi para somente catalogo por inatividade nas vendas"); currentUser.UserStatus = await _userStatusRepository.GetById((int)UserStatusEnum.OnlyCatalog); } else if (currentUser.Office.Id == (int)OfficeEnum.Salesman && lastSale != null && lastSale.CreatedAt < DateTime.Now.AddMonths(-3) && currentUser.UserStatus.Id == (int)UserStatusEnum.OnlyCatalog) { _logger.Info($" processamento da hierarquia em progresso - usuario com id {currentUser.Id} foi inativado por inatividade nas vendas"); currentUser.UserStatus = await _userStatusRepository.GetById((int)UserStatusEnum.Inactive); } else if ( currentUser.Office.Id == (int)OfficeEnum.Salesman && lastSale != null && lastSale.CreatedAt > DateTime.Now.AddMonths(-2) && (currentUser.UserStatus.Id == (int)UserStatusEnum.OnlyCatalog || currentUser.UserStatus.Id == (int)UserStatusEnum.Inactive || currentUser.UserStatus.Id == (int)UserStatusEnum.Off)) { _logger.Info($" processamento da hierarquia em progresso - usuario com id {currentUser.Id} foi reativado"); currentUser.UserStatus = await _userStatusRepository.GetById((int)UserStatusEnum.Active); } _shopUserRepository.Save(new ShopUser { User = currentUser, Shop = newShopUser, Activated = true, CreatedAt = DateTime.Now }); if (currentUser.UserStatus.Id != lastStatus.Id) { _userStatusLogRepository.Save(new UserStatusLog { CreatedAt = DateTime.Now, User = currentUser, UserStatusTo = currentUser.UserStatus, UserStatusFrom = lastStatus, Description = "Processamento de hierarquia havan" }); } } } } return(await _unitOfWork.CommitAsync(), users); }