Merge pull request #257 from eReuse/feature/#3325-new-features-filter
Feature/#3325 new features filter
This commit is contained in:
commit
74597f2125
|
@ -52,16 +52,30 @@ from ereuse_devicehub.resources.user.exceptions import InsufficientPermission
|
|||
from ereuse_devicehub.resources.user.models import User
|
||||
|
||||
DEVICES = {
|
||||
"All": ["All"],
|
||||
"All": ["All Devices", "All Components"],
|
||||
"Computer": [
|
||||
"All Computers",
|
||||
"Desktop",
|
||||
"Laptop",
|
||||
"Server",
|
||||
],
|
||||
"Monitor": ["ComputerMonitor", "Monitor", "TelevisionSet", "Projector"],
|
||||
"Mobile, tablet & smartphone": ["Mobile", "Tablet", "Smartphone", "Cellphone"],
|
||||
"DataStorage": ["HardDrive", "SolidStateDrive"],
|
||||
"Monitor": [
|
||||
"All Monitors",
|
||||
"ComputerMonitor",
|
||||
"Monitor",
|
||||
"TelevisionSet",
|
||||
"Projector",
|
||||
],
|
||||
"Mobile, tablet & smartphone": [
|
||||
"All Mobile",
|
||||
"Mobile",
|
||||
"Tablet",
|
||||
"Smartphone",
|
||||
"Cellphone",
|
||||
],
|
||||
"DataStorage": ["All DataStorage", "HardDrive", "SolidStateDrive"],
|
||||
"Accessories & Peripherals": [
|
||||
"All Peripherals",
|
||||
"GraphicCard",
|
||||
"Motherboard",
|
||||
"NetworkAdapter",
|
||||
|
@ -75,26 +89,101 @@ DEVICES = {
|
|||
],
|
||||
}
|
||||
|
||||
COMPUTERS = ['Desktop', 'Laptop', 'Server']
|
||||
|
||||
COMPONENTS = [
|
||||
'GraphicCard',
|
||||
'DataStorage',
|
||||
'HardDrive',
|
||||
'DataStorage',
|
||||
'SolidStateDrive',
|
||||
'Motherboard',
|
||||
'NetworkAdapter',
|
||||
'Processor',
|
||||
'RamModule',
|
||||
'SoundCard',
|
||||
'Display',
|
||||
'Battery',
|
||||
'Camera',
|
||||
]
|
||||
|
||||
MONITORS = ["ComputerMonitor", "Monitor", "TelevisionSet", "Projector"]
|
||||
MOBILE = ["Mobile", "Tablet", "Smartphone", "Cellphone"]
|
||||
DATASTORAGE = ["HardDrive", "SolidStateDrive"]
|
||||
PERIPHERALS = [
|
||||
"GraphicCard",
|
||||
"Motherboard",
|
||||
"NetworkAdapter",
|
||||
"Processor",
|
||||
"RamModule",
|
||||
"SoundCard",
|
||||
"Battery",
|
||||
"Keyboard",
|
||||
"Mouse",
|
||||
"MemoryCardReader",
|
||||
]
|
||||
|
||||
|
||||
class FilterForm(FlaskForm):
|
||||
filter = SelectField(
|
||||
'', choices=DEVICES, default="Computer", render_kw={'class': "form-select"}
|
||||
'', choices=DEVICES, default="All Computers", render_kw={'class': "form-select"}
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__(self, lots, lot_id, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.lots = lots
|
||||
self.lot_id = lot_id
|
||||
self._get_types()
|
||||
|
||||
def _get_types(self):
|
||||
types_of_devices = [item for sublist in DEVICES.values() for item in sublist]
|
||||
dev = request.args.get('filter')
|
||||
self.device = dev if dev in types_of_devices else None
|
||||
if self.device:
|
||||
self.filter.data = self.device
|
||||
self.device_type = dev if dev in types_of_devices else None
|
||||
if self.device_type:
|
||||
self.filter.data = self.device_type
|
||||
|
||||
def search(self):
|
||||
|
||||
if self.device:
|
||||
return [self.device]
|
||||
# Filter from lots
|
||||
if self.lot_id:
|
||||
self.lot = self.lots.filter(Lot.id == self.lot_id).one()
|
||||
device_ids = (d.id for d in self.lot.devices)
|
||||
self.devices = Device.query.filter(Device.id.in_(device_ids))
|
||||
else:
|
||||
self.devices = Device.query.filter(Device.owner_id == g.user.id).filter_by(
|
||||
lots=None
|
||||
)
|
||||
|
||||
return ['Desktop', 'Laptop', 'Server']
|
||||
filter_type = None
|
||||
if self.device_type:
|
||||
filter_type = [self.device_type]
|
||||
else:
|
||||
# Case without Filter
|
||||
filter_type = COMPUTERS
|
||||
|
||||
# Generic Filters
|
||||
if "All Devices" == self.device_type:
|
||||
filter_type = None
|
||||
|
||||
if "All Components" == self.device_type:
|
||||
filter_type = COMPONENTS
|
||||
|
||||
elif "All Monitors" == self.device_type:
|
||||
filter_type = MONITORS
|
||||
|
||||
elif "All Mobile" == self.device_type:
|
||||
filter_type = MOBILE
|
||||
|
||||
elif "All DataStorage" == self.device_type:
|
||||
filter_type = DATASTORAGE
|
||||
|
||||
elif "All Peripherals" == self.device_type:
|
||||
filter_type = PERIPHERALS
|
||||
|
||||
if filter_type:
|
||||
self.devices = self.devices.filter(Device.type.in_(filter_type))
|
||||
|
||||
return self.devices.order_by(Device.updated.desc())
|
||||
|
||||
|
||||
class LotForm(FlaskForm):
|
||||
|
|
|
@ -43,8 +43,8 @@ class DeviceListMix(GenericMixView):
|
|||
def get_context(self, lot_id):
|
||||
super().get_context()
|
||||
lots = self.context['lots']
|
||||
form_filter = FilterForm()
|
||||
filter_types = form_filter.search()
|
||||
form_filter = FilterForm(lots, lot_id)
|
||||
devices = form_filter.search()
|
||||
lot = None
|
||||
tags = (
|
||||
Tag.query.filter(Tag.owner_id == current_user.id)
|
||||
|
@ -54,10 +54,6 @@ class DeviceListMix(GenericMixView):
|
|||
|
||||
if lot_id:
|
||||
lot = lots.filter(Lot.id == lot_id).one()
|
||||
devices = lot.devices
|
||||
if "All" not in filter_types:
|
||||
devices = [dev for dev in lot.devices if dev.type in filter_types]
|
||||
devices = sorted(devices, key=lambda x: x.updated, reverse=True)
|
||||
form_new_action = NewActionForm(lot=lot.id)
|
||||
form_new_allocate = AllocateForm(lot=lot.id)
|
||||
form_new_datawipe = DataWipeForm(lot=lot.id)
|
||||
|
@ -67,20 +63,6 @@ class DeviceListMix(GenericMixView):
|
|||
user_from=g.user.email,
|
||||
)
|
||||
else:
|
||||
if "All" in filter_types:
|
||||
devices = (
|
||||
Device.query.filter(Device.owner_id == current_user.id)
|
||||
.filter_by(lots=None)
|
||||
.order_by(Device.updated.desc())
|
||||
)
|
||||
else:
|
||||
devices = (
|
||||
Device.query.filter(Device.owner_id == current_user.id)
|
||||
.filter_by(lots=None)
|
||||
.filter(Device.type.in_(filter_types))
|
||||
.order_by(Device.updated.desc())
|
||||
)
|
||||
|
||||
form_new_action = NewActionForm()
|
||||
form_new_allocate = AllocateForm()
|
||||
form_new_datawipe = DataWipeForm()
|
||||
|
|
Reference in New Issue