Пример #1
0
 def updateOldValues(self):
     self.ui.label_anzahl_alt.setText(
         renderIntOrFloat(self.__backup.getStueckzahl()))
     self.ui.label_einheit_alt.setText(str(self.__backup.getEinheit()))
     self.ui.label_beschreibung_alt.setText(
         str(self.__backup.getBeschreibung()))
     self.ui.label_einzelpreis_alt.setText(
         getMoneyValue(self.__backup.getPreis()))
     self.ui.label_steuersatz_alt.setText(u'%.1f %%' %
                                          self.__backup.getSteuersatz())
     self.ui.label_gesamtpreis_alt.setText(
         getMoneyValue(self.__backup.getSumme()))
     d = self.__backup.getDatum()
     if not d:
         d = datetime.date.today()
     self.ui.dateedit_leistungsdatum.setDate(
         QtCore.QDate(d.year, d.month, d.day))
Пример #2
0
    def update(self):
        self.ui.label_anzahl_alt.setText(u'%i' % self.__backup.getStueckzahl())
        self.ui.label_einheit_alt.setText(str(self.__backup.getEinheit()))
        self.ui.label_beschreibung_alt.setText(
            str(self.__backup.getBeschreibung()))
        self.ui.input_anzahl.setText(u'%i' %
                                     int(self.invoiceEntry.getStueckzahl()))
        self.ui.input_einheit.setText(u'%s' % self.invoiceEntry.getEinheit())
        self.ui.input_beschreibung.setText(u'%s' %
                                           self.invoiceEntry.getBeschreibung())
        self.ui.input_einzelpreis.setText(
            u'%s' % getMoneyValue(self.invoiceEntry.getPreis()))
        self.ui.label_gesamtpreis.setText(
            u'%s' % getMoneyValue(self.invoiceEntry.getSumme()))
        index = self.ui.combo_steuersatz.findText(
            u'%.1f' % self.invoiceEntry.getSteuersatz(),
            flags=QtCore.Qt.MatchStartsWith)
        if index == -1:
            self.ui.combo_steuersatz.addItem(u'%.1f %%' %
                                             self.invoiceEntry.getSteuersatz())
            index = self.ui.combo_steuersatz.findText(
                u'%.1f' % self.invoiceEntry.getSteuersatz(),
                flags=QtCore.Qt.MatchStartsWith)
        self.ui.combo_steuersatz.setCurrentIndex(index)

        if self.__default:
            self.ui.label_einheit_default.setText(self.__default.getEinheit())
            self.ui.label_beschreibung_default.setText(
                self.__default.getBeschreibung())
            self.ui.label_einzelpreis_default.setText(
                getMoneyValue(self.__default.getPreis()))
            self.ui.label_steuersatz_default.setText(
                u'%.1f %%' % self.__default.getSteuersatz())
        else:
            self.ui.label_einheit_default.setText(u'----')
            self.ui.label_beschreibung_default.setText(u'----')
            self.ui.label_einzelpreis_default.setText(u'----')
            self.ui.label_steuersatz_default.setText(u'----')

        self.updateComboProdukt()
Пример #3
0
 def erstelle_abschluss(self):
     differenz = self.kassenbestand - self.__kassenstand_berechnet
     self.abschluss['kassenstand'] = self.kassenbestand
     if differenz:
         self.abschluss[
             'bemerkung'] = 'Abweichung der Kasse: %s' % getMoneyValue(
                 differenz)
         if QtWidgets.QMessageBox.No == QtWidgets.QMessageBox.warning(
                 self,
                 'Abweichung in der Kasse',
                 'Der Kassenstand entspricht nicht dem errechneten Kassenstand lauf Aufzeichnungen.\nAbweichungsbetrag: %s\nSoll der Abschluss mit Abweichung vorgenommen werden?'
                 % getMoneyValue(differenz),
                 buttons=QtWidgets.QMessageBox.Yes
                 | QtWidgets.QMessageBox.No,
                 defaultButton=QtWidgets.QMessageBox.No):
             return
     else:
         self.abschluss['bemerkung'] = None
     s = Speicher()
     s.speichereAbschluss(self.abschluss)
     # Drucke Zählprotokoll
     self.mainwindow.reset()
Пример #4
0
 def get_kassenstand(self):
     self.abschluss['summe_brutto'] = 0.0
     self.abschluss['summe_netto'] = 0.0
     self.abschluss['summe_mwst'] = 0.0
     self.abschluss['summe_bar'] = 0.0
     self.abschluss['summe_transit'] = 0.0
     self.abschluss['ersterbeleg'] = None
     s = Speicher()
     letzter_abschluss = s.getLetzterAbschluss()
     kassenstand = 0.0
     infotext = ''
     if letzter_abschluss:
         infotext += 'Letzter Abschluss vom %s:\nKassenstand: %s\n\n' % (
             letzter_abschluss['timestamp'].isoformat(),
             getMoneyValue(letzter_abschluss['kassenstand']))
         kassenstand = letzter_abschluss['kassenstand']
         self.abschluss[
             'ersterbeleg'] = letzter_abschluss['letzterbeleg'] + 1
     else:
         infotext += 'Keinen vorherigen Abschluss gefunden!\n\n'
     belege = s.listKassenbelege(self.abschluss['ersterbeleg'])
     for b in belege:
         if not self.abschluss['ersterbeleg']:
             self.abschluss['ersterbeleg'] = b['id']
         kassenstand += b['kassenbewegung']
         if b['type'] == 'transit' and b['summen']['summe']['mwst'] == 0:
             self.abschluss['summe_transit'] += b['kassenbewegung']
         else:
             self.abschluss['summe_brutto'] += b['summen']['summe'][
                 'brutto']
             self.abschluss['summe_netto'] += b['summen']['summe']['netto']
             self.abschluss['summe_mwst'] += b['summen']['summe']['mwst']
             self.abschluss['summe_bar'] += b['kassenbewegung']
         self.abschluss['letzterbeleg'] = b['id']
     infotext += 'Umsatz brutto: %s\nUmsatz netto: %s\nMwSt: %s\n\nSumme der Barzahlungen: %s\n\nSumme der Transitbuchungen: %s\n' % (
         getMoneyValue(self.abschluss['summe_brutto']),
         getMoneyValue(self.abschluss['summe_netto']),
         getMoneyValue(self.abschluss['summe_mwst']),
         getMoneyValue(self.abschluss['summe_bar']),
         getMoneyValue(self.abschluss['summe_transit']))
     self.__kassenstand_berechnet = kassenstand
     self.ui.infotext.setText(infotext)
Пример #5
0
    def calculate(self, foo=None):
        _summe = 0.0
        _scheine = 0.0
        summe_500 = self.ui.count_500.value() * 500
        self.ui.summe_500.setText(getMoneyValue(summe_500))
        _summe += summe_500
        _scheine += summe_500
        summe_200 = self.ui.count_200.value() * 200
        self.ui.summe_200.setText(getMoneyValue(summe_200))
        _summe += summe_200
        _scheine += summe_200
        summe_100 = self.ui.count_100.value() * 100
        self.ui.summe_100.setText(getMoneyValue(summe_100))
        _summe += summe_100
        _scheine += summe_100
        summe_50 = self.ui.count_50.value() * 50
        self.ui.summe_50.setText(getMoneyValue(summe_50))
        _summe += summe_50
        _scheine += summe_50
        summe_20 = self.ui.count_20.value() * 20
        self.ui.summe_20.setText(getMoneyValue(summe_20))
        _summe += summe_20
        _scheine += summe_20
        summe_10 = self.ui.count_10.value() * 10
        self.ui.summe_10.setText(getMoneyValue(summe_10))
        _summe += summe_10
        _scheine += summe_10
        summe_5 = self.ui.count_5.value() * 5
        self.ui.summe_5.setText(getMoneyValue(summe_5))
        _summe += summe_5
        _scheine += summe_5

        self.ui.summe_scheine.setText(getMoneyValue(_scheine))

        _muenzen = 0.0
        summe_2 = self.ui.count_2.value() * 2
        self.ui.summe_2.setText(getMoneyValue(summe_2))
        _summe += summe_2
        _muenzen += summe_2
        summe_1 = self.ui.count_1.value()
        self.ui.summe_1.setText(getMoneyValue(summe_1))
        _summe += summe_1
        _muenzen += summe_1
        summe_050 = 0.50 * self.ui.count_050.value()
        self.ui.summe_050.setText(getMoneyValue(summe_050))
        _summe += summe_050
        _muenzen += summe_050
        summe_020 = 0.20 * self.ui.count_020.value()
        self.ui.summe_020.setText(getMoneyValue(summe_020))
        _summe += summe_020
        _muenzen += summe_020
        summe_010 = 0.10 * self.ui.count_010.value()
        self.ui.summe_010.setText(getMoneyValue(summe_010))
        _summe += summe_010
        _muenzen += summe_010
        summe_005 = 0.05 * self.ui.count_005.value()
        self.ui.summe_005.setText(getMoneyValue(summe_005))
        _summe += summe_005
        _muenzen += summe_005
        summe_002 = 0.02 * self.ui.count_002.value()
        self.ui.summe_002.setText(getMoneyValue(summe_002))
        _summe += summe_002
        _muenzen += summe_002
        summe_001 = 0.01 * self.ui.count_001.value()
        self.ui.summe_001.setText(getMoneyValue(summe_001))
        _summe += summe_001
        _muenzen += summe_001

        self.kassenbestand = _summe

        self.ui.summe_muenzen.setText(getMoneyValue(_muenzen))
        self.ui.summe_alles.setText(getMoneyValue(self.kassenbestand))
        self.ui.kassenstand_berechnet.setText(
            getMoneyValue(self.__kassenstand_berechnet))
        self.ui.differenz.setText(
            getMoneyValue(self.kassenbestand - self.__kassenstand_berechnet))
Пример #6
0
def send_sms(vorgang):
    import socket, os

    conf = config('sms')

    HOST = conf['host']
    PORT = conf['port']

    SENT = conf['sentfolder']

    if not os.path.exists(SENT):
        os.makedirs(SENT)
    sent = open(
        os.path.join(SENT,
                     datetime.datetime.now().isoformat().replace(':', '-')),
        'wb')

    userkey = conf['userkey']
    password = conf['password']
    originator = conf[
        'number']  # diese Nummer ist bei aspsms.com für uns freigeschaltet

    recipients = vorgang.getTelefon().split(' / ')
    recipient = None
    for r in recipients:
        if r.startswith('01'):
            recipient = '+49' + r[1:]
            break

    if not recipient:
        raise ValueError('Keine Handynummer eingetragen!')

    recipient = recipient.replace('-', '').replace('.', '')

    text = u"Ihr Saft ist fertig. Möglichst zeitnahe Abholung bitte telefonisch absprechen. Gesamtbetrag: %s (%i Liter). Mosterei Wurst" % (
        getMoneyValue(vorgang.getSumme()), vorgang.getLiterzahl())

    text = text.replace(u'€', 'EUR')
    text = text.replace('<', '&lt;').replace('>', '&gt;')

    msgid = vorgang.ID
    if not msgid:
        msgid = '0000'

    CONTENT = u"""<?xml version="1.0" encoding="UTF-8"?>
    <aspsms>
      <Userkey>""" + str(userkey) + u"""</Userkey>
      <Password>""" + str(password) + u"""</Password>
      <Originator>""" + str(originator) + u"""</Originator>
      <Recipient>
        <PhoneNumber>""" + str(recipient) + u"""</PhoneNumber>
        <TransRefNumber>""" + str(msgid) + u"""</TransRefNumber>
      </Recipient>
      <MessageData>""" + str(text) + u"""</MessageData>
      <Action>SendTextSMS</Action>
      <URLBufferedMessageNotification>http://sms.mosterei-wurst.de/feedback.py?status=buffered&amp;vorgang=</URLBufferedMessageNotification> 
      <URLDeliveryNotification>http://sms.mosterei-wurst.de/feedback.py?status=delivered&amp;vorgang=</URLDeliveryNotification>
      <URLNonDeliveryNotification>http://sms.mosterei-wurst.de/feedback.py?status=error&amp;vorgang=</URLNonDeliveryNotification>
    </aspsms>
    """

    sent.write(CONTENT.encode('utf-8'))

    length = len(CONTENT)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    s.send(b"POST /xmlsvr.asp HTTP/1.0\r\n")
    s.send(b"Content-Type: text/xml\r\n")
    s.send(("Content-Length: " + str(length) + "\r\n\r\n").encode('ascii'))
    s.send(CONTENT.encode('utf-8'))
    datarecv = s.recv(1024)
    sent.write(('''
    Reply Received: 
    ''' + str(datarecv)).encode('utf-8'))
    s.close()
    sent.close()
Пример #7
0
def BelegHTML(vorgang, public=True):
    fussnoten = {}

    def fussnote(msg):
        candidate = 1
        while candidate in fussnoten:
            if fussnoten[candidate] == msg:
                return u'<sup style="color: red;">%i</sup>' % candidate
            candidate += 1
        fussnoten[candidate] = msg
        return u'<sup style="color: red;">%i</sup>' % candidate

    html = ''
    if not public:
        name = vorgang.getKundenname()
        html += '<h3>' + name + '</h3>\n'

        html += '<p>&nbsp;</p>\n'

    datumswerte = set()
    for item in vorgang.getEntries():
        datumswerte.add(item.getDatum())

    posten = {}
    for item in vorgang.getEntries():
        if item.getDatum() not in posten.keys():
            posten[item.getDatum()] = []
        posten[item.getDatum()].append(item)
    for datum in sorted(posten.keys()):
        entries = posten[datum]
        if len(datumswerte) > 1:
            html += "<strong>Leistung vom %s</strong>\n" % datum.strftime(
                '%d. %m. %Y')
        for entry in entries:
            subject = entry['beschreibung']
            if not entry.autoupdate:
                subject = subject + fussnote('Kein Update aus der Preisliste')
            if not entry.preisliste_link:
                subject = subject + fussnote('Manuell eingegebener Artikel')
            html += '<p><strong>%s</strong></p>\n' % subject

            html += '<pre>'
            if entry['anzahl'] != 1 or entry['einheit'] not in ['', 'Psch.']:
                html += u'%6.0f' % entry['anzahl']
                ep = getMoneyValue(entry.getNormalpreis())
                fn = ''
                if not entry.istStandardpreis():
                    fn += fussnote('Manuell gesetzter Preis')
                elif entry.getRabattstufe(
                ) != entry.getAutomatischeRabattstufe():
                    fn += fussnote('Manuell gesetzte Rabattstufe')
                html += u' %-8sx %10s%s  =' % (entry['einheit'], ep, fn)
            else:
                html += ' ' * 32
            html += u'   %11s (%4.1f%%)</pre>\n' % (getMoneyValue(
                entry.getNormalsumme()), entry.getSteuersatz())

    html += u'<p style="font-size: 25pt; margin-top: 2em; font-weight: bold;">Gesamtbetrag: &nbsp; &nbsp; %11s </p>\n' % getMoneyValue(
        vorgang.getNormalsumme())

    zahlungen = vorgang.getZahlungen()
    if len(zahlungen) > 0:
        for z in zahlungen:
            bemerkung = ''
            if z['bemerkung']:
                bemerkung = ' (%s)' % z['bemerkung']
            html += u'<p>Zahlung (%s) am %s%s: %11s</p>' % (
                z['zahlart'], z['timestamp'], bemerkung,
                getMoneyValue(z['betrag']))
        html += u'<p style="font-size: 25pt; font-weight: bold;">Restbetrag: &nbsp; &nbsp; %11s </p>\n' % getMoneyValue(
            vorgang.getZahlbetrag())

    html += '<p>Gesamtmenge Bag-in-Box: %i Liter</p>\n' % vorgang.getLiterzahl(
    )
    if not public:
        html += '<hr />'
        html += '<p>Anzahl Paletten: <strong>%i</strong></p>\n' % vorgang.getPaletten(
        )
        if vorgang.getAbholung():
            html += '<p>Abholung: %s</p>\n' % vorgang.getAbholung()
        if vorgang.getTelefon():
            html += '<p>Telefon: %s</p>\n' % vorgang.getTelefon()

        if vorgang.getPayed():
            html += u'<p><strong>*** BEZAHLT ***</strong></p>'

        s = Speicher()
        anrufe = s.getAnrufe(vorgang)
        for anruf in anrufe:
            if anruf['ergebnis'] == 'erreicht':
                html += '<p>Anruf %s - Erreicht - %s</p>\n' % (
                    anruf['timestamp'], anruf['bemerkung'])
            elif anruf['ergebnis'] == 'ab':
                html += '<p>Anruf %s - AB</p>\n' % (anruf['timestamp'], )
            elif anruf['ergebnis'] == 'nichterreicht':
                html += '<p>Anruf %s - NICHT erreicht</p>\n' % (
                    anruf['timestamp'], )
            else:
                html += '<p>Anruf %s - %s</p>\n' % (anruf['ergebnis'],
                                                    anruf['timestamp'])

    for key, msg in fussnoten.items():
        html += '<p>%i: %s</p>' % (key, msg)

    return html
Пример #8
0
 def bar(self):
     bemerkung = None
     if self.gegeben == 0 and self.betrag != 0:
         QtWidgets.QMessageBox.warning(self, 'Zahlungsbetrag eingeben!', 'Bitte zuerst den Zahlungsbetrag eingeben!', buttons=QtWidgets.QMessageBox.Ok)
         return
     if self.gegeben < self.betrag:
         choice = QtWidgets.QMessageBox.warning(self, u'Anzahlung geleistet?', u'Hat der Kunde nur eine Anzahlung über %s geleistet?' % _formatPrice(self.gegeben), buttons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No | QtWidgets.QMessageBox.Cancel, defaultButton=QtWidgets.QMessageBox.Cancel)
         if choice == QtWidgets.QMessageBox.Cancel:
             return
         elif choice == QtWidgets.QMessageBox.Yes:
             bemerkung = 'Anzahlung'
         elif choice == QtWidgets.QMessageBox.No:
             rabatt = self.betrag - self.gegeben
             choice = QtWidgets.QMessageBox.warning(self, u'Beleg damit bezahlt?', u'Ist der Beleg mit einer Zahlung über %s bezahlt?\nDas entspricht einem Rabatt von %s' % (getMoneyValue(self.gegeben), getMoneyValue(rabatt)), buttons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, defaultButton=QtWidgets.QMessageBox.No)
             if choice == QtWidgets.QMessageBox.Yes:
                 self.vorgang.newItem(anzahl=1, beschreibung='Zahlungsrabatt', einzelpreis=-rabatt, steuersatz=19.0, datum=datetime.date.today())
                 self.vorgang.setPayed(True)
                 self.speicher.speichereVorgang(self.vorgang)
     self.zahlung(self.gegeben, 'bar', bemerkung)
Пример #9
0
 def ec(self):
     if self.gegeben == 0:
         self.gegeben = self.betrag
     if self.gegeben > self.betrag:
         trinkgeld = self.gegeben - self.betrag
         if QtWidgets.QMessageBox.Yes == QtWidgets.QMessageBox.warning(self, 'Zahlbetrag zu hoch', 'Zahlbetrag liegt über dem Rechnungsbetrag. Soll der Betrag von %s als Trinkgeld verbucht werden?' % getMoneyValue(trinkgeld), buttons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, defaultButton=QtWidgets.QMessageBox.Yes):
             # FIXME: Wie verbuchen wir das?!
             self.gegeben = self.betrag
         else:
             # Was machen wir dann?
             pass
     if QtWidgets.QMessageBox.Yes == QtWidgets.QMessageBox.warning(self, u'Per EC bezahlt?', u'Wurde die Zahlung über %s vom EC-Gerät bestätigt?' % getMoneyValue(self.gegeben), buttons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, defaultButton=QtWidgets.QMessageBox.Yes):
         self.zahlung(betrag=self.gegeben, zahlart='ec')