public async Task <DashboardViewModel> GetDashboardViewModelAsync(string employerAccountId, VacancyUser user)
        {
            var dashboardTask   = _vacancyClient.GetDashboardAsync(employerAccountId, createIfNonExistent: true);
            var userDetailsTask = _client.GetUsersDetailsAsync(user.UserId);

            await Task.WhenAll(dashboardTask, userDetailsTask);

            var dashboard   = dashboardTask.Result;
            var userDetails = userDetailsTask.Result;

            var vacancies = dashboard.Vacancies?.ToList() ?? new List <VacancySummary>();

            var vm = new DashboardViewModel
            {
                EmployerAccountId = employerAccountId,
                Vacancies         = vacancies,
                NoOfVacanciesClosingSoonWithNoApplications = vacancies.Count(v =>
                                                                             v.ClosingDate <= _timeProvider.Today.AddDays(ClosingSoonDays) &&
                                                                             v.Status == VacancyStatus.Live &&
                                                                             v.ApplicationMethod == ApplicationMethod.ThroughFindAnApprenticeship &&
                                                                             v.NoOfApplications == 0),
                NoOfVacanciesClosingSoon = vacancies.Count(v =>
                                                           v.ClosingDate <= _timeProvider.Today.AddDays(ClosingSoonDays) &&
                                                           v.Status == VacancyStatus.Live),
                Alerts = _alertsViewModelFactory.Create(vacancies, userDetails)
            };

            return(vm);
        }
        public async Task Handle(UpdateUserAlertCommand message, CancellationToken cancellationToken)
        {
            var user = await _client.GetUsersDetailsAsync(message.IdamsUserId);

            switch (message.AlertType)
            {
            case AlertType.TransferredVacanciesEmployerRevokedPermission:
                user.TransferredVacanciesEmployerRevokedPermissionAlertDismissedOn = message.DismissedOn;
                break;

            case AlertType.ClosedVacanciesBlockedProvider:
                user.ClosedVacanciesBlockedProviderAlertDismissedOn = message.DismissedOn;
                break;

            case AlertType.TransferredVacanciesBlockedProvider:
                user.TransferredVacanciesBlockedProviderAlertDismissedOn = message.DismissedOn;
                break;

            case AlertType.ClosedVacanciesWithdrawnByQa:
                user.ClosedVacanciesWithdrawnByQaAlertDismissedOn = message.DismissedOn;
                break;

            default:
                throw new InvalidEnumArgumentException($"Cannot handle this alert dismissal {message.AlertType}");
            }

            await _userRepository.UpsertUserAsync(user);
        }
        public async Task <DashboardViewModel> GetDashboardViewModelAsync(VacancyUser user)
        {
            var dashboardTask   = _vacancyClient.GetDashboardAsync(user.Ukprn.Value, createIfNonExistent: true);
            var userDetailsTask = _client.GetUsersDetailsAsync(user.UserId);
            var providerTask    = _providerRelationshipsService.GetLegalEntitiesForProviderAsync(user.Ukprn.Value, OperationType.RecruitmentRequiresReview);

            await Task.WhenAll(dashboardTask, userDetailsTask, providerTask);

            var dashboard           = dashboardTask.Result;
            var userDetails         = userDetailsTask.Result;
            var providerPermissions = providerTask.Result;

            var vacancies = dashboard.Vacancies?.ToList() ?? new List <VacancySummary>();

            var vm = new DashboardViewModel
            {
                Vacancies = vacancies,
                NoOfVacanciesClosingSoonWithNoApplications = vacancies.Count(v =>
                                                                             v.ClosingDate <= _timeProvider.Today.AddDays(ClosingSoonDays) &&
                                                                             v.Status == VacancyStatus.Live &&
                                                                             v.ApplicationMethod == ApplicationMethod.ThroughFindAnApprenticeship &&
                                                                             v.NoOfApplications == 0),
                NoOfVacanciesClosingSoon = vacancies.Count(v =>
                                                           v.ClosingDate <= _timeProvider.Today.AddDays(ClosingSoonDays) &&
                                                           v.Status == VacancyStatus.Live),
                Alerts = _providerAlertsViewModelFactory.Create(dashboard, userDetails),
                HasEmployerReviewPermission = providerPermissions.Any()
            };

            return(vm);
        }
Esempio n. 4
0
        public async Task <VacanciesViewModel> GetVacanciesViewModelAsync(
            VacancyUser user, string filter, int page, string searchTerm)
        {
            var getDashboardTask   = _providerVacancyClient.GetDashboardAsync(user.Ukprn.Value, createIfNonExistent: true);
            var getUserDetailsTask = _recruitVacancyClient.GetUsersDetailsAsync(user.UserId);
            var providerTask       = _providerRelationshipsService.GetLegalEntitiesForProviderAsync(user.Ukprn.Value, OperationType.RecruitmentRequiresReview);

            await Task.WhenAll(getDashboardTask, getUserDetailsTask, providerTask);

            var dashboard           = getDashboardTask.Result;
            var userDetails         = getUserDetailsTask.Result;
            var providerPermissions = providerTask.Result;

            var alerts = _providerAlertsViewModelFactory.Create(dashboard, userDetails);

            var vacancies = new List <VacancySummary>(dashboard?.Vacancies ?? Array.Empty <VacancySummary>());

            var filteringOption = SanitizeFilter(filter);

            var filteredVacancies = GetFilteredVacancies(vacancies, filteringOption, searchTerm);

            var filteredVacanciesTotal = filteredVacancies.Count();

            page = SanitizePage(page, filteredVacanciesTotal);

            var skip = (page - 1) * VacanciesPerPage;

            var vacanciesVm = filteredVacancies
                              .Skip(skip)
                              .Take(VacanciesPerPage)
                              .Select(VacancySummaryMapper.ConvertToVacancySummaryViewModel)
                              .ToList();

            var pager = new PagerViewModel(
                filteredVacanciesTotal,
                VacanciesPerPage,
                page,
                "Showing {0} to {1} of {2} vacancies",
                RouteNames.Vacancies_Get,
                new Dictionary <string, string>
            {
                { "filter", filteringOption.ToString() },
                { "searchTerm", searchTerm }
            });

            var vm = new VacanciesViewModel
            {
                Vacancies      = vacanciesVm,
                Pager          = pager,
                Filter         = filteringOption,
                SearchTerm     = searchTerm,
                ResultsHeading = VacancyFilterHeadingHelper.GetFilterHeading(Constants.VacancyTerm, filteredVacanciesTotal, filteringOption, searchTerm, UserType.Provider),
                Alerts         = alerts,
                HasEmployerReviewPermission = providerPermissions.Any()
            };

            return(vm);
        }
Esempio n. 5
0
        public async Task Handle(UpdateUserAccountCommand message, CancellationToken cancellationToken)
        {
            var accounts = await _client.GetEmployerIdentifiersAsync(message.IdamsUserId);

            var user = await _client.GetUsersDetailsAsync(message.IdamsUserId);

            user.EmployerAccountIds = accounts.ToList();

            await _userRepository.UpsertUserAsync(user);
        }
Esempio n. 6
0
        public async Task <DashboardViewModel> GetDashboardViewModelAsync(string employerAccountId, string filter, int page, VacancyUser user, string searchTerm)
        {
            var vacanciesTask   = GetVacanciesAsync(employerAccountId);
            var userDetailsTask = _client.GetUsersDetailsAsync(user.UserId);

            await Task.WhenAll(vacanciesTask, userDetailsTask);

            var vacancies   = vacanciesTask.Result;
            var userDetails = userDetailsTask.Result;

            var filteringOption = SanitizeFilter(filter);

            var filteredVacancies = GetFilteredVacancies(vacancies, filteringOption, searchTerm);

            var filteredVacanciesTotal = filteredVacancies.Count();

            page = SanitizePage(page, filteredVacanciesTotal);

            var skip = (page - 1) * VacanciesPerPage;

            var vacanciesVm = filteredVacancies
                              .Skip(skip)
                              .Take(VacanciesPerPage)
                              .Select(VacancySummaryMapper.ConvertToVacancySummaryViewModel)
                              .ToList();

            var pager = new PagerViewModel(
                filteredVacanciesTotal,
                VacanciesPerPage,
                page,
                "Showing {0} to {1} of {2} vacancies",
                RouteNames.Dashboard_Index_Get,
                new Dictionary <string, string>
            {
                { "filter", filteringOption.ToString() },
                { "searchTerm", searchTerm }
            });

            var vm = new DashboardViewModel {
                Vacancies      = vacanciesVm,
                Pager          = pager,
                Filter         = filteringOption,
                SearchTerm     = searchTerm,
                ResultsHeading = GetFilterHeading(filteredVacanciesTotal, filteringOption, searchTerm),
                HasVacancies   = vacancies.Any(),
                Alerts         = GetAlerts(vacancies, userDetails)
            };

            return(vm);
        }
Esempio n. 7
0
        private async Task <bool> HasStoredLevyDeclaration(string employerAccountId, string userId)
        {
            var details = await _recruitVacancyClient.GetUsersDetailsAsync(userId);

            return(details.AccountsDeclaredAsLevyPayers.Contains(employerAccountId));
        }