home · contact · privacy
Improve accounting scripts.
[misc] / ledger.py
index 817def60ea1f2f29feeb4a4436496b1f1d2158ad..22e36a38dc095af1c6ca986f53ad03274ef9a623 100755 (executable)
--- a/ledger.py
+++ b/ledger.py
@@ -65,6 +65,10 @@ add_structured_html = """
 <input type="submit" name="add_taxes" value="add taxes" />
 <input type="submit" name="add_taxes2" value="add taxes2" />
 <input type="submit" name="add_sink" value="add sink" />
+<input name="replace_from" />
+<input type="submit" name="replace" value="-> replace ->" />
+<input name="replace_to" />
+<input type="submit" name="add_mirror" value="add mirror" />
 <br />
 <input name="date" value="{{date|e}}" size=9 />
 <input name="description" value="{{desc|e}}" list="descriptions" />
@@ -355,7 +359,6 @@ class LedgerDB(PlomDB):
         self.write_text_to_db(text)
 
     def insert_at_date(self, lines, date):
-        print("DEBUG insert_at_date")
         start_at = 0 
         if len(self.bookings) > 0:
             if date >= self.bookings[-1].date_string:
@@ -371,7 +374,6 @@ class LedgerDB(PlomDB):
         return self.write_lines_in_total_lines_at(self.real_lines, start_at, lines)
 
     def update(self, start, end, lines, date):
-        print("DEBUG update")
         total_lines = self.real_lines[:start] + self.real_lines[end:]
         n_original_lines = end - start
         start_at = len(total_lines)
@@ -520,6 +522,14 @@ class LedgerDB(PlomDB):
             ret += [f'  {acc_buffer}  {-final_minus} € ; assume as to earn in year: {acc_buffer} + {12 - months_passed - 1} * this = {year_needed}']
         return ret
 
+    def add_mirror(self, lines):
+        ret = []
+        bookings, _ = parse_lines(lines)
+        booking = bookings[0]
+        for line in booking.lines[1:]:
+            ret += [f'?  {-line[1]} {line[2]}']
+        return ret
+
     def ledger_as_html(self):
         booking_tmpl = jinja2.Template(booking_html)
         single_c_tmpl = jinja2.Template('<span class="comment">{{c|e}}</span><br />')  ##
@@ -715,10 +725,15 @@ class LedgerDB(PlomDB):
                     lines += [f'Assets  {amount:.2f} {currency}']
             except PlomException:
                 pass
-        if 'add_taxes' in postvars.keys():
+        elif 'add_taxes' in postvars.keys():
             lines += self.add_taxes(lines, finish=False)
         elif 'add_taxes2' in postvars.keys():
             lines += self.add_taxes(lines, finish=True)
+        elif 'replace' in postvars.keys():
+            for i, line in enumerate(lines):
+                lines[i] = line.replace(postvars['replace_from'][0], postvars['replace_to'][0])
+        elif 'add_mirror' in postvars.keys():
+            lines += self.add_mirror(lines)
         return lines, add_empty_line