2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2025-12-17 14:07:07 +00:00

Signup adds person to current expedition

This commit is contained in:
2025-02-09 22:06:19 +00:00
parent 0e2ccee678
commit 10352f2ccb
3 changed files with 38 additions and 13 deletions

View File

@@ -8,7 +8,8 @@ from django.shortcuts import redirect, render
from django.urls import reverse from django.urls import reverse
import troggle.settings as settings import troggle.settings as settings
from troggle.core.models.troggle import DataIssue, Person from troggle.core.models.troggle import DataIssue, Person, PersonExpedition
from troggle.core.models.logbooks import Expedition
from troggle.core.views.editor_helpers import HTMLarea from troggle.core.views.editor_helpers import HTMLarea
from troggle.core.utils import ( from troggle.core.utils import (
COOKIE_MAX_AGE, COOKIE_MAX_AGE,
@@ -51,7 +52,7 @@ def signupok(request):
def signup(request): def signup(request):
"""Display and processes the applicant signup form for the forthcoming expo """Displays and processes the applicant signup form for the forthcoming expo
The user must be logged-on as a personal login and that is The user must be logged-on as a personal login and that is
who is being signed up. You can't signup someone else. who is being signed up. You can't signup someone else.
""" """
@@ -85,6 +86,7 @@ def signup(request):
if pageform.is_valid(): if pageform.is_valid():
clean = pageform.cleaned_data clean = pageform.cleaned_data
print(f" # Signup form OK {clean['name']}") print(f" # Signup form OK {clean['name']}")
register_on_expo(signup_person)
save_signups(editor, signup_person.slug, clean) save_signups(editor, signup_person.slug, clean)
return HttpResponseRedirect("/signupok") return HttpResponseRedirect("/signupok")
@@ -123,8 +125,14 @@ def signup(request):
}, },
) )
def register_on_expo(signup_person):
signup = PersonExpedition(person=signup_person, expedition=Expedition.objects.get(year=SIGNUP_YEAR))
signup.save()
def read_signups(): def read_signups():
# print(f" + READ signups") # print(f" + READ signups")
# This has a big BUG. when it works, it returns a dict with keys such as "philip-sargent"
# but the error conditions are returning a dict of dicts
f = get_encryptor() f = get_encryptor()
signups_dir = settings.EXPOWEB / ENCRYPTED_DIR / current_expo() signups_dir = settings.EXPOWEB / ENCRYPTED_DIR / current_expo()
if not signups_dir.is_dir(): if not signups_dir.is_dir():
@@ -132,7 +140,7 @@ def read_signups():
signupsfile = signups_dir / SIGNUPS_FILE signupsfile = signups_dir / SIGNUPS_FILE
if not signupsfile.is_file(): if not signupsfile.is_file():
return { SIGNEDUP: {} } # dict where e.g. {"philip-sargent": encrypted_form_data, more users etc.} return { "SIGNEDUP": {} } # dict where e.g. {"philip-sargent": encrypted_form_data, more users etc.}
with open(signupsfile, 'r', encoding='utf-8') as json_f: with open(signupsfile, 'r', encoding='utf-8') as json_f:
message = "" message = ""
@@ -147,7 +155,7 @@ def read_signups():
if message: if message:
print(message) print(message)
DataIssue.objects.update_or_create(parser="_signups", message=message, url="") ########################### DataIssue.objects.update_or_create(parser="_signups", message=message, url="") ###########################
return { SIGNEDUP: {} } return { "SIGNEDUP": {} }
signups_dict = signups_single_dict[SIGNEDUP] signups_dict = signups_single_dict[SIGNEDUP]
# print("ALL:",signups_dict) # print("ALL:",signups_dict)
signups_clear ={} signups_clear ={}
@@ -158,6 +166,13 @@ def read_signups():
return signups_clear return signups_clear
# def is_signedup(person):
# signups_clear = read_signups()
# print(signups_clear)
# if person.slug in signups_clear:
# return True
# return False
def save_signups(editor, person_slug, clean): def save_signups(editor, person_slug, clean):
# print(f" + SAVE: Saving all signups") # print(f" + SAVE: Saving all signups")

View File

@@ -58,11 +58,6 @@ LOGBOOK_PARSER_SETTINGS = {
LOGBOOKS_DIR = "years" # subfolder of settings.EXPOWEB LOGBOOKS_DIR = "years" # subfolder of settings.EXPOWEB
ENTRIES = { ENTRIES = {
"2029": 0,
"2028": 0,
"2027": 0,
"2026": 0,
"2025": 0,
"2024": 125, "2024": 125,
"2023": 131, "2023": 131,
"2022": 94, "2022": 94,
@@ -106,6 +101,10 @@ ENTRIES = {
"1979": 30, "1979": 30,
"1978": 38, "1978": 38,
} }
for y in range(2025, 2050):
y_str = str(y)
if y_str not in ENTRIES:
ENTRIES[y_str] = 0
# What about 1970s ! Yes, 80 and 81 are missing, so are 1976 and 1977. # What about 1970s ! Yes, 80 and 81 are missing, so are 1976 and 1977.
logentries = [] # the entire logbook for one year is a single object: a list of entries logentries = [] # the entire logbook for one year is a single object: a list of entries

View File

@@ -10,6 +10,7 @@ from django.db import models
from unidecode import unidecode from unidecode import unidecode
from troggle.core.models.troggle import DataIssue, Expedition, Person, PersonExpedition from troggle.core.models.troggle import DataIssue, Expedition, Person, PersonExpedition
from troggle.core.views.signup import read_signups
"""These functions do not match how the stand-alone folk script works. So the script produces an HTML file which has """These functions do not match how the stand-alone folk script works. So the script produces an HTML file which has
href links to pages in troggle which troggle does not think are right. href links to pages in troggle which troggle does not think are right.
@@ -94,8 +95,6 @@ def troggle_slugify(longname):
def load_people_expos(): def load_people_expos():
"""This is where the folk.csv file is parsed to read people's names. """This is where the folk.csv file is parsed to read people's names.
Which it gets wrong for people like Lydia-Clare Leather and various 'von' and 'de' middle 'names'
and McLean and Mclean and McAdam - interaction with the url parser in urls.py too
This is ALSO where all the Expedition objects get created. So this is the point at which troggle This is ALSO where all the Expedition objects get created. So this is the point at which troggle
gets told what expeditions exist. gets told what expeditions exist.
@@ -116,6 +115,7 @@ def load_people_expos():
if nexpos <= 0: if nexpos <= 0:
print(" - Creating expeditions") print(" - Creating expeditions")
for year in years: for year in years:
year = year.strip()
coUniqueAttribs = {"year": year} coUniqueAttribs = {"year": year}
otherAttribs = {"name": f"CUCC expo {year}"} otherAttribs = {"name": f"CUCC expo {year}"}
e = Expedition.objects.create(**otherAttribs, **coUniqueAttribs) e = Expedition.objects.create(**otherAttribs, **coUniqueAttribs)
@@ -176,10 +176,22 @@ def load_people_expos():
pe = PersonExpedition.objects.create(**coUniqueAttribs) pe = PersonExpedition.objects.create(**coUniqueAttribs)
print("", flush=True) print("", flush=True)
ensure_users_are_persons() ensure_users_are_persons()
most_recent = Expedition.objects.all().first()
check_new_signups(most_recent)
def check_new_signups(expedition):
signups_clear = read_signups()
# print(signups_clear)
for slug in signups_clear:
print(slug)
p = Person.objects.get(slug=slug)
pe = PersonExpedition.objects.update_or_create(person=p, expedition=expedition)
# print("ADDING ",pe, expedition)
def ensure_users_are_persons(): def ensure_users_are_persons():
# Just ensure this is up to date. # Just ensure this is up to date.
print(f"# ensure_users_are_persons()") print(f"# ensure_users_are_persons() - except for expo and expoadmin of course")
users = User.objects.all() users = User.objects.all()
for u in users: for u in users:
ps = Person.objects.filter(slug=u.username) ps = Person.objects.filter(slug=u.username)
@@ -197,7 +209,6 @@ def who_is_this(year, possibleid):
else: else:
return None return None
def when_on_expo(name): def when_on_expo(name):
"""Returns a list of PersonExpedition objects for the string, if recognised as a name """Returns a list of PersonExpedition objects for the string, if recognised as a name
""" """