from flask_wtf import FlaskForm from flask_wtf.file import FileField, FileAllowed from wtforms import StringField, PasswordField, SubmitField, BooleanField, URLField, IntegerField, DateField, SelectField from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError from minibase.blueprints.sensor.models import nbiotDevice from datetime import date class updateNbioDeviceUpdateForm(FlaskForm): # Defines the form class to be used for the user update name = StringField('Device Name', validators=[DataRequired(), Length(min=3, max=50)]) device_id = StringField('Device Id', validators=[DataRequired(), Length(min=3, max=50)]) serial_no = StringField('Serial Number', 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()]) company_id = SelectField('Managed By', validators=[DataRequired()]) picture = FileField('Update Sensor Picture', validators=[FileAllowed(['jpg', 'png'])]) submit = SubmitField(f'Update') def __init__(self, current_device_id, *args, **kwargs): super().__init__(*args, **kwargs) self.current_device = nbiotDevice.query.get(current_device_id) def validate_name(self, input): if input.data != self.current_device.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.current_device.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.current_device.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.current_device.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.current_device.ip: content = nbiotDevice.query.filter_by(ip=input.data).first() if content: raise ValidationError('That IP id is taken please choose another one') class updateNbioDeviceAddForm(FlaskForm): # Defines the form class to be used for the user update name = StringField('Device Name', validators=[DataRequired(), Length(min=3, max=50)]) device_id = StringField('Device Id', validators=[DataRequired(), Length(min=3, max=50)]) serial_no = StringField('Serial Number', 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=[Length(min=7, max=15)]) port = StringField('Port', validators=[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()]) user_id = SelectField('Owner', validators=[DataRequired()]) status_id = SelectField('Status', validators=[DataRequired()]) type_id = SelectField('Type', validators=[DataRequired()]) area_id = SelectField('Area', validators=[DataRequired()]) manufacturer_id = SelectField('Manufacturer', validators=[DataRequired()]) company_id = SelectField('Managed By', validators=[DataRequired()]) submit = SubmitField(f'Add') def validate_name(self, input): 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): 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): 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): 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): content = nbiotDevice.query.filter_by(ip=input.data).first() if content: raise ValidationError('That IP id is taken please choose another one')