Пример #1
0
def create_context_for_brief(stage, brief):
    return {
        'brief_title':
        brief['title'],
        'brief_link':
        '{}/{}/opportunities/{}'.format(get_web_url_from_stage(stage),
                                        brief['framework']['family'],
                                        brief['id'])
    }
def _create_context_for_brief(stage, brief):
    return {
        'brief_title': brief['title'],
        'brief_link': '{}/{}/opportunities/{}'.format(
            get_web_url_from_stage(stage),
            brief['framework']['family'],
            brief['id']
        ),
        'utm_date': date.today().strftime("%Y%m%d")
    }
def create_context_for_supplier(stage, supplier_briefs):
    return {
        'briefs': [
            {
                'brief_title': brief['title'],
                'brief_link': '{0}/{1}/opportunities/{2}?utm_id={3}qa'.format(
                    get_web_url_from_stage(stage),
                    brief['framework']['family'], brief['id'],
                    datetime.utcnow().strftime("%Y%m%d")
                )
            } for brief in supplier_briefs
        ]
    }
def notify_users(email_api_key, stage, brief):
    logger.info("Notifying users about brief ID: {brief_id} - '{brief_title}'",
                extra={
                    'brief_title': brief['title'],
                    'brief_id': brief['id']
                })
    email_client = DMNotifyClient(email_api_key, logger=logger)
    if brief['users']:
        try:
            brief_responses_url = \
                "{base_url}/buyers/frameworks/{framework_slug}/requirements/{lot_slug}/{brief_id}/responses".format(
                    base_url=get_web_url_from_stage(stage),
                    brief_id=brief["id"],
                    brief_title=brief["title"],
                    lot_slug=brief["lotSlug"],
                    framework_slug=brief["frameworkSlug"],
                )
            for email_address in (user['emailAddress']
                                  for user in brief['users']
                                  if user['active']):
                email_client.send_email(
                    email_address,
                    template_name_or_id=EMAIL_TEMPLATE_ID,
                    personalisation={
                        "brief_title": brief["title"],
                        "brief_responses_url": brief_responses_url,
                    },
                    allow_resend=False,
                )

            return True
        except EmailError as e:
            logger.error("Email failed to send for brief_id: {brief_id}",
                         extra={
                             'error': e,
                             'brief_id': brief['id']
                         })

            if isinstance(e, EmailTemplateError):
                raise  # do not try to continue

            return False
 def test_get_api_endpoint_for_non_dev_environments(self, stage, expected_result):
     assert get_web_url_from_stage(stage) == expected_result
 def test_get_web_url_for_dev_environments(self, stage):
     assert get_web_url_from_stage(stage) == 'http://localhost'
Пример #7
0
def send_brief_clarification_question(data_api_client, brief,
                                      clarification_question):
    questions_url = (
        get_web_url_from_stage(current_app.config["DM_ENVIRONMENT"]) +
        url_for('external.supplier_questions',
                framework_slug=brief["framework"]['slug'],
                lot_slug=brief["lotSlug"],
                brief_id=brief["id"]))

    notify_client = DMNotifyClient(current_app.config['DM_NOTIFY_API_KEY'])

    # Email the question to brief owners
    for email_address in get_brief_user_emails(brief):
        try:
            notify_client.send_email(
                email_address,
                template_name_or_id=current_app.config['NOTIFY_TEMPLATES']
                ['clarification_question'],
                personalisation={
                    "brief_title":
                    brief['title'],
                    "brief_name":
                    brief['title'],
                    "message":
                    escape(clarification_question),
                    "publish_by_date":
                    dateformat(brief['clarificationQuestionsPublishedBy']),
                    "questions_url":
                    questions_url
                },
                reference="clarification-question-{}".format(
                    hash_string(email_address)))
        except EmailError as e:
            current_app.logger.error(
                "Brief question email failed to send. error={error} supplier_id={supplier_id} brief_id={brief_id}",
                extra={
                    'error': six.text_type(e),
                    'supplier_id': current_user.supplier_id,
                    'brief_id': brief['id']
                })

            abort(503, "Clarification question email failed to send")

    data_api_client.create_audit_event(
        audit_type=AuditTypes.send_clarification_question,
        user=current_user.email_address,
        object_type="briefs",
        object_id=brief['id'],
        data={
            "question": clarification_question,
            "briefId": brief['id'],
            "supplierId": current_user.supplier_id
        })

    brief_url = (get_web_url_from_stage(current_app.config["DM_ENVIRONMENT"]) +
                 url_for('external.get_brief_by_id',
                         framework_family=brief['framework']['family'],
                         brief_id=brief['id']))

    # Send the supplier a copy of the question
    try:
        notify_client.send_email(
            current_user.email_address,
            template_name_or_id=current_app.config["NOTIFY_TEMPLATES"]
            ["clarification_question_confirmation"],
            personalisation={
                "brief_name": brief['title'],
                "message": escape(clarification_question),
                "brief_url": brief_url,
            },
            reference="clarification-question-confirmation-{}".format(
                hash_string(current_user.email_address)))
    except EmailError as e:
        current_app.logger.error(
            "Brief question supplier email failed to send. error={error} supplier_id={supplier_id} brief_id={brief_id}",
            extra={
                'error': six.text_type(e),
                'supplier_id': current_user.supplier_id,
                'brief_id': brief['id']
            })
def admin_link(record):
    base = get_web_url_from_stage('production')
    admin_path = f"{base}/admin/suppliers/{record['supplier']['id']}/edit/declarations/{record['frameworkSlug']}"
    return [('admin_link', admin_path)]