From 587ccff50110804cbff356d07c56ecea72ccf1fa Mon Sep 17 00:00:00 2001
From: Philip Sargent <philip.sargent@gmail.com>
Date: Wed, 1 Feb 2023 19:10:46 +0000
Subject: [PATCH] date handling now working for new wallet

---
 core/models/wallets.py    |  4 +++-
 core/views/wallets.py     | 43 ++++++++++++++++++---------------------
 templates/walletform.html |  1 -
 3 files changed, 23 insertions(+), 25 deletions(-)

diff --git a/core/models/wallets.py b/core/models/wallets.py
index 19eaec5..7c0dea4 100644
--- a/core/models/wallets.py
+++ b/core/models/wallets.py
@@ -13,6 +13,7 @@ from django.urls import reverse
 # from troggle.core.models.survex import SurvexBlock
 # from troggle.core.models.troggle import DataIssue # circular import. Hmm
 
+YEAR_RANGE = (1975, 2050)
 
 class Wallet(models.Model):
     """We do not keep the JSON values in the database, we query them afresh each time,
@@ -88,7 +89,8 @@ class Wallet(models.Model):
         if self.walletname[4] != "#":
             return None
         year = int(self.walletname[0:4])
-        if year < 1975 or year > 2050:
+        ymin, ymax = YEAR_RANGE
+        if year < ymin or year > ymax:
             return None
         else:
             self.walletyear = datetime.date(year, 1, 1)
diff --git a/core/views/wallets.py b/core/views/wallets.py
index 9779b83..0d8ecd0 100644
--- a/core/views/wallets.py
+++ b/core/views/wallets.py
@@ -18,7 +18,7 @@ from troggle.core.models.caves import Cave
 from troggle.core.models.logbooks import LogbookEntry  # , PersonLogEntry
 from troggle.core.models.survex import SurvexBlock, SurvexFile, SurvexPersonRole
 from troggle.core.models.troggle import DataIssue, Expedition
-from troggle.core.models.wallets import Wallet
+from troggle.core.models.wallets import Wallet, YEAR_RANGE
 
 from troggle.core.views.caves import getCave
 from troggle.core.views.scans import caveifywallet, oldwallet
@@ -125,7 +125,7 @@ def get_complaints(complaints, waldata, svxfiles, files, wallet, wurl):
         or waldata["people"] == [""]
     ):
         complaints.append(
-            "Someody must have done this. Look in the survex file, or in the logbook entries for this date, for the people who created this data."
+            "Somebody must have done this. Look in the survex file, or in the logbook entries for this date, for the people who created this data."
         )
 
     # survex, but get_ticks has already done much of this ??
@@ -298,16 +298,17 @@ def walletedit(request, path=None):
         if not re.match("(19|20)\d\d[:#]\d\d\d?", wpath):
             return (None, get_next_empty() )
             
-        if int(year) < 1977:
-            year = "1977"
-        if int(year) > 2050:
+        ymin, ymax = YEAR_RANGE
+        if int(year) < ymin:
+            year = str(ymin+2)
+        if int(year) > ymax:
             return (None, get_next_empty() )
             
         wallet = f"{year}:{wnumber:02d}"
         return (None, wallet)
         
     def create_nav_links(wallet):
-        print(f" --- {wallet}")
+        print(f"--- {wallet} now current")
         y = wallet[:4]
         n = wallet[5:]
         nexty = f"{int(y)+1}"
@@ -487,7 +488,7 @@ def walletedit(request, path=None):
                     # print(f'--- {wd["survex file"]} - {type(wd["survex file"])}')
 
                 save_json(wd)
-                walletobject = make_wallet(wallet)
+                walletobject = make_wallet(wallet) # will already exist
                 commit_json(wd)
 
             else:
@@ -510,10 +511,9 @@ def walletedit(request, path=None):
                 if request.POST['submitbutton']=="Create":
                     w = WALLET_BLANK_JSON.copy()
                     save_json(w)
-                    walletobject = make_wallet(wallet)
+                    walletobject = make_wallet(wallet) # no date set yet
                     commit_json(w)
-                    fresh_wallet = True
-          
+         
             form = FilesForm(request.POST, request.FILES)
             if form.is_valid():
                 # print(f'--- FORM walletedit multiple BUT EMPTY METADATA supposedly {WALLET_BLANK_JSON["date"]=}')
@@ -537,9 +537,8 @@ def walletedit(request, path=None):
                     save_json(waldata)
                     walletobject = make_wallet(wallet)
                     commit_json(waldata)
-                    fresh_wallet = True
             else:
-                print("--- Upload files form invalid")
+                print("--- Upload files form invalid, which is correct if just created.")
     #
     # Not a POST, so a GET starts here. And also control gets here after a POST is processed.
     #
@@ -560,7 +559,8 @@ def walletedit(request, path=None):
                 "(No wallet yet. It would be created if you upload a scan and then save the form with a date.)"
             )
     else:
-        if fresh_wallet:
+        # either on GET or on dropping-through after the POST creating a new wallet object:
+        if Wallet.objects.filter(walletname=wallet).exists():
             create = False
         else:
             create = True
@@ -592,11 +592,6 @@ def walletedit(request, path=None):
     context = {}
     if waldata:  # should always be true as populated by blank data if json file doesn't exist
 
-        # if not type(waldata["people"])==list:
-        # if waldata["people"][0] == '"':
-        # waldata["people"] = waldata["people"][1:-1]
-        # waldata["people"] = list(waldata["people"])
-
         if (
             not waldata["date"]
             or not waldata["people"]
@@ -618,17 +613,16 @@ def walletedit(request, path=None):
                 if not type(waldata["survex file"]) == list:  # a string also is a sequence type, so do it this way
                     waldata["survex file"] = [waldata["survex file"]]
             for svxf in waldata["survex file"]:
-                print(f" - {svxf=}")
                 if svxf:
                     svx = Path(svxf)
                     if svx.suffix.lower() != ".svx":
                         svx = svx.with_suffix(".svx")
                     f = Path(settings.SURVEX_DATA) / svx
                     if f.is_file():
-                        path = svx.parent / svx.stem
-                        # print(f' - {path=}')
+                        fpath = svx.parent / svx.stem
+                        # print(f' - {fpath=}')
                         try:
-                            svxfile = SurvexFile.objects.get(path=path)
+                            svxfile = SurvexFile.objects.get(path=fpath)
 
                             print(f" - {svxfile=}")
                             if svxfile.cave:
@@ -721,6 +715,9 @@ def walletedit(request, path=None):
                         samedate = datetime.date.fromisoformat(datestr[:10])
                     except:
                         samedate = None
+            walletobject = make_wallet(wallet)
+            walletobject.walletdate = samedate
+            walletobject.save()
 
             try:
                 thisexpo = Expedition.objects.get(year=int(year))
@@ -755,7 +752,7 @@ def walletedit(request, path=None):
             caveifywallet(thiswallet)
             thiswallet.ticks = thiswallet.get_ticks()  # the complaints in colour form
             # fixsurvextick(thiswallet, thiswallet.ticks)
-            print(thiswallet)
+            print(f"--- {wallet}  {thiswallet} walletdate={thiswallet.walletdate} immediately before form render")
         except:
             thiswallet = None
         context = {
diff --git a/templates/walletform.html b/templates/walletform.html
index c605a2f..871a895 100644
--- a/templates/walletform.html
+++ b/templates/walletform.html
@@ -68,7 +68,6 @@
 <a href="/expofiles/surveyscans/{{year}}/{{wallet|urlencode}}/{{f}}">{{ f}}</a><br />
     {% empty %}
     <p>&lt;No files in this wallet. &gt;
-    <br>Sub-folders here are not supported by troggle in 2022. 
     
 {% endfor %}
 <ul>