def upload_contact_list(service_id): form = CsvUploadForm() if form.validate_on_submit(): try: upload_id = ContactList.upload( current_service.id, Spreadsheet.from_file_form(form).as_dict, ) file_name_metadata = unicode_truncate( SanitiseASCII.encode(form.file.data.filename), 1600) ContactList.set_metadata(current_service.id, upload_id, original_file_name=file_name_metadata) return redirect( url_for( '.check_contact_list', service_id=service_id, upload_id=upload_id, )) except (UnicodeDecodeError, BadZipFile, XLRDError): flash( 'Could not read {}. Try using a different file format.'.format( form.file.data.filename)) except (XLDateError): flash(( '{} contains numbers or dates that Notify cannot understand. ' 'Try formatting all columns as ‘text’ or export your file as CSV.' ).format(form.file.data.filename)) return render_template( 'views/uploads/contact-list/upload.html', form=form, allowed_file_extensions=Spreadsheet.ALLOWED_FILE_EXTENSIONS, )
def check_messages(service_id, template_id, upload_id, row_index=2): data = _check_messages(service_id, template_id, upload_id, row_index) if (data['recipients'].too_many_rows or not data['count_of_recipients'] or not data['recipients'].has_recipient_columns or data['recipients'].duplicate_recipient_column_headers or data['recipients'].missing_column_headers): return render_template('views/check/column-errors.html', **data) if data['row_errors']: return render_template('views/check/row-errors.html', **data) if (data['errors'] or data['trying_to_send_letters_in_trial_mode']): return render_template('views/check/column-errors.html', **data) set_metadata_on_csv_upload( service_id, upload_id, notification_count=data['count_of_recipients'], template_id=str(template_id), valid=True, original_file_name=unicode_truncate( request.args.get('original_file_name', ''), 1600, ), ) return render_template('views/check/ok.html', **data)
def check_messages(service_id, template_id, upload_id, row_index=2): data = _check_messages(service_id, template_id, upload_id, row_index) if ( data['recipients'].too_many_rows or not data['count_of_recipients'] or not data['recipients'].has_recipient_columns or data['recipients'].duplicate_recipient_column_headers or data['recipients'].missing_column_headers or data['sent_previously'] ): return render_template('views/check/column-errors.html', **data) if data['row_errors']: return render_template('views/check/row-errors.html', **data) if ( data['errors'] or data['trying_to_send_letters_in_trial_mode'] ): return render_template('views/check/column-errors.html', **data) data['original_file_name'] = SanitiseASCII.encode(data.get('original_file_name', '')) metadata_kwargs = { 'notification_count': data['count_of_recipients'], 'template_id': str(template_id), 'valid': True, 'original_file_name': unicode_truncate( data['original_file_name'], 1600, ), } if session.get('sender_id'): metadata_kwargs['sender_id'] = session['sender_id'] set_metadata_on_csv_upload(service_id, upload_id, **metadata_kwargs) return render_template('views/check/ok.html', **data)
def check_messages(service_id, template_id, upload_id, row_index=2): data = _check_messages(service_id, template_id, upload_id, row_index) if (data["recipients"].too_many_rows or not data["count_of_recipients"] or not data["recipients"].has_recipient_columns or data["recipients"].duplicate_recipient_column_headers or data["recipients"].missing_column_headers or data["sent_previously"]): return render_template("views/check/column-errors.html", **data) if data["row_errors"]: return render_template("views/check/row-errors.html", **data) if data["errors"] or data["trying_to_send_letters_in_trial_mode"]: return render_template("views/check/column-errors.html", **data) data["original_file_name"] = SanitiseASCII.encode( data.get("original_file_name", "")) metadata_kwargs = { "notification_count": data["count_of_recipients"], "template_id": str(template_id), "valid": True, "original_file_name": unicode_truncate( data["original_file_name"], 1600, ), } if session.get("sender_id"): metadata_kwargs["sender_id"] = session["sender_id"] set_metadata_on_csv_upload(service_id, upload_id, **metadata_kwargs) return render_template("views/check/ok.html", **data)
def send_messages(service_id, template_id): db_template = current_service.get_template_with_user_permission_or_403( template_id, current_user) email_reply_to = None sms_sender = None if db_template['template_type'] == 'email': email_reply_to = get_email_reply_to_address_from_session() elif db_template['template_type'] == 'sms': sms_sender = get_sms_sender_from_session() if db_template[ 'template_type'] not in current_service.available_template_types: return redirect( url_for('.action_blocked', service_id=service_id, notification_type=db_template['template_type'], return_to='view_template', template_id=template_id)) template = get_template( db_template, current_service, show_recipient=True, letter_preview_url=url_for( 'no_cookie.view_letter_template_preview', service_id=service_id, template_id=template_id, filetype='png', page_count=get_page_count_for_letter(db_template), ), email_reply_to=email_reply_to, sms_sender=sms_sender, ) form = CsvUploadForm() if form.validate_on_submit(): try: upload_id = s3upload(service_id, Spreadsheet.from_file_form(form).as_dict, current_app.config['AWS_REGION']) file_name_metadata = unicode_truncate( SanitiseASCII.encode(form.file.data.filename), 1600) set_metadata_on_csv_upload(service_id, upload_id, original_file_name=file_name_metadata) return redirect( url_for( '.check_messages', service_id=service_id, upload_id=upload_id, template_id=template.id, )) except (UnicodeDecodeError, BadZipFile, XLRDError): flash( 'Could not read {}. Try using a different file format.'.format( form.file.data.filename)) except (XLDateError): flash(( '{} contains numbers or dates that Notify cannot understand. ' 'Try formatting all columns as ‘text’ or export your file as CSV.' ).format(form.file.data.filename)) column_headings = get_spreadsheet_column_headings_from_template(template) return render_template( 'views/send.html', template=template, column_headings=list(ascii_uppercase[:len(column_headings)]), example=[column_headings, get_example_csv_rows(template)], form=form, allowed_file_extensions=Spreadsheet.ALLOWED_FILE_EXTENSIONS)
def check_contact_list(service_id, upload_id): form = CsvUploadForm() contents = ContactList.download(service_id, upload_id) first_row = contents.splitlines()[0].strip().rstrip( ',') if contents else '' template_type = { 'emailaddress': 'email', 'phonenumber': 'sms', }.get(Columns.make_key(first_row)) original_file_name = SanitiseASCII.encode( request.args.get('original_file_name', '')) recipients = RecipientCSV( contents, template=get_sample_template(template_type or 'sms'), whitelist=itertools.chain.from_iterable( [user.name, user.mobile_number, user.email_address] for user in current_service.active_users) if current_service.trial_mode else None, allow_international_sms=current_service.has_permission( 'international_sms'), max_initial_rows_shown=50, max_errors_shown=50, ) non_empty_column_headers = list(filter(None, recipients.column_headers)) if len(non_empty_column_headers ) > 1 or not template_type or not recipients: return render_template( 'views/uploads/contact-list/too-many-columns.html', recipients=recipients, original_file_name=original_file_name, template_type=template_type, form=form, ) if recipients.too_many_rows or not len(recipients): return render_template( 'views/uploads/contact-list/column-errors.html', recipients=recipients, original_file_name=original_file_name, form=form, ) row_errors = get_errors_for_csv(recipients, template_type) if row_errors: return render_template( 'views/uploads/contact-list/row-errors.html', recipients=recipients, original_file_name=original_file_name, row_errors=row_errors, form=form, ) if recipients.has_errors: return render_template( 'views/uploads/contact-list/column-errors.html', recipients=recipients, original_file_name=original_file_name, form=form, ) metadata_kwargs = { 'row_count': len(recipients), 'valid': True, 'original_file_name': unicode_truncate( original_file_name, 1600, ), 'template_type': template_type } ContactList.set_metadata(service_id, upload_id, **metadata_kwargs) return render_template( 'views/uploads/contact-list/ok.html', recipients=recipients, original_file_name=original_file_name, upload_id=upload_id, )