Esempio n. 1
0
def report_delete(report_id):
    if flask.request.method == 'POST':
        session = database.get_session()
        reviews_list = database.get_seris_reviews_list(report_id)
        if reviews_list:
            #TODO change when multiple reviews will be implemented
            session.table(database.SerisReviewRow) \
                   .delete(database.get_seris_reviews_list(report_id)[0].id)

        session.table(database.ReportRow).delete(report_id)
        session.commit()
        flask.flash("Report deleted.", "success")
        return flask.redirect(flask.url_for('views.report_list'))
Esempio n. 2
0
def report_view(report_id):
    app = flask.current_app
    report = database.get_report_or_404(report_id)
    country = flask.request.args.get('country')
    region = flask.request.args.get('region')
    return flask.render_template(
        'report_view.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets-view.html')),
            'report': {
                'id':
                report_id,
                'data':
                schema.ReportSchema.from_flat(report),
                'seris_reviews': [{
                    'id':
                    row.id,
                    'data':
                    schema.SerisReviewSchema.from_flat(row)
                } for row in database.get_seris_reviews_list(report_id)]
            },
            'country': country,
            'region': region,
            'edit_is_allowed': edit_is_allowed(report_id),
        })
Esempio n. 3
0
def report_delete(report_id):
    if flask.request.method == 'POST':
        session = database.get_session()
        reviews_list = database.get_seris_reviews_list(report_id)
        if reviews_list:
            # TODO change when multiple reviews will be implemented
            session.table(database.SerisReviewRow) \
                   .delete(reviews_list[0].id)

        report_row = database.get_report_or_404(report_id)
        title = report_row['details_original_name']
        session.table(database.ReportRow).delete(report_id)
        session.commit()

        action = 'deleted'
        contributor_id = getattr(flask.g, 'user_id')
        contributor_name = '%s %s' % (getattr(
            flask.g, 'user_first_name'), getattr(flask.g, 'user_last_name'))
        contributor_profile = (
            'http://www.eionet.europa.eu/directory/user?uid=%s' %
            contributor_id)
        send_notification_mail(None, title, action, contributor_profile,
                               contributor_name, contributor_id)

        flask.flash("Report deleted.", "success")
        url = flask.url_for('views.report_list')
        country = flask.request.args.get('country')
        if country:
            url = url + '?country=' + country
        region = flask.request.args.get('region')
        if region:
            url = url + '?region=' + region
        return flask.redirect(url)
Esempio n. 4
0
def report_view(report_id):
    app = flask.current_app
    report = database.get_report_or_404(report_id)
    return flask.render_template('report_view.html', **{
            'mk': MarkupGenerator(app.jinja_env.get_template('widgets-view.html')),
            'report': {'id': report_id,
                       'data': schema.ReportSchema.from_flat(report),
                       'seris_reviews': [
                          {'id': row.id,
                           'data': schema.SerisReviewSchema.from_flat(row)}
                          for row in database.get_seris_reviews_list(report_id)]
                      }
        }
    )
Esempio n. 5
0
def report_edit(report_id=None):
    if report_id is None:
        report_row = database.ReportRow()
        seris_review_row = database.SerisReviewRow()
    else:
        report_row = database.get_report_or_404(report_id)
        reviews_list = database.get_seris_reviews_list(report_id)
        if reviews_list:
            #TODO to be changed when there will be more than one seris
            seris_review_row = reviews_list[0]
        else:
            seris_review_row = database.SerisReviewRow()

    if flask.request.method == 'POST':
        session = database.get_session()
        form_data = {}
        form_data.update(schema.ReportSchema.from_defaults().flatten())
        form_data.update(schema.SerisReviewSchema.from_defaults().flatten())
        form_data.update(flask.request.form.to_dict())
        _expand_lists(form_data, ['header_region', 'header_country',
            'header_subregion', 'details_translated_in',
            'details_original_language', 'links_target_audience'])

        report_schema = schema.ReportSchema.from_flat(form_data)
        seris_review_schema = schema.SerisReviewSchema.from_flat(form_data)

        file_upload.handle_request(session, report_schema, report_row)
        if report_schema.validate():

            report_row.clear()
            report_row.update(report_schema.flatten())
            session.save(report_row)
            #TODO create filter to display data without losing information
            if report_row['format_report_type'] == 'report (static source)':
                report_row['format_date_of_last_update'] = ''
                report_row['format_freq_of_upd'] = ''
                report_row['format_size'] = ''
            if report_row['format_report_type'] == 'portals (dynamic source)':
                report_row['format_date_of_publication'] = ''
                report_row['format_freq_of_pub'] = ''
                report_row['format_no_of_pages'] = ''
            if report_row['format_availability_paper_or_web'] == 'paper only':
                report_row['format_availability_registration_required'] = ''
            if report_row['format_availability_paper_or_web'] in [
                    'web only', 'web and print']:
                if not report_row['format_availability_registration_required']:
                    report_row['format_availability_costs'] = 'free'
            uploader = getattr(flask.g, 'user_id')
            if not uploader:
                uploader = 'Developer'
            report_row['header_uploader'] = uploader
            report_row['header_upload_date'] = datetime.datetime.now().strftime('%d %b %Y, %H:%M')
            session.save(report_row)
            seris_review_schema['report_id'].set(report_row.id)

            if seris_review_schema.validate():

                seris_review_row.clear()
                seris_review_row.update(seris_review_schema.flatten())
                if seris_review_row['structure_indicator_based'] == 'No':
                    seris_review_row['structure_indicators_estimation'] = ''
                    seris_review_row['structure_indicators_usage_to_compare_countries'] = ''
                    seris_review_row['structure_indicators_usage_to_compare_subnational'] = ''
                    seris_review_row['structure_indicators_usage_to_compare_eea'] = ''
                    seris_review_row['structure_indicators_usage_to_compare_global'] = ''
                    seris_review_row['structure_indicators_usage_to_assess_progress'] = ''
                    seris_review_row['structure_indicators_usage_to_evaluate'] = ''
                    seris_review_row['structure_indicators_usage_evaluation_method'] = ''
                elif not seris_review_row['structure_indicators_usage_to_evaluate']:
                    seris_review_row['structure_indicators_usage_evaluation_method'] = ''
                session.save(seris_review_row)

                session.commit()
                flask.flash("Report saved.", "success")
                url = flask.url_for('views.report_view',
                                    report_id=report_row.id)
                return flask.redirect(url)

        session.rollback()
        flask.flash("Errors in form.", "error")

    else:
        report_schema = schema.ReportSchema()
        seris_review_schema = schema.SerisReviewSchema()
        if report_id is not None:
            report_schema = schema.ReportSchema.from_flat(report_row)
            seris_review_schema = schema.SerisReviewSchema.from_flat(seris_review_row)

    app = flask.current_app
    return flask.render_template('report-edit.html', **{
        'mk': MarkupGenerator(app.jinja_env.get_template('widgets-edit.html')),
        'report_id': report_id,
        'report_schema': report_schema,
        'seris_review_schema': seris_review_schema,
        })
Esempio n. 6
0
def report_edit(report_id=None):
    country = flask.request.args.get('country')
    if not country:
        country = flask.request.form.get('country')
    if country == u'None':
        country = None
    region = flask.request.args.get('region')
    if not region:
        region = flask.request.form.get('region')
    if region == u'None':
        region = None
    if report_id is None:
        report_row = database.ReportRow()
        seris_review_row = database.SerisReviewRow()
    else:
        report_row = database.get_report_or_404(report_id)
        reviews_list = database.get_seris_reviews_list(report_id)
        if reviews_list:
            # TODO to be changed when there will be more than one seris
            seris_review_row = reviews_list[0]
        else:
            seris_review_row = database.SerisReviewRow()

    if flask.request.method == 'POST':
        session = database.get_session()
        form_data = {}
        form_data.update(schema.ReportSchema.from_defaults().flatten())
        form_data.update(schema.SerisReviewSchema.from_defaults().flatten())
        form_data.update(flask.request.form.to_dict())
        _expand_lists(form_data, [
            'header_region', 'header_country', 'header_subregion',
            'details_translated_in', 'details_original_language',
            'links_target_audience'
        ])

        report_schema = schema.ReportSchema.from_flat(form_data)
        seris_review_schema = schema.SerisReviewSchema.from_flat(form_data)

        file_upload.handle_request(session, report_schema, report_row)
        if report_schema.validate():

            report_row.clear()
            report_row.update(report_schema.flatten())
            session.save(report_row)
            # TODO create filter to display data without losing information
            if report_row['format_report_type'] == 'report (static source)':
                report_row['format_date_of_last_update'] = ''
                report_row['format_freq_of_upd'] = ''
                report_row['format_size'] = ''
            if report_row['format_report_type'] == 'portals (dynamic source)':
                report_row['format_date_of_publication'] = ''
                report_row['format_freq_of_pub'] = ''
                report_row['format_no_of_pages'] = ''
            if report_row['format_availability_paper_or_web'] == 'paper only':
                report_row['format_availability_registration_required'] = ''
                report_row['format_availability_url'] = ''
            if report_row['format_availability_paper_or_web'] in [
                    'web only', 'web and print'
            ]:
                if not report_row['format_availability_registration_required']:
                    report_row['format_availability_costs'] = 'free'
            uploader = getattr(flask.g, 'user_id', None)
            if not uploader:
                uploader = 'Developer'
            report_row['header_uploader'] = uploader
            now = datetime.datetime.now()
            report_row['header_upload_date'] = now.strftime('%d %b %Y, %H:%M')
            session.save(report_row)
            seris_review_schema['report_id'].set(report_row.id)

            if seris_review_schema.validate():
                seris_review_row.clear()
                seris_review_row.update(seris_review_schema.flatten())
                if seris_review_row['structure_indicator_based'] == 'No':
                    seris_review_row['structure_indicators_estimation'] = ''
                    seris_review_row[
                        'structure_indicators_usage_to_compare_countries'] = ''
                    seris_review_row[
                        'structure_indicators_usage_to_compare_subnational'] = ''
                    seris_review_row[
                        'structure_indicators_usage_to_compare_eea'] = ''
                    seris_review_row[
                        'structure_indicators_usage_to_compare_global'] = ''
                    seris_review_row[
                        'structure_indicators_usage_to_assess_progress'] = ''
                    seris_review_row[
                        'structure_indicators_usage_to_evaluate'] = ''
                    seris_review_row[
                        'structure_indicators_usage_evaluation_method'] = ''
                elif not seris_review_row[
                        'structure_indicators_usage_to_evaluate']:
                    seris_review_row[
                        'structure_indicators_usage_evaluation_method'] = ''
                session.save(seris_review_row)

                session.commit()

                flask.flash("Report saved.", "success")
                url = flask.url_for('views.report_view',
                                    report_id=report_row.id)

                title = report_row['details_original_name']
                if report_id is None:
                    action = 'added'
                else:
                    action = 'edited'
                if not flask.current_app.config.get('SKIP_EDIT_AUTHORIZATION',
                                                    False):
                    contributor_name = '%s %s' % (getattr(
                        flask.g,
                        'user_first_name'), getattr(flask.g, 'user_last_name'))
                    contributor_profile = (
                        'http://www.eionet.europa.eu/directory/user?uid=%s' %
                        uploader)
                    send_notification_mail('%s%s' % (flask.request.host, url),
                                           title, action, contributor_profile,
                                           contributor_name, uploader)

                if country:
                    url = url + '?country=' + country
                if region:
                    url = url + '?region=' + region
                return flask.redirect(url)

        session.rollback()
        flask.flash(
            "There were some errors in the submitted form. "
            "Please review look further down for the error messages.", "error")

    else:
        report_schema = schema.ReportSchema()
        seris_review_schema = schema.SerisReviewSchema()
        if report_id is not None:
            report_schema = schema.ReportSchema.from_flat(report_row)
            seris_review_schema = schema.SerisReviewSchema.from_flat(
                seris_review_row)

    app = flask.current_app
    return flask.render_template(
        'report-edit.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets-edit.html')),
            'report_id': report_id,
            'report_schema': report_schema,
            'seris_review_schema': seris_review_schema,
            'country': country,
            'region': region,
        })