diff --git a/ereuse_devicehub/inventory/views.py b/ereuse_devicehub/inventory/views.py index f8df5b0a..66b28563 100644 --- a/ereuse_devicehub/inventory/views.py +++ b/ereuse_devicehub/inventory/views.py @@ -25,7 +25,7 @@ from ereuse_devicehub.inventory.forms import ( TradeForm, UploadSnapshotForm, ) -from ereuse_devicehub.label.forms import PrintLabelsForm +from ereuse_devicehub.labels.forms import PrintLabelsForm from ereuse_devicehub.resources.action.models import Trade from ereuse_devicehub.resources.device.models import Computer, DataStorage, Device from ereuse_devicehub.resources.documents.device_row import ActionRow, DeviceRow diff --git a/ereuse_devicehub/label/__init__.py b/ereuse_devicehub/labels/__init__.py similarity index 100% rename from ereuse_devicehub/label/__init__.py rename to ereuse_devicehub/labels/__init__.py diff --git a/ereuse_devicehub/labels/forms.py b/ereuse_devicehub/labels/forms.py new file mode 100644 index 00000000..cd4b5bec --- /dev/null +++ b/ereuse_devicehub/labels/forms.py @@ -0,0 +1,73 @@ +from flask import g +from flask_wtf import FlaskForm +from wtforms import IntegerField, StringField, validators + +from ereuse_devicehub.db import db +from ereuse_devicehub.resources.device.models import Device +from ereuse_devicehub.resources.tag.model import Tag + + +class TagForm(FlaskForm): + code = StringField('Code', [validators.length(min=1)]) + + def validate(self, extra_validators=None): + error = ["This value is being used"] + is_valid = super().validate(extra_validators) + if not is_valid: + return False + tag = Tag.query.filter(Tag.id == self.code.data).all() + if tag: + self.code.errors = error + return False + + return True + + def save(self): + self.instance = Tag(id=self.code.data) + db.session.add(self.instance) + db.session.commit() + return self.instance + + def remove(self): + if not self.instance.device and not self.instance.provider: + self.instance.delete() + db.session.commit() + return self.instance + + +class TagUnnamedForm(FlaskForm): + amount = IntegerField('amount') + + def save(self): + num = self.amount.data + tags_id, _ = g.tag_provider.post('/', {}, query=[('num', num)]) + tags = [Tag(id=tag_id, provider=g.inventory.tag_provider) for tag_id in tags_id] + db.session.add_all(tags) + db.session.commit() + return tags + + +class PrintLabelsForm(FlaskForm): + devices = StringField(render_kw={'class': "devicesList d-none"}) + + def validate(self, extra_validators=None): + is_valid = super().validate(extra_validators) + + if not self.devices.data: + return False + + device_ids = self.devices.data.split(",") + self._devices = ( + Device.query.filter(Device.id.in_(device_ids)) + .filter(Device.owner_id == g.user.id) + .distinct() + .all() + ) + + # print only tags that are DHID + dhids = [x.devicehub_id for x in self._devices] + self._tags = ( + Tag.query.filter(Tag.owner_id == g.user.id).filter(Tag.id.in_(dhids)).all() + ) + + return is_valid diff --git a/ereuse_devicehub/label/views.py b/ereuse_devicehub/labels/views.py similarity index 83% rename from ereuse_devicehub/label/views.py rename to ereuse_devicehub/labels/views.py index e00a3d41..445a4eb8 100644 --- a/ereuse_devicehub/label/views.py +++ b/ereuse_devicehub/labels/views.py @@ -7,11 +7,11 @@ from flask_login import current_user, login_required from requests.exceptions import ConnectionError from ereuse_devicehub import __version__, messages -from ereuse_devicehub.label.forms import PrintLabelsForm, TagForm, TagUnnamedForm +from ereuse_devicehub.labels.forms import PrintLabelsForm, TagForm, TagUnnamedForm from ereuse_devicehub.resources.lot.models import Lot from ereuse_devicehub.resources.tag.model import Tag -label = Blueprint('label', __name__, url_prefix='/label') +labels = Blueprint('labels', __name__, url_prefix='/labels') logger = logging.getLogger(__name__) @@ -19,7 +19,7 @@ logger = logging.getLogger(__name__) class TagListView(View): methods = ['GET'] decorators = [login_required] - template_name = 'label/label_list.html' + template_name = 'labels/label_list.html' def dispatch_request(self): lots = Lot.query.filter(Lot.owner_id == current_user.id) @@ -36,7 +36,7 @@ class TagListView(View): class TagAddView(View): methods = ['GET', 'POST'] decorators = [login_required] - template_name = 'label/tag_create.html' + template_name = 'labels/tag_create.html' def dispatch_request(self): lots = Lot.query.filter(Lot.owner_id == current_user.id) @@ -44,7 +44,7 @@ class TagAddView(View): form = TagForm() if form.validate_on_submit(): form.save() - next_url = url_for('label.label_list') + next_url = url_for('labels.label_list') return flask.redirect(next_url) return flask.render_template(self.template_name, form=form, **context) @@ -53,7 +53,7 @@ class TagAddView(View): class TagAddUnnamedView(View): methods = ['GET', 'POST'] decorators = [login_required] - template_name = 'label/tag_create_unnamed.html' + template_name = 'labels/tag_create_unnamed.html' def dispatch_request(self): lots = Lot.query.filter(Lot.owner_id == current_user.id) @@ -76,7 +76,7 @@ class TagAddUnnamedView(View): ) messages.error(msg) - next_url = url_for('label.label_list') + next_url = url_for('labels.label_list') return flask.redirect(next_url) return flask.render_template(self.template_name, form=form, **context) @@ -87,7 +87,7 @@ class PrintLabelsView(View): methods = ['POST', 'GET'] decorators = [login_required] - template_name = 'label/print_labels.html' + template_name = 'labels/print_labels.html' title = 'Design and implementation of labels' def dispatch_request(self): @@ -113,7 +113,7 @@ class PrintLabelsView(View): class LabelDetailView(View): decorators = [login_required] - template_name = 'label/label_detail.html' + template_name = 'labels/label_detail.html' def dispatch_request(self, id): lots = Lot.query.filter(Lot.owner_id == current_user.id) @@ -130,13 +130,13 @@ class LabelDetailView(View): return flask.render_template(self.template_name, **context) -label.add_url_rule('/', view_func=TagListView.as_view('label_list')) -label.add_url_rule('/add/', view_func=TagAddView.as_view('tag_add')) -label.add_url_rule( +labels.add_url_rule('/', view_func=TagListView.as_view('label_list')) +labels.add_url_rule('/add/', view_func=TagAddView.as_view('tag_add')) +labels.add_url_rule( '/unnamed/add/', view_func=TagAddUnnamedView.as_view('tag_unnamed_add') ) -label.add_url_rule( +labels.add_url_rule( '/print', view_func=PrintLabelsView.as_view('print_labels'), ) -label.add_url_rule('//', view_func=LabelDetailView.as_view('label_details')) +labels.add_url_rule('//', view_func=LabelDetailView.as_view('label_details')) diff --git a/ereuse_devicehub/templates/ereuse_devicehub/base_site.html b/ereuse_devicehub/templates/ereuse_devicehub/base_site.html index 9592978a..d55a1065 100644 --- a/ereuse_devicehub/templates/ereuse_devicehub/base_site.html +++ b/ereuse_devicehub/templates/ereuse_devicehub/base_site.html @@ -181,7 +181,7 @@
  • - diff --git a/ereuse_devicehub/templates/label/tag_create_unnamed.html b/ereuse_devicehub/templates/labels/tag_create_unnamed.html similarity index 90% rename from ereuse_devicehub/templates/label/tag_create_unnamed.html rename to ereuse_devicehub/templates/labels/tag_create_unnamed.html index 3e668312..fa59b44f 100644 --- a/ereuse_devicehub/templates/label/tag_create_unnamed.html +++ b/ereuse_devicehub/templates/labels/tag_create_unnamed.html @@ -5,7 +5,7 @@

    {{ title }}

    @@ -49,7 +49,7 @@
    - Cancel + Cancel