def itemAddOrUpdate(request, item_id=None):
    """Adds an item if not present, otherwise updates with values from request
    instance.

    Arg:
        request: request instance from user interaction on page
        item_id: If present, the record for this id will be updated.

    Returns:
        If item is added/updated, redirects to parent category.
        If item add/update fails, page reloads with error message.
        If informatin is missing, page reloads with error message.
    """
    name, category_id, description = itemAdminFields(request)
    user = getUser()
    if name and description and category_id and user:
        item = Item.add_or_update(name, description, category_id, user.user_id,
                                  item_id)
        if item:
            msg = 'New Item Successfully Updated'
            flash(msg)
            return redirect('/category/' + category_id)
        else:
            msg = 'An Error Occurred, Item did not update or add'
            flash(msg)
            # Reload page with their values
            return render_template('item_admin.html',
                                   name=name,
                                   category_id=category_id,
                                   description=description,
                                   user_curr=getUser())
    else:
        msg = 'Please provide a value in all fields'
        flash(msg)
        return render_template('item_admin.html', user_curr=getUser())