class Entite(db.Model): __tablename__ = 'ann_entite' __mapper_args__ = { 'polymorphic_identity': 'entite', 'polymorphic_on': 'type_entite' } id = db.Column(db.Integer, primary_key=True) meta_update_date = db.Column(db.Date) meta_update_user = db.Column(db.Unicode(length=100)) _nom = db.Column(db.Unicode(length=255)) _label = db.Column('nom_complet', db.Unicode(length=255)) type_entite = db.Column(db.Unicode(50)) observations = db.Column(db.Unicode(length=1000)) relations = db.relationship('Entite', secondary='ann_relations', primaryjoin=id == RelationEntite.id_parent, secondaryjoin=id == RelationEntite.id_enfant, join_depth=0, backref='parents') @hybrid_property def label(self): return self._label @hybrid_property def nom(self): return self._nom @nom.setter def nom(self, val): self._nom = val self._label = val
class User(db.Model): ''' Représente un utilisateur ''' __tablename__ = 'auth_utilisateur' id = db.Column(db.Integer, primary_key=True) login = db.Column(db.Unicode(length=100)) _password = db.Column('password', db.Unicode(length=100)) name = db.Column(db.Unicode(length=100)) email = db.Column(db.Unicode(length=250)) groups = db.relationship('Group', secondary='auth_rel_user_group', lazy='joined') @property def password(self): return self._password @password.setter def password(self, pwd): self._password = hashlib.sha256(pwd.encode('utf8')).hexdigest() def check_password(self, pwd): return self._password == hashlib.sha256(pwd.encode('utf8')).hexdigest() def to_json(self): return { 'id': self.id, 'login': self.login, 'mail': self.email, 'name': self.name, 'groups': [grp.name for grp in self.groups] }
class AgentDetail(Agent): __tablename__ = 'recr_agent_detail' id_agent = db.Column( db.Integer, db.ForeignKey('recr_agent.id'), primary_key=True) desc_mission = db.Column(db.UnicodeText) notif_list = db.Column(db.UnicodeText) type_contrat = db.Column(db.Integer) # TH ref 14 lieu = db.Column(db.Integer) # TH ref 1 logement = db.Column(db.Integer) # TH ref 10 categorie = db.Column(db.Integer) # TH ref 38 referent = db.Column(db.UnicodeText) gratification = db.Column(db.Integer) temps_travail = db.Column(db.Integer) # TH ref 33 temps_travail_autre = db.Column(db.Unicode(length=100)) residence_administrative = db.Column(db.Unicode(length=100)) convention_signee = db.Column(db.Boolean) bureau = db.Column(db.Unicode(length=50)) observations = db.Column(db.UnicodeText) meta_create = db.Column(db.Date) meta_update = db.Column(db.Date) meta_createur_fiche = db.Column(db.Unicode(length=100)) materiel = db.relationship( Thesaurus, secondary='recr_rel_agent_thesaurus_materiel', lazy='joined' ) fichiers = db.relationship( Fichier, secondary='recr_rel_agent_fichier', lazy='joined' )
class Agent(db.Model): __tablename__ = 'recr_agent' id = db.Column(db.Integer, primary_key=True) nom = db.Column(db.Unicode(length=100)) prenom = db.Column(db.Unicode(length=100)) intitule_poste = db.Column(db.Unicode(length=255)) service_id = db.Column(db.Integer) # TH ref 4 arrivee = db.Column(db.Date) depart = db.Column(db.Date)
class RefGeoBatiment(db.Model): """ Bâtiments entretenus par le parc """ __tablename__ = 'ref_geo_batiment' id = db.Column(db.Integer, primary_key=True) ref_commune = db.Column(db.Integer) reference = db.Column(db.Unicode(10)) lieu_dit = db.Column(db.Unicode(255)) designation = db.Column(db.Unicode(255))
class Changelog(db.Model): __tablename__ = 'commons_changelog' id = db.Column(db.Integer, primary_key=True) module_name = db.Column(db.Unicode(length=50)) model_name = db.Column(db.Unicode(length=50)) entity_id = db.Column(db.Integer) author = db.Column(db.Unicode(length=100)) change_type = db.Column(db.Integer) change_date = db.Column(db.Date) changes = db.Column(db.UnicodeText)
class Equipement(db.Model): ''' Mapping d'un équipement réseau ''' __tablename__ = 'sup_equipement' id = db.Column(db.Integer, primary_key=True) ip_addr = db.Column(db.Unicode(length=20)) label = db.Column(db.Unicode(length=50)) equip_type = db.Column(db.Integer) status = db.Column(db.Integer) stats = db.Column(db.UnicodeText) last_up = db.Column(db.DateTime) commentaires = db.Column(db.UnicodeText) evts = db.relationship(EvtEquipement, lazy='joined', cascade='delete')
class Materiel(db.Model): ''' Matériel avec numéro d'inventaire ''' __tablename__ = 'invent_materiel' id = db.Column(db.Integer, primary_key=True) type_mat = db.Column(db.Integer) label = db.Column(db.Unicode(length=100)) reference = db.Column(db.Unicode(length=50)) observations = db.Column(db.UnicodeText) date_entree = db.Column(db.Date) date_exclusion = db.Column(db.Date) etat = db.Column(db.Integer) disponible = db.Column(db.Integer) utilisateur_actuel = db.Column(db.Unicode(length=50)) affectations = db.relationship(Affectation, backref="materiel")
class RefGeoCommunes(db.Model): """ Communes sur lesquelles le parc entretien des bâtiments """ __tablename__ = 'ref_geo_commune' id = db.Column(db.Integer, primary_key=True) nom_commune = db.Column(db.Unicode(255))
class TypeMateriel(db.Model): ''' Thésaurus dynamique des différents types de matériel ''' __tablename__ = 'invent_type_mat' id = db.Column(db.Integer, primary_key=True) label = db.Column(db.Unicode(length=100)) observations = db.Column(db.UnicodeText)
class Demande(db.Model): """ Modele de fiche d'intervention """ __tablename__ = 'intv_demande' id = db.Column(db.Integer, primary_key=True) num_intv = db.Column(db.Unicode(length=50)) dem_date = db.Column(db.Date) dem_objet = db.Column(db.Integer) dem_localisation = db.Column(db.Integer) dem_loc_commune = db.Column(db.Unicode(length=100)) dem_loc_libelle = db.Column(db.Unicode(length=100)) dem_details = db.Column(db.UnicodeText) dem_delai = db.Column(db.Unicode(length=100)) dmdr_service = db.Column(db.Integer) dmdr_contact_nom = db.Column(db.Unicode(length=100)) dmdr_contact_email = db.Column(db.Unicode(length=255)) plan_date = db.Column(db.Unicode(length=100)) plan_commentaire = db.Column(db.UnicodeText) rea_date = db.Column(db.Date) rea_duree = db.Column(db.Integer) rea_nb_agents = db.Column(db.Integer) rea_commentaire = db.Column(db.UnicodeText) rea_annulation = db.Column(db.Integer) dem_fichiers = db.relationship(Fichier, secondary='intv_rel_demande_fichier', lazy='joined') rea_fichiers = db.relationship(Fichier, secondary='intv_rel_rea_fichier', lazy='joined')
class Affectation(db.Model): ''' Affectation ou emprunt ''' __tablename__ = 'invent_affectation' id = db.Column(db.Integer, primary_key=True) id_materiel = db.Column(db.Integer, db.ForeignKey('invent_materiel.id')) # materiel = db.relationship(Materiel, backref="affectations") type_affectation = db.Column(db.Integer) utilisateur = db.Column(db.Unicode(50)) date_affectation = db.Column(db.Date) date_retour = db.Column(db.Date) observations = db.Column(db.UnicodeText)
class TravauxBatiment(db.Model): """ Modele de fiche de travaux """ __tablename__ = 'bati_travaux' id = db.Column(db.Integer, primary_key=True) dmdr_service = db.Column(db.Integer) dmdr_contact_nom = db.Column(db.Unicode(length=100)) dmdr_contact_email = db.Column(db.Unicode(length=255)) dem_date = db.Column(db.Date) dem_importance_travaux = db.Column(db.Integer) dem_type_travaux = db.Column(db.Integer) dem_description_travaux = db.Column(db.UnicodeText) dem_commune = db.Column(db.Integer) dem_designation = db.Column(db.Integer) plan_service = db.Column(db.Integer) plan_entreprise = db.Column(db.Unicode(255)) plan_date = db.Column(db.Date) plan_commentaire = db.Column(db.UnicodeText) rea_date = db.Column(db.Date) rea_duree = db.Column(db.Integer) rea_commentaire = db.Column(db.UnicodeText) rea_annulation = db.Column(db.Integer) dem_fichiers = db.relationship(Fichier, secondary='bati_rel_travaux_fichier', lazy='joined') plan_fichiers = db.relationship(Fichier, secondary='bati_rel_plan_fichier', lazy='joined') rea_fichiers = db.relationship(Fichier, secondary='bati_rel_rea_fichier', lazy='joined')
class Fichier(db.Model): __tablename__ = 'commons_fichier' id = db.Column(db.Integer, primary_key=True) filename = db.Column(db.Unicode(length=255)) @property def file_uri(self): return '%s_%s' % (self.id, self.filename) def to_json(self): return { 'id': self.id, 'filename': self.filename, 'file_uri': self.file_uri }
class Group(db.Model): ''' Représente un groupe de sécurité ''' __tablename__ = 'auth_group' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.Unicode(length=100)) users = db.relationship('User', secondary='auth_rel_user_group') def to_json(self): return { 'id': self.id, 'name': self.name, 'users': [user.id for user in self.users] }
class AuthStatus(db.Model): ''' Informations de session utilisateur ''' __tablename__ = 'auth_status' user_id = db.Column(db.Integer, primary_key=True) token = db.Column(db.Unicode(length=100)) expiration = db.Column(db.Date) userdata = db.Column(db.UnicodeText) def as_dict(self): return { 'id': self.user_id, 'token': self.token, 'userdata': json.loads(self.userdata) }
class Correspondant(Entite): __tablename__ = 'ann_correspondant' __mapper_args__ = { 'polymorphic_identity': 'correspondant', } id_entite = db.Column(db.Integer, db.ForeignKey('ann_entite.id'), primary_key=True) civilite = db.Column(db.Unicode(length=50)) _prenom = db.Column('prenom', db.Unicode(length=100)) adresse = db.Column(db.Unicode(length=255)) adresse2 = db.Column(db.Unicode(length=255)) code_postal = db.Column(db.Unicode(length=50)) telephone = db.Column(db.Unicode(length=20)) mobile = db.Column(db.Unicode(length=20)) email = db.Column(db.Unicode(length=255)) fonction = db.Column(db.Unicode(length=100)) @hybrid_property def label(self): return self._label @hybrid_property def nom(self): return self._nom @nom.setter def nom(self, val): self._nom = val self._label = '%s %s' % (val, self._prenom) @hybrid_property def prenom(self): return self._prenom @prenom.setter def prenom(self, val): self._prenom = val self._label = '%s %s' % (self.nom, val)
class Commune(Entite): __tablename__ = 'ann_commune' __mapper_args__ = { 'polymorphic_identity': 'commune', } id_entite = db.Column(db.Integer, db.ForeignKey('ann_entite.id'), primary_key=True) adresse = db.Column(db.Unicode(length=255)) adresse2 = db.Column(db.Unicode(length=255)) code_postal = db.Column(db.Unicode(length=50)) telephone = db.Column(db.Unicode(length=20)) email = db.Column(db.Unicode(length=255)) site_internet = db.Column(db.Unicode(length=255))
class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True, index=True) email = db.Column(db.Unicode(80), default="") password_hash = db.Column(db.LargeBinary) is_facebook = db.Column(db.Boolean, default=False) fb_id = db.Column(db.Unicode(100), default="", index=True) token_hash = db.Column(db.LargeBinary) number = db.Column(db.Integer, default=0) # Is facebook # Email # List of saved songs # Times user requested from server # More metadata (ask designer) def generate_token(self): s = URLSafeSerializer(os.environ['SIGNER_SECRET']) info = { 'id': self.id, 'time': time.time(), 'email': self.email, 'fb_id': self.fb_id, } token = s.dumps(info) self.token_hash = hashlib.md5(token.encode('utf-8')).hexdigest() return token def update_number(self, num): self.number = num db.session.commit() @staticmethod def add_user(args): user = User() for key, value in args.items(): setattr(user, key, value) db.session.add(user) db.session.commit() return user @staticmethod def get_data(token): s = URLSafeSerializer(os.environ['SIGNER_SECRET']) try: return s.loads(token) except BadSignature: # Invalid token return None @staticmethod def verify_token(token): s = URLSafeSerializer(os.environ['SIGNER_SECRET']) data = get_data(token) if data is None: return None user = User.query.get(data['id']) # This block is for logging out other logged in devices (also possibly more secure) if hashlib.md5(token.encode('utf-8')).hexdigest() != user.token_hash: # Token is old (someone logged in again on another device) return None return user
class Entreprise(Entite): __tablename__ = 'ann_entreprise' __mapper_args__ = { 'polymorphic_identity': 'entreprise', } id_entite = db.Column(db.Integer, db.ForeignKey('ann_entite.id'), primary_key=True) nom_gerant = db.Column(db.Unicode(length=100)) prenom_gerant = db.Column(db.Unicode(length=100)) fonction_gerant = db.Column(db.Unicode(length=255)) adresse = db.Column(db.Unicode(length=255)) adresse2 = db.Column(db.Unicode(length=255)) code_postal = db.Column(db.Unicode(length=50)) telephone = db.Column(db.Unicode(length=20)) telephone2 = db.Column(db.Unicode(length=20)) email = db.Column(db.Unicode(length=255)) alt_email = db.Column(db.Unicode(length=255)) site_internet = db.Column(db.Unicode(length=255))
class Chrono(db.Model): __tablename__ = 'commons_chrono' reference = db.Column(db.Unicode(length=50), primary_key=True) cur_id = db.Column(db.Integer)
class Thesaurus(db.Model): __tablename__ = 'th_thesaurus' id = db.Column(db.Integer, primary_key=True) id_ref = db.Column(db.Integer) label = db.Column(db.Unicode(length=50)) menu = db.Column(db.Integer)