This repository has been archived on 2024-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
devicehub-teal/ereuse_devicehub/inventory/forms.py

130 lines
4.1 KiB
Python
Raw Normal View History

2021-12-30 12:52:06 +00:00
from flask_wtf import FlaskForm
2022-01-10 12:27:27 +00:00
from wtforms import StringField, HiddenField, DateField, TextAreaField, SelectField, \
IntegerField, validators
2021-12-30 20:35:54 +00:00
from flask import g
2021-12-30 12:52:06 +00:00
2021-12-30 20:35:54 +00:00
from ereuse_devicehub.db import db
2021-12-30 12:52:06 +00:00
from ereuse_devicehub.resources.device.models import Device
2022-01-10 12:07:05 +00:00
from ereuse_devicehub.resources.action.models import Action
2021-12-30 12:52:06 +00:00
from ereuse_devicehub.resources.lot.models import Lot
2022-01-10 12:07:05 +00:00
from ereuse_devicehub.resources.enums import Severity
2021-12-30 12:52:06 +00:00
2022-01-03 10:32:12 +00:00
class LotDeviceForm(FlaskForm):
2021-12-30 12:52:06 +00:00
lot = StringField(u'Lot', [validators.UUID()])
devices = StringField(u'Devices', [validators.length(min=1)])
def validate(self, extra_validators=None):
is_valid = super().validate(extra_validators)
if not is_valid:
return False
2022-01-03 10:32:12 +00:00
self._lot = Lot.query.filter(Lot.id == self.lot.data).filter(
Lot.owner_id == g.user.id).one()
2021-12-30 12:52:06 +00:00
devices = set(self.devices.data.split(","))
2022-01-03 10:32:12 +00:00
self._devices = set(Device.query.filter(Device.id.in_(devices)).filter(
Device.owner_id == g.user.id).all())
2021-12-30 12:52:06 +00:00
2022-01-03 10:32:12 +00:00
if not self._devices:
2021-12-30 12:52:06 +00:00
return False
return True
2021-12-30 20:35:54 +00:00
def save(self):
2022-01-03 10:32:12 +00:00
self._lot.devices.update(self._devices)
db.session.add(self._lot)
db.session.commit()
def remove(self):
self._lot.devices.difference_update(self._devices)
db.session.add(self._lot)
2021-12-30 20:35:54 +00:00
db.session.commit()
class LotForm(FlaskForm):
name = StringField(u'Name', [validators.length(min=1)])
def __init__(self, *args, **kwargs):
self.id = kwargs.pop('id', None)
2022-01-04 11:45:13 +00:00
self.instance = None
if self.id:
self.instance = Lot.query.filter(Lot.id == self.id).filter(
2022-01-03 10:32:12 +00:00
Lot.owner_id == g.user.id).one()
2021-12-30 20:35:54 +00:00
super().__init__(*args, **kwargs)
2022-01-04 11:45:13 +00:00
if self.instance and not self.name.data:
self.name.data = self.instance.name
2021-12-30 20:35:54 +00:00
def save(self):
name = self.name.data.strip()
2022-01-04 11:45:13 +00:00
if self.instance:
if self.instance.name == name:
return self.instance
self.instance.name = name
2021-12-30 20:35:54 +00:00
else:
2022-01-04 11:45:13 +00:00
self.instance = Lot(name=name)
2021-12-30 20:35:54 +00:00
if not self.id:
db.session.add(self.instance)
db.session.commit()
return self.instance
2021-12-30 20:35:54 +00:00
db.session.commit()
return self.id
2022-01-03 11:28:42 +00:00
def remove(self):
2022-01-04 11:45:13 +00:00
if self.instance and not self.instance.devices:
self.instance.delete()
2022-01-03 11:28:42 +00:00
db.session.commit()
2022-01-04 11:45:13 +00:00
return self.instance
2022-01-04 11:56:28 +00:00
class NewActionForm(FlaskForm):
name = StringField(u'Name', [validators.length(max=50)])
devices = HiddenField()
2022-01-10 12:07:05 +00:00
date = DateField(u'Date', validators=(validators.Optional(),))
severity = SelectField(u'Severity', choices=[(v.name, v.name) for v in Severity])
description = TextAreaField(u'Description')
lot = HiddenField()
type = HiddenField()
2022-01-10 12:07:05 +00:00
def validate(self, extra_validators=None):
is_valid = super().validate(extra_validators)
if not is_valid:
return False
if self.lot.data:
self._lot = Lot.query.filter(Lot.id == self.lot.data).filter(
Lot.owner_id == g.user.id).one()
devices = set(self.devices.data.split(","))
self._devices = set(Device.query.filter(Device.id.in_(devices)).filter(
Device.owner_id == g.user.id).all())
if not self._devices:
return False
return True
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
2022-01-10 12:07:05 +00:00
self.instance = Action()
self.populate_obj(self.instance)
2022-01-04 11:56:28 +00:00
def save(self):
2022-01-10 12:07:05 +00:00
self.instance.devices = self._devices
self.instance.severity = Severity[self.severity.data]
db.session.add(self.instance)
db.session.commit()
return self.instance
2022-01-10 12:27:27 +00:00
class AllocateForm(NewActionForm):
start_time = DateField(u'Start time', validators=(validators.Optional(),))
end_time = DateField(u'End time', validators=(validators.Optional(),))
final_user_code = StringField(u'Final user code', [validators.length(max=50)])
transaction = StringField(u'Transaction', [validators.length(max=50)])
end_users = IntegerField(u'End users')