From 24928931c8b13baed89ce02ec99b742c6a88e9cd Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@necronda.net>
Date: Fri, 28 Apr 2023 12:45:10 +0200
Subject: [PATCH] Add client_parameter table

---
 sql/v01/10.create.sql | 17 ++++++++++++-----
 wgmaster/import.py    |  2 +-
 wgmaster/migrate.py   | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/sql/v01/10.create.sql b/sql/v01/10.create.sql
index 7e51c20..b9ec485 100644
--- a/sql/v01/10.create.sql
+++ b/sql/v01/10.create.sql
@@ -3,7 +3,14 @@ PRAGMA foreign_keys = ON;
 
 CREATE TABLE meta (
     version INTEGER NOT NULL DEFAULT 1
-);
+) STRICT;
+
+CREATE TABLE client_parameter (
+    param TEXT NOT NULL CHECK (param REGEXP '^[A-Z_]+$'),
+    value TEXT,
+
+    CONSTRAINT pk_parameter PRIMARY KEY (param)
+) STRICT;
 
 CREATE TABLE country (
     alpha2 TEXT    NOT NULL CHECK (alpha2 REGEXP '^[A-Z]{2}$'),
@@ -103,7 +110,7 @@ CREATE TABLE AT_plz (
     CONSTRAINT fk_AT_plz_AT_bundesland FOREIGN KEY (blnr) REFERENCES AT_bundesland (blnr)
         ON UPDATE CASCADE
         ON DELETE RESTRICT
-);
+) STRICT;
 
 CREATE TABLE AT_plz_dest (
     plz     INTEGER NOT NULL CHECK (plz >= 1000 AND plz <= 9999),
@@ -245,7 +252,7 @@ CREATE TABLE branch (
     CONSTRAINT fk_branch_postal_dest FOREIGN KEY (country, postal_dest) REFERENCES postal_dest (country, id)
         ON UPDATE CASCADE
         ON DELETE RESTRICT
-);
+) STRICT;
 
 CREATE TABLE wine_attribute (
     attrid    TEXT    NOT NULL CHECK (attrid REGEXP '^[A-Z]+$'),
@@ -350,7 +357,7 @@ CREATE TABLE contract (
     CONSTRAINT fk_contract_member FOREIGN KEY (mgnr) REFERENCES member (mgnr)
         ON UPDATE CASCADE
         ON DELETE RESTRICT
-);
+) STRICT;
 
 CREATE TABLE area_commitment (
     vnr    INTEGER NOT NULL,
@@ -420,7 +427,7 @@ CREATE TABLE season (
     CONSTRAINT fk_season_currency FOREIGN KEY (currency) REFERENCES currency (code)
         ON UPDATE CASCADE
         ON DELETE RESTRICT
-);
+) STRICT;
 
 CREATE TABLE modifier (
     year         INTEGER NOT NULL,
diff --git a/wgmaster/import.py b/wgmaster/import.py
index 07ee161..068f057 100755
--- a/wgmaster/import.py
+++ b/wgmaster/import.py
@@ -13,7 +13,7 @@ import csv
 
 DIR: str
 
-TABLES = ['branch', 'wb_gl', 'wb_kg', 'wb_rd', 'wine_attribute', 'wine_cultivation',
+TABLES = ['client_parameter', 'branch', 'wb_gl', 'wb_kg', 'wb_rd', 'wine_attribute', 'wine_cultivation',
           'member', 'member_billing_address', 'contract',
           'area_commitment', 'area_commitment_parcel', 'area_commitment_attribute',
           'season', 'modifier', 'delivery', 'delivery_part', 'delivery_part_attribute', 'delivery_part_modifier', ]
diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py
index cda9a4f..2918970 100755
--- a/wgmaster/migrate.py
+++ b/wgmaster/migrate.py
@@ -909,6 +909,41 @@ def migrate_payments(in_dir: str, out_dir: str) -> None:
     pass  # TODO migrate payments
 
 
+def migrate_parameters(in_dir: str, out_dir: str) -> None:
+    params: Dict[str, str] = {p['Bezeichnung']: p['Wert'] for p in csv.parse_dict(f'{in_dir}/TParameter.csv')}
+    name = params['MANDANTENNAME1'].title().replace('F.', 'für').replace('U.', 'und')
+    shortened = name.replace(' für ', ' f. ').replace(' und ', ' u. ')
+    suffix = params['MANDANTENNAME2'].lower().replace(' ', '').replace('.', '')
+    suffixes = {
+        'reggenmbg': 'reg. Gen.m.b.H.'
+    }
+
+    new_params: Dict[str, Optional[str]] = {
+        'NAME_TOKEN': None,
+        'NAME_SHORT': None,
+        'NAME_SHORTENED': shortened,
+        'NAME': name,
+        'NAME_SUFFIX': suffixes[suffix],
+        'PLZ': params['MANDANTENPLZ'],
+        'ORT': params['MANDANTENORT'],
+        'ADDRESS': params['MANDANTENSTRASSE'],
+        'DOCUMENT_SENDER': params['ABSENDERTEXT2'],
+        'IBAN': None,
+        'BIC': None,
+        'USTID': params['MANDANTENUID'].replace(' ', ''),
+        'LFBISNR': params['MANDANTENBETRIEBSNUMMER'],
+        'PHONE': params['MANDANTENTELEFON'],
+        'FAX': params['MANDANTENTELEFAX'],
+        'EMAIL': params['MANDANTENEMAIL'],
+        'WEBSITE': params['MANDANTENHOMEPAGE'],
+    }
+
+    with open(f'{out_dir}/client_parameter.csv') as f:
+        f.write('param;value\n')
+        for param, value in new_params.items():
+            f.write(csv.format_row(param, value))
+
+
 def main() -> None:
     global DB_CNX, QUIET, HKID, WG
 
@@ -947,6 +982,7 @@ def main() -> None:
     migrate_contracts(args.in_dir, args.out_dir)
     migrate_deliveries(args.in_dir, args.out_dir)
     migrate_payments(args.in_dir, args.out_dir)
+    migrate_parameters((args.in_dir, args.out_dir))
 
     DB_CNX.close()