Esempio n. 1
0
    def get_expanded_card_data(self, project: scoring_base.ScoringProject) \
            -> network_pb2.ContactLeads:
        """Retrieve data for the expanded card."""

        contact_leads = self._list_contact_leads(project)
        sorted_leads = sorted(contact_leads,
                              key=lambda l: (-len(l.filters), random.random()))
        return network_pb2.ContactLeads(leads=[
            network_pb2.ContactLead(
                name=project.populate_template(
                    project.translate_string(template.name)),
                email_example=project.populate_template(
                    project.translate_string(template.email_template)),
                contact_tip=project.translate_string(template.contact_tip))
            for template in sorted_leads
        ])
Esempio n. 2
0
def list_jobboards(
        project: scoring_base.ScoringProject
) -> Iterator[jobboard_pb2.JobBoard]:
    """List all job boards for this project."""

    all_job_boards = _JOBBOARDS.get_collection(project.database)
    for job_board_template in scoring_base.filter_using_score(
            all_job_boards, lambda j: j.filters, project):
        job_board = jobboard_pb2.JobBoard()
        job_board.CopyFrom(job_board_template)
        job_board.link = project.populate_template(job_board.link)
        yield job_board
Esempio n. 3
0
    def score_and_explain(self, project: scoring_base.ScoringProject) \
            -> scoring_base.ExplainedScore:
        """Compute a score for the given ScoringProject."""

        reasons = []
        if project.details.area_type < geo_pb2.COUNTRY:
            return scoring_base.NULL_EXPLAINED_SCORE
        reasons.append(
            project.populate_template(
                project.translate_static_string(
                    'vous nous avez dit être prêt%eFeminine à déménager')))

        local_stats = project.local_diagnosis()
        if local_stats.imt.yearly_avg_offers_per_10_candidates and \
                local_stats.num_less_stressful_departements:
            reasons.append(
                project.translate_static_string(
                    "il y a beaucoup plus d'offres par habitants dans d'autres villes"
                ))
            return scoring_base.ExplainedScore(2, reasons)
        return scoring_base.NULL_EXPLAINED_SCORE
    def score_and_explain(self, project: scoring_base.ScoringProject) \
            -> scoring_base.ExplainedScore:
        """Compute a score for the given ScoringProject."""

        close_jobs = self.get_close_jobs(project)
        search_since_nb_months = round(project.get_search_length_now())
        score_modifier = 0
        reasons: list[str] = []
        if len(close_jobs.close_jobs) + len(close_jobs.evolution_jobs) < 2:
            return scoring_base.NULL_EXPLAINED_SCORE
        # TODO(cyrille): Make this more robust.
        force_in_stuck_market = None
        # TODO(cyrille): Rather use market_stress to avoid depending on diagnostic to be computed.
        if project.details.diagnostic.category_id == 'stuck-market':
            force_in_stuck_market = scoring_base.ExplainedScore(1, reasons)
        if project.get_user_age() >= 45:
            return force_in_stuck_market or scoring_base.NULL_EXPLAINED_SCORE
        if project.details.passionate_level >= project_pb2.PASSIONATING_JOB:
            score_modifier = -1
        else:
            reasons.append(
                project.populate_template(
                    project.translate_static_string(
                        "vous n'êtes pas trop attaché%eFeminine à votre métier"
                    )))
        if project.details.job_search_has_not_started or search_since_nb_months <= 1:
            return scoring_base.ExplainedScore(2 + score_modifier, reasons)
        reasons = [
            project.translate_static_string(
                'vous cherchez depuis {} mois').format(search_since_nb_months)
        ]
        if search_since_nb_months >= 12:
            return scoring_base.ExplainedScore(3, reasons)
        if search_since_nb_months >= 9:
            return scoring_base.ExplainedScore(2, reasons)
        if search_since_nb_months >= 6:
            return scoring_base.ExplainedScore(1, reasons)
        return force_in_stuck_market or scoring_base.NULL_EXPLAINED_SCORE