working database now started on Project

master
Kerem Yollu 2 years ago
parent aa2fb21444
commit 357468a941

@ -1,5 +1,6 @@
from flask import Flask from flask import Flask
from flask_sqlalchemy import SQLAlchemy from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.ext.declarative import declarative_base
from flask_bcrypt import Bcrypt from flask_bcrypt import Bcrypt
from flask_login import LoginManager from flask_login import LoginManager
from flask_mail import Mail from flask_mail import Mail
@ -22,6 +23,7 @@ def create_minibase(config_class=Config):
app = Flask(__name__) app = Flask(__name__)
app.config.from_object(Config) app.config.from_object(Config)
# (DATABASE) Initialisation # (DATABASE) Initialisation
#db.metadata.clear()
db.init_app(app) db.init_app(app)
# (PASSWORD) Initialisation # (PASSWORD) Initialisation
bcrypt.init_app(app) bcrypt.init_app(app)

@ -1,7 +1,9 @@
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, ValidationError 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 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 # Queries to be made in order to validate the form : If Relation Type exitst # Case Insensistive
def validate_name(self, name): 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: if industry_query:
raise ValidationError('That Industry Type is already registered') 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): 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 person_competence_query = Person_role.query.filter(Person_role.name.ilike(name.data)).first() # Database Querry ilike means case insessitive
if person_competence_query: 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')

@ -1,8 +1,10 @@
from flask import render_template, url_for, flash, redirect, request, Blueprint from flask import render_template, url_for, flash, redirect, request, Blueprint
from minibase import db from minibase import db
from minibase.config import themeMinibase from minibase.config import themeMinibase
from minibase.models import Company, Company_industry, Company_legal_entity, Company_relation, Person_role, Person_competence from minibase.database.models import Company, Company_legal_entity, Company_relation
from minibase.admin.forms import compLegalEntityForm, compRelationForm, compIndustryForm,personRoleForm, personCompetenceForm 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 # Declaring a blueprint
admin = Blueprint('admin', __name__) admin = Blueprint('admin', __name__)
@ -11,6 +13,7 @@ admin = Blueprint('admin', __name__)
@admin.route("/company_register_legal_entity", methods=['GET', 'POST']) @admin.route("/company_register_legal_entity", methods=['GET', 'POST'])
def company_register_legal_entity(): def company_register_legal_entity():
form = compLegalEntityForm() form = compLegalEntityForm()
legal_entities = Company_legal_entity.query.order_by(Company_legal_entity.name.asc())
if form.validate_on_submit(): if form.validate_on_submit():
companyLegal = Company_legal_entity( companyLegal = Company_legal_entity(
name=form.name.data, name=form.name.data,
@ -22,11 +25,13 @@ def company_register_legal_entity():
flash(f'{"Company Legal Entity registered!"}', 'success') flash(f'{"Company Legal Entity registered!"}', 'success')
return render_template('admin/company_register_legal_entity.html', return render_template('admin/company_register_legal_entity.html',
title='Register Company Legal Entity', title='Register Company Legal Entity',
legal_entities=legal_entities,
theme=themeMinibase, theme=themeMinibase,
form=form) form=form)
return render_template('admin/company_register_legal_entity.html', return render_template('admin/company_register_legal_entity.html',
title='Register Company Legal Entity', title='Register Company Legal Entity',
legal_entities=legal_entities,
theme=themeMinibase, theme=themeMinibase,
form=form) form=form)
@ -34,6 +39,7 @@ def company_register_legal_entity():
@admin.route("/company_register_relation", methods=['GET', 'POST']) @admin.route("/company_register_relation", methods=['GET', 'POST'])
def company_register_relation(): def company_register_relation():
form = compRelationForm() form = compRelationForm()
relations = Company_relation.query.order_by(Company_relation.name.asc())
if form.validate_on_submit(): if form.validate_on_submit():
companyRelation = Company_relation( companyRelation = Company_relation(
name=form.name.data, name=form.name.data,
@ -45,20 +51,23 @@ def company_register_relation():
flash(f'{"Company Relation registered!"}', 'success') flash(f'{"Company Relation registered!"}', 'success')
return render_template('admin/company_register_relation.html', return render_template('admin/company_register_relation.html',
title='Register Company Relation', title='Register Company Relation',
relations=relations,
theme=themeMinibase, theme=themeMinibase,
form=form) form=form)
return render_template('admin/company_register_relation.html', return render_template('admin/company_register_relation.html',
title='Register Company Relation', title='Register Company Relation',
theme=themeMinibase, theme=themeMinibase,
relations=relations,
form=form) form=form)
@admin.route("/company_register_industry", methods=['GET', 'POST']) @admin.route("/company_register_industry", methods=['GET', 'POST'])
def company_register_industry(): def company_register_industry():
form = compIndustryForm() form = compIndustryForm()
industries = Industry.query.order_by(Industry.name.asc())
if form.validate_on_submit(): if form.validate_on_submit():
companyIndustry = Company_industry( companyIndustry = Industry(
name=form.name.data, name=form.name.data,
description=form.description.data) description=form.description.data)
# Here we need to give the id of thr role as this is a foreign key # 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') flash(f'{"Company Idustry registered!"}', 'success')
return render_template('admin/company_register_industry.html', return render_template('admin/company_register_industry.html',
title='Register Company Industry', title='Register Company Industry',
industries=industries,
theme=themeMinibase, theme=themeMinibase,
form=form) form=form)
return render_template('admin/company_register_industry.html', return render_template('admin/company_register_industry.html',
title='Register Company Industry', title='Register Company Industry',
industries=industries,
theme=themeMinibase, theme=themeMinibase,
form=form) form=form)
@ -80,6 +91,7 @@ def company_register_industry():
@admin.route("/person_register_role", methods=['GET', 'POST']) @admin.route("/person_register_role", methods=['GET', 'POST'])
def person_register_role(): def person_register_role():
form = personRoleForm() form = personRoleForm()
roles = Person_role.query.order_by(Person_role.name.asc())
if form.validate_on_submit(): if form.validate_on_submit():
personRole = Person_role( personRole = Person_role(
name=form.name.data, name=form.name.data,
@ -92,17 +104,20 @@ def person_register_role():
return render_template('admin/person_register_role.html', return render_template('admin/person_register_role.html',
title='Register Person_role', title='Register Person_role',
theme=themeMinibase, theme=themeMinibase,
roles=roles,
form=form) form=form)
return render_template('admin/person_register_role.html', return render_template('admin/person_register_role.html',
title='Register Person Role', title='Register Person Role',
theme=themeMinibase, theme=themeMinibase,
roles=roles,
form=form) form=form)
@admin.route("/person_register_competence", methods=['GET', 'POST']) @admin.route("/person_register_competence", methods=['GET', 'POST'])
def person_register_competence(): def person_register_competence():
form = personCompetenceForm() form = personCompetenceForm()
competences = Person_competence.query.order_by(Person_competence.name.asc())
if form.validate_on_submit(): if form.validate_on_submit():
personCompetence = Person_competence( personCompetence = Person_competence(
name=form.name.data, name=form.name.data,
@ -114,10 +129,37 @@ def person_register_competence():
flash(f'{"Person Competence registered!"}', 'success') flash(f'{"Person Competence registered!"}', 'success')
return render_template('admin/person_register_competence.html', return render_template('admin/person_register_competence.html',
title='Register Person Competence', title='Register Person Competence',
competences=competences,
theme=themeMinibase, theme=themeMinibase,
form=form) form=form)
return render_template('admin/person_register_competence.html', return render_template('admin/person_register_competence.html',
title='Register Person Competence', title='Register Person Competence',
theme=themeMinibase, 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) form=form)

@ -1,7 +1,7 @@
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, IntegerField, SelectField from wtforms import StringField, SubmitField, IntegerField, SelectField
from wtforms.validators import DataRequired, Length, ValidationError, Optional 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 import minibase.database.utils as DbUtils

@ -1,7 +1,8 @@
from flask import render_template, url_for, flash, redirect, request, Blueprint from flask import render_template, url_for, flash, redirect, request, Blueprint
from minibase import db from minibase import db
from minibase.config import themeMinibase 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 from minibase.company.forms import companyForm
import minibase.company.utils as utils import minibase.company.utils as utils

@ -1,11 +1,12 @@
import os 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 # 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. # Note that the formating is done during the SQLAlchemy Table declaration.
def company_industry_choices(): def company_industry_choices():
choices = Company_industry.query.all() choices = Industry.query.all()
return choices 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 # And not the name. so this function returns the right ID of the name shown at the
# Register Company Form # Register Company Form
def getIndustryId(nameForId): 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 return selection.id

@ -10,6 +10,49 @@ def load_user(user_id):
return User.query.get(int(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): class Countries(db.Model):
id = db.Column(db.Integer, nullable=False, primary_key=True) id = db.Column(db.Integer, nullable=False, primary_key=True)
name = db.Column(db.String(100), nullable=False) 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) updated_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
flag = db.Column(db.Integer, nullable=False, default=1) flag = db.Column(db.Integer, nullable=False, default=1)
wikiDataId = db.Column(db.String(255)) wikiDataId = db.Column(db.String(255))
# returns a more information-rich, or official, string representation of an object # returns a more information-rich, or official, string representation of an object
# >>> Company_industry.query.all()
# >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
def __repr__(self): def __repr__(self):
return f"{self.name}" return f"{self.name}"
class Company(db.Model): class Status(db.Model):
id = db.Column(db.Integer, nullable=False, primary_key=True) id = db.Column(db.Integer, nullable=False, primary_key=True)
name = db.Column(db.String(100), nullable=False) name = db.Column(db.String(50), nullable=False)
legal_entity_id = db.Column(db.Integer, db.ForeignKey('company_legal_entity.id'), nullable=False) description = db.Column(db.String(300), nullable=False)
relation_id = db.Column(db.Integer, db.ForeignKey('company_relation.id'), nullable=False) upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
industry_id = db.Column(db.Integer, db.ForeignKey('company_industry.id'), nullable=False) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
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) # returns a more information-rich, or official, string representation of an object
street_no_ship = db.Column(db.Integer, nullable=False) def __repr__(self):
city_ship = db.Column(db.String(100), nullable=False) return f"{self.name}"
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)
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) 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) 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 # 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): def __repr__(self):
return f"{self.name}, {self.country_bill}, {self.id}" return f"{self.name}"
###################################################################################################
# Person
###################################################################################################
class Person(db.Model): class Person(db.Model):
id = db.Column(db.Integer, nullable=False, primary_key=True) id = db.Column(db.Integer, nullable=False, primary_key=True)
name = db.Column(db.String(50), nullable=False) 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) 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 # returns a more information-rich, or official, string representation of an object
# >>> Company_industry.query.all()
# >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
def __repr__(self): def __repr__(self):
return f"{self.name}" 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) 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 # returns a more information-rich, or official, string representation of an object
# >>> Company_industry.query.all()
# >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
def __repr__(self): def __repr__(self):
return f"{self.name}" return f"{self.name}"
class Company_industry(db.Model): class Person_note(db.Model):
id = db.Column(db.Integer, nullable=False, primary_key=True) id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False) title = db.Column(db.String(100), nullable=False)
description = db.Column(db.String(300), nullable=False) content = db.Column(db.Text, nullable=False)
upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) status = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
companies = db.relationship('Company', backref='companies', lazy=True) 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 # returns a more information-rich, or official, string representation of an object
# >>> Company_industry.query.all()
# >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
def __repr__(self): 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) id = db.Column(db.Integer, nullable=False, primary_key=True)
name = db.Column(db.String(50), nullable=False) name = db.Column(db.String(100), nullable=False)
description = db.Column(db.String(300), 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) 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) 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 # returns a more information-rich, or official, string representation of an object
# >>> Company_industry.query.all() # >>> company.query.all()
# >>> [('1', 'Indsutrial'), ('2', 'Consumer')] # [1, ComanyName, CompanyCounntry] (Do not change this presentation
# it will corrupt: the getCompanyId function in minibase.dabase.utils
def __repr__(self): 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) id = db.Column(db.Integer, nullable=False, primary_key=True)
name = db.Column(db.String(50), nullable=False) name = db.Column(db.String(50), nullable=False)
description = db.Column(db.String(300), nullable=False) description = db.Column(db.String(300), nullable=False)
upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) 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) 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 # returns a more information-rich, or official, string representation of an object
# >>> Company_industry.query.all()
# >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
def __repr__(self): def __repr__(self):
return f"{self.name}" return f"{self.name}"
class Status(db.Model): class Company_legal_entity(db.Model):
id = db.Column(db.Integer, nullable=False, primary_key=True) id = db.Column(db.Integer, nullable=False, primary_key=True)
name = db.Column(db.String(50), nullable=False) name = db.Column(db.String(50), nullable=False)
description = db.Column(db.String(300), nullable=False) description = db.Column(db.String(300), nullable=False)
upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) 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) 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 # returns a more information-rich, or official, string representation of an object
# >>> Company_industry.query.all()
# >>> [('1', 'Indsutrial'), ('2', 'Consumer')]
def __repr__(self): def __repr__(self):
return f"{self.name}" 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): class Company_note(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False) 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 # returns a more information-rich, or official, string representation of an object
def __repr__(self): def __repr__(self):
return f"{self.title}, {self.status}, {self.content}" return f"{self.title}, {self.status}, {self.content}"
###################################################################################################
# Project
###################################################################################################

@ -1,5 +1,7 @@
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.models import Countries, Person, Person_role, Person_competence 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 # 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 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. # Note that the formating is done during the SQLAlchemy Table declaration.
def company_industry_choices(): def company_industry_choices():
choices = Company_industry.query.all() choices = Industry.query.all()
return choices 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 # And not the name. so this function returns the right ID of the name shown at the
# Register Company Form # Register Company Form
def getIndustryId(nameForId): 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 return selection.id

@ -1,5 +1,5 @@
from flask import render_template, request, Blueprint 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.config import themeMinibase
from minibase import db from minibase import db
@ -14,8 +14,9 @@ def home():
page = request.args.get('page', 1, type=int) page = request.args.get('page', 1, type=int)
# (POSTS) Query posts usin SQLAlchemy # (POSTS) Query posts usin SQLAlchemy
posts = Post.query.order_by(Post.date_posted.asc()).paginate(per_page=2) 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 # (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") @main.route("/about")

@ -1,7 +1,7 @@
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, SelectField, DateField from wtforms import StringField, SubmitField, SelectField, DateField
from wtforms.validators import DataRequired, Length, ValidationError, Email, Optional 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 import minibase.database.utils as DbUtils

@ -1,7 +1,7 @@
from flask import render_template, url_for, flash, redirect, request, Blueprint from flask import render_template, url_for, flash, redirect, request, Blueprint
from minibase import db from minibase import db
from minibase.config import themeMinibase from minibase.config import themeMinibase
from minibase.models import Person from minibase.database.models import Person
from minibase.person.forms import personForm from minibase.person.forms import personForm
import minibase.database.utils as DbUtils import minibase.database.utils as DbUtils

@ -2,7 +2,7 @@ from flask import (render_template, url_for, flash,
redirect, request, abort, Blueprint) redirect, request, abort, Blueprint)
from flask_login import current_user, login_required from flask_login import current_user, login_required
from minibase import db from minibase import db
from minibase.models import Post from minibase.database.models import Post
from minibase.posts.forms import postForm from minibase.posts.forms import postForm
from minibase.config import themeMinibase from minibase.config import themeMinibase

Binary file not shown.

@ -43,4 +43,23 @@
</form> </form>
</div> </div>
<div class="container-fluid pt-2">
<h3> <a href="#"> Existing Industries</a> </h3>
<table class="{{ theme.tableClass }}">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Description</th>
</tr>
</thead>
<tbody>
{% for item in industries %}
<tr>
<th scope="row">{{ item.name }}</th>
<td>{{ item.description}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock content %} {% endblock content %}

@ -43,4 +43,23 @@
</form> </form>
</div> </div>
<div class="container-fluid pt-2">
<h3> <a href="#"> Existing Legal Entities</a> </h3>
<table class="{{ theme.tableClass }}">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Description</th>
</tr>
</thead>
<tbody>
{% for item in legal_entities %}
<tr>
<th scope="row">{{ item.name }}</th>
<td>{{ item.description}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock content %} {% endblock content %}

@ -45,4 +45,23 @@
</form> </form>
</div> </div>
<div class="container-fluid pt-2">
<h3> <a href="#"> Existing Relations</a> </h3>
<table class="{{ theme.tableClass }}">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Description</th>
</tr>
</thead>
<tbody>
{% for item in relations %}
<tr>
<th scope="row">{{ item.name }}</th>
<td>{{ item.description}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock content %} {% endblock content %}

@ -43,4 +43,23 @@
</form> </form>
</div> </div>
<div class="container-fluid pt-2">
<h3> <a href="#"> Existing Competences</a> </h3>
<table class="{{ theme.tableClass }}">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Description</th>
</tr>
</thead>
<tbody>
{% for item in competences %}
<tr>
<th scope="row">{{ item.name }}</th>
<td>{{ item.description}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock content %} {% endblock content %}

@ -43,4 +43,44 @@
</form> </form>
</div> </div>
<div class="container-fluid pt-2">
<div class="container-fluid pt-2">
<h3> <a href="#"> Existing Roles</a> </h3>
<table class="{{ theme.tableClass }}">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Description</th>
</tr>
</thead>
<tbody>
{% for item in roles %}
<tr>
<th scope="row">{{ item.name }}</th>
<td>{{ item.description}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<h3> <a href="#"> Existing Roles</a> </h3>
<table class="{{ theme.tableClass }}">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Description</th>
</tr>
</thead>
<tbody>
{% for item in roles %}
<tr>
<th scope="row">{{ item.name }}</th>
<td>{{ item.description}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock content %} {% endblock content %}

@ -0,0 +1,65 @@
{% extends "layout.html" %}
{% block content %}
<div class="{{ theme.userInputDivClass }}" style="{{ theme.userInputFormColor }}">
<form method="POST" action="">
{{ form.hidden_tag() }}
<fieldset class="form-group"></fieldset>
<legend class="border-bottom mb-4">Register Status</legend>
<!-- name of the company-->
<div class="form-group">
{{ form.name.label(class="form-control-label") }}
{% if form.name.errors %}
{{ form.name(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for error in form.name.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.name(class="form-control form-control-lg") }}
{% endif %}
</div>
<!-- description of the company-->
<div class="form-group">
{{ form.description.label(class="form-control-label") }}
{% if form.description.errors %}
{{ form.description(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for error in form.description.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.description(class="form-control form-control-lg") }}
{% endif %}
</div>
<!-- Submit Button -->
<div class="form-group">
{{ form.submit(class="btn btn-outline-info") }}
</div>
</form>
</div>
<div class="container-fluid pt-2">
<h3> <a href="#"> Existing Statuses</a> </h3>
<table class="{{ theme.tableClass }}">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Description</th>
</tr>
</thead>
<tbody>
{% for item in statuses %}
<tr>
<th scope="row">{{ item.name }}</th>
<td>{{ item.description}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock content %}

@ -6,25 +6,29 @@
<h1 class="text-center"> Overwiev </h1> <h1 class="text-center"> Overwiev </h1>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<h3> <a href="#">Projects</a> </h3> <h3> <a href="#">Companies</a> </h3>
<table class="{{ theme.tableClass }}"> <table class="{{ theme.tableClass }}">
<thead> <thead>
<tr> <tr>
<th scope="col">Total</th> <th scope="col">Company</th>
<th scope="col">Active</th> <th scope="col">Country</th>
<th scope="col">Inactive</th> <th scope="col">Website</th>
<th scope="col">ToDo</th> <th scope="col">Relation</th>
<th scope="col">Warning</th> <th scope="col">Industry</th>
<th scope="col">ID</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for company in companies %}
<tr> <tr>
<th scope="row">239</th> <th scope="row">{{ company.name }} {{ company.legal_entity}}</th>
<td>200</td> <td>{{ company.country_bill}}</td>
<td>39</td> <td> <a href="http://{{ company.website }}/" target="_blank" rel="noopener noreferrer">{{ company.website}} </a> </td>
<td>58</td> <td>{{ company.relation}}</td>
<td>5</td> <td>{{ company.industry}}</td>
<td>{{ company.id}}</td>
</tr> </tr>
{% endfor %}
</tbody> </tbody>
</table> </table>
</div> </div>

@ -52,6 +52,7 @@
<a class="dropdown-item" href="{{ url_for('admin.person_register_role') }}">Person Register Role</a> <a class="dropdown-item" href="{{ url_for('admin.person_register_role') }}">Person Register Role</a>
<a class="dropdown-item" href="{{ url_for('admin.person_register_competence') }}">Person Register Competence</a> <a class="dropdown-item" href="{{ url_for('admin.person_register_competence') }}">Person Register Competence</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item" href="{{ url_for('admin.status_register') }}">Status Register</a>
<a class="dropdown-item" href="#">Countries</a> <a class="dropdown-item" href="#">Countries</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Database</a> <a class="dropdown-item" href="#">Database</a>

@ -3,7 +3,7 @@ from flask_wtf.file import FileField, FileAllowed
from wtforms import StringField, PasswordField, SubmitField, BooleanField from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError
from flask_login import current_user 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 class registrationForm(FlaskForm): # Defines the form class to be used for the user registretion

@ -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 flask_login import login_user, current_user, logout_user, login_required
from minibase import db, bcrypt from minibase import db, bcrypt
from minibase.config import themeMinibase 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, from minibase.users.forms import (registrationForm, loginForm, updateAccountForm,
requestResetForm, resetPasswordForm) requestResetForm, resetPasswordForm)
from minibase.users.utils import save_picture, send_reset_email from minibase.users.utils import save_picture, send_reset_email

@ -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()

@ -1,7 +1,10 @@
from minibase import create_minibase from minibase import create_minibase
from minibase.database import models
# Enable debug option even if run directly form Python3 # Enable debug option even if run directly form Python3
app = create_minibase() app = create_minibase()
if __name__ == '__main__': if __name__ == '__main__':
app.run(debug=True) app.run(debug=True)
app.db.create_all()

Loading…
Cancel
Save