diff options
author | Petr Šmerkl <46304018+SveterCZE@users.noreply.github.com> | 2021-01-31 00:25:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-31 00:25:53 +0100 |
commit | 2b9695c250ffd6029446063126a55d30c6dd88b5 (patch) | |
tree | 3103f2251f0aa701fbdda3a0c8ddd9c769a94762 | |
parent | 93a0fe4da0a866717fba6015e67e3b37b699950e (diff) | |
download | justice-2b9695c250ffd6029446063126a55d30c6dd88b5.tar.gz |
Add files via upload
Adding basing frontend logic based on flask / jinja2.
-rw-r--r-- | app.py | 16 | ||||
-rw-r--r-- | db_setup.py | 22 | ||||
-rw-r--r-- | forms.py | 85 | ||||
-rw-r--r-- | main.py | 189 | ||||
-rw-r--r-- | models.py | 93 | ||||
-rw-r--r-- | tables.py | 20 |
6 files changed, 425 insertions, 0 deletions
@@ -0,0 +1,16 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sun Jan 17 09:38:19 2021 + +@author: sveter +""" + +# app.py +from flask import Flask +from flask_sqlalchemy import SQLAlchemy + +app = Flask(__name__) +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///justice2.db' +app.secret_key = "123456" +db = SQLAlchemy(app)
\ No newline at end of file diff --git a/db_setup.py b/db_setup.py new file mode 100644 index 0000000..2944ef0 --- /dev/null +++ b/db_setup.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sun Jan 17 10:00:18 2021 + +@author: sveter +""" + +from sqlalchemy import create_engine +from sqlalchemy.orm import scoped_session, sessionmaker +from sqlalchemy.ext.declarative import declarative_base + +engine = create_engine('sqlite:///justice2.db', convert_unicode=True) +db_session = scoped_session(sessionmaker(autocommit=False, + autoflush=False, + bind=engine)) +Base = declarative_base() +Base.query = db_session.query_property() + +def init_db(): + import models + Base.metadata.create_all(bind=engine)
\ No newline at end of file diff --git a/forms.py b/forms.py new file mode 100644 index 0000000..b1ad78d --- /dev/null +++ b/forms.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sun Jan 17 10:05:34 2021 + +@author: sveter +""" + +from wtforms import Form, StringField, SelectField, BooleanField +# class JusticeSearchForm(Form): +# choices = [('ico', 'Identifikační číslo'), +# ('nazev', 'Obchodní firma'),] +# select = SelectField('Search for company:', choices=choices) +# search = StringField('') + +class JusticeSearchForm(Form): + search_options = [("text_anywhere","Kedkoliv v textu"), + ("text_beginning","Začátek výrazu"), + ("text_exact","Přesný výraz"), + ] + nazev_subjektu = StringField(u'Název subjektu:') + nazev_subjektu_selection = SelectField('', choices=search_options) + ico_search = StringField(u'Identifikační číslo:') + ico_search_selection = SelectField('', choices=search_options) + obec_search = StringField(u'Obec:') + obec_search_selection = SelectField('', choices=search_options) + ulice_search = StringField(u'Ulice:') + ulice_search_selection = SelectField('', choices=search_options) + oddil_search = StringField(u'Oddíl:') + oddil_search_selection = SelectField('', choices=search_options) + vlozka_search = StringField(u'Vložka:') + vlozka_search_selection = SelectField('', choices=search_options) + formy = [ ("",""), + ('Akciová společnost', 'Akciová společnost'), + ('Společnost s ručením omezeným', 'Společnost s ručením omezeným'), + ('Veřejná obchodní společnost', 'Veřejná obchodní společnost'), + ('Komanditní společnost', 'Komanditní společnost'), + ('Družstvo', 'Družstvo'), + ('Zájmové sdružení právnických osob', 'Zájmové sdružení právnických osob'), + ('Zahraniční fyzická osoba ', 'Zahraniční fyzická osoba '), + ('Ústav', 'Ústav'), + ('Společenství vlastníků jednotek', 'Společenství vlastníků jednotek'), + ('Spolek', 'Spolek'), + ('Příspěvková organizace', 'Příspěvková organizace'), + ('Pobočný spolek', 'Pobočný spolek'), + ('Odštěpný závod zahraniční právnické osoby', 'Odštěpný závod zahraniční právnické osoby'), + ('Organizační složka zahraničního nadačního fondu', 'Organizační složka zahraničního nadačního fondu'), + ('Organizační složka zahraniční nadace', 'Organizační složka zahraniční nadace'), + ('Organizace zaměstnavatelů', 'Organizace zaměstnavatelů'), + ('Odborová organizace', 'Odborová organizace'), + ('Nadační fond', 'Nadační fond'), + ('Nadace', 'Nadace'), + ('Evropská společnost', 'Evropská společnost'), + ('Evropské hospodářské zájmové sdružení', 'Evropské hospodářské zájmové sdružení'), + ('Evropská družstevní společnost', 'Evropská družstevní společnost'), + ] + pravni_forma_search = SelectField(u'Právní forma:', choices=formy) + soudy = [("",""), + ("MSPH","Městský soud v Praze"), + ("KSCB","Krajský soud v Českých Budějovicích"), + ("KSPL","Krajský soud v Plzni"), + ("KSUL","Krajský soud v Ústí nad Labem"), + ("KSHK","Krajský soud v Hradci Králové"), + ("KSBR","Krajský soud v Brně"), + ("KSOS","Krajský soud v Ostravě"), + ] + soud_search = SelectField(u'Rejstříkjový soud:', choices=soudy) + insolvent_only_search = BooleanField("Pouze společnosti s insolvenčním zápisem") + + + +class CompanyForm(Form): + oddil = [('A', 'A'), + ('B', 'B'), + ('C', 'C'), + ] + ico = StringField('ico') + nazev = StringField('nazev') + zapis = StringField('zapis') + sidlo = StringField('sidlo') + oddil = SelectField('oddil', choices=oddil) + vlozka = StringField('vlozka') + soud = StringField('soud') + +
\ No newline at end of file @@ -0,0 +1,189 @@ +# test.py +from app import app +from db_setup import init_db, db_session +from forms import JusticeSearchForm, CompanyForm +from flask import flash, render_template, request, redirect +# from models import Company, Soud +from models import Company, Obce, Ulice, Pravni_Forma, Insolvency_Events +from tables import Results + +init_db() + +@app.route('/', methods=['GET', 'POST']) +def index(): + search = JusticeSearchForm(request.form) + print(search) + if request.method == 'POST': + return search_results(search) + + return render_template('index.html', form=search) + +@app.route('/results') +def search_results(search): + results = [] + ico = search.ico_search.data + ico_search_method = search.ico_search_selection.data + nazev = search.nazev_subjektu.data + nazev_search_method = search.nazev_subjektu_selection.data + oddil = search.oddil_search.data + oddil_search_method = search.oddil_search_selection.data + vlozka = search.vlozka_search.data + vlozka_search_method = search.vlozka_search_selection.data + obec = search.obec_search.data + obec_search_method = search.obec_search_selection.data + ulice = search.ulice_search.data + ulice_search_method = search.ulice_search_selection.data + pravni_forma = search.pravni_forma_search.data + soud = search.soud_search.data + insolvent_only = search.insolvent_only_search.data + if insolvent_only == False: + qry = Company.query.join(Obce, Company.obec).join(Ulice, Company.ulice).join(Pravni_Forma, Company.pravni_forma).join(Insolvency_Events, isouter=True) + else: + qry = Company.query.join(Obce, Company.obec).join(Ulice, Company.ulice).join(Pravni_Forma, Company.pravni_forma).join(Insolvency_Events) + if ico: + if ico_search_method == "text_anywhere": + qry = qry.filter(Company.ico.contains(ico)) + elif ico_search_method == "text_beginning": + qry = qry.filter(Company.ico.like(f'{ico}%')) + elif ico_search_method == "text_exact": + qry = qry.filter(Company.ico == ico) + if nazev: + if nazev_search_method == "text_anywhere": + qry = qry.filter(Company.nazev.contains(nazev)) + elif nazev_search_method == "text_beginning": + qry = qry.filter(Company.nazev.like(f'{nazev}%')) + elif nazev_search_method == "text_exact": + qry = qry.filter(Company.nazev == nazev) + if oddil: + if oddil_search_method == "text_anywhere": + qry = qry.filter(Company.oddil.contains(oddil)) + elif oddil_search_method == "text_beginning": + qry = qry.filter(Company.oddil.like(f'{oddil}%')) + elif oddil_search_method == "text_exact": + qry = qry.filter(Company.oddil == oddil) + # qry = qry.filter(Company.oddil.contains(oddil)) + if vlozka: + if vlozka_search_method == "text_anywhere": + qry = qry.filter(Company.vlozka.contains(vlozka)) + elif vlozka_search_method == "text_beginning": + qry = qry.filter(Company.vlozka.like(f'{vlozka}%')) + elif vlozka_search_method == "text_exact": + qry = qry.filter(Company.vlozka == vlozka) + + # qry = qry.filter(Company.vlozka.contains(vlozka)) + if obec: + if obec_search_method == "text_anywhere": + qry = qry.filter(Obce.obec_jmeno.contains(obec)) + elif obec_search_method == "text_beginning": + qry = qry.filter(Obce.obec_jmeno.like(f'{obec}%')) + elif obec_search_method == "text_exact": + qry = qry.filter(Obce.obec_jmeno == obec) + # qry = qry.filter(Obce.obec_jmeno.contains(obec)) + if ulice: + if ulice_search_method == "text_anywhere": + qry = qry.filter(Ulice.ulice_jmeno.contains(ulice)) + elif ulice_search_method == "text_beginning": + qry = qry.filter(Ulice.ulice_jmeno.like(f'{ulice}%')) + elif ulice_search_method == "text_exact": + qry = qry.filter(Ulice.ulice_jmeno == ulice) + + # qry = qry.filter(Ulice.ulice_jmeno.contains(ulice)) + if pravni_forma: + qry = qry.filter(Pravni_Forma.pravni_forma.contains(pravni_forma)) + if soud: + qry = qry.filter(Company.soud.contains(soud)) + results = qry.all() + # else: + # qry = db_session.query(Company) + # results = qry.all() + # else: + # qry = db_session.query(Company) + # results = qry.all() + + if not results: + flash('No results found!') + return redirect('/') + + else: + table = Results(results) + table.border = True + # return render_template('results.html', table=table) + return render_template("results2.html", results=results, form=search) + +def search_results_BACKUP(search): + results = [] + search_string = search.data['search'] + + if search_string: + # if search.data['select'] == 'soud': + # qry = db_session.query(Company, Soud).filter( + # Soud.id==Company.soud_id).filter( + # Soud.name.contains(search_string)) + # results = [item[0] for item in qry.all()] + if search.data['select'] == 'nazev': + qry = db_session.query(Company).filter( + Company.nazev.contains(search_string)) + results = qry.all() + elif search.data['select'] == 'ico': + qry = db_session.query(Company).filter( + Company.ico.contains(search_string)) + results = qry.all() + else: + qry = db_session.query(Company) + results = qry.all() + else: + qry = db_session.query(Company) + results = qry.all() + + if not results: + flash('No results found!') + return redirect('/') + + else: + table = Results(results) + table.border = True + return render_template('results.html', table=table) + + +@app.route('/new_company', methods=['GET', 'POST']) +def new_company(): + """ + Add a new company + """ + form = CompanyForm(request.form) + + if request.method == 'POST' and form.validate(): + # save the album + company = Company() + save_changes(company, form, new=True) + flash('Company created successfully!') + return redirect('/') + return render_template('new_company.html', form=form) + +def save_changes(company, form, new=False): + """ + Save the changes to the database + """ + # Get data from form and assign it to the correct attributes + # of the SQLAlchemy table object + # soud = Soud() + # soud.name = form.soud.data + + # company.soud = soud + company.soud = form.soud.data + company.ico = form.ico.data + company.nazev = form.nazev.data + company.sidlo = form.sidlo.data + company.zapis = form.zapis.data + company.oddil = form.oddil.data + company.vlozka = form.vlozka.data + company.vymaz = form.vymaz.data + if new: + # Add the new album to the database + db_session.add(company) + # commit the data to the database + db_session.commit() + + +if __name__ == '__main__': + app.run()
\ No newline at end of file diff --git a/models.py b/models.py new file mode 100644 index 0000000..b90d01f --- /dev/null +++ b/models.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sun Jan 17 09:56:14 2021 + +@author: sveter +""" + +from app import db +from sqlalchemy.orm import relationship, backref + +# class Soud(db.Model): +# __tablename__ = "soudy" +# id = db.Column(db.Integer, primary_key=True) +# name = db.Column(db.String) + +# def __repr__(self): +# # return "<soud: {}="">".format(self.name) +# return self.name + +association_table = db.Table("obce_relation", + db.Column("company_id", db.Integer, db.ForeignKey("companies.id"), primary_key=True, nullable=False), + db.Column("obec_id", db.Integer, db.ForeignKey("obce.id"), nullable=False), + # db.PrimaryKeyConstraint('company_id', 'obec_id') + ) + +ulice_association = db.Table("ulice_relation", + db.Column("company_id", db.Integer, db.ForeignKey("companies.id"), primary_key=True, nullable=False), + db.Column("ulice_id", db.Integer, db.ForeignKey("ulice.id"), nullable=False), + # db.PrimaryKeyConstraint('company_id', 'obec_id') + ) + +pravni_forma_association=db.Table("pravni_formy_relation", + db.Column("company_id", db.Integer, db.ForeignKey("companies.id"), primary_key=True, nullable=False), + db.Column("pravni_forma_id", db.Integer, db.ForeignKey("pravni_formy.id"), nullable=False), + ) + +class Company(db.Model): + + __tablename__ = "companies" + id = db.Column(db.Integer, primary_key=True) + ico = db.Column(db.String) + nazev = db.Column(db.String) + zapis = db.Column(db.String) + sidlo = db.Column(db.String) + oddil = db.Column(db.String) + vlozka = db.Column(db.String) + soud = db.Column(db.String) + obec = db.relationship("Obce", secondary=association_table, backref="companies") + ulice = db.relationship("Ulice", secondary=ulice_association, backref="companies") + pravni_forma = db.relationship("Pravni_Forma", secondary=pravni_forma_association, backref="companies") + insolvence = db.relationship("Insolvency_Events", backref="companies") + + +class Obce(db.Model): + __tablename__ = "obce" + id = db.Column(db.Integer, primary_key=True) + obec_jmeno = db.Column(db.String) + company_obec = db.relationship("Company", secondary=association_table, backref="obce") + +class Ulice(db.Model): + __tablename__ = "ulice" + id = db.Column(db.Integer, primary_key=True) + ulice_jmeno = db.Column(db.String) + company_ulice = db.relationship("Company", secondary=ulice_association) + +class Pravni_Forma(db.Model): + __tablename__ = "pravni_formy" + id = db.Column(db.Integer, primary_key=True) + pravni_forma = db.Column(db.String) + company_pravni_forma = db.relationship("Company", secondary=pravni_forma_association) + +class Insolvency_Events(db.Model): + __tablename__ = "insolvency_events" + id = db.Column(db.Integer, primary_key=True) + company_id = db.Column(db.String, db.ForeignKey("companies.id")) + company = relationship("Company", backref="insolvency_events") + insolvency_event = db.Column(db.String) + + +# class Association(db.Model): +# __tablename__ = "obce_relation" +# company_id = db.Column(db.Integer, db.ForeignKey('companies.id'), primary_key=True) +# obec_id = db.Column(db.Integer, db.ForeignKey('obce.id')) + +# company = relationship("Company", back_populates = "Obce") +# obec = relationship("Obce", back_populates = "Company") + + + + + +# </soud:>
\ No newline at end of file diff --git a/tables.py b/tables.py new file mode 100644 index 0000000..e9586c9 --- /dev/null +++ b/tables.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sun Jan 17 11:52:57 2021 + +@author: sveter +""" + +from flask_table import Table, Col + +class Results(Table): + classes = ['table'] + id = Col('Id', show=False) + nazev = Col('Obchodní firma') + ico = Col('IČ') + sidlo = Col('Sídlo') + zapis = Col('Zápis do OR') + oddil = Col('Oddíl') + vlozka = Col('Vložka') + soud = Col('Rejstříkový soud')
\ No newline at end of file |