diff --git a/ereuse_devicehub/forms.py b/ereuse_devicehub/forms.py index 68485f33..4980b41e 100644 --- a/ereuse_devicehub/forms.py +++ b/ereuse_devicehub/forms.py @@ -141,6 +141,12 @@ class SanitizationEntityForm(FlaskForm): if not is_valid: return False + extensions = ["jpg", "jpeg", "png", "gif", "svg"] + if self.logo.data.lower().split(".")[-1] not in extensions: + txt = "Error in Url field - accepted only .PNG, .JPG and .GIF. extensions" + self.logo.errors = [txt] + return False + return True def save(self, commit=True): diff --git a/ereuse_devicehub/inventory/forms.py b/ereuse_devicehub/inventory/forms.py index fc475f6e..dff4e87e 100644 --- a/ereuse_devicehub/inventory/forms.py +++ b/ereuse_devicehub/inventory/forms.py @@ -1539,7 +1539,10 @@ class CustomerDetailsForm(FlaskForm): logo = URLField( 'Logo', [validators.Optional()], - render_kw={'class': "form-control"}, + render_kw={ + 'class': "form-control", + "placeholder": "Url where is the logo - acceptd only .png, .jpg, .gif, svg", + }, description="Url where is the logo", ) @@ -1558,7 +1561,17 @@ class CustomerDetailsForm(FlaskForm): def validate(self, extra_validators=None): is_valid = super().validate(extra_validators) - return is_valid + + if not is_valid: + return is_valid + + extensions = ["jpg", "jpeg", "png", "gif", "svg"] + if self.logo.data.lower().split(".")[-1] not in extensions: + txt = "Error in Url field - accepted only .PNG, .JPG and .GIF. extensions" + self.logo.errors = [txt] + return False + + return True def save(self, commit=True): self.populate_obj(self._obj) diff --git a/ereuse_devicehub/inventory/views.py b/ereuse_devicehub/inventory/views.py index 675409b4..5ebabaa5 100644 --- a/ereuse_devicehub/inventory/views.py +++ b/ereuse_devicehub/inventory/views.py @@ -1058,20 +1058,48 @@ class ExportsView(View): erasures.append(device.privacy) return erasures - def get_costum_details(self): + def get_costum_details(self, erasures): my_data = None customer_details = None + lot = None + if hasattr(g.user, 'sanitization_entity'): my_data = g.user.sanitization_entity - try: - if len(request.referrer.split('/lot/')) > 1: - lot_id = request.referrer.split('/lot/')[-1].split('/')[0] - lot = Lot.query.filter_by(owner=g.user).filter_by(id=lot_id).first() + customer_details = self.get_customer_details_from_request() + + if not erasures or customer_details: + return my_data, customer_details + + init = erasures[0].device.get_set_lots() + for e in erasures: + init = init.intersection(e.device.get_set_lots()) + + if not len(init): + return my_data, customer_details + + lots = sorted(list(init), key=lambda x: x.created) + lots.reverse() + for lot in lots: + try: customer_details = lot.transfer.customer_details + if customer_details: + return my_data, customer_details + except Exception: + continue + + return my_data, customer_details + + def get_customer_details_from_request(self): + try: + if len(request.referrer.split('/lot/')) < 2: + return + + lot_id = request.referrer.split('/lot/')[-1].split('/')[0] + lot = Lot.query.filter_by(owner=g.user).filter_by(id=lot_id).first() + return lot.transfer.customer_details except Exception: pass - return my_data, customer_details def get_server_erasure_hosts(self, erasures): erasures_host = [] @@ -1093,10 +1121,11 @@ class ExportsView(View): erasures[0].snapshot.version, ) - my_data, customer_details = self.get_costum_details() + my_data, customer_details = self.get_costum_details(erasures) a, b = self.get_server_erasure_hosts(erasures) erasures_host, erasures_on_server = a, b + erasures_host = set(erasures_host) result = 'Success' if "Failed" in [e.severity.get_public_name() for e in erasures]: @@ -1104,9 +1133,9 @@ class ExportsView(View): erasures = sorted(erasures, key=lambda x: x.end_time) erasures_on_server = sorted(erasures_on_server, key=lambda x: x.end_time) - erasures_host = sorted(erasures_host, key=lambda x: x.end_time) erasures_normal = list(set(erasures) - set(erasures_on_server)) erasures_normal = sorted(erasures_normal, key=lambda x: x.end_time) + n_computers = len({x.parent for x in erasures} - erasures_host) params = { 'title': 'Erasure Certificate', @@ -1116,7 +1145,7 @@ class ExportsView(View): 'uuid_report': '{}'.format(uuid.uuid4()), 'software': software, 'my_data': my_data, - 'n_computers': len(set([x.parent for x in erasures])), + 'n_computers': n_computers, 'result': result, 'customer_details': customer_details, 'erasure_hosts': erasures_host, diff --git a/ereuse_devicehub/resources/device/models.py b/ereuse_devicehub/resources/device/models.py index 8d2baec1..3bb98ffb 100644 --- a/ereuse_devicehub/resources/device/models.py +++ b/ereuse_devicehub/resources/device/models.py @@ -676,6 +676,12 @@ class Device(Thing): return args def get_lots_for_template(self): + if self.binding: + return self.binding.device.get_lots_for_template() + + if not self.lots and hasattr(self, 'parent') and self.parent: + return self.parent.get_lots_for_template() + lots = [] for lot in self.lots: if lot.is_incoming: @@ -1015,6 +1021,19 @@ class Device(Thing): return + def get_set_lots(self): + if hasattr(self, "orphan") and self.orphan: + if self.binding: + return set(self.binding.device.lots) + return set(self.lots) + + if hasattr(self, "parent") and self.parent: + if self.parent.binding: + return set(self.parent.binding.device.lots) + return set(self.parent.lots) + + return set(self.lots) + def __lt__(self, other): return self.id < other.id diff --git a/ereuse_devicehub/templates/inventory/erasure.html b/ereuse_devicehub/templates/inventory/erasure.html index 76df0694..a5eb0039 100644 --- a/ereuse_devicehub/templates/inventory/erasure.html +++ b/ereuse_devicehub/templates/inventory/erasure.html @@ -159,19 +159,20 @@
- N° of sanitization server ({{ loop.index }}/{{ erasure_hosts|length }}): + SNs; of sanitization server {{ erasure_hosts|length }}: | + {% for e in erasure_hosts %} {% if e.serial_number %} - {{ e.serial_number.upper() }} + {{ e.serial_number.upper() }}{% if not loop.last %},{% endif %} {% endif %} + {% endfor %} | ||||||||||||||
N° of computers:
@@ -245,7 +246,7 @@
-
+
{% for erasure in erasures %}
-
-
-
- Devices Summary-
-
- {% endif %}
-
@@ -366,12 +323,14 @@
- {% for lot in ac.device.my_partner.get_lots_for_template() %} + {% for lot in ac.device.get_lots_for_template() %} {{ lot }} {% endfor %}diff --git a/ereuse_devicehub/views.py b/ereuse_devicehub/views.py index 915a4dc4..65cb4d3a 100644 --- a/ereuse_devicehub/views.py +++ b/ereuse_devicehub/views.py @@ -143,8 +143,11 @@ class SanitizationEntityView(View): messages.success('Sanitization data updated successfully!') else: messages.error('Error modifying Sanitization data!') + if form.errors: + for k in form.errors.keys(): + txt = "{}: {}".format(k, form.errors[k]) + messages.error(txt) - # db.session.commit() return flask.redirect(flask.url_for('core.user-profile')) |