base of form for update type of updated
This commit is contained in:
parent
5d88d4e516
commit
62de2126c7
|
@ -1692,3 +1692,81 @@ class BindingForm(FlaskForm):
|
|||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
class UserTrustsForm(FlaskForm):
|
||||
snapshot_type = SelectField(
|
||||
'',
|
||||
[validators.DataRequired()],
|
||||
choices=[("new_device", "New Device"), ("update", "Update")],
|
||||
default="new_device",
|
||||
render_kw={'class': "form-select"},
|
||||
)
|
||||
|
||||
def __init__(self, snapshot_uuid, *args, **kwargs):
|
||||
self.snapshot = Snapshot.query.filter_by(uuid=snapshot_uuid).first()
|
||||
self.device = self.snapshot.device if self.snapshot.device else None
|
||||
self.snapshot_type.kwargs['default'] = self.snapshot.get_new_device()
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def validate(self, extra_validators=None):
|
||||
is_valid = super().validate(extra_validators)
|
||||
|
||||
if not is_valid:
|
||||
txt = ""
|
||||
self.snapthot_type.errors = [txt]
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def unic(self):
|
||||
try:
|
||||
return self._unic
|
||||
except Exception:
|
||||
self._unic = (
|
||||
Device.query.filter_by(
|
||||
hid=self.device.hid, owner=g.user, placeholder=None
|
||||
).count()
|
||||
< 2
|
||||
)
|
||||
|
||||
return self._unic
|
||||
|
||||
def show(self):
|
||||
if not self.snapshot or not self.device:
|
||||
return False
|
||||
|
||||
if not hasattr(self.device, 'system_uuid'):
|
||||
return False
|
||||
|
||||
if not self.device.system_uuid:
|
||||
return False
|
||||
|
||||
if self.snapshot.get_new_device() == 'update':
|
||||
# To do Split
|
||||
return True
|
||||
|
||||
if not self.unic():
|
||||
# To do merge
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def save(self, commit=True):
|
||||
# import pdb; pdb.set_trace()
|
||||
if not self.show():
|
||||
return
|
||||
|
||||
if self.snapshot_type.data == self.snapshot.get_new_device():
|
||||
return
|
||||
|
||||
if self.snapshot_type.data == 'update' and not self.unic():
|
||||
self.device.merge()
|
||||
|
||||
if self.snapshot_type.data == 'new_device' and self.unic():
|
||||
self.device.split()
|
||||
|
||||
if commit:
|
||||
db.session.commit()
|
||||
|
||||
return self.snapshot
|
||||
|
|
|
@ -33,6 +33,7 @@ from ereuse_devicehub.inventory.forms import (
|
|||
TransferForm,
|
||||
UploadPlaceholderForm,
|
||||
UploadSnapshotForm,
|
||||
UserTrustsForm,
|
||||
)
|
||||
from ereuse_devicehub.labels.forms import PrintLabelsForm
|
||||
from ereuse_devicehub.parser.models import PlaceholdersLog, SnapshotsLog
|
||||
|
@ -1228,9 +1229,12 @@ class SnapshotListView(GenericMixin):
|
|||
|
||||
class SnapshotDetailView(GenericMixin):
|
||||
template_name = 'inventory/snapshot_detail.html'
|
||||
methods = ['GET', 'POST']
|
||||
form_class = UserTrustsForm
|
||||
|
||||
def dispatch_request(self, snapshot_uuid):
|
||||
self.snapshot_uuid = snapshot_uuid
|
||||
form = self.form_class(snapshot_uuid)
|
||||
self.get_context()
|
||||
self.context['page_title'] = "Snapshot Detail"
|
||||
self.context['snapshots_log'] = self.get_snapshots_log()
|
||||
|
@ -1238,6 +1242,10 @@ class SnapshotDetailView(GenericMixin):
|
|||
self.context['snapshot_sid'] = ''
|
||||
if self.context['snapshots_log'].count():
|
||||
self.context['snapshot_sid'] = self.context['snapshots_log'][0].sid
|
||||
self.context['form'] = form
|
||||
|
||||
if form.validate_on_submit():
|
||||
form.save()
|
||||
|
||||
return flask.render_template(self.template_name, **self.context)
|
||||
|
||||
|
|
|
@ -701,6 +701,19 @@ class Snapshot(JoinedWithOneDeviceMixin, ActionWithOneDevice):
|
|||
|
||||
return hdds
|
||||
|
||||
def get_new_device(self):
|
||||
|
||||
if not self.device:
|
||||
return ''
|
||||
|
||||
snapshots = []
|
||||
for s in self.device.actions:
|
||||
if s == self:
|
||||
break
|
||||
if s.type == self.type:
|
||||
snapshots.append(s)
|
||||
return snapshots and 'update' or 'new_device'
|
||||
|
||||
def __str__(self) -> str:
|
||||
return '{}. {} version {}.'.format(self.severity, self.software, self.version)
|
||||
|
||||
|
|
|
@ -875,6 +875,14 @@ class Device(Thing):
|
|||
}
|
||||
return types.get(self.type, '')
|
||||
|
||||
def split(self):
|
||||
self.user_trusts = False
|
||||
return
|
||||
|
||||
def merge(self):
|
||||
self.user_trusts = True
|
||||
return
|
||||
|
||||
def __lt__(self, other):
|
||||
return self.id < other.id
|
||||
|
||||
|
|
|
@ -20,9 +20,44 @@
|
|||
<div class="card-body pt-3">
|
||||
<h3>{{ snapshot_sid }} | {{ snapshot_uuid }}</h3>
|
||||
<!-- Bordered Tabs -->
|
||||
{% if form.show() %}
|
||||
<ul class="nav nav-tabs nav-tabs-bordered">
|
||||
|
||||
<li class="nav-item">
|
||||
<button class="nav-link active" data-bs-toggle="tab" data-bs-target="#log">Log</button>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#change-type">Change type updated</button>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
{% endif %}
|
||||
<div class="tab-content pt-2">
|
||||
|
||||
<div class="tab-pane fade show active">
|
||||
{% if form.show() %}
|
||||
<div class="tab-pane fade" id="change-type">
|
||||
<h5 class="card-title">Change Snapshot Type Upload</h5>
|
||||
<div class="list-group col-6">
|
||||
<div class="list-group-item">
|
||||
<form method="post" class="row g-3 needs-validation">
|
||||
{{ form.csrf_token }}
|
||||
{% for f in form %}
|
||||
{% if f != form.csrf_token %}
|
||||
<p class="mb-1">
|
||||
{{ f }}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<p class="mb-1">
|
||||
<button class="btn btn-primary" type="submit">Save</button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="tab-pane fade show active" id="log">
|
||||
<h5 class="card-title">Traceability log Details</h5>
|
||||
<div class="list-group col-6">
|
||||
{% for log in snapshots_log %}
|
||||
|
|
Reference in a new issue