Files
yaric359/app.py
2019-01-08 16:09:15 +05:00

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