Skip to content

Commit 644b187

Browse files
committed
feature #21:supported remembering page and form data under reading reports
1 parent c630f7b commit 644b187

File tree

6 files changed

+99
-45
lines changed

6 files changed

+99
-45
lines changed

app/__init__.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@
44
from flask_babelex import Babel
55
from flask_bootstrap import Bootstrap
66
from flask_mail import Mail
7-
from flask_moment import Moment
87
from flask_login import LoginManager
98
from flask_sqlalchemy import SQLAlchemy
109
from config import config
1110
from .json_encoder import JSONEncoder
1211

1312

1413
bootstrap = Bootstrap()
15-
moment = Moment()
1614
mail = Mail()
1715
db = SQLAlchemy()
1816

@@ -39,7 +37,6 @@ def create_app(config_name):
3937

4038
mail.init_app(app)
4139
bootstrap.init_app(app)
42-
moment.init_app(app)
4340
db.init_app(app)
4441
login_manager.init_app(app)
4542
babel.init_app(app)

app/models.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ def reset_password(self, token, new_password):
106106
db.session.add(self)
107107
return True
108108

109-
110109
@property
111110
def is_admin(self):
112111
return self.email == current_app.config['FLASK_ADMIN_EMAIL'] or \

app/report/views.py

Lines changed: 55 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from flask import render_template, redirect, url_for, current_app, flash, Markup
1+
from flask import render_template, redirect,request, url_for, \
2+
current_app, flash, Markup
23
from flask_babelex import lazy_gettext as _
34
from flask_login import current_user
45
from datetime import datetime, timedelta, date
@@ -114,47 +115,56 @@ def read(page_count=1):
114115

115116

116117
@report.route('/read/department/', methods=['GET', 'POST'])
117-
@report.route('/read/department/<int:page_count>', methods=['GET', 'POST'])
118118
@permission_required(Permission.READ_DEPARTMENT_REPORT)
119-
def read_department(page_count=1):
119+
def read_department():
120120
form = ReadDepartmentForm()
121121

122-
user_choices = [('*', '*')]
122+
user_choices = [('0', '*')]
123123
user_choices.extend([(
124124
str(user.id), user.username) for user in User.query.all()])
125125
form.user.choices = user_choices
126126

127-
qst = Report.query.filter_by()
127+
page = request.args.get('page', 1, type=int)
128+
user_id = request.args.get('user', 0, type=int)
129+
start_at = request.args.get('start_at', '', type=str)
130+
end_at = request.args.get('end_at', '', type=str)
131+
132+
start_at = get_last_week_start_at() if not start_at \
133+
else datetime.strptime(start_at[:10], '%Y-%m-%d')
134+
end_at = date.today()+timedelta(hours=24) if not end_at \
135+
else datetime.strptime(end_at[:10], '%Y-%m-%d')
136+
137+
form.start_at.data = start_at
138+
form.end_at.data = end_at
139+
form.user.data = str(user_id)
128140

129141
ids = [user.id for user in User.query.filter_by(
130142
department_id=current_user.department_id)]
131-
qst = qst.filter(Report.author_id.in_(ids))
132143

133-
form.start_at.data = get_last_week_start_at()
134-
form.end_at.data = date.today()+timedelta(hours=24)
144+
qst = Report.query.filter_by().filter(
145+
Report.created_at.between(start_at, end_at)).filter(
146+
Report.author_id.in_(ids))
147+
148+
if user_id:
149+
qst = qst.filter_by(author_id=user_id)
135150

136151
if form.validate_on_submit():
137-
qst = qst.filter(Report.created_at.between(
138-
form.start_at.data, form.end_at.data))
139-
if not form.user.data == '*':
140-
qst = qst.filter_by(author_id=form.user.data)
152+
pass
141153

142154
pagination = qst.filter_by().order_by(Report.year.desc()).order_by(
143155
Report.week_count.desc()).order_by(Report.created_at.desc()).paginate(
144-
page=page_count, per_page=current_app.config['PER_PAGE'])
156+
page=page, per_page=current_app.config['PER_PAGE'])
145157

146158
return render_template('report/read_department.html',
147159
form=form,
148160
pagination=pagination)
149161

150162

151163
@report.route('/read/crew/', methods=['GET', 'POST'])
152-
@report.route('/read/crew/<int:page_count>', methods=['GET', 'POST'])
153164
@permission_required(Permission.READ_ALL_REPORT)
154-
def read_crew(page_count=1):
165+
def read_crew():
155166
form = ReadCrewForm()
156-
157-
user_choices = [('*', '*')]
167+
user_choices = [('0', '*')]
158168
department_choices = user_choices[:]
159169

160170
for dept in Department.query.all():
@@ -164,24 +174,40 @@ def read_crew(page_count=1):
164174

165175
form.user.choices = user_choices
166176
form.department.choices = department_choices
167-
form.start_at.data = get_last_week_start_at()
168-
form.end_at.data = date.today()+timedelta(hours=24)
169177

170-
qst = Report.query.filter_by()
178+
page = request.args.get('page', 1, type=int)
179+
department_id = request.args.get('department', 0, type=int)
180+
user_id = request.args.get('user', 0, type=int)
181+
start_at = request.args.get('start_at', '', type=str)
182+
end_at = request.args.get('end_at', '', type=str)
183+
184+
start_at = get_last_week_start_at() if not start_at \
185+
else datetime.strptime(start_at[:10], '%Y-%m-%d')
186+
end_at = date.today()+timedelta(hours=24) if not end_at \
187+
else datetime.strptime(end_at[:10], '%Y-%m-%d')
188+
189+
form.start_at.data = start_at
190+
form.end_at.data = end_at
191+
form.user.data = str(user_id)
192+
form.department.data = str(department_id)
193+
194+
qst = Report.query.filter_by().filter(
195+
Report.created_at.between(start_at, end_at))
196+
197+
if department_id:
198+
ids = [user.id for user in User.query.filter_by(
199+
department_id=department_id)]
200+
qst = qst.filter(Report.author_id.in_(ids))
201+
202+
if user_id:
203+
qst = qst.filter_by(author_id=user_id)
171204

172205
if form.validate_on_submit():
173-
qst = qst.filter(Report.created_at.between(
174-
form.start_at.data, form.end_at.data))
175-
if not form.department.data == '*':
176-
ids = [user.id for user in User.query.filter_by(
177-
department_id=form.department.data)]
178-
qst = qst.filter(Report.author_id.in_(ids))
179-
if not form.user.data == '*':
180-
qst = qst.filter_by(author_id=form.user.data)
206+
pass
181207

182208
pagination = qst.filter_by().order_by(Report.year.desc()).order_by(
183209
Report.week_count.desc()).order_by(Report.created_at.desc()).paginate(
184-
page=page_count, per_page=current_app.config['PER_PAGE'])
210+
page=page, per_page=current_app.config['PER_PAGE'])
185211

186212
return render_template('report/read_crew.html',
187213
form=form,

app/templates/report/read_crew.html

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44

55
{% block page_content %}
66

7-
<form class="form form-inline" method="post" role="form">
8-
{{ form.hidden_tag() }}
7+
<form class="form form-inline" method="GET" role="form">
98
{{ wtf.form_errors(form, hiddens="only") }}
109

1110
<i class="fa fa-calendar-minus-o" aria-hidden="true"></i>{{ wtf.form_field(form.start_at) }}
@@ -34,13 +33,33 @@
3433

3534
<ul class="pager">
3635
{% if pagination.has_prev %}
37-
<li class="previous"><a href="/report/read/crew/{{pagination.page-1 }}">&larr; Newer </a></li>
36+
<li class="previous">
37+
<a href="{{ url_for('report.read_crew',
38+
page=pagination.page-1,
39+
start_at=form.start_at.data,
40+
end_at=form.end_at.data,
41+
user=form.user.data,
42+
department=form.department.data
43+
)}}">
44+
&larr; Newer
45+
</a>
46+
</li>
3847
{% else %}
3948
<li class="previous disabled"><a href="#">&larr; Newer </a></li>
4049
{% endif %}
4150

4251
{% if pagination.has_next %}
43-
<li class="next"><a href="/report/read/crew/{{pagination.page+1}}">Older &rarr;</a></li>
52+
<li class="next">
53+
<a href="{{ url_for('report.read_crew',
54+
page=pagination.page+1,
55+
start_at=form.start_at.data,
56+
end_at=form.end_at.data,
57+
user=form.user.data,
58+
department=form.department.data
59+
)}}">
60+
Older &rarr;
61+
</a>
62+
</li>
4463
{% else %}
4564
<li class="next disabled"><a href="#">Older &rarr;</a></li>
4665
{% endif %}

app/templates/report/read_department.html

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,17 @@
44

55
{% block page_content %}
66

7-
<form class="form form-inline" method="post" role="form">
8-
{{ form.hidden_tag() }}
7+
<form class="form form-inline" method="GET" role="form">
98
{{ wtf.form_errors(form, hiddens="only") }}
109

1110
<i class="fa fa-calendar-minus-o" aria-hidden="true"></i>{{ wtf.form_field(form.start_at) }}
1211
<i class="fa fa-calendar-plus-o" aria-hidden="true"></i>{{ wtf.form_field(form.end_at) }}
13-
<!--<hr style="height:10pt; visibility:hidden;" />-->
1412

1513
<i class="fa fa-user" aria-hidden="true"></i>{{ wtf.form_field(form.user) }}
1614
<i class="fa fa-search" aria-hidden="true"></i>{{ wtf.form_field(form.submit) }}
1715
</form>
1816
<hr>
1917

20-
2118
{% for report in pagination.items %}
2219
<div class="post-preview">
2320

@@ -33,14 +30,31 @@
3330

3431
<ul class="pager">
3532
{% if pagination.has_prev %}
36-
<li class="previous"><a href="/report/read/department/{{pagination.page-1 }}">&larr; Newer </a></li>
33+
<li class="previous">
34+
<a href="{{ url_for('report.read_department',
35+
page=pagination.page-1,
36+
start_at=form.start_at.data,
37+
end_at=form.end_at.data,
38+
user=form.user.data,
39+
)}}">
40+
&larr; Newer
41+
</a>
42+
</li>
3743
{% else %}
3844
<li class="previous disabled"><a href="#">&larr; Newer </a></li>
3945
{% endif %}
4046

4147
{% if pagination.has_next %}
42-
<li class="next"><a href="/report/read/department/{{pagination.page+1}}">Older &rarr;</a></li>
43-
{% else %}
48+
<li class="next">
49+
<a href="{{ url_for('report.read_department',
50+
page=pagination.page+1,
51+
start_at=form.start_at.data,
52+
end_at=form.end_at.data,
53+
user=form.user.data,
54+
)}}">
55+
Older &rarr;
56+
</a>
57+
</li> {% else %}
4458
<li class="next disabled"><a href="#">Older &rarr;</a></li>
4559
{% endif %}
4660
</ul>

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
flask
22
flask_bootstrap
33
flask_login
4-
flask_moment
54
flask_script
65
flask_wtf
76
Flask-Mail

0 commit comments

Comments
 (0)