Exemplo n.º 1
0
    InterfaceChangeMacForm, UserEditGroupMembership, UserSelectGroupForm, \
    UserResetPasswordForm, UserMoveInForm, UserEditBirthdateForm
from web.blueprints.access import BlueprintAccess
from web.blueprints.helpers.api import json_agg
from datetime import datetime, timedelta
from flask_login import current_user
from web.template_filters import datetime_filter
from ..helpers.log import format_user_log_entry, format_room_log_entry, \
    format_hades_log_entry
from .log import formatted_user_hades_logs
from .tables import LogTableExtended, LogTableSpecific, MembershipTable, HostTable
from ..finance.tables import FinanceTable, FinanceTableSplitted

bp = Blueprint('user', __name__)
access = BlueprintAccess(bp, required_properties=['user_show'])
nav = BlueprintNavigation(bp, "Nutzer", blueprint_access=access)


@bp.route('/')
@nav.navigate(u"Übersicht")
def overview():
    uquery = lambda: session.session.query(User)

    entries = [{"title": "Nutzer in Datenbank",
                "href": None,
                "number": uquery().count()},
               {"title": "Mitglieder",
                "href": None,
                "number": uquery().join(Membership).filter(
                                Membership.group == config.member_group,
                                Membership.active())
Exemplo n.º 2
0
from web.blueprints.navigation import BlueprintNavigation
from web.template_filters import date_filter, money_filter, datetime_filter
from web.template_tests import privilege_check
from web.templates import page_resources
from web.blueprints.helpers.api import json_agg_core

from sqlalchemy.sql.expression import literal_column, func, select, Join

from fints.dialog import FinTSDialogError
from fints.exceptions import FinTSClientPINError
from fints.utils import mt940_to_array
from datetime import date

bp = Blueprint('finance', __name__)
access = BlueprintAccess(bp, required_properties=['finance_show'])
nav = BlueprintNavigation(bp, "Finanzen", blueprint_access=access)


@bp.route('/')
@bp.route('/bank-accounts')
@bp.route('/bank-accounts/list')
@nav.navigate(u"Bankkonten")
def bank_accounts_list():
    bank_account_table = BankAccountTable(
        data_url=url_for('.bank_accounts_list_json'),
        create_account=privilege_check(current_user, 'finance_change'))

    bank_account_activity_table = BankAccountActivityTable(
        data_url=url_for('.bank_accounts_activities_json'))

    return render_template(
Exemplo n.º 3
0
from flask import Blueprint, flash, redirect, render_template, url_for
from web.blueprints.navigation import BlueprintNavigation
from web.blueprints.properties.forms import PropertyGroupForm, TrafficGroupForm
from pycroft.model.property import PropertyGroup, TrafficGroup, \
    property_categories
from pycroft.lib.property import delete_property, delete_property_group, \
    delete_traffic_group, create_property, create_property_group, \
    create_traffic_group
from web.blueprints.access import BlueprintAccess

bp = Blueprint(
    'properties',
    __name__,
)
access = BlueprintAccess(bp, ['groups_traffic_show', 'groups_show'])
nav = BlueprintNavigation(bp, "Eigenschaften", blueprint_access=access)


@bp.route('/traffic_groups')
@nav.navigate(u"Trafficgruppen")
@access.require('groups_traffic_show')
def traffic_groups():
    traffic_groups_list = TrafficGroup.q.all()
    return render_template('properties/traffic_groups_list.html',
                           traffic_groups=traffic_groups_list)


@bp.route('/traffic_group/create', methods=['GET', 'POST'])
@access.require('groups_traffic_change')
def traffic_group_create():
    form = TrafficGroupForm()
Exemplo n.º 4
0
from pycroft import lib, config
from pycroft.helpers import facilities
from pycroft.model import session
from pycroft.model.facilities import Room, Site
from pycroft.model.property import CurrentProperty
from pycroft.model.user import User
from web.blueprints.access import BlueprintAccess
from web.blueprints.facilities.forms import (
    RoomForm, BuildingForm, RoomLogEntry)
from web.blueprints.helpers.user import user_button
from web.blueprints.navigation import BlueprintNavigation
from web.template_filters import datetime_filter

bp = Blueprint('facilities', __name__)
access = BlueprintAccess(bp, required_properties=['facilities_show'])
nav = BlueprintNavigation(bp, "Wohnheime", blueprint_access=access)

@bp.route('/')
def root():
    return redirect(url_for(".overview"))

@nav.navigate(u"Wohnheime")
@bp.route('/sites/')
def overview():
    return render_template('facilities/site_overview.html')

@bp.route('/sites/json')
def overview_json():
    return jsonify(items=[{
            'site': {
                'title': site.name,
Exemplo n.º 5
0
from pycroft.lib.membership import grant_property, deny_property, \
    remove_property, edit_property_group, delete_property_group, \
    known_properties
from pycroft.model import session
from pycroft.model.user import PropertyGroup
from pycroft.property import property_categories
from web.blueprints.access import BlueprintAccess
from web.blueprints.navigation import BlueprintNavigation
from web.blueprints.properties.forms import PropertyGroupForm

bp = Blueprint('properties', __name__)
access = BlueprintAccess(bp, required_properties=['groups_show'])
nav = BlueprintNavigation(bp,
                          "",
                          icon='fa-cogs',
                          push_right=True,
                          blueprint_access=access)


@bp.route('/property_groups')
@nav.navigate("Gruppen")
def property_groups():
    property_groups_list = PropertyGroup.q.all()
    categories = property_categories
    properties_with_description = set(
        chain(*(category.keys() for category in categories.values())))
    categories["Ohne Beschreibung"] = {
        p: p
        for p in known_properties() if p not in properties_with_description
    }
Exemplo n.º 6
0
from pycroft.model.facilities import Room
from web.blueprints.infrastructure.forms import SwitchForm, SwitchPortForm

from pycroft.helpers import net
from pycroft.model import session
from pycroft.model.host import Switch, SwitchPort
from pycroft.model.net import VLAN, Subnet
from pycroft.model.port import PatchPort
from pycroft.lib.net import get_subnets_with_usage
from web.blueprints.navigation import BlueprintNavigation
from web.blueprints.access import BlueprintAccess
from .tables import SubnetTable, SwitchTable, VlanTable, PortTable

bp = Blueprint('infrastructure', __name__)
access = BlueprintAccess(bp, required_properties=['infrastructure_show'])
nav = BlueprintNavigation(bp, "Infrastruktur", blueprint_access=access)


@bp.route('/subnets')
@nav.navigate(u"Subnetze")
def subnets():
    return render_template(
        'infrastructure/subnets_list.html',
        subnet_table=SubnetTable(data_url=url_for(".subnets_json")))


def format_address_range(base_address, amount):
    if amount == 0:
        raise ValueError
    elif abs(amount) == 1:
        return str(base_address)
Exemplo n.º 7
0
    patch_switch_port_to_patch_port, PatchPortAlreadyPatchedException, \
    edit_switch_port, remove_patch_to_patch_port, delete_switch_port
from pycroft.lib.net import get_subnets_with_usage
from pycroft.model import session
from pycroft.model.facilities import Room
from pycroft.model.host import Switch, SwitchPort
from pycroft.model.net import VLAN
from pycroft.model.port import PatchPort
from web.blueprints.access import BlueprintAccess
from web.blueprints.infrastructure.forms import SwitchForm, SwitchPortForm
from web.blueprints.navigation import BlueprintNavigation
from .tables import SubnetTable, SwitchTable, VlanTable, PortTable

bp = Blueprint('infrastructure', __name__)
access = BlueprintAccess(bp, required_properties=['infrastructure_show'])
nav = BlueprintNavigation(bp, "Infrastruktur", icon='fa-network-wired', blueprint_access=access)


@bp.route('/subnets')
@nav.navigate("Subnetze")
def subnets():
    return render_template(
        'infrastructure/subnets_list.html',
        subnet_table=SubnetTable(data_url=url_for(".subnets_json")))


def format_address_range(base_address, amount):
    if amount == 0:
        raise ValueError
    if abs(amount) == 1:
        return str(base_address)
Exemplo n.º 8
0
from pycroft.model import session
from pycroft.model.facilities import Building
from pycroft.model.task import Task, TaskStatus
from web.blueprints import redirect_or_404
from web.blueprints.access import BlueprintAccess
from web.blueprints.helpers.user import get_user_or_404
from web.blueprints.navigation import BlueprintNavigation
from web.blueprints.task.forms import RescheduleTaskForm
from web.blueprints.task.tables import TaskTable
from web.table.table import datetime_format
from web.template_filters import datetime_filter

bp = Blueprint('task', __name__)
access = BlueprintAccess(bp, required_properties=['user_show'])
nav = BlueprintNavigation(bp,
                          "Tasks",
                          icon='fa-tasks',
                          blueprint_access=access)


def format_parameters(parameters):
    """Make task parameters human readable by looking up objects behind ids"""

    # Replace building_id by the buildings short name
    if bid := parameters.get("building_id"):
        if building := Building.get(bid):
            parameters["building"] = building.short_name
            del parameters["building_id"]
    return parameters


def task_row(task: Task):
Exemplo n.º 9
0
from pycroft.model.host_alias import HostAlias, CNameRecord
from web.blueprints.navigation import BlueprintNavigation
from web.blueprints.infrastructure.forms import SwitchPortForm
from web.blueprints.infrastructure.forms import CNameRecordEditForm
from web.blueprints.infrastructure.forms import CNameRecordCreateForm
from web.blueprints.infrastructure.forms import RecordCreateForm
from web.blueprints.infrastructure.forms import arecords_query

from pycroft.lib.host_alias import delete_alias, change_alias, create_cnamerecord
from pycroft.lib.infrastructure import create_switch_port

bp = Blueprint(
    'infrastructure',
    __name__,
)
nav = BlueprintNavigation(bp, "Infrastruktur")


@bp.route('/subnets')
@nav.navigate(u"Subnetze")
def subnets():
    subnets_list = Subnet.q.all()
    return render_template('infrastructure/subnets_list.html',
                           subnets=subnets_list)


@bp.route('/switches')
@nav.navigate(u"Switche")
def switches():
    switches_list = Switch.q.all()
    return render_template('infrastructure/switches_list.html',
Exemplo n.º 10
0
from pycroft.model import session

from pycroft.lib.task import cancel_task, task_type_to_impl
from pycroft.model.facilities import Building
from pycroft.model.task import Task, TaskStatus

from web.blueprints.access import BlueprintAccess
from bs_table_py.table import datetime_format
from web.blueprints.helpers.user import get_user_or_404
from web.blueprints.navigation import BlueprintNavigation
from web.blueprints.task.tables import TaskTable
from web.template_filters import datetime_filter

bp = Blueprint('task', __name__)
access = BlueprintAccess(bp, required_properties=['user_show'])
nav = BlueprintNavigation(bp, "Tasks", blueprint_access=access)


def format_parameters(parameters):
    """
    Makes parameters human readable
    """

    # Replace building_id by the buildings short name
    if parameters.get("building_id"):
        building = Building.q.get(parameters["building_id"])

        if building:
            parameters["building"] = building.short_name
            del parameters["building_id"]
Exemplo n.º 11
0
from web.blueprints.finance.tables import FinanceTable, FinanceTableSplitted, \
    MembershipFeeTable, UsersDueTable, BankAccountTable, \
    BankAccountActivityTable, TransactionTable, ImportErrorTable, \
    UnconfirmedTransactionsTable
from web.blueprints.helpers.api import json_agg_core
from web.blueprints.helpers.exception import handle_errors
from web.blueprints.helpers.fints import FinTS3Client
from web.blueprints.navigation import BlueprintNavigation
from web.table.table import date_format
from web.template_filters import date_filter, money_filter, datetime_filter
from web.template_tests import privilege_check

bp = Blueprint('finance', __name__)
access = BlueprintAccess(bp, required_properties=['finance_show'])
nav = BlueprintNavigation(bp,
                          "Finanzen",
                          icon='fa-euro-sign',
                          blueprint_access=access)


@bp.route('/')
@bp.route('/bank-accounts')
@bp.route('/bank-accounts/list')
@nav.navigate("Bankkonten", icon='fa-university')
def bank_accounts_list():
    bank_account_table = BankAccountTable(
        data_url=url_for('.bank_accounts_list_json'),
        create_account=privilege_check(current_user, 'finance_change'))

    bank_account_activity_table = BankAccountActivityTable(
        data_url=url_for('.bank_accounts_activities_json'))
Exemplo n.º 12
0
from flask import Blueprint, flash, jsonify, redirect, render_template, url_for, abort
from flask_login import current_user
from flask_wtf import FlaskForm

from pycroft.model import session
from pycroft.property import property_categories
from pycroft.model.user import Property, PropertyGroup
from pycroft.lib.membership import grant_property, deny_property, \
    remove_property, edit_property_group, delete_property_group
from web.blueprints.access import BlueprintAccess
from web.blueprints.navigation import BlueprintNavigation
from web.blueprints.properties.forms import PropertyGroupForm

bp = Blueprint('properties', __name__)
access = BlueprintAccess(bp, required_properties=['groups_show'])
nav = BlueprintNavigation(bp, "Einstellungen", blueprint_access=access)


@bp.route('/property_groups')
@nav.navigate(u"Gruppen")
def property_groups():
    property_groups_list = PropertyGroup.q.all()
    categories = property_categories
    properties_with_description = set(chain(*(
        category.keys() for category in categories.values()
    )))
    properties = set(property_name[0] for property_name
                     in Property.q.distinct().values(Property.name))
    categories[u"Ohne Beschreibung"] = {
        p: p for p in properties if p not in properties_with_description
    }
Exemplo n.º 13
0
from pycroft.model.property import CurrentProperty
from pycroft.model.user import User
from web.blueprints.access import BlueprintAccess
from web.blueprints.facilities.forms import (RoomLogEntry, PatchPortForm,
                                             CreateRoomForm, EditRoomForm)
from web.blueprints.helpers.log import format_room_log_entry
from web.blueprints.helpers.user import user_button
from web.blueprints.navigation import BlueprintNavigation
from .address import get_address_entity, address_entity_search_query
from .tables import (BuildingLevelRoomTable, RoomLogTable, SiteTable,
                     RoomOvercrowdedTable, PatchPortTable)

bp = Blueprint('facilities', __name__)
access = BlueprintAccess(bp, required_properties=['facilities_show'])
nav = BlueprintNavigation(bp,
                          "Wohnheime",
                          icon='fa-building',
                          blueprint_access=access)


@bp.route('/')
def root():
    return redirect(url_for(".overview"))


@nav.navigate("Wohnheime", icon='fa-building')
@bp.route('/sites/')
def overview():
    return render_template(
        'facilities/site_overview.html',
        site_table=SiteTable(data_url=url_for('.overview_json')),
    )