diff --git a/ereuse_devicehub/inventory/views.py b/ereuse_devicehub/inventory/views.py index 9682e0c1..567196eb 100644 --- a/ereuse_devicehub/inventory/views.py +++ b/ereuse_devicehub/inventory/views.py @@ -166,10 +166,14 @@ class DeviceDetailView(GenericMixin): ) form_tags = TagDeviceForm(dhid=id) + placeholder = device.binding or device.placeholder + if not placeholder: + return NotFound() + self.context.update( { 'device': device, - 'placeholder': device.binding or device.placeholder, + 'placeholder': placeholder, 'page_title': 'Device {}'.format(device.devicehub_id), 'form_tag_device': form_tags, } diff --git a/ereuse_devicehub/templates/inventory/erasure_list.html b/ereuse_devicehub/templates/inventory/erasure_list.html index 2d93d4bd..57f91b75 100644 --- a/ereuse_devicehub/templates/inventory/erasure_list.html +++ b/ereuse_devicehub/templates/inventory/erasure_list.html @@ -71,9 +71,13 @@ /> + {% if ac.device.phid() %} {{ ac.device.serial_number.upper() }} + {% else %} + {{ ac.device.serial_number.upper() }} + {% endif %} diff --git a/scripts/datastorage_orphans.py b/scripts/datastorage_orphans.py new file mode 100644 index 00000000..72148e94 --- /dev/null +++ b/scripts/datastorage_orphans.py @@ -0,0 +1,63 @@ +import copy +import sys + +from flask import g + +from ereuse_devicehub.db import db +from ereuse_devicehub.devicehub import Devicehub +from ereuse_devicehub.resources.device.models import DataStorage, Placeholder +from ereuse_devicehub.resources.lot.models import LotDevice + + +def clone_device(device): + if device.phid(): + return + + g.user = device.owner + + old_devicehub_id = device.devicehub_id + + dict_device = copy.copy(device.__dict__) + dict_device.pop('_sa_instance_state') + dict_device.pop('id', None) + dict_device.pop('devicehub_id', None) + dict_device.pop('actions_multiple', None) + dict_device.pop('actions_one', None) + dict_device.pop('components', None) + dict_device.pop('tags', None) + dict_device.pop('system_uuid', None) + new_device = device.__class__(**dict_device) + new_device.devicehub_id = old_devicehub_id + device.devicehub_id = None + new_device.owner = device.owner + db.session.add(new_device) + + placeholder = Placeholder( + device=new_device, binding=device, is_abstract=True, owner_id=device.owner_id + ) + db.session.add(placeholder) + + tags = [x for x in device.tags] + for tag in tags: + tag.device = new_device + + lots = [x for x in device.lots] + for lot in lots: + for rel_lot in LotDevice.query.filter_by(lot_id=lot.id, device=device): + rel_lot.device = new_device + return new_device + + +def main(): + schema = sys.argv[1] + app = Devicehub(inventory=schema) + app.app_context().push() + for device in DataStorage.query.all(): + if not device.phid(): + clone_device(device) + + db.session.commit() + + +if __name__ == '__main__': + main()