You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
5.8 KiB

from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed
from wtforms import StringField, SubmitField, BooleanField, URLField, IntegerField, DateField, SelectField
from wtforms.validators import DataRequired, Length, ValidationError
from minibase.blueprints.sensor.models import nbiotDevice
import minibase.blueprints.company.utils as companyUtils
import minibase.blueprints.user.utils as userUtils
import minibase.blueprints.sensor.utils as sensorUtils
from datetime import date
class nbiotDeviceForm(FlaskForm): # Defines the self class to be used for the user update
name = StringField('Device Name', validators=[DataRequired(), Length(min=3, max=50)])
serial_no = StringField('Serial Number', validators=[DataRequired(), Length(min=3, max=50)])
device_id = StringField('Device Id', validators=[DataRequired(), Length(min=3, max=50)])
imsi = StringField('Imsi No', validators=[DataRequired(), Length(min=10, max=50)])
iccid = StringField('Iccid No', validators=[DataRequired(), Length(min=10, max=100)])
ip = StringField('Ip (ipv4)', validators=[DataRequired(), Length(min=7, max=15)])
port = StringField('Port', validators=[DataRequired(), Length(min=3, max=10)])
registration_date = DateField('Registration Date', format='%Y-%m-%d', default=date.today, validators=[DataRequired()])
activation_date = DateField('Activation Date', format='%Y-%m-%d', default=date.today, validators=[DataRequired()])
deactivation_date = DateField('Deactivation Date', format='%Y-%m-%d', default=date.today, validators=[DataRequired()])
owner_id = SelectField('Owner', validators=[DataRequired()])
user_id = SelectField('User')
status_id = SelectField('Status', validators=[DataRequired()])
type_id = SelectField('Type', validators=[DataRequired()])
area_id = SelectField('Area', validators=[DataRequired()])
manufacturer_id = SelectField('Manufacturer', validators=[DataRequired()],
render_kw={
'hx-target': '#manufacturer_id', # Target div or modal for the popup
'hx-swap': 'outerHTML' # Swap the outer HTML of the target element
})
company_id = SelectField('Managed By', validators=[DataRequired()])
image_file = FileField('Update Sensor Picture', validators=[FileAllowed(['jpg', 'png'])])
submit = SubmitField()
def populate_for_updating(self, device):
self.submit.label.text = "Update"
self.user_id.choices = [(row.id, row.username) for row in userUtils.queryUserNamesWithDefault(device.device_user_id)]
self.owner_id.choices = [(row.id, row.username) for row in userUtils.queryUserNamesWithDefault(device.device_owner_id)]
self.manufacturer_id.choices = [(row.id, row.name) for row in companyUtils.queryNamesWithDefault(device.company_manufacturer_id)]
self.company_id.choices = [(row.id, row.name) for row in companyUtils.queryNamesWithDefault(device.company_owner_id)]
self.status_id.choices = [(row.id, row.name) for row in sensorUtils.queryStatusNamesWithDefault(device.status_id)]
self.type_id.choices = [(row.id, row.name) for row in sensorUtils.queryTypeNamesWithDefault(device.type_id)]
self.area_id.choices = [(row.id, row.name) for row in sensorUtils.queryAreaNamesWithDefault(device.area_id)]
def populate_for_adding(self, device):
self.submit.label.text = "Add"
if self.manufacturer_id.data:
self.manufacturer_id.choices = [(row.id, row.name) for row in companyUtils.queryNamesWithDefault(self.manufacturer_id.data)]
self.user_id.choices = [(row.id, row.username) for row in userUtils.queryUserNamesWithDefault(device.device_user_id)]
self.owner_id.choices = [(row.id, row.username) for row in userUtils.queryUserNamesWithDefault(device.device_owner_id)]
self.manufacturer_id.choices = [(row.id, row.name) for row in companyUtils.queryNamesWithDefault(device.company_manufacturer_id)]
self.company_id.choices = [(row.id, row.name) for row in companyUtils.queryNamesWithDefault(device.company_owner_id)]
self.status_id.choices = [(row.id, row.name) for row in sensorUtils.queryStatusNamesWithDefault(device.status_id)]
self.type_id.choices = [(row.id, row.name) for row in sensorUtils.queryTypeNamesWithDefault(device.type_id)]
self.area_id.choices = [(row.id, row.name) for row in sensorUtils.queryAreaNamesWithDefault(device.area_id)]
def validate_name(self, input):
if input.data != self.name:
content = nbiotDevice.query.filter_by(name=input.data).first()
if content:
raise ValidationError('That device name is taken please choose another one')
def validate_device_id(self, input):
if input.data != self.device_id:
content = nbiotDevice.query.filter_by(device_id=input.data).first()
if content:
raise ValidationError('That device id is taken please choose another one')
def validate_imsi(self, input):
if input.data != self.imsi:
content = nbiotDevice.query.filter_by(imsi=input.data).first()
if content:
raise ValidationError('That IMSI id is taken please choose another one')
def validate_iccid(self, input):
if input.data != self.iccid:
content = nbiotDevice.query.filter_by(iccid=input.data).first()
if content:
raise ValidationError('That ICCID id is taken please choose another one')
def validate_ip(self, input):
if input.data != self.ip:
content = nbiotDevice.query.filter_by(ip=input.data).first()
if content:
raise ValidationError('That IP id is taken please choose another one')