class Customer(db.Model, ModelIter): __tablename__ = 'customers' allowed_widget = True fillable = [ 'first_name', 'last_name', 'identification_number', 'primary_email', 'secondary_email', 'primary_phone', 'secondary_phone', 'address', 'source_project_id', 'province_id', ] id = db.Column(db.Integer, primary_key=True) first_name = db.Column(db.String(30, collation=configs.DB_COLLATION), nullable=False) last_name = db.Column(db.String(30, collation=configs.DB_COLLATION), nullable=False, index=True) identification_number = db.Column( db.String(25, collation=configs.DB_COLLATION), comment='National ID. i.e. Cedula, License', unique=True) primary_email = db.Column(db.String(50, collation=configs.DB_COLLATION), nullable=False, unique=True) secondary_email = db.Column(db.String(50, collation=configs.DB_COLLATION), nullable=True) primary_phone = db.Column(db.String(10, collation=configs.DB_COLLATION), nullable=False, unique=True) secondary_phone = db.Column(db.String(10, collation=configs.DB_COLLATION), nullable=True) address = db.Column(db.Text(collation=configs.DB_COLLATION), nullable=False) source_project = relationship(SourceProject, uselist=False, lazy='joined') province = relationship(Province, uselist=False, lazy='joined') created_on = db.Column(db.DateTime(), nullable=False, default=datetime.utcnow) updated_on = db.Column(db.DateTime(), nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) province_id = deferred( db.Column(db.Integer, db.ForeignKey('provinces.id'), nullable=False)) source_project_id = db.Column(db.Integer, db.ForeignKey('source_projects.id'))
class Audit(db.Model, ModelIter): __tablename__ = 'audits' id = db.Column(BigInteger, primary_key=True) date = db.Column(db.DateTime(), nullable=False, index=True, default=datetime.utcnow) user_id = db.Column(BigInteger, db.ForeignKey('users.id'), index=True, nullable=True) ip = db.Column(db.String(15), nullable=False) endpoint = db.Column(db.String(255, collation=configs.DB_COLLATION), nullable=False) method = db.Column(db.String(7, collation=configs.DB_COLLATION), nullable=False) headers = db.Column(db.Text(collation=configs.DB_COLLATION)) payload = db.Column(db.Text(collation=configs.DB_COLLATION)) response = db.Column(db.Text(collation=configs.DB_COLLATION)) user = relationship(User, uselist=False)
class UserAttributes(db.Model, ModelIter): __tablename__ = 'user_attributes' ua_id = db.Column(BigInteger, primary_key=True) user_id = db.Column(BigInteger, db.ForeignKey('users.id'), index=True) user_access = db.Column(db.Text(collation=configs.DB_COLLATION), comment='A JSON schema of table/rows access', nullable=False, default='{}') user_preferences = db.Column(db.Text(collation=configs.DB_COLLATION), comment='A JSON schema user preferences', nullable=False, default='{}') user = relationship(User, back_populates='attributes', uselist=False) @property def preferences(self): return json.loads(self.user_preferences) @property def access(self): return json.loads(self.user_access)
class CompanyProfile(db.Model, ModelIter): __tablename__ = 'company_profile' allowed_widget = True fillable = ['name', 'address', 'contact', 'logo'] id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(30, collation=configs.DB_COLLATION), unique=True, nullable=False) address = db.Column(db.Text(collation=configs.DB_COLLATION), nullable=False) contact = db.Column(db.String(10, collation=configs.DB_COLLATION), nullable=False) logo = db.Column(db.LargeBinary) settings = db.Column(MutableDict.as_mutable(db.JSON), comment='A JSON schema for global settings', nullable=False, server_default='{}')
class UserMessage(db.Model, ModelIter): __tablename__ = 'user_messages' allowed_widget = True id = db.Column(BigInteger, primary_key=True) user = relationship(User, uselist=False) date = db.Column(db.DateTime(), nullable=False, default=datetime.utcnow) read = db.Column(db.Boolean, nullable=False, index=True, server_default='0') subject = db.Column(db.String(255, collation=configs.DB_COLLATION), nullable=False) message = db.Column(db.Text(collation=configs.DB_COLLATION)) user_id = db.Column(BigInteger, db.ForeignKey('users.id'), index=True, nullable=True)
class Role(db.Model, ModelIter): __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(30, collation=configs.DB_COLLATION), index=True) permissions = db.Column(db.Text(collation=configs.DB_COLLATION)) @property def get_permissions(self): combined_permissions = default_access.copy() if self.permissions: for key, userGrants in json.loads(self.permissions).items(): for defaultKey, defaultGrants in default_access.items(): if key == defaultKey: for grant in defaultGrants: if grant not in userGrants: userGrants.append(grant) combined_permissions.update({key: userGrants}) return combined_permissions
class CustomerProject(db.Model, ModelIter): __tablename__ = 'customer_projects' allowed_widget = True fillable = [ 'name', 'address', 'lat', 'long', 'coordinates', 'nic', 'nic_title', 'circuit', 'ct', 'project_type_id', 'customer_id', 'province_id', 'distributor_id', 'rate_id', 'transformer_id', 'tr_capacity_id', 'phase_id', 'tension_id', ] id = db.Column(db.Integer, primary_key=True) customer = relationship(Customer, uselist=False, backref='customer_projects', cascade='all, delete') project_type = relationship(ProjectType, uselist=False, lazy='joined') name = db.Column(db.String(30, collation=configs.DB_COLLATION), nullable=False) address = db.Column(db.Text(collation=configs.DB_COLLATION), nullable=False) province = relationship(Province, uselist=False, lazy='joined') lat = db.Column(db.Float) long = db.Column(db.Float) coordinates = composite(Point, lat, long) distributor = relationship(Distributor, uselist=False, lazy='joined') nic = db.Column(db.Integer) nic_title = db.Column(db.String(64, collation=configs.DB_COLLATION)) rate = relationship(Rate, uselist=False, lazy='joined') circuit = db.Column(db.String(30, collation=configs.DB_COLLATION)) transformer = relationship(Transformer, uselist=False, lazy='joined') ct = db.Column(db.String(32)) # transformer ID number capacity = relationship(TrCapacity, uselist=False, lazy='joined') phase = relationship(Phase, uselist=False, lazy='joined') tension = relationship(Tension, uselist=False, lazy='joined') project_type_id = deferred( db.Column(db.Integer, db.ForeignKey('project_types.id'))) customer_id = deferred( db.Column(db.Integer, db.ForeignKey('customers.id'), index=True, nullable=False)) province_id = deferred( db.Column(db.Integer, db.ForeignKey('provinces.id'), nullable=False)) distributor_id = deferred( db.Column(db.Integer, db.ForeignKey('distributors.id'))) rate_id = deferred(db.Column(db.Integer, db.ForeignKey('rates.id'))) transformer_id = deferred( db.Column(db.Integer, db.ForeignKey('transformers.id'))) tr_capacity_id = deferred( db.Column(db.Integer, db.ForeignKey('tr_capacities.id'))) phase_id = deferred(db.Column(db.Integer, db.ForeignKey('phases.id'))) tension_id = deferred(db.Column(db.Integer, db.ForeignKey('tensions.id')))