mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2025-12-18 10:17:06 +00:00
refactoring people import from folk.csv
This commit is contained in:
@@ -67,7 +67,7 @@ class Expedition(TroggleModel):
|
||||
logbookfile = models.CharField(max_length=100, blank=True, null=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.year
|
||||
return str(self.year)
|
||||
|
||||
class Meta:
|
||||
ordering = ("-year",)
|
||||
@@ -85,11 +85,13 @@ class Person(TroggleModel):
|
||||
definied in django.contrib.auth.models
|
||||
"""
|
||||
|
||||
first_name = models.CharField(max_length=100)
|
||||
last_name = models.CharField(max_length=100)
|
||||
fullname = models.CharField(max_length=200) # display name, but should not be used for lookups
|
||||
nickname = models.CharField(max_length=200, blank=True)
|
||||
slug = models.SlugField(max_length=50, blank=True, null=True) # unique, enforced in code not in db
|
||||
input_name = models.CharField(max_length=100, blank=True, null=True)
|
||||
input_surname = models.CharField(max_length=100, blank=True, null=True)
|
||||
first_name = models.CharField(max_length=100, blank=True, null=True)
|
||||
last_name = models.CharField(max_length=100, blank=True, null=True)
|
||||
fullname = models.CharField(max_length=200, blank=True, null=True) # display name, but should not be used for lookups
|
||||
nickname = models.CharField(max_length=200, blank=True, null=True)
|
||||
slug = models.SlugField(max_length=50) # unique, enforced in code not in db
|
||||
# no delete cascade. We have users without Persons, and Persons without users
|
||||
user = models.OneToOneField(User, models.SET_NULL, blank=True, null=True)
|
||||
|
||||
@@ -99,6 +101,7 @@ class Person(TroggleModel):
|
||||
)
|
||||
is_guest = models.BooleanField(default=False) # This is per-Person, not per-PersonExpedition
|
||||
mug_shot = models.CharField(max_length=100, blank=True, null=True)
|
||||
blurbfile = models.CharField(max_length=100, blank=True, null=True)
|
||||
blurb = models.TextField(blank=True, null=True)
|
||||
orderref = models.CharField(max_length=200, blank=True) # for alphabetic
|
||||
|
||||
@@ -164,6 +167,10 @@ class PersonExpedition(TroggleModel):
|
||||
expedition = models.ForeignKey(Expedition, on_delete=models.CASCADE, db_index=True)
|
||||
person = models.ForeignKey(Person, on_delete=models.CASCADE, db_index=True)
|
||||
slugfield = models.SlugField(max_length=50, blank=True, null=True) # 2022 to be used in future
|
||||
noncaver = models.BooleanField(
|
||||
help_text="if flagged as -1 in the folk.csv input file",
|
||||
default=True,
|
||||
)
|
||||
|
||||
# is_guest = models.BooleanField(default=False) # This is per-Person, not per-PersonExpedition
|
||||
|
||||
|
||||
@@ -316,7 +316,7 @@ def kataster(request, slug=None):
|
||||
if dir.is_dir():
|
||||
error += f"STOP: a target directory exists. REMOVE or RENAME it first: {dir}<br>\n"
|
||||
|
||||
# 1623 : fixedpts/gps/gps23.svx:26:*fix p2023-mg-03 reference 13.81514 47.69169 1767
|
||||
# 1623 : fixedpts/gps/gps23.svx:26:*fix p2023-mg-03 13.81514 47.69169 1767
|
||||
# 1626: fixedpts/1626-no-schoenberg-hs-not-tied-to-caves.svx
|
||||
return l_script, error
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import re
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
from django.conf import settings
|
||||
@@ -10,7 +11,8 @@ from troggle.core.models.caves import Cave
|
||||
from troggle.core.models.logbooks import LogbookEntry, writelogbook # , PersonLogEntry
|
||||
|
||||
# from databaseReset import reinit_db # don't do this. databaseRest runs code *at import time*
|
||||
from troggle.core.models.troggle import Expedition
|
||||
from troggle.core.models.troggle import Expedition, Person, PersonExpedition
|
||||
|
||||
from troggle.core.utils import current_expo, COOKIE_SHORT_TIMEOUT, PUBLIC_LAPTOP_COOKIE_NAME, PUBLIC_LAPTOP_COOKIE_TEXT
|
||||
from troggle.parsers.imports import (
|
||||
import_caves,
|
||||
@@ -145,7 +147,68 @@ def controlpanel(request):
|
||||
{"expeditions": Expedition.objects.all(), "year": current_expo()},
|
||||
)
|
||||
|
||||
|
||||
def folk_export(request):
|
||||
"""Recreates the folk.csv file from the database contents
|
||||
WORK IN PROGRESS JULY 2025
|
||||
"""
|
||||
def deslugify(slug):
|
||||
deslug = slug.replace("-"," ",1).title()
|
||||
return deslug
|
||||
|
||||
def real_surname(person):
|
||||
return deslugify(person.slug).replace(person.first_name,"").strip()
|
||||
|
||||
expo = {}
|
||||
yearlist = range(1976, int(current_expo())+1)
|
||||
newfile = settings.EXPOWEB / 'folk' / 'new_folk.csv'
|
||||
|
||||
with open(newfile, 'w') as f:
|
||||
f.write("Name,Lastname,Guest,VfHO member,Mugshot")
|
||||
for y in yearlist:
|
||||
try:
|
||||
expo[y] = Expedition.objects.get(year=y)
|
||||
except:
|
||||
expo[y] = None
|
||||
f.write(f",{y}")
|
||||
f.write("\n")
|
||||
for person in Person.objects.all().order_by("last_name"):
|
||||
f.write(f"{person.input_name}")
|
||||
if person.nickname:
|
||||
f.write(f" ({person.nickname})")
|
||||
f.write(f",{person.input_surname}")
|
||||
if person.is_guest:
|
||||
f.write(",1")
|
||||
else:
|
||||
f.write(",")
|
||||
if person.is_vfho:
|
||||
f.write(",1")
|
||||
else:
|
||||
f.write(",")
|
||||
if person.mug_shot:
|
||||
f.write(f",{person.mug_shot.replace("/folk/","")}")
|
||||
elif person.blurbfile:
|
||||
f.write(f",{person.blurbfile.replace("/folk/","")}")
|
||||
else:
|
||||
f.write(",")
|
||||
|
||||
for y in yearlist:
|
||||
present = PersonExpedition.objects.filter(expedition=expo[y], person=person)
|
||||
if present.count() == 1:
|
||||
if present[0].noncaver:
|
||||
f.write(f",-1")
|
||||
else:
|
||||
f.write(f",1")
|
||||
else:
|
||||
f.write(",")
|
||||
f.write("\n")
|
||||
return render(
|
||||
request,
|
||||
"controlPanel.html",
|
||||
{"expeditions": Expedition.objects.all(),
|
||||
"jobs_completed": f"GENERATED {str(newfile)} {datetime.now().strftime("%Y-%m-%d %H:%M")
|
||||
}"}
|
||||
)
|
||||
|
||||
def exportlogbook(request, year=None):
|
||||
"""Constructs, from the database, a complete HTML formatted logbook
|
||||
for the current year. Format available is now just HTML2005.
|
||||
|
||||
Reference in New Issue
Block a user