Merge branch 'master' into patch-1
This commit is contained in:
commit
e86fce0a7e
8 changed files with 108 additions and 75 deletions
1
.tool-versions
Normal file
1
.tool-versions
Normal file
|
@ -0,0 +1 @@
|
|||
python 3.9.2
|
|
@ -3,11 +3,13 @@
|
|||
"""Main Haldis script"""
|
||||
|
||||
import logging
|
||||
import sentry_sdk
|
||||
import typing
|
||||
from datetime import datetime
|
||||
from logging.handlers import TimedRotatingFileHandler
|
||||
|
||||
from admin import init_admin
|
||||
from config import Configuration
|
||||
from flask import Flask, render_template, Response
|
||||
from flask_bootstrap import Bootstrap, StaticCDN
|
||||
from flask_debugtoolbar import DebugToolbarExtension
|
||||
|
@ -19,6 +21,7 @@ from login import init_login
|
|||
from markupsafe import Markup
|
||||
from models import db
|
||||
from models.anonymous_user import AnonymouseUser
|
||||
from sentry_sdk.integrations.flask import FlaskIntegration
|
||||
from utils import euro_string, price_range_string, ignore_none
|
||||
from zeus import init_oauth
|
||||
|
||||
|
@ -177,5 +180,11 @@ def create_app():
|
|||
|
||||
# For usage when you directly call the script with python
|
||||
if __name__ == "__main__":
|
||||
if Configuration.SENTRY_DSN:
|
||||
sentry_sdk.init(
|
||||
dsn=Configuration.SENTRY_DSN,
|
||||
integrations=[FlaskIntegration()]
|
||||
)
|
||||
|
||||
app, app_mgr = create_app()
|
||||
app_mgr.run()
|
||||
|
|
|
@ -12,5 +12,6 @@ class Configuration:
|
|||
SECRET_KEY = "<change>"
|
||||
SLACK_WEBHOOK = None
|
||||
LOGFILE = "haldis.log"
|
||||
SENTRY_DSN = None
|
||||
ZEUS_KEY = "tomtest"
|
||||
ZEUS_SECRET = "blargh"
|
||||
|
|
|
@ -30,8 +30,11 @@ class OrderForm(Form):
|
|||
def populate(self) -> None:
|
||||
"Fill in the options for courier for an Order"
|
||||
if current_user.is_admin():
|
||||
self.courier_id.choices = [(0, None)] + [
|
||||
(u.id, u.username) for u in User.query.order_by("username")
|
||||
self.courier_id.choices = [
|
||||
(0, None),
|
||||
(current_user.id, current_user.username),
|
||||
] + [
|
||||
(u.id, u.username) for u in User.query.order_by("username") if u.id != current_user.id
|
||||
]
|
||||
else:
|
||||
self.courier_id.choices = [
|
||||
|
|
|
@ -155,60 +155,66 @@
|
|||
|
||||
<div class="box" id="order_info">
|
||||
<h3>Order information</h3>
|
||||
<dl>
|
||||
<div>
|
||||
<dt>Order opens</dt>
|
||||
<dd>{{ order.starttime.strftime("%Y-%m-%d, %H:%M") }}</dd>
|
||||
<div class="row">
|
||||
<dl class="col-md-10 col-lg-8">
|
||||
<div>
|
||||
<dt>Order opens</dt>
|
||||
<dd>{{ order.starttime.strftime("%Y-%m-%d, %H:%M") }}</dd>
|
||||
|
||||
<dt>Order closes</dt>
|
||||
<dd>
|
||||
{% if order.stoptime %}
|
||||
{% set stoptimefmt = (
|
||||
"%H:%M" if order.stoptime.date() == order.starttime.date()
|
||||
else "%Y-%m-%d, %H:%M"
|
||||
) %}
|
||||
{{ order.stoptime.strftime(stoptimefmt) }} ({{ order.stoptime|countdown }})
|
||||
{% else %}
|
||||
Never
|
||||
{% endif %}
|
||||
</dd>
|
||||
<dt>Order closes</dt>
|
||||
<dd>
|
||||
{% if order.stoptime %}
|
||||
{% set stoptimefmt = (
|
||||
"%H:%M" if order.stoptime.date() == order.starttime.date()
|
||||
else "%Y-%m-%d, %H:%M"
|
||||
) %}
|
||||
{{ order.stoptime.strftime(stoptimefmt) }} ({{ order.stoptime|countdown }})
|
||||
{% else %}
|
||||
Never
|
||||
{% endif %}
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<dt>Location</dt>
|
||||
<dd>
|
||||
{% if order.location %}
|
||||
<a href="{{ url_for('general_bp.location', location_id=order.location_id) }}">{{ order.location_name }}</a>
|
||||
{% else %}
|
||||
{{ order.location_name }}
|
||||
{% endif %}
|
||||
</dd>
|
||||
|
||||
<dt>Courier</dt>
|
||||
<dd>
|
||||
{% if order.courier == None %}
|
||||
{% if not current_user.is_anonymous() %}
|
||||
<form action="{{ url_for('order_bp.volunteer', order_slug=order.slug) }}" method="post" style="display:inline">
|
||||
<input type="submit" class="btn btn-primary btn-sm" value="Volunteer"></input>
|
||||
</form>
|
||||
{% else %}No-one yet{% endif %}
|
||||
{% else %}
|
||||
{{ order.courier.username }}
|
||||
{% endif %}
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
|
||||
<div class="col-md-2 col-lg-4">
|
||||
<img src="https://dsa.ugent.be/api/verenigingen/{{ order.association }}/logo" class="img-responsive align-top" style="max-width:200px;width:100%">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<dt>Location</dt>
|
||||
<dd>
|
||||
{% if order.location %}
|
||||
<a href="{{ url_for('general_bp.location', location_id=order.location_id) }}">{{ order.location_name }}</a>
|
||||
{% else %}
|
||||
{{ order.location_name }}
|
||||
{% endif %}
|
||||
</dd>
|
||||
|
||||
<dt>Courier</dt>
|
||||
<dd>
|
||||
{% if order.courier == None %}
|
||||
{% if not current_user.is_anonymous() %}
|
||||
<form action="{{ url_for('order_bp.volunteer', order_slug=order.slug) }}" method="post" style="display:inline">
|
||||
<input type="submit" class="btn btn-primary btn-sm" value="Volunteer"></input>
|
||||
</form>
|
||||
{% else %}No-one yet{% endif %}
|
||||
{% else %}
|
||||
{{ order.courier.username }}
|
||||
{% endif %}
|
||||
</dd>
|
||||
</div>
|
||||
</dl>
|
||||
|
||||
<div>
|
||||
{% if order.can_close(current_user.id) -%}
|
||||
<form action="{{ url_for('order_bp.close_order', order_slug=order.slug) }}" method="post" style="display:inline">
|
||||
<input type="submit" class="btn btn-danger" value="Close"></input>
|
||||
</form>
|
||||
{% endif %}
|
||||
{% if courier_or_admin %}
|
||||
<a class="btn" href="{{ url_for('order_bp.order_edit', order_slug=order.slug) }}">Edit</a>
|
||||
{%- endif %}
|
||||
</div>
|
||||
|
||||
{% if order.can_close(current_user.id) -%}
|
||||
<form action="{{ url_for('order_bp.close_order', order_slug=order.slug) }}" method="post" style="display:inline">
|
||||
<input type="submit" class="btn btn-danger" value="Close"></input>
|
||||
</form>
|
||||
{% endif %}
|
||||
{% if courier_or_admin %}
|
||||
<a class="btn" href="{{ url_for('order_bp.order_edit', order_slug=order.slug) }}">Edit</a>
|
||||
{%- endif %}
|
||||
|
||||
</div>
|
||||
|
||||
<div class="box" id="how_to_order">
|
||||
|
|
|
@ -1,14 +1,17 @@
|
|||
{% macro render_order(order) -%}
|
||||
<div class="row order_row">
|
||||
<div class="col-md-8 col-lg-9 order_data">
|
||||
<div class="col-md-6 order_data">
|
||||
<h5>{{ order.location_name }}</h5>
|
||||
<b class="amount_of_orders">{{ order.items.count() }} items ordered</b></p>
|
||||
<b class="amount_of_orders">{{ order.items.count() }} items ordered for {{ order.association }}</b></p>
|
||||
<p class="time_data">
|
||||
{% if order.stoptime %}
|
||||
<span><b>Closes </b>{{ order.stoptime.strftime("%H:%M") }}</span>{{ order.stoptime|countdown }}
|
||||
{% else %}open{% endif %}<br/>
|
||||
</div>
|
||||
<div class="col-md-4 col-lg-3 expand_button_wrapper">
|
||||
<div class="col-md-3">
|
||||
<img src="https://dsa.ugent.be/api/verenigingen/{{ order.association }}/logo" class="img-responsive align-bottom" style="max-width:200px;width:100%">
|
||||
</div>
|
||||
<div class="col-md-3 expand_button_wrapper">
|
||||
<a class="btn btn-primary btn-block align-bottom expand_button" href="{{ url_for('order_bp.order_from_slug', order_slug=order.slug) }}">Expand</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -12,3 +12,4 @@ black
|
|||
pymysql
|
||||
pyyaml
|
||||
tatsu<5.6 # >=5.6 needs Python >=3.8
|
||||
sentry-sdk[flask]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# This file is autogenerated by pip-compile
|
||||
# This file is autogenerated by pip-compile with python 3.9
|
||||
# To update, run:
|
||||
#
|
||||
# pip-compile
|
||||
|
@ -11,11 +11,15 @@ appdirs==1.4.4
|
|||
black==21.6b0
|
||||
# via -r requirements.in
|
||||
blinker==1.4
|
||||
# via flask-debugtoolbar
|
||||
# via
|
||||
# flask-debugtoolbar
|
||||
# sentry-sdk
|
||||
cachelib==0.1.1
|
||||
# via flask-oauthlib
|
||||
certifi==2021.5.30
|
||||
# via requests
|
||||
# via
|
||||
# requests
|
||||
# sentry-sdk
|
||||
chardet==4.0.0
|
||||
# via requests
|
||||
click==7.1.2
|
||||
|
@ -24,6 +28,19 @@ click==7.1.2
|
|||
# flask
|
||||
dominate==2.6.0
|
||||
# via flask-bootstrap
|
||||
flask==1.1.4
|
||||
# via
|
||||
# -r requirements.in
|
||||
# flask-admin
|
||||
# flask-bootstrap
|
||||
# flask-debugtoolbar
|
||||
# flask-login
|
||||
# flask-migrate
|
||||
# flask-oauthlib
|
||||
# flask-script
|
||||
# flask-sqlalchemy
|
||||
# flask-wtf
|
||||
# sentry-sdk
|
||||
flask-admin==1.5.8
|
||||
# via -r requirements.in
|
||||
flask-bootstrap==3.3.7.1
|
||||
|
@ -44,18 +61,6 @@ flask-sqlalchemy==2.5.1
|
|||
# flask-migrate
|
||||
flask-wtf==0.15.1
|
||||
# via -r requirements.in
|
||||
flask==1.1.4
|
||||
# via
|
||||
# -r requirements.in
|
||||
# flask-admin
|
||||
# flask-bootstrap
|
||||
# flask-debugtoolbar
|
||||
# flask-login
|
||||
# flask-migrate
|
||||
# flask-oauthlib
|
||||
# flask-script
|
||||
# flask-sqlalchemy
|
||||
# flask-wtf
|
||||
greenlet==1.1.0
|
||||
# via sqlalchemy
|
||||
idna==2.10
|
||||
|
@ -92,10 +97,12 @@ pyyaml==5.4.1
|
|||
# via -r requirements.in
|
||||
regex==2021.4.4
|
||||
# via black
|
||||
requests-oauthlib==1.1.0
|
||||
# via flask-oauthlib
|
||||
requests==2.25.1
|
||||
# via requests-oauthlib
|
||||
requests-oauthlib==1.1.0
|
||||
# via flask-oauthlib
|
||||
sentry-sdk[flask]==1.10.1
|
||||
# via -r requirements.in
|
||||
six==1.16.0
|
||||
# via python-dateutil
|
||||
sqlalchemy==1.4.18
|
||||
|
@ -106,8 +113,10 @@ tatsu==4.4.0
|
|||
# via -r requirements.in
|
||||
toml==0.10.2
|
||||
# via black
|
||||
urllib3==1.26.5
|
||||
# via requests
|
||||
urllib3==1.26.12
|
||||
# via
|
||||
# requests
|
||||
# sentry-sdk
|
||||
visitor==0.1.3
|
||||
# via flask-bootstrap
|
||||
werkzeug==1.0.1
|
||||
|
|
Loading…
Reference in a new issue