def host_delete(host_id): host = Host.q.get(host_id) if host is None: flash(u"Host existiert nicht.", 'error') abort(404) form = FlaskForm() owner = host.owner if form.is_submitted(): _, success = web_execute(lib_host.host_delete, "Host erfolgreich gelöscht.", host, current_user) if success: session.session.commit() return redirect( url_for('user.user_show', user_id=owner.id, _anchor='hosts')) form_args = { 'form': form, 'cancel_to': url_for('user.user_show', user_id=owner.id), 'submit_text': 'Löschen', 'actions_offset': 0 } return render_template('generic_form.html', page_title="Host löschen", form_args=form_args, form=form)
def interface_edit(interface_id): interface = Interface.q.get(interface_id) if interface is None: flash(u"Interface existiert nicht.", 'error') abort(404) subnets = get_subnets_for_room(interface.host.room) current_ips = list(ip.address for ip in interface.ips) form = InterfaceForm(obj=interface) unused_ips = [ip for ips in get_unused_ips(subnets).values() for ip in ips] form.ips.choices = [(str(ip), str(ip)) for ip in current_ips + unused_ips] unique_mac_error = None if not form.is_submitted(): form.ips.process_data(ip for ip in current_ips) else: if form.mac.data != interface.mac: unique_mac_error = validate_unique_mac(form, form.mac) if unique_mac_error: form.validate() form.mac.errors.append(unique_mac_error) if not unique_mac_error and form.validate_on_submit(): ips = set([IPv4Address(ip) for ip in form.ips.data]) _, success = web_execute(lib_host.interface_edit, "Interface erfolgreich bearbeitet.", interface, form.name.data, form.mac.data, ips, current_user) if success: session.session.commit() return redirect( url_for('user.user_show', user_id=interface.host.owner_id, _anchor='hosts')) form_args = { 'form': form, 'cancel_to': url_for('user.user_show', user_id=interface.host.owner_id) } return render_template('generic_form.html', page_title="Interface editieren", form_args=form_args)
def interface_create(host_id): host = Host.q.get(host_id) if host is None: flash(u"Host existiert nicht.", 'error') abort(404) subnets = get_subnets_for_room(host.room) form = InterfaceForm() unused_ips = [ip for ips in get_unused_ips(subnets).values() for ip in ips] form.ips.choices = [(str(ip), str(ip)) for ip in unused_ips] unique_mac_error = None if not form.is_submitted(): form.ips.process_data([next(iter(unused_ips), None)]) else: unique_mac_error = validate_unique_mac(form, form.mac) if unique_mac_error: form.validate() form.mac.errors.append(unique_mac_error) if not unique_mac_error and form.validate_on_submit(): ips = set([IPv4Address(ip) for ip in form.ips.data]) _, success = web_execute(lib_host.interface_create, "Interface erfolgreich erstellt.", host, form.name.data, form.mac.data, ips, current_user) if success: session.session.commit() return redirect( url_for('user.user_show', user_id=host.owner.id, _anchor='hosts')) form_args = { 'form': form, 'cancel_to': url_for('user.user_show', user_id=host.owner.id) } return render_template('generic_form.html', page_title="Interface erstellen", form_args=form_args)
def move(user_id): user = get_user_or_404(user_id) form = UserMoveForm() refill_form_data = False if form.validate_on_submit(): if user.room == Room.q.filter_by( number=form.room_number.data, level=form.level.data, building_id=form.building.data.id).one(): flash(u"Nutzer muss in anderes Zimmer umgezogen werden!", "error") refill_form_data = True else: when = session.utcnow() if form.now.data else datetime.combine( form.when.data, utc.time_min()) _, success = web_execute(lib.user.move, None, user=user, building_id=form.building.data.id, level=form.level.data, room_number=form.room_number.data, processor=current_user, when=when) if success: session.session.commit() if when > session.utcnow(): flash(u'Der Umzug wurde vorgemerkt.', 'success') else: flash(u'Benutzer umgezogen', 'success') sheet = lib.user.store_user_sheet( user, '********', generation_purpose='user moved') session.session.commit() flask_session['user_sheet'] = sheet.id return redirect(url_for('.user_show', user_id=user.id)) if not form.is_submitted() or refill_form_data: if user.room is not None: refill_room_data(form, user.room) return render_template('user/user_move.html', user_id=user_id, form=form)
def move_in(user_id): form = UserMoveInForm() user = get_user_or_404(user_id) if user.room is not None: flash("Nutzer {} ist nicht ausgezogen!".format(user_id), 'error') abort(404) if form.validate_on_submit(): when = session.utcnow() if form.now.data else datetime.combine( form.when.data, utc.time_min()) _, success = web_execute( lib.user.move_in, None, user=user, building_id=form.building.data.id, level=form.level.data, room_number=form.room_number.data, mac=form.mac.data, birthdate=form.birthdate.data, begin_membership=form.begin_membership.data, processor=current_user, when=when, ) if success: session.session.commit() if when > session.utcnow(): flash("Der Einzug wurde vorgemerkt.", 'success') else: flash("Benutzer eingezogen.", 'success') return redirect(url_for('.user_show', user_id=user_id)) if not form.is_submitted(): form.birthdate.data = user.birthdate form.begin_membership.data = True return render_template('user/user_move_in.html', form=form, user_id=user_id)
def move_out(user_id): form = UserMoveOutForm() user = get_user_or_404(user_id) if not user.room: flash("Nutzer {} ist aktuell nirgends eingezogen!".format(user_id), 'error') abort(404) if form.validate_on_submit(): when = session.utcnow() if form.now.data else datetime.combine( form.when.data, utc.time_min()) _, success = web_execute( lib.user.move_out, None, user=user, comment=form.comment.data, processor=current_user, when=session.utcnow() if form.now.data else datetime.combine( form.when.data, utc.time_min()), end_membership=form.end_membership.data) if success: session.session.commit() if when > session.utcnow(): flash("Der Auszug wurde vorgemerkt.", "success") else: flash(u'Benutzer ausgezogen.', 'success') return redirect(url_for('.user_show', user_id=user.id)) if not form.is_submitted(): form.end_membership.data = True return render_template('user/user_move_out.html', form=form, user_id=user_id)
def host_edit(host_id): host = Host.q.get(host_id) if host is None: flash(u"Host existiert nicht.", 'error') abort(404) form = HostForm(obj=host) if not form.is_submitted(): refill_room_data(form, host.room) if form.validate_on_submit(): room = Room.q.filter_by(number=form.room_number.data, level=form.level.data, building=form.building.data).one() owner = User.q.filter_by(id=form.owner_id.data).one() _, success = web_execute(lib_host.host_edit, "Host erfolgreich bearbeitet.", host, owner, room, form.name.data, current_user) if success: session.session.commit() return redirect(url_for('user.user_show', user_id=owner.id, _anchor='hosts')) form_args = { 'form': form, 'cancel_to': url_for('user.user_show', user_id=host.owner.id) } return render_template('generic_form.html', page_title="Host editieren", form_args=form_args, form=form)
def host_create(): user = get_user_or_404(request.args.get('user_id', None)) form = HostForm(owner_id=user.id) if not form.is_submitted(): refill_room_data(form, user.room) if form.validate_on_submit(): room = Room.q.filter_by(number=form.room_number.data, level=form.level.data, building=form.building.data).one() owner = User.q.filter_by(id=form.owner_id.data).one() host, success = web_execute(lib_host.host_create, "Host erfolgreich erstellt.", owner, room, form.name.data, current_user) if success: session.session.commit() return redirect( url_for('.interface_create', user_id=host.owner_id, host_id=host.id, _anchor='hosts')) form_args = { 'form': form, 'cancel_to': url_for('user.user_show', user_id=user.id) } return render_template('generic_form.html', page_title="Host erstellen", form_args=form_args, form=form)
def transaction_confirm_all(): form = FlaskForm() if form.is_submitted(): _, success = web_execute(lib.finance.transaction_confirm_all, "Alle Transaktionen wurden bestätigt.", current_user) session.commit() return redirect(url_for('.transactions_unconfirmed')) form_args = { 'form': form, 'cancel_to': url_for('.transactions_unconfirmed'), 'submit_text': 'Alle Bestätigen', 'actions_offset': 0 } return render_template( 'generic_form.html', page_title="Alle Transaktionen (älter als 1h) bestätigen", form_args=form_args, form=form)
def create(): form = UserCreateForm(property_groups=[config.member_group]) if form.is_submitted(): unique_name_error = validate_unique_name(form, form.name) unique_email_error = validate_unique_email(form, form.email) unique_mac_error = validate_unique_mac(form, form.mac) if form.validate_on_submit() and not ( unique_name_error or unique_email_error or unique_mac_error): room: Room = get_room(building_id=form.building.data.id, level=form.level.data, room_number=form.room_number.data) if not room: flash("Raum scheint nicht zu existieren…", 'error') return result, success = web_execute( lib.user.create_user, None, name=form.name.data, login=form.login.data, processor=current_user, email=form.email.data, birthdate=form.birthdate.data, groups=form.property_groups.data, address=room.address, ) if success: (new_user, plain_password) = result # We only have to check if building is present, as the presence # of the other fields depends on building if form.building.data is not None: _, success = web_execute(lib.user.move_in, None, user=new_user, building_id=form.building.data.id, level=form.level.data, room_number=form.room_number.data, mac=form.mac.data, processor=current_user, host_annex=form.annex.data) if success: sheet = lib.user.store_user_sheet(new_user, plain_password) session.session.commit() flask_session['user_sheet'] = sheet.id flash( Markup( u'Benutzer angelegt. <a href="{}" target="_blank">Nutzerdatenblatt</a> verfügbar!' .format(url_for('.user_sheet'))), 'success') return redirect(url_for('.user_show', user_id=new_user.id)) if form.is_submitted(): if unique_name_error: form.name.errors.append(unique_name_error) if unique_email_error: form.email.errors.append(unique_email_error) if unique_mac_error: form.mac.errors.append(unique_mac_error) return render_template('user/user_create.html', form=form)