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'
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)]