Nutze das globale Leistungsdatum BT-72 wenn angemessen
Bernd Wurst

Bernd Wurst commited on 2024-05-18 08:43:48
Zeige 1 geänderte Dateien mit 36 Einfügungen und 2 Löschungen.

... ...
@@ -108,6 +108,41 @@ def InvoiceToXML(invoice):
108 108
     if invoice.contract_number:
109 109
         doc.trade.agreement.contract.issuer_assigned_id = invoice.contract_number
110 110
 
111
+    # Wenn alle Leistungsdaten aller Posten exakt ein fixes Datum sind, sollte statt dem Datumbereich der
112
+    # einzelnen Posten doc.trade.delivery.event.occurence verwendet werden. Dazu müssen vorab alle Posten
113
+    # aller Tabellen geprüft werden
114
+    only_one_date = True
115
+    deliverydate = None
116
+    try:
117
+        for part in invoice.parts:
118
+            if not isinstance(part, InvoiceTable):
119
+                continue
120
+            for el in part.entries:
121
+                end = None
122
+                start = None
123
+                if 'period_end' in el and el['period_end']:
124
+                    end = el['period_end']
125
+                if 'period_start' in el and el['period_start']:
126
+                    start = el['period_start']
127
+                if start and end and start != end:
128
+                    print(f"{start} != {end}")
129
+                    deliverydate = None
130
+                    only_one_date = False
131
+                    raise Exception('loop abort')
132
+                if start and not deliverydate:
133
+                    deliverydate = el['period_start']
134
+                    continue
135
+                if start != deliverydate:
136
+                    print(f"{start} != {deliverydate}")
137
+                    deliverydate = None
138
+                    only_one_date = False
139
+                    raise Exception('loop abort')
140
+    except Exception as e:
141
+        print('exception: ' + str(e))
142
+        pass
143
+    if only_one_date and deliverydate:
144
+        doc.trade.delivery.event.occurrence = deliverydate
145
+
111 146
     # Line Items
112 147
     summe_netto = 0.0
113 148
     summe_brutto = 0.0
... ...
@@ -136,12 +171,11 @@ def InvoiceToXML(invoice):
136 171
                 if 'desc' in el and el['desc'] != '':
137 172
                     li.product.description = el['desc']
138 173
 
174
+                if not only_one_date:
139 175
                     if 'period_start' in el and el['period_start']:
140 176
                         li.settlement.period.start = el['period_start']
141 177
                         if 'period_end' in el and el['period_end']:
142 178
                             li.settlement.period.end = el['period_end']
143
-                    else:
144
-                        li.settlement.period.end = el['period_start']
145 179
 
146 180
                 unit = 'C62'
147 181
                 if el['unit']:
148 182