Example #1
0
def doDatabaseWrite(categories, previous_category, user_data, item=None):
    """
    Método utilitário que checa se os campos do formulário estão preenchidos
    antes de salvar o item no banco de dados. Em caso de erro, retorna os
    redirects e erros correspondente à ação sendo executada (criação ou edição)

    Também checa se um item já existe na categoria informada com o mesmo nome.
    """
    if item:
        form_name = "edititem.html"
        message = "Item edited"
        isInsert = False
    else:
        item = Items(title=None,
                     description=None,
                     category_id=None,
                     user_id=login_session["user_id"])
        form_name = "newitem.html"
        message = "New item created"
        isInsert = True

    if user_data["title"] \
            and user_data["description"] \
            and user_data["category_id"]:
        item.title = user_data["title"]
        item.description = user_data["description"]
        item.category_id = user_data["category_id"]

        try:
            session.add(item)
            session.commit()
            flash(message)

            category_name = session.query(Categories) \
                .filter_by(id=user_data["category_id"]) \
                .first().name

            if isInsert:
                return redirect(url_for("showAllItems",
                                        category_name=category_name))
            else:
                return redirect(url_for("showItem",
                                category_name=category_name,
                                item_name=user_data["title"]))
        except IntegrityError:
            session.rollback()
            flash("Item '%s' already exists in selected category." %
                  user_data["title"])
            return render_template(form_name,
                                   categories=categories,
                                   item=user_data,
                                   previous_category=previous_category,
                                   previous_item=item.title)
    else:
        flash("There is missing data")
        return render_template(form_name,
                               categories=categories,
                               item=user_data,
                               previous_category=previous_category,
                               previous_item=item.title)