diff options
Diffstat (limited to 'pysite/views/staff/jams/create.py')
-rw-r--r-- | pysite/views/staff/jams/create.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/pysite/views/staff/jams/create.py b/pysite/views/staff/jams/create.py new file mode 100644 index 00000000..e88056c5 --- /dev/null +++ b/pysite/views/staff/jams/create.py @@ -0,0 +1,49 @@ +from flask import redirect, request, url_for +from werkzeug.exceptions import BadRequest + +from pysite.base_route import RouteView +from pysite.constants import ALL_STAFF_ROLES +from pysite.decorators import csrf, require_roles +from pysite.mixins import DBMixin + +REQUIRED_KEYS = ["title", "date_start", "date_end"] + + +class StaffView(RouteView, DBMixin): + path = "/jams/create" + name = "jams.create" + table_name = "code_jams" + + @require_roles(*ALL_STAFF_ROLES) + def get(self): + number = self.get_next_number() + return self.render("staff/jams/create.html", number=number) + + @require_roles(*ALL_STAFF_ROLES) + @csrf + def post(self): + data = {} + + for key in REQUIRED_KEYS: + arg = request.form.get(key) + + if not arg: + return BadRequest() + + data[key] = arg + + data["state"] = "planning" + data["number"] = self.get_next_number() + + self.db.insert(self.table_name, data) + + return redirect(url_for("staff.jams.index")) + + def get_next_number(self) -> int: + count = self.db.run(self.table.count(), coerce=int) + + if count: + max_num = self.db.run(self.table.max("number"))["number"] + + return max_num + 1 + return 1 |