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

fix for individual QM display from survex

This commit is contained in:
Philip Sargent
2022-07-06 15:38:53 +03:00
parent ee4237b14c
commit 7dc3cc3b91
5 changed files with 83 additions and 54 deletions

View File

@@ -481,26 +481,48 @@ def caveQMs(request, slug):
else:
return render(request,'cave_qms.html', {'cave': cave})
def qm(request,cave_id,qm_id,year,grade=None, blockname=""):
def qm(request,cave_id,qm_id,year,grade=None, blockname=None):
'''Reports on one specific QM
Fixed and working July 2022, for both CSV imported QMs and for survex-imported QMs,
Fixed and working July 2022, for both CSV imported QMs
needs refactoring though.
For survex-imported QMs we are not getting unique objects returned, so the query needs fixing.
'''
year=int(year)
try:
c=getCave(cave_id)
manyqms=c.get_QMs()
qm=manyqms.get(number=qm_id,found_by__date__year=year, found_by__cave_slug=c.slug())
return render(request,'qm.html', {'qm': qm})
except QM.DoesNotExist:
return render(request,'errors/badslug.html', {'badslug': f'{cave_id=} {year=} {qm_id=} {blockname=}'})
except MultipleObjectsReturned:
qm = manyqms.filter(blockname = blockname) # we could still get multiple objects..
if qm:
if blockname == 'None':
# CSV import QMs, use old technique
try:
c=getCave(cave_id)
manyqms=c.get_QMs()
qm=manyqms.get(number=qm_id,found_by__date__year=year, found_by__cave_slug=c.slug())
return render(request,'qm.html', {'qm': qm})
else:
except QM.DoesNotExist:
return render(request,'errors/badslug.html', {'badslug': f'{cave_id=} {year=} {qm_id=} {blockname=}'})
else:
# survex import QMs, need to disambiguate with blockname
# slug = f'{str(self.cave)}-{self.found_by.date.year}-{self.blockname}{self.number}{self.grade}'
try:
qmslug = f'{cave_id}-{year}-{blockname=}{qm_id}{grade}'
c=getCave(cave_id)
manyqms=c.get_QMs()
qm=manyqms.get(found_by__date__year=year, blockname=blockname, number=qm_id, grade=grade)
if qm:
print(qm, f'{qmslug=}:{cave_id=} {year=} {qm_id=} {blockname=} {qm.expoyear=}')
return render(request,'qm.html', {'qm': qm})
else:
return render(request,'errors/badslug.html', {'badslug': f'{cave_id=} {year=} {qm_id=} {blockname=}'})
except MultipleObjectsReturned:
if len(qm) > 1:
for q in qm:
print(qm)
return render(request,'qm.html', {'qm': qm[0]})
else:
return render(request,'qm.html', {'qm': qm})
except QM.DoesNotExist:
return render(request,'errors/badslug.html', {'badslug': f'{cave_id=} {year=} {qm_id=} {blockname=}'})
def get_qms(request, caveslug):
'''Does not crash, but just returns a text list of the entrances for a cave.