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.

96 lines
6.6 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
import minibase.blueprints.database.utils as dbUtils
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)])
model = StringField('Device Model', 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()])
device_owner_id = SelectField('Owner', validators=[DataRequired()])
device_user_id = SelectField('User')
status_id = SelectField('Status', validators=[DataRequired()])
type_id = SelectField('Type', validators=[DataRequired()])
area_id = SelectField('Area', validators=[DataRequired()])
company_manufacturer_id = SelectField( 'Manufacturer', validators=[DataRequired()],
render_kw={"custom_option": "search_field",
"query_table": "Companies",
"query_key": "name",
"query_return": "name"
})
company_owner_id = SelectField('Managed By', validators=[DataRequired()],
render_kw={"custom_option": "search_field",
"query_table": "Companies",
"query_key": "name",
"query_return": "name"
})
image_file = FileField('Update Sensor Picture', validators=[FileAllowed(['jpg', 'png'])])
submit = SubmitField()
def populate_for_updating(self, device):
self.originalModel = device
self.submit.label.text = "Update"
self.device_user_id.choices = [(row.id, row.username) for row in userUtils.queryUserNamesWithDefault(device.device_user_id)]
self.device_owner_id.choices = [(row.id, row.username) for row in userUtils.queryUserNamesWithDefault(device.device_owner_id)]
self.company_manufacturer_id.choices = [(row.id, row.name) for row in companyUtils.queryNamesWithDefault(device.company_manufacturer_id)]
self.company_owner_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.originalModel = device
self.submit.label.text = "Add"
if self.company_manufacturer_id.data:
self.company_manufacturer_id.choices = [(row.id, row.name) for row in companyUtils.queryNamesWithDefault(self.company_manufacturer_id.data)]
self.device_user_id.choices = [(row.id, row.username) for row in userUtils.queryUserNamesWithDefault(device.device_user_id)]
self.device_owner_id.choices = [(row.id, row.username) for row in userUtils.queryUserNamesWithDefault(device.device_owner_id)]
self.company_manufacturer_id.choices = [(row.id, row.name) for row in companyUtils.queryNamesWithDefault(device.company_manufacturer_id)]
self.company_owner_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)]
#custom validators specific naming convention: validate_<fieldname>. This is how Flask-WTF knows which field the validator is associated with.
def validate_name(self, input):
if input.data != self.originalModel.name:
if (dbUtils.queryIlikeFromTable(nbiotDevice, nbiotDevice.name, input.data)):
raise ValidationError(f'This {self.name.name} already exists.')
def validate_serial_no(self, input):
if input.data != self.originalModel.serial_no:
if (dbUtils.queryIlikeFromTable(nbiotDevice, nbiotDevice.serial_no, input.data)):
raise ValidationError(f'This {self.serial_no.name} already exists.')
def validate_imsi(self, input):
if input.data != self.originalModel.imsi:
if (dbUtils.queryIlikeFromTable(nbiotDevice, nbiotDevice.imsi, input.data)):
raise ValidationError(f'This {self.imsi.name} already exists.')
def validate_iccid(self, input):
if input.data != self.originalModel.iccid:
if (dbUtils.queryIlikeFromTable(nbiotDevice, nbiotDevice.iccid, input.data)):
raise ValidationError(f'This {self.iccid.name} already exists.')
def validate_ip(self, input):
if input.data != self.originalModel.ip:
if (dbUtils.queryIlikeFromTable(nbiotDevice, nbiotDevice.ip, input.data)):
raise ValidationError(f'This {self.ip.name} already exists.')