Exemple #1
0
    def __init__(self, kunde, neu=True, edit=False):
        # Konstruktor der Superklasse aufrufen
        QtWidgets.QDialog.__init__(self,
                                   flags=QtCore.Qt.Window
                                   | QtCore.Qt.FramelessWindowHint)
        try:
            self.ui = uic.loadUi('ressource/ui/kundenauswahl.ui', self)
        except:
            print('Kann UI-Datei nicht laden!')
            sys.exit(1)

        self.showFullScreen()

        self.speicher = Speicher()

        self.kunde = kunde
        if not self.kunde:
            self.kunde = Kunde()

        if not neu:
            self.ui.button_neu.setStyleSheet('display:none;')
            self.ui.button_neu.setEnabled(False)

        # Soll am Ende immer ein Fenster zum Bearbetien der Kundendaten ausgerufen werden?
        self.edit = edit

        self.shift = False
        self.capslock = False
        self.ui.input_text.setText(u'%s' % self.kunde.getErsteTelefon())
        self.ui.input_text.selectAll()
        self.updateVorschlaege()
        self.updateButtonLabels()
        self.connectSlots()
Exemple #2
0
 def neu(self):
     currentText = str(self.ui.input_text.text())
     self.kunde = Kunde()
     # Neuen Kunde anlegen
     if currentText.isdigit():
         self.kunde.addKontakt('telefon', currentText)
     else:
         self.kunde.setName(currentText.title())
     self.kunde = showKundendatenDialog(self.kunde)
     if self.kunde:
         self.speicher.speichereKunde(self.kunde)
     self.close()
Exemple #3
0
    def __init__(self, kunde):
        # Konstruktor der Superklasse aufrufen
        QtWidgets.QDialog.__init__(self,
                                   flags=QtCore.Qt.Window
                                   | QtCore.Qt.FramelessWindowHint)
        try:
            self.ui = uic.loadUi('ressource/ui/bioanlieferung.ui', self)
        except:
            print('Kann UI-Datei nicht laden!')
            sys.exit(1)

        self.showFullScreen()

        self.kunde = kunde
        if not self.kunde:
            self.kunde = Kunde()

        oeko_kontrollstellen = [
            u"DE-ÖKO-001 (BCS Öko-Garantie)",
            u"DE-ÖKO-003 (Lacon)",
            u"DE-ÖKO-005 (IMO)",
            u"DE-ÖKO-006 (ABCERT)",
            u"DE-ÖKO-007 (Prüfverein Ökologische Landbauprodukte)",
            u"DE-ÖKO-009 (LC Landwirtschafts-Consulting)",
            u"DE-ÖKO-012 (AGRECO)",
            u"DE-ÖKO-013 (QC & I)",
            u"DE-ÖKO-021 (Grünstempel)",
            u"DE-ÖKO-022 (Kontrollverein ökologischer Landbau)",
            u"DE-ÖKO-024 (Ecocert)",
            u"DE-ÖKO-034 (Fachgesellschaft ÖKO-Kontrolle)",
            u"DE-ÖKO-037 (ÖKOP)",
            u"DE-ÖKO-039 (GfRS)",
            u"DE-ÖKO-044 (Ars Probata)",
            u"DE-ÖKO-060 (QAL)",
            u"DE-ÖKO-064 (ABC GmbH)",
            u"DE-ÖKO-070 (Peterson CU)",
        ]
        for kst in oeko_kontrollstellen:
            self.ui.combo_biokontrollstelle.addItem(kst)

        self.shift = False
        self.capslock = False
        self.fillInputs()
        self.currentInput = self.ui.input_menge
        self.currentInput.setFocus()
        kundenwidget = KundenAuswahlWidget(self.kunde)
        kundenwidget.setParent(self.ui.widget_kundendaten)
        kundenwidget.show()
        self.connectSlots()
        self.toggleShift(False)  # Klein damit Zahlen sichtbar sind.
Exemple #4
0
class KundenAuswahlDialog(QtWidgets.QDialog):
    keys = {
        '1': ('1', '!'),
        '2': ('2', u'"'),
        '3': ('3', u'§'),
        '4': ('4', u'€'),
        '5': ('5', u'%'),
        '6': ('6', u'&'),
        '7': ('7', '/'),
        '8': ('8', '('),
        '9': ('9', ')'),
        '0': ('0', '='),
        'ss': (u'ß', '?'),
        'accent': (u'\'', u'\''),
        'q': ('Q', 'Q'),
        'w': ('W', 'W'),
        'e': ('E', 'E'),
        'r': ('R', 'R'),
        't': ('T', 'T'),
        'z': ('Z', 'Z'),
        'u': ('U', 'U'),
        'i': ('I', 'I'),
        'o': ('O', 'O'),
        'p': ('P', 'P'),
        'ue': (u'Ü', u'Ü'),
        'a': ('A', 'A'),
        's': ('S', 'S'),
        'd': ('D', 'D'),
        'f': ('F', 'F'),
        'g': ('G', 'G'),
        'h': ('H', 'H'),
        'j': ('J', 'J'),
        'k': ('K', 'K'),
        'l': ('L', 'L'),
        'oe': (u'Ö', u'Ö'),
        'ae': (u'Ä', u'Ä'),
        'y': ('Y', 'Y'),
        'x': ('X', 'X'),
        'c': ('C', 'C'),
        'v': ('V', 'V'),
        'b': ('B', 'B'),
        'n': ('N', 'N'),
        'm': ('M', 'M'),
        'comma': (',', ';'),
        'dot': ('.', ':'),
        'minus': ('-', '_'),
        'space': (' ', ' '),
    }

    def __init__(self, kunde, neu=True, edit=False):
        # Konstruktor der Superklasse aufrufen
        QtWidgets.QDialog.__init__(self,
                                   flags=QtCore.Qt.Window
                                   | QtCore.Qt.FramelessWindowHint)
        try:
            self.ui = uic.loadUi('ressource/ui/kundenauswahl.ui', self)
        except:
            print('Kann UI-Datei nicht laden!')
            sys.exit(1)

        self.showFullScreen()

        self.speicher = Speicher()

        self.kunde = kunde
        if not self.kunde:
            self.kunde = Kunde()

        if not neu:
            self.ui.button_neu.setStyleSheet('display:none;')
            self.ui.button_neu.setEnabled(False)

        # Soll am Ende immer ein Fenster zum Bearbetien der Kundendaten ausgerufen werden?
        self.edit = edit

        self.shift = False
        self.capslock = False
        self.ui.input_text.setText(u'%s' % self.kunde.getErsteTelefon())
        self.ui.input_text.selectAll()
        self.updateVorschlaege()
        self.updateButtonLabels()
        self.connectSlots()

    def clearInput(self):
        self.ui.input_text.clear()
        self.updateVorschlaege()

    def getValue(self):
        currentText = str(self.ui.input_text.text())
        return currentText

    def updateVorschlaege(self, foo=None):
        self.ui.listWidget_vorschlaege.blockSignals(True)
        self.ui.listWidget_vorschlaege.clear()
        currentText = str(self.ui.input_text.text()).lower()
        if len(currentText) < 3:
            self.ui.listWidget_vorschlaege.blockSignals(False)
            return
        filteredList = self.speicher.sucheKunde(currentText)
        for item in filteredList:
            entry = KundenAuswahlWidget(item)
            item = QtWidgets.QListWidgetItem()
            item.setSizeHint(QtCore.QSize(300, 90))
            self.ui.listWidget_vorschlaege.addItem(item)
            self.ui.listWidget_vorschlaege.setItemWidget(item, entry)
        self.ui.listWidget_vorschlaege.blockSignals(False)

    def keyPressed(self, key):
        return lambda: self.realKeyPressed(key)

    def realKeyPressed(self, key):
        index = 0
        if self.shift:
            index = 1
        if key in self.keys.keys():
            self.ui.input_text.insert(self.keys[key][index])
            if self.shift and not self.capslock:
                self.toggleShift()
        elif key == 'backspace':
            self.ui.input_text.backspace()
        self.cursorPositionChanged()

    def cursorPositionChanged(self, int1=0, int2=0):
        # In diesem Dialogfeld brauchen wir keine automatische Umschaltung auf Großbuchstaben
        pass

    def capslockClicked(self):
        self.capslock = not self.capslock
        self.shift = self.capslock
        self.ui.button_capslock.setChecked(self.capslock)
        self.updateButtonLabels()

    def toggleShift(self):
        self.shift = not self.shift
        self.ui.button_shiftl.setChecked(self.shift)
        self.ui.button_shiftr.setChecked(self.shift)
        if not self.shift:
            self.capslock = False
            self.ui.button_capslock.setChecked(False)
        self.updateButtonLabels()

    def updateButtonLabels(self):
        index = 0
        if self.shift:
            index = 1
        for key in self.keys.keys():
            label = self.keys[key][index]
            # Ein & markiert einen Hotkey, das muss verdoppelt werden
            if label == '&':
                label = '&&'
            getattr(self.ui, 'button_%s' % key).setText(label)

    def listItemClicked(self, listItem):
        if not listItem:
            return
        widget = self.ui.listWidget_vorschlaege.itemWidget(listItem)
        kunde = widget.kunde
        self.kunde = kunde
        self.ok()

    def neu(self):
        currentText = str(self.ui.input_text.text())
        self.kunde = Kunde()
        # Neuen Kunde anlegen
        if currentText.isdigit():
            self.kunde.addKontakt('telefon', currentText)
        else:
            self.kunde.setName(currentText.title())
        self.kunde = showKundendatenDialog(self.kunde)
        if self.kunde:
            self.speicher.speichereKunde(self.kunde)
        self.close()

    def ok(self):
        print('ok(edit=%s)' % self.edit)
        if not self.kunde:
            # Wenn nur ein Kunde in der Auswahlliste ist, ist es der
            if self.ui.listWidget_vorschlaege.count() == 1:
                widget = self.ui.listWidget_vorschlaege.itemWidget(
                    self.ui.listWidget_vorschlaege.item(0))
                self.kunde = widget.kunde
            else:
                QtWidgets.QMessageBox.warning(
                    self,
                    u'Fehler',
                    u'Kein Kunde gewählt',
                    buttons=QtWidgets.QMessageBox.Ok,
                    defaultButton=QtWidgets.QMessageBox.Ok)
                return
        if self.edit:
            self.kunde = showKundendatenDialog(self.kunde)
            self.speicher.speichereKunde(self.kunde)
        self.close()

    def connectSlots(self):
        for key in self.keys.keys():
            if getattr(self.ui, 'button_%s' % key):
                getattr(self.ui, 'button_%s' % key).clicked.connect(
                    self.keyPressed(key))
            else:
                print('unknown button: button_%s' % key)

        self.ui.button_backspace.clicked.connect(self.keyPressed('backspace'))
        self.ui.button_clear.clicked.connect(self.clearInput)
        self.ui.button_cancel.clicked.connect(self.close)
        self.ui.button_neu.clicked.connect(self.neu)
        self.ui.button_enter.clicked.connect(self.ok)
        self.ui.button_shiftl.clicked.connect(self.toggleShift)
        self.ui.button_shiftr.clicked.connect(self.toggleShift)
        self.ui.button_capslock.clicked.connect(self.capslockClicked)
        #self.ui.listWidget_vorschlaege.currentTextChanged.connect(self.listItemClicked)
        self.ui.input_text.textChanged[str].connect(self.updateVorschlaege)
        self.ui.input_text.cursorPositionChanged[int, int].connect(
            self.cursorPositionChanged)
        self.ui.input_text.selectionChanged.connect(self.cursorPositionChanged)
        self.ui.listWidget_vorschlaege.itemClicked.connect(
            self.listItemClicked)
Exemple #5
0
class KundendatenDialog(QtWidgets.QDialog):
    keys = {
        '1': ('1', '!'),
        '2': ('2', u'"'),
        '3': ('3', u'§'),
        '4': ('4', u'€'),
        '5': ('5', u'%'),
        '6': ('6', u'&'),
        '7': ('7', '/'),
        '8': ('8', '('),
        '9': ('9', ')'),
        '0': ('0', '='),
        'ss': (u'ß', '?'),
        'accent': (u'\'', u'\''),
        'q': ('q', 'Q'),
        'w': ('w', 'W'),
        'e': ('e', 'E'),
        'r': ('r', 'R'),
        't': ('t', 'T'),
        'z': ('z', 'Z'),
        'u': ('u', 'U'),
        'i': ('i', 'I'),
        'o': ('o', 'O'),
        'p': ('p', 'P'),
        'ue': (u'ü', u'Ü'),
        'a': ('a', 'A'),
        's': ('s', 'S'),
        'd': ('d', 'D'),
        'f': ('f', 'F'),
        'g': ('g', 'G'),
        'h': ('h', 'H'),
        'j': ('j', 'J'),
        'k': ('k', 'K'),
        'l': ('l', 'L'),
        'oe': (u'ö', u'Ö'),
        'ae': (u'ä', u'Ä'),
        'y': ('y', 'Y'),
        'x': ('x', 'X'),
        'c': ('c', 'C'),
        'v': ('v', 'V'),
        'b': ('b', 'B'),
        'n': ('n', 'N'),
        'm': ('m', 'M'),
        'comma': (',', ';'),
        'dot': ('.', ':'),
        'minus': ('-', '_'),
        'space': (' ', ' '),
    }

    def __init__(self, kunde):
        # Konstruktor der Superklasse aufrufen
        QtWidgets.QDialog.__init__(self,
                                   flags=QtCore.Qt.Window
                                   | QtCore.Qt.FramelessWindowHint)
        try:
            self.ui = uic.loadUi('ressource/ui/kundendaten.ui', self)
        except:
            print('Kann UI-Datei nicht laden!')
            sys.exit(1)

        self.showFullScreen()

        self.kunde = kunde
        if not self.kunde:
            self.kunde = Kunde()

        oeko_kontrollstellen = [
            u"DE-ÖKO-001 (BCS Öko-Garantie)",
            u"DE-ÖKO-003 (Lacon)",
            u"DE-ÖKO-005 (IMO)",
            u"DE-ÖKO-006 (ABCERT)",
            u"DE-ÖKO-007 (Prüfverein Ökologische Landbauprodukte)",
            u"DE-ÖKO-009 (LC Landwirtschafts-Consulting)",
            u"DE-ÖKO-012 (AGRECO)",
            u"DE-ÖKO-013 (QC & I)",
            u"DE-ÖKO-021 (Grünstempel)",
            u"DE-ÖKO-022 (Kontrollverein ökologischer Landbau)",
            u"DE-ÖKO-024 (Ecocert)",
            u"DE-ÖKO-034 (Fachgesellschaft ÖKO-Kontrolle)",
            u"DE-ÖKO-037 (ÖKOP)",
            u"DE-ÖKO-039 (GfRS)",
            u"DE-ÖKO-044 (Ars Probata)",
            u"DE-ÖKO-060 (QAL)",
            u"DE-ÖKO-064 (ABC GmbH)",
            u"DE-ÖKO-070 (Peterson CU)",
        ]
        for kst in oeko_kontrollstellen:
            self.ui.combo_biokontrollstelle.addItem(kst)

        self.shift = False
        self.capslock = False
        self.fillTelefon()
        self.fillInputs()
        self.currentInput = self.ui.input_nachname
        self.currentInput.setFocus()
        self.update()
        self.connectSlots()
        self.toggleShift(True)  # Am Anfang groß schreiben

    def fillInputs(self):
        if self.kunde['firma']:
            self.ui.input_firma.setText(self.kunde['firma'])
        if self.kunde['vorname']:
            self.ui.input_vorname.setText(self.kunde['vorname'])
        if self.kunde['nachname']:
            self.ui.input_nachname.setText(self.kunde['nachname'])
        if self.kunde['strasse']:
            self.ui.input_strasse.setText(self.kunde['strasse'])
        if self.kunde['plz']:
            self.ui.input_plz.setText(self.kunde['plz'])
        if self.kunde['ort']:
            self.ui.input_ort.setText(self.kunde['ort'])
        if self.kunde.isBio():
            self.ui.button_bio.setChecked(True)
            self.ui.combo_biokontrollstelle.setEnabled(True)
            kst = self.kunde.getOekoKontrollstelle()
            idx = self.ui.combo_biokontrollstelle.findText(
                kst, flags=QtCore.Qt.MatchStartsWith)
            if idx == -1:
                self.ui.combo_biokontrollstelle.setEditText(kst)
            else:
                self.ui.combo_biokontrollstelle.setCurrentIndex(idx)
        else:
            self.ui.button_bio.setChecked(False)
            self.ui.combo_biokontrollstelle.clearEditText()
            self.ui.combo_biokontrollstelle.setEnabled(False)

    def fillTelefon(self):
        telefon = set()
        for t in self.kunde.listKontakte():
            if t['typ'] in ['mobil', 'telefon']:
                telefon.add(formatPhoneNumber(t['wert']))
        self.ui.input_telefon.setText(' / '.join(telefon))

    def keyPressed(self, key):
        return lambda: self.realKeyPressed(key)

    def realKeyPressed(self, key):
        index = 0
        if self.shift:
            index = 1
        if key in self.keys.keys():
            self.currentInput.insert(self.keys[key][index])
            if self.shift and not self.capslock:
                self.toggleShift()
        elif key == 'backspace':
            self.currentInput.backspace()
        self.cursorPositionChanged()

    def cursorPositionChanged(self, int1=0, int2=0):
        if self.ui.input_plz == self.currentInput:
            self.toggleShift(False)
            return
        if len(self.currentInput.text()
               ) == 0 or self.currentInput.cursorPosition() == 0:
            self.toggleShift(True)
        else:
            if self.ui.input_strasse == self.currentInput and self.currentInput.text(
            )[self.currentInput.cursorPosition() - 1] == ' ':
                # Bei der Straße wird am Anfang groß geschrieben, nicht aber nach einem Leerzeichen
                self.toggleShift(False)
                return
            if self.currentInput.text()[self.currentInput.cursorPosition() -
                                        1] in [' ', ',', '-']:
                self.toggleShift(True)
            else:
                self.toggleShift(False)

    def capslockClicked(self):
        self.capslock = not self.capslock
        self.shift = self.capslock
        self.ui.button_capslock.setChecked(self.capslock)
        self.updateButtonLabels()

    def toggleShift(self, state=None):
        if state == False or state == True:
            # None ist beides nicht
            self.shift = bool(state)
        else:
            self.shift = not self.shift
        self.ui.button_shiftl.setChecked(self.shift)
        self.ui.button_shiftr.setChecked(self.shift)
        if not self.shift:
            self.capslock = False
            self.ui.button_capslock.setChecked(False)
        self.updateButtonLabels()

    def updateButtonLabels(self):
        index = 0
        if self.shift:
            index = 1
        for key in self.keys.keys():
            label = self.keys[key][index]
            # Ein & markiert einen Hotkey, das muss verdoppelt werden
            if label == '&':
                label = '&&'
            getattr(self.ui, 'button_%s' % key).setText(label)

    def ok(self):
        self.kunde.setName(firma=str(self.ui.input_firma.text()),
                           vorname=str(self.ui.input_vorname.text()),
                           nachname=str(self.ui.input_nachname.text()))
        self.kunde.setAdresse(strasse=str(self.ui.input_strasse.text()),
                              plz=str(self.ui.input_plz.text()),
                              ort=str(self.ui.input_ort.text()))
        kst = str(self.ui.combo_biokontrollstelle.currentText())
        if '(' in kst:
            kst = kst[:kst.find('(')].strip()
        self.kunde.setOekoKontrollstelle(kst)
        self.close()

    def focusChange(self, new):
        if new == self.ui.input_telefon:
            showPhoneNumberInputDialog(self.kunde)
            self.fillTelefon()
        elif type(new) == QtWidgets.QLineEdit:
            self.currentInput = new
            self.cursorPositionChanged()
        elif type(new) == QtWidgets.QComboBox:
            self.currentInput = new.lineEdit()
            self.cursorPositionChanged()

    def focusSlot(self, widget):
        def func():
            self.focusChange(widget)

        return func

    def eventFilter(self, qobject, qevent):
        if qevent.type() == QtCore.QEvent.MouseButtonPress:
            qobject.clicked()
        return False

    def connectSlots(self):
        for key in self.keys.keys():
            getattr(self.ui,
                    'button_%s' % key).clicked.connect(self.keyPressed(key))

        self.ui.button_backspace.clicked.connect(self.keyPressed('backspace'))
        self.ui.button_ok.clicked.connect(self.ok)
        self.ui.button_enter.clicked.connect(self.ok)
        self.ui.button_shiftl.clicked.connect(self.toggleShift)
        self.ui.button_shiftr.clicked.connect(self.toggleShift)
        self.ui.button_capslock.clicked.connect(self.capslockClicked)

        self.ui.input_firma.clicked = self.focusSlot(self.ui.input_firma)
        self.ui.input_firma.installEventFilter(self)
        self.ui.input_vorname.clicked = self.focusSlot(self.ui.input_vorname)
        self.ui.input_vorname.installEventFilter(self)
        self.ui.input_nachname.clicked = self.focusSlot(self.ui.input_nachname)
        self.ui.input_nachname.installEventFilter(self)
        self.ui.input_telefon.clicked = self.focusSlot(self.ui.input_telefon)
        self.ui.input_telefon.installEventFilter(self)
        self.ui.input_strasse.clicked = self.focusSlot(self.ui.input_strasse)
        self.ui.input_strasse.installEventFilter(self)
        self.ui.input_plz.clicked = self.focusSlot(self.ui.input_plz)
        self.ui.input_plz.installEventFilter(self)
        self.ui.input_ort.clicked = self.focusSlot(self.ui.input_ort)
        self.ui.input_ort.installEventFilter(self)
        self.ui.combo_biokontrollstelle.clicked = self.focusSlot(
            self.ui.combo_biokontrollstelle)
        self.ui.combo_biokontrollstelle.installEventFilter(self)
Exemple #6
0
        self.ui.input_firma.installEventFilter(self)
        self.ui.input_vorname.clicked = self.focusSlot(self.ui.input_vorname)
        self.ui.input_vorname.installEventFilter(self)
        self.ui.input_nachname.clicked = self.focusSlot(self.ui.input_nachname)
        self.ui.input_nachname.installEventFilter(self)
        self.ui.input_telefon.clicked = self.focusSlot(self.ui.input_telefon)
        self.ui.input_telefon.installEventFilter(self)
        self.ui.input_strasse.clicked = self.focusSlot(self.ui.input_strasse)
        self.ui.input_strasse.installEventFilter(self)
        self.ui.input_plz.clicked = self.focusSlot(self.ui.input_plz)
        self.ui.input_plz.installEventFilter(self)
        self.ui.input_ort.clicked = self.focusSlot(self.ui.input_ort)
        self.ui.input_ort.installEventFilter(self)
        self.ui.combo_biokontrollstelle.clicked = self.focusSlot(
            self.ui.combo_biokontrollstelle)
        self.ui.combo_biokontrollstelle.installEventFilter(self)


def showKundendatenDialog(kunde=None):
    dialog = KundendatenDialog(kunde)
    dialog.show()
    dialog.exec_()  # blockiert bis der Dialog geschlossen wird
    return dialog.kunde


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    k = Kunde()
    showKundendatenDialog(k)
    print(k)
Exemple #7
0
class BioAnlieferungDialog(QtWidgets.QDialog):
    keys = {
        '1': ('1', '!'),
        '2': ('2', u'"'),
        '3': ('3', u'§'),
        '4': ('4', u'€'),
        '5': ('5', u'%'),
        '6': ('6', u'&'),
        '7': ('7', '/'),
        '8': ('8', '('),
        '9': ('9', ')'),
        '0': ('0', '='),
        'ss': (u'ß', '?'),
        'accent': (u'\'', u'\''),
        'q': ('q', 'Q'),
        'w': ('w', 'W'),
        'e': ('e', 'E'),
        'r': ('r', 'R'),
        't': ('t', 'T'),
        'z': ('z', 'Z'),
        'u': ('u', 'U'),
        'i': ('i', 'I'),
        'o': ('o', 'O'),
        'p': ('p', 'P'),
        'ue': (u'ü', u'Ü'),
        'a': ('a', 'A'),
        's': ('s', 'S'),
        'd': ('d', 'D'),
        'f': ('f', 'F'),
        'g': ('g', 'G'),
        'h': ('h', 'H'),
        'j': ('j', 'J'),
        'k': ('k', 'K'),
        'l': ('l', 'L'),
        'oe': (u'ö', u'Ö'),
        'ae': (u'ä', u'Ä'),
        'y': ('y', 'Y'),
        'x': ('x', 'X'),
        'c': ('c', 'C'),
        'v': ('v', 'V'),
        'b': ('b', 'B'),
        'n': ('n', 'N'),
        'm': ('m', 'M'),
        'comma': (',', ';'),
        'dot': ('.', ':'),
        'minus': ('-', '_'),
        'space': (' ', ' '),
    }

    def __init__(self, kunde):
        # Konstruktor der Superklasse aufrufen
        QtWidgets.QDialog.__init__(self,
                                   flags=QtCore.Qt.Window
                                   | QtCore.Qt.FramelessWindowHint)
        try:
            self.ui = uic.loadUi('ressource/ui/bioanlieferung.ui', self)
        except:
            print('Kann UI-Datei nicht laden!')
            sys.exit(1)

        self.showFullScreen()

        self.kunde = kunde
        if not self.kunde:
            self.kunde = Kunde()

        oeko_kontrollstellen = [
            u"DE-ÖKO-001 (BCS Öko-Garantie)",
            u"DE-ÖKO-003 (Lacon)",
            u"DE-ÖKO-005 (IMO)",
            u"DE-ÖKO-006 (ABCERT)",
            u"DE-ÖKO-007 (Prüfverein Ökologische Landbauprodukte)",
            u"DE-ÖKO-009 (LC Landwirtschafts-Consulting)",
            u"DE-ÖKO-012 (AGRECO)",
            u"DE-ÖKO-013 (QC & I)",
            u"DE-ÖKO-021 (Grünstempel)",
            u"DE-ÖKO-022 (Kontrollverein ökologischer Landbau)",
            u"DE-ÖKO-024 (Ecocert)",
            u"DE-ÖKO-034 (Fachgesellschaft ÖKO-Kontrolle)",
            u"DE-ÖKO-037 (ÖKOP)",
            u"DE-ÖKO-039 (GfRS)",
            u"DE-ÖKO-044 (Ars Probata)",
            u"DE-ÖKO-060 (QAL)",
            u"DE-ÖKO-064 (ABC GmbH)",
            u"DE-ÖKO-070 (Peterson CU)",
        ]
        for kst in oeko_kontrollstellen:
            self.ui.combo_biokontrollstelle.addItem(kst)

        self.shift = False
        self.capslock = False
        self.fillInputs()
        self.currentInput = self.ui.input_menge
        self.currentInput.setFocus()
        kundenwidget = KundenAuswahlWidget(self.kunde)
        kundenwidget.setParent(self.ui.widget_kundendaten)
        kundenwidget.show()
        self.connectSlots()
        self.toggleShift(False)  # Klein damit Zahlen sichtbar sind.

    def fillInputs(self):
        kst = self.kunde.getOekoKontrollstelle()
        idx = self.ui.combo_biokontrollstelle.findText(
            kst, flags=QtCore.Qt.MatchStartsWith)
        if idx == -1:
            self.ui.combo_biokontrollstelle.setEditText(kst)
        else:
            self.ui.combo_biokontrollstelle.setCurrentIndex(idx)
        self.ui.dateEdit.setDate(datetime.date.today())

    def keyPressed(self, key):
        return lambda: self.realKeyPressed(key)

    def realKeyPressed(self, key):
        index = 0
        if self.shift:
            index = 1
        if key in self.keys.keys():
            self.currentInput.insert(self.keys[key][index])
            if self.shift and not self.capslock:
                self.toggleShift()
        elif key == 'backspace':
            self.currentInput.backspace()
        self.cursorPositionChanged()

    def cursorPositionChanged(self, int1=0, int2=0):
        # In diesem Dialogfeld brauchen wir keine automatische Umschaltung auf Großbuchstaben
        pass

    def capslockClicked(self):
        self.capslock = not self.capslock
        self.shift = self.capslock
        self.ui.button_capslock.setChecked(self.capslock)
        self.updateButtonLabels()

    def toggleShift(self, state=None):
        if state == False or state == True:
            # None ist beides nicht
            self.shift = bool(state)
        else:
            self.shift = not self.shift
        self.ui.button_shiftl.setChecked(self.shift)
        self.ui.button_shiftr.setChecked(self.shift)
        if not self.shift:
            self.capslock = False
            self.ui.button_capslock.setChecked(False)
        self.updateButtonLabels()

    def updateButtonLabels(self):
        index = 0
        if self.shift:
            index = 1
        for key in self.keys.keys():
            label = self.keys[key][index]
            # Ein & markiert einen Hotkey, das muss verdoppelt werden
            if label == '&':
                label = '&&'
            getattr(self.ui, 'button_%s' % key).setText(label)

    def cancel(self):
        self.close()

    def ok(self):
        kst = str(self.ui.combo_biokontrollstelle.currentText())
        if '(' in kst:
            kst = kst[:kst.find('(')].strip()
        self.kunde.setOekoKontrollstelle(kst)

        anlieferdatum = self.ui.dateEdit.date().toPyDate()

        data = {
            'kunde': self.kunde.ID(),
            'adresse': self.kunde.getAdresse(),
            'menge': str(self.ui.input_menge.text()),
            'kontrollstelle': kst,
            'obstart': {},
            'anlieferdatum': anlieferdatum.isoformat(),
        }
        if not data['menge']:
            QtWidgets.QMessageBox.warning(
                self,
                u'Fehler',
                u'Obst-Menge fehlt!',
                buttons=QtWidgets.QMessageBox.Ok,
                defaultButton=QtWidgets.QMessageBox.Ok)
            return
        for key in ['apfel', 'birne', 'quitte']:
            if getattr(self.ui, 'button_%s' % key).isChecked():
                data['obstart'][key] = True
        s = Speicher()
        s.speichereBioLieferschein(data)
        pdffile = BioLieferschein(data)

        c = cups.Connection()
        c.printFile(c.getDefault(), pdffile, 'Bio-Lieferschein %s' % pdffile,
                    PRINTER_OPTIONS)
        self.close()

    def focusChange(self, new):
        self.currentInput = new
        self.cursorPositionChanged()

    def focusSlot(self, widget):
        def func():
            self.focusChange(widget)

        return func

    def eventFilter(self, qobject, qevent):
        if qevent.type() == QtCore.QEvent.MouseButtonPress:
            qobject.clicked()
        return False

    def connectSlots(self):
        for key in self.keys.keys():
            getattr(self.ui,
                    'button_%s' % key).clicked.connect(self.keyPressed(key))

        self.ui.button_backspace.clicked.connect(self.keyPressed('backspace'))
        self.ui.button_ok.clicked.connect(self.ok)
        self.ui.button_cancel.clicked.connect(self.cancel)
        self.ui.button_enter.clicked.connect(self.ok)
        self.ui.button_shiftl.clicked.connect(self.toggleShift)
        self.ui.button_shiftr.clicked.connect(self.toggleShift)
        self.ui.button_capslock.clicked.connect(self.capslockClicked)

        self.ui.input_menge.clicked = self.focusSlot(self.ui.input_menge)
        self.ui.input_menge.installEventFilter(self)
Exemple #8
0
        self.ui.listWidget.setCurrentRow(newindex)

    def deleteNumber(self, index):
        del self.kontakte[index]
        self.buildList()
        lastindex = self.ui.listWidget.count() - 1
        self.ui.listWidget.setCurrentRow(lastindex)

    def connectSlots(self):
        for n in range(10):
            getattr(self.ui, "button_%i" % n).clicked.connect(
                self.numberPressed(str(n)))
        self.ui.button_backspace.clicked.connect(self.backspace)
        self.ui.button_more.clicked.connect(self.more)
        self.ui.button_clear.clicked.connect(self.clear)
        self.ui.button_ok.clicked.connect(self.ok)
        self.ui.button_abbrechen.clicked.connect(self.abbrechen)

        self.ui.listWidget.currentItemChanged.connect(self.listItemClicked)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    from lib.Kunde import Kunde
    k = Kunde()
    #k.addKontakt('telefon', '071923455')
    #k.addKontakt('telefon', '0152345679')
    showPhoneNumberInputDialog(k)

    print('Telefon: »%s«' % k.listKontakte())