diff --git a/app/inventory/forms.py b/app/inventory/forms.py index dbac83a802bb2792f608eaccb452a7cced48bb0d..530b1512858cbcf8eae0a3ac34dcb4b01033968f 100644 --- a/app/inventory/forms.py +++ b/app/inventory/forms.py @@ -16,7 +16,8 @@ from .. import utils, models class AttributeForm(CSEntryForm): - name = StringField('name', validators=[validators.DataRequired()]) + name = StringField('Name', validators=[validators.DataRequired()]) + description = StringField('Description') class ItemForm(CSEntryForm): diff --git a/app/inventory/views.py b/app/inventory/views.py index 70746c3ef29f95b4a2791bb14c269b74e046b7cb..3978a6dc84caf895407718d57d316aed098fde4f 100644 --- a/app/inventory/views.py +++ b/app/inventory/views.py @@ -157,7 +157,8 @@ def attributes(kind): form = AttributeForm() if form.validate_on_submit(): model = getattr(models, kind) - new_model = model(name=form.name.data) + new_model = model(name=form.name.data, + description=form.description.data or None) db.session.add(new_model) try: db.session.commit() @@ -178,5 +179,5 @@ def retrieve_attributes_name(kind): except AttributeError: raise utils.CSEntryError(f"Unknown model '{kind}'", status_code=422) items = db.session.query(model).order_by(model.name) - data = [[item.name] for item in items] + data = [(item.name, item.description) for item in items] return jsonify(data=data) diff --git a/app/models.py b/app/models.py index 47888491664e9e4f33e1fecda86113a8be8987ce..2570421c0f0e054868264bbfb1ce93b322bd7ce1 100644 --- a/app/models.py +++ b/app/models.py @@ -197,6 +197,7 @@ class Token(db.Model): class QRCodeMixin: id = db.Column(db.Integer, primary_key=True) name = db.Column(CIText, nullable=False, unique=True) + description = db.Column(db.Text) def image(self): """Return a QRCode image to identify a record @@ -227,6 +228,7 @@ class QRCodeMixin: return { 'id': self.id, 'name': self.name, + 'description': self.description, 'qrcode': self.base64_image(), } @@ -240,14 +242,8 @@ class Manufacturer(QRCodeMixin, db.Model): class Model(QRCodeMixin, db.Model): - description = db.Column(db.Text) items = db.relationship('Item', back_populates='model') - def to_dict(self): - d = super().to_dict() - d['description'] = self.description - return d - class Location(QRCodeMixin, db.Model): items = db.relationship('Item', back_populates='location') diff --git a/app/templates/inventory/attributes.html b/app/templates/inventory/attributes.html index bd54f1bfaee3b7e19bff531d10a797c805a2c6ec..03501ee95ca0b9e945db79803b8cdd5639e48ac4 100644 --- a/app/templates/inventory/attributes.html +++ b/app/templates/inventory/attributes.html @@ -17,6 +17,7 @@ <form id="attributeForm" method="POST"> {{ form.hidden_tag() }} {{ render_field(form.name) }} + {{ render_field(form.description) }} <div class="form-group row"> <div class="col-sm-10"> <button type="submit" class="btn btn-primary">Create</button> @@ -30,6 +31,7 @@ <thead> <tr> <th>Name</th> + <th>Description</th> </tr> </thead> </table> diff --git a/tests/functional/test_api.py b/tests/functional/test_api.py index 2991814f6e8fefda1d6860e06183805a950daeef..ee9d0f2706d5df12978486603201db6414629a6d 100644 --- a/tests/functional/test_api.py +++ b/tests/functional/test_api.py @@ -180,9 +180,10 @@ def test_create_generic_model(endpoint, client, user_token): check_response_message(response, '(psycopg2.IntegrityError) duplicate key value violates unique constraint', 422) response = post(client, f'{API_URL}/{endpoint}', data={'name': 'FOO'}, token=user_token) check_response_message(response, '(psycopg2.IntegrityError) duplicate key value violates unique constraint', 422) - data = {'name': 'Bar'} + data = {'name': 'Bar', 'description': 'Bar description'} response = post(client, f'{API_URL}/{endpoint}', data=data, token=user_token) assert response.status_code == 201 + assert response.json['description'] == 'Bar description' model = ENDPOINT_MODEL[endpoint] assert model.query.count() == 2 response = get(client, f'{API_URL}/{endpoint}', user_token)