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())
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(
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()
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,
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 }
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)
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)
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):
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',
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"]
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'))
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 }
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')), )