Module datenbank
[hide private]
[frames] | no frames]

Source Code for Module datenbank

   1  # 
   2  # -*- coding: utf-8 -*- 
   3  # 
   4  # 
   5  #    filename:  datenbank.py 
   6  # 
   7  #    version:   see wxvf.py 
   8  # 
   9  # 
  10  # ---------------------------------------------------------------------------------------- 
  11  # 
  12  # 
  13  #    Copyright (C) 2010, 2011  Michael Bellair 
  14  # 
  15  #    This file is part of wxvf. 
  16  # 
  17  #    wxvf is free software: you can redistribute it and/or modify 
  18  #    it under the terms of the GNU General Public License as published by 
  19  #    the Free Software Foundation, either version 3 of the License, or 
  20  #    (at your option) any later version. 
  21  # 
  22  #    wxvf is distributed in the hope that it will be useful, 
  23  #    but WITHOUT ANY WARRANTY; without even the implied warranty of 
  24  #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  25  #    GNU General Public License for more details. 
  26  # 
  27  #    You should have received a copy of the GNU General Public License 
  28  #    along with wxvf.  If not, see <http://www.gnu.org/licenses/>. 
  29  # 
  30  #    Michael Bellair 
  31  #    Sportplatzstrasse 11 
  32  #    01259 Dresden 
  33  # 
  34  #    E-Mail:    bellair@freenet.de 
  35  #    homepage:  http://vf.michaelbellair.de/index.html 
  36  # 
  37  # 
  38  # ---------------------------------------------------------------------------------------- 
  39  # 
  40  import os 
  41  import logging                  # Protokollinformationen 
  42  import logging.handlers         # Handler zu den Protokollinfos 
  43   
  44  import pgdb                     # pyGreSQL 
  45                                  # Python Database API Specification v2.0 (PEP: 249) 
  46                                  # Details: /usr/share/pyshared/pgdb.py 
  47   
  48  from universal import allg      # Allgemeine Funktionen 
  49  from universal import zk        # Zeichenketten bearbeiten 
  50   
  51  import wx 
  52   
  53  from wxuniversal import HK_ANM 
  54  from wxuniversal import HK_DOK 
  55  from wxuniversal import HK_DOKTYP 
  56  from wxuniversal import HK_GEFAHRENSZENARIO 
  57  from wxuniversal import HK_REPR_GEFSZENARIO 
  58  from wxuniversal import HK_PE 
  59  from wxuniversal import HK_PETYP 
  60  from wxuniversal import HK_SIANF 
  61  from wxuniversal import HK_SIANFTYP 
  62  from wxuniversal import HK_STR 
  63  from wxuniversal import HK_STRBEZ 
  64   
  65  import sys                      # Programmende >sys.exit()< 
  66   
  67   
  68   
  69   
  70  # 
  71  # 
  72  # 
  73  # ---------------------------------------------------------------------------------------- 
  74  # ---------------------------------------------------------------------------------------- 
  75  # --                                    -------------------------------------------------- 
  76  # --    Offene Punkte / Aufgaben        -------------------------------------------------- 
  77  # --                                    -------------------------------------------------- 
  78  # ---------------------------------------------------------------------------------------- 
  79  # ---------------------------------------------------------------------------------------- 
  80  # 
  81  #  
  82  #       -- siehe TODO 'datenbank.py' -- 
  83  # 
  84  # 
  85  # ---------------------------------------------------------------------------------------- 
  86  # 
  87  # 
  88   
  89   
  90  # 
  91  # 
  92  # 
  93  # ---------------------------------------------------------------------------------------- 
  94  # ---------------------------------------------------------------------------------------- 
  95  # --                                                            -------------------------- 
  96  # --    Fehlerbehandlung (Ausnahmen) beim Datenbankzugriff      -------------------------- 
  97  # --                                                            -------------------------- 
  98  # ---------------------------------------------------------------------------------------- 
  99  # ---------------------------------------------------------------------------------------- 
 100  # 
101 -class Fehler( Exception ):
102 """ 103 Klasse zur Behandlung von Datenbankfehlermeldungen. 104 105 @keyword value: Es ist die Fehlermeldung zu übergeben. 106 @type value: Zeichenkette 107 """
108 - def __init__( self, value ):
109 self.value = "Datenbankfehlermeldung -> " + str( value )
110
111 - def __str__( self ):
112 return repr( self.value )
113 114 115 # 116 # 117 # 118 # ---------------------------------------------------------------------------------------- 119 # ---------------------------------------------------------------------------------------- 120 # 121 # 122 # 123 124 125 # 126 # 127 # 128 # ---------------------------------------------------------------------------------------- 129 # ---------------------------------------------------------------------------------------- 130 # -- ---------------------------------- 131 # -- Datenbankzugriff auf PostgreSQL-Datenbanken ---------------------------------- 132 # -- als Haupttransaktion ---------------------------------- 133 # -- ---------------------------------- 134 # ---------------------------------------------------------------------------------------- 135 # ---------------------------------------------------------------------------------------- 136 #
137 -class Datenbank:
138 """ 139 Klasse zum Datenbankzugriff auf PostgreSQL-Datenbanken. Es wird die Datenbankverbindung hergestellt und eine Transaktion gestartet. 140 141 @keyword dbName: Es ist der Datenbankname anzugeben 142 @type dbName: Zeichenkette 143 @keyword dbBenutzerName: Es ist der Datenbankbenutzername zu übergeben. 144 @type dbBenutzerName: Zeichenkette 145 @keyword dbKennwort: Es ist das Kennwort des Datenbankbenutzers zu übergeben. 146 @type dbKennwort: Zeichenkette 147 @keyword hostaddr: Es ist die IP-Adresse anzugeben, über die der PostgreSQL-Datenbankserver ansprechbar ist. 148 @type hostaddr: Zeichenkette 149 150 @raise Fehler: Fehlermeldung und Programmende, wenn die Datenbankverbindung nicht hergestellt werden kann. 151 """ 152 153 154 155 156 # 157 # ------------------------------------------------------------------------------------ 158 # ------------------------------------------------------------------------------------ 159 # -- Datenbankverbindung herstellen ---------------------------------- 160 # ------------------------------------------------------------------------------------ 161 # ------------------------------------------------------------------------------------ 162 #
163 - def __init__( self, dbName, dbBenutzerName, dbKennwort, hostaddr ):
164 165 # 166 # -------------------------------------------------------------------------------- 167 # -- Konstanten ---------------------------------------------------------- 168 # -------------------------------------------------------------------------------- 169 # 170 self.konstante__dok_doku_aspekt = [ 'BEWEIS', 'QUELLE' ] 171 172 self.konstante__prt_typ_id__gefProt = range( 1, 20 ) 173 self.konstante__prt_typ_id__siAnf = range( 20, 28 ) 174 175 self.konstante__str_name_id__gefahrennetz = 2 176 177 178 179 # 180 # -------------------------------------------------------------------------------- 181 # -- Protokolldatei anlegen -------------------------------------------------- 182 # -------------------------------------------------------------------------------- 183 # 184 self.__Protokolldatei__ = None 185 self.__ProtokolldateiEintrag__ = "" 186 187 188 # 189 # -------------------------------------------------------------------------------- 190 # -- Datenbankabfragen unterbinden ------------------------------------------ 191 # -------------------------------------------------------------------------------- 192 # 193 self.unterbindeDbAbfrage = True 194 195 196 197 # 198 # -------------------------------------------------------------------------------- 199 # -- Anzahl der gelesenen Spalten / Zeilen -------------------------- 200 # -- Wurden Werte zurückgegeben ? -------------------------- 201 # -- Cursorobjekt -------------------------- 202 # -- Objekt für die Abfrageergebnisse bereitstellen -------------------------- 203 # -------------------------------------------------------------------------------- 204 # 205 self.ps_gefszenario_id = None 206 """ 207 @cvar: Enthält die aktuelle C{ps.gefszenario.id}. 208 @type: Ganzzahl 209 """ 210 211 self.__anzSpalten__ = 0 212 """ 213 @requires: Erst ist C{__dbAbfrage__(...)} auszuführen.. 214 215 @cvar: Enthält die Anzahl der gelesenen Spalten. 216 @type: Ganzzahl 217 """ 218 219 self.__anzZeilen__ = 0 220 """ 221 @requires: Erst ist C{__dbAbfrage__(...)} auszuführen.. 222 223 @cvar: Enthält die Anzahl der gelesenen Zeilen (Tuples). 224 @type: Ganzzahl 225 """ 226 227 self.__hatWerte__ = False 228 """ 229 @requires: Erst ist C{__dbAbfrage__(...)} auszuführen.. 230 231 @cvar: Die Datenbankabfrage hat Werte zurückgegeben. 232 @type: Boolean 233 """ 234 235 self.__dbCursor__ = None 236 """ 237 @cvar: Datenbankobjekt, welches den systemweit geltenden Datenbankcursor repräsentiert. 238 @type: pgdb - Cursor Object 239 """ 240 241 self.__dbAbfrage__Ergebnis = None 242 """ 243 @cvar: Repräsentiert das Ergebnis der SQL-Abfrage. 244 @type: pgdb - Cursor Object 245 """ 246 247 248 249 # 250 # -------------------------------------------------------------------------------- 251 # -- Filterkriterien -------------------------------------------------- 252 # -------------------------------------------------------------------------------- 253 # 254 self.filter__prj_projekte_id = 2 255 """ 256 @cvar: Filter: Aktuell gewähltes Projekt. Die Projekte beginnen mit C{prj.projekte.id == 2}. 257 @type: Ganzzahl 258 """ 259 260 self.filter__spr_sprachen_id = 1 261 """ 262 @cvar: Filter: Aktuell gewählte Sprache 263 @type: Ganzzahl 264 """ 265 266 self.filter__zusKrit = dict() 267 """ 268 @cvar: Filter: Zusätzliche Filterkriterien 269 @type: Ganzzahl 270 """ 271 272 self.filter__bezeichnungAspekte = [ "-- Kein Aspekt gewählt --" 273 , "Strukturbezeichnung" # <- 1 274 , "Strukturpunkt" 275 , "Typ der Sicherheitsanforderung" # <- 3 276 , "Sicherheitsanforderung" 277 , "Typ des Protokolleintrages" # <- 5 278 , "Protokolleintrag" 279 , "Typ des Dokumentes" # <- 7 280 , "Dokument" ] 281 """ 282 @cvar: Filter: Bezeichnung der Aspekte der weiteren Filterkriterien. 283 @type: Python-Liste 284 """ 285 286 287 # 288 # -------------------------------------------------------------------------------- 289 # -- Permanente Datenstrukturen ---------- 290 # -- Mehrfaches redundantes Aufrufen von SQL-Abfragen vermeiden ---------- 291 # -- (Zugriffszeit optimieren) ---------- 292 # -------------------------------------------------------------------------------- 293 # 294 295 # 296 # -- Formular 'Filter' -------------------------------------------------- 297 # 298 self.daten__prjProjekte = [] # Liste der verfügbaren Projekte 299 self.daten__sprSprachen = [] # Liste der verfügbaren Sprachen 300 301 302 # 303 # -- Anmerkungen ---------------------------------------------------------- 304 # 305 self.daten__GefszenId_AnmId__Sprache__Projekt = dict() # Gefszen-Id -> Anmerkung-Id 306 307 # >..._Flex< - Projekt frei wählbar 308 self.daten__GefszenId_AnmId__Sprache__Projekt_Flex = dict() # Gefszen-Id -> Anmerkung-Id 309 310 311 312 # 313 # -- Dokumente ---------------------------------------------------------- 314 # 315 self.daten__dokTyp = [] # Liste der verfügbaren Dokumenttypen 316 self.daten__dokDoku__Sprache = dict() # Basisdokumentinformationen (alle Dokumente) 317 self.daten__dokDoku__Sprache__Projekt = [] # vollständige Dokumentinformationen (projektbezogen) 318 self.daten__ProtId_DokuId__Projekt = dict() # Verbindung Protokoll-Id -> Dokument-Id (projektbezogen) 319 320 # >..._Flex< - Projekt frei wählbar 321 self.daten__dokDoku__Sprache__Projekt_Flex = [] # vollständige Dokumentinformationen 322 self.daten__ProtId_DokuId__Projekt_Flex = dict() # Verbindung Protokoll-Id -> Dokument-Id 323 324 325 # 326 # -- Personen / Sprache -------------------------------------------------- 327 # 328 self.daten__prjPersonen = [] # Liste der verfügbaren Personen 329 self.daten__prtTyp__Sprache = [] # Liste der verfügbaren Typen der SiAnf- / GefProt-Einträge 330 331 332 # 333 # -- Gefahrenprotokolleinträge ------------------------------------------ 334 # 335 self.daten__prtProtokoll_gefProt__Sprache__Projekt = dict() # vollst. Gefahrenprotokolleinträge 336 self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt = dict() # Vorgänger / Nachfolger Gefprot. 337 self.daten__GefszenId_ProtId_gefProt__Projekt = dict() # Gefszen-Id -> GefProt-Id 338 339 self.daten__ProtId_PersId_aufgabe__Projekt = dict() # GefProt-Id -> Personen-Id (Beauftragt) 340 self.daten__ProtId_PersId_teilnehmer__Projekt = dict() # GefProt-Id -> Personen-Id (Teilnehmer) 341 342 # >..._Flex< - Projekt frei wählbar 343 self.daten__prtProtokoll_gefProt__Sprache__Projekt_Flex = dict() # vollst. Gefahrenprotokolleinträge 344 self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt_Flex = dict() # Vorgänger / Nachfolger Gefprot. 345 self.daten__GefszenId_ProtId_gefProt__Projekt_Flex = dict() # Gefszen-Id -> GefProt-Id 346 347 348 # 349 # -- Gefahrenszenario -------------------------------------------------- 350 # 351 self.daten__psAbk__Sprache__Projekt = dict() # Liste der verfügbaren Abkürzungen 352 self.daten__psAbk_Risikomatrix = dict() # Abk.-Id der Risikomatrix 353 354 self.daten__GefszenId__Projekt = [] # Liste der Gefszen-Id mit Kenner 'Sichtbar' 355 356 self.daten__GefszenId_AbkId_gp__Sprache__Projekt = dict() # Gefszen-Id -> Abk.-Id (gef. Pers.) 357 self.daten__GefszenId_AbkId_rh__Sprache__Projekt = dict() # Gefszen-Id -> Abk.-Id (Häufigkeit) 358 self.daten__GefszenId_AbkId_rg__Sprache__Projekt = dict() # Gefszen-Id -> Abk.-Id (Gefahrenstufe) 359 self.daten__GefszenId_AbkId_rr__Sprache__Projekt = dict() # Gefszen-Id -> Abk.-Id (Risikostufe) 360 361 self.daten__GefszenId_Wortgruppen__Sprache__Projekt = dict() # vollständiges Gefahrenszenario 362 363 364 # 365 # -- Sicherheitsanforderungen ------------------------------------------ 366 # 367 self.daten__prtProtokoll_siAnf__Sprache__Projekt = dict() # vollst. Sicherheitsanforderungen 368 self.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt = dict() # Vorgänger / Nachfolger SiAnf 369 self.daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt = dict() # SiAnf-Id -> GefProt-Id 370 self.daten__GefszenId_ProtId_siAnf__Projekt = dict() # Gefszen-Id -> SiAnf-Id 371 372 # >..._Flex< - Projekt frei wählbar 373 self.daten__prtProtokoll_siAnf__Sprache__Projekt_Flex = dict() # vollst. Sicherheitsanforderungen 374 self.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt_Flex = dict() # Vorgänger / Nachfolger SiAnf 375 self.daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt_Flex = dict() # SiAnf-Id -> GefProt-Id 376 self.daten__GefszenId_ProtId_siAnf__Projekt_Flex = dict() # Gefszen-Id -> SiAnf-Id 377 378 379 # 380 # -- Struktur ---------------------------------------------------------- 381 # 382 self.daten__strName = [] # Liste der Strukturbezeichnungen 383 self.daten__strStrkt__Sprache__Projekt = [] # vollständige Strukturpunkte 384 385 self.daten__GefszenId_StruktId__Projekt = dict() # Gefszen-Id -> Strkt-Id 386 self.daten__ProtId_StruktId__Projekt = dict() # GefProt-Id/SiAnf-Id -> Strkt-Id 387 388 # >..._Flex< - Projekt frei wählbar 389 self.daten__strStrkt__Sprache__Projekt_Flex = [] # vollständige Strukturpunkte 390 self.daten__GefszenId_StruktId__Projekt_Flex = dict() # Gefszen-Id -> Strkt-Id 391 self.daten__ProtId_StruktId__Projekt_Flex = dict() # GefProt-Id/SiAnf-Id -> Strkt-Id 392 393 394 395 # 396 # -------------------------------------------------------------------------------- 397 # -- Datenbankverbindung entsprechend ------------------ 398 # -- Python Database API Specification v2.0 (PEP: 249) ------------------ 399 # -------------------------------------------------------------------------------- 400 # 401 try: 402 self.__dbVerbindung__ = pgdb.connect( database = dbName 403 , user = dbBenutzerName 404 , password = dbKennwort 405 , host = hostaddr ) 406 """ 407 @cvar: Datenbankobjekt, welches die Datenbankverbindung enthält. 408 @type: pgdb - Connection Object 409 """ 410 411 except pgdb.Error, msg: 412 raise Fehler( "Die Verbindung zum Datenbankserver (PostgreSQL) konnte nicht hergestellt werden.\n\n" + str( msg ) + "\n" + "'wxvf' wird beendet." ) 413 414 415 416 417 # 418 # -- Tabellen, die auf >spr.uebvar.id< referenzieren auslesen ---------- 419 # 420 self.__dbAbfrage__( """ 421 -- 422 -- Liste der Spaltenabhängigkeiten auslesen 423 -- 424 SELECT 425 intern.gib__stsname( 'schtab', spstart ) AS schtab 426 , intern.gib__stsname( 'sp', spstart ) AS sp 427 FROM 428 intern.zeige__fremdschluessel 429 WHERE 430 spziel = 'spr.uebvar.id' 431 ;""" 432 , Fortschritt = None 433 , info = "" ) 434 435 436 # 437 # -- Abfrageergebnis zusammenstellen ---------------------------------- 438 # 439 self.listeTabellenSprUebvarId = [] 440 """ 441 @cvar: Es werden die Tabellennamen einschliesslich Spaltennamen zusammengefaßt, die aud C{spr.uebvar.id} referenzieren. Die Tabelle C{spr.uebersetzung.spr_uebvar_id} wird nicht aufgeführt ! 442 @type: Python-Liste 443 """ 444 for i in range( self.__anzZeilen__ ): 445 446 self.listeTabellenSprUebvarId.append( [ self.__gibWert__( i, 0 ) 447 , self.__gibWert__( i, 1 ) ] ) 448 449 450 # 451 # -- >spr.uebersetzung.spr_uebvar_id< entfernen -------------------------- 452 # 453 for i in range( len( self.listeTabellenSprUebvarId ) ) : 454 455 if( self.listeTabellenSprUebvarId[i][0] == 'spr.uebersetzung' ) : 456 457 del self.listeTabellenSprUebvarId[i] 458 break
459 460 461 462 463 464 465 # 466 # ------------------------------------------------------------------------------------ 467 # ------------------------------------------------------------------------------------ 468 # -- Datenbankabfrage -------------------------------------------------- 469 # ------------------------------------------------------------------------------------ 470 # ------------------------------------------------------------------------------------ 471 #
472 - def __dbAbfrage__( self, sql, Fortschritt = None, info = "" ):
473 """ 474 Methode zur Datenbankabfrage (die mittels C{sql} übergebenen SQL-Abfrage ausführen). 475 476 @param sql: Es ist die SQL-Abfrage zu übergeben. 477 @type sql: Zeichenkette 478 479 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 480 @type Fortschritt: Fortschritt 481 482 @param info: Es ist die Nachricht zum aktuellen Fortschritt anzugeben. 483 @type info: Zeichenkette 484 485 @raise Fehler: Fehlermeldung, wenn die SQL-Abfrage nicht erfolgreich war. 486 """ 487 488 # 489 # -- Datenbankabfragen unterbinden ------------------------------------------ 490 # 491 if( self.unterbindeDbAbfrage ) : return 492 493 494 495 # 496 # -- die internen Parameter zurücksetzen ---------------------------------- 497 # 498 self.__anzSpalten__ = 0 499 self.__anzZeilen__ = 0 500 self.__hatWerte__ = False 501 self.__dbAbfrage__Ergebnis = None 502 503 504 505 # 506 # -- >sql< darf nicht leer oder >None< sein ---------------------------------- 507 # 508 if( sql is None 509 or len( sql ) == 0 ) : 510 511 return 512 513 514 515 # 516 # -- CURSOR bereitstellen -------------------------------------------------- 517 # 518 if( self.__dbCursor__ == None ) : self.__dbCursor__ = self.__dbVerbindung__.cursor() 519 520 521 # 522 # -- Datenbank abfragen, ------------------------------------------ 523 # -- Datenbankabfrageobjekt anlegen ------------------------------------------ 524 # 525 try: 526 527 # 528 # -- SQL-Abfrage ausführen ------------------------------------------ 529 # 530 self.__dbCursor__.execute( sql ) 531 532 533 534 # 535 # -- Fortschritt anzeigen ------------------------------------------ 536 # 537 if( Fortschritt is not None ) : 538 539 Fortschritt.nimmFortschritt( info = info ) 540 541 542 543 # 544 # -- für SQL-Abfragen, die keine Zeilen liefern (BEGIN, ...) ---------- 545 # 546 self.__hatWerte__ = not( self.__dbCursor__.description == None ) 547 if( not self.__hatWerte__ ) : 548 return 549 550 551 # 552 # -- Notlösung -------------------------------------------------- 553 # 554 if( sql.find( "SAVEPOINT" ) > -1 ) : return 555 556 557 558 self.__dbAbfrage__Ergebnis = self.__dbCursor__.fetchall() 559 560 561 # 562 # -- für SELECT-Abfragen, die keine Zeilen liefern ------------------ 563 # 564 self.__hatWerte__ = not( self.__dbAbfrage__Ergebnis == [] ) 565 if( not self.__hatWerte__ ) : 566 return 567 568 569 except pgdb.Error, msg: 570 raise Fehler( msg ) 571 572 573 # 574 # -- Zeilenanzahl, Spaltenanzahl übernehmen ---------------------------------- 575 # 576 self.__anzSpalten__ = len( self.__dbCursor__.description ) 577 self.__anzZeilen__ = self.__dbCursor__.rowcount
578 579 580 581 # 582 # ------------------------------------------------------------------------------------ 583 # ------------------------------------------------------------------------------------ 584 # -- >ps.gefszenario.id< die den zusätzlichen -------------------------- 585 # -- Filterkriterien genügen, zurückgeben -------------------------- 586 # ------------------------------------------------------------------------------------ 587 # ------------------------------------------------------------------------------------ 588 #
590 """ 591 Es werden die C{ps.gefszenario.id} zurückgegeben, die den zusätzlichen Filterkriterien genügen. 592 593 @return: Es wird die Liste der C{ps.gefszenario.id} zurückgegeben, die den zusätzlichen Filterkriterien genügt (genügt kein Gefahrenszenario den zusätzlichen Filterkriterien, wird eine leere Liste zurückgegeben). Wurden keine zusätzlichen Filterkriterien angegeben, wird C{None} zurückgegeben. 594 @rtype: Zeichenkette 595 """ 596 597 # 598 # -- Es wurden keine zusätzlichen Filterkriterien ausgewählt ---------- 599 # 600 if( len( self.filter__zusKrit ) == 0 ) : 601 602 return None 603 604 605 606 # 607 # -- Typen der gewählten Filterkriterien zusammenstellen ------------------ 608 # -- (Duplikate entfernen) ------------------ 609 # 610 setFilterZusKrit__Typ = set() 611 for i in self.filter__zusKrit.iteritems() : 612 613 tmp = i[0].partition( '|' )[0] 614 615 if( tmp == HK_DOKTYP ) : tmp = HK_DOK 616 elif( tmp == HK_PETYP ) : tmp = HK_PE 617 elif( tmp == HK_SIANFTYP ) : tmp = HK_SIANF 618 elif( tmp == HK_STRBEZ ) : tmp = HK_STR 619 620 setFilterZusKrit__Typ.add( tmp ) 621 622 623 624 # 625 # -- gewählte Filterkriterien durchlaufen -- 626 # -- bereinigte Liste der gültigen >prt.protokoll.id< zusammenstellen -- 627 # 628 setFilterZusKrit__PrtProtokollId = set() 629 ersterDurchlauf = True 630 for i in setFilterZusKrit__Typ : 631 632 aktDaten = None 633 634 # 635 # -- Dokument(e) gewählt ------------------------------------------ 636 # -- Typ(en) gewählt ------------------------------------------ 637 # 638 if( i == HK_DOK ) : 639 640 aktDaten = self.daten__ProtId_DokuId__Projekt 641 642 # 643 # -- Protokolleinträge gewählt ---------------------------------- 644 # -- Typ der Protokolleinträge gewählt -------------------------- 645 # 646 elif( i == HK_PE ) : 647 648 aktDaten = self.daten__prtProtokoll_gefProt__Sprache__Projekt 649 650 # 651 # -- Sicherheitsanforderungen gewählt -------------------------- 652 # -- Typ der Sicherheitsanforderungen gewählt ------------------ 653 # 654 elif( i == HK_SIANF ) : 655 656 aktDaten = self.daten__prtProtokoll_siAnf__Sprache__Projekt 657 658 # 659 # -- Strukturpunkt(e) gewählt ---------------------------------- 660 # -- Strukturbezeichnung(en) gewählt ---------------------------------- 661 # 662 elif( i == HK_STR ) : 663 664 aktDaten = self.daten__ProtId_StruktId__Projekt 665 666 # 667 # -- sollte eigentlich nicht passieren -------------------------- 668 # 669 else : continue 670 671 672 # 673 # -- im ersten Durchlauf alle >prt.protkoll.id< übernehmen ---------- 674 # 675 if( ersterDurchlauf ) : 676 677 setFilterZusKrit__PrtProtokollId = set( aktDaten.keys() ) 678 679 ersterDurchlauf = False 680 681 continue 682 683 684 # 685 # -- in den weiteren Durchläufen alle >prt.protkoll.id< reduzieren -- 686 # 687 setFilterZusKrit__PrtProtokollId = setFilterZusKrit__PrtProtokollId.intersection( set( aktDaten.keys() ) ) 688 689 690 691 # 692 # -- keine >prt.protkoll.id< genügt den Filterkriterien ------------------ 693 # 694 if( len( setFilterZusKrit__PrtProtokollId ) == 0 ) : 695 696 return [] 697 698 699 # 700 # -- Gefahrenprotokoll-Id / Sicherheitsanforderungen-Id ------------------ 701 # -- ------------------ 702 # -- die Liste der >ps.gefszenario.id< zusammenstellen, die ------------------ 703 # -- den zusätzlichen Filterkriterien genügt ------------------ 704 # 705 erg = [] 706 707 tmp = [] 708 tmp.append( self.daten__GefszenId_ProtId_gefProt__Projekt ) 709 tmp.append( self.daten__GefszenId_ProtId_siAnf__Projekt ) 710 711 for i in tmp : 712 713 for j in i.iteritems() : 714 715 for k in j[1] : 716 717 if( k[0] in setFilterZusKrit__PrtProtokollId ) : 718 719 erg.append( j[0] ) 720 break 721 722 return erg
723 724 725 726 727 728 # 729 # ------------------------------------------------------------------------------------ 730 # ------------------------------------------------------------------------------------ 731 # -- Werte zurückgeben -------------------------------------------------- 732 # ------------------------------------------------------------------------------------ 733 # ------------------------------------------------------------------------------------ 734 #
735 - def __gibWert__( self, zeilenNr, spaltenNr ):
736 """ 737 Methode zur Rückgabe des gelesenen Wertes, der mittels C{zeilenNr, spaltenNr} angegeben wird. 738 Wenn aus der Datenbank C{NULL} gelesen wird, wird eine leere Zeichenkette zurückgegeben. 739 740 @requires: Erst ist C{__dbAbfrage__(...)} auszuführen.. 741 742 @param zeilenNr: Es ist die Zeilennummer zu übergeben. 743 @type zeilenNr: Ganzzahl 744 745 @param spaltenNr: Es ist die Spaltennummer zu übergeben. 746 @type spaltenNr: Ganzzahl 747 748 @return: Es wird der gelesenen Wert zurückgegeben. 749 @rtype: Datentyp des jeweiligen Wertes 750 """ 751 752 # 753 # -- keine Werte vorhanden -------------------------------------------------- 754 # 755 if( not self.__hatWerte__ 756 or zeilenNr > self.__anzZeilen__ 757 or spaltenNr > self.__anzSpalten__ ) : 758 return "" 759 760 761 # 762 # -- NULL vorhanden ---------------------------------------------------------- 763 # 764 if( len( self.__dbAbfrage__Ergebnis ) == 0 ) : 765 return "" 766 767 if( self.__dbAbfrage__Ergebnis[zeilenNr][spaltenNr] == None ) : 768 return "" 769 770 771 # 772 # -- Werte zurückgeben -------------------------------------------------- 773 # 774 if( isinstance( "Zk", type( self.__dbAbfrage__Ergebnis[zeilenNr][spaltenNr] ) ) ) : 775 776 if( os.name == 'nt' ) : 777 return unicode( self.__dbAbfrage__Ergebnis[zeilenNr][spaltenNr], 'utf-8' ).encode('windows-1252') 778 else : 779 return unicode( self.__dbAbfrage__Ergebnis[zeilenNr][spaltenNr], 'utf-8' ).encode('utf-8') 780 781 else: 782 783 return self.__dbAbfrage__Ergebnis[zeilenNr][spaltenNr]
784 785 786 787 788 789 # 790 # ------------------------------------------------------------------------------------ 791 # ------------------------------------------------------------------------------------ 792 # -- Permanente Datenstrukturen initialisieren -------------------------- 793 # ------------------------------------------------------------------------------------ 794 # ------------------------------------------------------------------------------------ 795 #
796 - def __initPermDatenstruktur__( self, Fortschritt, protokollDatKopf, sql, permDaten, istDict = False ):
797 """ 798 Interne Methode zur Initialisierung eines C{wx-Objektes}, welches eine Listenform hat. Die SQL-Abfrage wird nur dann ausgeführt, wenn die zu bearbeitende globale Variable C{permDaten} nicht C{None} ist. 799 800 @note: C{permDaten} und das übergebene C{wx-Objekt} wird verändert ! 801 802 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 803 @type Fortschritt: Fortschritt 804 805 @param protokollDatKopf: Es ist der Text der Kopfzeile der aktuellen SQL-Abfrage anzugeben, der in die Protokolldatei bei Ausführung der SQL-Abfrage geschrieben wird. 806 @type protokollDatKopf: Zeichenkette 807 808 @param sql: Es ist die SQL-Abfrage zu übergeben, die die Einträge der Liste erzeugt. In der ersten Spalte der SQL-Abfrage muß der Wert stehen, der im wxObjekt dargestellt wird. In den nächsten Spalten können zusätzliche (nicht sichtbare) Werte übergeben werden. 809 @type sql: Zeichenkette 810 811 @param permDaten: Es ist die globale Variable zu übergeben, die das Ergenis der SQL-Abfrage C{sql} aufnimmt. 812 @type permDaten: Liste / Dictionary 813 814 @param istDict: Es ist C{True} anzugeben, wenn C{permDaten} ein Python-Dictionary (Dict) ist. 815 @type istDict: Boolean 816 """ 817 818 # 819 # -------------------------------------------------------------------------------- 820 # -- die globale Variable muß mit Werten gefüllt werden ------------------ 821 # -- (Datenbankabfrage durchführen) ------------------ 822 # -------------------------------------------------------------------------------- 823 # 824 if( len( permDaten ) == 0 ) : 825 826 # 827 # -- in Protokolldatei schreiben ---------------------------------- 828 # 829 self.ProtokolldateiEintragen( eintrag = protokollDatKopf 830 , istKopfzeile = True ) 831 832 833 # 834 # -- SQL-Abfrage ausführen ------------------------------------------ 835 # 836 self.__dbAbfrage__( sql, Fortschritt = Fortschritt, info = protokollDatKopf ) 837 838 839 # 840 # -- Dictionary schützen ------------------------------------------ 841 # 842 if( istDict and self.__anzSpalten__ < 2 ) : 843 844 return 845 846 847 # 848 # -- Das Ergebnis der SQL-Abfrage in die globale Variable übernehmen -- 849 # 850 tmp = [] 851 akt = None 852 for i in range( self.__anzZeilen__ ): 853 854 # 855 # -- Dictionary -------------------------------------------------- 856 # 857 if( istDict ) : 858 859 if( akt != self.__gibWert__( i, 0 ) ) : 860 861 tmp = [] 862 akt = self.__gibWert__( i, 0 ) 863 864 tmpZ = [] 865 for j in range( 1, self.__anzSpalten__ ): 866 867 tmpZ.append( self.__gibWert__( i, j ) ) 868 869 tmp.append( tmpZ ) 870 permDaten[akt] = tmp 871 872 873 # 874 # -- Liste ---------------------------------------------------------- 875 # 876 else : 877 tmp = [] 878 for j in range( self.__anzSpalten__ ): 879 880 tmp.append( self.__gibWert__( i, j ) ) 881 882 permDaten.append( tmp )
883 884 885 886 887 # 888 # ------------------------------------------------------------------------------------ 889 # ------------------------------------------------------------------------------------ 890 # -- Die permanenten Datenstrukturen aktualisieren -------------------------- 891 # ------------------------------------------------------------------------------------ 892 # ------------------------------------------------------------------------------------ 893 #
894 - def aktualisierePermanenteDatenstrukturen( self, Fortschritt, istFilter = True ) :
895 """Es wird die Datenbank ausgelesen und die permanenten Datenstrukturen aktualisiert. 896 897 @note: Das übergebene Meldungsfenster (C{Fortschritt}) wird verändert ! 898 899 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 900 @type Fortschritt: Fortschritt 901 902 @param istFilter: Es ist C{True} anzugeben, die Routine nach Aufruf des Dialoges C{Filter} aufgerufen wird. 903 @type istFilter: Boolean 904 """ 905 906 # 907 # -- Fortschrittsanzeige initialisieren ---------------------------------- 908 # -- 909 # -- beim Programmstart werden 20 SQL-Abfrage ausgeführt ------------------ 910 # -- beim Filter werden 15 SQL-Abfrage ausgeführt ------------------ 911 # 912 Fortschritt.Delta = 100 / 20 913 if( istFilter ) : Fortschritt.Delta = 100 / 15 914 915 916 917 # 918 # -- Alle Permanenten Datenstrukturen initialisieren ------------------ 919 # -- (Nur bei Programmstart) ------------------ 920 # 921 if( not istFilter ) : 922 923 self.init__strName( Fortschritt = Fortschritt ) 924 925 self.init__dokTyp( Fortschritt = Fortschritt ) 926 927 self.init__prjPersonen( Fortschritt = Fortschritt ) 928 929 self.init__prjProjekte( Fortschritt = Fortschritt ) 930 931 self.init__sprSprachen( Fortschritt = Fortschritt ) 932 933 934 935 # 936 # -- Permanente Datenstrukturen initialisieren, die bei Änderung ---------- 937 # -- von Projekt / Sprache erforderlich sind ---------- 938 # 939 self.daten__prtTyp__Sprache = [] 940 self.init__prtTyp__Sprache( Fortschritt = Fortschritt ) 941 942 self.daten__psAbk__Sprache__Projekt.clear() 943 self.init__psAbk__Sprache__Projekt( Fortschritt = Fortschritt ) 944 945 self.daten__dokDoku__Sprache = dict() 946 self.daten__dokDoku__Sprache__Projekt = [] 947 self.init__dokDoku__Sprache__Projekt( Fortschritt = Fortschritt ) 948 949 self.daten__prtProtokoll_gefProt__Sprache__Projekt.clear() 950 self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt.clear() 951 self.daten__prtProtokoll_siAnf__Sprache__Projekt.clear() 952 self.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt.clear() 953 self.daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt.clear() 954 self.init__prtProtokoll__Sprache__Projekt( Fortschritt = Fortschritt ) 955 956 self.daten__strStrkt__Sprache__Projekt = [] 957 self.init__strStrkt__Sprache__Projekt( Fortschritt = Fortschritt ) 958 959 self.daten__ProtId_DokuId__Projekt.clear() 960 self.init__ProtId_DokuId__Projekt( Fortschritt = Fortschritt ) 961 962 self.daten__ProtId_PersId_aufgabe__Projekt.clear() 963 self.daten__ProtId_PersId_teilnehmer__Projekt.clear() 964 self.init__ProtId_PersId__Projekt( Fortschritt = Fortschritt ) 965 966 self.daten__psAbk_Risikomatrix.clear() 967 self.init__psAbk_Risikomatrix( Fortschritt = Fortschritt ) 968 969 self.daten__GefszenId__Projekt = [] 970 self.init__psGefszenario( Fortschritt = Fortschritt ) 971 972 self.daten__GefszenId_AbkId_gp__Sprache__Projekt.clear() 973 self.daten__GefszenId_AbkId_rh__Sprache__Projekt.clear() 974 self.daten__GefszenId_AbkId_rg__Sprache__Projekt.clear() 975 self.daten__GefszenId_AbkId_rr__Sprache__Projekt.clear() 976 self.init__GefszenId_AbkId__Sprache__Projekt( Fortschritt = Fortschritt ) 977 978 self.daten__GefszenId_AnmId__Sprache__Projekt.clear() 979 self.init__GefszenId_AnmId__Sprache__Projekt( Fortschritt = Fortschritt ) 980 981 self.daten__GefszenId_Wortgruppen__Sprache__Projekt.clear() 982 self.init__GefszenId_Wortgruppen__Sprache__Projekt( Fortschritt = Fortschritt ) 983 984 self.daten__GefszenId_ProtId_gefProt__Projekt.clear() 985 self.daten__GefszenId_ProtId_siAnf__Projekt.clear() 986 self.init__GefszenId_ProtId__Projekt( Fortschritt = Fortschritt ) 987 988 self.daten__GefszenId_StruktId__Projekt.clear() 989 self.init__GefszenId_StruktId__Projekt( Fortschritt = Fortschritt ) 990 991 self.daten__ProtId_StruktId__Projekt.clear() 992 self.init__ProtId_StruktId__Projekt( Fortschritt = Fortschritt ) 993 994 995 996 # 997 # -- Fortschrittsanzeige schließen ------------------------------------------ 998 # 999 Fortschritt.loescheFortschritt()
1000 1001 1002 1003 1004 1005 1006 1007 # 1008 # ------------------------------------------------------------------------------------ 1009 # ------------------------------------------------------------------------------------ 1010 # -- wxComboBox der Tabelle 'spr.sprachen' initialisieren ------------------ 1011 # ------------------------------------------------------------------------------------ 1012 # ------------------------------------------------------------------------------------ 1013 #
1014 - def dbAbfrage__sprWgruppe( self, Fortschritt, wxListBox, sprUebvarId ):
1015 """ 1016 Methode zur Initialisierung der Auswahlliste (C{wxListBox}), welche die in der Datenbank verfügbaren Übersetzungen zur gegebenenen Übersetzungsvariante C{sprUebvarId} aufnimmt (darstellt). 1017 1018 @note: Die übergebene Auswahlliste (C{wxListBox}) wird verändert ! 1019 1020 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 1021 @type Fortschritt: Fortschritt 1022 1023 @param wxListBox: Es ist die Auswahlliste zu übergeben, die die Strukturpunkte aufnimmt. 1024 @type wxListBox: wxPython - ListBox 1025 1026 @param sprUebvarId : Es ist die Id der Übersetzungsvariante C{spr.uebvar.id} zu übergeben. 1027 @type sprUebvarId : C{Ganzzahl} 1028 """ 1029 1030 # 1031 # -- in Protokolldatei schreiben ------------------------------------------ 1032 # 1033 self.ProtokolldateiEintragen( eintrag = "dbAbfrage__sprWgruppe()" 1034 , istKopfzeile = True ) 1035 1036 1037 1038 # 1039 # gültige SQL-Abfrage erzeugen, 1040 # die gelesenen Werte der ComboBox zuordnen und 1041 # den ersten Eintrag auswählen 1042 # 1043 self.__dbAbfrage__( """ 1044 SELECT DISTINCT 1045 spr.zeige__wgruppe.wgruppe 1046 , spr_sprachen_id 1047 FROM 1048 spr.zeige__wgruppe 1049 WHERE 1050 spr.zeige__wgruppe.spr_uebvar_id = """ + str( sprUebvarId ) + """;""" 1051 , Fortschritt = Fortschritt 1052 , info = "dbAbfrage__sprWgruppe()" ) 1053 1054 for i in range( self.__anzZeilen__ ): 1055 1056 wxListBox.nimmWert( wert = str( self.__gibWert__( i, 0 ) ) 1057 , dbId = self.__gibWert__( i, 1 ) ) 1058 1059 1060 # 1061 # -- Fortschritt anzeigen ------------------------------------------ 1062 # 1063 Fortschritt.nimmFortschritt( info = "dbAbfrage__sprWgruppe()" )
1064 1065 1066 1067 1068 1069 1070 1071 # 1072 # ------------------------------------------------------------------------------------ 1073 # ------------------------------------------------------------------------------------ 1074 # -- Permanente Datenstruktur der Dokumente initialisieren ------------------ 1075 # -- -- 1076 # -- 2x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 1077 # -- -- 1078 # ------------------------------------------------------------------------------------ 1079 # ------------------------------------------------------------------------------------ 1080 #
1081 - def init__dokDoku__Sprache__Projekt( self, Fortschritt, prjProjekteId = None ):
1082 """ 1083 Es wird die Permanente Datenstruktur C{self.daten__dokDoku__Sprache__Projekt / self.daten__dokDoku__Sprache__Projekt_Flex / self.daten__dokDoku__Sprache} initialisiert. 1084 1085 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 1086 @type Fortschritt: Fortschritt 1087 1088 @param prjProjekteId : Es ist die Projekt-Id C{prj.projekte.id} zu übergeben, wenn die perm. Datenstruktur C{..._Flex} initialisiert werden soll. Wird C{None} angegeben, wird die perm. Datenstruktur des aktuellen Projektes C{self.filter__prj_projekte_id} initialisiert. 1089 @type prjProjekteId : C{Ganzzahl} 1090 """ 1091 1092 # 1093 # -- Alle Dokumente auslesen -------------------------------------------------- 1094 # 1095 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1096 , protokollDatKopf = "init__dokDoku__Sprache__Projekt() -> self.daten__dokDoku__Sprache" 1097 , sql = """ 1098 SELECT DISTINCT 1099 -- 0 1100 dok.doku.id AS doku_id 1101 , dok.doku.notizen AS doku_notizen 1102 -- 2 1103 , dok.doku.dok_typ_id AS dok_typ_id 1104 , dok.doku.aspekt AS doku_aspekt 1105 -- 4 1106 , dok.doku.spr_uebvar_id_kb AS spr_uebvar_id_kb 1107 , COALESCE( spr.zeige__wgruppe.wgruppe, '??' ) AS titel 1108 FROM 1109 dok.doku 1110 LEFT OUTER JOIN spr.zeige__wgruppe ON ( 1111 dok.doku.spr_uebvar_id_kb = spr.zeige__wgruppe.spr_uebvar_id 1112 AND 1113 spr.zeige__wgruppe.spr_sprachen_id = """ + str( self.filter__spr_sprachen_id ) + """ 1114 ) 1115 WHERE 1116 dok.doku.idfrei = 0 1117 AND 1118 dok.doku.id > 0 1119 ORDER BY 1120 dok.doku.id 1121 """ 1122 , permDaten = self.daten__dokDoku__Sprache 1123 , istDict = True ) 1124 1125 1126 1127 1128 1129 # 1130 # -- Projektbezogene Dokumente auslesen ---------------------------------- 1131 # 1132 # 1133 # -- self.filter__prj_projekte_id verwenden ? -------------------------- 1134 # 1135 aktProjekt = self.filter__prj_projekte_id 1136 aktPermDaten = self.daten__dokDoku__Sprache__Projekt 1137 if( prjProjekteId is not None ) : 1138 1139 aktProjekt = prjProjekteId 1140 aktPermDaten = self.daten__dokDoku__Sprache__Projekt_Flex 1141 1142 1143 1144 # 1145 # -- SQL-Abfrage ausführen und Protokolldatei schreiben ------------------ 1146 # -- wxObjekt und ggf. globale Variable aktualisieren ------------------ 1147 # 1148 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1149 , protokollDatKopf = "init__dokDoku__Sprache__Projekt() -> self.daten__dokDoku__Sprache__Projekt / ..._Flex" 1150 , sql = """ 1151 SELECT DISTINCT 1152 -- 0 1153 prj.pl_dokausgabe.dok_doku_id 1154 , prj.pl_dokausgabe.nr AS nr 1155 -- 2 1156 , COALESCE( spr.zeige__wgruppe.wgruppe, '??' ) AS titel 1157 , prj.pl_dokausgabe.stand AS revision 1158 -- 4 1159 , to_char( prj.pl_dokausgabe.datum, 'DD.MM.YYYY' ) AS datum 1160 , prj.pl_dokausgabe.notizen AS ausg_notizen 1161 -- 6 1162 , prj.pl_dokausgabe.spr_uebvar_id AS spr_uebvar_id__titel 1163 , prj.pl_dokausgabe.istfrei AS istfrei 1164 -- 8 1165 -- , prj.pl_dokausgabe.notizen AS notizen 1166 FROM 1167 prj.zeige__pl_dokausgabe_le 1168 , prj.pl_dokausgabe 1169 -- 1170 -- Dokumententitel 1171 -- 1172 LEFT OUTER JOIN spr.zeige__wgruppe ON ( 1173 prj.pl_dokausgabe.spr_uebvar_id = 1174 spr.zeige__wgruppe.spr_uebvar_id 1175 AND 1176 -- 1177 -- Sprache Auswählen 1178 -- 1179 spr.zeige__wgruppe.spr_sprachen_id = 1 1180 ) 1181 WHERE 1182 -- 1183 -- Ausschließlich die letzten (aktuellen) Dokumente anzeigen, ... 1184 -- 1185 prj.zeige__pl_dokausgabe_le.prj__pl_dokausgabe__id = prj.pl_dokausgabe.id 1186 AND 1187 -- 1188 -- ... die nicht entfernt wurden 1189 -- 1190 prj.pl_dokausgabe.logentfernt = false 1191 AND 1192 -- 1193 -- Nulldokument nicht zeigen 1194 -- 1195 prj.pl_dokausgabe.dok_doku_id > 0 1196 AND 1197 -- 1198 -- Projekt festlegen 1199 -- 1200 prj.pl_dokausgabe.prj_projekte_id = """ + str( aktProjekt ) 1201 , permDaten = aktPermDaten )
1202 1203 1204 1205 1206 # 1207 # ------------------------------------------------------------------------------------ 1208 # ------------------------------------------------------------------------------------ 1209 # -- wxComboBox der Tabelle 'prj.projekte' initialisieren ------------------ 1210 # -- -- 1211 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 1212 # -- -- 1213 # ------------------------------------------------------------------------------------ 1214 # ------------------------------------------------------------------------------------ 1215 #
1216 - def init__dokTyp( self, Fortschritt ):
1217 """ 1218 Es wird die Permanente Datenstruktur C{self.daten__dokTyp} initialisiert. 1219 1220 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 1221 @type Fortschritt: Fortschritt 1222 """ 1223 1224 # 1225 # -- die globale Variable muß mit Werten gefüllt werden ------------------ 1226 # -- (Datenbankabfrage durchführen) ------------------ 1227 # 1228 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1229 , protokollDatKopf = "init__dokTyp()" 1230 , sql = """ 1231 SELECT DISTINCT 1232 COALESCE( spr.zeige__wgruppe.wgruppe, '??' ) AS typ 1233 , dok.typ.id 1234 FROM 1235 dok.typ 1236 LEFT OUTER JOIN spr.zeige__wgruppe ON ( 1237 dok.typ.spr_uebvar_id = spr.zeige__wgruppe.spr_uebvar_id 1238 AND 1239 -- 1240 -- Sprache Auswählen 1241 -- 1242 spr.zeige__wgruppe.spr_sprachen_id = """ + str( self.filter__spr_sprachen_id ) + """ 1243 ) 1244 WHERE 1245 dok.typ.idfrei = 0 1246 AND 1247 dok.typ.id > 0 1248 ORDER BY 1249 typ 1250 ;""" 1251 , permDaten = self.daten__dokTyp )
1252 1253 1254 # 1255 # ------------------------------------------------------------------------------------ 1256 # ------------------------------------------------------------------------------------ 1257 # -- >self.daten__GefszenId_AbkId_gp__Sprache__Projekt< ------------------ 1258 # -- >self.daten__GefszenId_AbkId_rh__Sprache__Projekt< ------------------ 1259 # -- >self.daten__GefszenId_AbkId_rg__Sprache__Projekt< ------------------ 1260 # -- >self.daten__GefszenId_AbkId_rr__Sprache__Projekt< ------------------ 1261 # -- -- 1262 # -- 4x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 1263 # -- -- 1264 # ------------------------------------------------------------------------------------ 1265 # ------------------------------------------------------------------------------------ 1266 #
1267 - def init__GefszenId_AbkId__Sprache__Projekt( self, Fortschritt ):
1268 """ 1269 Es werden die Permanenten Datenstrukturen C{self.daten__GefszenId_AbkId_gp__Sprache__Projekt, self.daten__GefszenId_AbkId_rh__Sprache__Projekt, self.daten__GefszenId_AbkId_rg__Sprache__Projekt, self.daten__GefszenId_AbkId_rr__Sprache__Projekt} initialisiert. 1270 1271 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 1272 @type Fortschritt: Fortschritt 1273 """ 1274 1275 # 1276 # -- SQL-Abfrage ausführen, Protokolldatei schreiben ------------------ 1277 # -- und ggf. globale Variable aktualisieren ------------------ 1278 # 1279 sql = ( """ 1280 SELECT 1281 -- 0 1282 prj.pl_psgefabk.ps_gefszenario_id 1283 , prj.pl_psgefabk.ps_abk_id AS abk_id 1284 -- 2 1285 , COALESCE( spr.zeige__wgruppe.wgruppe, '??' ) AS begr 1286 , prj.pl_psgefabk.notizen 1287 -- 4 1288 , prj.pl_psgefabk.spr_uebvar_id_zus 1289 FROM 1290 prj.zeige__pl_psgefabk_le 1291 , prj.pl_psgefabk 1292 LEFT OUTER JOIN spr.zeige__wgruppe 1293 ON ( 1294 prj.pl_psgefabk.spr_uebvar_id_zus = spr.zeige__wgruppe.spr_uebvar_id 1295 AND 1296 -- 1297 -- Sprache Auswählen 1298 -- 1299 spr.zeige__wgruppe.spr_sprachen_id = """ + str( self.filter__spr_sprachen_id ) + """ 1300 ) 1301 , ps.abk 1302 WHERE 1303 -- 1304 -- Ausschließlich die letzten (aktuellen) Abkürzungen anzeigen, ... 1305 -- 1306 prj.zeige__pl_psgefabk_le.prj__pl_psgefabk__id = prj.pl_psgefabk.id 1307 AND 1308 -- 1309 -- ... die nicht entfernt wurden 1310 -- 1311 prj.pl_psgefabk.logentfernt = false 1312 AND 1313 -- 1314 -- ... die nicht gelöscht wurden 1315 -- 1316 prj.pl_psgefabk.idfrei = 0 1317 AND 1318 -- 1319 -- Projekt auswählen 1320 -- 1321 prj.pl_psgefabk.prj_projekte_id = """ + str( self.filter__prj_projekte_id ) + """ 1322 AND 1323 -- 1324 -- Typ der Abkürzung zuordnen 1325 -- 1326 prj.pl_psgefabk.ps_abk_id = ps.abk.id 1327 AND 1328 ps.abk.typ = 'GP' 1329 ORDER BY 1330 prj.pl_psgefabk.ps_gefszenario_id 1331 """ ) 1332 1333 1334 1335 1336 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1337 , protokollDatKopf = "init__GefszenId_AbkId__Sprache__Projekt() - Gefährdete Personen" 1338 , sql = sql 1339 , permDaten = self.daten__GefszenId_AbkId_gp__Sprache__Projekt 1340 , istDict = True ) 1341 1342 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1343 , protokollDatKopf = "init__GefszenId_AbkId__Sprache__Projekt() - Häufigkeit" 1344 , sql = sql.replace( "ps.abk.typ = 'GP'" 1345 , "ps.abk.typ = 'RH'" ) 1346 , permDaten = self.daten__GefszenId_AbkId_rh__Sprache__Projekt 1347 , istDict = True ) 1348 1349 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1350 , protokollDatKopf = "init__GefszenId_AbkId__Sprache__Projekt() - Gefahrenstufe" 1351 , sql = sql.replace( "ps.abk.typ = 'GP'" 1352 , "ps.abk.typ = 'RG'" ) 1353 , permDaten = self.daten__GefszenId_AbkId_rg__Sprache__Projekt 1354 , istDict = True ) 1355 1356 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1357 , protokollDatKopf = "init__GefszenId_AbkId__Sprache__Projekt() - Risikostufe" 1358 , sql = sql.replace( "ps.abk.typ = 'GP'" 1359 , "ps.abk.typ = 'RR'" ) 1360 , permDaten = self.daten__GefszenId_AbkId_rr__Sprache__Projekt 1361 , istDict = True )
1362 1363 1364 1365 1366 1367 # 1368 # ------------------------------------------------------------------------------------ 1369 # ------------------------------------------------------------------------------------ 1370 # -- >daten__GefszenId_AnmId__Sprache__Projekt< initialisieren -- 1371 # -- -- 1372 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 1373 # -- -- 1374 # ------------------------------------------------------------------------------------ 1375 # ------------------------------------------------------------------------------------ 1376 #
1377 - def init__GefszenId_AnmId__Sprache__Projekt( self, Fortschritt, prjProjekteId = None ):
1378 """ 1379 Es wird die Permanente Datenstruktur C{self.daten__GefszenId_AnmId__Sprache__Projekt / self.daten__GefszenId_AnmId__Sprache__Projekt_Flex} initialisiert. 1380 1381 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 1382 @type Fortschritt: Fortschritt 1383 1384 @param prjProjekteId : Es ist die Projekt-Id C{prj.projekte.id} zu übergeben, wenn die perm. Datenstruktur C{..._Flex} initialisiert werden soll. Wird C{None} angegeben, wird die perm. Datenstruktur des aktuellen Projektes C{self.filter__prj_projekte_id} initialisiert. 1385 @type prjProjekteId : C{Ganzzahl} 1386 """ 1387 1388 # 1389 # -- Projektbezogene Dokumente auslesen ---------------------------------- 1390 # 1391 # 1392 # -- self.filter__prj_projekte_id verwenden ? -------------------------- 1393 # 1394 aktProjekt = self.filter__prj_projekte_id 1395 aktPermDaten = self.daten__GefszenId_AnmId__Sprache__Projekt 1396 if( prjProjekteId is not None ) : 1397 1398 aktProjekt = prjProjekteId 1399 aktPermDaten = self.daten__GefszenId_AnmId__Sprache__Projekt_Flex 1400 1401 1402 1403 # 1404 # -- SQL-Abfrage ausführen, Protokolldatei schreiben ------------------ 1405 # -- und ggf. globale Variable aktualisieren ------------------ 1406 # 1407 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1408 , protokollDatKopf = "init__GefszenId_AnmId__Sprache__Projekt()" 1409 , sql = """ 1410 SELECT DISTINCT 1411 -- 0 1412 prj.pl_psgefanm.ps_gefszenario_id 1413 , prj.pl_psgefanm.ps_anmerkung_id 1414 -- 2 1415 , prj.pl_psgefanm.spr_uebvar_id 1416 , spr.zeige__wgruppe.wgruppe AS zk 1417 -- 4 1418 , prj.pl_psgefanm.notizen 1419 FROM 1420 prj.zeige__pl_psgefanm_le 1421 , prj.pl_psgefanm 1422 LEFT OUTER JOIN spr.zeige__wgruppe 1423 ON ( 1424 prj.pl_psgefanm.spr_uebvar_id = spr.zeige__wgruppe.spr_uebvar_id 1425 AND 1426 -- 1427 -- Sprache Auswählen 1428 -- 1429 spr.zeige__wgruppe.spr_sprachen_id = """ + str( self.filter__spr_sprachen_id ) + """ 1430 ) 1431 WHERE 1432 -- 1433 -- Ausschließlich die letzten (aktuellen) Anmerkungen anzeigen, ... 1434 -- 1435 prj.zeige__pl_psgefanm_le.prj__pl_psgefanm__id = prj.pl_psgefanm.id 1436 AND 1437 -- 1438 -- ... die nicht entfernt wurden 1439 -- 1440 prj.pl_psgefanm.logentfernt = false 1441 AND 1442 -- 1443 -- Projekt auswählen 1444 -- 1445 prj.pl_psgefanm.prj_projekte_id = """ + str( aktProjekt ) + """ 1446 ORDER BY 1447 prj.pl_psgefanm.ps_gefszenario_id 1448 , prj.pl_psgefanm.ps_anmerkung_id 1449 ; 1450 """ 1451 , permDaten = aktPermDaten 1452 , istDict = True )
1453 1454 1455 1456 1457 1458 1459 # 1460 # ------------------------------------------------------------------------------------ 1461 # ------------------------------------------------------------------------------------ 1462 # -- >self.daten__GefszenId_ProtId_gefProt__Projekt< und ---------- 1463 # -- >self.daten__GefszenId_ProtId_siAnf__Projekt< initialisieren ---------- 1464 # -- -- 1465 # -- 2x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 1466 # -- -- 1467 # ------------------------------------------------------------------------------------ 1468 # ------------------------------------------------------------------------------------ 1469 #
1470 - def init__GefszenId_ProtId__Projekt( self, Fortschritt, prjProjekteId = None ):
1471 """ 1472 Es werden die Permanenten Datenstrukturen C{self.daten__GefszenId_ProtId_gefProt__Projekt, self.daten__GefszenId_ProtId_siAnf__Projekt, self.daten__GefszenId_ProtId_gefProt__Projekt_Flex, self.daten__GefszenId_ProtId_siAnf__Projekt_Flex} initialisiert. Ist C{prjProjekteId not None}, werden die Protokoll-Filterkriterien nicht berücksichtigt. 1473 1474 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 1475 @type Fortschritt: Fortschritt 1476 1477 @param prjProjekteId : Es ist die Projekt-Id C{prj.projekte.id} zu übergeben, wenn die perm. Datenstruktur C{..._Flex} initialisiert werden soll. Wird C{None} angegeben, wird die perm. Datenstruktur des aktuellen Projektes C{self.filter__prj_projekte_id} initialisiert. 1478 @type prjProjekteId : C{Ganzzahl} 1479 """ 1480 1481 # 1482 # -- self.filter__prj_projekte_id verwenden ? -------------------------- 1483 # 1484 aktProjekt = self.filter__prj_projekte_id 1485 aktPermDaten_gefProt = self.daten__GefszenId_ProtId_gefProt__Projekt 1486 aktPermDaten_siAnf = self.daten__GefszenId_ProtId_siAnf__Projekt 1487 if( prjProjekteId is not None ) : 1488 1489 aktProjekt = prjProjekteId 1490 aktPermDaten_gefProt = self.daten__GefszenId_ProtId_gefProt__Projekt_Flex 1491 aktPermDaten_siAnf = self.daten__GefszenId_ProtId_siAnf__Projekt_Flex 1492 1493 1494 1495 # 1496 # -- SQL-Abfrage ausführen, Protokolldatei schreiben ------------------ 1497 # -- und ggf. globale Variable aktualisieren ------------------ 1498 # 1499 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1500 , protokollDatKopf = "init__GefszenId_ProtId__Projekt() - gefProt" 1501 , sql = """ 1502 SELECT DISTINCT 1503 prj.pl_prtpsgefszenario.ps_gefszenario_id 1504 , prj.pl_prtpsgefszenario.prt_protokoll_id 1505 FROM 1506 prj.pl_prtpsgefszenario 1507 , prj.zeige__pl_prtpsgefszenario_le 1508 , prt.protokoll 1509 WHERE 1510 prj.pl_prtpsgefszenario.id = prj.zeige__pl_prtpsgefszenario_le.prj__pl_prtpsgefszenario__id 1511 AND 1512 prj.pl_prtpsgefszenario.logentfernt = false 1513 AND 1514 prj.pl_prtpsgefszenario.prj_projekte_id = """ + str( aktProjekt ) + """ 1515 AND 1516 prj.pl_prtpsgefszenario.prt_protokoll_id = prt.protokoll.id 1517 AND 1518 prt.protokoll.prt_typ_id IN ( """ 1519 + str( self.konstante__prt_typ_id__gefProt ).replace( '[', '' ).replace( ']', '' ) + """ ) 1520 ORDER BY 1521 prj.pl_prtpsgefszenario.ps_gefszenario_id 1522 , prj.pl_prtpsgefszenario.prt_protokoll_id 1523 ; 1524 """ 1525 , permDaten = aktPermDaten_gefProt 1526 , istDict = True ) 1527 1528 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1529 , protokollDatKopf = "init__GefszenId_ProtId__Projekt() - siAnf" 1530 , sql = """ 1531 SELECT DISTINCT 1532 prj.pl_prtpsgefszenario.ps_gefszenario_id 1533 , prj.pl_prtpsgefszenario.prt_protokoll_id 1534 FROM 1535 prj.pl_prtpsgefszenario 1536 , prj.zeige__pl_prtpsgefszenario_le 1537 , prt.protokoll 1538 WHERE 1539 prj.pl_prtpsgefszenario.id = prj.zeige__pl_prtpsgefszenario_le.prj__pl_prtpsgefszenario__id 1540 AND 1541 prj.pl_prtpsgefszenario.logentfernt = false 1542 AND 1543 prj.pl_prtpsgefszenario.prj_projekte_id = """ + str( aktProjekt ) + """ 1544 AND 1545 prj.pl_prtpsgefszenario.prt_protokoll_id = prt.protokoll.id 1546 AND 1547 prt.protokoll.prt_typ_id IN ( """ 1548 + str( self.konstante__prt_typ_id__siAnf ).replace( '[', '' ).replace( ']', '' ) + """ ) 1549 ORDER BY 1550 prj.pl_prtpsgefszenario.ps_gefszenario_id 1551 , prj.pl_prtpsgefszenario.prt_protokoll_id 1552 ; 1553 """ 1554 , permDaten = aktPermDaten_siAnf 1555 , istDict = True )
1556 1557 1558 1559 1560 # 1561 # ------------------------------------------------------------------------------------ 1562 # ------------------------------------------------------------------------------------ 1563 # -- >daten__GefszenId_StruktId__Projekt< initialisieren ------------------ 1564 # -- -- 1565 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 1566 # -- -- 1567 # ------------------------------------------------------------------------------------ 1568 # ------------------------------------------------------------------------------------ 1569 #
1570 - def init__GefszenId_StruktId__Projekt( self, Fortschritt, prjProjekteId = None ):
1571 """ 1572 Es wird die Permanente Datenstruktur C{self.daten__GefszenId_StruktId__Projekt / self.daten__GefszenId_StruktId__Projekt_Flex} initialisiert. 1573 1574 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 1575 @type Fortschritt: Fortschritt 1576 1577 @param prjProjekteId : Es ist die Projekt-Id C{prj.projekte.id} zu übergeben, wenn die perm. Datenstruktur C{..._Flex} initialisiert werden soll. Wird C{None} angegeben, wird die perm. Datenstruktur des aktuellen Projektes C{self.filter__prj_projekte_id} initialisiert. 1578 @type prjProjekteId : C{Ganzzahl} 1579 """ 1580 1581 # 1582 # -- self.filter__prj_projekte_id verwenden ? -------------------------- 1583 # 1584 aktProjekt = self.filter__prj_projekte_id 1585 aktPermDaten = self.daten__GefszenId_StruktId__Projekt 1586 if( prjProjekteId is not None ) : 1587 1588 aktProjekt = prjProjekteId 1589 aktPermDaten = self.daten__GefszenId_StruktId__Projekt_Flex 1590 1591 1592 1593 # 1594 # -- SQL-Abfrage ausführen, Protokolldatei schreiben ------------------ 1595 # -- und ggf. globale Variable aktualisieren ------------------ 1596 # 1597 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1598 , protokollDatKopf = "init__GefszenId_StruktId__Projekt()" 1599 , sql = """ 1600 SELECT DISTINCT 1601 prj.pl_psgefstrkt.ps_gefszenario_id 1602 , prj.pl_psgefstrkt.str_strkt_id 1603 FROM 1604 prj.pl_psgefstrkt 1605 , prj.zeige__pl_psgefstrkt_le 1606 WHERE 1607 prj.pl_psgefstrkt.id = prj.zeige__pl_psgefstrkt_le.prj__pl_psgefstrkt__id 1608 AND 1609 prj.pl_psgefstrkt.logentfernt = false 1610 AND 1611 prj.pl_psgefstrkt.prj_projekte_id = """ + str( aktProjekt ) + """ 1612 AND 1613 prj.pl_psgefstrkt.idfrei = 0 1614 ORDER BY 1615 prj.pl_psgefstrkt.ps_gefszenario_id 1616 , prj.pl_psgefstrkt.str_strkt_id 1617 ; 1618 """ 1619 , permDaten = aktPermDaten 1620 , istDict = True )
1621 1622 1623 1624 1625 # 1626 # ------------------------------------------------------------------------------------ 1627 # ------------------------------------------------------------------------------------ 1628 # -- >daten__GefszenId_Wortgruppen__Sprache__Projekt< initialisieren -- 1629 # -- -- 1630 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 1631 # -- -- 1632 # ------------------------------------------------------------------------------------ 1633 # ------------------------------------------------------------------------------------ 1634 #
1635 - def init__GefszenId_Wortgruppen__Sprache__Projekt( self, Fortschritt ):
1636 """ 1637 Es wird die Permanente Datenstruktur C{self.daten__GefszenId_Wortgruppen__Sprache__Projekt} initialisiert. 1638 1639 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 1640 @type Fortschritt: Fortschritt 1641 """ 1642 1643 # 1644 # -- SQL-Abfrage ausführen, Protokolldatei schreiben ------------------ 1645 # -- und ggf. globale Variable aktualisieren ------------------ 1646 # 1647 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1648 , protokollDatKopf = "init__GefszenId_Wortgruppen__Sprache__Projekt()" 1649 , sql = """ 1650 SELECT DISTINCT 1651 -- 0 1652 prj.pp_psgefszenario.ps_gefszenario_id 1653 , prj.pp_psgefszenario.spr_uebvar_id 1654 -- 2 1655 , COALESCE( gefszen.wgruppe, '??' ) AS gefszen 1656 , prj.pp_psgefszenario.notizen 1657 -- 4 1658 , prj.pp_psgefszenario.spr_uebvar_id_reprgefszen 1659 , COALESCE( reprgefszen.wgruppe, '??' ) AS reprgefszen 1660 -- 6 1661 , prj.pp_psgefszenario.id 1662 -- , prj.pp_psgefszenario.spr_uebvar_id_ursp 1663 -- , COALESCE( ursp.wgruppe, '??' ) AS ursp 1664 FROM 1665 prj.pp_psgefszenario 1666 LEFT OUTER JOIN spr.zeige__wgruppe AS gefszen 1667 ON ( 1668 prj.pp_psgefszenario.spr_uebvar_id = gefszen.spr_uebvar_id 1669 AND 1670 -- 1671 -- Sprache Auswählen 1672 -- 1673 gefszen.spr_sprachen_id = """ + str( self.filter__spr_sprachen_id ) + """ 1674 ) 1675 LEFT OUTER JOIN spr.zeige__wgruppe AS reprgefszen 1676 ON ( 1677 prj.pp_psgefszenario.spr_uebvar_id_reprgefszen = reprgefszen.spr_uebvar_id 1678 AND 1679 -- 1680 -- Sprache Auswählen 1681 -- 1682 reprgefszen.spr_sprachen_id = """ + str( self.filter__spr_sprachen_id ) + """ 1683 ) 1684 -- LEFT OUTER JOIN spr.zeige__wgruppe AS ursp 1685 -- ON ( 1686 -- prj.pp_psgefszenario.spr_uebvar_id_ursp = ursp.spr_uebvar_id 1687 -- AND 1688 -- -- 1689 -- -- Sprache Auswählen 1690 -- -- 1691 -- ursp.spr_sprachen_id = """ + str( self.filter__spr_sprachen_id ) + """ 1692 -- ) 1693 WHERE 1694 -- 1695 -- Projekt auswählen 1696 -- 1697 prj.pp_psgefszenario.prj_projekte_id = """ + str( self.filter__prj_projekte_id ) + """ 1698 ; 1699 """ 1700 , permDaten = self.daten__GefszenId_Wortgruppen__Sprache__Projekt 1701 , istDict = True )
1702 1703 1704 1705 1706 # 1707 # ------------------------------------------------------------------------------------ 1708 # ------------------------------------------------------------------------------------ 1709 # -- >self.daten__ProtId_DokuId__Projekt< initialisieren ------------------ 1710 # -- -- 1711 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 1712 # -- -- 1713 # ------------------------------------------------------------------------------------ 1714 # ------------------------------------------------------------------------------------ 1715 #
1716 - def init__ProtId_DokuId__Projekt( self, Fortschritt, prjProjekteId = None ):
1717 """ 1718 Es wird die Permanente Datenstruktur C{self.daten__ProtId_DokuId__Projekt / self.daten__ProtId_DokuId__Projekt_Flex} initialisiert. Ist C{prjProjekteId not None}, werden die Dokument-Filterkriterien nicht berücksichtigt. 1719 1720 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 1721 @type Fortschritt: Fortschritt 1722 1723 @param prjProjekteId : Es ist die Projekt-Id C{prj.projekte.id} zu übergeben, wenn die perm. Datenstruktur C{..._Flex} initialisiert werden soll. Wird C{None} angegeben, wird die perm. Datenstruktur des aktuellen Projektes C{self.filter__prj_projekte_id} initialisiert. 1724 @type prjProjekteId : C{Ganzzahl} 1725 """ 1726 1727 # 1728 # -- weiteres Projekt gewählt ------------------------------------------ 1729 # 1730 aktProjekt = self.filter__prj_projekte_id 1731 aktPermDaten = self.daten__ProtId_DokuId__Projekt 1732 if( prjProjekteId is not None ) : 1733 1734 aktProjekt = prjProjekteId 1735 aktPermDaten = self.daten__ProtId_DokuId__Projekt_Flex 1736 1737 1738 1739 # 1740 # -- SQL-Abfrage ausführen, Protokolldatei schreiben ------------------ 1741 # -- und ggf. globale Variable aktualisieren ------------------ 1742 # 1743 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1744 , protokollDatKopf = "init__ProtId_DokuId__Projekt()" 1745 , sql = """ 1746 SELECT DISTINCT 1747 prj.pl_prtdokdoku.prt_protokoll_id 1748 , prj.pl_prtdokdoku.dok_doku_id 1749 FROM 1750 prj.pl_prtdokdoku 1751 , prj.zeige__pl_prtdokdoku_le 1752 WHERE 1753 prj.pl_prtdokdoku.id = prj.zeige__pl_prtdokdoku_le.prj__pl_prtdokdoku__id 1754 AND 1755 prj.pl_prtdokdoku.logentfernt = false 1756 AND 1757 prj.pl_prtdokdoku.prj_projekte_id = """ + str( aktProjekt ) + """ 1758 ORDER BY 1759 prj.pl_prtdokdoku.prt_protokoll_id 1760 , prj.pl_prtdokdoku.dok_doku_id 1761 ; 1762 """ 1763 , permDaten = aktPermDaten 1764 , istDict = True )
1765 1766 1767 1768 1769 # 1770 # ------------------------------------------------------------------------------------ 1771 # ------------------------------------------------------------------------------------ 1772 # -- >self.daten__ProtId_PersId_aufgabe__Projekt< ---------- 1773 # -- >self.daten__ProtId_PersId_teilnehmer__Projekt< initialisieren ---------- 1774 # -- -- 1775 # -- 2x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 1776 # -- -- 1777 # ------------------------------------------------------------------------------------ 1778 # ------------------------------------------------------------------------------------ 1779 #
1780 - def init__ProtId_PersId__Projekt( self, Fortschritt ):
1781 """ 1782 Es werden die Permanenten Datenstrukturen C{self.daten__ProtId_PersId_aufgabe__Projekt, self.daten__ProtId_PersId_teilnehmer__Projekt} initialisiert. 1783 1784 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 1785 @type Fortschritt: Fortschritt 1786 """ 1787 1788 # 1789 # -- SQL-Abfrage ausführen, Protokolldatei schreiben ------------------ 1790 # -- und ggf. globale Variable aktualisieren ------------------ 1791 # 1792 sql = ( """ 1793 SELECT DISTINCT 1794 prj.pp_prtprotokoll.prt_protokoll_id 1795 , prj.pp_prtprotokoll.prj_personen_id 1796 , prj.pp_prtprotokoll.id 1797 FROM 1798 prj.pp_prtprotokoll 1799 , prt.protokoll 1800 WHERE 1801 -- 1802 -- Projekt einschränken 1803 -- 1804 prj.pp_prtprotokoll.prj_projekte_id = """ + str( self.filter__prj_projekte_id ) + """ 1805 AND 1806 -- 1807 -- Typ einschränken 1808 -- 1809 prj.pp_prtprotokoll.prt_protokoll_id = prt.protokoll.id 1810 AND 1811 prt.protokoll.prt_typ_id IN( """ 1812 + str( self.konstante__prt_typ_id__gefProt ).replace( '[', '' ).replace( ']', '' ) + """ ) 1813 AND 1814 -- 1815 -- Personen anzeigen 1816 -- 1817 prj.pp_prtprotokoll.prj_personen_id > 0 1818 AND 1819 -- 1820 -- Teilnehmer (true) / Aufgabe an ... (false) 1821 -- 1822 prj.pp_prtprotokoll.teilnehmer = false 1823 ORDER BY 1824 prj.pp_prtprotokoll.prt_protokoll_id 1825 , prj.pp_prtprotokoll.prj_personen_id 1826 ; 1827 """ ) 1828 1829 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1830 , protokollDatKopf = "init__ProtId_PersId__Projekt() - Aufgabe" 1831 , sql = sql 1832 , permDaten = self.daten__ProtId_PersId_aufgabe__Projekt 1833 , istDict = True ) 1834 1835 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1836 , protokollDatKopf = "init__ProtId_PersId__Projekt() - Teilnehmer" 1837 , sql = sql.replace( "prj.pp_prtprotokoll.teilnehmer = false" 1838 , "prj.pp_prtprotokoll.teilnehmer = true" ) 1839 , permDaten = self.daten__ProtId_PersId_teilnehmer__Projekt 1840 , istDict = True )
1841 1842 1843 1844 1845 1846 # 1847 # ------------------------------------------------------------------------------------ 1848 # ------------------------------------------------------------------------------------ 1849 # -- >self.daten__ProtId_StruktId__Projekt< initialisieren ------------------ 1850 # -- -- 1851 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 1852 # -- -- 1853 # ------------------------------------------------------------------------------------ 1854 # ------------------------------------------------------------------------------------ 1855 #
1856 - def init__ProtId_StruktId__Projekt( self, Fortschritt, prjProjekteId = None ):
1857 """ 1858 Es wird die Permanente Datenstruktur C{self.daten__ProtId_StruktId__Projekt / self.daten__ProtId_StruktId__Projekt_Flex} initialisiert. Ist C{prjProjekteId not None}, werden die Protokoll-Filterkriterien nicht berücksichtigt. 1859 1860 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 1861 @type Fortschritt: Fortschritt 1862 1863 @param prjProjekteId : Es ist die Projekt-Id C{prj.projekte.id} zu übergeben, wenn die perm. Datenstruktur C{..._Flex} initialisiert werden soll. Wird C{None} angegeben, wird die perm. Datenstruktur des aktuellen Projektes C{self.filter__prj_projekte_id} initialisiert. 1864 @type prjProjekteId : C{Ganzzahl} 1865 """ 1866 1867 1868 # 1869 # -- weiteres Projekt gewählt ------------------------------------------ 1870 # 1871 aktProjekt = self.filter__prj_projekte_id 1872 aktPermDaten = self.daten__ProtId_StruktId__Projekt 1873 if( prjProjekteId is not None ) : 1874 1875 aktProjekt = prjProjekteId 1876 aktPermDaten = self.daten__ProtId_StruktId__Projekt_Flex 1877 1878 1879 1880 # 1881 # -- SQL-Abfrage ausführen, Protokolldatei schreiben ------------------ 1882 # -- und ggf. globale Variable aktualisieren ------------------ 1883 # 1884 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 1885 , protokollDatKopf = "init__ProtId_StruktId__Projekt()" 1886 , sql = """ 1887 SELECT DISTINCT 1888 prj.p_prtstrstrkt.prt_protokoll_id 1889 , prj.p_prtstrstrkt.str_strkt_id 1890 FROM 1891 prj.p_prtstrstrkt 1892 WHERE 1893 prj.p_prtstrstrkt.idfrei = 0 1894 AND 1895 prj.p_prtstrstrkt.prj_projekte_id = """ + str( aktProjekt ) + """ 1896 ORDER BY 1897 prj.p_prtstrstrkt.prt_protokoll_id 1898 , prj.p_prtstrstrkt.str_strkt_id 1899 ; 1900 """ 1901 , permDaten = aktPermDaten 1902 , istDict = True )
1903 1904 1905 1906 1907 1908 # 1909 # ------------------------------------------------------------------------------------ 1910 # ------------------------------------------------------------------------------------ 1911 # -- >self.daten__prtProtokoll_gefProt__Sprache__Projekt<, -- 1912 # -- >self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt<, -- 1913 # -- >self.daten__prtProtokoll_siAnf__Sprache__Projekt<, -- 1914 # -- >self.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt< und -- 1915 # -- >self.daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt< initialisieren 1916 # -- -- 1917 # -- 5x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 1918 # -- -- 1919 # ------------------------------------------------------------------------------------ 1920 # ------------------------------------------------------------------------------------ 1921 #
1922 - def init__prtProtokoll__Sprache__Projekt( self, Fortschritt, prjProjekteId = None ):
1923 """ 1924 Es werden die Permanenten Datenstrukturen C{self.daten__prtProtokoll_gefProt__Sprache__Projekt, self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt, self.daten__prtProtokoll_siAnf__Sprache__Projekt, self.daten__prtProtokoll_siAnf__Sprache__Projekt} einschließlich deren C{_flex}-Varianten initialisiert. Ist C{prjProjekteId not None}, werden die Protokoll-Filterkriterien nicht berücksichtigt. 1925 1926 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 1927 @type Fortschritt: Fortschritt 1928 1929 @param prjProjekteId : Es ist die Projekt-Id C{prj.projekte.id} zu übergeben, wenn die perm. Datenstruktur C{..._Flex} initialisiert werden soll. Wird C{None} angegeben, wird die perm. Datenstruktur des aktuellen Projektes C{self.filter__prj_projekte_id} initialisiert. 1930 @type prjProjekteId : C{Ganzzahl} 1931 """ 1932 1933 # 1934 # -- Konstanten setzen -------------------------------------------------- 1935 # 1936 konstante__gefProt = str( self.konstante__prt_typ_id__gefProt ).replace( '[', '' ).replace( ']', '' ) 1937 konstante__siAnf = str( self.konstante__prt_typ_id__siAnf ).replace( '[', '' ).replace( ']', '' ) 1938 1939 1940 # 1941 # -- weiteres Projekt gewählt ------------------------------------------ 1942 # 1943 aktProjekt = self.filter__prj_projekte_id 1944 aktPermDaten_gefProt = self.daten__prtProtokoll_gefProt__Sprache__Projekt 1945 aktPermDaten_siAnf = self.daten__prtProtokoll_siAnf__Sprache__Projekt 1946 aktPermDaten_gefProt_vorg = self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt 1947 aktPermDaten_siAnf_vorg = self.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt 1948 aktPermDaten_siAnf_gefProt = self.daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt 1949 if( prjProjekteId is not None ) : 1950 1951 aktProjekt = prjProjekteId 1952 aktPermDaten_gefProt = self.daten__prtProtokoll_gefProt__Sprache__Projekt_Flex 1953 aktPermDaten_siAnf = self.daten__prtProtokoll_siAnf__Sprache__Projekt_Flex 1954 aktPermDaten_gefProt_vorg = self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt_Flex 1955 aktPermDaten_siAnf_vorg = self.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt_Flex 1956 aktPermDaten_siAnf_gefProt = self.daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt_Flex 1957 1958 konstante__gefProt = str( self.konstante__prt_typ_id__gefProt ).replace( '[', '' ).replace( ']', '' ) 1959 konstante__siAnf = str( self.konstante__prt_typ_id__siAnf ).replace( '[', '' ).replace( ']', '' ) 1960 1961 1962 1963 # 1964 # -- Protokolleinträge (GefProt / SiAnf) auslesen ---------- 1965 # -- ---------- 1966 # -- Die SQL-Abfrage gilt für GefProt und SiAnf. Die Besonderheiten ---------- 1967 # -- von GefProt und SiAnf werden beim Aufruf von ---------- 1968 # -- >__initPermDatenstruktur__()< berücksichtigt ---------- 1969 # -- ---------- 1970 # -- SQL-Abfrage ausführen, Protokolldatei schreiben ---------- 1971 # -- und ggf. globale Variable aktualisieren ---------- 1972 # 1973 sql = """ 1974 SELECT DISTINCT 1975 -- 0 1976 prj.pp_prtprotokoll.prt_protokoll_id 1977 , COALESCE( spr.zeige__wgruppe.wgruppe, '??' ) AS psanf 1978 -- 2 1979 , prj.pp_prtprotokoll.notizen 1980 , prt.protokoll.prt_typ_id 1981 -- 4 1982 , prj.pp_prtprotokoll.spr_uebvar_id 1983 , prj.pp_prtprotokoll.id 1984 FROM 1985 prj.pp_prtprotokoll 1986 -- 1987 -- Sicherheitsanforderung 1988 -- 1989 LEFT OUTER JOIN spr.zeige__wgruppe 1990 ON ( 1991 prj.pp_prtprotokoll.spr_uebvar_id = spr.zeige__wgruppe.spr_uebvar_id 1992 AND 1993 -- 1994 -- Sprache Auswählen 1995 -- 1996 spr.zeige__wgruppe.spr_sprachen_id = """ + str( self.filter__spr_sprachen_id ) + """ 1997 ) 1998 , prt.protokoll 1999 WHERE 2000 prj.pp_prtprotokoll.spr_uebvar_id > 0 2001 AND 2002 -- 2003 -- Projekt einschränken 2004 -- 2005 prj.pp_prtprotokoll.prj_projekte_id = """ + str( aktProjekt ) + """ 2006 AND 2007 -- 2008 -- Typ einschränken 2009 -- 2010 prj.pp_prtprotokoll.prt_protokoll_id = prt.protokoll.id 2011 AND 2012 prt.protokoll.prt_typ_id IN( """ + konstante__gefProt + """ ) 2013 ORDER BY 2014 prj.pp_prtprotokoll.prt_protokoll_id 2015 """ 2016 2017 2018 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2019 , protokollDatKopf = "init__prtProtokoll__Sprache__Projekt() - gefProt" 2020 , sql = sql.replace( 'FROM', 2021 """ -- 6 2022 , to_char( prj.pp_prtprotokoll.datuhrz, 'DD.MM.YYYY' ) 2023 , to_char( prj.pp_prtprotokoll.termin, 'DD.MM.YYYY' ) 2024 -- 8 2025 , to_char( prj.pp_prtprotokoll.duanfrage, 'DD.MM.YYYY' ) 2026 , prj.pp_prtprotokoll.intern 2027 -- 10 2028 , prj.pp_prtprotokoll.erledigt 2029 , prt.protokoll.prt_typ_id 2030 FROM""" ) 2031 , permDaten = aktPermDaten_gefProt 2032 , istDict = True ) 2033 2034 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2035 , protokollDatKopf = "init__prtProtokoll__Sprache__Projekt() - siAnf" 2036 , sql = sql.replace( 'prt.protokoll.prt_typ_id IN( ' + konstante__gefProt, 'prt.protokoll.prt_typ_id IN( ' + konstante__siAnf ) 2037 , permDaten = aktPermDaten_siAnf 2038 , istDict = True ) 2039 2040 2041 2042 # 2043 # -- Verbindungen zwischen gleichen Protokolleinträgen (GefProt / SiAnf) -- 2044 # -- auslesen. 2045 # -- -- 2046 # -- SQL-Abfrage ausführen, Protokolldatei schreiben -- 2047 # -- und ggf. globale Variable aktualisieren -- 2048 # 2049 sql = """ 2050 SELECT DISTINCT 2051 -- 0 2052 prj.p_prtverbindung.prt_protokoll_id_nachf 2053 , CASE WHEN( prot_vorg.prt_typ_id IS NULL ) 2054 THEN 0 2055 ELSE prj.p_prtverbindung.prt_protokoll_id_vorg 2056 END AS prt_protokoll_id_vorg 2057 FROM 2058 prj.p_prtverbindung 2059 -- 2060 -- Typ des Vorgängers ermitteln 2061 -- 2062 LEFT OUTER JOIN prt.protokoll AS prot_vorg 2063 ON ( 2064 prj.p_prtverbindung.prt_protokoll_id_vorg = prot_vorg.id 2065 AND 2066 -- 2067 -- Typ einschränken 2068 -- 2069 prot_vorg.prt_typ_id IN( """ + konstante__gefProt + """ ) 2070 ) 2071 , prt.protokoll 2072 WHERE 2073 prj.p_prtverbindung.idfrei = 0 2074 AND 2075 prj.p_prtverbindung.prt_protokoll_id_nachf = prt.protokoll.id 2076 AND 2077 -- 2078 -- Projekt einschränken 2079 -- 2080 prj.p_prtverbindung.prj_projekte_id = """ + str( aktProjekt ) + """ 2081 AND 2082 -- 2083 -- Typ einschränken 2084 -- 2085 prt.protokoll.prt_typ_id IN( """ + konstante__gefProt + """ ) 2086 AND 2087 -- 2088 -- unsinnige Verbindungen entfernen 2089 -- 2090 prot_vorg.prt_typ_id IS NOT NULL 2091 ORDER BY 2092 prj.p_prtverbindung.prt_protokoll_id_nachf 2093 , prt_protokoll_id_vorg 2094 ;""" 2095 2096 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2097 , protokollDatKopf = "init__prtProtokoll__Sprache__Projekt() - gefProt (Verbindungen)" 2098 , sql = sql 2099 , permDaten = aktPermDaten_gefProt_vorg 2100 , istDict = True ) 2101 2102 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2103 , protokollDatKopf = "init__prtProtokoll__Sprache__Projekt() - siAnf (Verbindungen)" 2104 , sql = sql.replace( 'IN( ' + konstante__gefProt, 'IN( ' + konstante__siAnf ) 2105 , permDaten = aktPermDaten_siAnf_vorg 2106 , istDict = True ) 2107 2108 2109 2110 2111 2112 2113 # 2114 # -- Verbindungen zwischen SiAnf und GefProt auslesen. ------------------ 2115 # -- ------------------ 2116 # -- SQL-Abfrage ausführen, Protokolldatei schreiben ------------------ 2117 # -- und ggf. globale Variable aktualisieren ------------------ 2118 # 2119 sql = """ 2120 SELECT DISTINCT 2121 -- 0 2122 CASE WHEN( prot_vorg.prt_typ_id IS NULL ) 2123 THEN 0 2124 ELSE prj.p_prtverbindung.prt_protokoll_id_vorg 2125 END AS prt_protokoll_id_vorg 2126 , prj.p_prtverbindung.prt_protokoll_id_nachf 2127 FROM 2128 prj.p_prtverbindung 2129 -- 2130 -- Typ des Vorgängers ermitteln 2131 -- 2132 LEFT OUTER JOIN prt.protokoll AS prot_vorg 2133 ON ( 2134 prj.p_prtverbindung.prt_protokoll_id_vorg = prot_vorg.id 2135 AND 2136 -- 2137 -- Typ einschränken 2138 -- 2139 prot_vorg.prt_typ_id IN( """ + konstante__siAnf + """ ) 2140 ) 2141 , prt.protokoll 2142 WHERE 2143 prj.p_prtverbindung.idfrei = 0 2144 AND 2145 prj.p_prtverbindung.prt_protokoll_id_nachf = prt.protokoll.id 2146 AND 2147 -- 2148 -- Projekt einschränken 2149 -- 2150 prj.p_prtverbindung.prj_projekte_id = """ + str( aktProjekt ) + """ 2151 AND 2152 -- 2153 -- Typ einschränken 2154 -- 2155 prt.protokoll.prt_typ_id IN( """ + konstante__gefProt + """ ) 2156 AND 2157 -- 2158 -- unsinnige Verbindungen entfernen 2159 -- 2160 prot_vorg.prt_typ_id IS NOT NULL 2161 ORDER BY 2162 prt_protokoll_id_vorg 2163 , prj.p_prtverbindung.prt_protokoll_id_nachf 2164 ;""" 2165 2166 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2167 , protokollDatKopf = "init__prtProtokoll__Sprache__Projekt() - Verbindung siAnf - GefProt" 2168 , sql = sql 2169 , permDaten = aktPermDaten_siAnf_gefProt 2170 , istDict = True )
2171 2172 2173 2174 2175 2176 # 2177 # ------------------------------------------------------------------------------------ 2178 # ------------------------------------------------------------------------------------ 2179 # -- wxListBox der Tabelle 'prj.personen' initialisieren ------------------ 2180 # -- -- 2181 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 2182 # -- -- 2183 # ------------------------------------------------------------------------------------ 2184 # ------------------------------------------------------------------------------------ 2185 #
2186 - def init__prjPersonen( self, Fortschritt ):
2187 """ 2188 Es wird die Permanente Datenstruktur C{self.daten__prjPersonen} initialisiert. 2189 2190 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 2191 @type Fortschritt: Fortschritt 2192 """ 2193 2194 # 2195 # -- die globale Variable muß mit Werten gefüllt werden ------------------ 2196 # -- (Datenbankabfrage durchführen) ------------------ 2197 # 2198 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2199 , protokollDatKopf = "init__prjPersonen()" 2200 , sql = """ 2201 SELECT 2202 name_n || ', ' || name_v 2203 , id 2204 FROM 2205 prj.personen 2206 WHERE 2207 idfrei = 0 2208 AND 2209 id > 0 2210 ORDER BY 2211 name_n 2212 , name_v 2213 ;""" 2214 , permDaten = self.daten__prjPersonen )
2215 2216 2217 2218 2219 # 2220 # ------------------------------------------------------------------------------------ 2221 # ------------------------------------------------------------------------------------ 2222 # -- wxComboBox der Tabelle 'prj.projekte' initialisieren ------------------ 2223 # -- -- 2224 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 2225 # -- -- 2226 # ------------------------------------------------------------------------------------ 2227 # ------------------------------------------------------------------------------------ 2228 #
2229 - def init__prjProjekte( self, Fortschritt ):
2230 """ 2231 Es wird die Permanente Datenstruktur C{self.daten__prjProjekte} initialisiert. 2232 2233 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 2234 @type Fortschritt: Fortschritt 2235 """ 2236 2237 # 2238 # -- die globale Variable muß mit Werten gefüllt werden ------------------ 2239 # -- (Datenbankabfrage durchführen) ------------------ 2240 # 2241 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2242 , protokollDatKopf = "init__prjProjekte()" 2243 , sql = """ 2244 SELECT 2245 prjname 2246 , id 2247 FROM 2248 prj.projekte 2249 WHERE 2250 idfrei = 0 2251 AND 2252 id > 0 2253 AND 2254 prjname NOT LIKE 'DBDokumentation' 2255 ORDER BY 2256 prjname 2257 ;""" 2258 , permDaten = self.daten__prjProjekte )
2259 2260 2261 2262 2263 # 2264 # ------------------------------------------------------------------------------------ 2265 # ------------------------------------------------------------------------------------ 2266 # -- wxControlWithItems der Tabelle 'prt.typ' initialisieren ------------------ 2267 # -- -- 2268 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 2269 # -- -- 2270 # ------------------------------------------------------------------------------------ 2271 # ------------------------------------------------------------------------------------ 2272 #
2273 - def init__prtTyp__Sprache( self, Fortschritt ):
2274 """ 2275 Es wird die Permanente Datenstruktur C{self.daten__prtTyp__Sprache} initialisiert. 2276 2277 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 2278 @type Fortschritt: Fortschritt 2279 """ 2280 2281 # 2282 # -- die globale Variable muß mit Werten gefüllt werden ------------------ 2283 # -- (Datenbankabfrage durchführen) ------------------ 2284 # 2285 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2286 , protokollDatKopf = "init__prtTyp__Sprache()" 2287 , sql = """ 2288 SELECT DISTINCT 2289 COALESCE( spr.zeige__wgruppe.wgruppe, '??' ) AS typ 2290 , prt.typ.id 2291 , prt.typ.aspekt 2292 FROM 2293 prt.typ 2294 LEFT OUTER JOIN spr.zeige__wgruppe ON ( 2295 prt.typ.spr_uebvar_id = spr.zeige__wgruppe.spr_uebvar_id 2296 AND 2297 -- 2298 -- Sprache Auswählen 2299 -- 2300 spr.zeige__wgruppe.spr_sprachen_id = """ + str( self.filter__spr_sprachen_id ) + """ 2301 ) 2302 WHERE 2303 prt.typ.idfrei = 0 2304 AND 2305 prt.typ.id > 0 2306 ORDER BY 2307 prt.typ.aspekt 2308 , typ 2309 ;""" 2310 , permDaten = self.daten__prtTyp__Sprache )
2311 2312 2313 2314 2315 # 2316 # ------------------------------------------------------------------------------------ 2317 # ------------------------------------------------------------------------------------ 2318 # -- >self.daten__psAbk__Sprache__Projekt< initialisieren ------------------ 2319 # -- -- 2320 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 2321 # -- -- 2322 # ------------------------------------------------------------------------------------ 2323 # ------------------------------------------------------------------------------------ 2324 #
2325 - def init__psAbk__Sprache__Projekt( self, Fortschritt ):
2326 """ 2327 Es wird die Permanente Datenstruktur C{self.daten__psAbk__Sprache__Projekt} initialisiert. 2328 2329 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 2330 @type Fortschritt: Fortschritt 2331 """ 2332 2333 # 2334 # -- SQL-Abfrage ausführen, Protokolldatei schreiben ------------------ 2335 # -- und ggf. globale Variable aktualisieren ------------------ 2336 # 2337 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2338 , protokollDatKopf = "init__psAbk__Sprache__Projekt()" 2339 , sql = """ 2340 SELECT DISTINCT 2341 -- 0 2342 ps.abk.typ 2343 , COALESCE( spr.zeige__wgruppe.wgruppe, '??' ) AS abkuerzung 2344 -- 2 2345 , ps.abk.id 2346 FROM 2347 ps.abk 2348 , prj.p_psabk 2349 LEFT OUTER JOIN spr.zeige__wgruppe 2350 ON ( 2351 prj.p_psabk.spr_uebvar_id = spr.zeige__wgruppe.spr_uebvar_id 2352 AND 2353 -- 2354 -- Sprache Auswählen 2355 -- 2356 spr.zeige__wgruppe.spr_sprachen_id = """ + str( self.filter__spr_sprachen_id ) + """ 2357 ) 2358 WHERE 2359 ps.abk.id = prj.p_psabk.ps_abk_id 2360 AND 2361 ps.abk.idfrei = 0 2362 AND 2363 prj.p_psabk.idfrei = 0 2364 AND 2365 -- 2366 -- nur die gültigen Abkürzungen zeigen 2367 -- 2368 ps.abk.id > 0 2369 AND 2370 -- 2371 -- Projekt auswählen 2372 -- 2373 prj.p_psabk.prj_projekte_id = """ + str( self.filter__prj_projekte_id ) + """ 2374 ORDER BY 2375 ps.abk.typ 2376 , abkuerzung 2377 ; 2378 """ 2379 , permDaten = self.daten__psAbk__Sprache__Projekt 2380 , istDict = True )
2381 2382 2383 2384 2385 # 2386 # ------------------------------------------------------------------------------------ 2387 # ------------------------------------------------------------------------------------ 2388 # -- >self.daten__psAbk_Risikomatrix< initialisieren ------------------ 2389 # -- -- 2390 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 2391 # -- -- 2392 # ------------------------------------------------------------------------------------ 2393 # ------------------------------------------------------------------------------------ 2394 #
2395 - def init__psAbk_Risikomatrix( self, Fortschritt ):
2396 """ 2397 Es wird die Permanente Datenstruktur C{self.daten__psAbk_Risikomatrix} initialisiert. 2398 2399 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 2400 @type Fortschritt: Fortschritt 2401 """ 2402 2403 # 2404 # -- SQL-Abfrage ausführen, Protokolldatei schreiben ------------------ 2405 # -- und ggf. globale Variable aktualisieren ------------------ 2406 # 2407 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2408 , protokollDatKopf = "init__psAbk_Risikomatrix()" 2409 , sql = """ 2410 SELECT DISTINCT 2411 CAST( ps__abk__id_hfg as varchar ) || '-' || CAST( ps__abk__id_gstufe as varchar ) AS hfggef 2412 , ps__abk__id_rstufe 2413 FROM 2414 ps.zeige__risikomatrix_en50126 2415 ORDER BY 2416 hfggef 2417 """ 2418 , permDaten = self.daten__psAbk_Risikomatrix 2419 , istDict = True )
2420 2421 2422 2423 2424 2425 2426 # 2427 # ------------------------------------------------------------------------------------ 2428 # ------------------------------------------------------------------------------------ 2429 # -- wxComboBox der Tabelle 'spr.sprachen' initialisieren ------------------ 2430 # -- -- 2431 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 2432 # -- -- 2433 # ------------------------------------------------------------------------------------ 2434 # ------------------------------------------------------------------------------------ 2435 #
2436 - def init__psGefszenario( self, Fortschritt ):
2437 """ 2438 Es wird die Permanente Datenstruktur C{self.daten__GefszenId__Projekt} initialisiert. 2439 2440 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 2441 @type Fortschritt: Fortschritt 2442 """ 2443 2444 # 2445 # -- die globale Variable muß mit Werten gefüllt werden ------------------ 2446 # -- (Datenbankabfrage durchführen) ------------------ 2447 # 2448 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2449 , protokollDatKopf = "init__psGefszenario()" 2450 , sql = """ 2451 SELECT DISTINCT 2452 prj.pp_psgefszenario.ps_gefszenario_id 2453 -- , true 2454 FROM 2455 prj.pp_psgefszenario 2456 WHERE 2457 -- 2458 -- Projekt auswählen 2459 -- 2460 prj.pp_psgefszenario.prj_projekte_id = """ + str( self.filter__prj_projekte_id ) + """ 2461 AND 2462 -- 2463 -- gültige Datensätze anzeigen 2464 -- 2465 prj.pp_psgefszenario.ps_gefszenario_id > 0 2466 AND 2467 -- 2468 -- nichtgelöschte Datensätze anzeigen 2469 -- 2470 prj.pp_psgefszenario.idfrei = 0 2471 ORDER BY 2472 prj.pp_psgefszenario.ps_gefszenario_id 2473 ;""" 2474 , permDaten = self.daten__GefszenId__Projekt )
2475 2476 2477 2478 2479 2480 2481 # 2482 # ------------------------------------------------------------------------------------ 2483 # ------------------------------------------------------------------------------------ 2484 # -- wxComboBox der Tabelle 'spr.sprachen' initialisieren ------------------ 2485 # -- -- 2486 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 2487 # -- -- 2488 # ------------------------------------------------------------------------------------ 2489 # ------------------------------------------------------------------------------------ 2490 #
2491 - def init__sprSprachen( self, Fortschritt ):
2492 """ 2493 Es wird die Permanente Datenstruktur C{self.daten__sprSprachen} initialisiert. 2494 2495 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 2496 @type Fortschritt: Fortschritt 2497 """ 2498 2499 # 2500 # -- die globale Variable muß mit Werten gefüllt werden ------------------ 2501 # -- (Datenbankabfrage durchführen) ------------------ 2502 # 2503 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2504 , protokollDatKopf = "init__sprSprachen()" 2505 , sql = """ 2506 SELECT 2507 sprache 2508 , id 2509 FROM 2510 spr.sprachen 2511 WHERE 2512 spr.sprachen.idfrei = 0 2513 AND 2514 id > 0 2515 ORDER BY 2516 sprache 2517 ;""" 2518 , permDaten = self.daten__sprSprachen )
2519 2520 2521 2522 2523 2524 # 2525 # ------------------------------------------------------------------------------------ 2526 # ------------------------------------------------------------------------------------ 2527 # -- wxListBox der Tabelle 'str.name' initialisieren ------------------ 2528 # -- -- 2529 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 2530 # -- -- 2531 # ------------------------------------------------------------------------------------ 2532 # ------------------------------------------------------------------------------------ 2533 #
2534 - def init__strName( self, Fortschritt ):
2535 """ 2536 Es wird die Permanente Datenstruktur C{self.daten__strName} initialisiert. 2537 2538 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 2539 @type Fortschritt: Fortschritt 2540 """ 2541 2542 # 2543 # -- die globale Variable muß mit Werten gefüllt werden ------------------ 2544 # -- (Datenbankabfrage durchführen) ------------------ 2545 # 2546 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2547 , protokollDatKopf = "init__strName()" 2548 , sql = """ 2549 SELECT 2550 name_k || ' | ' || name 2551 , id 2552 FROM 2553 str.name 2554 WHERE 2555 idfrei = 0 2556 AND 2557 id > 0 2558 AND 2559 id <> 2 2560 ORDER BY 2561 name_k 2562 ;""" 2563 , permDaten = self.daten__strName )
2564 2565 2566 2567 2568 # 2569 # ------------------------------------------------------------------------------------ 2570 # ------------------------------------------------------------------------------------ 2571 # -- Permanente Datenstruktur der Dokumente initialisieren ------------------ 2572 # -- -- 2573 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 2574 # -- -- 2575 # ------------------------------------------------------------------------------------ 2576 # ------------------------------------------------------------------------------------ 2577 #
2578 - def init__strStrkt__Sprache__Projekt( self, Fortschritt, prjProjekteId = None ):
2579 """ 2580 Es wird die Permanente Datenstruktur C{self.daten__strStrkt__Sprache__Projekt / self.daten__strStrkt__Sprache__Projekt_Flex} initialisiert. 2581 2582 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 2583 @type Fortschritt: Fortschritt 2584 2585 @param prjProjekteId : Es ist die Projekt-Id C{prj.projekte.id} zu übergeben, wenn die perm. Datenstruktur C{..._Flex} initialisiert werden soll. Wird C{None} angegeben, wird die perm. Datenstruktur des aktuellen Projektes C{self.filter__prj_projekte_id} initialisiert. 2586 @type prjProjekteId : C{Ganzzahl} 2587 """ 2588 2589 # 2590 # -- self.filter__prj_projekte_id verwenden ? -------------------------- 2591 # 2592 aktProjekt = self.filter__prj_projekte_id 2593 aktPermDaten = self.daten__strStrkt__Sprache__Projekt 2594 if( prjProjekteId is not None ) : 2595 2596 aktProjekt = prjProjekteId 2597 aktPermDaten = self.daten__strStrkt__Sprache__Projekt_Flex 2598 2599 2600 2601 # 2602 # -- SQL-Abfrage ausführen und Protokolldatei schreiben ------------------ 2603 # -- ggf. permanente Datenstruktur aktualisieren ------------------ 2604 # 2605 self.__initPermDatenstruktur__( Fortschritt = Fortschritt 2606 , protokollDatKopf = "init_strStrkt_Projekt()" 2607 , sql = """ 2608 SELECT DISTINCT 2609 str.strkt.nr || ' ' || COALESCE( spr.zeige__wgruppe.wgruppe, '??' ) AS strpkt 2610 , str.strkt.id AS str__strkt__id 2611 , prj.p_strverbindung.str_strkt_id_vorg AS str_strkt_id__vorg 2612 , str.name.name_k 2613 , prj.pp_strstrkt.spr_uebvar_id 2614 , str.name.id AS str__name__id 2615 , prj.pp_strstrkt.notizen 2616 FROM 2617 str.name 2618 , str.strkt 2619 , prj.pp_strstrkt 2620 -- 2621 -- Strukturpunkt (Text) 2622 -- 2623 LEFT OUTER JOIN spr.zeige__wgruppe 2624 ON ( 2625 prj.pp_strstrkt.spr_uebvar_id = 2626 spr.zeige__wgruppe.spr_uebvar_id 2627 AND 2628 -- 2629 -- Sprache Auswählen 2630 -- 2631 spr.zeige__wgruppe.spr_sprachen_id = """ + str( self.filter__spr_sprachen_id ) + """ 2632 ) 2633 -- 2634 -- aktueller Strukturpunkt ist ein gültiger Nachfolger 2635 -- 2636 LEFT OUTER JOIN prj.p_strverbindung 2637 ON ( 2638 prj.p_strverbindung.str_strkt_id_nachf = prj.pp_strstrkt.str_strkt_id 2639 AND 2640 prj.p_strverbindung.prj_projekte_id = prj.pp_strstrkt.prj_projekte_id 2641 AND 2642 prj.p_strverbindung.idfrei = 0 2643 ) 2644 WHERE 2645 str.name.id = str.strkt.str_name_id 2646 AND 2647 str.strkt.id = prj.pp_strstrkt.str_strkt_id 2648 AND 2649 str.name.idfrei = 0 2650 AND 2651 str.strkt.idfrei = 0 2652 AND 2653 prj.pp_strstrkt.idfrei = 0 2654 AND 2655 -- 2656 -- Projekt auswählen 2657 -- 2658 prj.pp_strstrkt.prj_projekte_id = """ + str( aktProjekt ) + """ 2659 ORDER BY 2660 str.name.id 2661 , strpkt 2662 ;""" 2663 , permDaten = aktPermDaten )
2664 2665 2666 2667 2668 2669 2670 # 2671 # ------------------------------------------------------------------------------------ 2672 # ------------------------------------------------------------------------------------ 2673 # -- wxControlWithItems der Tabelle 'prt.typ' initialisieren ------------------ 2674 # ------------------------------------------------------------------------------------ 2675 # ------------------------------------------------------------------------------------ 2676 #
2677 - def ist__prtTypId( self, typ, id ):
2678 """ 2679 Es wird geprüft, ob die übergebene C{id} dem C{typ} entspricht. Es werden die Typen aus C{prt.typ} verwendet. 2680 2681 @param typ: Es ist der Typ C{T, D, P, O} der zu prüfenden Sicherheitsanforderung anzugeben. 2682 @type typ: Zeichenkette 2683 2684 @param id: Es ist die C{prt.typ.id} anzugeben. 2685 @type id: Ganzzahl 2686 2687 @return: Es wird C{True} zurückgegeben, wenn C{id} dem C{typ} entspricht. 2688 @rtype: Ganzzahl 2689 """ 2690 2691 # 2692 # [T] -- 2693 # -- 2694 # 20 | 01: Technische Maßnahme (Konstruktion) -- 2695 # 21 | 01: Technische Maßnahme (Sicherheitsfunktion) -- 2696 # -- 2697 # [D] -- 2698 # -- 2699 # 22 | 01: Dokumentationsanforderung an den Fahrzeughersteller -- 2700 # -- 2701 # [P] -- 2702 # -- 2703 # 23 | 01: Vom Fahrzeughersteller durchzuführende Prüfung -- 2704 # -- 2705 # [O] -- 2706 # -- 2707 # 24 | 02: Während des Betriebseinsatzes durchzuführende Maßnahme -- 2708 # 25 | 02: In die Bedienungsanleitung aufzunehmende Anforderung -- 2709 # 26 | 03: Instandhaltungsmaßnahme -- 2710 # 27 | 03: In die Instandhaltungsdokumentation aufzunehmende Anforderung -- 2711 # 2712 if( typ == 'T' ) : 2713 2714 return ( id in self.konstante__prt_typ_id__siAnf[0:2] ) 2715 2716 elif( typ == 'D' ) : 2717 2718 return ( id == self.konstante__prt_typ_id__siAnf[2] ) 2719 2720 elif( typ == 'P' ) : 2721 2722 return ( id == self.konstante__prt_typ_id__siAnf[3] ) 2723 2724 elif( typ == 'O' ) : 2725 2726 return ( id in self.konstante__prt_typ_id__siAnf[4:] )
2727 2728 2729 2730 2731 2732 2733 2734 # 2735 # ------------------------------------------------------------------------------------ 2736 # ------------------------------------------------------------------------------------ 2737 # -- Änderungen übernehmen (aktuelle Transaktion schließen, ------------------ 2738 # -- neue Transaktion starten) ------------------ 2739 # ------------------------------------------------------------------------------------ 2740 # ------------------------------------------------------------------------------------ 2741 #
2742 - def nimmAenderungen( self ):
2743 """ 2744 Es werden alle Änderungen in die Datenbank geschrieben, die laufende Transaktion beendet und eine neue Transaktion gestartet. 2745 """ 2746 2747 # 2748 # -- Änderungen übernehmen, Transaktion starten -------------------------- 2749 # 2750 self.__dbVerbindung__.commit()
2751 2752 2753 2754 2755 2756 # 2757 # ------------------------------------------------------------------------------------ 2758 # ------------------------------------------------------------------------------------ 2759 # -- Alle Änderungen seit Setzen eines PostgreSQL-Safepoints übernehmen -- 2760 # ------------------------------------------------------------------------------------ 2761 # ------------------------------------------------------------------------------------ 2762 #
2763 - def nimmAenderungenSafepoint( self, name ):
2764 """ 2765 Methode zum Übernehmen der Änderungen, welche seit dem Setzen eines C{PostgreSQL - Safepoints} durchgeführt wurden. Mittels C{Safepoint} können Teile einer Transaktion gespeichert oder verworfen werden. 2766 2767 @param name: Es ist der Name des C{Safepoints} anzugeben. 2768 @type name: Zeichenkette 2769 """ 2770 2771 # 2772 # -- in Protokolldatei schreiben ------------------------------------------ 2773 # 2774 self.ProtokolldateiEintragen( eintrag = "nimmAenderungenSafepoint()" 2775 , istKopfzeile = True ) 2776 2777 2778 2779 2780 # 2781 # -- Änderungen übernehmen -------------------------------------------------- 2782 # 2783 self.__dbAbfrage__( 'RELEASE SAVEPOINT ' + name + ';' 2784 , Fortschritt = None 2785 , info = "" )
2786 2787 2788 2789 2790 # 2791 # ------------------------------------------------------------------------------------ 2792 # ------------------------------------------------------------------------------------ 2793 # -- Zeilen ind die Protokolldatei eintragen -------------------------- 2794 # ------------------------------------------------------------------------------------ 2795 # ------------------------------------------------------------------------------------ 2796 #
2797 - def ProtokolldateiEintragen( self, eintrag = "", istKopfzeile = False ) :
2798 """Es wird ein Eintrag in die Protokolldatei geschrieben. 2799 2800 @param eintrag: Es ist der Eintrag anzugeben. 2801 @type eintrag: Zeichenkette 2802 2803 @param istKopfzeile: Es ist die C{True} anzugeben, wenn der Eintrag eine Kopfzeile ist. 2804 @type istKopfzeile: Boolean 2805 """ 2806 2807 2808 # 2809 # -- Eintrag in der Protokolldatei ------------------------------------------ 2810 # 2811 self.__ProtokolldateiEintrag__ = eintrag 2812 2813 2814 # 2815 # -- Protokolldatei wird nicht geschrieben ---------------------------------- 2816 # 2817 if( self.__Protokolldatei__ is None ) : 2818 2819 return 2820 2821 2822 # 2823 # -- Eintrag schreiben -------------------------------------------------- 2824 # 2825 if( istKopfzeile ) : 2826 2827 self.__Protokolldatei__.debug( '\n\n--\n--\n-- -----\t' + eintrag + '\t---------------------------------------------\n--\n--\n' ) 2828 2829 else : 2830 2831 self.__Protokolldatei__.debug( eintrag + '\n' )
2832 2833 2834 2835 2836 # 2837 # ------------------------------------------------------------------------------------ 2838 # ------------------------------------------------------------------------------------ 2839 # -- Die Protokolldatei erzeugen ------------------------------------------ 2840 # ------------------------------------------------------------------------------------ 2841 # ------------------------------------------------------------------------------------ 2842 #
2843 - def ProtokolldateiErzeugen( self, schreibProtokollDatei = False ) :
2844 """Es wird die Protokolldatei angelegt. 2845 2846 @param schreibProtokollDatei: Es ist die C{True} anzugeben, wenn die Protokolldatei geschrieben werden soll. 2847 @type schreibProtokollDatei: Boolean 2848 """ 2849 2850 # 2851 # -- Protokolldatei soll angelegt werden ---------------------------------- 2852 # 2853 if( schreibProtokollDatei ) : 2854 2855 self.__Protokolldatei__ = logging.getLogger( 'Protokolldatei' ) 2856 self.__Protokolldatei__.setLevel( logging.DEBUG ) 2857 2858 handler = logging.handlers.RotatingFileHandler( 'wxvf.log', maxBytes=1000000, backupCount=5 ) 2859 self.__Protokolldatei__.addHandler( handler ) 2860 2861 self.ProtokolldateiEintragen( eintrag = ">wxvf< wird ausgeführt:" 2862 , istKopfzeile = True )
2863 2864 2865 2866 2867 # 2868 # ------------------------------------------------------------------------------------ 2869 # ------------------------------------------------------------------------------------ 2870 # -- Schreibe Tabellen: -------------------------------------------------- 2871 # -- >dok.doku< -------------------------------------------------- 2872 # -- -- 2873 # -- 4x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 2874 # -- -- 2875 # ------------------------------------------------------------------------------------ 2876 # ------------------------------------------------------------------------------------ 2877 #
2878 - def schreibe__DokDoku( self, Fortschritt, listeWerte, listeDokDokuId, entferneDokDokuId = None ):
2879 """ 2880 Es werden Dokumente neu angelegt, aktualisiert bzw. entfernt. Datenbankabhängigkeiten werden berücksichtigt. 2881 Wenn C{dok.doku.id} leer ist, wird ein neues Dokument angelegt. 2882 2883 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 2884 @type Fortschritt: Fortschritt 2885 2886 @param listeWerte: Es sind C{[dok.doku.id, dok.doku.notizen, dok.doku.dok_typ_id, dok.doku.spr_uebvar_id_kb, dok.doku.aspekt]} zu übergeben. Wenn ein Dokument entfernt wrden soll, darf C{None} übergeben werden. ACHTUNG, C{notizen} muß als Python-Datentyp C{str()} übergeben werden. 2887 @type listeWerte: Python Liste 2888 2889 @param listeDokDokuId: Es sind C{dok.doku.id} aller in der Datenbank vorhandenen Dokumente zu übergeben. Wenn ein Dokument entfernt wrden soll, darf C{None} übergeben werden 2890 @type listeWerte: Python Liste 2891 2892 @param entferneDokDokuId: Es ist die C{dok.doku.id} des Dokumentes anzugeben, welches entfernt werden soll. 2893 @type entferneDokDokuId: Ganzzahl 2894 2895 @return: Es wird die C{dok.doku.id} des neu eingelesenen / bearbeiteten Dokumentes zurückgegeben. Wenn das Dokument bereits vorhanden ist, wird C{None} angegeben. 2896 @rtype: Ganzzahl 2897 """ 2898 2899 # 2900 # -- in Protokolldatei schreiben ------------------------------------------ 2901 # 2902 self.ProtokolldateiEintragen( eintrag = "schreibe__DokDoku()" 2903 , istKopfzeile = True ) 2904 2905 2906 2907 2908 # 2909 # -- 2910 # -- Layout der Werteliste -------------------------------------------------- 2911 # -- >dok.doku< ---------- 2912 # -- ---------- 2913 # -- ---------- 2914 # -- dok.doku.id listeWerte[0] ---------- 2915 # -- dok.doku.notizen listeWerte[1] ---------- 2916 # -- dok.doku.dok_typ_id listeWerte[2] ---------- 2917 # -- dok.doku.spr_uebvar_id_kb listeWerte[3] ---------- 2918 # -- dok.doku.aspekt listeWerte[4] ---------- 2919 # 2920 if( listeWerte is not None ) : 2921 2922 dokDokuId = listeWerte[0] 2923 2924 2925 2926 # 2927 # -- 2928 # -- Dokument entfernen -------------------------------------------------- 2929 # -- >dok.doku< ---------------------------------- 2930 # -- ---------------------------------- 2931 # -- ------------------ 2932 # -- Konzept: ------------------ 2933 # -- 1. Prüfen, ob es in den Projekten verwendet wird ------------------ 2934 # -- 2. Wenn es nicht verwendet wird, dann löschen ------------------ 2935 # -- ------------------ 2936 # -- ------------------ 2937 # -- -------------------------------------------------------------------------- 2938 # 2939 if( entferneDokDokuId is not None ) : 2940 2941 # 2942 # -- Dokument wird in mindestens einem Projekt verwendet ---------- 2943 # -- -> nicht entfernen ---------- 2944 # 2945 self.__dbAbfrage__( """ 2946 SELECT DISTINCT 2947 dok.doku.id 2948 FROM 2949 dok.doku 2950 -- 2951 -- prj.pl_prtdokdoku 2952 -- 2953 LEFT OUTER JOIN prj.pl_prtdokdoku ON ( 2954 dok.doku.id = prj.pl_prtdokdoku.dok_doku_id 2955 AND prj.pl_prtdokdoku.idfrei = 0 ) 2956 -- 2957 -- prj.pl_dokausgabe 2958 -- 2959 LEFT OUTER JOIN prj.pl_dokausgabe ON ( 2960 dok.doku.id = prj.pl_dokausgabe.dok_doku_id 2961 AND prj.pl_dokausgabe.idfrei = 0 ) 2962 -- 2963 -- prj.ppl_dokdoku 2964 -- 2965 LEFT OUTER JOIN prj.ppl_dokdoku ON ( 2966 dok.doku.id = prj.ppl_dokdoku.dok_doku_id 2967 AND prj.ppl_dokdoku.idfrei = 0 ) 2968 -- 2969 -- prj.p_dokstrkt 2970 -- 2971 LEFT OUTER JOIN prj.p_dokstrkt ON ( 2972 dok.doku.id = prj.p_dokstrkt.dok_doku_id 2973 AND prj.p_dokstrkt.idfrei = 0 ) 2974 WHERE 2975 dok.doku.id > 0 2976 AND 2977 dok.doku.idfrei = 0 2978 AND 2979 NOT( prj.pl_prtdokdoku.dok_doku_id IS NULL 2980 AND prj.pl_dokausgabe.dok_doku_id IS NULL 2981 AND prj.ppl_dokdoku.dok_doku_id IS NULL 2982 AND prj.p_dokstrkt.dok_doku_id IS NULL ) 2983 AND 2984 dok.doku.id = """ + str( entferneDokDokuId ) 2985 , Fortschritt = Fortschritt 2986 , info = "schreibe__DokDoku() - 1" ) 2987 2988 2989 2990 if( self.__anzZeilen__ > 0 ) : return None 2991 2992 2993 2994 # 2995 # -- Dokument entfernen ------------------------------------------ 2996 # 2997 self.__dbAbfrage__( """ 2998 SELECT intern.loesche__zeile( 'dok.doku' 2999 , 'dok.doku.id = """ + str( entferneDokDokuId ) + """' 3000 , 'true');""" 3001 , Fortschritt = Fortschritt 3002 , info = "schreibe__DokDoku() - 2" ) 3003 3004 3005 # 3006 # -- Dokument wurde entfernt ------------------------------------------ 3007 # 3008 return entferneDokDokuId 3009 3010 3011 3012 # 3013 # -- 3014 # -- Neues Dokument anlegen ------------------------------------------ 3015 # -- >dok.doku< ------------------ 3016 # -- ------------------ 3017 # -- ------------------ 3018 # -- intern.nimm__zeile( 'dok.doku', ARRAY[ ------------------ 3019 # -- 'spr_uebvar_id_kb' ------------------ 3020 # -- ], ARRAY[...] ) ------------------ 3021 # -- ------------------ 3022 # -- ------------------ 3023 # -- Konzept: ------------------ 3024 # -- Es wird in zwei Schritten eingelesen: ------------------ 3025 # -- 1. Dopplungen vermeiden ------------------ 3026 # -- 2. Aspekt, Notizen einlesen ------------------ 3027 # -- ------------------ 3028 # -- ------------------ 3029 # -- -------------------------------------------------------------------------- 3030 # 3031 if( len( dokDokuId ) == 0 ) : 3032 3033 self.__dbAbfrage__( """ 3034 SELECT intern.nimm__zeile( 'dok.doku', ARRAY[ 3035 'spr_uebvar_id_kb' 3036 ], ARRAY['""" 3037 # 3038 # -- spr_uebvar_id_kb ---------------------------------- 3039 # 3040 + str( listeWerte[3] ) + "']);" 3041 , Fortschritt = Fortschritt 3042 , info = "schreibe__DokDoku() - 3" ) 3043 3044 dokDokuId = self.__gibWert__( 0, 0 ) 3045 3046 if( int( dokDokuId ) in listeDokDokuId ) : 3047 3048 return None 3049 3050 3051 3052 # 3053 # -- 3054 # -- Dokument bearbeiten (einschl. aspekt, notizen einlesen) ------------------ 3055 # -- bei Anlegen eines neuen Dokumentes ------------------ 3056 # -- >dok.doku< ------------------ 3057 # -- ------------------ 3058 # -- ------------------ 3059 # -- intern.nimm__zeile( 'dok.doku', ARRAY[ ------------------ 3060 # -- 'id' ------------------ 3061 # -- , 'notizen' ------------------ 3062 # -- , 'dok_typ_id' ------------------ 3063 # -- , 'spr_uebvar_id_kb' ------------------ 3064 # -- , 'aspekt' ------------------ 3065 # -- ], ARRAY[...] ) ------------------ 3066 # -- ------------------ 3067 # -- ------------------ 3068 # -- -------------------------------------------------------------------------- 3069 # 3070 self.__dbAbfrage__( """ 3071 SELECT intern.nimm__zeile( 'dok.doku', ARRAY[ 3072 'id' 3073 , 'notizen' 3074 , 'dok_typ_id' 3075 , 'spr_uebvar_id_kb' 3076 , 'aspekt' 3077 ], ARRAY['""" 3078 # 3079 # -- id ------------------------------------------ 3080 # 3081 + str( dokDokuId ) + "'" 3082 # 3083 # -- notizen ------------------------------------------ 3084 # 3085 + ", '" + zk.gibZk( listeWerte[1] ) + "'" 3086 # 3087 # -- dok_typ_id ---------------------------------- 3088 # 3089 + ", '" + str( listeWerte[2] ) + "'" 3090 # 3091 # -- spr_uebvar_id_kb ---------------------------------- 3092 # 3093 + ", '" + str( listeWerte[3] ) + "'" 3094 # 3095 # -- aspekt -------------------------------------------------- 3096 # 3097 + ", '" + listeWerte[4] + "']);" 3098 , Fortschritt = Fortschritt 3099 , info = "schreibe__DokDoku() - 4" ) 3100 3101 3102 # 3103 # -- aktuelle >dok.doku.id< zurückgeben ---------------------------------- 3104 # 3105 return dokDokuId
3106 3107 3108 3109 # 3110 # ------------------------------------------------------------------------------------ 3111 # ------------------------------------------------------------------------------------ 3112 # -- Protokolleintrag mittels UPDATE aktualisieren -------------------------- 3113 # -- -- 3114 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 3115 # -- -- 3116 # ------------------------------------------------------------------------------------ 3117 # ------------------------------------------------------------------------------------ 3118 #
3119 - def schreibe__DokDoku__UPDATE( self, Fortschritt, dokDokuId, sprUebvarIdKb, Notizen ):
3120 """ 3121 Methode zum Aktualisieren eines Dokumentes in C{dok.doku} mittels C{UPDATE}. 3122 3123 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 3124 @type Fortschritt: Fortschritt 3125 3126 @param DokDokuId: Es ist die C{dok.doku.id} des Dokumentes anzugeben. 3127 @type DokDokuId: Ganzzahl 3128 3129 @param sprUebvarIdKb: Es ist die C{dok.doku.spr_uebvar_id_kb} anzugeben. 3130 @type sprUebvarIdKb: Ganzzahl 3131 3132 @param Notizen: Es ist C{dok.doku.notizen} anzugeben. ACHTUNG, C{dok.doku.notizen} muß als Python-Datentyp C{str()} übergeben werden. 3133 @type Notizen: Zeichenkette 3134 """ 3135 3136 # 3137 # -- in Protokolldatei schreiben ------------------------------------------ 3138 # 3139 self.ProtokolldateiEintragen( eintrag = "schreibe__DokDoku__UPDATE()" 3140 , istKopfzeile = True ) 3141 3142 3143 3144 3145 # 3146 # -- Datenbank aktualisieren ------------------------------------------ 3147 # 3148 self.__dbAbfrage__( """ 3149 UPDATE 3150 dok.doku 3151 SET 3152 spr_uebvar_id_kb = """ + str( sprUebvarIdKb ) + """ 3153 , notizen = '""" + zk.gibZk( Notizen ) + """' 3154 WHERE 3155 id = """ + str( dokDokuId ) + """;""" 3156 , Fortschritt = Fortschritt 3157 , info = "schreibe__DokDoku__UPDATE()" )
3158 3159 3160 3161 # 3162 # ------------------------------------------------------------------------------------ 3163 # ------------------------------------------------------------------------------------ 3164 # -- Ausgabe schreiben -------------------------------------------------- 3165 # -- -- 3166 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 3167 # -- -- 3168 # ------------------------------------------------------------------------------------ 3169 # ------------------------------------------------------------------------------------ 3170 #
3171 - def schreibe__prjPlDokAusgabe( self, Fortschritt, listeWerte, logentfernt = 'false' ):
3172 """ 3173 Methode zum Schreiben der Ausgabe eines Dokumentes. 3174 3175 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 3176 @type Fortschritt: Fortschritt 3177 3178 @param listeWerte: Es sind C{dok_doku_id, nr, spr_uebvar_id, stand, datum, istfrei, notizen} zu übergeben. 3179 @type listeWerte: Python - Liste 3180 3181 @param logentfernt: Wird C{true} angegeben, soll die Verbindung zwischen Sicherheitsanfordeurng und Dokument gelöst werden 3182 @type logentfernt: Zeichenkette, die C{true/false} enthält 3183 """ 3184 3185 # 3186 # -- in Protokolldatei schreiben ------------------------------------------ 3187 # 3188 self.ProtokolldateiEintragen( eintrag = "schreibe__prjPlDokAusgabe()" 3189 , istKopfzeile = True ) 3190 3191 3192 3193 # 3194 # -- 3195 # -- Ausgabe schreiben -------------------------------------------------- 3196 # -- >prj.pl_dokausgabe< ---------- 3197 # -- ---------- 3198 # -- ---------- 3199 # -- prj.nimm__tabwerte( 'pl_dokausgabe', ARRAY[ ---------- 3200 # -- 1. prj_projekte_id ---------- 3201 # -- 2. dok_doku_id ---------- 3202 # -- 3. logentfernt ---------- 3203 # -- 4. nr ---------- 3204 # -- 5. spr_uebvar_id ---------- 3205 # -- 6. stand ---------- 3206 # -- 7. datum ---------- 3207 # -- 8. istfrei ---------- 3208 # -- 9. notizen ---------- 3209 # -- ---------- 3210 # -- ---------- 3211 # -- -------------------------------------------------------------------------- 3212 # 3213 sql = ( """ 3214 SELECT prj.nimm__tabwerte( 'pl_dokausgabe', ARRAY[""" 3215 # 3216 # -- prj_projekte_id ---------------------------------- 3217 # 3218 + "'" + str( self.filter__prj_projekte_id ) + "'" 3219 # 3220 # -- dok_doku_id ------------------------------------------ 3221 # 3222 + ", '" + str( listeWerte[0] ) + "'" 3223 # 3224 # -- logentfernt ------------------------------------------ 3225 # 3226 + ", '" + str( logentfernt ) + "'" ) 3227 3228 # 3229 # -- nr -------------------------------------------------- 3230 # 3231 if( len( listeWerte ) > 1 ) : 3232 sql += ", '" + zk.gibZk( listeWerte[1] ) + "'" 3233 3234 # 3235 # -- spr_uebvar_id ------------------------------------------ 3236 # 3237 if( len( listeWerte ) > 2 ) : 3238 sql += ", '" + str( listeWerte[2] ) + "'" 3239 3240 # 3241 # -- stand -------------------------------------------------- 3242 # 3243 if( len( listeWerte ) > 3 ) : 3244 sql += ", '" + zk.gibZk( listeWerte[3] ) + "'" 3245 3246 # 3247 # -- datum -------------------------------------------------- 3248 # 3249 if( len( listeWerte ) > 4 ) : 3250 sql += ", '" + str( listeWerte[4] ) + "'" 3251 3252 # 3253 # -- istfrei -------------------------------------------------- 3254 # 3255 if( len( listeWerte ) > 5 ) : 3256 sql += ", '" + str( listeWerte[5] ) + "'" 3257 3258 # 3259 # -- notizen ------------------------------------------ 3260 # 3261 if( len( listeWerte ) > 6 ) : 3262 sql += ", '" + zk.gibZk( listeWerte[6] ) + "'" 3263 3264 3265 sql += "]);" 3266 3267 3268 3269 # 3270 # -- SQL-Abfrage ausführen -------------------------------------------------- 3271 # 3272 self.__dbAbfrage__( sql 3273 , Fortschritt = Fortschritt 3274 , info = "schreibe__prjPlDokAusgabe()" )
3275 3276 3277 3278 3279 # 3280 # ------------------------------------------------------------------------------------ 3281 # ------------------------------------------------------------------------------------ 3282 # -- Dokument schreiben (Protokolleintrag zuordnen) -------------------------- 3283 # -- -- 3284 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 3285 # -- -- 3286 # ------------------------------------------------------------------------------------ 3287 # ------------------------------------------------------------------------------------ 3288 #
3289 - def schreibe__prjPlPrtDokDoku( self, Fortschritt, listeWerte ):
3290 """ 3291 Methode zum Schreiben eines Dokumentes einschl. Zuordnen des Protokolleintrages. 3292 3293 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 3294 @type Fortschritt: Fortschritt 3295 3296 @param listeWerte: Es sind C{notizen, logentfernt, dok_doku_id, prj_projekte_id, prt_protokoll_id} zu übergeben. ACHTUNG, C{nr, notizen} muß als Python-Datentyp C{str()} übergeben werden. 3297 @type listeWerte: Python - Liste 3298 """ 3299 3300 3301 3302 # 3303 # -- in Protokolldatei schreiben ------------------------------------------ 3304 # 3305 self.ProtokolldateiEintragen( eintrag = "schreibe__prjPlPrtDokDoku()" 3306 , istKopfzeile = True ) 3307 3308 3309 3310 # 3311 # -- 3312 # -- Protokolleintrag anlegen ------------------------------------------ 3313 # -- >prt.protokoll< ---------- 3314 # -- ---------- 3315 # -- ---------- 3316 # -- intern.nimm__zeile( 'prj.pl_prtdokdoku', ARRAY[ ---------- 3317 # -- , 'notizen' ---------- 3318 # -- , 'logentfernt' ---------- 3319 # -- , 'dok_doku_id' ---------- 3320 # -- , 'prj_projekte_id' ---------- 3321 # -- , 'prt_protokoll_id' ---------- 3322 # -- ], ARRAY[...] ) ---------- 3323 # -- ---------- 3324 # -- ---------- 3325 # -- -------------------------------------------------------------------------- 3326 # 3327 self.__dbAbfrage__( """ 3328 SELECT intern.nimm__zeile( 'prj.pl_prtdokdoku', ARRAY[ 'notizen', 'logentfernt', 'dok_doku_id', 'prj_projekte_id', 'prt_protokoll_id', 'logdatuhrz' ], ARRAY[ """ 3329 # 3330 # -- notizen -------------------------------------------------- 3331 # 3332 + "'" + zk.gibZk( listeWerte[0] ) + "'" 3333 # 3334 # -- logentfernt ------------------------------------------ 3335 # 3336 + ", '" + listeWerte[1] + "'" 3337 # 3338 # -- dok_doku_id ------------------------------------------ 3339 # 3340 + ", '" + str( listeWerte[2] ) + "'" 3341 # 3342 # -- prj_projekte_id ------------------------------------------ 3343 # 3344 + ", '" + str( listeWerte[3] ) + "'" 3345 # 3346 # -- prt_protokoll_id ---------------------------------- 3347 # 3348 + ", '" + str( listeWerte[4] ) + "'" 3349 # 3350 # -- logdatuhrz ------------------------------------------ 3351 # 3352 + ", CAST( timeofday() AS varchar )]);" 3353 , Fortschritt = Fortschritt 3354 , info = "schreibe__prjPlPrtDokDoku()" )
3355 3356 3357 3358 3359 3360 3361 # 3362 # ------------------------------------------------------------------------------------ 3363 # ------------------------------------------------------------------------------------ 3364 # -- Protokolleintrag dem Gefahrenszenario zuordnen -------------------------- 3365 # -- -- 3366 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 3367 # -- -- 3368 # ------------------------------------------------------------------------------------ 3369 # ------------------------------------------------------------------------------------ 3370 #
3371 - def schreibe__prjPlPrtPsGefszenario( self, Fortschritt, listePrtProtokollId, psGefszenarioId, logentfernt = 'false' ):
3372 """ 3373 Methode zum Herstellen der projektspezifischen Verbindung zwischen Protokolleintrag und Gefahrenszenario. 3374 3375 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 3376 @type Fortschritt: Fortschritt 3377 3378 @param listePrtProtokollId: Es sind die C{prt.protokoll.id} zu übergeben. 3379 @type listePrtProtokollId: Python - Liste 3380 3381 @param psGefszenarioId: Es ist die Datenbankidentifikationsnummer (C{ps.gefszenario.id}) des aktuellen Gefahrenszenarios zu übergeben. 3382 @type psGefszenarioId: Ganzzahl 3383 3384 @param logentfernt: Wird C{true} angegeben, soll die Verbindung zwischen Sicherheitsanfordeurng und Dokument gelöst werden 3385 @type logentfernt: Zeichenkette, die C{true/false} enthält 3386 """ 3387 3388 # 3389 # -- in Protokolldatei schreiben ------------------------------------------ 3390 # 3391 self.ProtokolldateiEintragen( eintrag = "schreibe__prjPlPrtPsGefszenario()" 3392 , istKopfzeile = True ) 3393 3394 3395 3396 # 3397 # -- 3398 # -- Protokolleintrag und Gefahrenszenario verbinden -------------------------- 3399 # -- >prj.pl_prtpsgefszenario< ---------- 3400 # -- ---------- 3401 # -- ---------- 3402 # -- prj.nimm__tabwerte( 'pl_prtpsgefszenario', ARRAY[ ---------- 3403 # -- 1. prj_projekte_id ---------- 3404 # -- 2. ps_gefszenario_id ---------- 3405 # -- 3. prt_protokoll_id ---------- 3406 # -- 4. notizen ---------- 3407 # -- 5. logentfernt ---------- 3408 # -- 6. ... ---------- 3409 # -- ---------- 3410 # -- -------------------------------------------------------------------------- 3411 # 3412 listeBereitsZugeordnet = [] 3413 if( psGefszenarioId in self.daten__GefszenId_ProtId_gefProt__Projekt ) : 3414 3415 listeBereitsZugeordnet = zk.gibListeTeilmenge( liste = self.daten__GefszenId_ProtId_gefProt__Projekt[psGefszenarioId] ) 3416 3417 istDBAktualisierung = False 3418 3419 for i in range( len( listePrtProtokollId ) ) : 3420 3421 # 3422 # -- bereits zugeordnete Protokolleinträge überspringen, ---------- 3423 # -- (nur beim Zuordnen relevant) ---------- 3424 # 3425 if( logentfernt == 'false' and listePrtProtokollId[i] in listeBereitsZugeordnet ) : 3426 3427 continue 3428 3429 3430 # 3431 # -- Datenbank aktualisieren ------------------------------------------ 3432 # 3433 istDBAktualisierung = True 3434 self.__dbAbfrage__( """ 3435 SELECT prj.nimm__tabwerte( 'pl_prtpsgefszenario', ARRAY[""" 3436 # 3437 # -- prj_projekte_id ---------------------------------- 3438 # 3439 + "'" + str( self.filter__prj_projekte_id ) + "'" 3440 # 3441 # -- ps_gefszenario_id ---------------------------------- 3442 # 3443 + ", '" + str( psGefszenarioId ) + "'" 3444 # 3445 # -- prt_protokoll_id ---------------------------------- 3446 # 3447 + ", '" + str( listePrtProtokollId[i] ) + "'" 3448 # 3449 # -- notizen (ggf. später den tatsächlichen Wert übernehmen) -- 3450 # 3451 + ", '" + zk.gibZk( "" ) + "'" 3452 # 3453 # -- logentfernt ------------------------------------------ 3454 # 3455 + ", '" + logentfernt + "']);" 3456 , Fortschritt = Fortschritt 3457 , info = "schreibe__prjPlPrtPsGefszenario()" )
3458 3459 3460 3461 # 3462 # ------------------------------------------------------------------------------------ 3463 # ------------------------------------------------------------------------------------ 3464 # -- Protokolleintrag dem Projekt zuordnen / vom Projekt trennen ---------- 3465 # -- -- 3466 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 3467 # -- -- 3468 # ------------------------------------------------------------------------------------ 3469 # ------------------------------------------------------------------------------------ 3470 #
3471 - def schreibe__prjPPPrtProtokoll( self, Fortschritt, listeWerte, istPerson = False, entfernen = False ):
3472 """ 3473 Methode zum Herstellen/Entfernen der Verbindung zwischen Protokolleinträgen C{listeWerte} und Projekt. Weiterhin werden die projektspezifischen Detailinformationen zum Protokolleintrag geschrieben. 3474 Protokolleinträge, die dem Projekt bereits zugeordnet sind, werden übersprungen. 3475 3476 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 3477 @type Fortschritt: Fortschritt 3478 3479 @param listeWerte: Es ist die Liste der Protokolleinträge zu übergeben, die dem Projekt zugeordnet bzw. aus dem Projekt entfernt werden sollen. Es wird C{prj.pp_prtprotokoll} geschrieben. Es ist zu übergeben [[id, notizen, datuhrz, duanfrage, erledigt, intern, prj_personen_id, prt_protokoll_id, spr_uebvar_id, teilnehmer, termin], [...], ...]. Wenn die Protokolleinträge entfernt werden sollen, ist nur C{prt_protokoll_id} zu übergeben. Wenn C{id} übergeben wird, werden bereits bestehende Einträge überschrchrieben. Soll ein Wert nicht übergeben werden, ist C{None} anzugeben. 3480 @type listeWerte: Python-Liste 3481 3482 @param istPerson: Wird C{True} angegeben, werden die Personen eingelesen. Wird C{False} angegeben, werden die projektspezifischen Detailinformationen zum Protokolleintrag eingelesen. 3483 @type istPerson: Boolean 3484 3485 @param entfernen: Wird C{True} angegeben, sollen die Protokolleinträge aus dem Projekt entfernt werden 3486 @type entfernen: Boolean 3487 """ 3488 3489 # 3490 # -- in Protokolldatei schreiben ------------------------------------------ 3491 # 3492 self.ProtokolldateiEintragen( eintrag = "schreibe__prjPPPrtProtokoll()" 3493 , istKopfzeile = True ) 3494 3495 3496 3497 # 3498 # -- 3499 # -- Protokolleinträge aus >prj.pp_prtprotokoll< entfernen ------------------ 3500 # -- ---------- 3501 # -- ---------- 3502 # -- SELECT intern.loesche__zeile( 'prj.pp_prtprotokoll' ---------- 3503 # -- , 'prj_projekte_id = self.filter__prj_projekte_id ---------- 3504 # -- AND prj.pp_prtprotokoll.id = prt.protokoll.id ---------- 3505 # -- AND id = listeWerte[i][0]', true ); ---------- 3506 # -- ---------- 3507 # -- ---------- 3508 # -- -------------------------------------------------------------------------- 3509 # 3510 if( entfernen ) : 3511 3512 for i in range( len( listeWerte ) ) : 3513 3514 sql = ( """SELECT intern.loesche__zeile( 'prj.pp_prtprotokoll' 3515 , 'prj_projekte_id = """ + str( self.filter__prj_projekte_id ) ) 3516 # 3517 # -- 7) prt_protokoll_id ------------------------------------------------- 3518 # 3519 if( listeWerte[i][7] != None ) : 3520 sql += " AND prj.pp_prtprotokoll.prt_protokoll_id = " + str( listeWerte[i][7] ) 3521 # 3522 # -- 0) id --------------------------------------------------------------- 3523 # 3524 if( listeWerte[i][0] != None ) : 3525 sql += " AND prj.pp_prtprotokoll.id = " + str( listeWerte[i][0] ) 3526 3527 sql += "', 'true' );" 3528 3529 self.__dbAbfrage__( sql 3530 , Fortschritt = Fortschritt 3531 , info = "schreibe__prjPPPrtProtokoll() - 1" ) 3532 3533 # 3534 # -- Routine verlassen ------------------------------------------ 3535 # 3536 return 3537 3538 3539 3540 # 3541 # -- ---------- 3542 # -- Plausibilitätsprüfung der beiden Fälle ---------------------------------- 3543 # -- ---------- 3544 # -- ---------- 3545 # -- 1. projektspezifische Detailinformationen zum Protokolleintrag ---------- 3546 # -- prj_projekte_id > 0 AND prt_protokoll_id > 0 ---------- 3547 # -- AND prj_personen_id = 0 AND teilnehmer = None ---------- 3548 # -- ---------- 3549 # -- 2. Personen zuordnen ---------- 3550 # -- prj_projekte_id > 0 AND prt_protokoll_id > 0 ---------- 3551 # -- prj_personen_id > 0 AND teilnehmer not None ---------- 3552 # 3553 for i in range( len( listeWerte ) ) : 3554 3555 # 3556 # -- prj_projekte_id ist immer > 0 ------------------------------------------ 3557 # -- prt_protokoll_id -------------------------------------------------- 3558 # 3559 if( not ( listeWerte[i][7] > 0 ) ) : return 3560 3561 # 3562 # -- 1. projektspezifische Detailinformationen zum Protokolleintrag ---------- 3563 # -- prj_personen_id -------------------------------------------------- 3564 # -- teilnehmer -------------------------------------------------- 3565 # 3566 if( istPerson == False ) : 3567 3568 if( not( listeWerte[i][6] == 0 3569 and listeWerte[i][9] is None ) ) : return 3570 3571 # 3572 # -- 2. Personen zuordnen -------------------------------------------------- 3573 # -- prj_personen_id -------------------------------------------------- 3574 # -- teilnehmer -------------------------------------------------- 3575 # 3576 else : 3577 3578 if( not( listeWerte[i][6] > 0 3579 and listeWerte[i][9] is not None ) ) : return 3580 3581 3582 3583 # 3584 # -- alle >prt.protokoll.id< übernehmen, die dem Projekt bereits ---------- 3585 # -- zugeordnet sind ---------- 3586 # 3587 prtProtokollIdZugeordnet = self.daten__prtProtokoll_gefProt__Sprache__Projekt.keys() 3588 prtProtokollIdZugeordnet += self.daten__prtProtokoll_siAnf__Sprache__Projekt.keys() 3589 3590 3591 3592 # 3593 # -- 3594 # -- Projektspezifische Zeilen einlesen ---------------------------------- 3595 # -- >prj.pp_prtprotokoll< ---------- 3596 # -- ---------- 3597 # -- ---------- 3598 # -- intern.nimm__zeile( 'prj.pp_prtprotokoll', ARRAY[ ---------- 3599 # -- 'id' ---------- 3600 # -- , 'notizen' ---------- 3601 # -- , 'datuhrz' ---------- 3602 # -- , 'duanfrage' ---------- 3603 # -- , 'erledigt' ---------- 3604 # -- , 'intern' ---------- 3605 # -- , 'prj_personen_id' ---------- 3606 # -- , 'prj_projekte_id' ---------- 3607 # -- , 'prt_protokoll_id' ---------- 3608 # -- , 'spr_uebvar_id' ---------- 3609 # -- , 'teilnehmer' ---------- 3610 # -- , 'termin' ---------- 3611 # -- ], ARRAY[...] ) ---------- 3612 # -- ---------- 3613 # -- Es werden die bisher bestehenden projektspezifischen Zeilen ---------- 3614 # -- überschrieben. ---------- 3615 # -- ---------- 3616 # -- -------------------------------------------------------------------------- 3617 # 3618 for i in range( len( listeWerte ) ) : 3619 3620 3621 sql = "SELECT intern.nimm__zeile( 'prj.pp_prtprotokoll', ARRAY[" 3622 # 3623 # -- 0) id ------------------------------------------------------------------- 3624 # 3625 if( listeWerte[i][0] != None ) : sql += "'id', " 3626 # 3627 # -- 1) notizen -------------------------------------------------------------- 3628 # 3629 if( listeWerte[i][1] != None ) : sql += "'notizen', " 3630 # 3631 # -- 2) datuhrz -------------------------------------------------------------- 3632 # 3633 if( listeWerte[i][2] != None ) : sql += "'datuhrz', " 3634 # 3635 # -- 3) duanfrage ------------------------------------------------------------ 3636 # 3637 if( listeWerte[i][3] != None ) : sql += "'duanfrage', " 3638 # 3639 # -- 4) erledigt ------------------------------------------------------------- 3640 # 3641 if( listeWerte[i][4] != None ) : sql += "'erledigt', " 3642 # 3643 # -- 5) intern --------------------------------------------------------------- 3644 # 3645 if( listeWerte[i][5] != None ) : sql += "'intern', " 3646 # 3647 # -- 6) prj_personen_id ------------------------------------------------------ 3648 # 3649 if( listeWerte[i][6] != None ) : sql += "'prj_personen_id', " 3650 # 3651 # -- -) prj_projekte_id ------------------------------------------------------ 3652 # 3653 sql += "'prj_projekte_id', " 3654 # 3655 # -- 7) prt_protokoll_id ----------------------------------------------------- 3656 # 3657 sql += "'prt_protokoll_id', " 3658 # 3659 # -- 8) spr_uebvar_id -------------------------------------------------------- 3660 # 3661 if( listeWerte[i][8] != None ) : sql += "'spr_uebvar_id', " 3662 # 3663 # -- 9) teilnehmer ---------------------------------------------------------- 3664 # 3665 if( listeWerte[i][9] != None ) : sql += "'teilnehmer', " 3666 # 3667 # -- 10) termin -------------------------------------------------------------- 3668 # 3669 if( listeWerte[i][10] != None ) : sql += "'termin', " 3670 3671 sql += "], ARRAY[" 3672 3673 # 3674 # -- 0) id ------------------------------------------------------------------- 3675 # 3676 if( listeWerte[i][0] != None ) : sql += "'" + str( listeWerte[i][0] ) + "', " 3677 # 3678 # -- 1) notizen -------------------------------------------------- 3679 # 3680 if( listeWerte[i][1] != None ) : sql += "'" + str( listeWerte[i][1] ) + "', " 3681 # 3682 # -- 2) datuhrz -------------------------------------------------- 3683 # 3684 if( listeWerte[i][2] != None ) : sql += str( listeWerte[i][2] ) + ", " 3685 # 3686 # -- 3) duanfrage ------------------------------------------ 3687 # 3688 if( listeWerte[i][3] != None ) : sql += str( listeWerte[i][3] ) + ", " 3689 # 3690 # -- 4) erledigt ------------------------------------------ 3691 # 3692 if( listeWerte[i][4] != None ) : sql += "'" + str( listeWerte[i][4] ) + "', " 3693 # 3694 # -- 5) intern -------------------------------------------------- 3695 # 3696 if( listeWerte[i][5] != None ) : sql += "'" + str( listeWerte[i][5] ) + "', " 3697 # 3698 # -- 6) prj_personen_id ------------------------------------------ 3699 # 3700 if( listeWerte[i][6] != None ) : sql += "'" + str( listeWerte[i][6] ) + "', " 3701 # 3702 # -- -) prj_projekte_id ------------------------------------------ 3703 # 3704 sql += "'" + str( self.filter__prj_projekte_id ) + "', " 3705 # 3706 # -- 7) prt_protokoll_id ---------------------------------- 3707 # 3708 sql += "'" + str( listeWerte[i][7] ) + "', " 3709 # 3710 # -- 8) spr_uebvar_id ------------------------------------------ 3711 # 3712 if( listeWerte[i][8] != None ) : sql += "'" + str( listeWerte[i][8] ) + "', " 3713 # 3714 # -- 9) teilnehmer ------------------------------------------ 3715 # 3716 if( listeWerte[i][9] != None ) : sql += "'" + str( listeWerte[i][9] ) + "', " 3717 # 3718 # -- 10) termin -------------------------------------------------- 3719 # 3720 if( listeWerte[i][10] != None ) : sql += str( listeWerte[i][10] ) + ", " 3721 3722 sql += "]);" 3723 sql = sql.replace( ", ]", "]" ) 3724 3725 self.__dbAbfrage__( sql 3726 , Fortschritt = Fortschritt 3727 , info = "schreibe__prjPPPrtProtokoll() - 2" )
3728 3729 3730 3731 3732 # 3733 # ------------------------------------------------------------------------------------ 3734 # ------------------------------------------------------------------------------------ 3735 # -- Tabelle >prj.pl_psgefabk< schreiben ---------------------------------- 3736 # -- -- 3737 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 3738 # -- -- 3739 # ------------------------------------------------------------------------------------ 3740 # ------------------------------------------------------------------------------------ 3741 #
3742 - def schreibe__prjPlPsGefAbk( self, Fortschritt, listeWerte, logentfernt = 'false' ):
3743 """ 3744 Methode zum Übernehmen der projektspezifischen Abkürzungen bezogen auf das Gefahrenszenario. 3745 3746 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 3747 @type Fortschritt: Fortschritt 3748 3749 @param listeWerte: Es sind C{[ps_abk_id, spr_uebvar_id_zus, notizen]} zu übergeben. ACHTUNG, C{notizen} muß als Python-Datentyp C{str()} übergeben werden. 3750 @type listeWerte: Python Liste 3751 3752 @param logentfernt: Wird C{true} angegeben, soll die Verbindung zwischen Sicherheitsanfordeurng und Dokument gelöst werden 3753 @type logentfernt: Zeichenkette, die C{true/false} enthält 3754 """ 3755 3756 # 3757 # -- Es ist kein Gefahrenszenario vorhanden -------------------------- 3758 # -- -> Datenbankabfrage wird nicht ausgeführt -------------------------- 3759 # 3760 if( self.ps_gefszenario_id is None ) : 3761 3762 return 3763 3764 3765 3766 # 3767 # -- in Protokolldatei schreiben ------------------------------------------ 3768 # 3769 self.ProtokolldateiEintragen( eintrag = "schreibe__prjPlPsGefAbk()" 3770 , istKopfzeile = True ) 3771 3772 3773 3774 # 3775 # -- 3776 # -- Projektspezifische Zeilen einlesen -------------------------- 3777 # -- -- 3778 # -- -- 3779 # -- prj.nimm__tabwerte( 'pl_psgefabk', ARRAY[ -- 3780 # -- 1. prj_projekte_id -- 3781 # -- 2. ps_gefszenario_id -- 3782 # -- 3. logentfernt -- 3783 # -- 4. ps_abk_id -- 3784 # -- 5. spr_uebvar_id_zus -- 3785 # -- 6. notizen -- 3786 # -- 7. ... ] ) -- 3787 # -- -- 3788 # -- -- 3789 # -- ------------------------------------------------------------------ 3790 # 3791 self.__dbAbfrage__( """ 3792 SELECT prj.nimm__tabwerte( 'pl_psgefabk', ARRAY[""" 3793 # 3794 # -- prj_projekte_id ---------------------------------- 3795 # 3796 + "'" + str( self.filter__prj_projekte_id ) + "'" 3797 # 3798 # -- ps_gefszenario_id ---------------------------------- 3799 # 3800 + ", '" + str( self.ps_gefszenario_id ) + "'" 3801 # 3802 # -- logentfernt ------------------------------------------ 3803 # 3804 + ", '" + logentfernt + "'" 3805 # 3806 # -- ps_abk_id ------------------------------------------ 3807 # 3808 + ", '" + str( listeWerte[0] ) + "'" 3809 # 3810 # -- spr_uebvar_id_zus ---------------------------------- 3811 # 3812 + ", '" + str( listeWerte[1] ) + "'" 3813 # 3814 # -- notizen ------------------------------------------ 3815 # 3816 + ", '" + zk.gibZk( listeWerte[2] ) + "']);" 3817 , Fortschritt = Fortschritt 3818 , info = "schreibe__prjPlPsGefAbk()" )
3819 3820 3821 3822 3823 3824 # 3825 # ------------------------------------------------------------------------------------ 3826 # ------------------------------------------------------------------------------------ 3827 # -- Tabelle >prj.pl_psgefanm< schreiben ---------------------------------- 3828 # -- -- 3829 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 3830 # -- -- 3831 # ------------------------------------------------------------------------------------ 3832 # ------------------------------------------------------------------------------------ 3833 #
3834 - def schreibe__PrjPlPsGefAnm( self, Fortschritt, listeWerte, logentfernt = 'false' ):
3835 """ 3836 Methode zum Aktualisieren der projektspezifischen Anmerkungen in der Datenbanktabelle C{prj.pl_psgefanm}. 3837 3838 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 3839 @type Fortschritt: Fortschritt 3840 3841 @param listeWerte: Es sind C{[ps_anmerkung_id, spr_uebvar_id, notizen} zu übergeben. ACHTUNG, C{notizen} muß als Python-Datentyp C{str()} übergeben werden. 3842 @type listeWerte: Python Liste 3843 3844 @param logentfernt: Wird C{true} angegeben, soll die Verbindung zwischen Anmerkung und Gefahrenszenario gelöst werden 3845 @type logentfernt: Zeichenkette, die C{true/false} enthält 3846 """ 3847 3848 # 3849 # -- Es ist kein Gefahrenszenario vorhanden -------------------------- 3850 # -- -> Datenbankabfrage wird nicht ausgeführt -------------------------- 3851 # 3852 if( self.ps_gefszenario_id is None ) : 3853 3854 return 3855 3856 3857 # 3858 # -- in Protokolldatei schreiben ------------------------------------------ 3859 # 3860 self.ProtokolldateiEintragen( eintrag = "schreibe__PrjPlPsGefAnm()" 3861 , istKopfzeile = True ) 3862 3863 3864 3865 # 3866 # -- 3867 # -- Projektspezifische Zeilen einlesen ---------------------------------- 3868 # -- ---------- 3869 # -- ---------- 3870 # -- prj.nimm__tabwerte( 'pl_psgefanm', ARRAY[ ---------- 3871 # -- 1. prj_projekte_id ---------- 3872 # -- 2. ps_gefszenario_id ---------- 3873 # -- 3. logentfernt ---------- 3874 # -- 4. ps_anmerkung_id ---------- 3875 # -- 5. spr_uebvar_id ---------- 3876 # -- 6. notizen ---------- 3877 # -- 7. ... ] ) ---------- 3878 # -- ---------- 3879 # -- Bei Mehrfachverwendung von Anmerkungen und Änderung der ---------- 3880 # -- >spr_uebvar_id< müssen alle betroffenen Gefahren-Id ---------- 3881 # -- aktualisiert werden ---------- 3882 # -- ---------- 3883 # -- Momentan wird nicht geprüft, ob die aktuell einzulesende ---------- 3884 # -- projektspezifische Zeile in der Datenbank die aktuell gül- ---------- 3885 # -- tige Zeile ist (einfacherer Algorithmus). Das kann später ---------- 3886 # -- verbessert werden. ---------- 3887 # -- ---------- 3888 # -- ---------- 3889 # -- -------------------------------------------------------------------------- 3890 # 3891 liste__ps_gefszanario_id = [] 3892 liste__ps_gefszanario_id.append( self.ps_gefszenario_id ) 3893 3894 if( listeWerte[1] != listeWerte[3] ) : 3895 3896 liste__ps_gefszanario_id = [] 3897 3898 for i in range( len( self.daten__GefszenId_AnmId__Sprache__Projekt.values() ) ) : 3899 3900 if( allg.hatWert__List( liste = self.daten__GefszenId_AnmId__Sprache__Projekt.values()[i] 3901 , pos = 1 3902 , wert = listeWerte[3] ) ) : 3903 3904 liste__ps_gefszanario_id.append( self.daten__GefszenId_AnmId__Sprache__Projekt.keys()[i] ) 3905 3906 3907 for i in liste__ps_gefszanario_id : 3908 3909 self.__dbAbfrage__( """ 3910 SELECT prj.nimm__tabwerte( 'pl_psgefanm', ARRAY[""" 3911 # 3912 # -- prj_projekte_id ------------------------------------------ 3913 # 3914 + "'" + str( self.filter__prj_projekte_id ) + "'" 3915 # 3916 # -- ps_gefszenario_id ------------------------------------------ 3917 # 3918 + ", '" + str( i ) + "'" 3919 # 3920 # -- logentfernt -------------------------------------------------- 3921 # 3922 + ", '" + logentfernt + "'" 3923 # 3924 # -- ps_anmerkung_id 3925 # 3926 + ", '" + str( listeWerte[0] ) + "'" 3927 # 3928 # -- spr_uebvar_id 3929 # 3930 + ", '" + str( listeWerte[1] ) + "'" 3931 # 3932 # -- notizen ------------------------------------------ 3933 # 3934 + ", '" + zk.gibZk( listeWerte[2] ) + "']);" 3935 , Fortschritt = Fortschritt 3936 , info = "schreibe__PrjPlPsGefAnm()" )
3937 3938 3939 3940 3941 # 3942 # ------------------------------------------------------------------------------------ 3943 # -- Tabelle >prj.pl_psgefstrkt< schreiben ---------------------------------- 3944 # -- -- 3945 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 3946 # -- -- 3947 # ------------------------------------------------------------------------------------ 3948 #
3949 - def schreibe__PrjPlPsGefStrkt( self, Fortschritt, listeWerte, logentfernt = 'false' ):
3950 """ 3951 Methode zum Einfügen / Aktualisieren der (projektspezifischen) Informationen in die Datenbanktabellen C{prj.pl_psgefstrkt}. 3952 3953 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 3954 @type Fortschritt: Fortschritt 3955 3956 @param listeWerte: Es sind C{[str_strkt_id, notizen]} zu übergeben. ACHTUNG, C{notizen} muß als Python-Datentyp C{str()} übergeben werden. 3957 @type listeWerte: Python Liste 3958 3959 @param logentfernt: Wird C{true} angegeben, soll die Verbindung zwischen Sicherheitsanfordeurng und Dokument gelöst werden 3960 @type logentfernt: Zeichenkette, die C{true/false} enthält 3961 """ 3962 3963 # 3964 # -- Es ist kein Gefahrenszenario vorhanden -------------------------- 3965 # -- -> Datenbankabfrage wird nicht ausgeführt -------------------------- 3966 # 3967 if( self.ps_gefszenario_id is None ) : 3968 3969 return 3970 3971 3972 3973 # 3974 # -- in Protokolldatei schreiben ------------------------------------------ 3975 # 3976 self.ProtokolldateiEintragen( eintrag = "schreibe__PrjPlPsGefStrkt()" 3977 , istKopfzeile = True ) 3978 3979 3980 3981 # 3982 # -- 3983 # -- Projektspezifische Zeilen einlesen ---------------------------------- 3984 # -- ---------- 3985 # -- ---------- 3986 # -- prj.nimm__tabwerte( 'pl_psgefstrkt', ARRAY[ ---------- 3987 # -- 1. prj_projekte_id ---------- 3988 # -- 2. ps_gefszenario_id ---------- 3989 # -- 3. str_strkt_id ---------- 3990 # -- 4. notizen ---------- 3991 # -- 5. logentfernt ---------- 3992 # -- 6. ... ] ) ---------- 3993 # -- ---------- 3994 # -- ---------- 3995 # -- Momentan wird nicht geprüft, ob die aktuell einzulesende ---------- 3996 # -- projektspezifische Zeile in der Datenbank die aktuell gül- ---------- 3997 # -- tige Zeile ist (einfacherer Algorithmus). Das kann später ---------- 3998 # -- verbessert werden. ---------- 3999 # -- ---------- 4000 # -- ---------- 4001 # -- -------------------------------------------------------------------------- 4002 # 4003 self.__dbAbfrage__( """ 4004 SELECT prj.nimm__tabwerte( 'pl_psgefstrkt', ARRAY[""" 4005 # 4006 # -- prj_projekte_id ---------------------------------- 4007 # 4008 + "'" + str( self.filter__prj_projekte_id ) + "'" 4009 # 4010 # -- ps_gefszenario_id ---------------------------------- 4011 # 4012 + ", '" + str( self.ps_gefszenario_id ) + "'" 4013 # 4014 # -- str_strkt_id ------------------------------------------ 4015 # 4016 + ", '" + str( listeWerte[0] ) + "'" 4017 # 4018 # -- notizen ------------------------------------------ 4019 # 4020 + ", '" + zk.gibZk( listeWerte[1] ) + "'" 4021 # 4022 # -- logentfernt ------------------------------------------ 4023 # 4024 + ", '" + logentfernt + "']);" 4025 , Fortschritt = Fortschritt 4026 , info = "schreibe__PrjPlPsGefStrkt()" )
4027 4028 4029 4030 4031 # 4032 # ------------------------------------------------------------------------------------ 4033 # -- Tabelle >ps.gefszenario< -------------------------- 4034 # -- >prj.pp_psgefszenario< schreiben -------------------------- 4035 # -- -- 4036 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 4037 # -- -- 4038 # ------------------------------------------------------------------------------------ 4039 #
4040 - def schreibe__PrjPpPsGefszenario( self, Fortschritt, listeGefszen ):
4041 """ 4042 Methode zum Einfügen / Aktualisieren der (projektspezifischen) Informationen in die Datenbanktabellen C{ps.gefszenario / prj.pp_psgefszenario}. 4043 4044 4045 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 4046 @type Fortschritt: Fortschritt 4047 4048 @param listeGefszen: Es sind C{[spr_uebvar_id, notizen, spr_uebvar_id_reprgefszen, id]} zu übergeben. ACHTUNG, C{notizen} muß als Python-Datentyp C{str()} übergeben werden. 4049 @type listeGefszen: Python Liste 4050 """ 4051 4052 # 4053 # -- Es ist kein Gefahrenszenario vorhanden -------------------------- 4054 # -- -> Datenbankabfrage wird nicht ausgeführt -------------------------- 4055 # 4056 if( self.ps_gefszenario_id is None ) : 4057 4058 return 4059 4060 4061 4062 # 4063 # -- in Protokolldatei schreiben ------------------------------------------ 4064 # 4065 self.ProtokolldateiEintragen( eintrag = "schreibe__PrjPpPsGefszenario()" 4066 , istKopfzeile = True ) 4067 4068 4069 4070 # 4071 # -- 4072 # -- Projektspezifische Zeilen einlesen ---------------------------------- 4073 # -- ---------- 4074 # -- ---------- 4075 # -- intern.nimm__zeile( 'prj.pp_psgefszenario', ARRAY[ ---------- 4076 # -- 'id' ---------- 4077 # -- , 'notizen' ---------- 4078 # -- , 'prj_personen_id' ---------- 4079 # -- , 'prj_projekte_id' ---------- 4080 # -- , 'ps_gefszenario_id' ---------- 4081 # -- , 'spr_uebvar_id' ---------- 4082 # -- , 'spr_uebvar_id_reprgefszen' ---------- 4083 # -- , 'spr_uebvar_id_ursp' ---------- 4084 # -- ], ARRAY[...] ) ---------- 4085 # -- ---------- 4086 # -- Es werden die bisher bestehenden projektspezifischen Zeilen ---------- 4087 # -- überschrieben. ---------- 4088 # -- ---------- 4089 # -- ---------- 4090 # -- -------------------------------------------------------------------------- 4091 # 4092 self.__dbAbfrage__( """ 4093 SELECT intern.nimm__zeile( 'prj.pp_psgefszenario', ARRAY[ 4094 'id' 4095 , 'notizen' 4096 , 'prj_personen_id' 4097 , 'prj_projekte_id' 4098 , 'ps_gefszenario_id' 4099 , 'spr_uebvar_id' 4100 , 'spr_uebvar_id_reprgefszen' 4101 , 'spr_uebvar_id_ursp' 4102 ], ARRAY['""" 4103 # 4104 # -- id -------------------------- 4105 # 4106 + str( listeGefszen[3] ) + """', '""" 4107 # 4108 # -- notizen -------------------------- 4109 # 4110 + zk.gibZk( listeGefszen[1] ) + """', '""" 4111 # 4112 # -- prj_personen_id ------------------ 4113 # 4114 + '0' + """', '""" 4115 # 4116 # -- prj_projekte_id ------------------ 4117 # 4118 + str( self.filter__prj_projekte_id ) + """', '""" 4119 # 4120 # -- ps_gefszenario_id ---------- 4121 # 4122 + str( self.ps_gefszenario_id ) + """', '""" 4123 # 4124 # -- spr_uebvar_id ------------------ 4125 # 4126 + str( listeGefszen[0] ) + """', '""" 4127 # 4128 # -- spr_uebvar_id_reprgefszen -- 4129 # 4130 + str( listeGefszen[2] ) + """', '""" 4131 # 4132 # -- spr_uebvar_id_ursp ---------- 4133 # 4134 + '0' + """']);""" 4135 , Fortschritt = Fortschritt 4136 , info = "schreibe__PrjPpPsGefszenario()" )
4137 4138 4139 4140 4141 # 4142 # ------------------------------------------------------------------------------------ 4143 # ------------------------------------------------------------------------------------ 4144 # -- Protokolleinträge verbinden ------------------------------------------ 4145 # -- -- 4146 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 4147 # -- -- 4148 # ------------------------------------------------------------------------------------ 4149 # ------------------------------------------------------------------------------------ 4150 #
4151 - def schreibe__prjPPrtVerbindung( self, Fortschritt, prjProjekteId, prtProtokollIdVorg, prtProtokollIdNachf, trennen = False ):
4152 """ 4153 Methode zum Herstellen der projektspezifischen Verbindung zwischen den Protokolleinträgen. Bereits vorhandene Verbindungen werden übersprungen. 4154 4155 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 4156 @type Fortschritt: Fortschritt 4157 4158 @param prjProjekteId: Es ist die Datenbankidentifikationsnummer (C{prj.projekte.id}) des Projektes zu übergeben. 4159 @type prjProjekteId: Ganzzahl 4160 4161 @param prtProtokollIdVorg: Es ist die Datenbankidentifikationsnummer (C{prt.protokoll.id}) des Vorgängers anzugeben. 4162 @type prtProtokollIdVorg: Ganzzahl 4163 4164 @param prtProtokollIdNachf: Es ist die Datenbankidentifikationsnummer (C{prt.protokoll.id}) des Nachfolgers anzugeben. 4165 @type prtProtokollIdNachf: Ganzzahl 4166 4167 @param trennen: Es ist C{True} anzugeben, wenn die Protokolleinträge voneinander getrennt werden sollen. 4168 @type trennen: Boolean 4169 4170 @return: Es wird der Text der Fehlermeldung zurückgegeben, wenn C{prtProtokollIdVorg} und C{prtProtokollIdNachf} einander bereits in umgekehrter Reihenfolge zugeordnet sind bzw. wenn C{prtProtokollIdVorg == prtProtokollIdNachf} ist. 4171 @rtype: Zeichenkette 4172 """ 4173 4174 # 4175 # -- Plausibilitätsprüfung ------------------------------------------ 4176 # -- ---------- 4177 # -- Bereits vorhandene Verbindungen werden übersprungen ---------- 4178 # -- (keine Fehlermeldung) ---------- 4179 # -- ---------- 4180 # -- Bei Zuordnung des Protokolleintrages >prtProtokollIdNachf< ---------- 4181 # -- zu >prtProtokollIdNachf< darf die Rückwärtsverbindung nicht ---------- 4182 # -- existieren. ---------- 4183 # -- Bsp: ---------- 4184 # -- Wenn die Verbindung der Id 46 <- 41 hergestellt werden soll, ---------- 4185 # -- darf die Verbindung der Id 41 <- 46 nicht vorhanden sein. ---------- 4186 # -- (Text der Fehlermeldung wird generiert) ---------- 4187 # -- ---------- 4188 # -- Bei Zuordnung des Protokolleintrages >prtProtokollIdNachf< ---------- 4189 # -- zu >prtProtokollIdNachf< müssen sich beide Werte unterscheiden ---------- 4190 # -- (Text der Fehlermeldung wird generiert) ---------- 4191 # -- ---------- 4192 # 4193 if( not trennen ) : 4194 4195 # 4196 # -- Bereits vorhandene Verbindung überspringen ------------------ 4197 # -- Rückwärtszuordnung unterbinden ------------------ 4198 # 4199 if( prtProtokollIdNachf in self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt ) : 4200 4201 # 4202 # -- Bereits vorhandene Verbindung ---------------------------------- 4203 # 4204 if( [prtProtokollIdVorg] in self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt[prtProtokollIdNachf] ) : 4205 4206 return None 4207 4208 # 4209 # -- Rückwärtsverbindung prüfen ---------------------------------- 4210 # 4211 if( prtProtokollIdVorg in self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt ) : 4212 4213 if( [prtProtokollIdNachf] in self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt[prtProtokollIdVorg] ) : 4214 4215 return "Beide Protokolleinträge sind einander bereits in umgekehrter Reihenfolge zugeordnet." 4216 4217 4218 4219 # 4220 # -- Protokoll-Id müssen sich unterscheiden -------------------------- 4221 # 4222 if( prtProtokollIdVorg == prtProtokollIdNachf ) : 4223 4224 return "Der Protokolleintrag darf sich nicht selbst zugeordnet werden." 4225 4226 4227 4228 # 4229 # -- in Protokolldatei schreiben ------------------------------------------ 4230 # 4231 self.ProtokolldateiEintragen( eintrag = "schreibe__prjPPrtVerbindung()" 4232 , istKopfzeile = True ) 4233 4234 4235 4236 # 4237 # -- 4238 # -- Protokolleinträge trennen ------------------------------------------ 4239 # -- >prj.p_prtverbindung< ---------- 4240 # -- ---------- 4241 # -- ---------- 4242 # -- SELECT intern.loesche__zeile( 'prj.p_prtverbindung' ---------- 4243 # -- , 'prj_projekte_id = prjProjekteId ---------- 4244 # -- AND prt_protokoll_id_vorg = prtProtokollIdVorg ---------- 4245 # -- AND prt_protokoll_id_nachf = prtProtokollIdNachf' ---------- 4246 # -- , 'true' ); ---------- 4247 # -- ---------- 4248 # -- ---------- 4249 # -- -------------------------------------------------------------------------- 4250 # 4251 if( trennen ): 4252 4253 self.__dbAbfrage__( """ 4254 SELECT intern.loesche__zeile( 'prj.p_prtverbindung' 4255 , 'prj_projekte_id = """ + str( prjProjekteId ) + """ 4256 AND prt_protokoll_id_vorg = """ + str( prtProtokollIdVorg ) + """ 4257 AND prt_protokoll_id_nachf = """ + str( prtProtokollIdNachf ) + """' 4258 , 'true' );""" 4259 , Fortschritt = Fortschritt 4260 , info = "schreibe__prjPPrtVerbindung() - 1" ) 4261 4262 4263 # 4264 # -- 4265 # -- Protokolleinträge miteinander verbinden -------------------------- 4266 # -- >prj.p_prtverbindung< ---------- 4267 # -- ---------- 4268 # -- ---------- 4269 # -- prj.nimm__tabwerte( 'p_prtverbindung', ARRAY[ ---------- 4270 # -- 1. prj_projekte_id ---------- 4271 # -- 2. prt_protokoll_id_nachf ---------- 4272 # -- 3. prt_protokoll_id_vorg ---------- 4273 # -- 4. ... ---------- 4274 # -- ---------- 4275 # -- -------------------------------------------------------------------------- 4276 # 4277 else : 4278 4279 self.__dbAbfrage__( """ 4280 SELECT prj.nimm__tabwerte( 'p_prtverbindung', ARRAY[""" 4281 # 4282 # -- prj_projekte_id ---------------------------------- 4283 # 4284 + "'" + str( prjProjekteId ) + "'" 4285 # 4286 # -- prt_protokoll_id_nachf ---------------------------------- 4287 # 4288 + ", '" + str( prtProtokollIdNachf ) + "'" 4289 # 4290 # -- prt_protokoll_id_vorg ---------------------------------- 4291 # 4292 + ", '" + str( prtProtokollIdVorg ) + "']);" 4293 , Fortschritt = Fortschritt 4294 , info = "schreibe__prjPPrtVerbindung() - 2" )
4295 4296 4297 4298 4299 4300 # 4301 # ------------------------------------------------------------------------------------ 4302 # -- Protokolleintrag und Strukturpunkt trennen/verbinden ------------------ 4303 # -- -- 4304 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 4305 # -- -- 4306 # ------------------------------------------------------------------------------------ 4307 #
4308 - def schreibe__PrjPPrtStrStrkt( self, Fortschritt, listeWerte, entfernen = False ):
4309 """ 4310 Methode zum Herstellen / Lösen der projektspezifischen Verbindung zwischen Protokolleintrag und Strukturpunkt. 4311 4312 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 4313 @type Fortschritt: Fortschritt 4314 4315 @param listeWerte: Es sind C{prt_protokoll_id, str_strkt_id} zu übergeben. 4316 @type listeWerte: Python - Liste 4317 4318 @param entfernen: Wird C{True} angegeben, wird die Verbindung zwischen Protokolleintrag und Strkturpunkt aufgehoben. 4319 @type entfernen: Boolean 4320 """ 4321 4322 # 4323 # -- in Protokolldatei schreiben ------------------------------------------ 4324 # 4325 self.ProtokolldateiEintragen( eintrag = "schreibe__PrjPPrtStrStrkt()" 4326 , istKopfzeile = True ) 4327 4328 4329 4330 # 4331 # -- 4332 # -- Protokolleintrag und Strukturpunkt trennen -------------------------- 4333 # -- >prj.p_prtstrstrkt< ---------- 4334 # -- ---------- 4335 # -- ---------- 4336 # -- SELECT intern.loesche__zeile( 'prj.p_prtstrstrkt' ---------- 4337 # -- , 'prj.p_prtstrstrkt.id = xxx' ---------- 4338 # -- , 'true' ); ---------- 4339 # -- ---------- 4340 # -- ---------- 4341 # -- -------------------------------------------------------------------------- 4342 # 4343 if( entfernen ) : 4344 4345 self.__dbAbfrage__( """ 4346 SELECT intern.loesche__zeile( 'prj.p_prtstrstrkt' 4347 , 'prj_projekte_id = """ + str( self.filter__prj_projekte_id ) + """ 4348 AND prt_protokoll_id = """ + str( listeWerte[0] ) + """ 4349 AND str_strkt_id = """ + str( listeWerte[1] ) + """' 4350 , 'true');""" 4351 , Fortschritt = Fortschritt 4352 , info = "schreibe__PrjPPrtStrStrkt() - 1" ) 4353 4354 4355 4356 # 4357 # -- 4358 # -- Protokolleintrag und Strukturpunkt verbinden -------------------------- 4359 # -- >prj.p_prtstrstrkt< ---------- 4360 # -- ---------- 4361 # -- ---------- 4362 # -- prj.nimm__tabwerte( 'p_prtstrstrkt', ARRAY[ ---------- 4363 # -- 1. prj_projekte_id ---------- 4364 # -- 2. prt_protokoll_id ---------- 4365 # -- 3. str_strkt_id ---------- 4366 # -- 4. notizen ---------- 4367 # -- ---------- 4368 # -- ---------- 4369 # -- -------------------------------------------------------------------------- 4370 # 4371 else : 4372 4373 # 4374 # -- Verbindung herstellen ------------------------------------------ 4375 # 4376 self.__dbAbfrage__( """ 4377 SELECT prj.nimm__tabwerte( 'p_prtstrstrkt', ARRAY[""" 4378 # 4379 # -- prj_projekte_id ---------------------------------- 4380 # 4381 + "'" + str( self.filter__prj_projekte_id ) + "'" 4382 # 4383 # -- prt_protokoll_id ---------------------------------- 4384 # 4385 + ", '" + str( listeWerte[0] ) + "'" 4386 # 4387 # -- str_strkt_id ------------------------------------------ 4388 # 4389 + ", '" + str( listeWerte[1] ) + "']);" 4390 , Fortschritt = Fortschritt 4391 , info = "schreibe__PrjPPrtStrStrkt() - 2" )
4392 4393 4394 4395 # 4396 # ------------------------------------------------------------------------------------ 4397 # ------------------------------------------------------------------------------------ 4398 # -- In Tabelle >prj.pp_strstrkt< schreiben -------------------------- 4399 # -- -- 4400 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 4401 # -- -- 4402 # ------------------------------------------------------------------------------------ 4403 # ------------------------------------------------------------------------------------ 4404 #
4405 - def schreibe__PrjPpStrStrkt( self, Fortschritt, prjProjekteId, strStrktId, prjPersonenId, sprUebvarId, fbereignis, notizen ):
4406 """ 4407 Methode zum Einfügen / Aktualisieren projektspezifischer Informationen in die / der Datenbanktabelle C{prj.pp_strstrkt}. 4408 4409 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 4410 @type Fortschritt: Fortschritt 4411 4412 @param prjProjekteId : Es ist die Projekt-Id C{prj.projekte.id} zu übergeben. 4413 @type prjProjekteId : C{Ganzzahl} 4414 4415 @param strStrktId : Es ist die Struktur-Id C{str.strkt.id} zu übergeben. 4416 @type strStrktId : C{Ganzzahl} 4417 4418 @param prjPersonenId : Es ist die Personen-Id C{prj.personen.id} zu übergeben. 4419 @type prjPersonenId : C{Ganzzahl} 4420 4421 @param sprUebvarId : Es ist die Id der Übersetzungsvariante C{spr.uebvar.id} zu übergeben. 4422 @type sprUebvarId : C{Ganzzahl} 4423 4424 @param fbereignis : Es ist das Fehlerbaumereignis zu übergeben 4425 @type fbereignis : C{Zeichenkette} 4426 4427 @param notizen : Es sind die Notizen zu übergeben. 4428 @type notizen : C{Zeichenkette} 4429 """ 4430 4431 # 4432 # -- in Protokolldatei schreiben ------------------------------------------ 4433 # 4434 self.ProtokolldateiEintragen( eintrag = "schreibe__PrjPpStrStrkt()" 4435 , istKopfzeile = True ) 4436 4437 4438 4439 # 4440 # -- 4441 # -- Strukturpunkte in das Projekt übernehmen -------------------------- 4442 # -- >prj.pp_strstrkt< ---------- 4443 # -- ---------- 4444 # -- ---------- 4445 # -- prj.nimm__tabwerte( 'pp_strstrkt', ARRAY[ ---------- 4446 # -- 1. prj_projekte_id ---------- 4447 # -- 2. str_strkt_id ---------- 4448 # -- 3. prj_personen_id ---------- 4449 # -- 5. spr_uebvar_id ---------- 4450 # -- 6. fbereignis ---------- 4451 # -- 8. notizen ---------- 4452 # -- ---------- 4453 # -- ---------- 4454 # -- -------------------------------------------------------------------------- 4455 # 4456 self.__dbAbfrage__( """ 4457 SELECT prj.nimm__tabwerte( 'pp_strstrkt', ARRAY[""" 4458 # 4459 # -- prj_projekte_id ---------------------------------- 4460 # 4461 + "'" + str( prjProjekteId ) + "'" 4462 # 4463 # -- str_strkt_id ------------------------------------------ 4464 # 4465 + ", '" + str( strStrktId ) + "'" 4466 # 4467 # -- prj_personen_id ---------------------------------- 4468 # 4469 + ", '" + str( prjPersonenId ) + "'" 4470 # 4471 # -- spr_uebvar_id ------------------------------------------ 4472 # 4473 + ", '" + str( sprUebvarId ) + "']);" 4474 , Fortschritt = Fortschritt 4475 , info = "schreibe__PrjPpStrStrkt()" )
4476 4477 4478 4479 4480 # 4481 # ------------------------------------------------------------------------------------ 4482 # -- In Tabelle >prj.p_strverbindung< schreiben -------------------------- 4483 # -- -- 4484 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 4485 # -- -- 4486 # ------------------------------------------------------------------------------------ 4487 #
4488 - def schreibe__prjPStrverbindung( self, Fortschritt, prjProjekteId, strStrktIdVorg, strStrktIdNachf ):
4489 """ 4490 Methode zum Einfügen / Aktualisieren projektspezifischer Informationen in die / der Datenbanktabelle C{prj.pp_strstrkt}. 4491 4492 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 4493 @type Fortschritt: Fortschritt 4494 4495 @param prjProjekteId : Es ist die Projekt-Id C{prj.projekte.id} zu übergeben. 4496 @type prjProjekteId : C{Ganzzahl} 4497 4498 @param strStrktIdVorg : Es ist die Struktur-Id C{str.strkt.id} des ersten (linken) Strukturpunktes zu übergeben. 4499 @type strStrktIdVorg : C{Ganzzahl} 4500 4501 @param strStrktIdNachf : Es ist die Struktur-Id C{str.strkt.id} des nachfolgenden (mit dem linken verbndenen) Strukturpunkt zu übergeben. 4502 @type strStrktIdNachf : C{Ganzzahl} 4503 """ 4504 4505 # 4506 # -- in Protokolldatei schreiben ------------------------------------------ 4507 # 4508 self.ProtokolldateiEintragen( eintrag = "schreibe__prjPStrverbindung()" 4509 , istKopfzeile = True ) 4510 4511 4512 4513 # 4514 # -- 4515 # -- Verbindung zwischen den Strukturpunkten herstellen ------------------ 4516 # -- ---------- 4517 # -- prj.nimm__tabwerte( 'p_strverbindung', ARRAY[ ---------- 4518 # -- 1. prj_projekte_id ---------- 4519 # -- 2. str_strkt_id_vorg ---------- 4520 # -- 3. str_strkt_id_nachf ] ) ---------- 4521 # -- ---------- 4522 # -- -------------------------------------------------------------------------- 4523 # 4524 self.__dbAbfrage__( """ 4525 SELECT * FROM prj.nimm__tabwerte( 'p_strverbindung', ARRAY[""" 4526 # 4527 # -- prj_projekte_id ---------------------------------- 4528 # 4529 + "'" + str( prjProjekteId ) + "'" 4530 # 4531 # -- str_strkt_id_vorg ---------------------------------- 4532 # 4533 + ", '" + str( strStrktIdVorg ) + "'" 4534 # 4535 # -- str_strkt_id_nachf ---------------------------------- 4536 # 4537 + ", '" + str( strStrktIdNachf ) + "']);" 4538 , Fortschritt = Fortschritt 4539 , info = "schreibe__prjPStrverbindung()" )
4540 4541 4542 4543 4544 # 4545 # ------------------------------------------------------------------------------------ 4546 # -- In Tabelle >prt.protokoll< schreiben ---------------------------------- 4547 # -- -- 4548 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 4549 # -- -- 4550 # ------------------------------------------------------------------------------------ 4551 #
4552 - def schreibe__PrtProtokoll( self, Fortschritt, prtTypId, notizen = zk.gibZk( "" ), prtProtokollId = None, entfernen = False ):
4553 """ 4554 Methode zum Anlegen eines Protokolleintrages in der Datenbanktabelle C{prt.protokoll} (der Parameter C{prtProtokollId} wird nicht verwendet). 4555 Beim Entfernen wird C{prtTypId} nicht verwendet. 4556 4557 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 4558 @type Fortschritt: Fortschritt 4559 4560 @param prtTypId : Es ist die Projekt-Id C{prt.typ.id} zu übergeben. 4561 @type prtTypId : C{Ganzzahl} 4562 4563 @param notizen : Es sind die Notizen zu übergeben. ACHTUNG, C{notizen} muß als Python-Datentyp C{str()} übergeben werden. 4564 @type notizen : C{Zeichenkette} 4565 4566 @param prtProtokollId: Es ist die Datenbankidentifikationsnummer (C{prt.protokoll.id}) des aktuellen Protokolleintrages (Sicherheitsanforderung, Terminplaneintrag) zu übergeben, der entfernt werden soll. 4567 @type prtProtokollId: Ganzzahl 4568 4569 @param entfernen: Wird C{True} angegeben, wird der Protokolleintrag aus der Datenbank entfernt 4570 @type entfernen: Boolean 4571 """ 4572 4573 # 4574 # -- in Protokolldatei schreiben ------------------------------------------ 4575 # 4576 self.ProtokolldateiEintragen( eintrag = "schreibe__PrtProtokoll()" 4577 , istKopfzeile = True ) 4578 4579 4580 4581 # 4582 # -- 4583 # -- Protokolleinträge aus >prj.pp_prtprotokoll< entfernen ------------------ 4584 # -- ------------------ 4585 # -- ------------------ 4586 # -- SELECT intern.loesche__zeile( 'prt.protokoll' ------------------ 4587 # -- , 'id = prtProtokollId' ); ------------------ 4588 # -- ------------------ 4589 # -- ------------------ 4590 # -- -------------------------------------------------------------------------- 4591 # 4592 if( entfernen ) : 4593 4594 self.__dbAbfrage__( """ 4595 SELECT intern.loesche__zeile( 'prt.protokoll' 4596 , 'prt.protokoll.id = """ + str( prtProtokollId ) + """' 4597 , 'true');""" 4598 , Fortschritt = Fortschritt 4599 , info = "schreibe__PrtProtokoll() - 1" ) 4600 4601 # 4602 # -- Routine verlassen ------------------------------------------ 4603 # 4604 return 4605 4606 4607 4608 # 4609 # -- 4610 # -- Protokolleintrag anlegen ------------------------------------------ 4611 # -- >prt.protokoll< ------------------ 4612 # -- ------------------ 4613 # -- ------------------ 4614 # -- intern.nimm__zeile( 'prt.protokoll', ARRAY[ ------------------ 4615 # -- 'id' ------------------ 4616 # -- , 'prt_typ_id' ------------------ 4617 # -- , 'notizen' ------------------ 4618 # -- ], ARRAY[...] ) ------------------ 4619 # -- ------------------ 4620 # -- ------------------ 4621 # -- -------------------------------------------------------------------------- 4622 # 4623 self.__dbAbfrage__( """ 4624 SELECT intern.nimm__zeile( 'prt.protokoll', ARRAY[ 'id', 'prt_typ_id', 'notizen' ], ARRAY[ """ 4625 # 4626 # -- id ------------------------------------------ 4627 # 4628 + "CAST( intern.gib__naechsteid( 'prt.protokoll' ) AS varchar )" 4629 # 4630 # -- prt_typ_id ------------------------------------------ 4631 # 4632 + ", '" + str( prtTypId ) + "'" 4633 # 4634 # -- notizen ------------------------------------------ 4635 # 4636 + ", '" + zk.gibZk( notizen ) + "']);" 4637 , Fortschritt = Fortschritt 4638 , info = "schreibe__PrtProtokoll() - 2" ) 4639 4640 4641 # 4642 # -- >prt.protokoll.id< zurückgeben ------------------------------------------ 4643 # 4644 return self.__gibWert__( 0, 0 )
4645 4646 4647 4648 4649 4650 # 4651 # ------------------------------------------------------------------------------------ 4652 # -- Wortgruppe übernehmen -------------------------------------------------- 4653 # -- -- 4654 # -- 1x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 4655 # -- -- 4656 # ------------------------------------------------------------------------------------ 4657 #
4658 - def schreibe__sprNimmWgruppe( self, Fortschritt, sprUebvarId, wortgruppe = zk.gibZk( "" ), sprSprachenId = 1 ):
4659 """ 4660 Methode zum Schreiben von Wortgruppen. 4661 4662 4663 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 4664 @type Fortschritt: Fortschritt 4665 4666 @param sprUebvarId : Es ist die Datenbankidentifikationsnummer (C{spr.uebvar.id}) der Übersetzungsvariante zu übergeben, der die aktuelle C{wortgruppe} als Übersetzung hinzugefügt werden soll. 4667 @type sprUebvarId : C{Ganzzahl} 4668 4669 @param wortgruppe: Es ist die Wortgruppe anzugeben. ACHTUNG, die Wortgruppe muß als Python-Datentyp C{str()} übergeben werden. 4670 @type wortgruppe: Zeichenkette 4671 4672 @param sprSprachenId: Es ist die Datenbankidentifikationsnummer (C{spr.sprachen.id}) der Sprache zu übergeben in der die C{wortgruppe} vorliegt. 4673 @type sprSprachenId: Ganzzahl 4674 4675 @return: Es wird die C{spr.uebvar.id} der eingelesenen Wortgruppe zurückgegeben. 4676 @rtype: Ganzzahl 4677 """ 4678 4679 # 4680 # -- in Protokolldatei schreiben ------------------------------------------ 4681 # 4682 self.ProtokolldateiEintragen( eintrag = "schreibe__sprNimmWgruppe()" 4683 , istKopfzeile = True ) 4684 4685 4686 4687 # 4688 # -- SQL-Abfrage ausführen -------------------------------------------------- 4689 # 4690 self.__dbAbfrage__( """ 4691 -- 4692 -- Wortgruppe übernehmen 4693 -- 4694 SELECT spr.nimm__wgruppe( '""" + zk.gibZk( wortgruppe ) + """' 4695 , '""" + str( sprSprachenId ) + """' 4696 , '""" + str( sprUebvarId ) + """' ) 4697 ;""" 4698 , Fortschritt = Fortschritt 4699 , info = "schreibe__sprNimmWgruppe()" ) 4700 4701 4702 # 4703 # -- >spr.uebvar.id< zurückgeben ------------------------------------------ 4704 # 4705 return self.__gibWert__( 0, 0 )
4706 4707 4708 4709 4710 4711 # 4712 # ------------------------------------------------------------------------------------ 4713 # ------------------------------------------------------------------------------------ 4714 # -- Übersetzungsvariante übernehmen ---------------------------------- 4715 # -- -- 4716 # -- 3x impliziter Aufruf von >Fortschritt.nimmFortschritt()< -- 4717 # -- -- 4718 # ------------------------------------------------------------------------------------ 4719 # ------------------------------------------------------------------------------------ 4720 #
4721 - def schreibe__sprUebvar( self, Fortschritt, ListBoxErg, sprUebvarId, istMehrfachVerw = True ):
4722 """ 4723 Methode zum Schreiben von Übersetzungsvarianten. 4724 4725 4726 @param Fortschritt: Es ist das Meldungsfenster zu übergeben, welches den Fortschritt der Datenbankabfragen anzeigt. 4727 @type Fortschritt: Fortschritt 4728 4729 @param ListBoxErg: Es ist die C{ListBoxErg} zu übergeben, die die zu schreibenden Übersetzungen enthält. 4730 @type ListBoxErg: ListBoxErg 4731 4732 @param sprUebvarId : Es ist die Datenbankidentifikationsnummer (C{spr.uebvar.id}) der Übersetzungsvariante zu übergeben. 4733 @type sprUebvarId : C{Ganzzahl} 4734 4735 @param istMehrfachVerw: Die Übersetzungsvariante (C{spr.uebvar.id}) wird mehrfach verwendet. 4736 @type istMehrfachVerw: Boolean 4737 4738 @return: Es wird die ggf. neu erzeugte spr.uebvar.id zurückgegeben. 4739 @rtype: Ganzzahl 4740 """ 4741 4742 # 4743 # -- in Protokolldatei schreiben ------------------------------------------ 4744 # 4745 self.ProtokolldateiEintragen( eintrag = "schreibe__sprUebvar()" 4746 , istKopfzeile = True ) 4747 4748 4749 4750 # 4751 # -- Wird >spr_uebvar_id< mehrfach verwendet ? -------------------------- 4752 # 4753 anzVerwendet = 0 4754 for tabelle in self.listeTabellenSprUebvarId : 4755 4756 self.__dbAbfrage__( """ 4757 -- 4758 -- Anzahl der Zeilen in der akt. Tabelle zählen, die >dbId< verwenden 4759 -- 4760 SELECT 4761 count( """ + tabelle[1] + """ ) 4762 FROM 4763 """ + tabelle[0] + """ 4764 WHERE 4765 idfrei = 0 4766 AND 4767 """ + tabelle[1] + """ = """ + str( sprUebvarId ) + """ 4768 ;""" 4769 , Fortschritt = Fortschritt 4770 , info = "schreibe__sprUebvar() - 1" ) 4771 4772 4773 anzVerwendet += self.__gibWert__( 0, 0 ) 4774 istMehrfachVerw = ( anzVerwendet > 1 ) 4775 4776 # 4777 # -- Verwendung in mindestens zwei Fällen -------------------------- 4778 # 4779 if( istMehrfachVerw ) : 4780 4781 break 4782 4783 4784 4785 4786 # 4787 # -- Hilfsübersetzung einfügen ------------------------------------------ 4788 # -- ---------- 4789 # -- Es wird zur >spr.uebvar.id == spr_uebvar_id__akt< in der ---------- 4790 # -- Sprache >spr.sprachen.id == 0 < (die nicht in der Projekt- ---------- 4791 # -- arbeit verwendet werden soll) eine Hilfsübersetzung ---------- 4792 # -- eingefügt ---------- 4793 # -- ---------- 4794 # -- ---------- 4795 # -- -------------------------------------------------------------------------- 4796 # 4797 spr_uebvar_id__akt = sprUebvarId 4798 4799 if( istMehrfachVerw ) : 4800 4801 spr_uebvar_id__akt = self.schreibe__sprNimmWgruppe( Fortschritt = Fortschritt 4802 , sprUebvarId = 0 4803 , wortgruppe = 'beliebige Zeichenkette' 4804 , sprSprachenId = 0 ) 4805 4806 else : 4807 4808 self.schreibe__sprNimmWgruppe( Fortschritt = Fortschritt 4809 , sprUebvarId = spr_uebvar_id__akt 4810 , wortgruppe = 'beliebige Zeichenkette' 4811 , sprSprachenId = 0 ) 4812 4813 4814 4815 # 4816 # -- Keine Mehrfachverwendung der Übersetzungsvariante ------------------ 4817 # -- ---------- 4818 # -- Die aktuellen Übersetzungen innerhalb der zu korrigierenden ---------- 4819 # -- Übersetzungsvariante löschen (somit läßt sich leicht mittels ---------- 4820 # -- >spr.nimm__wgruppe(...)< die Korrektur durchführen ---------- 4821 # -- ---------- 4822 # -- ---------- 4823 # -- -------------------------------------------------------------------------- 4824 # 4825 if( not istMehrfachVerw ) : 4826 4827 self.__dbAbfrage__( """ 4828 -- 4829 -- Alle Übersetzungen löschen 4830 -- 4831 SELECT intern.loesche__zeile( 'spr.uebersetzung' 4832 , 'spr.uebersetzung.spr_uebvar_id = """ + str( spr_uebvar_id__akt ) + """ 4833 AND spr_sprachen_id > 0' 4834 , 'true' );""" 4835 , Fortschritt = Fortschritt 4836 , info = "schreibe__sprUebvar() - 2" ) 4837 4838 4839 4840 # 4841 # -- Übersetzungsvarianten einlesen ------------------------------------------ 4842 # -- ---------- 4843 # -- ---------- 4844 # -- -------------------------------------------------------------------------- 4845 # 4846 for i in range( ListBoxErg.GetCount() ) : 4847 4848 self.schreibe__sprNimmWgruppe( Fortschritt = Fortschritt 4849 , sprUebvarId = spr_uebvar_id__akt 4850 , wortgruppe = ListBoxErg.gibWert( i ) 4851 , sprSprachenId = ListBoxErg.gibDbId( i ) ) 4852 4853 4854 4855 # 4856 # -- Hilfsübersetzung entfernen ------------------------------------------ 4857 # -- ---------- 4858 # -- ---------- 4859 # -- -------------------------------------------------------------------------- 4860 # 4861 self.__dbAbfrage__( """ 4862 -- 4863 -- Hilfsübersetzung löschen 4864 -- 4865 SELECT intern.loesche__zeile( 'spr.uebersetzung' 4866 , 'spr.uebersetzung.spr_uebvar_id = """ + str( spr_uebvar_id__akt ) + """ 4867 AND spr_sprachen_id = 0' 4868 , 'true' );""" 4869 , Fortschritt = Fortschritt 4870 , info = "schreibe__sprUebvar() - 3" ) 4871 4872 4873 4874 # 4875 # -- aktuelle >spr.uebvar.id< zurückgeben ---------------------------------- 4876 # 4877 return spr_uebvar_id__akt
4878 4879 4880 4881 4882 # 4883 # ------------------------------------------------------------------------------------ 4884 # ------------------------------------------------------------------------------------ 4885 # -- In der Datenbank verfügbare, projektbezogene Dokumente selektieren -- 4886 # ------------------------------------------------------------------------------------ 4887 # ------------------------------------------------------------------------------------ 4888 #
4889 - def selektiere__dokDoku__Sprache__Projekt( self, TreeCtrlErg_ListBoxErg, dokTypId = None, dokDokuId = None, istFlex = False ):
4890 """ 4891 Methode zur Darstellung der in der Datenbank verfügbaren projektbezogenen Dokumente. 4892 4893 @note: Die übergebene Liste (C{TreeCtrlErg_ListBoxErg}) wird verändert ! 4894 4895 @param TreeCtrlErg_ListBoxErg: Es ist die Auswahlliste zu übergeben, die die Dokumente aufnimmt. 4896 @type TreeCtrlErg_ListBoxErg: TreeCtrlErg oder ListBoxErg 4897 4898 @param dokTypId: Es ist die Datenbankidentifikationsnummer (C{dok.typ.id}) des Erstellers des aktuellen Dokumentes zu übergeben. 4899 @type dokTypId: list (Ganzzahl) 4900 4901 @param dokDokuId: Es ist die Datenbankidentifikationsnummer (C{dok.doku.id}) des Dokumentes zu übergeben. 4902 @type dokDokuId: list (Ganzzahl) 4903 4904 @param istFlex: C{True}: als permanente Datenstruktur wird C{..._Flex} verwendet. 4905 @type istFlex: Boolean 4906 """ 4907 4908 # 4909 # -- permanente Datenstruktur auswählen ---------------------------------- 4910 # 4911 permDatenstruktur = self.daten__dokDoku__Sprache__Projekt 4912 if( istFlex ) : 4913 4914 permDatenstruktur = self.daten__dokDoku__Sprache__Projekt_Flex 4915 4916 4917 # 4918 # -- es sind keine Dokumente darzustellen ---------------------------------- 4919 # 4920 if( len( permDatenstruktur ) == 0 ) : return 4921 4922 4923 4924 # 4925 # -- >TreeCtrlErg< oder >ListBoxErg< ---------------------------------- 4926 # 4927 istTreeCtrlErg = ( str( TreeCtrlErg_ListBoxErg ).find( "wxPyTreeCtrl" ) >= 0 ) 4928 if( TreeCtrlErg_ListBoxErg is None ) : istTreeCtrlErg = None 4929 4930 4931 4932 # 4933 # -- Hauptknoten übernehmen -------------------------------------------------- 4934 # -- (nur TreeCtrlErg) -------------------------------------------------- 4935 # 4936 if( istTreeCtrlErg ) : 4937 4938 TreeCtrlErg_ListBoxErg.nimmHauptknoten( wert = HK_DOK, bezHK = HK_DOK ) 4939 4940 4941 # 4942 # -- Dokumente übernehmen -------------------------------------------------- 4943 # 4944 for i in range( len( permDatenstruktur ) ): 4945 4946 # 4947 # -- nach Dokumenten-Id selektieren ---------------------------------- 4948 # 4949 dok_doku_id = permDatenstruktur[i][0] 4950 if( dokDokuId is not None 4951 and dok_doku_id not in dokDokuId ) : 4952 4953 continue 4954 4955 4956 4957 # 4958 # -- nach Typ des Dokumentes selektieren ------------------------------------------ 4959 # 4960 if( dokTypId is not None 4961 and self.daten__dokDoku__Sprache[dok_doku_id][0][1] not in dokTypId ) : 4962 4963 continue 4964 4965 4966 4967 # 4968 # -- Dokumentinformationen ------------------------------------------ 4969 # 4970 aspekt = ' B:' 4971 rev = '---' 4972 datum = '---' 4973 doknr = '---' 4974 if( self.daten__dokDoku__Sprache[dok_doku_id][0][2] == 'QUELLE' ) : aspekt = ' Q:' 4975 if( len( permDatenstruktur[i][3] ) > 0 ) : rev = permDatenstruktur[i][3] 4976 if( len( str( permDatenstruktur[i][4] ) ) > 0 ) : datum = zk.gibDatum( permDatenstruktur[i][4] ) 4977 if( len( permDatenstruktur[i][1] ) > 0 ) : doknr = permDatenstruktur[i][1] 4978 4979 dokinfo = ( permDatenstruktur[i][2] 4980 + '\t( Dok-Nr: ' + doknr 4981 + '\tDatum: ' + str( datum ) 4982 + '\tRev: ' + rev 4983 + ' )' ) 4984 4985 4986 # 4987 # -- Dokumente übernehmen ------------------------------------------ 4988 # 4989 if( istTreeCtrlErg ) : 4990 4991 TreeCtrlErg_ListBoxErg.nimmWert( wert = zk.gibIdWertNotizen( id = dok_doku_id 4992 , zusInfo = aspekt 4993 , wert = dokinfo ) 4994 , wertId = None 4995 , dbId = dok_doku_id ) 4996 4997 elif( not istTreeCtrlErg 4998 and istTreeCtrlErg is not None ) : 4999 5000 TreeCtrlErg_ListBoxErg.nimmWert( wert = zk.gibIdWertNotizen( id = dok_doku_id 5001 , zusInfo = aspekt 5002 , wert = dokinfo ) 5003 , dbId = dok_doku_id )
5004 5005 5006 5007 5008 5009 5010 # 5011 # ------------------------------------------------------------------------------------ 5012 # ------------------------------------------------------------------------------------ 5013 # -- In der Datenbank verfügbare Dokumenttypen selektieren ------------------ 5014 # ------------------------------------------------------------------------------------ 5015 # ------------------------------------------------------------------------------------ 5016 #
5017 - def selektiere__dokTyp( self, TreeCtrlErg_ComboBoxErg, hatAlle = True ):
5018 """ 5019 Methode zur Darstellung der in der Datenbank verfügbaren Dokumenttypen. 5020 5021 @note: Die übergebene Auswahlliste (C{TreeCtrlErg_ComboBoxErg}) wird verändert ! 5022 5023 @param TreeCtrlErg_ComboBoxErg: Es ist die Auswahlliste zu übergeben, die die Werte aufnimmt. 5024 @type TreeCtrlErg_ComboBoxErg: TreeCtrlErg oder ComboBoxErg 5025 5026 @param hatAlle: Es ist C{True} anzugeben, wenn der Eintrag C{-- Alle Dokumenttypen --} hinzugefügt werden soll. 5027 @type hatAlle: Booean 5028 """ 5029 5030 # 5031 # -- Eingabefelde zurücksetzen ------------------------------------------ 5032 # 5033 TreeCtrlErg_ComboBoxErg.loescheAlles() 5034 5035 5036 5037 # 5038 # -- es sind keine Strukturbezeichnungen darzustellen ------------------ 5039 # 5040 if( len( self.daten__dokTyp ) == 0 ) : return 5041 5042 5043 5044 # 5045 # -- >TreeCtrlErg< oder >ComboBoxErg< ---------------------------------- 5046 # 5047 istTreeCtrlErg = ( str( TreeCtrlErg_ComboBoxErg ).find( "wxPyTreeCtrl" ) >= 0 ) 5048 5049 5050 5051 # 5052 # -- Werte übernehmen -------------------------------------------------- 5053 # 5054 if( istTreeCtrlErg ) : 5055 5056 # 5057 # -- Hauptknoten -------------------------------------------------- 5058 # 5059 TreeCtrlErg_ComboBoxErg.nimmHauptknoten( wert = HK_DOKTYP, bezHK = HK_DOKTYP ) 5060 5061 5062 # 5063 # -- Werte übernehmen ------------------------------------------ 5064 # 5065 for i in range( len( self.daten__dokTyp ) ): 5066 5067 TreeCtrlErg_ComboBoxErg.nimmWert( 5068 wert = self.daten__dokTyp[i][0] 5069 , wertId = None 5070 , dbId = self.daten__dokTyp[i][1] ) 5071 5072 else : 5073 5074 # 5075 # -- Werte übernehmen -------------------------------------------------- 5076 # 5077 if( hatAlle ) : 5078 5079 TreeCtrlErg_ComboBoxErg.nimmWert( wert = "-- Alle Dokumenttypen --", dbId = 0 ) 5080 5081 for dokTyp in self.daten__dokTyp : 5082 5083 TreeCtrlErg_ComboBoxErg.nimmWert( wert = str( dokTyp[0] ), dbId = dokTyp[1] ) 5084 5085 5086 5087 # 5088 # -- ersten Eintrag selektieren ------------------------------------------ 5089 # 5090 TreeCtrlErg_ComboBoxErg.selektiereWert( dbId = 0 )
5091 5092 5093 5094 5095 5096 5097 5098 # 5099 # ------------------------------------------------------------------------------------ 5100 # ------------------------------------------------------------------------------------ 5101 # -- In der Datenbank verfügbare, projektbezogene Abkürzungen selektieren -- 5102 # ------------------------------------------------------------------------------------ 5103 # ------------------------------------------------------------------------------------ 5104 #
5105 - def selektiere__GefszenId_AbkId__Sprache__Projekt( self, ComboBoxErg_ListBoxErgSpWTitelAL, ListBoxErg, psAbkTyp ):
5106 """ 5107 Methode zur Darstellung der in der Datenbank verfügbaren projektbezogenen Abkürzungen. 5108 5109 @note: Die übergebene Liste (C{ComboBoxErg_ListBoxErgSpWTitelAL}) wird verändert ! 5110 5111 @param ComboBoxErg_ListBoxErgSpWTitelAL: Es ist die Auswahlliste zu übergeben, die die Abkürzungen aufnimmt. 5112 @type ComboBoxErg_ListBoxErgSpWTitelAL: ComboBoxErg oder ListBoxErgSpWTitelAL 5113 5114 @param ListBoxErg: Es ist das Texteingabefeld zu übergeben, das die Begründung aufnimmt 5115 @type ListBoxErg: ListBoxErg 5116 5117 @param psAbkTyp: Es ist der Typ C{ps.abk.typ} der Abkürzung anzugeben. 5118 @type psAbkTyp: Zeichenkette 5119 """ 5120 5121 # 5122 # -- >ComboBoxErg< oder >ListBoxErgSpWTitelAL< ---------------------------------- 5123 # 5124 istComboBoxErg = not ( str( ComboBoxErg_ListBoxErgSpWTitelAL ).find( "ListBoxErgSpWTitelAL" ) >= 0 ) 5125 if( ComboBoxErg_ListBoxErgSpWTitelAL is None ) : istComboBoxErg = None 5126 5127 5128 5129 # 5130 # -- Eingabefelder zurücksetzen ------------------------------------------ 5131 # 5132 if( istComboBoxErg ) : 5133 5134 ComboBoxErg_ListBoxErgSpWTitelAL.selektiereWert( 0 ) 5135 ListBoxErg.loescheAlles() 5136 5137 else : 5138 5139 ComboBoxErg_ListBoxErgSpWTitelAL.schiebeAlleRechts() 5140 5141 5142 5143 # 5144 # -- Abkürzungen ---------------------------------------------------------- 5145 # -- -------------------------------------------------- 5146 # -- 1. Gefährdete Personen -------------------------------------------------- 5147 # -- 2. Häufigkeit -------------------------------------------------- 5148 # -- 3. Gefahrenstufe -------------------------------------------------- 5149 # -- 4. Risikostufe -------------------------------------------------- 5150 # -- -------------------------------------------------- 5151 # 5152 daten__GefszenId_AbkId__Sprache__Projekt = None 5153 if( psAbkTyp == 'GP' ) : 5154 5155 daten__GefszenId_AbkId__Sprache__Projekt = self.daten__GefszenId_AbkId_gp__Sprache__Projekt 5156 5157 elif( psAbkTyp == 'RH' ) : 5158 5159 daten__GefszenId_AbkId__Sprache__Projekt = self.daten__GefszenId_AbkId_rh__Sprache__Projekt 5160 5161 elif( psAbkTyp == 'RG' ) : 5162 5163 daten__GefszenId_AbkId__Sprache__Projekt = self.daten__GefszenId_AbkId_rg__Sprache__Projekt 5164 5165 elif( psAbkTyp == 'RR' ) : 5166 5167 daten__GefszenId_AbkId__Sprache__Projekt = self.daten__GefszenId_AbkId_rr__Sprache__Projekt 5168 5169 5170 5171 # 5172 # -- es sind keine Abkürzungen darzustellen ---------------------------------- 5173 # 5174 if( len( daten__GefszenId_AbkId__Sprache__Projekt ) == 0 ) : return 5175 5176 5177 5178 # 5179 # -- Zur Gefahrenszenario-Id sind keine Werte zugeordnet ------------------ 5180 # 5181 if( self.ps_gefszenario_id not in daten__GefszenId_AbkId__Sprache__Projekt ) : 5182 5183 return 5184 5185 5186 5187 # 5188 # -- Abkürzungen übernehmen ---------------------------------- 5189 # 5190 if( istComboBoxErg ) : 5191 5192 ComboBoxErg_ListBoxErgSpWTitelAL.selektiereWert( 5193 dbId = daten__GefszenId_AbkId__Sprache__Projekt[self.ps_gefszenario_id][0][0] ) 5194 5195 ListBoxErg.nimmWert( wert = daten__GefszenId_AbkId__Sprache__Projekt[self.ps_gefszenario_id][0][1] 5196 , dbId = daten__GefszenId_AbkId__Sprache__Projekt[self.ps_gefszenario_id][0][3] ) 5197 5198 else : 5199 5200 for i in range( len( daten__GefszenId_AbkId__Sprache__Projekt[self.ps_gefszenario_id] ) ): 5201 5202 ComboBoxErg_ListBoxErgSpWTitelAL.schiebeLinks( daten__GefszenId_AbkId__Sprache__Projekt[self.ps_gefszenario_id][i][0] )
5203 5204 5205 5206 5207 5208 5209 # 5210 # ------------------------------------------------------------------------------------ 5211 # ------------------------------------------------------------------------------------ 5212 # -- In der Datenbank verfügbare, projektbezogene Anmerkungen selektieren -- 5213 # ------------------------------------------------------------------------------------ 5214 # ------------------------------------------------------------------------------------ 5215 #
5216 - def selektiere__GefszenId_AnmId__Sprache__Projekt( self, TreeCtrlErg_ListBoxErg, psAnmerkungId = None, istFlex = False ):
5217 """ 5218 Methode zur Darstellung der in der Datenbank verfügbaren Anmerkungen. 5219 5220 @note: Die übergebene Liste (C{TreeCtrlErg_ListBoxErg}) wird verändert ! 5221 5222 @param TreeCtrlErg_ListBoxErg: Es ist die Auswahlliste zu übergeben, die die Anmerkungen aufnimmt. 5223 @type TreeCtrlErg_ListBoxErg: TreeCtrlErg oder ListBoxErg 5224 5225 @param psAnmerkungId: Es ist Liste der Datenbankidentifikationsnummern (C{ps.anmerkung.id}) der Anmerkungen zu übergeben, die dargestellt werden sollen. Sie darf auch C{None} sein. 5226 @type psAnmerkungId: list (Ganzzahl) 5227 5228 @param istFlex: C{True}: als permanente Datenstruktur wird C{..._Flex} verwendet. 5229 @type istFlex: Boolean 5230 """ 5231 5232 # 5233 # -- >TreeCtrlErg< oder >ListBoxErg< ---------------------------------- 5234 # 5235 istTreeCtrlErg = ( str( TreeCtrlErg_ListBoxErg ).find( "wxPyTreeCtrl" ) >= 0 ) 5236 if( TreeCtrlErg_ListBoxErg is None ) : istTreeCtrlErg = None 5237 5238 5239 5240 # 5241 # -- nur die >ListBoxErg< löschen ! ------------------------------------------ 5242 # 5243 if( not istTreeCtrlErg ) : 5244 5245 TreeCtrlErg_ListBoxErg.loescheAlles() 5246 5247 5248 5249 # 5250 # -- permanente Datenstruktur auswählen ---------------------------------- 5251 # 5252 permDatenstruktur = self.daten__GefszenId_AnmId__Sprache__Projekt 5253 if( istFlex ) : 5254 5255 permDatenstruktur = self.daten__GefszenId_AnmId__Sprache__Projekt_Flex 5256 5257 5258 5259 # 5260 # -- es sind keine Anmerkungen darzustellen ---------------------------------- 5261 # 5262 if( len( permDatenstruktur ) == 0 ) : return 5263 5264 5265 5266 # 5267 # -- Zur Gefahrenszenario-Id sind keine Werte zugeordnet ------------------ 5268 # 5269 if( self.ps_gefszenario_id not in permDatenstruktur ) : 5270 5271 return 5272 5273 5274 5275 # 5276 # -- Hauptknoten übernehmen nur bei >TreeCtrlErg< -------------------------- 5277 # 5278 if( istTreeCtrlErg ) : 5279 5280 TreeCtrlErg_ListBoxErg.nimmHauptknoten( wert = HK_ANM, bezHK = HK_ANM ) 5281 5282 5283 5284 # 5285 # -- Anmerkungen übernehmen -------------------------------------------------- 5286 # 5287 for gefSzen in permDatenstruktur.values() : 5288 5289 for anm in gefSzen : 5290 5291 # 5292 # -- nach Anmerkungen selektieren -------------------------- 5293 # 5294 if( psAnmerkungId is not None 5295 and anm[0] not in psAnmerkungId ) : 5296 5297 continue 5298 5299 5300 # 5301 # -- keine doppelten Anmerkungen übernehmen -------------------------- 5302 # 5303 if( TreeCtrlErg_ListBoxErg.istDbIdVorhanden( dbId = anm[0] ) ) : 5304 5305 continue 5306 5307 5308 # 5309 # -- Anmerkung übernehmen ------------------------------------------ 5310 # 5311 wert = zk.gibIdWertNotizen( id = anm[0] 5312 , zusInfo = "" 5313 , wert = anm[2] ) 5314 5315 if( istTreeCtrlErg ) : 5316 5317 TreeCtrlErg_ListBoxErg.nimmWert( wert = wert 5318 , wertId = None 5319 , dbId = anm[0] 5320 , wertIdVorgaenger = '' ) 5321 5322 else : 5323 5324 TreeCtrlErg_ListBoxErg.nimmWert( wert = wert, dbId = anm[0] ) 5325 5326 5327 5328 # 5329 # -- Baum darstellen nur bei >TreeCtrlErg< ---------------------------------- 5330 # 5331 if( istTreeCtrlErg ) : 5332 5333 TreeCtrlErg_ListBoxErg.erzeugeBaum() 5334 TreeCtrlErg_ListBoxErg.markiereWert()
5335 5336 5337 5338 5339 5340 # 5341 # ------------------------------------------------------------------------------------ 5342 # ------------------------------------------------------------------------------------ 5343 # -- Wortgruppen setzen -------------------------------------------------- 5344 # ------------------------------------------------------------------------------------ 5345 # ------------------------------------------------------------------------------------ 5346 #
5347 - def selektiere__GefszenId_Wortgruppen__Sprache__Projekt( self, TreeCtrlErg_Gefszenario ):
5348 """ 5349 Methode zum Setzen des Gefahrenszenarios / Repräsentativen Gefahrenszenarios. 5350 5351 @note: Die übergebenen Auswahlliste (C{TreeCtrlErg_Gefszenario}) werden verändert ! 5352 5353 @param TreeCtrlErg_Gefszenario: Es ist die Auswahlliste zu übergeben, die das Gefahrenszenario aufnimmt. 5354 @type TreeCtrlErg_Gefszenario: ListBoxErg 5355 """ 5356 5357 # 5358 # -- Zur Gefahrenszenario-Id sind keine Werte zugeordnet ------------------ 5359 # 5360 if( self.ps_gefszenario_id not in self.daten__GefszenId_Wortgruppen__Sprache__Projekt ) : 5361 5362 return 5363 5364 5365 # 5366 # -- Gefahrenszenario -------------------------------------------------- 5367 # 5368 TreeCtrlErg_Gefszenario.nimmHauptknoten( wert = HK_GEFAHRENSZENARIO, bezHK = HK_GEFAHRENSZENARIO ) 5369 5370 TreeCtrlErg_Gefszenario.nimmWert( 5371 wert = self.daten__GefszenId_Wortgruppen__Sprache__Projekt[self.ps_gefszenario_id][0][1] 5372 , wertId = None 5373 # Notlösung 5374 , dbId = self.daten__GefszenId_Wortgruppen__Sprache__Projekt[self.ps_gefszenario_id][0][0] ) 5375 5376 5377 # 5378 # -- Repräsentatives Gefahrenszenario ---------------------------------- 5379 # 5380 TreeCtrlErg_Gefszenario.nimmHauptknoten( wert = HK_REPR_GEFSZENARIO, bezHK = HK_REPR_GEFSZENARIO ) 5381 5382 TreeCtrlErg_Gefszenario.nimmWert( 5383 wert = self.daten__GefszenId_Wortgruppen__Sprache__Projekt[self.ps_gefszenario_id][0][4] 5384 , wertId = None 5385 # Notlösung 5386 , dbId = self.daten__GefszenId_Wortgruppen__Sprache__Projekt[self.ps_gefszenario_id][0][3] )
5387 5388 5389 # 5390 # -- Baum muß extern erzeugt werden ------------------------------------------ 5391 # 5392 5393 5394 5395 5396 5397 5398 # 5399 # ------------------------------------------------------------------------------------ 5400 # ------------------------------------------------------------------------------------ 5401 # -- In der Datenbank verfügbare Personen selektieren ------------------ 5402 # ------------------------------------------------------------------------------------ 5403 # ------------------------------------------------------------------------------------ 5404 #
5405 - def selektiere__prjPersonen( self, ListBoxErg ) :
5406 """ 5407 Methode zur Darstellung der in der Datenbank verfügbaren Personen. 5408 5409 @note: Die übergebene Auswahlliste (C{ComboBoxErg}) wird verändert ! 5410 5411 @param ListBoxErg: Es ist die Auswahlliste zu übergeben, die die Werte aufnimmt. 5412 @type ListBoxErg: ListBoxErg 5413 """ 5414 5415 # 5416 # -- Eingabefeld zurücksetzen ------------------------------------------ 5417 # 5418 ListBoxErg.loescheAlles() 5419 5420 5421 5422 # 5423 # -- es sind keine Personen darzustellen ------------------ 5424 # 5425 if( len( self.daten__prjPersonen ) == 0 ) : return 5426 5427 5428 5429 # 5430 # -- Werte übernehmen -------------------------------------------------- 5431 # 5432 for pers in self.daten__prjPersonen : 5433 5434 ListBoxErg.nimmWert( wert = str( pers[0] ), dbId = pers[1] )
5435 5436 5437 5438 5439 # 5440 # ------------------------------------------------------------------------------------ 5441 # ------------------------------------------------------------------------------------ 5442 # -- In der Datenbank verfügbare Projekte selektieren ------------------ 5443 # ------------------------------------------------------------------------------------ 5444 # ------------------------------------------------------------------------------------ 5445 #
5446 - def selektiere__prjProjekte( self, ComboBoxErg ) :
5447 """ 5448 Methode zur Darstellung der in der Datenbank verfügbaren Projekte. 5449 5450 @note: Die übergebene Auswahlliste (C{ComboBoxErg}) wird verändert ! 5451 5452 @param ComboBoxErg: Es ist die Auswahlliste zu übergeben, die die Werte aufnimmt. 5453 @type ComboBoxErg: ComboBoxErg 5454 """ 5455 5456 # 5457 # -- Eingabefeld zurücksetzen ------------------------------------------ 5458 # 5459 ComboBoxErg.loescheAlles() 5460 5461 5462 5463 # 5464 # -- es sind keine Projekte darzustellen ------------------ 5465 # 5466 if( len( self.daten__prjProjekte ) == 0 ) : return 5467 5468 5469 5470 # 5471 # -- Werte übernehmen -------------------------------------------------- 5472 # 5473 for prj in self.daten__prjProjekte : 5474 5475 ComboBoxErg.nimmWert( wert = str( prj[0] ), dbId = prj[1] )
5476 5477 5478 5479 5480 # 5481 # ------------------------------------------------------------------------------------ 5482 # ------------------------------------------------------------------------------------ 5483 # -- In der Datenbank verfügbare Abkürzungen selektieren ------------------ 5484 # ------------------------------------------------------------------------------------ 5485 # ------------------------------------------------------------------------------------ 5486 #
5487 - def selektiere__psAbk__Sprache__Projekt( self, ComboBoxErg_ListBoxErgSpWTitelAL, psAbkTyp ) :
5488 """ 5489 Methode zur Darstellung der in der Datenbank verfügbaren Abkürzungen. 5490 5491 @note: Die übergebene Auswahlliste (C{ComboBoxErg_ListBoxErgSpWTitelAL}) wird verändert ! 5492 5493 @param ComboBoxErg_ListBoxErgSpWTitelAL: Es ist die Auswahlliste zu übergeben, die die Werte aufnimmt. 5494 @type ComboBoxErg_ListBoxErgSpWTitelAL: ComboBoxErg / ListBoxErgSpWTitelAL 5495 5496 @param psAbkTyp: Es ist der Typ C{ps.abk.typ} der Abkürzung anzugeben. 5497 @type psAbkTyp: Zeichenkette 5498 """ 5499 5500 # 5501 # -- >ComboBoxErg< oder >ListBoxErgSpWTitelAL< ---------------------------------- 5502 # 5503 istComboBoxErg = not ( str( ComboBoxErg_ListBoxErgSpWTitelAL ).find( "ListBoxErgSpWTitelAL" ) >= 0 ) 5504 5505 5506 5507 # 5508 # -- Eingabefeld zurücksetzen ------------------------------------------ 5509 # 5510 if( istComboBoxErg ) : 5511 5512 ComboBoxErg_ListBoxErgSpWTitelAL.loescheAlles() 5513 5514 else : 5515 5516 ComboBoxErg_ListBoxErgSpWTitelAL.ListBox__li.loescheAlles() 5517 ComboBoxErg_ListBoxErgSpWTitelAL.ListBox__re.loescheAlles() 5518 5519 5520 5521 # 5522 # -- es sind keine Abkürzungen darzustellen ---------------------------------- 5523 # 5524 if( len( self.daten__psAbk__Sprache__Projekt ) == 0 ) : return 5525 5526 5527 5528 # 5529 # -- Dem gewählten Typ sind keine Werte zugeordnet -------------------------- 5530 # 5531 if( psAbkTyp not in self.daten__psAbk__Sprache__Projekt ) : 5532 5533 return 5534 5535 5536 5537 # 5538 # -- Abkürzungen übernehmen ---------------------------------- 5539 # 5540 for i in range( len( self.daten__psAbk__Sprache__Projekt[psAbkTyp] ) ): 5541 5542 if( istComboBoxErg ) : 5543 5544 ComboBoxErg_ListBoxErgSpWTitelAL.nimmWert( wert = self.daten__psAbk__Sprache__Projekt[psAbkTyp][i][0] 5545 , dbId = self.daten__psAbk__Sprache__Projekt[psAbkTyp][i][1] ) 5546 else : 5547 5548 ComboBoxErg_ListBoxErgSpWTitelAL.ListBox__re.nimmWert( 5549 wert = self.daten__psAbk__Sprache__Projekt[psAbkTyp][i][0] 5550 , dbId = self.daten__psAbk__Sprache__Projekt[psAbkTyp][i][1] )
5551 5552 5553 5554 5555 5556 5557 # 5558 # ------------------------------------------------------------------------------------ 5559 # ------------------------------------------------------------------------------------ 5560 # -- wxListBox der Tabelle 'ps.gefszenario' initialisieren ------------------ 5561 # ------------------------------------------------------------------------------------ 5562 # ------------------------------------------------------------------------------------ 5563 #
5564 - def selektiere__psGefszenario( self, ListBoxErg ):
5565 """ 5566 Methode zur Initialisierung der Auswahlliste (C{ListBoxErg}), die die Gefahrenszenario-Id gültig im aktuell übergebenen Projekt aufnimmt (darstellt). 5567 5568 ACHTUNG, die Datenbankabfrage erfolgt bei jedem Aufruf der Methode ! Die permanenten Datenstrukturen werden nicht verwendet. 5569 5570 @note: Die übergebene Auswahlliste (C{ListBoxErg}) wird verändert ! 5571 5572 @param ListBoxErg: Es ist die Auswahlliste zu übergeben, die die Gefahrenszenario-Id aufnimmt. 5573 @type ListBoxErg: wxPython - ListBox 5574 """ 5575 5576 # 5577 # -- >ListBoxErg< leeren -------------------------------------------------- 5578 # 5579 ListBoxErg.Clear() 5580 5581 5582 # 5583 # -- Werte übernehmen -------------------------------------------------- 5584 # 5585 gueltigeId = self.__gibFilterZusKrit__PsGefszenarioId__() 5586 5587 for gefszen in self.daten__GefszenId__Projekt : 5588 5589 if( gueltigeId is not None 5590 and gefszen[0] not in gueltigeId ) : 5591 5592 continue 5593 5594 ListBoxErg.nimmWert( wert = zk.gibIdWertNotizen( id = gefszen[0], zusInfo = "" ) 5595 , dbId = gefszen[0] ) 5596 5597 5598 5599 # 5600 # -- erste Gefahrenszenario-Id auswählen und übernehmen ------------------ 5601 # 5602 ListBoxErg.SetSelection( 0 ) 5603 self.ps_gefszenario_id = ListBoxErg.gibDbId()
5604 5605 5606 5607 5608 5609 5610 # 5611 # ------------------------------------------------------------------------------------ 5612 # ------------------------------------------------------------------------------------ 5613 # -- Personen auswählen -------------------------------------------------- 5614 # ------------------------------------------------------------------------------------ 5615 # ------------------------------------------------------------------------------------ 5616 #
5617 - def selektiere__ProtId_PersId__Projekt( self, ListBoxErgSpWTitelAL, prtProtokollId, istAufgabe = True ):
5618 """ 5619 Methode zur Auswahl der Teilnehmer oder Personen, denen eine Aufgabe gestellt wurde. 5620 5621 @note: Die übergebene Liste (C{ListBoxErgSpWTitelAL}) wird verändert ! 5622 5623 @param ListBoxErgSpWTitelAL: Es ist die Listbox mit Auswahlliste zu übergeben, die die Personen aufnimmt. 5624 @type ListBoxErgSpWTitelAL: TreeCtrlErg 5625 5626 @param prtProtokollId: Es ist die Datenbankidentifikationsnummer (C{prt.protokoll.id}) des Protokolleintrages zu übergeben. 5627 @type prtProtokollId: list (Ganzzahl) 5628 5629 @param istAufgabe: Wird C{True} angegeben, wird an die Person(en) eine Frage/Aufgabe gestellt; andernfalls sind die Personen Teilnehmer beim Erzeugen des Protokolleintrages. 5630 @type istAufgabe: Boolean 5631 """ 5632 5633 5634 # 5635 # -- Alle Personen zurücksetzen ------------------------------------------ 5636 # 5637 ListBoxErgSpWTitelAL.schiebeAlleRechts() 5638 5639 5640 5641 # 5642 # -- Personen mit Aufgaben oder Teilnehmer ? -------------------------- 5643 # 5644 daten__ProtId_PersId = None 5645 5646 if( istAufgabe ) : 5647 5648 daten__ProtId_PersId = self.daten__ProtId_PersId_aufgabe__Projekt 5649 5650 else : 5651 5652 daten__ProtId_PersId = self.daten__ProtId_PersId_teilnehmer__Projekt 5653 5654 5655 # 5656 # -- Zur Protokoll-Id ist keine Person zugeordnet -------------------------- 5657 # 5658 if( prtProtokollId not in daten__ProtId_PersId ) : 5659 5660 return 5661 5662 5663 5664 # 5665 # -- Personen auswählen -------------------------------------------------- 5666 # 5667 for i in range( len( daten__ProtId_PersId[prtProtokollId] ) ): 5668 5669 ListBoxErgSpWTitelAL.schiebeLinks( daten__ProtId_PersId[prtProtokollId][i][0] )
5670 5671 5672 5673 5674 # 5675 # ------------------------------------------------------------------------------------ 5676 # ------------------------------------------------------------------------------------ 5677 # -- In der Datenbank verfügbare, projektbezogene ------------------ 5678 # -- Sicherheitsanforderungen / Gefahrenprotokolleinträge ------------------ 5679 # ------------------------------------------------------------------------------------ 5680 # ------------------------------------------------------------------------------------ 5681 #
5682 - def selektiere__prtProtokoll__Sprache__Projekt( self, TreeCtrlErg, istGefProt = True, prtTypId = None, prtProtokollId = None, istFlex = False ):
5683 """ 5684 Methode zur Darstellung der in der Datenbank verfügbaren projektbezogenen Sicherheitsanforderungen / Gefahrenprotokolleinträge. 5685 5686 @note: Die übergebene Liste (C{TreeCtrlErg}) wird verändert ! 5687 5688 @param TreeCtrlErg: Es ist die Baumstruktur zu übergeben, die die Protokolleinträge aufnimmt. 5689 @type TreeCtrlErg: TreeCtrlErg 5690 5691 @param istGefProt: Wird C{True} angegeben, liegen Gefahrenprotokolleinträge vor; andernfalls Sicherheitsanforderungen. 5692 @type istGefProt: Boolean 5693 5694 @param prtTypId: Es ist die Datenbankidentifikationsnummer (C{prt.typ.id}) des Typs des aktuellen Protokolleintrages zu übergeben. 5695 @type prtTypId: list (Ganzzahl) 5696 5697 @param prtProtokollId: Es ist die Datenbankidentifikationsnummer (C{prt.protokoll.id}) des Protokolleintrages zu übergeben. 5698 @type prtProtokollId: list (Ganzzahl) 5699 5700 @param istFlex: C{True}: als permanente Datenstruktur wird C{..._Flex} verwendet. 5701 @type istFlex: Boolean 5702 """ 5703 5704 # 5705 # -- permanente Datenstruktur auswählen ---------------------------------- 5706 # -- Gefahrenprotokolleinträge oder Sicherheitsanforderungen ? ---------- 5707 # 5708 daten__prtProtokoll = None 5709 5710 if( istGefProt ) : 5711 5712 daten__prtProtokoll = self.daten__prtProtokoll_gefProt__Sprache__Projekt 5713 daten__prtProtokoll_vorg = self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt 5714 5715 if( istFlex ) : 5716 5717 daten__prtProtokoll = self.daten__prtProtokoll_gefProt__Sprache__Projekt_Flex 5718 daten__prtProtokoll_vorg = self.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt_Flex 5719 5720 else : 5721 5722 daten__prtProtokoll = self.daten__prtProtokoll_siAnf__Sprache__Projekt 5723 daten__prtProtokoll_vorg = self.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt 5724 5725 if( istFlex ) : 5726 5727 daten__prtProtokoll = self.daten__prtProtokoll_siAnf__Sprache__Projekt_Flex 5728 daten__prtProtokoll_vorg = self.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt_Flex 5729 5730 5731 5732 5733 # 5734 # -- es sind keine Protokolleinträge darzustellen -------------------------- 5735 # 5736 if( len( daten__prtProtokoll ) == 0 ) : return 5737 5738 5739 5740 # 5741 # -- Hauptknoten übernehmen -------------------------------------------------- 5742 # 5743 if( istGefProt ) : 5744 5745 TreeCtrlErg.nimmHauptknoten( wert = HK_PE, bezHK = HK_PE ) 5746 5747 else : 5748 5749 TreeCtrlErg.nimmHauptknoten( wert = HK_SIANF, bezHK = HK_SIANF ) 5750 5751 5752 5753 # 5754 # -- Protokolleinträge übernehmen ------------------------------------------ 5755 # -- 5756 # -- [0] prt.protokoll.id -- 5757 # -- [1] Protokolleintrag (Zeichenkette) -- 5758 # -- [2] prj.pp_prtprotokoll.notizen -- 5759 # -- [3] prt.typ.id -- 5760 # -- [4] prj.pp_prtprotokoll.spr_uebvar_id -- 5761 # -- 5762 for i in daten__prtProtokoll.iteritems() : 5763 5764 # 5765 # -- nach >prt.typ.aspekt< selektieren -- 5766 # -- (Gefahrenprotokolleinträge und Sicherheitsanforderungen -- 5767 # -- unterscheiden) -- 5768 # 5769 if( istGefProt and i[1][0][2] not in self.konstante__prt_typ_id__gefProt ) : 5770 5771 continue 5772 5773 if( ( not istGefProt ) and i[1][0][2] not in self.konstante__prt_typ_id__siAnf ) : 5774 5775 continue 5776 5777 5778 # 5779 # -- nach Typ des Protokolleintrages selektieren ------------------ 5780 # 5781 if( prtTypId is not None and i[1][0][2] not in prtTypId ) : 5782 5783 continue 5784 5785 5786 # 5787 # -- nach Protokoll-Id selektieren ---------------------------------- 5788 # 5789 if( prtProtokollId is not None and [i[0]] not in prtProtokollId ) : 5790 5791 continue 5792 5793 5794 # 5795 # -- nur für Sicherheitsanforderung ---------------------------------- 5796 # -- 5797 zusInfo = "" 5798 if( not istGefProt ) : 5799 5800 zusInfo = " [O]" 5801 5802 if( self.ist__prtTypId( typ = 'T', id = i[1][0][2] ) ) : 5803 5804 zusInfo = " [T]" 5805 5806 elif( self.ist__prtTypId( typ = 'D', id = i[1][0][2] ) ) : 5807 5808 zusInfo = " [D]" 5809 5810 elif( self.ist__prtTypId( typ = 'P', id = i[1][0][2] ) ) : 5811 5812 zusInfo = " [P]" 5813 5814 5815 5816 5817 5818 # 5819 # -- Protokolleinträge übernehmen -------------------------- 5820 # -- (Liste der Vorgänger durchlaufen) -------------------------- 5821 # 5822 wertIdVorgaenger = None 5823 if( i[0] in daten__prtProtokoll_vorg ): 5824 5825 wertIdVorgaenger = daten__prtProtokoll_vorg[i[0]][0][0] 5826 5827 5828 5829 listeIdVorgaenger = [] 5830 if( i[0] in daten__prtProtokoll_vorg ): 5831 5832 for idVorgaenger in daten__prtProtokoll_vorg[i[0]] : 5833 5834 if( prtProtokollId is not None and [idVorgaenger[0]] not in prtProtokollId ) : 5835 5836 continue 5837 5838 listeIdVorgaenger.append( idVorgaenger[0] ) 5839 5840 5841 if( len( listeIdVorgaenger ) == 0 ) : 5842 5843 listeIdVorgaenger.append( None ) 5844 5845 5846 for wertIdVorgaenger in listeIdVorgaenger : 5847 5848 TreeCtrlErg.nimmWert( zk.gibIdWertNotizen( id = i[0] 5849 , zusInfo = zusInfo 5850 , wert = i[1][0][0] ) 5851 , wertId = None 5852 , dbId = i[0] 5853 , wertIdVorgaenger = wertIdVorgaenger )
5854 5855 5856 5857 5858 # 5859 # ------------------------------------------------------------------------------------ 5860 # ------------------------------------------------------------------------------------ 5861 # -- In der Datenbank verfügbare Strukturbezeichnungen selektieren ---------- 5862 # ------------------------------------------------------------------------------------ 5863 # ------------------------------------------------------------------------------------ 5864 #
5865 - def selektiere__prtTyp__Sprache( self, TreeCtrlErg_ComboBoxErg, prtTypAspekt, hatAlle = False ):
5866 """ 5867 Methode zur Darstellung der in der Datenbank verfügbaren Typen der Protokolleinträge / Sicherheitsanforderungen / Terminplaneinträge. 5868 5869 @note: Die übergebene Auswahlliste (C{TreeCtrlErg_ComboBoxErg}) wird verändert ! 5870 5871 @param TreeCtrlErg_ComboBoxErg: Es ist die Auswahlliste zu übergeben, die die Werte aufnimmt. 5872 @type TreeCtrlErg_ComboBoxErg: TreeCtrlErg oder ComboBoxErg 5873 5874 @param prtTypAspekt: Es ist der Aspekt (Protokolleintrag, Sicherheitsanforderung) anzugeben. Er darf C{None} sein. 5875 @type prtTypAspekt: Zeichenkette 5876 5877 @param hatAlle: Es ist C{True} anzugeben, wenn der Eintrag C{-- Alle Typen --} hinzugefügt werden soll 5878 @type hatAlle: Booean 5879 """ 5880 5881 # 5882 # -- Eingabefelde zurücksetzen ------------------------------------------ 5883 # 5884 TreeCtrlErg_ComboBoxErg.loescheAlles() 5885 5886 5887 5888 # 5889 # -- es sind keine Typen darzustellen ---------------------------------- 5890 # 5891 if( len( self.daten__prtTyp__Sprache ) == 0 ) : return 5892 5893 5894 5895 # 5896 # -- >TreeCtrlErg< oder >ComboBoxErg< ---------------------------------- 5897 # 5898 istTreeCtrlErg = ( str( TreeCtrlErg_ComboBoxErg ).find( "wxPyTreeCtrl" ) >= 0 ) 5899 5900 5901 5902 # 5903 # -- Hauptknoten ---------------------------------------------------------- 5904 # 5905 if( istTreeCtrlErg ) : 5906 5907 if( prtTypAspekt == "PE" ) : 5908 5909 TreeCtrlErg_ComboBoxErg.nimmHauptknoten( wert = HK_PETYP, bezHK = HK_PETYP ) 5910 5911 else : 5912 5913 TreeCtrlErg_ComboBoxErg.nimmHauptknoten( wert = HK_SIANFTYP, bezHK = HK_SIANFTYP ) 5914 5915 5916 # 5917 # -- Nulleintrag ---------------------------------------------------------- 5918 # 5919 elif( hatAlle ) : 5920 5921 TreeCtrlErg_ComboBoxErg.nimmWert( wert = "-- Alle Typen --", dbId = 0 ) 5922 5923 5924 5925 # 5926 # -- Werte übernehmen -------------------------------------------------- 5927 # 5928 for prtTyp in self.daten__prtTyp__Sprache : 5929 5930 # 5931 # -- Aspekt berücksichtigen ------------------------------------------ 5932 # 5933 if( prtTyp[2] != prtTypAspekt ) : 5934 5935 continue 5936 5937 5938 # 5939 # -- TreeCtrlErg -------------------------------------------------- 5940 # 5941 if( istTreeCtrlErg ) : 5942 5943 TreeCtrlErg_ComboBoxErg.nimmWert( wert = prtTyp[0] 5944 , wertId = None 5945 , dbId = prtTyp[1] ) 5946 5947 5948 5949 # 5950 # -- ComboBoxErg o.ä. ------------------------------------------ 5951 # 5952 else : 5953 5954 TreeCtrlErg_ComboBoxErg.nimmWert( wert = str( prtTyp[0] ), dbId = prtTyp[1] ) 5955 5956 5957 5958 # 5959 # -- ersten Eintrag selektieren ------------------------------------------ 5960 # 5961 if( not istTreeCtrlErg ) : 5962 5963 TreeCtrlErg_ComboBoxErg.selektiereWert( dbId = 0 )
5964 5965 5966 5967 5968 5969 5970 # 5971 # ------------------------------------------------------------------------------------ 5972 # ------------------------------------------------------------------------------------ 5973 # -- In der Datenbank verfügbare Sprachen selektieren ------------------ 5974 # ------------------------------------------------------------------------------------ 5975 # ------------------------------------------------------------------------------------ 5976 #
5977 - def selektiere__sprSprachen( self, ComboBoxErg ) :
5978 """ 5979 Methode zur Darstellung der in der Datenbank verfügbaren Sprachen. 5980 5981 @note: Die übergebene Auswahlliste (C{ComboBoxErg}) wird verändert ! 5982 5983 @param ComboBoxErg: Es ist die Auswahlliste zu übergeben, die die Werte aufnimmt. 5984 @type ComboBoxErg: ComboBoxErg 5985 """ 5986 5987 # 5988 # -- Eingabefeld zurücksetzen ------------------------------------------ 5989 # 5990 ComboBoxErg.loescheAlles() 5991 5992 5993 5994 # 5995 # -- es sind keine Sprachen darzustellen ------------------ 5996 # 5997 if( len( self.daten__sprSprachen ) == 0 ) : return 5998 5999 6000 6001 # 6002 # -- Werte übernehmen -------------------------------------------------- 6003 # 6004 for spr in self.daten__sprSprachen : 6005 6006 ComboBoxErg.nimmWert( wert = str( spr[0] ), dbId = spr[1] )
6007 6008 6009 6010 6011 6012 # 6013 # ------------------------------------------------------------------------------------ 6014 # ------------------------------------------------------------------------------------ 6015 # -- In der Datenbank verfügbare Strukturbezeichnungen selektieren ---------- 6016 # ------------------------------------------------------------------------------------ 6017 # ------------------------------------------------------------------------------------ 6018 #
6019 - def selektiere__strName( self, TreeCtrlErg_ComboBoxErg ) :
6020 """ 6021 Methode zur Darstellung der in der Datenbank verfügbaren Strukturbezeichnungen. 6022 6023 @note: Die übergebene Auswahlliste (C{TreeCtrlErg_ComboBoxErg}) wird verändert ! 6024 6025 @param TreeCtrlErg_ComboBoxErg: Es ist die Auswahlliste zu übergeben, die die Werte aufnimmt. 6026 @type TreeCtrlErg_ComboBoxErg: TreeCtrlErg oder ComboBoxErg 6027 """ 6028 6029 # 6030 # -- Eingabefelder zurücksetzen ------------------------------------------ 6031 # 6032 TreeCtrlErg_ComboBoxErg.loescheAlles() 6033 6034 6035 6036 # 6037 # -- es sind keine Strukturbezeichnungen darzustellen ------------------ 6038 # 6039 if( len( self.daten__strName ) == 0 ) : return 6040 6041 6042 6043 # 6044 # -- >TreeCtrlErg< oder >ComboBoxErg< ---------------------------------- 6045 # 6046 istTreeCtrlErg = ( str( TreeCtrlErg_ComboBoxErg ).find( "wxPyTreeCtrl" ) >= 0 ) 6047 6048 6049 6050 # 6051 # -- Werte übernehmen -------------------------------------------------- 6052 # 6053 if( istTreeCtrlErg ) : 6054 6055 # 6056 # -- Hauptknoten -------------------------------------------------- 6057 # 6058 TreeCtrlErg_ComboBoxErg.nimmHauptknoten( wert = HK_STRBEZ, bezHK = HK_STRBEZ ) 6059 6060 6061 # 6062 # -- Werte übernehmen ------------------------------------------ 6063 # 6064 for i in range( len( self.daten__strName ) ): 6065 6066 TreeCtrlErg_ComboBoxErg.nimmWert( 6067 wert = self.daten__strName[i][0] 6068 , wertId = None 6069 , dbId = self.daten__strName[i][1] ) 6070 6071 else : 6072 6073 TreeCtrlErg_ComboBoxErg.nimmWert( wert = "-- Alle Strukturen --", dbId = 0 ) 6074 6075 for strkt in self.daten__strName : 6076 6077 TreeCtrlErg_ComboBoxErg.nimmWert( wert = str( strkt[0] ), dbId = strkt[1] ) 6078 6079 TreeCtrlErg_ComboBoxErg.selektiereWert( dbId = 0 )
6080 6081 6082 6083 6084 # 6085 # ------------------------------------------------------------------------------------ 6086 # ------------------------------------------------------------------------------------ 6087 # -- Strukturpunkte selektieren ---------------------------------- 6088 # ------------------------------------------------------------------------------------ 6089 # ------------------------------------------------------------------------------------ 6090 #
6091 - def selektiere__strStrkt__Sprache__Projekt( self, TreeCtrlErg, strNameId = None, strStrktId = None, istFlex = False ) :
6092 """ 6093 Methode zur Darstellung der Strukturpunkte. ACHTUNG, Das Gefahrennetz wird nicht dargestellt ! 6094 6095 @note: Die übergebene Baumstruktur (C{TreeCtrlErg}) wird verändert ! 6096 6097 @param TreeCtrlErg: Es ist die Baumstruktur zu übergeben, die die Strukturpunkte aufnimmt. 6098 @type TreeCtrlErg: TreeCtrlErg 6099 6100 @param strNameId: Es ist die Datenbankidentifikationsnummer (C{str.name.id}) der Strukturbezeichnung zu übergeben, die dargestellt werden soll. Sie darf auch C{None} sein. 6101 @type strNameId: list (Ganzzahl) 6102 6103 @param strStrktId : Es sind die Struktur-Id C{str.strkt.id} zu übergeben. Darf auch C{None} sein. 6104 @type strStrktId : C{list (Ganzzahl)} 6105 6106 @param istFlex: C{True}: als permanente Datenstruktur wird C{..._Flex} verwendet. 6107 @type istFlex: Boolean 6108 """ 6109 6110 # 6111 # -- permanente Datenstruktur auswählen ---------------------------------- 6112 # 6113 permDatenstruktur = self.daten__strStrkt__Sprache__Projekt 6114 if( istFlex ) : 6115 6116 permDatenstruktur = self.daten__strStrkt__Sprache__Projekt_Flex 6117 6118 6119 6120 # 6121 # -- es sind keine Strukturpunkte darzustellen -------------------------- 6122 # 6123 if( len( permDatenstruktur ) == 0 ) : return 6124 6125 6126 6127 # 6128 # -- Strukturpunkte übernehmen ------------------------------------------ 6129 # -- ---------- 6130 # -- [0] strpkt ---------- 6131 # -- [1] str.strkt.id ---------- 6132 # -- [2] nachfok.str.strkt.id AS str_strkt_id__vorg ---------- 6133 # -- [3] str.name.name_k ---------- 6134 # -- [4] prj.pp_strstrkt.spr_uebvar_id ---------- 6135 # -- [5] str.name.id ---------- 6136 # 6137 nameHauptKnoten = '' 6138 for i in range( len( permDatenstruktur ) ): 6139 6140 # 6141 # -- Gefahrennetz ignorieren ---------------------------------- 6142 # 6143 if( permDatenstruktur[i][5] == self.konstante__str_name_id__gefahrennetz ) : 6144 6145 continue 6146 6147 6148 6149 # 6150 # -- nach Strukturnamen selektieren ---------------------------------- 6151 # 6152 if( strNameId is not None 6153 and permDatenstruktur[i][5] not in strNameId ) : 6154 6155 continue 6156 6157 6158 6159 # 6160 # -- nach Strukturpunkten selektieren -------------------------- 6161 # 6162 if( strStrktId is not None 6163 and permDatenstruktur[i][1] not in strStrktId ) : 6164 6165 continue 6166 6167 6168 6169 # 6170 # -- Neuen Hauptknoten übernehmen ---------------------------------- 6171 # 6172 if( nameHauptKnoten != permDatenstruktur[i][3] ) : 6173 6174 nameHauptKnoten = permDatenstruktur[i][3] 6175 6176 TreeCtrlErg.nimmHauptknoten( wert = nameHauptKnoten, bezHK = HK_STR ) 6177 6178 6179 # 6180 # -- Strukturpunkt übernehmen ---------------------------------- 6181 # 6182 TreeCtrlErg.nimmWert( wert = permDatenstruktur[i][0] 6183 , wertId = None 6184 , dbId = permDatenstruktur[i][1] 6185 , wertIdVorgaenger = permDatenstruktur[i][2] )
6186 6187 6188 6189 6190 # 6191 # ------------------------------------------------------------------------------------ 6192 # ------------------------------------------------------------------------------------ 6193 # -- PostgreSQL-Safepoint setzen ------------------------------------------ 6194 # ------------------------------------------------------------------------------------ 6195 # ------------------------------------------------------------------------------------ 6196 #
6197 - def setzeSafepoint( self, name ):
6198 """ 6199 Methode zum setzen eines C{PostgreSQL - Safepoints}. Mittels C{Safepoint} können Teile einer Transaktion gespeichert oder verworfen werden. 6200 6201 @param name: Es ist der Name des C{Safepoints} anzugeben. Anhand des Namens können die Datenbankoperationen, welche nach dem Setzen des C{Safepoints} durchgeführt wurden übernommen oder verworfen werden. 6202 @type name: Zeichenkette 6203 """ 6204 6205 # 6206 # -- in Protokolldatei schreiben ------------------------------------------ 6207 # 6208 self.ProtokolldateiEintragen( eintrag = "setzeSafepoint()" 6209 , istKopfzeile = True ) 6210 6211 6212 6213 # 6214 # -- vorsichtshalber einen neuen Cursor anlegen -------------------------- 6215 # 6216 self.__dbCursor__ = self.__dbVerbindung__.cursor() 6217 6218 # 6219 # -- SAFEPOINT setzen -------------------------------------------------- 6220 # 6221 self.__dbAbfrage__( 'SAVEPOINT ' + name + ';' 6222 , Fortschritt = None 6223 , info = "" ) 6224 6225 # 6226 # -- vorsichtshalber einen neuen Cursor anlegen -------------------------- 6227 # 6228 self.__dbCursor__ = self.__dbVerbindung__.cursor()
6229 6230 6231 # 6232 # ------------------------------------------------------------------------------------ 6233 # ------------------------------------------------------------------------------------ 6234 # -- Änderungen verwerfen (aktuelle Transaktion schließen, ------------------ 6235 # -- neue Transaktion starten) ------------------ 6236 # ------------------------------------------------------------------------------------ 6237 # ------------------------------------------------------------------------------------ 6238 #
6239 - def verwerfeAenderungen( self ):
6240 """ 6241 Es werden alle Änderungen verworfen (der alte Datenbankzustand hergestellt), die laufende Transaktion beendet und eine neue Transaktion gestartet. 6242 """ 6243 6244 # 6245 # -- in Protokolldatei schreiben ------------------------------------------ 6246 # 6247 self.ProtokolldateiEintragen( eintrag = "verwerfeAenderungen() --> ROLLBACK" 6248 , istKopfzeile = True ) 6249 6250 6251 6252 # 6253 # -- Änderungen verwerfen, Transaktion starten -------------------------- 6254 # 6255 self.__dbVerbindung__.rollback()
6256 6257 6258 6259 6260 6261 # 6262 # ------------------------------------------------------------------------------------ 6263 # ------------------------------------------------------------------------------------ 6264 # -- Alle Änderungen seit Setzen eines PostgreSQL-Safepoints verwerfen -- 6265 # ------------------------------------------------------------------------------------ 6266 # ------------------------------------------------------------------------------------ 6267 #
6268 - def verwerfeAenderungenSafepoint( self, name ):
6269 """ 6270 Methode zum Verwerfen der Änderungen, welche seit dem Setzen eines C{PostgreSQL - Safepoints} durchgeführt wurden. Mittels C{Safepoint} können Teile einer Transaktion gespeichert oder verworfen werden. 6271 6272 @param name: Es ist der Name des C{Safepoints} anzugeben. 6273 @type name: Zeichenkette 6274 """ 6275 6276 # 6277 # -- in Protokolldatei schreiben ------------------------------------------ 6278 # 6279 self.ProtokolldateiEintragen( eintrag = "verwerfeAenderungenSafepoint()" 6280 , istKopfzeile = True ) 6281 6282 6283 6284 # 6285 # -- vorsichtshalber einen neuen Cursor anlegen -------------------------- 6286 # 6287 self.__dbCursor__ = self.__dbVerbindung__.cursor() 6288 6289 # 6290 # -- bis zum SAFEPOINT zurückrollen ------------------------------------------ 6291 # 6292 self.__dbAbfrage__( 'ROLLBACK TO SAVEPOINT ' + name + ';' 6293 , Fortschritt = None 6294 , info = "" ) 6295 6296 # 6297 # -- vorsichtshalber einen neuen Cursor anlegen -------------------------- 6298 # 6299 self.__dbCursor__ = self.__dbVerbindung__.cursor()
6300