#!/usr/bin/python

#  GUI-Steuerung zur Patientenverwaltung (PAT 02)
#  Datei :  pat00.py
#  !Teilfertiglösung!
#  Autor :  Bombei, BICS, Feb 2003 (Python)
#  Aufgabe    :  uebernimmt Eingaben/Ausgaben und steuert die
#                Funktionen (zur Patientenverwaltung) über ein GUI.
#  benutzt    :  die GUI-Objektsammlung in tkmodule

#  Idee und Delphi-Version von S. Spolwig, OSZHdl, Berlin

import  Tkinter
from    Tkconstants     import  *
from    sliste          import  TListe
from    patient         import  TPatient
from    tkmodule        import  *


class TPatFenster:
   """
   /* GUI-Darstellung des Patientenverwaltungsrahmens
   """
   def __init__(selbst):

      # Referenzen zum Fachkonzept herstellen (Patient kommt unten!):
      selbst.diePatListe = TListe()

      # Folgende  Werte anpassen (Kompromiss, das hier zu tun ...)
      selbst.Dateiname = "TestPatListe.txt"
      gender = ["w","m"]
      blood  = ["0","A","B"]

      # Extra Listbox-Fenster vorbereiten:
#      selbst.PatBox = XListe("Patienten-Liste")

      # Hauptfenster erstellen:
      selbst.dasFenster=Tkinter.Tk()
      selbst.dasFenster.geometry("+10+10")
      selbst.dasFenster.title("Patientenverwaltung PAT 02 (Vers. TkInter)")

      # Extra Listbox-Fenster vorbereiten:
      selbst.PatBox = XListe("Patienten-Liste")

      #Grobe Rahmenstruktur:
      RahmenHilfOben=XHilfsRahmen(selbst.dasFenster)
      RahmenHilfMitte=XHilfsRahmen(selbst.dasFenster)
      RahmenHilfUnten=XHilfsRahmen(selbst.dasFenster)

      # Unterteilende Rahmen, jeweils mit Beschriftung:
      RahmenObenLinks = XThemenRahmen(RahmenHilfOben, " Personenangaben ", Seite = LEFT)
      RahmenObenRechts = XThemenRahmen(RahmenHilfOben, " Adressdaten ", Seite = LEFT)
      RahmenMitte = XThemenRahmen(RahmenHilfMitte, " Patientendaten ")
      RahmenUnten = XThemenRahmen(RahmenHilfUnten, " Befehle ")
      RahmenUnten1 = XHilfsRahmen(RahmenUnten)
      RahmenUnten2 = XHilfsRahmen(RahmenUnten)

      # Die einzelnen Eingabefelder, jeweils mit Beschriftung:
      selbst.EName=XEingabe(RahmenObenLinks, "Name")
      selbst.EVorname=XEingabe(RahmenObenLinks, "Vorname")
      selbst.EStrasse=XEingabe(RahmenObenRechts, "Strasse")
      selbst.EOrt=XEingabe(RahmenObenRechts, "Ort")
      selbst.EPlz=XEingabe(RahmenObenRechts, "PLZ")
      selbst.ETelephon=XEingabe(RahmenObenRechts, "Tel. Nr.")
      selbst.EGebdatum=XEingabe(RahmenMitte, "Geburtsdatum")
      selbst.EKv=XEingabe(RahmenMitte, "Krankenversicherung")
      selbst.EBlutgruppe=XWahl(RahmenMitte, "Blutgruppe", blood,Seite=LEFT)
      selbst.EGeschlecht=XWahl(RahmenMitte,"Geschlecht",gender,Seite=LEFT)

      # Die einzelnen Tasten, mit Beschriftung und Befehlsreferenz:
      KLeft=XTaste(RahmenUnten2, ' << ', selbst.VorherigesElement)
      KOk=XTaste(RahmenUnten1,' als NEU speichern ', selbst.PatNeu)
      KAendern=XTaste(RahmenUnten1, ' Änderung speichern ', selbst.PatAendern)
      KDel=XTaste(RahmenUnten1, ' Patienten löschen ', selbst.PatWeg)
      KBox=XTaste(RahmenUnten2, ' ganze Liste ', selbst.GanzeListeZeigen)
      KLeer=XTaste(RahmenUnten2, ' Maske leeren ', selbst.FelderLeeren)
      KEnde=XTaste(RahmenUnten2,' E N D E ', selbst.beenden)
      KRight=XTaste(RahmenUnten2, ' >> ', selbst.NaechstesElement)

      if selbst.diePatListe.Load(selbst.Dateiname) :
#        print "Öffne Datei ", selbst.Dateiname
        selbst.diePatListe.First()
        ersterPat = selbst.diePatListe.GetElement()
        selbst.MaskeAktualisieren(ersterPat)
#        selbst.BoxFuellen()
#      else :
#        print "Keine Datei: ", selbst.Dateiname

   def FelderLeeren(selbst):
      selbst.EName.set_xEingabe("")
      selbst.EVorname.set_xEingabe("")
      selbst.EStrasse.set_xEingabe("")
      selbst.EOrt.set_xEingabe("")
      selbst.EPlz.set_xEingabe("")
      selbst.ETelephon.set_xEingabe("")
      selbst.EGebdatum.set_xEingabe("")
      selbst.EBlutgruppe.set_xEingabe("")
      selbst.EKv.set_xEingabe("")
      selbst.EGeschlecht.set_xEingabe("")

   def DatenAktualisieren(selbst, Pat):
        Pat.set_Name(selbst.EName.get_xEingabe())
        Pat.set_Vorname(selbst.EVorname.get_xEingabe())
        Pat.set_Geburtstag(selbst.EGebdatum.get_xEingabe())
        Pat.Adresse.set_Strasse(selbst.EStrasse.get_xEingabe())
        Pat.Adresse.set_Plz(selbst.EPlz.get_xEingabe())
        Pat.Adresse.set_Ort(selbst.EOrt.get_xEingabe())
        Pat.Adresse.set_Telefon(selbst.ETelephon.get_xEingabe())
        Pat.set_Blutgruppe(selbst.EBlutgruppe.get_xEingabe())
        Pat.set_Krankenkasse(selbst.EKv.get_xEingabe())
        Pat.set_Geschlecht(selbst.EGeschlecht.get_xEingabe())

   def PatAendern(selbst):
      NamenEingabe = selbst.EName.get_xEingabe()
      pass

   def PatNeu(selbst):
      NamenEingabe = selbst.EName.get_xEingabe()
      if NamenEingabe == "" or NamenEingabe == " " :
        dieBox = XDialog("Ungültige Eingabe")
        dieBox.zeige()
      else:
        Patient=TPatient()
        selbst.DatenAktualisieren(Patient)
        selbst.diePatListe.Append(Patient)

   def PatWeg(selbst):
        selbst.diePatListe.Delete()
        if selbst.diePatListe.EoList() :
            dieBox = XDialog("Keine weiteren Daten")
            dieBox.zeige()
            selbst.FelderLeeren()
        else :
            Patient=selbst.diePatListe.GetElement()
            selbst.MaskeAktualisieren(Patient)

   def NaechstesElement(selbst):
        pass

   def VorherigesElement(selbst):
        selbst.diePatListe.Previous()
        if selbst.diePatListe.EoList() :
            dieBox = XDialog("Keine weiteren Daten")
            dieBox.zeige()
        else:
            Patient=selbst.diePatListe.GetElement()
            selbst.MaskeAktualisieren(Patient)

   def MaskeAktualisieren(selbst, Patient):
        selbst.EName.set_xEingabe(Patient.get_Name())
        selbst.EVorname.set_xEingabe(Patient.get_Vorname())
        selbst.EStrasse.set_xEingabe(Patient.Adresse.get_Strasse())
        selbst.EOrt.set_xEingabe(Patient.Adresse.get_Ort())
        selbst.EPlz.set_xEingabe(Patient.Adresse.get_Plz())
        selbst.ETelephon.set_xEingabe(Patient.Adresse.get_Telefon())
        selbst.EGebdatum.set_xEingabe(Patient.get_Geburtstag())
        selbst.EGeschlecht.set_xEingabe(Patient.get_Geschlecht())
        selbst.EBlutgruppe.set_xEingabe(Patient.get_Blutgruppe())
        selbst.EKv.set_xEingabe(Patient.get_Krankenkasse())
#        selbst.EPatnr.set_xEingabe(wert=Patient.get_)

   def beenden(selbst):
      if selbst.diePatListe.Store(selbst.Dateiname) :
        print "Geschriebene Datei ", selbst.Dateiname
      selbst.dasFenster.destroy()

   def BoxFuellen(selbst):
      bisher = selbst.diePatListe.PositionOf(selbst.diePatListe.GetElement())
      wieviele = selbst.diePatListe.Lilaenge
#      print wieviele
      selbst.diePatListe.First()
      Ergebnis = []
      for pat in range(0,wieviele) :
           Aktuell = selbst.diePatListe.GetElement()
           Eintrag = "%s, %s" % (Aktuell.get_Name(),Aktuell.get_Vorname())
           Ergebnis.append(Eintrag)
           selbst.diePatListe.Next()
      selbst.diePatListe.AktuellePos = bisher
#      print Ergebnis
      selbst.PatBox.fuelle(Ergebnis)

   def GanzeListeZeigen(selbst):
#      selbst.PatBox = XListe("Patienten-Liste")
      selbst.BoxFuellen()
      selbst.PatBox.zeige()

if __name__ == "__main__":
   meinWindow=TPatFenster()
   Tkinter.mainloop()
