]> wagnertech.de Git - SVBaL.git/blob - python/eh_app/qmodels.py
Erste Version
[SVBaL.git] / python / eh_app / qmodels.py
1 '''
2 Created on 04.12.2024
3
4 @author: sparky2021
5 '''
6 from q import QError
7 from qif import QIF
8 from .AWK import config
9 import datetime
10 from django.utils.decorators import classproperty
11 import os
12
13 def create_mitglied_from_dataset(data):
14     eintrittsdatum = datetime.datetime.strptime(data[8], '%d.%m.%Y')
15     if eintrittsdatum > datetime.datetime.today():
16         return None
17     if data[9] != "":
18         austrittsdatum = datetime.datetime.strptime(data[9], '%d.%m.%Y')
19         if austrittsdatum < datetime.datetime.today():
20             return None
21     m = Mitglied()
22     m.eintrittsdatum = eintrittsdatum
23     m.mitgliedsnr    = data[0]
24     m.anrede = data[1]
25     m.vorname = data[2]
26     m.nachname = data[3]
27     m.strasse  = data[4]
28     # "Zusatzadresse"
29     m.plz      = data[5]
30     m.ort      = data[6]
31     
32     # "Land"
33     # "Titel"
34     # "Geschlecht"
35     # "Familienstand"
36     # m.geburtsdatum   = data[7]
37     # "Austrittsgrund"
38     # m.zahlungsart    = data[16]
39     m.iban           = data[11]
40     # m.bic            = data[18]
41     # "Kontonummer"
42     # "Bankleitzahl"
43     # "Kreditinstitut"
44     # m.kontoinhaber   = data[22]
45     # m.mandatsreferenz = data[23]
46     # m.debitorenkontonr = data[24]
47     # m.status           = data[25]
48     # "Branche"
49     # "Notfallnummer"
50     # "Notfallkontakt"
51     # m.email            = data[29] # "KommE-Mail_P1"
52     # "KommFax_P1"
53     # "KommMobil_P1"
54     # "KommWeb_P1"
55     # "KommTelefon_P1"
56     # "KommSkype_P1"
57     # m.abteilung_1      = data[35]
58     # m.abteilungseintritt_1 = data[36]
59     # m.abteilungsaustritt_1 = data[37]
60     # if data[67] == '""':
61     #     m.stammnummer = 0
62     # else:
63     #     m.stammnummer       = int(m.rd_opt_qval(data[67]))
64     # "Freifeldname_2"
65     # m.ver_grund           = m.rd_opt_qval(data[69])
66     # if len(m.ver_grund) == 0:
67     #     m.ver_grund = f"{m.strasse}, {m.plz} {m.ort}"
68     # "Freifeldname_3"
69     # m.zeitung             = data[71]
70     return m
71     
72 class MitgliederQuery:
73     def __init__(self):
74         self.data_source = QIF({"d" : ";", "H" : 1})
75         '''
76             d (separator)  : ;
77             H (header line): yes
78         '''
79         #cf = config.getInstance()
80         #self.file_name = os.path.join(cf.requireConfig("data_path"), "quellen", cf.requireConfig("datenquelle"))
81         self.file_name = "undefined. Set by .init(verein)"
82         self.att_list = "MitgliedschaftsNr, Mitgliedschaftsanrede, Vorname1, Nachname1, Strasse1, Plz1, Ort1, Geburtsdatum1, EintrittVerein, AustrittVerein, Zahlungsart, IBAN, BIC, Kontoinhaber, MandatsReferenz, Email"
83         #self.att_list = "Mitgliedschaftsanrede, Vorname1, Nachname1, Strasse1, Plz1, Ort1, Geburtsdatum1, EintrittVerein, AustrittVerein, Zahlungsart, IBAN, BIC, Kontoinhaber, MandatsReferenz, Email"
84         #                 0              1       2        3          4        5    6    7             8               9               10           11    12   13            14     15         16              17
85         cf = config.getInstance()
86         self.file_name = os.path.join(cf.requireConfig("data_path"), "quellen", cf.requireConfig("datenquelle"))
87         
88     def all(self):
89         data_set = self.data_source.request(f"SELECT {self.att_list} FROM {self.file_name} ORDER BY Nachname1, Vorname1")
90         if type(data_set) is QError:
91             raise RuntimeError(data_set)
92         mm = []
93         for data in data_set:
94             m = create_mitglied_from_dataset(data)
95             if m:
96                 mm.append(m)
97         return mm
98     
99     def get(self, mitgliedsnr):
100         data_set = self.data_source.request(f"SELECT {self.att_list} FROM {self.file_name} WHERE MitgliedschaftsNr = {mitgliedsnr}")
101         if type(data_set) is QError:
102             raise RuntimeError(data_set)
103         if data_set[0]:
104             return create_mitglied_from_dataset(data_set[0])
105         return None
106     
107     def VersicherteGrundstucke(self, mitglied):
108         # Hole Basiseintrag
109
110         data_set = self.data_source.request(f"SELECT Objekt FROM {self.file_name} WHERE MitgliedschaftsNr = {mitglied.mitgliedsnr}")
111         if type(data_set) is QError:
112             raise RuntimeError(data_set)
113         if data_set[0][0]:
114             gr = data_set[0][0]
115         else:
116             gr = f"{mitglied.strasse}, {mitglied.plz} {mitglied.ort}"
117         gst = [gr]
118         
119         # Suche nach weiteren Grunstücken
120         data_set = self.data_source.request(f"SELECT `Weiteres Grundstück 1` FROM {self.file_name} WHERE MitgliedschaftsNr = {mitglied.mitgliedsnr}")
121         if type(data_set) is QError:
122             raise RuntimeError(data_set)
123         if data_set[0][0] != "":
124             gst.append(data_set[0][0])
125                 
126         data_set = self.data_source.request(f"SELECT `Weiteres Grundstück 2` FROM {self.file_name} WHERE MitgliedschaftsNr = {mitglied.mitgliedsnr}")
127         if type(data_set) is QError:
128             raise RuntimeError(data_set)
129         if data_set[0][0] != "":
130             gst.append(data_set[0][0])
131                 
132         data_set = self.data_source.request(f"SELECT `Weiteres Grundstück 3` FROM {self.file_name} WHERE MitgliedschaftsNr = {mitglied.mitgliedsnr}")
133         if type(data_set) is QError:
134             raise RuntimeError(data_set)
135         if data_set[0][0] != "":
136             gst.append(data_set[0][0])
137                 
138         return gst
139 class classproperty(object):
140     def __init__(self, f):
141         self.f = f
142     def __get__(self, obj, owner):
143         return self.f(owner)
144      
145 class Mitglied:
146     #def objects = MitgliederQuery()
147     _objects = None
148     @classproperty
149     def objects(cls):
150         if not cls._objects:
151             cls._objects = MitgliederQuery()
152             ############################ Hack #########################
153             #cls._objects.init("svbal")
154         return cls._objects
155         
156     
157     #@property : nette Idee, funktioniert aber nicht auf Klassenebene
158     '''
159     def objects():
160         if not _objects:
161             _objects = MitgliederQuery()
162         print ("xxxxxxxxxxxxxxxxxxxxxxtype _objects",type(_objects))
163         return _objects
164     '''
165     def __init__(self):
166         pass
167     
168     def VersicherteGrundstucke(self):
169         return self.objects.VersicherteGrundstucke(self)