Browse code

mlt: Art.15-Export prüft nun vor dem Export, ab agglomerations_plants Zeilen mit NULL in from_date oder to_date enthält, was nicht sein darf, aber gelegentlich vorkommt

git-svn-id: svn://devel.enda.eu/svnroot/e_kommu/xml_export/trunk@1012 6d5695c6-a2e0-438d-8b37-c93c90bbf000

Matthias Lüttgert authored on 30/06/2016 10:20:24
Showing 3 changed files
... ...
@@ -134,6 +134,7 @@ module Gui_callbacks
134 134
       ABOUT,
135 135
       ["M. Lüttgert (mlt)"], ["Es gibt keine Dokumentation"], nil).show
136 136
   end
137
+
137 138
   def gtk_main_quit(widget)
138 139
     print widget.to_s, " Name: <", widget.name, ">\n"
139 140
     Gtk.main_quit
... ...
@@ -29,8 +29,10 @@
29 29
 #   already documented and know problem bears pl_kan_id (TP) and
30 30
 #   dp_surface_id and plant_id (DP)
31 31
 #
32
+# Rel-1-3-4
33
+#   2016-06-29 xx:xx mlt: XML-Art.15-Export mit Prüfung der Tabelle agglomerations_plants versehen
32 34
 # Rel-1-3-3
33
-#   2016-06-28 17:58 mlt: XML-Art.15-Export mit Dummy-Werte versehen
35
+#   2016-06-28 17:58 mlt: XML-Art.15-Export mit Dummy-Werten versehen
34 36
 # Rel-1-3-1
35 37
 #   2016-06-17 13:00 mlt: Finished implementation works for art. 17 and adjustment works
36 38
 #   for art. 15 XML export
... ...
@@ -68,7 +70,7 @@ begin
68 68
   include RbConfig
69 69
 
70 70
   APPNAME = "e-Kommu XML Exporter"
71
-  APPVERSION = "1.3.1"
71
+  APPVERSION = "1.3.4"
72 72
   ABOUT = <<EOS
73 73
 
74 74
 (c) ENDA, 2016, 2014, 2013, 2012, 2011, 2010
... ...
@@ -5,7 +5,9 @@
5 5
 # 
6 6
 # by mlt
7 7
 #
8
-# Rel-1-3-3
8
+# Rel-1-3-4
9
+# 2016-06-29, mlt: def check_some_data neu: Vor dem Export prüfen, ob die Tabelle agglomerations_plants
10
+#                  Einträge besitzt, bei denen from_date oder to_date = null ist
9 11
 # 2016-06-28, mlt: Dummy-Werte für aggC1, aggC2 und aggPercWithoutTreatment, wenn state=2; Konform mit der COM-
10 12
 #                  Empfehlung und dem XML-Schema wurde für alle 0 als Dummy gesetzt. Etwas sinnvolleres erlaubt
11 13
 #                  das Schema nicht.
... ...
@@ -61,6 +63,7 @@ class Art15_XML_Exporter
61 61
 
62 62
   def close_connection
63 63
     @dbh.disconnect if @dbh
64
+    @dbh = nil
64 65
   end
65 66
 
66 67
   def export
... ...
@@ -74,6 +77,7 @@ class Art15_XML_Exporter
74 74
     @dbh = self.get_connection
75 75
     @oroot = self.open_document
76 76
 
77
+    self.check_some_data
77 78
     self.prepare_coord_data
78 79
     self.create_document
79 80
     self.write_document
... ...
@@ -84,6 +88,43 @@ class Art15_XML_Exporter
84 84
     puts "Ende am/um #{Stnd.now}"
85 85
   end
86 86
 
87
+  def check_some_data
88
+    any_errors = false
89
+    # Prüfen, ob die Tabelle agglomerations_plants Einträge besitzt, bei denen from_date oder to_date = null ist
90
+    stmt = "select * from agglomerations_plants ap
91
+      where state = 0 AND (date_from IS NULL OR date_to IS NULL)"
92
+    rows = dbh.select_all(stmt)
93
+    if rows.length > 0
94
+      any_errors = true
95
+      # TODO: Wenn dem so ist, Fehler melden (Konsole und MessageBox) und die Arbeit verweigern!
96
+      message_string = "✘ (FAIL) Prüfung Tabelle agglomerations_plants auf NULL\n"
97
+      message_string += "in date_from und date_to.\n"
98
+      message_string += "Es gibt #{rows.length} Zeilen in der Tabelle agglomerations_plants,\n"
99
+      message_string += "die entweder im Feld date_from oder im Feld date_to\n"
100
+      message_string += "NULL stehen haben.\n"
101
+      message_string += "\n"
102
+      message_string += "Überflüssig zu sagen, dass dies ein FEHLER ist, der\n"
103
+      message_string += "die Ausgabe von Agglomerationszeigern in den Anlagen\n"
104
+      message_string += "verhindert."
105
+      puts message_string
106
+      dialog = Gtk::MessageDialog.new(@glade['main_window'],
107
+                                      Gtk::Dialog::DESTROY_WITH_PARENT,
108
+                                      Gtk::MessageDialog::ERROR,
109
+                                      Gtk::MessageDialog::BUTTONS_CLOSE,
110
+                                      message_string)
111
+      dialog.run
112
+      dialog.destroy
113
+    else
114
+      puts "✔ (passed) Prüfung Tabelle agglomerations_plants auf NULL in date_from und date_to"
115
+    end
116
+
117
+    if any_errors
118
+      puts "Arbeitsverweigerung aufgrund detektierter Fehler. Tschüss."
119
+      Gtk.main_quit
120
+      exit! 0
121
+    end
122
+  end
123
+
87 124
   def open_document
88 125
     @odoc = XML::Document.new()
89 126
     @odoc.encoding = XML::Encoding::UTF_8
... ...
@@ -771,6 +812,12 @@ class Art15_XML_Exporter
771 771
     p_node << rep_code = XML::Node.new('dd821:repCode')
772 772
     rep_code << REP_CODE
773 773
 
774
+    # TODO: Leider hat die Anwendung offenbar einen Bug, der date_from und date_to der Tabelle
775
+    # agglomerations_plants mit null füllt anstatt ordentich mit 20140101 - 20141231 (z. B.)
776
+    # Dann findet dieses Statement keine Zuordnungen!
777
+    # Lösungen: 1. das bescherte date_from aus der where-Clause raus. Wozu überhaupt!
778
+    # Die ID ist genau mit einem Satz verbunden und der kommt aus den Agglomerations, hat
779
+    # also das korrekte from_date.
774 780
     stmt = "select agglomeration_id from agglomerations_plants ap
775 781
       where state = 0 and date_from = #{DATE_FROM}
776 782
         and plant_id = ? "