from datetime import datetime from minibase.app import db class Companies(db.Model): __tablename__ = 'companies' id = db.Column(db.Integer, nullable=False, primary_key=True) name = db.Column(db.String(100), nullable=False) main_company = db.Column(db.Integer, nullable=False, default='1') subsidiary_of = db.Column(db.Integer, nullable=True, default='') website = db.Column(db.String(100), nullable=True, default='') street = db.Column(db.String(100), nullable=False) street_no = db.Column(db.Integer, nullable=False) city = db.Column(db.String(100), nullable=False) post_code = db.Column(db.Integer, nullable=False) state = db.Column(db.String(100), nullable=False) classification = db.Column(db.Integer, nullable=False, default=0) comment = db.Column(db.String(300), nullable=True) image_file = db.Column(db.String(20), nullable=False, default='default_company.jpg') upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) # One To Many relationships where indexes can point o mutiple companies. # Example : One Legal_entity could cocern multiple companies. (There are surely more than just one GmBH) country_id = db.Column(db.Integer, db.ForeignKey('country.id'), nullable=True) legal_entity_id = db.Column(db.Integer, db.ForeignKey('company_legal_entity.id'), nullable=True) type_id = db.Column(db.Integer, db.ForeignKey('company_types.id'), nullable=True) industry_id = db.Column(db.Integer, db.ForeignKey('industry.id'), nullable=True) status_id = db.Column(db.Integer, db.ForeignKey('company_status.id'), nullable=True) # One To Many relationships for a company having mutliple elements of the following indexes # Example : One company would/could have many eployees employees = db.relationship('Person', backref='employer', lazy=True) projects = db.relationship('Project', backref='belongs_to', lazy=True) elements = db.relationship('Project_element', backref='company_ship_to', viewonly=True, lazy=True) notes = db.relationship('Company_note', backref='company', lazy=True) products = db.relationship('Product', backref='manufacturer', lazy=True) # returns a more information-rich, or official, string representation of an object # >>> company.query.all() # [1, ComanyName, CompanyCounntry] (Do not change this presentation # it will corrupt: the getCompanyId function in minibase.dabase.utils def __repr__(self): return f"{self.name}, {self.country_bill}, {self.id}" class Company_types(db.Model): __tablename__ = 'company_types' id = db.Column(db.Integer, nullable=False, primary_key=True) name = db.Column(db.String(50), nullable=False) description = db.Column(db.String(300), nullable=False) companies = db.relationship('Companies', backref='type', lazy=True) # returns a more information-rich, or official, string representation of an object def __repr__(self): return f"{self.name}" class Company_legal_entity(db.Model): id = db.Column(db.Integer, nullable=False, primary_key=True) name = db.Column(db.String(50), nullable=False) description = db.Column(db.String(300), nullable=False) companies = db.relationship('Company', backref='legal_entiy', lazy=True) # returns a more information-rich, or official, string representation of an object def __repr__(self): return f"{self.name}" class Company_note(db.Model): id = db.Column(db.Integer, primary_key=True) priority = db.Column(db.Integer, nullable=False, default='0') title = db.Column(db.String(100), nullable=False) content = db.Column(db.Text, nullable=False) date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) date_due = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) company_id = db.Column(db.Integer, db.ForeignKey('company.id'), nullable=False) status_id = db.Column(db.Integer, db.ForeignKey('note_status.id'), nullable=False) # returns a more information-rich, or official, string representation of an object def __repr__(self): return f"{self.title}, {self.content}"