Exemple #1
0
        private void SetDecision(Guid applicationId, ApplicationStatuses applicationStatus, string candidateApplicationFeedback = null)
        {
            var apprenticeshipApplication = _apprenticeshipApplicationReadRepository.Get(applicationId);
            var legacyApplicationId       = apprenticeshipApplication.LegacyApplicationId;

            if (legacyApplicationId == 0)
            {
                legacyApplicationId = _referenceNumberRepository.GetNextLegacyApplicationId();
            }

            var applicationStatusSummary = new ApplicationStatusSummary
            {
                // CRITICAL: make the update look like it came from legacy AVMS application
                ApplicationId       = Guid.Empty,
                ApplicationStatus   = applicationStatus,
                LegacyApplicationId = legacyApplicationId,
                LegacyCandidateId   = 0, // not required
                LegacyVacancyId     = 0, // not required
                VacancyStatus       = apprenticeshipApplication.VacancyStatus,
                ClosingDate         = apprenticeshipApplication.Vacancy.ClosingDate,
                UpdateSource        = ApplicationStatusSummary.Source.Raa //Ensure this update is from RAA so ownership of the application is verified
            };

            if (candidateApplicationFeedback != null)
            {
                applicationStatusSummary.UnsuccessfulReason = candidateApplicationFeedback;
            }
            _applicationStatusUpdateStrategy.Update(apprenticeshipApplication, applicationStatusSummary);
            _serviceBus.PublishMessage(new ApprenticeshipApplicationUpdate(applicationId, ApplicationUpdateType.Update));
        }
Exemple #2
0
        public void UpdateApplicationStatus(Guid applicationId, ApplicationStatuses updatedStatus)
        {
            _logService.Info($"Updating status for {applicationId} to {updatedStatus}");

            var result = _database.GetCollection <VacancyApplication>(_collectionName).UpdateOne(
                Builders <VacancyApplication> .Filter.Eq(e => e.Id, applicationId),
                Builders <VacancyApplication> .Update.Set(e => e.Status, updatedStatus));

            if (result.IsAcknowledged)
            {
                if (result.IsModifiedCountAvailable && result.ModifiedCount == 1)
                {
                    _logService.Info($"Updated status for {applicationId} to {updatedStatus}");
                }
                else
                {
                    _logService.Warn($"Did not update status for {applicationId} to {updatedStatus} as application wasn't found");
                }
            }
            else
            {
                var message = $"Updating status for {applicationId} to {updatedStatus} failed! {result}";
                _logService.Error(message);
                throw new Exception(message);
            }
        }
Exemple #3
0
        private static ApplicationStatusTypeIds GetApplicationStatusTypeId(ApplicationStatuses status)
        {
            switch (status)
            {
            case ApplicationStatuses.Saved:
                return(ApplicationStatusTypeIds.ApplicationStatusTypeIdSaved);

            case ApplicationStatuses.Draft:
            case ApplicationStatuses.Submitting:
                return(ApplicationStatusTypeIds.ApplicationStatusTypeIdUnsent);

            case ApplicationStatuses.ExpiredOrWithdrawn:
                return(ApplicationStatusTypeIds.ApplicationStatusTypeIdWithdrawn);

            case ApplicationStatuses.Submitted:
                return(ApplicationStatusTypeIds.ApplicationStatusTypeIdSent);

            case ApplicationStatuses.InProgress:
                return(ApplicationStatusTypeIds.ApplicationStatusTypeIdInProgress);

            case ApplicationStatuses.Successful:
                return(ApplicationStatusTypeIds.ApplicationStatusTypeIdSuccessful);

            case ApplicationStatuses.Unsuccessful:
                return(ApplicationStatusTypeIds.ApplicationStatusTypeIdUnsuccessful);

            default: throw new ArgumentException($"Status value {status} was not recognised.");
            }
        }
 public int GetApplicationStatusChangedTo(ApplicationStatuses applicationStatus, DateTime statusChangeStartDate,
                                          DateTime statusChangeEndDate)
 {
     return(Collection
            .AsQueryable()
            .Count(each => each.DateCreated >= statusChangeStartDate && each.DateCreated < statusChangeEndDate && each.Status == applicationStatus));
 }
 private static ApprenticeshipApplicationDetail CreateApplicationDetail(
     Candidate candidate, ApprenticeshipVacancyDetail vacancyDetails, ApplicationStatuses applicationStatus, ApplicationTemplate applicationTemplate)
 {
     return(new ApprenticeshipApplicationDetail
     {
         EntityId = Guid.NewGuid(),
         Status = applicationStatus,
         DateCreated = DateTime.UtcNow,
         CandidateId = candidate.EntityId,
         CandidateDetails = Mapper.Map <RegistrationDetails, RegistrationDetails>(candidate.RegistrationDetails),
         VacancyStatus = vacancyDetails.VacancyStatus,
         Vacancy = new ApprenticeshipSummary
         {
             Id = vacancyDetails.Id,
             VacancyReference = vacancyDetails.VacancyReference,
             Title = vacancyDetails.Title,
             EmployerName = vacancyDetails.IsEmployerAnonymous ? vacancyDetails.AnonymousEmployerName : vacancyDetails.EmployerName,
             IsPositiveAboutDisability = vacancyDetails.IsPositiveAboutDisability,
             StartDate = vacancyDetails.StartDate,
             ClosingDate = vacancyDetails.ClosingDate,
             Description = vacancyDetails.IsEmployerAnonymous ? vacancyDetails.AnonymousAboutTheEmployer : vacancyDetails.EmployerDescription,
             NumberOfPositions = vacancyDetails.NumberOfPositions,
             Location = null, // NOTE: no equivalent in legacy vacancy details.
             VacancyLocationType = vacancyDetails.VacancyLocationType,
         },
         // Populate apprenticeshipApplication template with candidate's most recent information.
         CandidateInformation = applicationTemplate
     });
 }
        public static List <MyApprenticeshipApplicationViewModel> GetApprenticeships(int count,
                                                                                     ApplicationStatuses applicationStatus = ApplicationStatuses.Draft, string unsuccessfulReason = null)
        {
            var apprenticeships = new List <MyApprenticeshipApplicationViewModel>();

            for (var i = 0; i < count; i++)
            {
                var myApprenticeshipApplicationViewModel = new MyApprenticeshipApplicationViewModel
                {
                    ApplicationStatus = applicationStatus
                };

                if (applicationStatus == ApplicationStatuses.Submitted)
                {
                    myApprenticeshipApplicationViewModel.DateApplied = new DateTime(2015, 01, 01);
                }

                if (unsuccessfulReason != null)
                {
                    myApprenticeshipApplicationViewModel.UnsuccessfulReason   = unsuccessfulReason;
                    myApprenticeshipApplicationViewModel.UnsuccessfulDateTime = DateTime.Now;
                }

                apprenticeships.Add(myApprenticeshipApplicationViewModel);
            }

            return(apprenticeships);
        }
        public UndecidedAppsModel GetUndecidedApplications(ApplicationStatuses applicationStatus)
        {
            UndecidedAppsModel model = new UndecidedAppsModel();

            model.UndecidedApplicationsRows = _applicationRepository.GetUndecidedApplications(applicationStatus);
            model.ApplicationsCount = model.UndecidedApplicationsRows.Count;

            return model;
        }
        public AppsForListModel GetApplications(ApplicationStatuses applicationStatus)
        {
            AppsForListModel model = new AppsForListModel();

            model.ApplicationsRows =  _applicationRepository.GetApplicationsByStatus(applicationStatus);
            model.ApplicationsCount = model.ApplicationsRows.Count;

            return model;
        }
 public int GetApplicationStateCountPerCandidate(ApplicationStatuses applicationStatus)
 {
     return(Collection
            .AsQueryable()
            .Where(each => each.Status == applicationStatus)
            .Select(each => each.CandidateId)
            .Distinct()
            .ToList()
            .Count);
 }
        public void AddReasonLog(ApplicationStatuses status, int applicationId, int reasonId, Guid userId, DateTime date)
        {
            ReasonLog log = new ReasonLog();
            log.ApplicationId = applicationId;
            log.DateLogged = date;
            log.ReasonId = reasonId;
            log.UserAdderId = userId;

            context.ReasonLogs.InsertOnSubmit(log);
            context.SubmitChanges();
        }
Exemple #11
0
        public void UpdateExistingAlert()
        {
            const int legacyApplicationId = 3456789;
            const ApplicationStatuses applicationStatus = ApplicationStatuses.Unsuccessful;
            const string unsuccessfulReason             = "You do not have the required grades";

            var applicationId             = Guid.NewGuid();
            var applicationReadRepository = new Mock <IApprenticeshipApplicationReadRepository>();

            var apprenticeshipApplicationDetail = new Fixture().Build <ApprenticeshipApplicationDetail>()
                                                  .With(aad => aad.EntityId, applicationId)
                                                  .With(aad => aad.LegacyApplicationId, legacyApplicationId)
                                                  .Create();

            applicationReadRepository.Setup(r => r.Get(legacyApplicationId, true)).Returns(apprenticeshipApplicationDetail);

            var existingApplicationStatusAlert = new Fixture().Build <ApplicationStatusAlert>()
                                                 .With(asa => asa.ApplicationId, applicationId)
                                                 .With(asa => asa.Status, ApplicationStatuses.Successful)
                                                 .With(asa => asa.BatchId, null)
                                                 .With(asa => asa.SentDateTime, null)
                                                 .Create();

            var statusAlertRepository = new Mock <IApplicationStatusAlertRepository>();

            statusAlertRepository.Setup(r => r.GetForApplication(applicationId)).Returns(new List <ApplicationStatusAlert> {
                existingApplicationStatusAlert
            });

            ApplicationStatusAlert applicationStatusAlert = null;

            statusAlertRepository.Setup(r => r.Save(It.IsAny <ApplicationStatusAlert>())).Callback <ApplicationStatusAlert>(asa => { applicationStatusAlert = asa; });

            var subscriber = new ApplicationStatusChangedSubscriberBuilder().With(applicationReadRepository).With(statusAlertRepository).Build();

            var applicationStatusChanged = new Fixture().Build <ApplicationStatusChanged>()
                                           .With(asc => asc.LegacyApplicationId, legacyApplicationId)
                                           .With(asc => asc.ApplicationStatus, applicationStatus)
                                           .With(asc => asc.UnsuccessfulReason, unsuccessfulReason)
                                           .Create();

            var state = subscriber.Consume(applicationStatusChanged);

            state.Should().NotBeNull();
            state.Should().Be(ServiceBusMessageStates.Complete);

            applicationStatusAlert.EntityId.Should().Be(existingApplicationStatusAlert.EntityId);
            applicationStatusAlert.Status.Should().Be(applicationStatus);
            applicationStatusAlert.UnsuccessfulReason.Should().Be(unsuccessfulReason);
            applicationStatusAlert.BatchId.Should().Be(null);
            applicationStatusAlert.SentDateTime.Should().Be(null);
        }
Exemple #12
0
 public StatusTransition(JobApplication application,
                         ApplicationStatuses from,
                         ApplicationStatuses to,
                         DateTime timestamp,
                         ApplicationResolution resolution = ApplicationResolution.UNRESOLVED)
 {
     ApplicationId  = application.Id;
     Application    = application;
     Timestamp      = timestamp;
     TransitionFrom = from;
     TransitionTo   = to;
     Resolution     = resolution;
 }
Exemple #13
0
        public static List <MyApprenticeshipApplicationViewModel> GetApprenticeships(int count,
                                                                                     ApplicationStatuses applicationStatus = ApplicationStatuses.Draft)
        {
            var apprenticeships = new List <MyApprenticeshipApplicationViewModel>();

            for (var i = 0; i < count; i++)
            {
                apprenticeships.Add(new MyApprenticeshipApplicationViewModel
                {
                    ApplicationStatus = applicationStatus
                });
            }

            return(apprenticeships);
        }
        public bool UpdateApplicationStatus(ApprenticeshipApplicationDetail entity, ApplicationStatuses updatedStatus, bool ignoreOwnershipCheck)
        {
            var applicationId = entity.EntityId;
            var now           = _dataTimeService.UtcNow;

            _logger.Info("Calling repository to try to update apprenticeship application status={1} for application with Id={0}", applicationId, updatedStatus);

            var idMatchQuery = Query <MongoApprenticeshipApplicationDetail> .EQ(e => e.Id, applicationId);

            //Only update if not owned by RAA (using the setting of DateLastViewed as a proxy for that ownership) or if ownership should be ignored
            //http://stackoverflow.com/questions/4057196/how-do-you-query-this-in-mongo-is-not-null
            var isNotOwnedByRaaQuery = Query <MongoApprenticeshipApplicationDetail> .EQ(e => e.DateLastViewed, null);

            var query = ignoreOwnershipCheck
                ? idMatchQuery
                : new QueryBuilder <MongoApprenticeshipApplicationDetail>().And(idMatchQuery, isNotOwnedByRaaQuery);

            var update = Update <MongoApprenticeshipApplicationDetail>
                         .Set(e => e.Status, updatedStatus)
                         .Set(e => e.IsArchived, false) // Application status has changed, ensure it appears on the candidate's dashboard.
                         .Set(e => e.DateUpdated, now);

            switch (updatedStatus)
            {
            case ApplicationStatuses.Successful:
                update = update.Set(e => e.SuccessfulDateTime, now);
                break;

            case ApplicationStatuses.Unsuccessful:
                update = update.Set(e => e.UnsuccessfulDateTime, now);
                break;
            }

            var result = Collection.Update(query, update);

            if (result.Ok)
            {
                _logger.Info("Called repository to update apprenticeship application status={1} for application with Id={0} successfully with code={2}. Documents affected={3}", applicationId, updatedStatus, result.Code, result.DocumentsAffected);
                return(result.DocumentsAffected == 1);
            }

            var message = $"Call to repository to update apprenticeship application status={updatedStatus} for application with Id={applicationId} failed! Exit code={result.Code}, error message={result.ErrorMessage}";

            _logger.Error(message);
            throw new Exception(message);
        }
Exemple #15
0
        public void GivenSingleApplicationStatusAlert(ApplicationStatuses applicationStatus)
        {
            var alerts       = new ApplicationStatusAlertsBuilder().WithApplicationStatusAlerts(1, applicationStatus).Build();
            var emailRequest = new DailyDigestEmailRequestBuilder().WithApplicationStatusAlerts(alerts).Build();

            List <SendGridMessageSubstitution> sendGridMessageSubstitutions;

            var sendGridMessage = GetSendGridMessage(out sendGridMessageSubstitutions);

            var emailMessageFormatter = new EmailDailyDigestMessageFormatterBuilder().Build();

            emailMessageFormatter.PopulateMessage(emailRequest, sendGridMessage.Object);

            var applicationStatusAlertTagSubstitution = sendGridMessageSubstitutions.Single(s => s.ReplacementTag == ApplicationStatusAlertTag);

            applicationStatusAlertTagSubstitution.SubstitutionValues.Count.Should().Be(1);
            applicationStatusAlertTagSubstitution.SubstitutionValues.Single().Should().Be(GetExpectedInfoSubstitution(alerts));
        }
Exemple #16
0
        public void Mapping()
        {
            const int legacyApplicationId = 3456789;
            const ApplicationStatuses applicationStatus = ApplicationStatuses.Unsuccessful;
            const string unsuccessfulReason             = "You do not have the required grades";

            var applicationReadRepository       = new Mock <IApprenticeshipApplicationReadRepository>();
            var apprenticeshipApplicationDetail = new Fixture().Build <ApprenticeshipApplicationDetail>().With(aad => aad.LegacyApplicationId, legacyApplicationId).Create();

            applicationReadRepository.Setup(r => r.Get(legacyApplicationId, true)).Returns(apprenticeshipApplicationDetail);

            var statusAlertRepository = new Mock <IApplicationStatusAlertRepository>();

            ApplicationStatusAlert applicationStatusAlert = null;

            statusAlertRepository.Setup(r => r.Save(It.IsAny <ApplicationStatusAlert>())).Callback <ApplicationStatusAlert>(asa => { applicationStatusAlert = asa; });
            statusAlertRepository.Setup(r => r.GetForApplication(It.IsAny <Guid>())).Returns(new List <ApplicationStatusAlert>());

            var subscriber = new ApplicationStatusChangedSubscriberBuilder().With(applicationReadRepository).With(statusAlertRepository).Build();

            var applicationStatusChanged = new Fixture().Build <ApplicationStatusChanged>()
                                           .With(asc => asc.LegacyApplicationId, legacyApplicationId)
                                           .With(asc => asc.ApplicationStatus, applicationStatus)
                                           .With(asc => asc.UnsuccessfulReason, unsuccessfulReason)
                                           .Create();

            var state = subscriber.Consume(applicationStatusChanged);

            state.Should().NotBeNull();
            state.Should().Be(ServiceBusMessageStates.Complete);

            applicationStatusAlert.Should().NotBeNull();
            applicationStatusAlert.CandidateId.Should().Be(apprenticeshipApplicationDetail.CandidateId);
            applicationStatusAlert.ApplicationId.Should().Be(apprenticeshipApplicationDetail.EntityId);
            applicationStatusAlert.VacancyId.Should().Be(apprenticeshipApplicationDetail.Vacancy.Id);
            applicationStatusAlert.Title.Should().Be(apprenticeshipApplicationDetail.Vacancy.Title);
            applicationStatusAlert.EmployerName.Should().Be(apprenticeshipApplicationDetail.Vacancy.EmployerName);
            applicationStatusAlert.Status.Should().Be(applicationStatus);
            applicationStatusAlert.UnsuccessfulReason.Should().Be(unsuccessfulReason);
            // ReSharper disable once PossibleInvalidOperationException
            applicationStatusAlert.DateApplied.Should().Be(apprenticeshipApplicationDetail.DateApplied.Value);
            applicationStatusAlert.BatchId.Should().Be(null);
            applicationStatusAlert.SentDateTime.Should().Be(null);
        }
        public List<UndecidedApplication> GetUndecidedApplications(ApplicationStatuses applicationStatus)
        {
            List<UndecidedApplication> undecidedApplications = (from application in context.Applications
                                                    join applicant in context.Applicants on application.ApplicantId equals applicant.ApplicantId
                                                    where application.AppStatus == applicationStatus.ToString()
                                                    select new UndecidedApplication
                                                    {
                                                        ApplicationDate = application.ApplicationDate,
                                                        ApplicationId = application.ApplicationId,
                                                        FirstName = applicant.FirstName,
                                                        MiddleName = applicant.MiddleNames,
                                                        LastName = applicant.LastName,
                                                        Email = application.Contacts.Where(a => a.ContactTypeId == (int)ContactsOfType.EmailAddress).FirstOrDefault().ContactDetail,
                                                        LoanAmount = application.Amount,
                                                        LoanPaybackDate = application.PaybackDate
                                                    }).OrderByDescending(a => a.ApplicationDate).ToList();

            return undecidedApplications;
        }
Exemple #18
0
        public static string GetPortugueseNameOfStatus(ApplicationStatuses status)
        {
            switch (status)
            {
                case ApplicationStatuses.Approved:
                    return "Aprovado";

                case ApplicationStatuses.Declined:
                    return "Rejeitado";

                case ApplicationStatuses.New:
                    return "Nova Entrada";

                case ApplicationStatuses.Undecided:
                    return "Pendente";
            }

            return "";
        }
        /// <summary>
        /// Transition this application from one status to another.
        /// </summary>
        /// <remarks>
        /// This method is agnostic about workflows, and will only enforce that you cannot transition from one statu to the same status.
        /// Use an appropriate class that derives from <see cref="StatusWrapper"/> (e.g. <see cref="SubmittedApplication"/>) as helpers to more
        /// effective manage the status.
        /// </remarks>
        /// <param name="transitionTo"></param>
        /// <param name="effectiveAsOf"></param>
        /// <param name="resolution"></param>
        /// <returns></returns>
        public Result <StatusTransition> Transition(ApplicationStatuses transitionTo, DateTime effectiveAsOf, ApplicationResolution resolution = ApplicationResolution.UNRESOLVED)
        {
            // CAUTION: if the inner logic of this method changes, you may have to revisit the first transition created
            // in the ctor

            if (CurrentStatus == transitionTo)
            {
                return(Result.Fail("Unable to transition to the current status."));
            }

            if (transitionTo != ApplicationStatuses.CLOSED)
            {
                resolution = ApplicationResolution.UNRESOLVED;
            }

            var transition = new StatusTransition(this, CurrentStatus, transitionTo, effectiveAsOf, resolution);

            ((List <StatusTransition>)Transitions).Add(transition);
            return(Result.Ok(transition));
        }
        public void GivenSingleApplicationStatusAlert(ApplicationStatuses applicationStatus)
        {
            var alerts     = new ApplicationStatusAlertsBuilder().WithApplicationStatusAlerts(1, applicationStatus).Build();
            var smsRequest = new DailyDigestSmsRequestBuilder().WithApplicationStatusAlerts(alerts).Build();
            var formatter  = new SmsDailyDigestMessageFormatterBuilder().WithMessageTemplate(MessageTemplate).Build();

            var message = formatter.GetMessage(smsRequest.Tokens);

            int draftCount;
            int draftLineCount;
            int alertCount;
            int alertLineCount;
            var expectedMessage = GetExpectedMessage(null, alerts, out draftCount, out draftLineCount, out alertCount, out alertLineCount);

            message.Should().Be(expectedMessage);
            draftCount.Should().Be(0);
            draftLineCount.Should().Be(0);
            alertCount.Should().Be(1);
            alertLineCount.Should().Be(1);
        }
Exemple #21
0
            public void ShouldUpdateApplicationStatus(
                ApplicationStatuses oldStatus,
                ApplicationStatuses newStatus,
                ApplicationStatusSummary.Source source,
                bool expected)
            {
                // Arrange.
                var detail = new ApprenticeshipApplicationDetail
                {
                    Status     = oldStatus,
                    IsArchived = true
                };

                var summary = new ApplicationStatusSummary
                {
                    ApplicationId     = Guid.Empty,
                    ApplicationStatus = newStatus
                };

                var ignoreOwnershipCheck = summary.UpdateSource == ApplicationStatusSummary.Source.Raa;

                _mockReadRepository.Setup(mock => mock.Get(detail.EntityId)).Returns(new ApprenticeshipApplicationDetail {
                    Status = newStatus
                });

                _mockWriteRepository.Setup(mock => mock
                                           .UpdateApplicationStatus(detail, newStatus, ignoreOwnershipCheck))
                .Returns(expected);

                // Act.
                var actual = detail.UpdateApprenticeshipApplicationDetail(summary, _mockReadRepository.Object, _mockWriteRepository.Object);

                // Assert.
                actual.Should().Be(expected);
                detail.IsArchived.Should().Be(!expected);
                detail.Status.Should().Be(summary.ApplicationStatus);

                _mockWriteRepository.Verify(mock => mock
                                            .UpdateApplicationStatus(detail, newStatus, ignoreOwnershipCheck),
                                            Times.Exactly(expected ? 1 : 0));
            }
 private static BsonDocument GetApplicationStatusCount(ApplicationStatuses applicationStatus)
 {
     return(new BsonDocument
     {
         {
             "$sum", new BsonDocument
             {
                 {
                     "$cond", new BsonArray
                     {
                         new BsonDocument {
                             { "$eq", new BsonArray {
                                   "$Status", (int)applicationStatus
                               } }
                         }, 1, 0
                     }
                 }
             }
         }
     });
 }
Exemple #23
0
        public void ShouldSendWellFormedAlert()
        {
            // Arrange.
            const ApplicationStatuses currentStatus = ApplicationStatuses.Submitted;
            const ApplicationStatuses newStatus     = ApplicationStatuses.Successful;

            const int    legacyApplicationId = 3456789;
            const string unsuccessfulReason  = "You do not have the required grades";

            ApplicationStatusChanged applicationStatusChanged = null;

            var serviceBus = new Mock <IServiceBus>();

            serviceBus.Setup(mock => mock
                             .PublishMessage(It.IsAny <ApplicationStatusChanged>()))
            .Callback <ApplicationStatusChanged>(each =>
            {
                applicationStatusChanged = each;
            });

            var strategy = new ApplicationStatusAlertStrategyBuilder()
                           .With(serviceBus)
                           .Build();

            var summary = new ApplicationStatusSummaryBuilder(newStatus)
                          .WithLegacyApplicationId(legacyApplicationId)
                          .WithUnsuccessfulReason(unsuccessfulReason)
                          .Build();

            // Act.
            strategy.Send(currentStatus, summary);

            // Assert.
            applicationStatusChanged.Should().NotBeNull();
            applicationStatusChanged.LegacyApplicationId.Should().Be(legacyApplicationId);
            applicationStatusChanged.ApplicationStatus.Should().Be(newStatus);
            applicationStatusChanged.UnsuccessfulReason.Should().Be(unsuccessfulReason);
        }
        public int GetCandidatesWithApplicationsInStatusCount(ApplicationStatuses applicationStatus, int minimumCount)
        {
            var statusMatch = new BsonDocument {
                { "$match", new BsonDocument {
                      { "Status", (int)applicationStatus }
                  } }
            };
            var candidateIdGroup = new BsonDocument {
                { "$group", new BsonDocument {
                      { "_id", "$CandidateId" }, { "count", new BsonDocument {
                                                       { "$sum", 1 }
                                                   } }
                  } }
            };
            var countMatch = new BsonDocument {
                { "$match", new BsonDocument {
                      { "count", new BsonDocument {
                                                           { "$gte", minimumCount }
                                                       } }
                  } }
            };
            var sumGroup = new BsonDocument {
                { "$group", new BsonDocument {
                      { "_id", "candidatesWithApplicationsInStatusCount" }, { "candidatesWithApplicationsInStatusCount", new BsonDocument {
                                                                                  { "$sum", 1 }
                                                                              } }
                  } }
            };

            var pipeline = new[] { statusMatch, candidateIdGroup, countMatch, sumGroup };

            var result = Collection.Aggregate(new AggregateArgs {
                Pipeline = pipeline
            }).ToArray();
            var count = result.Length == 0 ? 0 : result[0].ToArray()[1].Value.AsInt32;

            return(count);
        }
Exemple #25
0
        public void Send(ApplicationStatuses currentStatus, ApplicationStatusSummary applicationStatusSummary)
        {
            if (!applicationStatusSummary.IsLegacySystemUpdate())
            {
                return;
            }

            if (currentStatus == applicationStatusSummary.ApplicationStatus)
            {
                return;
            }

            if (!(applicationStatusSummary.ApplicationStatus == ApplicationStatuses.Successful ||
                  applicationStatusSummary.ApplicationStatus == ApplicationStatuses.Unsuccessful))
            {
                return;
            }

            var applicationStatusChanged = new ApplicationStatusChanged
            {
                LegacyApplicationId = applicationStatusSummary.LegacyApplicationId,
                ApplicationStatus   = applicationStatusSummary.ApplicationStatus,
                UnsuccessfulReason  = applicationStatusSummary.UnsuccessfulReason
            };

            var message =
                $"Queuing application status changed for LegacyApplicationId: {applicationStatusChanged.LegacyApplicationId} with ApplicationStatus: {applicationStatusChanged.ApplicationStatus}, UnsuccessfulReason: {applicationStatusChanged.UnsuccessfulReason}";

            try
            {
                _logService.Debug(message);
                _serviceBus.PublishMessage(applicationStatusChanged);
            }
            catch (Exception e)
            {
                _logService.Warn(message + " failed!", e);
            }
        }
 private void SetValues()
 {
     try
     {
         query = "Select * from APPLICATIONS where ApplicationId=" + id;
         cmd   = new SqlCommand(query, con);
         con.Open();
         SqlDataReader reader = cmd.ExecuteReader();
         while (reader.Read())
         {
             body     = (string)reader[1];
             date     = (DateTime)reader[2];
             status   = (ApplicationStatuses)Convert.ToInt16(reader[3]);
             parentId = (int)reader[4];
         }
         con.Close();
     }
     catch (SqlException ex)
     {
         Exception e = new Exception("Error Occured in Database processing. CodeIndex:137", ex);
         throw e;
     }
 }
Exemple #27
0
        public void ShouldSendAlertWhenApplicationStatusHasChangedToSuccessfulOrUnsuccessful(
            ApplicationStatuses currentStatus,
            ApplicationStatuses newStatus,
            bool shouldSendAlert)
        {
            // Arrange.
            var serviceBus = new Mock <IServiceBus>();

            var strategy = new ApplicationStatusAlertStrategyBuilder()
                           .With(serviceBus)
                           .Build();

            var summary = new ApplicationStatusSummaryBuilder(newStatus)
                          .Build();

            // Act.
            strategy.Send(currentStatus, summary);

            // Assert.
            var times = shouldSendAlert ? Times.Once() : Times.Never();

            serviceBus.Verify(mock => mock
                              .PublishMessage(It.IsAny <ApplicationStatusChanged>()), times);
        }
        public ActionResult UpdateApplicationStatus(ApplicationStatuses applicationStatus, int applicationId, int reasonId)
        {
            Guid userId = (Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;

            _applicationDetailsService.UpdateApplicationStatus(applicationStatus, applicationId, reasonId, userId, DateTime.Now);

            return JavaScript("window.top.location.href ='" + Url.Action("Index") + "';");
        }
 public int GetApplicationStateCount(ApplicationStatuses applicationStatus)
 {
     return(Collection
            .AsQueryable()
            .Count(each => each.Status == applicationStatus));
 }
Exemple #30
0
 public ApplicationStatusSummaryBuilder(ApplicationStatuses applicationStatus)
 {
     _applicationStatus = applicationStatus;
 }
 public VacancyApplicationBuilder WithStatus(ApplicationStatuses status)
 {
     _status = status;
     return(this);
 }
 public ApprenticeshipApplicationBuilder WithApplicationStatus(ApplicationStatuses applicationStatus)
 {
     _applicationStatus = applicationStatus;
     return(this);
 }
Exemple #33
0
 public ApprenticeshipApplicationViewModelBuilder HasError(ApplicationStatuses status, string viewModelMessage)
 {
     _status           = status;
     _viewModelMessage = viewModelMessage;
     return(this);
 }
 public void UpdateApplicationStatus(ApprenticeshipApplicationDetail applicationDetail, ApplicationStatuses newApplicationStatus)
 {
     Collection.Update(Query.EQ("EntityId", applicationDetail.EntityId), new UpdateDocument {
         { "$set", new BsonDocument("Status", newApplicationStatus) }
     });
 }
 public void UpdateApplicationStatus(ApplicationStatuses status, int applicationId, int reasonId, Guid userId, DateTime dateAdded )
 {
     _applicationRepository.UpdateApplicationStatus(status, applicationId);
     _reasonRepository.AddReasonLog(status, applicationId, reasonId, userId, dateAdded);
     _actionLogRepository.LogAction(status.ToString(), applicationId, userId, dateAdded);
 }
        public void UpdateApplicationStatus(ApplicationStatuses applicationStatus, int applicationId)
        {
            Application application = GetApplication(applicationId);
            application.AppStatus =  applicationStatus.ToString();

            context.SubmitChanges();
        }
Exemple #37
0
 public ApprenticeshipApplicationViewModelBuilder WithStatus(ApplicationStatuses status)
 {
     _status = status;
     return(this);
 }
 private static ApprenticeshipApplicationDetail CreateTestApplication(DateTime dateUpdated = new DateTime(), ApplicationStatuses status = ApplicationStatuses.Unknown, bool ownedByRaa = true)
 {
     return(new ApprenticeshipApplicationDetail
     {
         EntityId = Guid.NewGuid(),
         CandidateId = Guid.NewGuid(),
         LegacyApplicationId = LegacyApplicationId,
         VacancyStatus = VacancyStatuses.Live,
         Status = status,
         DateLastViewed = ownedByRaa ? DateTime.Today : new DateTime?(),
         DateUpdated = dateUpdated,
         DateCreated = DateTime.Now.AddDays(-3),
         CandidateDetails =
         {
             FirstName        = "Johnny",
             LastName         = "Candidate",
             DateOfBirth      = DateTime.UtcNow.AddYears(-30),
             EmailAddress     = "*****@*****.**",
             PhoneNumber      = "07777111222",
             Address          =
             {
                 AddressLine1 = "Address line 1",
                 AddressLine2 = "Address line 2",
                 AddressLine3 = "Address line 3",
                 AddressLine4 = "Address line 4",
                 Postcode     = "CV1 2WT"
             }
         },
         CandidateInformation =
         {
             AboutYou                =
             {
                 HobbiesAndInterests = "Hobbies and interests",
                 Improvements        = "Improvements are not needed",
                 Strengths           = "My strengths are many",
                 Support             = "Third line"
             }
         }
     });
 }