Example #1
0
def user_show_groups_json(user_id, group_filter="all"):
    memberships = Membership.q.filter(Membership.user_id == user_id)
    if group_filter == "active":
        memberships = memberships.filter(
            # it is important to use == here, "is" does NOT work
            or_(Membership.begins_at == None,
                Membership.begins_at <= session.utcnow())
        ).filter(
            # it is important to use == here, "is" does NOT work
            or_(Membership.ends_at == None,
                Membership.ends_at > session.utcnow())
        )

    return jsonify(items=[{
            'group_name': membership.group.name,
            'begins_at': (datetime_filter(membership.begins_at)
                          if membership.begins_at is not None else ''),
            'ends_at': (datetime_filter(membership.ends_at)
                        if membership.ends_at is not None else ''),
            'actions': [{'href': url_for(".edit_membership",
                                        user_id=user_id,
                                        membership_id=membership.id),
                        'title': 'Bearbeiten',
                        'icon': 'glyphicon-edit'},
                        {'href': url_for(".end_membership",
                                         user_id=user_id,
                                         membership_id=membership.id),
                         'title': "Beenden",
                         'icon': 'glyphicon-off'} if membership.active() else {}],
        } for membership in memberships.all()])
Example #2
0
def _format_row(split, style, prefix=None):
    row = {
        'posted_at': datetime_filter(split.transaction.posted_at),
        # 'posted_by': (split.transaction.author.id, split.transaction.author.name),
        'valid_on': date_filter(split.transaction.valid_on),
        'description': {
            'href':
            url_for("finance.transactions_show",
                    transaction_id=split.transaction_id),
            'title':
            localized(split.transaction.description)
            if split.transaction.description else 'Keine Beschreibung',
            **({
                'empty': True
            } if not split.transaction.description else {}),
        },
        'amount': {
            'value':
            money_filter(-split.amount) if
            (style == "inverted") else money_filter(split.amount),
            'is_positive': (split.amount > 0) ^ (style == "inverted"),
        },
        'row_positive': (split.amount > 0) ^ (style == "inverted"),
    }
    if prefix is None:
        return row
    return {'{}_{}'.format(prefix, key): val for key, val in row.items()}
Example #3
0
def _format_row(split, style, prefix=None):
    T = FinanceTable
    row = {
        'posted_at':
        datetime_filter(split.transaction.posted_at),
        # 'posted_by': (split.transaction.author.id, split.transaction.author.name),
        'valid_on':
        date_filter(split.transaction.valid_on),
        'description':
        T.description.value(
            href=url_for("finance.transactions_show",
                         transaction_id=split.transaction_id),
            title=localized(split.transaction.description)
            if split.transaction.description else 'Keine Beschreibung'),
        'amount':
        T.amount.value(
            value=money_filter(-split.amount) if
            (style == "inverted") else money_filter(split.amount),
            is_positive=(split.amount > 0) ^ (style == "inverted"),
        ),
        'row_positive': (split.amount > 0) ^ (style == "inverted"),
    }
    if prefix is None:
        return row
    return {f'{prefix}_{key}': val for key, val in row.items()}
Example #4
0
def room_logs_json(room_id):
    return jsonify(items=[{
            'created_at': datetime_filter(entry.created_at),
            'user': {
                'title': entry.author.name,
                'href': url_for("user.user_show", user_id=entry.author.id)
            },
            'message': entry.message
        } for entry in reversed(Room.q.get(room_id).log_entries)])
Example #5
0
def datetime_format(dt, default=None):
    """
    Format datetime objects for `table.dateFormatter`.
    :param datetime|None dt: a datetime object or None
    :param str|None default: formatted value to use if `dt` is None
    :return:
    """
    if dt is not None:
        return {
            'formatted': datetime_filter(dt),
            'timestamp': int(dt.timestamp()),
        }
    else:
        return {
            'formatted':
            default if default is not None else datetime_filter(None),
            'timestamp': None,
        }
Example #6
0
File: log.py Project: agdsn/pycroft
def format_custom_hades_message(message):
    date = datetime.now(tz=timezone.utc)
    return {
        'created_at': datetime_filter(date),
        'raw_created_at': date,
        'user': {
            'type': 'plain',
            'title': "Radius",
        },
        'message': message,
        'type': 'hades'
    }
Example #7
0
File: log.py Project: agdsn/pycroft
def format_log_entry(entry, log_type):
    """Format a logentry in correct json

    :param LogEntry entry:
    :param log_type: The logtype to include, currently ``'user'`` or
        ``'room'``.
    """
    return {
        'created_at': datetime_filter(entry.created_at),
        'raw_created_at': entry.created_at,
        'user': {
            'type': 'native',  # parses it as a link
            'title': entry.author.name,
            'href': url_for("user.user_show", user_id=entry.author.id)
        },
        'message': Message.from_json(entry.message).localize(),
        'type': log_type
    }
Example #8
0
def _format_row(split, style, prefix=None):
    row = {
        'posted_at': datetime_filter(split.transaction.posted_at),
        #'posted_by': (split.transaction.author.id, split.transaction.author.name),
        'valid_on': date_filter(split.transaction.valid_on),
        'description': {
            'href': url_for(
                "finance.transactions_show",
                transaction_id=split.transaction_id
                ),
            'title': localized(split.transaction.description)
        },
        'amount': {
            'value': money_filter(-split.amount) if (style == "inverted") else money_filter(split.amount),
            'is_positive': (split.amount > 0) ^ (style == "inverted"),
        },
        'row_positive': (split.amount > 0) ^ (style == "inverted"),
    }
    if prefix is None:
        return row
    return {'{}_{}'.format(prefix, key): val for key, val in row.items()}
Example #9
0
File: log.py Project: agdsn/pycroft
def format_hades_log_entry(interface, entry):
    """Turn Radius Log entry information into a canonical form

    This utilizes :py:func:`radius_description` but returns a dict in
    a format conforming with other log sources' output (consider user
    and room logs)

    :param interface: See :py:func:`radius_description`.
    :param entry: See :py:func:`radius_description`.
    """
    date = entry.time
    desc = radius_description(interface, entry)
    return {
        'created_at': datetime_filter(date),
        'raw_created_at': date,
        'user': {
            'type': 'plain',  # (w/o link) vs. 'native' (w/ link)
            'title': "Radius",  # or switch name?
        },
        'message': desc,
        'type': 'hades'
    }