Example #1
0
                'name': job.name
            } for job in reorient_jobs],
            'loginUrl':
            campaign.create_logged_url(user.user_id,
                                       f'/projet/{project.project_id}'),
            'ofJobName':
            scoring_project.populate_template('%ofJobName'),
        })


campaign.register_campaign(
    'jobbing',
    campaign.Campaign(
        mailjet_template='1183675',
        mongo_filters={
            'projects': {
                '$elemMatch': {
                    'isIncomplete': {
                        '$ne': True
                    },
                    'openedStrategies.strategyId': 'diploma-free-job',
                }
            },
        },
        get_vars=_get_jobbing_vars,
        sender_name="Joanna et l'équipe de Bob",
        sender_email='*****@*****.**',
        is_coaching=True,
        is_big_focus=False,
    ))
Example #2
0
            if city.departement_id != '13':
                return None
            if area_type < geo_pb2.DEPARTEMENT:
                if city.city_id != '13004':
                    return None
                is_local = True

    return dict(
        campaign.get_default_vars(user), **{
            'improveInterviewAdviceUrl':
            campaign.get_deep_link_advice(user.user_id, project,
                                          'improve-interview'),
            'isLocal':
            campaign.as_template_boolean(is_local),
        })


campaign.register_campaign(
    'salon-arles',
    campaign.Campaign(
        mailjet_template='324871',
        mongo_filters={
            'projects.targetJob.jobGroup.romeId': {
                '$in': list(_JOB_GROUP_ROME_IDS)
            },
        },
        get_vars=_get_vars,
        sender_name='Joanna de Bob',
        sender_email='*****@*****.**',
    ))
Example #3
0
            'marketStress':
            _make_section(market_stress_section),
            'months':
            _make_section(months_section),
            'ofJobNameInDepartement':
            french.maybe_contract_prefix('de ', "d'", job_name_in_departement),
            'ofJobName':
            french.maybe_contract_prefix('de ', "d'", genderized_job_name),
        })


campaign.register_campaign(
    'imt',
    campaign.Campaign(
        mailjet_template='318212',
        mongo_filters={
            'projects': {
                '$elemMatch': {
                    'isIncomplete': {
                        '$ne': True
                    },
                },
            },
        },
        get_vars=_get_imt_vars,
        sender_name="Pascal et l'équipe de Bob",
        sender_email='*****@*****.**',
        is_coaching=True,
        is_big_focus=True,
    ))
Example #4
0
    return campaign.get_default_vars(user)


# TODO(cyrille): Modularize.
_CAMPAIGNS = {
    'focus-spontaneous':
    campaign.Campaign(
        mailjet_template='212606',
        mongo_filters={
            'projects': {
                '$elemMatch': {
                    'jobSearchLengthMonths': {
                        '$gte': 0
                    },
                    'isIncomplete': {
                        '$exists': False
                    },
                }
            },
        },
        get_vars=lambda user, unused_db=None: spontaneous_vars(
            user, 'focus-network'),
        sender_name='Margaux de Bob',
        sender_email='*****@*****.**',
    ),
    'focus-self-develop':
    campaign.Campaign(
        mailjet_template='255279',
        mongo_filters={
            'projects': {
                '$elemMatch': {
Example #5
0
        })


# TODO(cyrille): Modularize.
_CAMPAIGNS = {
    'focus-spontaneous':
    campaign.Campaign(
        mailjet_template='212606',
        mongo_filters={
            'projects': {
                '$elemMatch': {
                    'jobSearchLengthMonths': {
                        '$gte': 0
                    },
                    'isIncomplete': {
                        '$ne': True
                    },
                }
            },
        },
        get_vars=_get_spontaneous_vars,
        sender_name="Joanna et l'équipe de Bob",
        sender_email='*****@*****.**',
        is_coaching=True,
        is_big_focus=True,
    ),
    'focus-self-develop':
    campaign.Campaign(
        mailjet_template='255279',
        mongo_filters={
            'projects': {
                '$elemMatch': {
Example #6
0
    project = next((p for p in user.projects), project_pb2.Project())
    if project.passionate_level > project_pb2.PASSIONATING_JOB:
        goal = 'trouver un poste qui vous épanouira'
    elif project.kind == project_pb2.FIND_ANOTHER_JOB:
        goal = 'décrocher un nouveau poste'
    else:
        goal = 'décrocher votre prochain emploi'

    return dict(campaign.get_default_vars(user), goal=goal)


campaign.register_campaign(
    'christmas',
    campaign.Campaign(
        mailjet_template='279688',
        mongo_filters={},
        get_vars=christmas_vars,
        sender_name='Joanna de Bob',
        sender_email='*****@*****.**',
    ))
campaign.register_campaign(
    'new-year',
    campaign.Campaign(
        mailjet_template='293296',
        mongo_filters={},
        get_vars=new_year_vars,
        sender_name='Joanna de Bob',
        sender_email='*****@*****.**',
    ))
Example #7
0
from google.protobuf import json_format
import mongomock
import pymongo
import requests

from bob_emploi.frontend.api import user_pb2
from bob_emploi.frontend.server.asynchronous.mail import campaign
from bob_emploi.frontend.server.asynchronous.mail import focus
from bob_emploi.frontend.server.asynchronous.mail import mail_blast
from bob_emploi.frontend.server.test import mailjetmock

_FAKE_CAMPAIGNS = {
    'fake-user-campaign':
    campaign.Campaign('000000', {},
                      lambda user, **unused_kwargs: {'key': 'value'},
                      'Sender',
                      '*****@*****.**',
                      users_collection=campaign.BOB_USERS)
}


class CampaignTestBase(unittest.TestCase):
    """Base class for unit tests of a campaign."""

    # Need to be overriden in subclasses.
    campaign_id = ''
    # May be overriden in subclasses.
    mongo_collection = 'user'

    @classmethod
    def setUpClass(cls) -> None:
Example #8
0
    else:
        has_experience = ''

    deep_link_advice_url = \
        campaign.get_deep_link_advice(user.user_id, project, 'improve-resume') or \
        campaign.get_deep_link_advice(user.user_id, project, 'fresh-resume')

    auth_token = parse.quote(auth.create_token(user.user_id, is_using_timestamp=True))
    return dict(campaign.get_default_coaching_email_vars(user), **{
        'deepLinkAdviceUrl': deep_link_advice_url,
        'hasExperience': has_experience,
        'isSeptember': campaign.as_template_boolean(now.month == 9),
        'loginUrl': f'{campaign.BASE_URL}?userId={user.user_id}&authToken={auth_token}',
    })


campaign.register_campaign('improve-cv', campaign.Campaign(
    mailjet_template='980269',
    mongo_filters={
        'profile.frustrations': 'RESUME',
        'projects': {'$elemMatch': {
            'isIncomplete': {'$ne': True},
        }},
    },
    get_vars=_get_improve_cv_vars,
    sender_name="Joanna et l'équipe de Bob",
    sender_email='*****@*****.**',
    is_coaching=True,
    is_big_focus=True,
))
    """Compute vars for the "Prepare your application" email."""

    project = user.projects[0]

    deep_link_motivation_email_url = \
        campaign.get_deep_link_advice(user.user_id, project, 'motivation-email')

    return dict(campaign.get_default_coaching_email_vars(user), **{
        'deepLinkMotivationEmailUrl': deep_link_motivation_email_url,
        'hasInterviewFrustration':
        campaign.as_template_boolean(user_pb2.INTERVIEW in user.profile.frustrations),
        'hasSelfConfidenceFrustration':
        campaign.as_template_boolean(user_pb2.SELF_CONFIDENCE in user.profile.frustrations),
        'loginUrl': campaign.create_logged_url(user.user_id, f'/projet/{project.project_id}'),
    })


campaign.register_campaign('prepare-your-application', campaign.Campaign(
    mailjet_template='1118228',
    mongo_filters={
        'projects': {'$elemMatch': {
            'isIncomplete': {'$ne': True},
        }},
    },
    get_vars=_get_prepare_your_application_vars,
    sender_name="Joanna et l'équipe de Bob",
    sender_email='*****@*****.**',
    is_coaching=True,
    is_big_focus=True,
))
Example #10
0
            _make_section(months_section),
            'ofJobNameInDepartement':
            french.maybe_contract_prefix('de ', "d'", job_name_in_departement),
            'ofJobName':
            french.maybe_contract_prefix('de ', "d'", genderized_job_name),
            'showPs':
            campaign.as_template_boolean(
                _can_go_to_arles_hotellerie_event(rome_id, project.mobility)),
            'statusUpdateUrl':
            campaign.get_status_update_link(user.user_id, user.profile),
        })


campaign.register_campaign(
    'imt',
    campaign.Campaign(
        mailjet_template='318212',
        mongo_filters={
            'projects': {
                '$elemMatch': {
                    'isIncomplete': {
                        '$exists': False
                    },
                },
            },
        },
        get_vars=imt_vars,
        sender_name='Pascal de Bob',
        sender_email='*****@*****.**',
    ))
Example #11
0
            '{} {}'.format(
                french.lower_first_letter(project.target_job.job_group.name),
                geo.get_in_a_departement_text(
                    database, project.mobility.city.departement_id)),
            'networkApplicationPercentage':
            network_application_importance,
        })


campaign.register_campaign(
    'focus-network',
    campaign.Campaign(
        mailjet_template='205970',
        mongo_filters={
            'projects.networkEstimate': 1,
        },
        get_vars=network_vars,
        sender_name='Margaux de Bob',
        sender_email='*****@*****.**',
    ))

campaign.register_campaign(
    'network-plus',
    campaign.Campaign(
        mailjet_template='300528',
        mongo_filters={
            'projects': {
                '$exists': True
            },
            'projects.networkEstimate': {
                '$gte': 2
Example #12
0
            'networkApplicationPercentage':
            network_application_importance,
        })


campaign.register_campaign(
    'focus-network',
    campaign.Campaign(
        mailjet_template='205970',
        mongo_filters={
            'projects': {
                '$elemMatch': {
                    'networkEstimate': 1,
                    'isIncomplete': {
                        '$ne': True
                    },
                }
            },
        },
        get_vars=_get_network_vars,
        sender_name="Joanna et l'équipe de Bob",
        sender_email='*****@*****.**',
        is_coaching=True,
        is_big_focus=True,
    ))

campaign.register_campaign(
    'network-plus',
    campaign.Campaign(
        mailjet_template='300528',
        mongo_filters={
            'projects': {
Example #13
0
    }


_NPS_CAMPAIGN = campaign.Campaign(
    # ID of the email template in MailJet. See
    # https://app.mailjet.com/template/100819/build
    mailjet_template='100819',
    mongo_filters={
        'emailsSent': {
            '$not': {
                '$elemMatch': {
                    'campaignId': _CAMPAIGN_ID
                }
            }
        },
        'projects': {
            '$exists': True
        },
        'projects.isIncomplete': {
            '$ne': True
        },
        'registeredAt': {
            '$gt': '2018-01-01'
        },
    },
    get_vars=_get_nps_vars,
    sender_name='Bob',
    sender_email='*****@*****.**',
)

campaign.register_campaign(_CAMPAIGN_ID, _NPS_CAMPAIGN)
Example #14
0
    'account-deletion-notice',
    campaign.Campaign(
        mailjet_template='1088068',
        mongo_filters={
            # User hasn't been on Bob for two years.
            'registeredAt': {
                '$lt': _TWO_YEARS_AGO_STRING
            },
            'requestedByUserAtDate': {
                '$not': {
                    '$gt': _TWO_YEARS_AGO_STRING
                }
            },
            # User hasn't read any email we sent to them in the last two years.
            'emailsSent': {
                '$not': {
                    '$elemMatch': {
                        'sentAt': {
                            '$gt': _TWO_YEARS_AGO_STRING
                        },
                        'status': {
                            '$in': ['EMAIL_SENT_OPENED', 'EMAIL_SENT_CLICKED']
                        },
                    }
                }
            },
        },
        get_vars=_account_deletion_notice_vars,
        sender_name="Joanna et l'équipe de Bob",
        sender_email='*****@*****.**',
    ))