diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/models_caves.py | 103 |
1 files changed, 25 insertions, 78 deletions
diff --git a/core/models_caves.py b/core/models_caves.py index 17b372a..2304109 100644 --- a/core/models_caves.py +++ b/core/models_caves.py @@ -27,11 +27,13 @@ class Area(TroggleModel): name = models.CharField(max_length=200, blank=True, null=True) description = models.TextField(blank=True,null=True) parent = models.ForeignKey('Area', blank=True, null=True,on_delete=models.SET_NULL) + def __str__(self): if self.parent: return str(self.parent) + " - " + str(self.short_name) else: return str(self.short_name) + def kat_area(self): if self.short_name in ["1623", "1626"]: return self.short_name @@ -44,7 +46,7 @@ class CaveAndEntrance(models.Model): entrance_letter = models.CharField(max_length=20,blank=True, null=True) def __str__(self): return str(self.cave) + str(self.entrance_letter) - + class CaveSlug(models.Model): cave = models.ForeignKey('Cave',on_delete=models.CASCADE) slug = models.SlugField(max_length=50, unique = True) @@ -202,12 +204,6 @@ class Cave(TroggleModel): pass return lowestareas[0] -# class OtherCaveName(TroggleModel): - # name = models.CharField(max_length=160) - # cave = models.ForeignKey(Cave,on_delete=models.CASCADE) - # def __str__(self): - # return str(self.name) - class EntranceSlug(models.Model): entrance = models.ForeignKey('Entrance',on_delete=models.CASCADE) slug = models.SlugField(max_length=50, unique = True) @@ -258,10 +254,10 @@ class Entrance(TroggleModel): def exact_location(self): return SurvexStation.objects.lookup(self.exact_station) + def other_location(self): return SurvexStation.objects.lookup(self.other_station) - def find_location(self): r = {'': 'To be entered ', '?': 'To be confirmed:', @@ -313,26 +309,24 @@ class Entrance(TroggleModel): for m in self.MARKING_CHOICES: if m[0] == self.marking: return m[1] + def findability_val(self): for f in self.FINDABLE_CHOICES: if f[0] == self.findability: return f[1] - + def tag(self): return SurvexStation.objects.lookup(self.tag_station) - + def needs_surface_work(self): return self.findability != "S" or not self.has_photo or self.marking != "T" def get_absolute_url(self): - ancestor_titles='/'.join([subcave.title for subcave in self.get_ancestors()]) if ancestor_titles: res = '/'.join((self.get_root().cave.get_absolute_url(), ancestor_titles, self.title)) - else: res = '/'.join((self.get_root().cave.get_absolute_url(), self.title)) - return res def slug(self): @@ -361,40 +355,6 @@ class Entrance(TroggleModel): f.write(u8) f.close() -# class CaveDescription(TroggleModel): - # short_name = models.CharField(max_length=50, unique = True) - # long_name = models.CharField(max_length=200, blank=True, null=True) - # description = models.TextField(blank=True,null=True) - # #linked_subcaves = models.ManyToManyField("NewSubCave", blank=True) - # linked_entrances = models.ManyToManyField("Entrance", blank=True) - # linked_qms = models.ManyToManyField("QM", blank=True) - - # def __str__(self): - # if self.long_name: - # return str(self.long_name) - # else: - # return str(self.short_name) - - # def get_absolute_url(self): - # return urljoin(settings.URL_ROOT, reverse('cavedescription', args=(self.short_name,))) - - # def save(self): - # """ - # Overridden save method which stores wikilinks in text as links in database. - # """ - # TroggleModel.save() - # #super(CaveDescription, self).save() # fails in python 3.8, OK in python 3.5 - # qm_list=get_related_by_wikilinks(self.description) - # for qm in qm_list: - # self.linked_qms.add(qm) - # TroggleModel.save() - # #super(CaveDescription, self).save() # fails in python 3.8, OK in python 3.5 - -# class NewSubCave(TroggleModel): - # name = models.CharField(max_length=200, unique = True) - # def __str__(self): - # return str(self.name) - class LogbookEntry(TroggleModel): """Single parsed entry from Logbook """ @@ -402,7 +362,6 @@ class LogbookEntry(TroggleModel): ("wiki", "Wiki style logbook"), ("html", "Html style 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) expedition = models.ForeignKey(Expedition,blank=True, null=True,on_delete=models.SET_NULL) # yes this is double- @@ -473,15 +432,12 @@ class LogbookEntry(TroggleModel): def DayIndex(self): return list(self.expeditionday.logbookentry_set.all()).index(self) - class QM(TroggleModel): - # based on qm.csv in trunk/expoweb/1623/204 which has the fields: - #"Number","Grade","Area","Description","Page reference","Nearest station","Completion description","Comment" + """This is based on qm.csv in trunk/expoweb/1623/204 which has the fields: + "Number","Grade","Area","Description","Page reference","Nearest station","Completion description","Comment" + """ found_by = models.ForeignKey(LogbookEntry, related_name='QMs_found',blank=True, null=True,on_delete=models.SET_NULL ) ticked_off_by = models.ForeignKey(LogbookEntry, related_name='QMs_ticked_off',blank=True, null=True,on_delete=models.SET_NULL) - #cave = models.ForeignKey(Cave,on_delete=models.SET_NULL) - #expedition = models.ForeignKey(Expedition,on_delete=models.SET_NULL) - number = models.IntegerField(help_text="this is the sequential number in the year", ) GRADE_CHOICES=( ('A', 'A: Large obvious lead'), @@ -521,33 +477,15 @@ class QM(TroggleModel): def wiki_link(self): return "%s%s%s" % ('[[QM:',self.code(),']]') -scansFileStorage = FileSystemStorage(location=settings.SURVEY_SCANS, base_url=settings.SURVEYS_URL) -def get_scan_path(instance, filename): - year=instance.survey.expedition.year - #print("WN: ", type(instance.survey.wallet_number), instance.survey.wallet_number, instance.survey.wallet_letter) - number=str(instance.survey.wallet_number) - if str(instance.survey.wallet_letter) != "None": - number=str(instance.survey.wallet_letter) + number #two strings formatting because convention is 2009#01 or 2009#X01 - return os.path.join('./',year,year+r'#'+number,str(instance.contents)+str(instance.number_in_wallet)+r'.jpg') -# -# Single Person going on a trip, which may or may not be written up (accounts for different T/U for people in same logbook entry) -# class PersonTrip(TroggleModel): + """Single Person going on a trip, which may or may not be written up. + It accounts for different T/U for people in same logbook entry. + """ personexpedition = models.ForeignKey("PersonExpedition",null=True,on_delete=models.CASCADE) - - #expeditionday = models.ForeignKey("ExpeditionDay",on_delete=models.SET_NULL)#MJG wants to KILL THIS (redundant information) - #date = models.DateField() #MJG wants to KILL THIS (redundant information) time_underground = models.FloatField(help_text="In decimal hours") logbook_entry = models.ForeignKey(LogbookEntry,on_delete=models.CASCADE) is_logbook_entry_author = models.BooleanField(default=False) - - - # sequencing by person (difficult to solve locally) - #persontrip_next = models.ForeignKey('PersonTrip', related_name='pnext', - #blank=True,null=True,on_delete=models.SET_NULL)#MJG wants to KILL THIS (and use funstion persontrip_next_auto) - #persontrip_prev = models.ForeignKey('PersonTrip', related_name='pprev', - #blank=True,null=True,on_delete=models.SET_NULL)#MJG wants to KILL THIS(and use funstion persontrip_prev_auto) - + def persontrip_next(self): futurePTs = PersonTrip.objects.filter(personexpedition = self.personexpedition, logbook_entry__date__gt = self.logbook_entry.date).order_by('logbook_entry__date').all() if len(futurePTs) > 0: @@ -568,10 +506,19 @@ class PersonTrip(TroggleModel): def __str__(self): return "%s (%s)" % (self.personexpedition, self.logbook_entry.date) -# lookup function modelled on GetPersonExpeditionNameLookup -# repeated assignment each call, needs refactoring +scansFileStorage = FileSystemStorage(location=settings.SURVEY_SCANS, base_url=settings.SURVEYS_URL) +def get_scan_path(instance, filename): + year=instance.survey.expedition.year + number=str(instance.survey.wallet_number) + if str(instance.survey.wallet_letter) != "None": + number=str(instance.survey.wallet_letter) + number #two strings formatting because convention is 2009#01 or 2009#X01 + return os.path.join('./',year,year+r'#'+number,str(instance.contents)+str(instance.number_in_wallet)+r'.jpg') + Gcavelookup = None def GetCaveLookup(): + """lookup function modelled on GetPersonExpeditionNameLookup + repeated assignment each call, needs refactoring + """ global Gcavelookup if Gcavelookup: return Gcavelookup |