to do binding from real device
This commit is contained in:
parent
138dc66b9a
commit
62b235a455
|
@ -1667,8 +1667,8 @@ class BindingForm(FlaskForm):
|
||||||
self.phid.errors = [txt]
|
self.phid.errors = [txt]
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if self.device.is_abstract() != 'Abstract':
|
if self.device.is_abstract() not in ['Abstract', 'Real']:
|
||||||
txt = "This is not a abstract device."
|
txt = "This is not a Abstract or Real device."
|
||||||
self.phid.errors = [txt]
|
self.phid.errors = [txt]
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -1682,7 +1682,7 @@ class BindingForm(FlaskForm):
|
||||||
self.phid.errors = [txt]
|
self.phid.errors = [txt]
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if self.placeholder.binding:
|
if self.placeholder.status not in ['Abstract', 'Real']:
|
||||||
txt = "This placeholder have a binding with other device. "
|
txt = "This placeholder have a binding with other device. "
|
||||||
txt += "Before you need to do an unbinding with this other device."
|
txt += "Before you need to do an unbinding with this other device."
|
||||||
self.phid.errors = [txt]
|
self.phid.errors = [txt]
|
||||||
|
|
|
@ -163,7 +163,7 @@ class DeviceDetailView(GenericMixin):
|
||||||
if form_binding.validate_on_submit():
|
if form_binding.validate_on_submit():
|
||||||
next_url = url_for(
|
next_url = url_for(
|
||||||
'inventory.binding',
|
'inventory.binding',
|
||||||
dhid=form_binding.device.devicehub_id,
|
dhid=id,
|
||||||
phid=form_binding.placeholder.phid,
|
phid=form_binding.placeholder.phid,
|
||||||
)
|
)
|
||||||
return flask.redirect(next_url)
|
return flask.redirect(next_url)
|
||||||
|
@ -179,72 +179,108 @@ class BindingView(GenericMixin):
|
||||||
template_name = 'inventory/binding.html'
|
template_name = 'inventory/binding.html'
|
||||||
|
|
||||||
def dispatch_request(self, dhid, phid):
|
def dispatch_request(self, dhid, phid):
|
||||||
|
self.phid = phid
|
||||||
|
self.dhid = dhid
|
||||||
|
self.next_url = url_for('inventory.device_details', id=dhid)
|
||||||
self.get_context()
|
self.get_context()
|
||||||
old_device = (
|
self.get_objects()
|
||||||
Device.query.filter(Device.owner_id == g.user.id)
|
if self.check_errors():
|
||||||
.filter(Device.devicehub_id == dhid)
|
return flask.redirect(self.next_url)
|
||||||
.first()
|
|
||||||
)
|
|
||||||
new_placeholder = (
|
|
||||||
Placeholder.query.filter(Placeholder.owner_id == g.user.id)
|
|
||||||
.filter(Placeholder.phid == phid)
|
|
||||||
.first()
|
|
||||||
)
|
|
||||||
|
|
||||||
if not old_device or old_device.placeholder.status != 'Abstract':
|
|
||||||
next_url = url_for('inventory.device_details', id=dhid)
|
|
||||||
messages.error('Device Dhid: "{}" not is a Abstract device!'.format(dhid))
|
|
||||||
return flask.redirect(next_url)
|
|
||||||
|
|
||||||
if not new_placeholder or new_placeholder.status != 'Real':
|
|
||||||
next_url = url_for('inventory.device_details', id=dhid)
|
|
||||||
messages.error('Device Phid: "{}" not is a Abstract device!'.format(phid))
|
|
||||||
return flask.redirect(next_url)
|
|
||||||
|
|
||||||
old_placeholder = old_device.placeholder
|
|
||||||
new_device = new_placeholder.device
|
|
||||||
abstract_device = old_placeholder.binding
|
|
||||||
new_dhid = new_device.devicehub_id
|
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
|
return self.post()
|
||||||
for plog in PlaceholdersLog.query.filter_by(
|
|
||||||
placeholder_id=old_placeholder.id
|
|
||||||
):
|
|
||||||
db.session.delete(plog)
|
|
||||||
|
|
||||||
for ac in old_device.actions:
|
|
||||||
ac.devices.add(new_device)
|
|
||||||
ac.devices.remove(old_device)
|
|
||||||
for act in ac.actions_device:
|
|
||||||
if act.device == old_device:
|
|
||||||
db.session.delete(act)
|
|
||||||
|
|
||||||
for tag in list(old_device.tags):
|
|
||||||
tag.device = new_device
|
|
||||||
|
|
||||||
db.session.delete(old_device)
|
|
||||||
abstract_device.binding = new_placeholder
|
|
||||||
db.session.commit()
|
|
||||||
|
|
||||||
next_url = url_for('inventory.device_details', id=new_dhid)
|
|
||||||
messages.success(
|
|
||||||
'Device Dhid: "{}" bind successfully with Phid: {}!'.format(dhid, phid)
|
|
||||||
)
|
|
||||||
return flask.redirect(next_url)
|
|
||||||
|
|
||||||
self.context.update(
|
self.context.update(
|
||||||
{
|
{
|
||||||
'new_placeholder': new_placeholder,
|
'new_placeholder': self.new_placeholder,
|
||||||
'old_placeholder': old_placeholder,
|
'old_placeholder': self.old_placeholder,
|
||||||
'page_title': 'Binding confirm',
|
'page_title': 'Binding confirm',
|
||||||
'actions': list(old_device.actions) + list(new_device.actions),
|
'actions': list(self.old_device.actions)
|
||||||
'tags': list(old_device.tags) + list(new_device.tags),
|
+ list(self.new_device.actions),
|
||||||
|
'tags': list(self.old_device.tags) + list(self.new_device.tags),
|
||||||
|
'dhid': self.dhid,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
return flask.render_template(self.template_name, **self.context)
|
return flask.render_template(self.template_name, **self.context)
|
||||||
|
|
||||||
|
def check_errors(self):
|
||||||
|
if not self.new_placeholder:
|
||||||
|
messages.error('Device Phid: "{}" not exist!'.format(self.phid))
|
||||||
|
return True
|
||||||
|
|
||||||
|
if self.old_device.placeholder.status != 'Abstract':
|
||||||
|
messages.error(
|
||||||
|
'Device Dhid: "{}" is not a Abstract device!'.format(self.dhid)
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
|
||||||
|
if self.new_placeholder.status == 'Twin':
|
||||||
|
messages.error('Device Phid: "{}" is a Twin device!'.format(self.phid))
|
||||||
|
return True
|
||||||
|
|
||||||
|
if self.new_placeholder.status == self.old_placeholder.status:
|
||||||
|
txt = 'Device Phid: "{}" and device Dhid: "{}" have the same status, "{}"!'.format(
|
||||||
|
self.phid, self.dhid, self.new_placeholder.status
|
||||||
|
)
|
||||||
|
messages.error(txt)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def get_objects(self):
|
||||||
|
self.old_device = (
|
||||||
|
Device.query.filter(Device.owner_id == g.user.id)
|
||||||
|
.filter(Device.devicehub_id == self.dhid)
|
||||||
|
.one()
|
||||||
|
)
|
||||||
|
self.new_placeholder = (
|
||||||
|
Placeholder.query.filter(Placeholder.owner_id == g.user.id)
|
||||||
|
.filter(Placeholder.phid == self.phid)
|
||||||
|
.first()
|
||||||
|
)
|
||||||
|
|
||||||
|
if not self.new_placeholder:
|
||||||
|
return
|
||||||
|
|
||||||
|
if self.old_device.placeholder.status == 'Abstract':
|
||||||
|
self.new_device = self.new_placeholder.device
|
||||||
|
self.old_placeholder = self.old_device.placeholder
|
||||||
|
elif self.old_device.placeholder.status == 'Real':
|
||||||
|
self.new_device = self.old_device
|
||||||
|
self.old_placeholder = self.new_placeholder
|
||||||
|
self.old_device = self.old_placeholder.device
|
||||||
|
self.new_placeholder = self.new_device.placeholder
|
||||||
|
|
||||||
|
self.abstract_device = self.old_placeholder.binding
|
||||||
|
self.new_dhid = self.new_device.devicehub_id
|
||||||
|
|
||||||
|
def post(self):
|
||||||
|
for plog in PlaceholdersLog.query.filter_by(
|
||||||
|
placeholder_id=self.old_placeholder.id
|
||||||
|
):
|
||||||
|
db.session.delete(plog)
|
||||||
|
|
||||||
|
for ac in self.old_device.actions:
|
||||||
|
ac.devices.add(self.new_device)
|
||||||
|
ac.devices.remove(self.old_device)
|
||||||
|
for act in ac.actions_device:
|
||||||
|
if act.device == self.old_device:
|
||||||
|
db.session.delete(act)
|
||||||
|
|
||||||
|
for tag in list(self.old_device.tags):
|
||||||
|
tag.device = self.new_device
|
||||||
|
|
||||||
|
db.session.delete(self.old_device)
|
||||||
|
self.abstract_device.binding = self.new_placeholder
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
next_url = url_for('inventory.device_details', id=self.new_dhid)
|
||||||
|
messages.success(
|
||||||
|
'Device Dhid: "{}" bind successfully with Phid: {}!'.format(
|
||||||
|
self.dhid, self.phid
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return flask.redirect(next_url)
|
||||||
|
|
||||||
|
|
||||||
class UnBindingView(GenericMixin):
|
class UnBindingView(GenericMixin):
|
||||||
methods = ['GET', 'POST']
|
methods = ['GET', 'POST']
|
||||||
|
@ -272,9 +308,9 @@ class UnBindingView(GenericMixin):
|
||||||
self.get_context()
|
self.get_context()
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
new_device = self.clone_device(placeholder.binding)
|
dhid = placeholder.device.devicehub_id
|
||||||
new_dhid = new_device.devicehub_id
|
self.clone_device(placeholder.binding)
|
||||||
next_url = url_for('inventory.device_details', id=new_dhid)
|
next_url = url_for('inventory.device_details', id=dhid)
|
||||||
messages.success('Device Phid: "{}" unbind successfully!'.format(phid))
|
messages.success('Device Phid: "{}" unbind successfully!'.format(phid))
|
||||||
return flask.redirect(next_url)
|
return flask.redirect(next_url)
|
||||||
|
|
||||||
|
|
|
@ -184,7 +184,7 @@
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<form method="post">
|
<form method="post">
|
||||||
<a href="{{ url_for('inventory.device_details', id=old_placeholder.device.devicehub_id) }}" class="btn btn-danger">Cancel</a>
|
<a href="{{ url_for('inventory.device_details', id=dhid) }}" class="btn btn-danger">Cancel</a>
|
||||||
<button class="btn btn-primary" type="submit">Confirm</button>
|
<button class="btn btn-primary" type="submit">Confirm</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#components">Components</button>
|
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#components">Components</button>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
{% if placeholder.status == 'Abstract' %}
|
{% if placeholder.status in ['Abstract', 'Real'] %}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#binding">Binding</button>
|
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#binding">Binding</button>
|
||||||
</li>
|
</li>
|
||||||
|
|
Reference in New Issue