219 lines
7.1 KiB
Python
Executable File
219 lines
7.1 KiB
Python
Executable File
import datetime
|
|
|
|
from flask import Flask, render_template, request, redirect, url_for
|
|
|
|
from data.data_provider import DataProvider
|
|
from data.models import Activity, Enterprise, ContactInfo, Division, Head, \
|
|
PhoneNumber, Location
|
|
|
|
app = Flask(__name__)
|
|
|
|
data_provider = DataProvider(
|
|
"postgresql://yaric359:yaric359@localhost:5432/yaric359"
|
|
)
|
|
|
|
|
|
@app.route('/')
|
|
def hello_world():
|
|
return render_template('pages/index.html')
|
|
|
|
|
|
@app.route('/activities/add/', methods=["GET"])
|
|
def add_activity():
|
|
return render_template('pages/activities/add_activity.html')
|
|
|
|
|
|
@app.route('/activities/add/', methods=["POST"])
|
|
def add_activity_post():
|
|
name = request.form["name"]
|
|
act = Activity(None, name)
|
|
data_provider.create_activity(act)
|
|
return redirect(url_for('add_activity'))
|
|
|
|
|
|
@app.route('/activities/', methods=["GET"])
|
|
def list_activities():
|
|
return render_template('pages/activities/index.html',
|
|
data=data_provider.get_activities())
|
|
|
|
|
|
@app.route('/enterprises/add/', methods=['GET'])
|
|
def add_enterprise():
|
|
return render_template('pages/enterprises/add_enterprise.html',
|
|
activities=data_provider.get_activities())
|
|
|
|
|
|
@app.route('/enterprises/add/', methods=['POST'])
|
|
def add_enterprise_post():
|
|
name = request.form['name']
|
|
short_name = request.form['short_name']
|
|
code = request.form['code']
|
|
email = request.form['email']
|
|
activities = request.form['activities']
|
|
cont_info = ContactInfo(None, email, [], [], [], name, short_name, code)
|
|
ent = Enterprise(None, [Activity(act, '') for act in activities], [],
|
|
cont_info)
|
|
data_provider.create_enterprise(ent)
|
|
return redirect(url_for('add_enterprise'))
|
|
|
|
|
|
@app.route('/enterprises/')
|
|
def enterprise_list():
|
|
return render_template('pages/enterprises/index.html',
|
|
data=data_provider.get_enterprises())
|
|
|
|
|
|
@app.route('/enterprises/<int:ent_id>/', methods=["GET"])
|
|
def enterprise_details(ent_id):
|
|
return render_template('pages/enterprises/details.html',
|
|
ent=data_provider.get_enterprise_by_id(ent_id))
|
|
|
|
|
|
@app.route('/divisions/add/', methods=['GET'])
|
|
def add_division():
|
|
return render_template('pages/division/add_division.html',
|
|
activities=data_provider.get_activities(),
|
|
enterpises=data_provider.get_enterprises())
|
|
|
|
|
|
@app.route('/divisions/add/', methods=['POST'])
|
|
def add_division_post():
|
|
name = request.form['name']
|
|
short_name = request.form['short_name']
|
|
code = request.form['code']
|
|
email = request.form['email']
|
|
activities = request.form['activities']
|
|
ent_id = request.form['ent_id']
|
|
cont_info = ContactInfo(None, email, [], [], [], name, short_name, code)
|
|
div = Division(None, cont_info, [Activity(act, '') for act in activities])
|
|
data_provider.create_division(div, ent_id)
|
|
return redirect(url_for('add_division'))
|
|
|
|
|
|
@app.route('/heads/add/', methods=['GET'])
|
|
def add_head():
|
|
enterprises = data_provider.get_enterprises()
|
|
divs = []
|
|
for ent in enterprises:
|
|
divs.extend(data_provider.get_divisions_by_enterprise(ent.id))
|
|
return render_template(
|
|
'pages/add_head.html',
|
|
enterprises=enterprises,
|
|
divisions=divs)
|
|
|
|
|
|
@app.route('/heads/add/', methods=['POST'])
|
|
def add_head_post():
|
|
first_name = request.form['first_name']
|
|
second_name = request.form['second_name']
|
|
last_name = request.form['last_name']
|
|
con_id = request.form['con_id']
|
|
date_start = datetime.datetime.strptime(request.form['date_start'], '%Y-%m-%d').date()
|
|
date_end = datetime.datetime.strptime(request.form['date_end'], '%Y-%m-%d').date() if request.form['date_end'] else None
|
|
data_provider.create_head(Head(None, date_start, date_end, first_name, second_name, last_name), con_id)
|
|
return redirect(url_for('add_head'))
|
|
|
|
|
|
@app.route('/queries/emails/')
|
|
def no_email_query():
|
|
return render_template(
|
|
'pages/queries/count_no_emails.html',
|
|
email_count=data_provider.division_count_with_no_email()
|
|
)
|
|
|
|
|
|
@app.route('/phones/add/', methods=['GET'])
|
|
def add_phone():
|
|
enterprises = data_provider.get_enterprises()
|
|
divs = []
|
|
for ent in enterprises:
|
|
divs.extend(data_provider.get_divisions_by_enterprise(ent.id))
|
|
return render_template(
|
|
'pages/add_phone.html',
|
|
enterprises=enterprises,
|
|
divisions=divs)
|
|
|
|
|
|
@app.route('/phones/add/', methods=['POST'])
|
|
def add_phone_post():
|
|
phone = request.form['phone']
|
|
con_id = request.form['con_id']
|
|
date_start = datetime.datetime.strptime(request.form['date_start'], '%Y-%m-%d').date()
|
|
date_end = datetime.datetime.strptime(request.form['date_end'], '%Y-%m-%d').date() if request.form['date_end'] else None
|
|
data_provider.create_phone_number(PhoneNumber(None, date_start, date_end, phone), con_id)
|
|
return redirect(url_for('add_phone'))
|
|
|
|
|
|
@app.route('/queries/phones/')
|
|
def phones_on_date_of_ent():
|
|
date = request.args.get('date')
|
|
ent_id = request.args.get('ent_id')
|
|
enterprises = data_provider.get_enterprises()
|
|
if date and ent_id:
|
|
res = data_provider.division_phones_of_enterprise(
|
|
ent_id,
|
|
datetime.datetime.strptime(date, '%Y-%m-%d').date()
|
|
)
|
|
return render_template(
|
|
'pages/queries/phones.html',
|
|
enterprises=enterprises,
|
|
res=res
|
|
)
|
|
return render_template(
|
|
'pages/queries/phones.html',
|
|
enterprises=enterprises
|
|
)
|
|
|
|
|
|
@app.route('/locations/add/', methods=['GET'])
|
|
def add_location():
|
|
enterprises = data_provider.get_enterprises()
|
|
divs = []
|
|
for ent in enterprises:
|
|
divs.extend(data_provider.get_divisions_by_enterprise(ent.id))
|
|
return render_template(
|
|
'pages/add_location.html',
|
|
enterprises=enterprises,
|
|
divisions=divs)
|
|
|
|
|
|
@app.route('/locations/add/', methods=['POST'])
|
|
def add_location_post():
|
|
city = request.form['city']
|
|
street = request.form['street']
|
|
house = request.form['house']
|
|
country = request.form['country']
|
|
room = request.form['room']
|
|
con_id = request.form['con_id']
|
|
date_start = datetime.datetime.strptime(request.form['date_start'], '%Y-%m-%d').date()
|
|
date_end = datetime.datetime.strptime(request.form['date_end'], '%Y-%m-%d').date() if request.form['date_end'] else None
|
|
data_provider.create_location(Location(None,country, city, street, house, room, date_start, date_end), con_id)
|
|
return redirect(url_for('add_location'))
|
|
|
|
|
|
@app.route('/divisions/<int:div_id>/')
|
|
def division_details(div_id):
|
|
return render_template(
|
|
'pages/division/details.html',
|
|
div=data_provider.get_division_by_id(div_id)
|
|
)
|
|
|
|
|
|
@app.route('/queries/heads/')
|
|
def max_heads_change():
|
|
date_start = request.args.get('date_start')
|
|
date_end = request.args.get('date_end')
|
|
if date_end and date_start:
|
|
res = data_provider.max_heads_change(datetime.datetime.strptime(date_start, '%Y-%m-%d').date(), datetime.datetime.strptime(date_end, '%Y-%m-%d').date())
|
|
return render_template(
|
|
'pages/queries/max_heads.html',
|
|
res=res
|
|
)
|
|
return render_template(
|
|
'pages/queries/max_heads.html'
|
|
)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.run()
|