From 226cbb6b5cb9d38b2856a3007745c8045ed9efae Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Sun, 29 Jan 2023 20:59:56 +0000 Subject: [PATCH] Fixed coloured T and S on expo calendar --- core/fixtures/expo_exped.json | 3 +-- core/models/logbooks.py | 12 +++++++-- core/models/survex.py | 14 ++++++++--- core/models/troggle.py | 6 ++--- core/models/wallets.py | 4 ++- core/utils.py | 4 ++- core/views/logbooks.py | 2 +- media/css/trog3.css | 46 ++++++++++++++++++++++++++++++----- parsers/survex.py | 18 +++++--------- templates/expedition.html | 8 +++--- 10 files changed, 81 insertions(+), 36 deletions(-) diff --git a/core/fixtures/expo_exped.json b/core/fixtures/expo_exped.json index ebb5053..ac26c05 100644 --- a/core/fixtures/expo_exped.json +++ b/core/fixtures/expo_exped.json @@ -13,6 +13,5 @@ "first_name": "Michael", "last_name": "Sargent", "fullname": "Michael Sargent", "is_vfho": false, "mug_shot": null, - "blurb": "\n\n\n\n\n\n

\n\nMichael Sargent CUCC
\nExpeditions 2014, 15, 16, 17, 18, 19.\n

The first second-generation expo caver in 2014, later members of this exclusive group were Dan Lenartowicz and Sarah Connolly.\n\n\n\n

Pre-expo (pre-student) photos from President's Invite (OUCC) \nand first abseiling instruction (Cambridge).

\n", "orderref": "", - "user": null}} + "blurb": "\n\n\n\n\n\n

\n\nMichael Sargent CUCC
\nExpeditions 2014, 15, 16, 17, 18, 19.\n

The first second-generation expo caver in 2014, later members of this exclusive group were Dan Lenartowicz and Sarah Connolly.\n\n\n\n

Pre-expo (pre-student) photos from President's Invite (OUCC) \nand first abseiling instruction (Cambridge).

\n", "orderref": ""}} ] \ No newline at end of file diff --git a/core/models/logbooks.py b/core/models/logbooks.py index 468b100..b7aa5e3 100644 --- a/core/models/logbooks.py +++ b/core/models/logbooks.py @@ -21,6 +21,7 @@ from django.template import Context, loader from django.urls import reverse import settings +#from troggle.core.models.caves import CaveSlug from troggle.core.models.survex import SurvexStation from troggle.core.models.troggle import (DataIssue, Expedition, Person, PersonExpedition, TroggleModel) @@ -36,7 +37,7 @@ class LogbookEntry(TroggleModel): """Single parsed entry from Logbook """ date = models.DateField()#MJG wants to turn this into a datetime such that multiple Logbook entries on the same day can be ordered.ld() - expeditionday = models.ForeignKey("ExpeditionDay", null=True,on_delete=models.SET_NULL)#MJG wants to KILL THIS (redundant information) + # expeditionday = models.ForeignKey("ExpeditionDay", null=True,on_delete=models.SET_NULL)#MJG wants to KILL THIS (redundant information) expedition = models.ForeignKey(Expedition,blank=True, null=True,on_delete=models.SET_NULL) # yes this is double- title = models.CharField(max_length=200) cave_slug = models.SlugField(max_length=50, blank=True, null=True) @@ -70,7 +71,14 @@ class LogbookEntry(TroggleModel): LogbookEntry.objects.get(id=self.id-1) def DayIndex(self): - return list(self.expeditionday.logbookentry_set.all()).index(self) + """This is used to set different colours for the different trips on + the calendar view of the expedition""" + index = list(LogbookEntry.objects.filter(date=self.date)).index(self) + if index not in range(0,10): + print(f"Unexpected LogbookEntry DayIndex '{index}' {self}") + index = 0 + return index + class PersonTrip(TroggleModel): """Single Person going on a trip, which may or may not be written up. diff --git a/core/models/survex.py b/core/models/survex.py index e8538f1..4e852f5 100644 --- a/core/models/survex.py +++ b/core/models/survex.py @@ -73,7 +73,6 @@ class SurvexStationLookUpManager(models.Manager): class SurvexStation(models.Model): name = models.CharField(max_length=100) block = models.ForeignKey('SurvexBlock', null=True,on_delete=models.SET_NULL) -# equate = models.ForeignKey('SurvexEquate', blank=True, null=True,on_delete=models.SET_NULL) objects = SurvexStationLookUpManager() x = models.FloatField(blank=True, null=True) y = models.FloatField(blank=True, null=True) @@ -112,7 +111,7 @@ class SurvexBlockLookUpManager(models.Manager): return block class SurvexBlock(models.Model): - """One begin..end block within a survex file. The basic elemt of a survey trip. + """One begin..end block within a survex file. The basic element of a survey trip. """ objects = SurvexBlockLookUpManager() name = models.CharField(max_length=100) @@ -121,7 +120,7 @@ class SurvexBlock(models.Model): cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.SET_NULL) date = models.DateField(blank=True, null=True) - expeditionday = models.ForeignKey("ExpeditionDay", null=True,on_delete=models.SET_NULL) + #expeditionday = models.ForeignKey("ExpeditionDay", null=True,on_delete=models.SET_NULL) expedition = models.ForeignKey('Expedition', blank=True, null=True,on_delete=models.SET_NULL) survexfile = models.ForeignKey("SurvexFile", blank=True, null=True,on_delete=models.SET_NULL) @@ -147,7 +146,14 @@ class SurvexBlock(models.Model): return True def DayIndex(self): - return list(self.expeditionday.survexblock_set.all()).index(self) + """This is used to set different colours for the different trips on + the calendar view of the expedition""" + index = list(SurvexBlock.objects.filter(date=self.date)).index(self) + if index not in range(0,10): + print(f"Unexpected SurvexBlock DayIndex '{index}' {self}") + index = 10 + #return list(self.survexblock_set.all()).index(self) + return index class SurvexPersonRole(models.Model): survexblock = models.ForeignKey('SurvexBlock',on_delete=models.CASCADE) diff --git a/core/models/troggle.py b/core/models/troggle.py index 999e826..5ef95c8 100644 --- a/core/models/troggle.py +++ b/core/models/troggle.py @@ -117,7 +117,7 @@ class ExpeditionDay(TroggleModel): ordering = ('date',) def GetPersonTrip(self, personexpedition): - """returns all logbook trips for this expediton + """returns all logbook trips for this expeditonday """ personexpeditions = self.persontrip_set.filter(expeditionday=self) return personexpeditions and personexpeditions[0] or None @@ -132,10 +132,8 @@ class Person(TroggleModel): is_vfho = models.BooleanField(help_text="VFHO is the Vereines für Höhlenkunde in Obersteier, a nearby Austrian caving club.", default=False) mug_shot = models.CharField(max_length=100, blank=True,null=True) blurb = models.TextField(blank=True,null=True) - - #href = models.CharField(max_length=200) orderref = models.CharField(max_length=200) # for alphabetic - user = models.OneToOneField(User, null=True, blank=True,on_delete=models.CASCADE) # not used now + def get_absolute_url(self): return urljoin(settings.URL_ROOT,reverse('person',kwargs={'first_name':self.first_name,'last_name':self.last_name})) diff --git a/core/models/wallets.py b/core/models/wallets.py index e2d3b7a..0600572 100644 --- a/core/models/wallets.py +++ b/core/models/wallets.py @@ -11,6 +11,7 @@ from django.conf import settings from django.db import models from django.urls import reverse +#from troggle.core.models.survex import SurvexBlock # from troggle.core.models.troggle import DataIssue # circular import. Hmm class Wallet(models.Model): @@ -164,7 +165,8 @@ class Wallet(models.Model): return files def fixsurvextick(self, tick): - blocks = SurvexBlock.objects.filter(scanswallet = self) + blocks = self.survexblock_set.all() + #blocks = SurvexBlock.objects.filter(scanswallet = self) result = tick for b in blocks: if b.survexfile: # if any exist in db, no check for validity or a real file. Refactor. diff --git a/core/utils.py b/core/utils.py index 29c2643..5632440 100644 --- a/core/utils.py +++ b/core/utils.py @@ -34,7 +34,9 @@ save_carefully() - core function that saves troggle objects in the database various git add/commit functions that need refactoring together NOTE that TROG is not serialized! Two users can update it and conflict !! -This needs to be in a multi-user database with transactions. +This needs to be in a multi-user database with transactions. However it is +useful when doing a data import with databaseReset.py as that has a single +thread. ''' diff --git a/core/views/logbooks.py b/core/views/logbooks.py index 6450753..c1ba965 100644 --- a/core/views/logbooks.py +++ b/core/views/logbooks.py @@ -15,7 +15,7 @@ from django.views.generic.list import ListView import troggle.settings as settings from troggle.core.models.logbooks import LogbookEntry, PersonTrip -from troggle.core.models.survex import SurvexBlock, Wallet +from troggle.core.models.survex import SurvexBlock from troggle.core.models.troggle import Expedition, Person, PersonExpedition from troggle.core.utils import TROG from troggle.parsers.imports import import_logbook diff --git a/media/css/trog3.css b/media/css/trog3.css index 990634a..e0097b9 100644 --- a/media/css/trog3.css +++ b/media/css/trog3.css @@ -71,15 +71,49 @@ table.expeditionpersonlist a:visited color:#509; } +table.expeditionpersonlist a.dayindexlog-0 +{ background-color: #af9; font-size: 130%;} table.expeditionpersonlist a.dayindexlog-1 -{ background-color: #440; color: white; } +{ background-color: #9af; font-size: 130%;} table.expeditionpersonlist a.dayindexlog-2 -{ background-color: #9fa; } -table.expeditionpersonlist a.dayindexsurvex-1 -{ background-color: #000; color: #55f; } -table.expeditionpersonlist a.dayindexsurvex-2 -{ background-color: #6ff; } +{ background-color: #880; color: white; font-weight: bold; font-size: 130%;} +table.expeditionpersonlist a.dayindexlog-3 +{ background-color: #f9a; font-size: 130%;} +table.expeditionpersonlist a.dayindexlog-4 +{ background-color: #808; color: white; font-weight: bold; font-size: 130%;} +table.expeditionpersonlist a.dayindexlog-5 +{ background-color: #088; color: white; font-weight: bold; font-size: 130%;} +table.expeditionpersonlist a.dayindexlog-6 +{ background-color: #000; color: yellow; font-weight: bold; font-size: 130%;} +table.expeditionpersonlist a.dayindexlog-7 +{ background-color: #a9f; font-size: 130%;} +table.expeditionpersonlist a.dayindexlog-8 +{ background-color: #fa9; font-size: 130%;} +table.expeditionpersonlist a.dayindexlog-9 +{ background-color: #9fa; font-size: 130%;} +table.expeditionpersonlist a.dayindexsurvex-0 +{ background-color: #f6f; font-size: 130%} +table.expeditionpersonlist a.dayindexsurvex-1 +{ background-color: #6ff; font-size: 130%} +table.expeditionpersonlist a.dayindexsurvex-2 +{ background-color: #ff6; font-size: 130%} +table.expeditionpersonlist a.dayindexsurvex-3 +{ background-color: #000; color: white; font-weight: bold; font-size: 130%;} +table.expeditionpersonlist a.dayindexsurvex-4 +{ background-color: #99f; color: white; font-weight: bold; font-size: 130%;} +table.expeditionpersonlist a.dayindexsurvex-5 +{ background-color: #f99; color: white; font-weight: bold; font-size: 130%;} +table.expeditionpersonlist a.dayindexsurvex-6 +{ background-color: #f99; color: yellow; font-weight: bold; font-size: 130%;} +table.expeditionpersonlist a.dayindexsurvex-7 +{ background-color: #f99; color: blue; font-weight: bold; font-size: 130%;} +table.expeditionpersonlist a.dayindexsurvex-8 +{ background-color: #9f9; color: blue; font-weight: bold; font-size: 130%;} +table.expeditionpersonlist a.dayindexsurvex-9 +{ background-color: #9f9; color: red; font-weight: bold; font-size: 130%;} +table.expeditionpersonlist a.dayindexsurvex-10 +{ background-color: #9f9; color: white; font-weight: bold; font-size: 130%;} table.expeditionpersonlist a:hover { color:white; diff --git a/parsers/survex.py b/parsers/survex.py index cce3905..634aeca 100644 --- a/parsers/survex.py +++ b/parsers/survex.py @@ -113,8 +113,10 @@ def put_person_on_trip(survexblock, personexpedition, tm): try: personrole = SurvexPersonRole.objects.create( - survexblock=survexblock, person = personexpedition.person, - expeditionday = survexblock.expeditionday, personexpedition=personexpedition, + survexblock=survexblock, + person = personexpedition.person, + # expeditionday = survexblock.expeditionday, + personexpedition=personexpedition, personname=tm ) except: @@ -353,14 +355,6 @@ class LoadingSurvex: expo = survexblock.expedition # may be None if no *date yet if expo: - if not survexblock.expeditionday: # *date has been set - # should not happen - message = f"! *team {expo.year} expo ok, expedition day NOT in *team {survexblock.survexfile.path} ({survexblock}) " - print(self.insp + message) - stash_data_issue( - parser="survex", message=message, url=None, sb=(survexblock.survexfile.path) - ) - personexpedition = GetPersonExpeditionNameLookup(expo).get(tm.lower()) if personexpedition: put_person_on_trip(survexblock, personexpedition, tm) @@ -501,7 +495,7 @@ class LoadingSurvex: expo = self.get_expo_from_year(year) survexblock.expedition = expo - survexblock.expeditionday = expo.get_expedition_day(survexblock.date) + # survexblock.expeditionday = expo.get_expedition_day(survexblock.date) survexblock.save() team = get_team_on_trip(survexblock) # should be empty, should only be in 'pending' @@ -1705,7 +1699,7 @@ class LoadingSurvex: stash_data_issue(parser="survex", message=message, url=None, sb=(path)) return # skip this survex file and all things *included in it except: - message = f" ! ERROR *include file '{path}' in '{survexblock}' has unexpected error. Omitted." + message = f" ! ERROR *include file '{path}' in '{survexblock}' has unexpected error. OMITTED!" print(message) print(message, file=sys.stderr) stash_data_issue(parser="survex", message=message, url=None, sb=(path)) diff --git a/templates/expedition.html b/templates/expedition.html index 92ebde7..dd4e7ab 100644 --- a/templates/expedition.html +++ b/templates/expedition.html @@ -27,8 +27,10 @@ {% endif %}

At a single glance: The table shows all expo cavers and their recorded trips. -The columns are the date in the month (July or August), with a "T" for a logbook entry, and -an "S" for a survey trip. The colours are the same for people on the same trip.

+The columns are the date in the month (July or August), with a +"T" for a logbook entry, and +an "S" for a survey trip. The colours are the same for people on the same trip.

+ @@ -47,7 +49,7 @@ an "S" for a survey trip. The colours are the same for people on the same trip. {% if persondayactivities.persontrips or persondayactivities.survexblocks %}
{% for persontrip in persondayactivities.persontrips %} - T + T {% endfor %}
{% for survexblock in persondayactivities.survexblocks %}