From: Christian Heller <c.heller@plomlompom.de>
Date: Sun, 26 Jan 2025 11:39:17 +0000 (+0100)
Subject: Add structured handling of intro lines.
X-Git-Url: https://plomlompom.com/repos/%7B%7Bdb.prefix%7D%7D/%7B%7Bprefix%7D%7D/%7B%7B%20web_path%20%7D%7D/%7B%7Bprefix%7D%7D/all?a=commitdiff_plain;h=eb0b706bb21d1ac988f2987790bcd759d092041d;p=ledgplom

Add structured handling of intro lines.
---

diff --git a/ledger.py b/ledger.py
index 87f58f5..364ca1f 100755
--- a/ledger.py
+++ b/ledger.py
@@ -126,14 +126,17 @@ class IntroLine(BookingLine):
 
     def __init__(self, booking: 'Booking', code: str) -> None:
         super().__init__(booking)
+        self.date = '#'
+        self.target = ''
         if code[0].isspace():
             self.errors += ['intro line indented']
         toks = code.lstrip().split(maxsplit=1)
         if len(toks) != 2:
             self.errors += ['illegal number of tokens']
-        if len(toks) < 1:
+        elif len(toks) < 1:
             return
-        self.date = '#'
+        else:
+            self.target = toks[1]
         try:
             dt_date.fromisoformat(toks[0])
         except ValueError:
@@ -246,8 +249,10 @@ class Handler(PlomHttpHandler):
                 comment = self.postvars.first(f'line_{lineno}_comment')
                 for name in input_names:
                     input_ = self.postvars.first(f'line_{lineno}_{name}')
-                    if name == 'intro':
+                    if name == 'date':
                         data = input_
+                    elif name == 'target':
+                        data += f'  {input_}'
                     elif name == 'error':
                         data = f'{indent}{input_}'
                     elif name == 'account':
diff --git a/templates/_macros.tmpl b/templates/_macros.tmpl
index 1412c84..dd45db6 100644
--- a/templates/_macros.tmpl
+++ b/templates/_macros.tmpl
@@ -29,7 +29,8 @@ td.invalid, tr.warning td.invalid { background-color: #ff0000; }
     </td>
   {% else %}
     {% if dat_line.is_intro %}
-      <td{% if dat_line.error %} class="invalid"{% endif %} colspan=3><a href="/booking/{{dat_line.booking_id}}">{{dat_line.code}}</a></td>
+      <td{% if dat_line.error %} class="invalid"{% endif %}><a href="/booking/{{dat_line.booking_id}}">{{dat_line.booking_line.date}}</a></td>
+      <td{% if dat_line.error %} class="invalid"{% endif %} colspan=2>{{dat_line.booking_line.target}}</td>
     {% elif not dat_line.error %}
       <td class="amt">{{dat_line.booking_line.amount_short}}</td>
       <td class="curr">{{dat_line.booking_line.currency|truncate(4,true,"…")}}</td>
diff --git a/templates/edit_structured.tmpl b/templates/edit_structured.tmpl
index 6e13a9a..89919e5 100644
--- a/templates/edit_structured.tmpl
+++ b/templates/edit_structured.tmpl
@@ -14,7 +14,8 @@
 {% for dat_line in dat_lines %}
   <tr>
   {% if dat_line.is_intro %}
-    <td{% if dat_line.error %} class="invalid"{% endif %} colspan=3><input name="line_{{loop.index0}}_intro" value="{{dat_line.code}}"/></td>
+    <td{% if dat_line.error %} class="invalid"{% endif %}><input name="line_{{loop.index0}}_date" value="{{dat_line.booking_line.date}}" /></td>
+    <td{% if dat_line.error %} class="invalid"{% endif %} colspan=2><input name="line_{{loop.index0}}_target" value="{{dat_line.booking_line.target}}" /></td>
   {% elif not dat_line.error %}
     <td><input name="line_{{loop.index0}}_account" value="{{dat_line.booking_line.account}}" /></td>
     <td><input name="line_{{loop.index0}}_amount" value="{{dat_line.booking_line.amount or ''}}" /></td>