def change_email_or_password(user_id):
    user = models.User.query.get_or_404(user_id)
    current_user = flask_login.current_user

    if current_user.id != user.id and not current_user.is_admin:
        flask.flash("Du får bara redigera din egen profil! ಠ_ಠ", 'error')
        return flask.redirect(flask.url_for('.show_profile', user_id=user_id))

    form = forms.ChangeEmailOrPasswordForm(obj=user, user=user)

    if form.validate_on_submit():
        if form.email.data != user.email:
            auth.verify_email(user, form.email.data)
            flask.flash(("En länk för att verifiera e-postadressen har "
                         "skickats till {}.").format(form.email.data), 'info')

        if form.new_password.data:
            user.password = form.new_password.data
            flask.flash("Lösenordet har ändrats!", 'success')

        models.db.session.commit()

        return flask.redirect(flask.url_for('strequelistan.show_profile',
                                            user_id=user.id))
    elif form.is_submitted():
        forms.flash_errors(form)

    return flask.render_template('change_email_or_password.html',
                                 form=form, user=user)
def change_profile_picture(user_id):
    user = models.User.query.get_or_404(user_id)
    current_user = flask_login.current_user

    if current_user.id != user.id and not current_user.is_admin:
        flask.flash("Du får bara redigera din egen profil! ಠ_ಠ", 'error')
        return flask.redirect(flask.url_for('.show_profile', user_id=user_id))

    form = forms.ChangeProfilePictureFormFactory(user)

    if form.validate_on_submit():
        # The "none" choice seems to work. Not sure why.
        user.profile_picture_id = form.profile_picture.data
        models.db.session.commit()

        flask.flash("Din profilbild har ändrats!", 'success')

        return flask.redirect(flask.url_for('strequelistan.edit_profile',
                                            user_id=user.id))

    elif form.is_submitted():
        forms.flash_errors(form)

    return flask.render_template('change_profile_picture.html', form=form,
                                 user=user)
def upload_profile_picture(user_id):
    user = models.User.query.get_or_404(user_id)
    current_user = flask_login.current_user

    if current_user.id != user.id and not current_user.is_admin:
        flask.flash("Du får bara redigera din egen profil! ಠ_ಠ", 'error')
        return flask.redirect(flask.url_for('.show_profile', user_id=user_id))

    form = forms.UploadProfilePictureForm()

    if form.validate_on_submit():
        if form.upload.data:
            filename = util.image_uploads.save(form.upload.data)
            profile_picture = models.ProfilePicture(filename=filename,
                                                    user_id=user.id)
            models.db.session.add(profile_picture)
            models.db.session.commit()

            flask.flash("Din nya profilbild har laddats upp!", 'success')

        return flask.redirect(
            flask.url_for('strequelistan.change_profile_picture',
                          user_id=user.id)
        )

    elif form.is_submitted():
        forms.flash_errors(form)

    return flask.render_template('upload_profile_picture.html', form=form,
                                 user=user)
Exemple #4
0
def show_profile(user_id):
    user = models.User.query.get_or_404(user_id)

    transactions = (user.transactions
                    .filter(models.Streque.voided.is_(False))
                    .order_by(models.Transaction.timestamp.desc())
                    .limit(10))

    profile_picture_form = forms.UploadProfilePictureForm()

    if profile_picture_form.validate_on_submit():
        if profile_picture_form.upload.data:
            filename = util.image_uploads.save(
                profile_picture_form.upload.data
            )
            profile_picture = models.ProfilePicture(
                filename=filename,
                user_id=user.id
            )

            user.profile_picture = profile_picture

            models.db.session.add(profile_picture)
            models.db.session.commit()

            flask.flash("Profilbilden har ändrats!", 'success')

    elif profile_picture_form.is_submitted():
        forms.flash_errors(profile_picture_form)

    return flask.render_template('show_profile.html',
                                 user=user,
                                 transactions=transactions,
                                 profile_picture_form=profile_picture_form)
Exemple #5
0
def edit_article(article_id=None):
    if article_id:
        article = models.Article.query.get_or_404(article_id)
        form = forms.EditArticleForm(obj=article)
        if not form.is_submitted():
            form.value.data = form.value.data / 100
    else:
        article = None
        form = forms.EditArticleForm()

    if form.validate_on_submit():
        if not article:
            article = models.Article()

        article.name = form.name.data
        article.value = int(form.value.data * 100)
        article.description = form.description.data
        article.weight = form.weight.data
        article.standardglas = form.standardglas.data

        if not article_id:
            models.db.session.add(article)

        models.db.session.commit()

        flask.flash("Produkt \"{}\" skapad.".format(article.name), 'success')

        return flask.redirect(flask.url_for('strequeadmin.articles'))

    elif form.is_submitted():
        forms.flash_errors(form)

    return flask.render_template('admin/edit_article.html', form=form,
                                 article=article)
Exemple #6
0
def bulk_transactions():
    form = forms.BulkTransactionFormFactory(active=False)

    if form.validate_on_submit():
        transactions = []

        for form_field in form:
            if form_field.name == 'csrf_token':
                continue

            if form_field.value.data != 0:
                user = models.User.query.get(form_field.user_id.data)
                if user:
                    transactions.append(
                        {'user_id': user.id,
                         'user_name': user.full_name,
                         'value': int(form_field.value.data*100),
                         'text': form_field.text.data}
                    )

            flask.session[form.csrf_token.data] = transactions

        if transactions:
            return flask.render_template(
                'admin/confirm_bulk_transactions.html',
                transactions=transactions,
                token=form.csrf_token.data)
        else:
            flask.flash("Inga transaktioner utförda. "
                        "Väl spenderade klockcykler, bra jobbat!", 'success')

    elif form.is_submitted():
        forms.flash_errors(form)

    return flask.render_template('admin/bulk_transactions.html', form=form)
Exemple #7
0
def add_quote():
    form = forms.QuoteForm()
    if form.validate_on_submit():
        quote = models.Quote(text=form.text.data, who=form.who.data)
        models.db.session.add(quote)
        models.db.session.commit()
        flask.flash('Citat tillagt!', 'success')
        return flask.redirect(flask.url_for('.index'))
    else:
        forms.flash_errors(form)

    return flask.render_template('add_quote.html', form=form)
def edit_profile(user_id):
    user = models.User.query.get_or_404(user_id)
    current_user = flask_login.current_user

    if current_user.id != user.id and not current_user.is_admin:
        flask.flash("Du får bara redigera din egen profil! ಠ_ಠ", 'error')
        return flask.redirect(flask.url_for('.show_profile', user_id=user_id))

    if current_user.is_admin:
        form = forms.FullEditUserForm(obj=user)
        form.group_id.choices = [(g.id, g.name) for g in models.Group.query]
        form.group_id.choices.insert(0, (-1, 'Ingen'))
    else:
        form = forms.EditUserForm(obj=user)

    if form.validate_on_submit():
        if isinstance(form, forms.FullEditUserForm):
            user.first_name = form.first_name.data
            user.last_name = form.last_name.data
            user.active = form.active.data
            user.group_id = form.group_id.data if (form.group_id.data
                                                   != -1) else None

        user.nickname = form.nickname.data
        user.phone = form.phone.data
        user.body_mass = form.body_mass.data

        y_chromosome = form.y_chromosome.data
        if y_chromosome == 'yes':
            user.y_chromosome = True
        elif y_chromosome == 'no':
            user.y_chromosome = False
        else:
            user.y_chromosome = None

        models.db.session.commit()

        flask.flash("Ändringarna har sparats!", 'success')
        return flask.redirect(flask.url_for('strequelistan.show_profile',
                                            user_id=user.id))
    elif form.is_submitted():
        forms.flash_errors(form)

    else:
        if user.y_chromosome is True:
            form.y_chromosome.data = 'yes'
        elif user.y_chromosome is False:
            form.y_chromosome.data = 'no'
        else:
            form.y_chromosome.data = 'n/a'

    return flask.render_template('edit_profile.html', form=form, user=user)
Exemple #9
0
def add_user(request_id=None):
    request = (models.RegistrationRequest.query.get_or_404(request_id)
               if request_id else None)

    form = forms.AddUserForm(obj=request, group_id=-1)

    form.group_id.choices = [(g.id, g.name) for g in models.Group.query]
    form.group_id.choices.insert(0, (-1, 'Ingen'))

    if form.validate_on_submit():
        user = models.User(
            first_name=form.first_name.data,
            last_name=form.last_name.data,
            nickname=form.nickname.data,
            email=form.email.data,
            phone=form.phone.data,
            active=form.active.data,
            group_id=form.group_id.data if form.group_id.data != -1 else None,
        )

        models.db.session.add(user)
        models.db.session.commit()

        if request:
            models.db.session.delete(request)
            models.db.session.commit()
            flask.flash("{} skapad och förfrågan borttagen!".format(user),
                        'success')
            return flask.redirect(flask.url_for('strequeadmin.requests'))

        else:
            flask.flash("{} skapad!".format(user), 'success')
            # Redirect to clear form
            return flask.redirect(flask.url_for('strequeadmin.add_user'))

    elif form.is_submitted():
        forms.flash_errors(form)

    return flask.render_template('admin/add_user.html',
                                 form=form,
                                 is_request=bool(request_id))
Exemple #10
0
def transactions():
    form = forms.DateRangeForm()

    if form.validate_on_submit():
        from_date = form.start.data
        to_date = form.end.data

        return flask.redirect(
            flask.url_for('strequeadmin.transactions',
                          from_date=from_date,
                          to_date=to_date))
    elif form.is_submitted():
        forms.flash_errors(form)

    from_date = flask.request.args.get('from_date', None)
    to_date = flask.request.args.get('to_date', None)

    if from_date and to_date:
        try:
            from_date = datetime.date.fromisoformat(from_date)
            to_date = datetime.date.fromisoformat(to_date)
        except ValueError:
            flask.flash("Ogiltigt datumintervall!", 'error')
            from_date, to_date = None, None

    if not (from_date and to_date):
        to_date = datetime.date.today()
        from_date = to_date - datetime.timedelta(days=30)

    form.start.data = from_date
    form.end.data = to_date

    transactions = models.Transaction.query.filter(
        sqla.func.DATE(models.Transaction.timestamp) >= from_date,
        sqla.func.DATE(models.Transaction.timestamp) <= to_date,
    ).order_by(models.Transaction.timestamp.desc())

    return flask.render_template('admin/transactions.html',
                                 transactions=transactions,
                                 form=form)