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))
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()
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()
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)
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))
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('<', '<').replace('>', '>') 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&vorgang=</URLBufferedMessageNotification> <URLDeliveryNotification>http://sms.mosterei-wurst.de/feedback.py?status=delivered&vorgang=</URLDeliveryNotification> <URLNonDeliveryNotification>http://sms.mosterei-wurst.de/feedback.py?status=error&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()
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> </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: %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: %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
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)
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')