def detail(opportunity_id):
    '''View one opportunity in detail

    :status 200: Render the opportunity's detail template
    :status 302: Signup for this particular opportunity via the
        :py:class:`~purchasing.opportunities.forms.OpportunitySignupForm`
    '''
    opportunity = Opportunity.query.get(opportunity_id)
    if opportunity and opportunity.can_view(current_user):
        signup_form = init_form(OpportunitySignupForm)
        if signup_form.validate_on_submit():
            signup_success = signup_for_opp(signup_form, opportunity)
            if signup_success:
                flash('Successfully subscribed for updates!', 'alert-success')
                return redirect(url_for('opportunities.detail', opportunity_id=opportunity.id))

        current_app.logger.info(u'BEACON FRONT OPPORTUNITY DETAIL VIEW | Opportunity {} (ID: {})'.format(
            opportunity.title, opportunity.id
        ))

        return render_template(
            'opportunities/front/detail.html', opportunity=opportunity,
            current_user=current_user, signup_form=signup_form,
        )
    abort(404)
def detail(opportunity_id):
    """View one opportunity in detail
    """
    opportunity = Opportunity.query.get(opportunity_id)
    if opportunity and opportunity.can_view(current_user):
        signup_form = init_form(OpportunitySignupForm)
        if signup_form.validate_on_submit():
            signup_success = signup_for_opp(signup_form, opportunity)
            if signup_success:
                flash("Successfully subscribed for updates!", "alert-success")
                return redirect(url_for("opportunities.detail", opportunity_id=opportunity.id))

        current_app.logger.info(
            "BEACON FRONT OPPORTUNITY DETAIL VIEW | Opportunity {} (ID: {})".format(
                opportunity.title.encode("ascii", "ignore"), opportunity.id
            )
        )

        return render_template(
            "opportunities/front/detail.html",
            opportunity=opportunity,
            current_user=current_user,
            signup_form=signup_form,
        )
    abort(404)
def browse():
    """Browse available opportunities
    """
    _open, upcoming = [], []

    signup_form = init_form(OpportunitySignupForm)
    if signup_form.validate_on_submit():
        opportunities = request.form.getlist("opportunity")
        if signup_for_opp(signup_form, opportunity=opportunities, multi=True):
            flash("Successfully subscribed for updates!", "alert-success")
            return redirect(url_for("opportunities.browse"))

    opportunities = Opportunity.query.filter(Opportunity.planned_submission_end >= datetime.date.today()).all()

    for opportunity in opportunities:
        if opportunity.is_submission_start:
            _open.append(opportunity)
        elif opportunity.is_upcoming:
            upcoming.append(opportunity)

    current_app.logger.info("BEACON FRONT OPEN OPPORTUNITY VIEW")
    return render_template(
        "opportunities/browse.html",
        opportunities=opportunities,
        current_user=current_user,
        signup_form=signup_form,
        _open=sorted(_open, key=lambda i: i.planned_submission_end),
        upcoming=sorted(upcoming, key=lambda i: i.planned_submission_start),
        session_vendor=session.get("email"),
    )
Beispiel #4
0
def detail(opportunity_id):
    '''View one opportunity in detail

    :status 200: Render the opportunity's detail template
    :status 302: Signup for this particular opportunity via the
        :py:class:`~purchasing.opportunities.forms.OpportunitySignupForm`
    '''
    opportunity = Opportunity.query.get(opportunity_id)
    if opportunity and opportunity.can_view(current_user):
        signup_form = init_form(OpportunitySignupForm)
        if signup_form.validate_on_submit():
            signup_success = signup_for_opp(signup_form, opportunity)
            if signup_success:
                flash('Successfully subscribed for updates!', 'alert-success')
                return redirect(
                    url_for('opportunities.detail',
                            opportunity_id=opportunity.id))

        current_app.logger.info(
            u'BEACON FRONT OPPORTUNITY DETAIL VIEW | Opportunity {} (ID: {})'.
            format(opportunity.title, opportunity.id))

        return render_template(
            'opportunities/front/detail.html',
            opportunity=opportunity,
            current_user=current_user,
            signup_form=signup_form,
        )
    abort(404)
Beispiel #5
0
def browse():
    '''Browse available opportunities

    :status 200: render the browse template page
    :status 302: subscribe to one or multiple opportunities via
        the :py:class:`~purchasing.opportunities.forms.OpportunitySignupForm`
    '''
    _open, upcoming = [], []

    signup_form = init_form(OpportunitySignupForm)
    if signup_form.validate_on_submit():
        opportunities = request.form.getlist('opportunity')
        if signup_for_opp(signup_form, opportunity=opportunities, multi=True):
            flash('Successfully subscribed for updates!', 'alert-success')
            return redirect(url_for('opportunities.browse'))

    opportunities = Opportunity.query.filter(
        Opportunity.planned_submission_end >= datetime.date.today()).all()

    for opportunity in opportunities:
        if opportunity.is_submission_start:
            _open.append(opportunity)
        elif opportunity.is_upcoming:
            upcoming.append(opportunity)

    current_app.logger.info('BEACON FRONT OPEN OPPORTUNITY VIEW')
    return render_template(
        'opportunities/browse.html',
        opportunities=opportunities,
        current_user=current_user,
        signup_form=signup_form,
        _open=sorted(_open, key=lambda i: i.planned_submission_end),
        upcoming=sorted(upcoming, key=lambda i: i.planned_submission_start),
        session_vendor=session.get('email'))
def browse():
    '''Browse available opportunities

    :status 200: render the browse template page
    :status 302: subscribe to one or multiple opportunities via
        the :py:class:`~purchasing.opportunities.forms.OpportunitySignupForm`
    '''
    _open, upcoming = [], []

    signup_form = init_form(OpportunitySignupForm)
    if signup_form.validate_on_submit():
        opportunities = request.form.getlist('opportunity')
        if signup_for_opp(
            signup_form, opportunity=opportunities, multi=True
        ):
            flash('Successfully subscribed for updates!', 'alert-success')
            return redirect(url_for('opportunities.browse'))

    opportunities = Opportunity.query.filter(
        Opportunity.planned_submission_end >= datetime.date.today()
    ).all()

    for opportunity in opportunities:
        if opportunity.is_submission_start:
            _open.append(opportunity)
        elif opportunity.is_upcoming:
            upcoming.append(opportunity)

    current_app.logger.info('BEACON FRONT OPEN OPPORTUNITY VIEW')
    return render_template(
        'opportunities/browse.html', opportunities=opportunities,
        current_user=current_user, signup_form=signup_form,
        _open=sorted(_open, key=lambda i: i.planned_submission_end),
        upcoming=sorted(upcoming, key=lambda i: i.planned_submission_start),
        session_vendor=session.get('email')
    )
def signup():
    '''The signup page for vendors

    :status 200: Render the
        :py:class:`~purchasing.opportunities.forms.SignupForm`
    :status 302: Process the signup form post, redirect
        the vendor back to the splash page
    '''
    session_vendor = Vendor.query.filter(
        Vendor.email == session.get('email'),
        Vendor.business_name == session.get('business_name')
    ).first()
    form = init_form(VendorSignupForm, model=session_vendor)

    if form.validate_on_submit():
        vendor = Vendor.query.filter(Vendor.email == form.data.get('email')).first()

        if vendor:
            current_app.logger.info(u'''
                OPPUPDATEVENDOR - Vendor updated:
                EMAIL: {old_email} -> {email} at
                BUSINESS: {old_bis} -> {bis_name} signed up for:
                CATEGORIES:
                    {old_cats} ->
                    {categories}'''.format(
                old_email=vendor.email, email=form.data['email'],
                old_bis=unicode(vendor.business_name),
                bis_name=unicode(form.data['business_name']),
                old_cats=[i.__unicode__() for i in vendor.categories],
                categories=[i.__unicode__() for i in form.data['categories']]
            ))

            vendor.update(
                **form.pop_categories(categories=False)
            )

            flash("You are already signed up! Your profile was updated with this new information", 'alert-info')

        else:
            current_app.logger.info(
                'OPPNEWVENDOR - New vendor signed up: EMAIL: {email} at BUSINESS: {bis_name} signed up for:\n' +
                'CATEGORIES: {categories}'.format(
                    email=form.data['email'],
                    bis_name=form.data['business_name'],
                    categories=[i.__unicode__() for i in form.data['categories']]
                )
            )

            vendor = Vendor.create(
                **form.pop_categories(categories=False)
            )

            confirmation_sent = Notification(
                to_email=vendor.email, subject='Thank you for signing up!',
                html_template='opportunities/emails/signup.html',
                txt_template='opportunities/emails/signup.txt',
                categories=form.data['categories']
            ).send()

            if confirmation_sent:
                admins = db.session.query(User.email).filter(
                    User.roles.any(Role.name.in_(['admin', 'superadmin']))
                ).all()

                Notification(
                    to_email=admins, subject='A new vendor has signed up on beacon',
                    categories=form.data['categories'],
                    vendor=form.data['email'], convert_args=True,
                    business_name=form.data['business_name']
                ).send()

                flash('Thank you for signing up! Check your email for more information', 'alert-success')

            else:
                flash('Uh oh, something went wrong. We are investigating.', 'alert-danger')

        session['email'] = form.data.get('email')
        session['business_name'] = form.data.get('business_name')
        return redirect(url_for('opportunities.splash'))

    page_email = request.args.get('email', None)

    if page_email:
        current_app.logger.info(
            'OPPSIGNUPVIEW - User clicked through to signup with email {}'.format(page_email)
        )
        session['email'] = page_email
        return redirect(url_for('opportunities.signup'))

    if 'email' in session:
        if not form.email.validate(form):
            session.pop('email', None)

    form.display_cleanup()

    return render_template(
        'opportunities/front/signup.html', form=form,
        categories=form.get_categories(),
        subcategories=form.get_subcategories()
    )
def manage():
    '''Manage a vendor's signups

    :status 200: render the
        :py:class:`~purchasing.opportunities.forms.UnsubscribeForm`
    :status 302: post the
        :py:class:`~purchasing.opportunities.forms.UnsubscribeForm`
        and change the user's email subscriptions and redirect them
        back to the management page.
    '''
    form = init_form(UnsubscribeForm)
    form_categories = []
    form_opportunities = []
    vendor = None

    if form.validate_on_submit():
        email = form.data.get('email')
        vendor = Vendor.query.filter(Vendor.email == email).first()

        if vendor is None:
            current_app.logger.info(
                'OPPMANAGEVIEW - Unsuccessful search for email {}'.format(email)
            )
            form.email.errors = ['We could not find the email {}'.format(email)]

        if request.form.get('button', '').lower() == 'update email preferences':
            remove_categories = set([Category.query.get(i) for i in form.categories.data])
            remove_opportunities = set([Opportunity.query.get(i) for i in form.opportunities.data])

            # remove none types if any
            remove_categories.discard(None)
            remove_opportunities.discard(None)

            vendor.categories = vendor.categories.difference(remove_categories)
            vendor.opportunities = vendor.opportunities.difference(remove_opportunities)
            if form.data.get('subscribed_to_newsletter'):
                vendor.subscribed_to_newsletter = False

            current_app.logger.info(
                u'''OPPMANAGEVIEW - Vendor {} unsubscribed from:
                Categories: {}
                Opportunities: {}
                Subscribed from newsletter: {}
                '''.format(
                    email,
                    u', '.join([i.category_friendly_name for i in remove_categories if remove_categories and len(remove_categories) > 0]),
                    u', '.join([i.description for i in remove_opportunities if remove_opportunities and len(remove_opportunities) > 0]),
                    vendor.subscribed_to_newsletter
                )
            )

            db.session.commit()
            flash('Preferences updated!', 'alert-success')

        if vendor:
            for subscription in vendor.categories:
                form_categories.append((subscription.id, subscription.category_friendly_name))
            for subscription in vendor.opportunities:
                form_opportunities.append((subscription.id, subscription.title))

    form = init_form(UnsubscribeForm)
    form.opportunities.choices = form_opportunities
    form.categories.choices = form_categories
    return render_template(
        'opportunities/front/manage.html', form=form,
        vendor=vendor if vendor else Vendor()
    )
def signup():
    """The signup page for vendors
    """
    session_vendor = Vendor.query.filter(
        Vendor.email == session.get("email"), Vendor.business_name == session.get("business_name")
    ).first()
    form = init_form(VendorSignupForm, model=session_vendor)

    if form.validate_on_submit():
        vendor = Vendor.query.filter(Vendor.email == form.data.get("email")).first()

        if vendor:
            current_app.logger.info(
                """
                OPPUPDATEVENDOR - Vendor updated:
                EMAIL: {old_email} -> {email} at
                BUSINESS: {old_bis} -> {bis_name} signed up for:
                CATEGORIES:
                    {old_cats} ->
                    {categories}""".format(
                    old_email=vendor.email,
                    email=form.data["email"],
                    old_bis=vendor.business_name,
                    bis_name=form.data["business_name"],
                    old_cats=[i.__unicode__() for i in vendor.categories],
                    categories=[i.__unicode__() for i in form.data["categories"]],
                )
            )

            vendor.update(**form.pop_categories(categories=False))

            flash("You are already signed up! Your profile was updated with this new information", "alert-info")

        else:
            current_app.logger.info(
                "OPPNEWVENDOR - New vendor signed up: EMAIL: {email} at BUSINESS: {bis_name} signed up for:\n"
                + "CATEGORIES: {categories}".format(
                    email=form.data["email"],
                    bis_name=form.data["business_name"],
                    categories=[i.__unicode__() for i in form.data["categories"]],
                )
            )

            vendor = Vendor.create(**form.pop_categories(categories=False))

            confirmation_sent = Notification(
                to_email=vendor.email,
                subject="Thank you for signing up!",
                html_template="opportunities/emails/signup.html",
                txt_template="opportunities/emails/signup.txt",
                categories=form.data["categories"],
            ).send()

            if confirmation_sent:
                admins = (
                    db.session.query(User.email)
                    .join(Role, User.role_id == Role.id)
                    .filter(Role.name.in_(["admin", "superadmin"]))
                    .all()
                )

                Notification(
                    to_email=admins,
                    subject="A new vendor has signed up on beacon",
                    categories=form.data["categories"],
                    vendor=form.data["email"],
                    convert_args=True,
                    business_name=form.data["business_name"],
                ).send()

                flash("Thank you for signing up! Check your email for more information", "alert-success")

            else:
                flash("Uh oh, something went wrong. We are investigating.", "alert-danger")

        session["email"] = form.data.get("email")
        session["business_name"] = form.data.get("business_name")
        return redirect(url_for("opportunities.splash"))

    page_email = request.args.get("email", None)

    if page_email:
        current_app.logger.info("OPPSIGNUPVIEW - User clicked through to signup with email {}".format(page_email))
        session["email"] = page_email
        return redirect(url_for("opportunities.signup"))

    if "email" in session:
        if not form.email.validate(form):
            session.pop("email", None)

    form.display_cleanup()

    return render_template(
        "opportunities/front/signup.html",
        form=form,
        categories=form.get_categories(),
        subcategories=form.get_subcategories(),
    )
def manage():
    """Manage a vendor's signups
    """
    form = init_form(UnsubscribeForm)
    form_categories = []
    form_opportunities = []
    vendor = None

    if form.validate_on_submit():
        email = form.data.get("email")
        vendor = Vendor.query.filter(Vendor.email == email).first()

        if vendor is None:
            current_app.logger.info("OPPMANAGEVIEW - Unsuccessful search for email {}".format(email))
            form.email.errors = ["We could not find the email {}".format(email)]

        if request.form.get("button", "").lower() == "update email preferences":
            remove_categories = set([Category.query.get(i) for i in form.categories.data])
            remove_opportunities = set([Opportunity.query.get(i) for i in form.opportunities.data])

            # remove none types if any
            remove_categories.discard(None)
            remove_opportunities.discard(None)

            vendor.categories = vendor.categories.difference(remove_categories)
            vendor.opportunities = vendor.opportunities.difference(remove_opportunities)
            if form.data.get("subscribed_to_newsletter"):
                vendor.subscribed_to_newsletter = False

            current_app.logger.info(
                """OPPMANAGEVIEW - Vendor {} unsubscribed from:
                Categories: {}
                Opportunities: {}
                Subscribed from newsletter: {}
                """.format(
                    email,
                    ", ".join(
                        [
                            i.category_friendly_name
                            for i in remove_categories
                            if remove_categories and len(remove_categories) > 0
                        ]
                    ),
                    ", ".join(
                        [
                            i.description
                            for i in remove_opportunities
                            if remove_opportunities and len(remove_opportunities) > 0
                        ]
                    ),
                    vendor.subscribed_to_newsletter,
                )
            )

            db.session.commit()
            flash("Preferences updated!", "alert-success")

        if vendor:
            for subscription in vendor.categories:
                form_categories.append((subscription.id, subscription.category_friendly_name))
            for subscription in vendor.opportunities:
                form_opportunities.append((subscription.id, subscription.title))

    form = init_form(UnsubscribeForm)
    form.opportunities.choices = form_opportunities
    form.categories.choices = form_categories
    return render_template("opportunities/front/manage.html", form=form, vendor=vendor if vendor else Vendor())
Beispiel #11
0
def manage():
    '''Manage a vendor's signups

    :status 200: render the
        :py:class:`~purchasing.opportunities.forms.UnsubscribeForm`
    :status 302: post the
        :py:class:`~purchasing.opportunities.forms.UnsubscribeForm`
        and change the user's email subscriptions and redirect them
        back to the management page.
    '''
    form = init_form(UnsubscribeForm)
    form_categories = []
    form_opportunities = []
    vendor = None

    if form.validate_on_submit():
        email = form.data.get('email')
        vendor = Vendor.query.filter(Vendor.email == email).first()

        if vendor is None:
            current_app.logger.info(
                'OPPMANAGEVIEW - Unsuccessful search for email {}'.format(
                    email))
            form.email.errors = [
                'We could not find the email {}'.format(email)
            ]

        if request.form.get('button',
                            '').lower() == 'update email preferences':
            remove_categories = set(
                [Category.query.get(i) for i in form.categories.data])
            remove_opportunities = set(
                [Opportunity.query.get(i) for i in form.opportunities.data])

            # remove none types if any
            remove_categories.discard(None)
            remove_opportunities.discard(None)

            vendor.categories = vendor.categories.difference(remove_categories)
            vendor.opportunities = vendor.opportunities.difference(
                remove_opportunities)
            if form.data.get('subscribed_to_newsletter'):
                vendor.subscribed_to_newsletter = False

            current_app.logger.info(
                u'''OPPMANAGEVIEW - Vendor {} unsubscribed from:
                Categories: {}
                Opportunities: {}
                Subscribed from newsletter: {}
                '''.format(
                    email, u', '.join([
                        i.category_friendly_name for i in remove_categories
                        if remove_categories and len(remove_categories) > 0
                    ]), u', '.join([
                        i.description for i in remove_opportunities if
                        remove_opportunities and len(remove_opportunities) > 0
                    ]), vendor.subscribed_to_newsletter))

            db.session.commit()
            flash('Preferences updated!', 'alert-success')

        if vendor:
            for subscription in vendor.categories:
                form_categories.append(
                    (subscription.id, subscription.category_friendly_name))
            for subscription in vendor.opportunities:
                form_opportunities.append(
                    (subscription.id, subscription.title))

    form = init_form(UnsubscribeForm)
    form.opportunities.choices = form_opportunities
    form.categories.choices = form_categories
    return render_template('opportunities/front/manage.html',
                           form=form,
                           vendor=vendor if vendor else Vendor())