Skip to content
Snippets Groups Projects
Commit 3082e46a authored by Benjamin Bertrand's avatar Benjamin Bertrand
Browse files

Refactor attributes page

parent 1f786c1c
No related branches found
No related tags found
No related merge requests found
......@@ -27,15 +27,8 @@ class NoValidateSelectField(SelectField):
class AttributeForm(FlaskForm):
kind = SelectField('Kind')
name = StringField('name', validators=[validators.DataRequired()])
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.kind.choices = utils.get_choices(
('Manufacturer', 'Model', 'Location')
)
class ItemForm(FlaskForm):
ics_id = StringField('ICS id',
......
......@@ -116,22 +116,23 @@ def qrcodes(kind='Action'):
return render_template('qrcodes.html', kind=kind, images=images)
@bp.route('/attributes', methods=('GET', 'POST'))
@bp.route('/attributes/<kind>', methods=('GET', 'POST'))
@login_groups_accepted('admin', 'create')
def attributes():
kind = request.args.get('kind', 'Manufacturer')
form = AttributeForm(request.form, kind=kind)
def attributes(kind):
form = AttributeForm()
if form.validate_on_submit():
model = globals()[form.kind.data]
model = getattr(models, kind)
new_model = model(name=form.name.data)
db.session.add(new_model)
try:
db.session.commit()
except sa.exc.IntegrityError as e:
db.session.rollback()
flash(f'{form.name.data} already exists! Attribute not created.', 'error')
return redirect(url_for('main.attributes', kind=form.kind.data))
return render_template('attributes.html', form=form)
flash(f'{form.name.data} already exists! {kind} not created.', 'error')
else:
flash(f'{kind} {new_model} created!', 'success')
return redirect(url_for('main.attributes', kind=kind))
return render_template('attributes.html', kind=kind, form=form)
@bp.route('/_retrieve_attributes_name/<kind>')
......
......@@ -2,7 +2,7 @@ $(document).ready(function() {
var attributes_table = $("#attributes_table").DataTable({
"ajax": function(data, callback, settings) {
var kind = $("#kind").val();
var kind = $('li a.nav-link.active').text();
$.getJSON(
$SCRIPT_ROOT + "/_retrieve_attributes_name/" + kind,
function(json) {
......@@ -12,8 +12,4 @@ $(document).ready(function() {
"paging": false
});
$("#kind").on('change', function() {
attributes_table.ajax.reload();
});
});
{%- extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% from "_helpers.html" import render_field %}
{% block title %}Attributes - CSEntry{% endblock %}
{% block main %}
<ul class="nav nav-tabs">
{% for attribute in ('Manufacturer', 'Model', 'Location') %}
<li class="nav-item">
<a class="nav-link active" href="{{ url_for('main.attributes') }}">Attributes</a>
<a class="nav-link {% if attribute == kind %}active{% endif %}" href="{{ url_for('main.attributes', kind=attribute) }}">{{ attribute }}</a>
</li>
{% endfor %}
</ul>
<br>
<form method="POST" class="form-inline">
{{ form.csrf_token }}
{{ form.kind.label(class="sr-only") | safe }}
{{ form.kind(class="form-control mb-2 mr-sm-2 mb-sm-0") }}
{{ form.name.label(class="sr-only") | safe }}
{{ form.name(class="form-control mb-2 mr-sm-2 mb-sm-0", placeholder="name", required=True) }}
<button type="submit" class="btn btn-primary">Create</button>
<form id="attributeForm" method="POST">
{{ form.hidden_tag() }}
{{ render_field(form.name) }}
<div class="form-group row">
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">Create</button>
</div>
</div>
</form>
<hr class="separator">
......
......@@ -25,7 +25,7 @@
{% set path = request.path %}
<a class="nav-item nav-link {{ is_active(path.startswith("/items")) }}" href="{{ url_for('main.list_items') }}">Items</a>
<a class="nav-item nav-link {{ is_active(path.startswith("/hosts")) }}" href="{{ url_for('main.list_hosts') }}">Hosts</a>
<a class="nav-item nav-link {{ is_active(path.startswith("/attributes")) }}" href="{{ url_for('main.attributes') }}">Attributes</a>
<a class="nav-item nav-link {{ is_active(path.startswith("/attributes")) }}" href="{{ url_for('main.attributes', kind='Manufacturer') }}">Attributes</a>
<a class="nav-item nav-link {{ is_active(path.startswith("/qrcodes")) }}" href="{{ url_for('main.qrcodes', kind='Action') }}">QR Codes</a>
{% if current_user.is_authenticated and current_user.is_admin %}
<a class="nav-item nav-link" href="{{ url_for('admin.index') }}">Admin</a>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment