diff --git a/webinterface/minibase/__init__.py b/webinterface/minibase/__init__.py
index 16b9eb04..785930e7 100644
--- a/webinterface/minibase/__init__.py
+++ b/webinterface/minibase/__init__.py
@@ -1,5 +1,6 @@
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
+from sqlalchemy.ext.declarative import declarative_base
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
from flask_mail import Mail
@@ -22,6 +23,7 @@ def create_minibase(config_class=Config):
app = Flask(__name__)
app.config.from_object(Config)
# (DATABASE) Initialisation
+ #db.metadata.clear()
db.init_app(app)
# (PASSWORD) Initialisation
bcrypt.init_app(app)
diff --git a/webinterface/minibase/__pycache__/__init__.cpython-311.pyc b/webinterface/minibase/__pycache__/__init__.cpython-311.pyc
index 61e43c24..6bb6acb3 100644
Binary files a/webinterface/minibase/__pycache__/__init__.cpython-311.pyc and b/webinterface/minibase/__pycache__/__init__.cpython-311.pyc differ
diff --git a/webinterface/minibase/__pycache__/models.cpython-311.pyc b/webinterface/minibase/__pycache__/models.cpython-311.pyc
index c2734476..4b18a76e 100644
Binary files a/webinterface/minibase/__pycache__/models.cpython-311.pyc and b/webinterface/minibase/__pycache__/models.cpython-311.pyc differ
diff --git a/webinterface/minibase/admin/__pycache__/forms.cpython-311.pyc b/webinterface/minibase/admin/__pycache__/forms.cpython-311.pyc
index d7c91408..423654a0 100644
Binary files a/webinterface/minibase/admin/__pycache__/forms.cpython-311.pyc and b/webinterface/minibase/admin/__pycache__/forms.cpython-311.pyc differ
diff --git a/webinterface/minibase/admin/__pycache__/models.cpython-311.pyc b/webinterface/minibase/admin/__pycache__/models.cpython-311.pyc
new file mode 100644
index 00000000..2441cba5
Binary files /dev/null and b/webinterface/minibase/admin/__pycache__/models.cpython-311.pyc differ
diff --git a/webinterface/minibase/admin/__pycache__/routes.cpython-311.pyc b/webinterface/minibase/admin/__pycache__/routes.cpython-311.pyc
index 2bbeefee..13f51ee3 100644
Binary files a/webinterface/minibase/admin/__pycache__/routes.cpython-311.pyc and b/webinterface/minibase/admin/__pycache__/routes.cpython-311.pyc differ
diff --git a/webinterface/minibase/admin/forms.py b/webinterface/minibase/admin/forms.py
index bda9d929..912edc7b 100644
--- a/webinterface/minibase/admin/forms.py
+++ b/webinterface/minibase/admin/forms.py
@@ -1,7 +1,9 @@
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, ValidationError
-from minibase.models import Company_legal_entity, Company_industry, Company_relation, Person_role, Person_competence
+from minibase.database.models import Person_role
+from minibase.database.models import Company_legal_entity, Company_relation
+from minibase.database.models import Industry
class compIndustryForm(FlaskForm): # Defines the form class to be used for the user registretion
@@ -12,7 +14,7 @@ class compIndustryForm(FlaskForm): # Defines the form class to be used for the
# Queries to be made in order to validate the form : If Relation Type exitst # Case Insensistive
def validate_name(self, name):
- industry_query = Company_industry.query.filter(Company_industry.name.ilike(name.data)).first() # Database Querry ilike means case insessitive
+ industry_query = Industry.query.filter(Industry.name.ilike(name.data)).first() # Database Querry ilike means case insessitive
if industry_query:
raise ValidationError('That Industry Type is already registered')
@@ -66,4 +68,17 @@ class personCompetenceForm(FlaskForm): # Defines the form class to be used for
def validate_name(self, name):
person_competence_query = Person_role.query.filter(Person_role.name.ilike(name.data)).first() # Database Querry ilike means case insessitive
if person_competence_query:
- raise ValidationError('That Person Conpewtence is already registered')
+ raise ValidationError('That Person Conpetence is already registered')
+
+
+class statusRegisterForm(FlaskForm): # Defines the form class to be used for the user registretion
+ # Decalarion of the fields for the form and it's propereties
+ name = StringField('Name', validators=[DataRequired()])
+ description = StringField('Description', validators=[DataRequired()])
+ submit = SubmitField('Register Status')
+
+ # Queries to be made in order to validate the form : If Person Role exitst # Case Insensistive
+ def validate_name(self, name):
+ person_competence_query = Status.query.filter(Status.name.ilike(name.data)).first() # Database Querry ilike means case insessitive
+ if person_competence_query:
+ raise ValidationError('That Status is already registered')
diff --git a/webinterface/minibase/admin/routes.py b/webinterface/minibase/admin/routes.py
index 3f698c28..e2dc41fc 100644
--- a/webinterface/minibase/admin/routes.py
+++ b/webinterface/minibase/admin/routes.py
@@ -1,8 +1,10 @@
from flask import render_template, url_for, flash, redirect, request, Blueprint
from minibase import db
from minibase.config import themeMinibase
-from minibase.models import Company, Company_industry, Company_legal_entity, Company_relation, Person_role, Person_competence
-from minibase.admin.forms import compLegalEntityForm, compRelationForm, compIndustryForm,personRoleForm, personCompetenceForm
+from minibase.database.models import Company, Company_legal_entity, Company_relation
+from minibase.database.models import Industry
+from minibase.database.models import Person_role, Person_competence
+from minibase.admin.forms import compLegalEntityForm, compRelationForm, compIndustryForm,personRoleForm, personCompetenceForm, statusRegisterForm
# Declaring a blueprint
admin = Blueprint('admin', __name__)
@@ -11,6 +13,7 @@ admin = Blueprint('admin', __name__)
@admin.route("/company_register_legal_entity", methods=['GET', 'POST'])
def company_register_legal_entity():
form = compLegalEntityForm()
+ legal_entities = Company_legal_entity.query.order_by(Company_legal_entity.name.asc())
if form.validate_on_submit():
companyLegal = Company_legal_entity(
name=form.name.data,
@@ -22,11 +25,13 @@ def company_register_legal_entity():
flash(f'{"Company Legal Entity registered!"}', 'success')
return render_template('admin/company_register_legal_entity.html',
title='Register Company Legal Entity',
+ legal_entities=legal_entities,
theme=themeMinibase,
form=form)
return render_template('admin/company_register_legal_entity.html',
title='Register Company Legal Entity',
+ legal_entities=legal_entities,
theme=themeMinibase,
form=form)
@@ -34,6 +39,7 @@ def company_register_legal_entity():
@admin.route("/company_register_relation", methods=['GET', 'POST'])
def company_register_relation():
form = compRelationForm()
+ relations = Company_relation.query.order_by(Company_relation.name.asc())
if form.validate_on_submit():
companyRelation = Company_relation(
name=form.name.data,
@@ -45,20 +51,23 @@ def company_register_relation():
flash(f'{"Company Relation registered!"}', 'success')
return render_template('admin/company_register_relation.html',
title='Register Company Relation',
+ relations=relations,
theme=themeMinibase,
form=form)
return render_template('admin/company_register_relation.html',
title='Register Company Relation',
theme=themeMinibase,
+ relations=relations,
form=form)
@admin.route("/company_register_industry", methods=['GET', 'POST'])
def company_register_industry():
form = compIndustryForm()
+ industries = Industry.query.order_by(Industry.name.asc())
if form.validate_on_submit():
- companyIndustry = Company_industry(
+ companyIndustry = Industry(
name=form.name.data,
description=form.description.data)
# Here we need to give the id of thr role as this is a foreign key
@@ -68,11 +77,13 @@ def company_register_industry():
flash(f'{"Company Idustry registered!"}', 'success')
return render_template('admin/company_register_industry.html',
title='Register Company Industry',
+ industries=industries,
theme=themeMinibase,
form=form)
return render_template('admin/company_register_industry.html',
title='Register Company Industry',
+ industries=industries,
theme=themeMinibase,
form=form)
@@ -80,6 +91,7 @@ def company_register_industry():
@admin.route("/person_register_role", methods=['GET', 'POST'])
def person_register_role():
form = personRoleForm()
+ roles = Person_role.query.order_by(Person_role.name.asc())
if form.validate_on_submit():
personRole = Person_role(
name=form.name.data,
@@ -92,17 +104,20 @@ def person_register_role():
return render_template('admin/person_register_role.html',
title='Register Person_role',
theme=themeMinibase,
+ roles=roles,
form=form)
return render_template('admin/person_register_role.html',
title='Register Person Role',
theme=themeMinibase,
+ roles=roles,
form=form)
@admin.route("/person_register_competence", methods=['GET', 'POST'])
def person_register_competence():
form = personCompetenceForm()
+ competences = Person_competence.query.order_by(Person_competence.name.asc())
if form.validate_on_submit():
personCompetence = Person_competence(
name=form.name.data,
@@ -114,10 +129,37 @@ def person_register_competence():
flash(f'{"Person Competence registered!"}', 'success')
return render_template('admin/person_register_competence.html',
title='Register Person Competence',
+ competences=competences,
theme=themeMinibase,
form=form)
return render_template('admin/person_register_competence.html',
title='Register Person Competence',
theme=themeMinibase,
+ competences=competences,
+ form=form)
+
+@admin.route("/status_register", methods=['GET', 'POST'])
+def status_register():
+ form = statusRegisterForm()
+ statuses = Status.query.order_by(Status.name.asc())
+ if form.validate_on_submit():
+ statusRegister = Status(
+ name=form.name.data,
+ description=form.description.data)
+ # Here we need to give the id of thr role as this is a foreign key
+ db.session.add(statusRegister)
+ db.session.commit()
+
+ flash(f'{"New Status registered!"}', 'success')
+ return render_template('admin/status_register.html',
+ title='Register Status',
+ statuses=statuses,
+ theme=themeMinibase,
+ form=form)
+
+ return render_template('admin/status_register.html',
+ title='Register Status',
+ statuses=statuses,
+ theme=themeMinibase,
form=form)
diff --git a/webinterface/minibase/company/__pycache__/forms.cpython-311.pyc b/webinterface/minibase/company/__pycache__/forms.cpython-311.pyc
index f283baf0..44326d88 100644
Binary files a/webinterface/minibase/company/__pycache__/forms.cpython-311.pyc and b/webinterface/minibase/company/__pycache__/forms.cpython-311.pyc differ
diff --git a/webinterface/minibase/company/__pycache__/models.cpython-311.pyc b/webinterface/minibase/company/__pycache__/models.cpython-311.pyc
new file mode 100644
index 00000000..9c7ed541
Binary files /dev/null and b/webinterface/minibase/company/__pycache__/models.cpython-311.pyc differ
diff --git a/webinterface/minibase/company/__pycache__/routes.cpython-311.pyc b/webinterface/minibase/company/__pycache__/routes.cpython-311.pyc
index 479f15ea..d60f5b50 100644
Binary files a/webinterface/minibase/company/__pycache__/routes.cpython-311.pyc and b/webinterface/minibase/company/__pycache__/routes.cpython-311.pyc differ
diff --git a/webinterface/minibase/company/__pycache__/utils.cpython-311.pyc b/webinterface/minibase/company/__pycache__/utils.cpython-311.pyc
index fbc49cde..af34ecc5 100644
Binary files a/webinterface/minibase/company/__pycache__/utils.cpython-311.pyc and b/webinterface/minibase/company/__pycache__/utils.cpython-311.pyc differ
diff --git a/webinterface/minibase/company/forms.py b/webinterface/minibase/company/forms.py
index 7842ccb9..82e3baf6 100644
--- a/webinterface/minibase/company/forms.py
+++ b/webinterface/minibase/company/forms.py
@@ -1,7 +1,7 @@
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, IntegerField, SelectField
from wtforms.validators import DataRequired, Length, ValidationError, Optional
-from minibase.models import Company
+from minibase.database.models import Company
import minibase.database.utils as DbUtils
diff --git a/webinterface/minibase/company/routes.py b/webinterface/minibase/company/routes.py
index 32081747..8d8e0464 100644
--- a/webinterface/minibase/company/routes.py
+++ b/webinterface/minibase/company/routes.py
@@ -1,7 +1,8 @@
from flask import render_template, url_for, flash, redirect, request, Blueprint
from minibase import db
from minibase.config import themeMinibase
-from minibase.models import Company, Company_industry
+from minibase.database.models import Company
+from minibase.database.models import Industry
from minibase.company.forms import companyForm
import minibase.company.utils as utils
diff --git a/webinterface/minibase/company/utils.py b/webinterface/minibase/company/utils.py
index 717b8148..324c9daa 100644
--- a/webinterface/minibase/company/utils.py
+++ b/webinterface/minibase/company/utils.py
@@ -1,11 +1,12 @@
import os
-from minibase.models import Company, Company_industry, Company_relation, Company_legal_entity
+from minibase.database.models import Company, Company_relation, Company_legal_entity
+from minibase.database.models import Industry
# Retunrs the qurry of all awailable industrie names on the table named Company_industr
# Note that the formating is done during the SQLAlchemy Table declaration.
def company_industry_choices():
- choices = Company_industry.query.all()
+ choices = Industry.query.all()
return choices
@@ -27,7 +28,7 @@ def company_relation_choices():
# And not the name. so this function returns the right ID of the name shown at the
# Register Company Form
def getIndustryId(nameForId):
- selection = Company_industry.query.filter_by(name=nameForId).first() # Gets the id of Role
+ selection = Industry.query.filter_by(name=nameForId).first() # Gets the id of Role
return selection.id
diff --git a/webinterface/minibase/database/__pycache__/models.cpython-311.pyc b/webinterface/minibase/database/__pycache__/models.cpython-311.pyc
new file mode 100644
index 00000000..7694ebc3
Binary files /dev/null and b/webinterface/minibase/database/__pycache__/models.cpython-311.pyc differ
diff --git a/webinterface/minibase/database/__pycache__/utils.cpython-311.pyc b/webinterface/minibase/database/__pycache__/utils.cpython-311.pyc
index 137541b7..8db3dfb0 100644
Binary files a/webinterface/minibase/database/__pycache__/utils.cpython-311.pyc and b/webinterface/minibase/database/__pycache__/utils.cpython-311.pyc differ
diff --git a/webinterface/minibase/countries.sql b/webinterface/minibase/database/countries.sql
similarity index 100%
rename from webinterface/minibase/countries.sql
rename to webinterface/minibase/database/countries.sql
diff --git a/webinterface/minibase/models.py b/webinterface/minibase/database/models.py
similarity index 91%
rename from webinterface/minibase/models.py
rename to webinterface/minibase/database/models.py
index 7571c931..a8b40de8 100644
--- a/webinterface/minibase/models.py
+++ b/webinterface/minibase/database/models.py
@@ -10,6 +10,49 @@ def load_user(user_id):
return User.query.get(int(user_id))
+class User(db.Model, UserMixin):
+ id = db.Column(db.Integer, primary_key=True)
+ username = db.Column(db.String(20), unique=True, nullable=False)
+ email = db.Column(db.String(120), unique=True, nullable=False)
+ image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
+ password = db.Column(db.String(60), nullable=False)
+ # Additional Querry to link a post wiht an author in the sql this won't be an field
+ posts = db.relationship('Post', backref='author', lazy=True)
+
+ def get_reset_token(self, expires_sec=1800):
+ s = Serializer(current_app.config['SECRET_KEY'], expires_sec)
+ return s.dumps({'user_id': self.id}).decode('utf-8')
+
+ @staticmethod
+ def verify_reset_token(token):
+ s = Serializer(current_app.config['SECRET_KEY'])
+ try:
+ user_id = s.loads(token)['user_id']
+ except:
+ return 0
+ return User.query.get(user_id)
+
+ # returns a more information-rich, or official, string representation of an object
+ def __repr__(self):
+ return f"User('{self.username}', '{self.email}', '{self.image_file}')"
+
+
+class Post(db.Model):
+ id = db.Column(db.Integer, primary_key=True)
+ title = db.Column(db.String(100), nullable=False)
+
+ date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
+ content = db.Column(db.Text, nullable=False)
+ user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
+
+ # returns a more information-rich, or official, string representation of an object
+ def __repr__(self):
+ return f"User('{self.title}', '{self.date_posted}')"
+
+
+###################################################################################################
+# ADMIN
+###################################################################################################
class Countries(db.Model):
id = db.Column(db.Integer, nullable=False, primary_key=True)
name = db.Column(db.String(100), nullable=False)
@@ -38,56 +81,40 @@ class Countries(db.Model):
updated_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
flag = db.Column(db.Integer, nullable=False, default=1)
wikiDataId = db.Column(db.String(255))
+
# returns a more information-rich, or official, string representation of an object
- # >>> Company_industry.query.all()
- # >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
def __repr__(self):
return f"{self.name}"
-class Company(db.Model):
+class Status(db.Model):
id = db.Column(db.Integer, nullable=False, primary_key=True)
- name = db.Column(db.String(100), nullable=False)
- legal_entity_id = db.Column(db.Integer, db.ForeignKey('company_legal_entity.id'), nullable=False)
- relation_id = db.Column(db.Integer, db.ForeignKey('company_relation.id'), nullable=False)
- industry_id = db.Column(db.Integer, db.ForeignKey('company_industry.id'), 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_bill = db.Column(db.String(100), nullable=False)
- street_no_bill = db.Column(db.Integer, nullable=False)
- city_bill = db.Column(db.String(100), nullable=False)
- post_code_bill = db.Column(db.Integer, nullable=False)
- state_bill = db.Column(db.String(100), nullable=False)
- country_bill = db.Column(db.String(100), nullable=False)
+ name = db.Column(db.String(50), nullable=False)
+ description = db.Column(db.String(300), nullable=False)
+ 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)
- street_ship = db.Column(db.String(100), nullable=False)
- street_no_ship = db.Column(db.Integer, nullable=False)
- city_ship = db.Column(db.String(100), nullable=False)
- post_code_ship = db.Column(db.Integer, nullable=False)
- state_ship = db.Column(db.String(100), nullable=False)
- country_ship = db.Column(db.String(100), nullable=False)
+ # returns a more information-rich, or official, string representation of an object
+ def __repr__(self):
+ return f"{self.name}"
- 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')
-
- employees = db.relationship('Person', backref='company', lazy=True)
- notes = db.relationship('Company_note', backref='concerns', lazy=True)
+class Industry(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)
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)
+ companies = db.relationship('Company', backref='industry', 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}"
+ return f"{self.name}"
+###################################################################################################
+# Person
+###################################################################################################
class Person(db.Model):
id = db.Column(db.Integer, nullable=False, primary_key=True)
name = db.Column(db.String(50), nullable=False)
@@ -127,8 +154,6 @@ class Person_role(db.Model):
last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
# returns a more information-rich, or official, string representation of an object
- # >>> Company_industry.query.all()
- # >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
def __repr__(self):
return f"{self.name}"
@@ -141,123 +166,97 @@ class Person_competence(db.Model):
last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
# returns a more information-rich, or official, string representation of an object
- # >>> Company_industry.query.all()
- # >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
def __repr__(self):
return f"{self.name}"
-class Company_industry(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)
- 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)
- companies = db.relationship('Company', backref='companies', lazy=True)
+class Person_note(db.Model):
+ id = db.Column(db.Integer, primary_key=True)
+ title = db.Column(db.String(100), nullable=False)
+ content = db.Column(db.Text, nullable=False)
+ status = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
+ date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
+ date_due = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
+ person_id = db.Column(db.Integer, db.ForeignKey('person.id'), nullable=False)
# returns a more information-rich, or official, string representation of an object
- # >>> Company_industry.query.all()
- # >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
def __repr__(self):
- return f"{self.name}"
+ return f"{self.title}, {self.status}, {self.content}"
-class Company_relation(db.Model):
+###################################################################################################
+# Company
+###################################################################################################
+class Company(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)
+ name = db.Column(db.String(100), nullable=False)
+
+ legal_entity_id = db.Column(db.Integer, db.ForeignKey('company_legal_entity.id'), nullable=False)
+ relation_id = db.Column(db.Integer, db.ForeignKey('company_relation.id'), nullable=False)
+ industry_id = db.Column(db.Integer, db.ForeignKey('industry.id'), 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_bill = db.Column(db.String(100), nullable=False)
+ street_no_bill = db.Column(db.Integer, nullable=False)
+ city_bill = db.Column(db.String(100), nullable=False)
+ post_code_bill = db.Column(db.Integer, nullable=False)
+ state_bill = db.Column(db.String(100), nullable=False)
+ country_bill = db.Column(db.String(100), nullable=False)
+
+ street_ship = db.Column(db.String(100), nullable=False)
+ street_no_ship = db.Column(db.Integer, nullable=False)
+ city_ship = db.Column(db.String(100), nullable=False)
+ post_code_ship = db.Column(db.Integer, nullable=False)
+ state_ship = db.Column(db.String(100), nullable=False)
+ country_ship = 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')
+
+ employees = db.relationship('Person', backref='company', lazy=True)
+ notes = db.relationship('Company_note', backref='concerns', lazy=True)
+
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)
# returns a more information-rich, or official, string representation of an object
- # >>> Company_industry.query.all()
- # >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
+ # >>> 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}"
+ return f"{self.name}, {self.country_bill}, {self.id}"
-class Company_legal_entity(db.Model):
+class Company_relation(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)
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)
+ companies = db.relationship('Company', backref='relation', lazy=True)
# returns a more information-rich, or official, string representation of an object
- # >>> Company_industry.query.all()
- # >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
def __repr__(self):
return f"{self.name}"
-class Status(db.Model):
+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)
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)
+ companies = db.relationship('Company', backref='legal_entity', lazy=True)
# returns a more information-rich, or official, string representation of an object
- # >>> Company_industry.query.all()
- # >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
def __repr__(self):
return f"{self.name}"
-class User(db.Model, UserMixin):
- id = db.Column(db.Integer, primary_key=True)
- username = db.Column(db.String(20), unique=True, nullable=False)
- email = db.Column(db.String(120), unique=True, nullable=False)
- image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
- password = db.Column(db.String(60), nullable=False)
- # Additional Querry to link a post wiht an author in the sql this won't be an field
- posts = db.relationship('Post', backref='author', lazy=True)
-
- def get_reset_token(self, expires_sec=1800):
- s = Serializer(current_app.config['SECRET_KEY'], expires_sec)
- return s.dumps({'user_id': self.id}).decode('utf-8')
-
- @staticmethod
- def verify_reset_token(token):
- s = Serializer(current_app.config['SECRET_KEY'])
- try:
- user_id = s.loads(token)['user_id']
- except:
- return 0
- return User.query.get(user_id)
-
- # returns a more information-rich, or official, string representation of an object
- def __repr__(self):
- return f"User('{self.username}', '{self.email}', '{self.image_file}')"
-
-
-class Post(db.Model):
- id = db.Column(db.Integer, primary_key=True)
- title = db.Column(db.String(100), nullable=False)
-
- date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
- content = db.Column(db.Text, nullable=False)
- user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
-
- # returns a more information-rich, or official, string representation of an object
- def __repr__(self):
- return f"User('{self.title}', '{self.date_posted}')"
-
-
-class Person_note(db.Model):
- id = db.Column(db.Integer, primary_key=True)
- title = db.Column(db.String(100), nullable=False)
- content = db.Column(db.Text, nullable=False)
- status = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
- date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
- date_due = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
- person_id = db.Column(db.Integer, db.ForeignKey('person.id'), nullable=False)
-
- # returns a more information-rich, or official, string representation of an object
- def __repr__(self):
- return f"{self.title}, {self.status}, {self.content}"
-
-
class Company_note(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
@@ -270,3 +269,7 @@ class Company_note(db.Model):
# returns a more information-rich, or official, string representation of an object
def __repr__(self):
return f"{self.title}, {self.status}, {self.content}"
+
+###################################################################################################
+# Project
+###################################################################################################
diff --git a/webinterface/minibase/database/site.db b/webinterface/minibase/database/site.db
new file mode 100644
index 00000000..a2869088
Binary files /dev/null and b/webinterface/minibase/database/site.db differ
diff --git a/webinterface/minibase/database/utils.py b/webinterface/minibase/database/utils.py
index 19d783a8..9738ca57 100644
--- a/webinterface/minibase/database/utils.py
+++ b/webinterface/minibase/database/utils.py
@@ -1,5 +1,7 @@
-from minibase.models import Company, Company_industry, Company_relation, Company_legal_entity
-from minibase.models import Countries, Person, Person_role, Person_competence
+from minibase.database.models import Company, Company_relation, Company_legal_entity
+from minibase.database.models import Industry
+from minibase.database.models import Person, Person_role, Person_competence
+from minibase.database.models import Countries
# Gets the id of company from the formated output defined at models.py for the Company Model
@@ -78,10 +80,10 @@ def company_choices():
return choices
-# Retunrs the qurry of all awailable industrie names on the table named Company_industry
+# Retunrs the qurry of all awailable industrie names on the table named Industry
# Note that the formating is done during the SQLAlchemy Table declaration.
def company_industry_choices():
- choices = Company_industry.query.all()
+ choices = Industry.query.all()
return choices
@@ -103,7 +105,7 @@ def company_relation_choices():
# And not the name. so this function returns the right ID of the name shown at the
# Register Company Form
def getIndustryId(nameForId):
- selection = Company_industry.query.filter_by(name=nameForId).first() # Gets the id of Role
+ selection = Industry.query.filter_by(name=nameForId).first() # Gets the id of Role
return selection.id
diff --git a/webinterface/minibase/main/__pycache__/routes.cpython-311.pyc b/webinterface/minibase/main/__pycache__/routes.cpython-311.pyc
index d427e3c5..17ff6aff 100644
Binary files a/webinterface/minibase/main/__pycache__/routes.cpython-311.pyc and b/webinterface/minibase/main/__pycache__/routes.cpython-311.pyc differ
diff --git a/webinterface/minibase/main/routes.py b/webinterface/minibase/main/routes.py
index bb881731..8bd15b89 100644
--- a/webinterface/minibase/main/routes.py
+++ b/webinterface/minibase/main/routes.py
@@ -1,5 +1,5 @@
from flask import render_template, request, Blueprint
-from minibase.models import Post
+from minibase.database.models import Company, Post
from minibase.config import themeMinibase
from minibase import db
@@ -14,8 +14,9 @@ def home():
page = request.args.get('page', 1, type=int)
# (POSTS) Query posts usin SQLAlchemy
posts = Post.query.order_by(Post.date_posted.asc()).paginate(per_page=2)
+ companies = Company.query.order_by(Company.name.asc())
# (HTML) Renders the template for templates/home.html
- return render_template('home.html', theme=themeMinibase, posts=posts)
+ return render_template('home.html', theme=themeMinibase, posts=posts, companies=companies)
@main.route("/about")
diff --git a/webinterface/minibase/person/__pycache__/forms.cpython-311.pyc b/webinterface/minibase/person/__pycache__/forms.cpython-311.pyc
index cee55a9b..b183639d 100644
Binary files a/webinterface/minibase/person/__pycache__/forms.cpython-311.pyc and b/webinterface/minibase/person/__pycache__/forms.cpython-311.pyc differ
diff --git a/webinterface/minibase/person/__pycache__/models.cpython-311.pyc b/webinterface/minibase/person/__pycache__/models.cpython-311.pyc
new file mode 100644
index 00000000..a75b3254
Binary files /dev/null and b/webinterface/minibase/person/__pycache__/models.cpython-311.pyc differ
diff --git a/webinterface/minibase/person/__pycache__/routes.cpython-311.pyc b/webinterface/minibase/person/__pycache__/routes.cpython-311.pyc
index 6cfebc2a..82c78706 100644
Binary files a/webinterface/minibase/person/__pycache__/routes.cpython-311.pyc and b/webinterface/minibase/person/__pycache__/routes.cpython-311.pyc differ
diff --git a/webinterface/minibase/person/forms.py b/webinterface/minibase/person/forms.py
index 2277c8fb..0c51c43c 100644
--- a/webinterface/minibase/person/forms.py
+++ b/webinterface/minibase/person/forms.py
@@ -1,7 +1,7 @@
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, SelectField, DateField
from wtforms.validators import DataRequired, Length, ValidationError, Email, Optional
-from minibase.models import Person
+from minibase.database.models import Person
import minibase.database.utils as DbUtils
diff --git a/webinterface/minibase/person/routes.py b/webinterface/minibase/person/routes.py
index 7a292be2..10f556a7 100644
--- a/webinterface/minibase/person/routes.py
+++ b/webinterface/minibase/person/routes.py
@@ -1,7 +1,7 @@
from flask import render_template, url_for, flash, redirect, request, Blueprint
from minibase import db
from minibase.config import themeMinibase
-from minibase.models import Person
+from minibase.database.models import Person
from minibase.person.forms import personForm
import minibase.database.utils as DbUtils
diff --git a/webinterface/minibase/posts/__pycache__/routes.cpython-311.pyc b/webinterface/minibase/posts/__pycache__/routes.cpython-311.pyc
index 9d3c7106..5d70422d 100644
Binary files a/webinterface/minibase/posts/__pycache__/routes.cpython-311.pyc and b/webinterface/minibase/posts/__pycache__/routes.cpython-311.pyc differ
diff --git a/webinterface/minibase/posts/routes.py b/webinterface/minibase/posts/routes.py
index cf83a122..939c236a 100644
--- a/webinterface/minibase/posts/routes.py
+++ b/webinterface/minibase/posts/routes.py
@@ -2,7 +2,7 @@ from flask import (render_template, url_for, flash,
redirect, request, abort, Blueprint)
from flask_login import current_user, login_required
from minibase import db
-from minibase.models import Post
+from minibase.database.models import Post
from minibase.posts.forms import postForm
from minibase.config import themeMinibase
diff --git a/webinterface/minibase/project/forms.py b/webinterface/minibase/project/forms.py
new file mode 100644
index 00000000..e69de29b
diff --git a/webinterface/minibase/project/routes.py b/webinterface/minibase/project/routes.py
new file mode 100644
index 00000000..e69de29b
diff --git a/webinterface/minibase/site.db b/webinterface/minibase/site.db
index 93e44643..dfcf21d4 100644
Binary files a/webinterface/minibase/site.db and b/webinterface/minibase/site.db differ
diff --git a/webinterface/minibase/templates/admin/company_register_industry.html b/webinterface/minibase/templates/admin/company_register_industry.html
index d8d74da9..3ee67fde 100644
--- a/webinterface/minibase/templates/admin/company_register_industry.html
+++ b/webinterface/minibase/templates/admin/company_register_industry.html
@@ -43,4 +43,23 @@
+
+
+
+
+
+ Name |
+ Description |
+
+
+
+ {% for item in industries %}
+
+ {{ item.name }} |
+ {{ item.description}} |
+
+ {% endfor %}
+
+
+
{% endblock content %}
diff --git a/webinterface/minibase/templates/admin/company_register_legal_entity.html b/webinterface/minibase/templates/admin/company_register_legal_entity.html
index afbdea45..a2fe24c7 100644
--- a/webinterface/minibase/templates/admin/company_register_legal_entity.html
+++ b/webinterface/minibase/templates/admin/company_register_legal_entity.html
@@ -43,4 +43,23 @@
+
+
+
+
+
+ Name |
+ Description |
+
+
+
+ {% for item in legal_entities %}
+
+ {{ item.name }} |
+ {{ item.description}} |
+
+ {% endfor %}
+
+
+
{% endblock content %}
diff --git a/webinterface/minibase/templates/admin/company_register_relation.html b/webinterface/minibase/templates/admin/company_register_relation.html
index 0065e310..b9985672 100644
--- a/webinterface/minibase/templates/admin/company_register_relation.html
+++ b/webinterface/minibase/templates/admin/company_register_relation.html
@@ -45,4 +45,23 @@
+
+
+
+
+
+ Name |
+ Description |
+
+
+
+ {% for item in relations %}
+
+ {{ item.name }} |
+ {{ item.description}} |
+
+ {% endfor %}
+
+
+
{% endblock content %}
diff --git a/webinterface/minibase/templates/admin/person_register_competence.html b/webinterface/minibase/templates/admin/person_register_competence.html
index d3c1aeef..4ea4a7b2 100644
--- a/webinterface/minibase/templates/admin/person_register_competence.html
+++ b/webinterface/minibase/templates/admin/person_register_competence.html
@@ -43,4 +43,23 @@
+
+
+
+
+
+ Name |
+ Description |
+
+
+
+ {% for item in competences %}
+
+ {{ item.name }} |
+ {{ item.description}} |
+
+ {% endfor %}
+
+
+
{% endblock content %}
diff --git a/webinterface/minibase/templates/admin/person_register_role.html b/webinterface/minibase/templates/admin/person_register_role.html
index 683a71a4..b6c14921 100644
--- a/webinterface/minibase/templates/admin/person_register_role.html
+++ b/webinterface/minibase/templates/admin/person_register_role.html
@@ -43,4 +43,44 @@
+
+
+
+
+
+
+
+ Name |
+ Description |
+
+
+
+ {% for item in roles %}
+
+ {{ item.name }} |
+ {{ item.description}} |
+
+ {% endfor %}
+
+
+
+
+
+
+
+ Name |
+ Description |
+
+
+
+ {% for item in roles %}
+
+ {{ item.name }} |
+ {{ item.description}} |
+
+ {% endfor %}
+
+
+
+
{% endblock content %}
diff --git a/webinterface/minibase/templates/admin/status_register.html b/webinterface/minibase/templates/admin/status_register.html
new file mode 100644
index 00000000..55b3c83e
--- /dev/null
+++ b/webinterface/minibase/templates/admin/status_register.html
@@ -0,0 +1,65 @@
+{% extends "layout.html" %}
+{% block content %}
+
+
+
+
+
+
+ Name |
+ Description |
+
+
+
+ {% for item in statuses %}
+
+ {{ item.name }} |
+ {{ item.description}} |
+
+ {% endfor %}
+
+
+
+{% endblock content %}
diff --git a/webinterface/minibase/templates/home.html b/webinterface/minibase/templates/home.html
index 9645bd11..cd545b09 100644
--- a/webinterface/minibase/templates/home.html
+++ b/webinterface/minibase/templates/home.html
@@ -6,25 +6,29 @@
Overwiev
-
+
- Total |
- Active |
- Inactive |
- ToDo |
- Warning |
+ Company |
+ Country |
+ Website |
+ Relation |
+ Industry |
+ ID |
+ {% for company in companies %}
- 239 |
- 200 |
- 39 |
- 58 |
- 5 |
+ {{ company.name }} {{ company.legal_entity}} |
+ {{ company.country_bill}} |
+ {{ company.website}} |
+ {{ company.relation}} |
+ {{ company.industry}} |
+ {{ company.id}} |
+ {% endfor %}
diff --git a/webinterface/minibase/templates/layout.html b/webinterface/minibase/templates/layout.html
index 193ae3b6..257c193a 100644
--- a/webinterface/minibase/templates/layout.html
+++ b/webinterface/minibase/templates/layout.html
@@ -52,6 +52,7 @@
Person Register Role
Person Register Competence
+
Status Register
Countries
Database
diff --git a/webinterface/minibase/users/__pycache__/forms.cpython-311.pyc b/webinterface/minibase/users/__pycache__/forms.cpython-311.pyc
index 906ccb87..63f2c813 100644
Binary files a/webinterface/minibase/users/__pycache__/forms.cpython-311.pyc and b/webinterface/minibase/users/__pycache__/forms.cpython-311.pyc differ
diff --git a/webinterface/minibase/users/__pycache__/routes.cpython-311.pyc b/webinterface/minibase/users/__pycache__/routes.cpython-311.pyc
index 39f07443..91c21b4f 100644
Binary files a/webinterface/minibase/users/__pycache__/routes.cpython-311.pyc and b/webinterface/minibase/users/__pycache__/routes.cpython-311.pyc differ
diff --git a/webinterface/minibase/users/forms.py b/webinterface/minibase/users/forms.py
index 3350390c..5c9a3c7e 100644
--- a/webinterface/minibase/users/forms.py
+++ b/webinterface/minibase/users/forms.py
@@ -3,7 +3,7 @@ from flask_wtf.file import FileField, FileAllowed
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError
from flask_login import current_user
-from minibase.models import User
+from minibase.database.models import User
class registrationForm(FlaskForm): # Defines the form class to be used for the user registretion
diff --git a/webinterface/minibase/users/routes.py b/webinterface/minibase/users/routes.py
index cf2d1593..608aea36 100644
--- a/webinterface/minibase/users/routes.py
+++ b/webinterface/minibase/users/routes.py
@@ -2,7 +2,7 @@ from flask import render_template, url_for, flash, redirect, request, Blueprint
from flask_login import login_user, current_user, logout_user, login_required
from minibase import db, bcrypt
from minibase.config import themeMinibase
-from minibase.models import User, Post
+from minibase.database.models import User, Post
from minibase.users.forms import (registrationForm, loginForm, updateAccountForm,
requestResetForm, resetPasswordForm)
from minibase.users.utils import save_picture, send_reset_email
diff --git a/webinterface/prepare.py b/webinterface/prepare.py
new file mode 100644
index 00000000..e9168e80
--- /dev/null
+++ b/webinterface/prepare.py
@@ -0,0 +1,134 @@
+from minibase import db, create_minibase
+from minibase.database.models import Person, Person_role, Person_competence
+from minibase.database.models import Company, Company_relation, Company_legal_entity
+from minibase.database.models import Status, Industry
+
+app = create_minibase()
+app.app_context().push()
+db.drop_all()
+db.create_all()
+
+
+###################################################################################################
+PeresonRole1 = Person_role(
+ name='Engineer',
+ description='Standart Engineer')
+db.session.add(PeresonRole1)
+
+PeresonRole2 = Person_role(
+ name='Engineerin Manager',
+ description='Manager for egineering')
+db.session.add(PeresonRole2)
+
+db.session.commit()
+
+PeresonRole3 = Person_role(
+ name='CEO',
+ description='Chief Executif Operation')
+db.session.add(PeresonRole1)
+
+PersonCompethence1 = Person_competence(
+ name='Embedded Systems',
+ description='Embedded Systems Engineer')
+db.session.add(PersonCompethence1)
+
+PersonCompethence2 = Person_role(
+ name='hardware',
+ description='Electronics Hardwre specialist')
+db.session.add(PersonCompethence2)
+
+PersonCompethence3 = Person_role(
+ name='Software',
+ description='Software engineer')
+db.session.add(PersonCompethence1)
+
+
+###################################################################################################
+industry1 = Industry(
+ name='Industrial',
+ description="Active in Industrial area")
+db.session.add(industry1)
+
+industry2 = Industry(
+ name='Consumer',
+ description="Active in Consumer area")
+db.session.add(industry1)
+
+companyRelation1 = Company_relation(
+ name='Customer',
+ description="Only Buyiong customer")
+db.session.add(companyRelation1)
+
+companyRelation2 = Company_relation(
+ name='Supplier',
+ description="Only Selling customer")
+db.session.add(companyRelation2)
+
+companyRelation3 = Company_relation(
+ name='Collaborator',
+ description="Buying and Selling customer")
+db.session.add(companyRelation2)
+
+companyLegal1 = Company_legal_entity(
+ name='AG',
+ description='AktienGezelschaft')
+db.session.add(companyLegal1)
+
+companyLegal2 = Company_legal_entity(
+ name='GMBH',
+ description='Gesellschaft mit beschränkter Haftung')
+db.session.add(companyLegal2)
+
+###################################################################################################
+status1 = Status(
+ name='Obsolete',
+ description='Obsolete from Manufacturer')
+db.session.add(status1)
+
+status2 = Status(
+ name='Active',
+ description='Everything is in order')
+db.session.add(status2)
+
+###################################################################################################
+company1 = Company(
+ name='Steinel',
+ legal_entity_id='1',
+ relation_id='1',
+ industry_id='1',
+ website='www.steinel.ch',
+ street_bill='Alemeinrstrasse',
+ street_no_bill='10',
+ city_bill='Einsiedeln',
+ post_code_bill='8406',
+ state_bill='Schyz',
+ country_bill='Switzerland',
+ street_ship='Alemeinrstrasse',
+ street_no_ship='10',
+ city_ship='Einsiedeln',
+ post_code_ship='8406',
+ state_ship='Schyz',
+ country_ship='Switzerland')
+db.session.add(company1)
+
+company2 = Company(
+ name='Kynsight',
+ legal_entity_id='1',
+ relation_id='1',
+ industry_id='1',
+ website='www.kynsight.com',
+ street_bill='Meierackerstrasse',
+ street_no_bill='10',
+ city_bill='Uster',
+ post_code_bill='8610',
+ state_bill='Zürich',
+ country_bill='Switzerland',
+ street_ship='Meierackerstrasse',
+ street_no_ship='10',
+ city_ship='Uster',
+ post_code_ship='8610',
+ state_ship='Zürich',
+ country_ship='Switzerland')
+db.session.add(company2)
+
+db.session.commit()
diff --git a/webinterface/run.py b/webinterface/run.py
index 6634dd12..9ff020bc 100644
--- a/webinterface/run.py
+++ b/webinterface/run.py
@@ -1,7 +1,10 @@
from minibase import create_minibase
+from minibase.database import models
+
# Enable debug option even if run directly form Python3
app = create_minibase()
if __name__ == '__main__':
app.run(debug=True)
+ app.db.create_all()