def writeContent(self, trans=None): # # this servlet creates and stores a new Transfer # globalSetVars = self._globalSetVars store = globalSetVars['store'] account = self.transaction.request().field('account','') index = self.transaction.request().field('index',0) page = self.transaction.request().field('page','Main') # # test for errors and consistency # if not self.transaction.request().field('name',''): self.transaction.response().sendRedirect(string.split(self.transaction.request().environ()['HTTP_REFERER'],'?')[0] + '?id=%s&index=%s&error=Bitte einen Zahlungsempfänger angeben' % (account,index)) elif (DateTime.DateTimeFrom(self.transaction.request().field('date',DateTime.now())).year > (DateTime.now().year + 2)) or \ (DateTime.DateTimeFrom(self.transaction.request().field('date',DateTime.now())).year < (DateTime.now().year - 5)): self.transaction.response().sendRedirect(string.split(self.transaction.request().environ()['HTTP_REFERER'],'?')[0] + '?id=%s&index=%s&error=das Buchungsdatum scheint nicht korrekt zu sein' % (account,index)) elif float(string.replace(self.transaction.request().field('Haben','0,0'),',','.')) < 0.0: self.transaction.response().sendRedirect(string.split(self.transaction.request().environ()['HTTP_REFERER'],'?')[0] + '?id=%s&index=%s&error=das Haben darf nicht negativ sein' % (account,index)) elif float(string.replace(self.transaction.request().field('Soll','0,0'),',','.')) < 0.0: self.transaction.response().sendRedirect(string.split(self.transaction.request().environ()['HTTP_REFERER'],'?')[0] + '?id=%s&index=%s&error=das Soll darf nicht negativ sein' % (account,index)) elif (float(string.replace(self.transaction.request().field('Soll','0,0'),',','.')) == 0.0) and (float(string.replace(self.transaction.request().field('Haben','0,0'),',','.')) == 0.0): self.transaction.response().sendRedirect(string.split(self.transaction.request().environ()['HTTP_REFERER'],'?')[0] + '?id=%s&index=%s&error=Haben oder Soll müssen einen Wert haben' % (account,index)) elif (float(string.replace(self.transaction.request().field('Soll','0,0'),',','.')) != 0.0) and (float(string.replace(self.transaction.request().field('Haben','0,0'),',','.')) != 0.0): self.transaction.response().sendRedirect(string.split(self.transaction.request().environ()['HTTP_REFERER'],'?')[0] + '?id=%s&index=%s&error=entweder Haben oder Soll darf einen Wert haben' % (account,index)) else: # konto = self.transaction.request().field('konto','') if not konto: bookingObjects = store.fetchObjectsOfClass('Prices','WHERE BKZ="%s"' % self.transaction.request().field('bkz','')) attrs = bookingObjects[0].allAttrs(0) konto = attrs['Konto'] # # create transfer object # transfer = Transfers() transfer.setTAID(self.getSite() + DateTime.now().strftime("%Y%m%d%H%M%S") + "%04d" % UniqueID.next()) transfer.setTransferID(account + "_" + self.transaction.request().field('bkz','')) transfer.setImportWho(self.transaction.request().field('name','')) transfer.setImportBeschreibung(string.strip(self.transaction.request().field('description','') + ' ' + self.transaction.request().field('notice',''))) transfer.setBeschreibung(string.strip(self.transaction.request().field('description','') + ' ' + self.transaction.request().field('notice',''))) transfer.setWho(self.transaction.request().field('name','')) if account < konto: transfer.setHaben(float(string.replace(self.transaction.request().field('Haben','0,0'),',','.'))) transfer.setSoll(float(string.replace(self.transaction.request().field('Soll','0,0'),',','.'))) transfer.setKonto1(account) transfer.setKonto2(konto) else: transfer.setHaben(float(string.replace(self.transaction.request().field('Soll','0,0'),',','.'))) transfer.setSoll(float(string.replace(self.transaction.request().field('Haben','0,0'),',','.'))) transfer.setKonto1(konto) transfer.setKonto2(account) transfer.setChangedBy(self.transaction.session().value('authenticated_user','')) transfer.setChangedAt(DateTime.now()) transfer.setJahr(DateTime.DateTimeFrom(self.transaction.request().field('date',DateTime.now())).year) transfer.setDatum(DateTime.DateTimeFrom(self.transaction.request().field('date',DateTime.now()))) transfer.setBKZ(self.transaction.request().field('bkz','')) transfer.setChangedOn(self.getSite()) # # calculate the rest # # # store transfer in database # store.addObject(transfer) try: store.saveChanges() except OperationalError,x: store.discardEverything() errorCode,errorText = x # # back to error page # self.transaction.response().sendRedirect('Error?problem=Daten+konnten+nicht+gespeichert+werden!&reason=' + urlEncode(str(errorText))) except Warning,x: pass
def writeContent(self, trans=None): # # get the year for which the new saldos have to be calculated # try: year = int(self.transaction.request().field('year','')) except ValueError: self.transaction.response().sendRedirect('Administration') else: globalSetVars = self._globalSetVars store = globalSetVars['store'] # # remove old saldos from next year # storeObjects = store.fetchObjectsOfClass(self.storeName,'WHERE Jahr="%s" AND (BKZ="SVH" OR BKZ = "SVS")' % str(year+1)) for x in storeObjects: store.deleteObject(x) store.saveChanges() # # calculate new saldos from given year # transfers = store.fetchObjectsOfClass(self.storeName,'WHERE Jahr="%s" ORDER BY Datum' % str(year)) saldos = {} for transfer in transfers: x = transfer.allAttrs(0) if saldos.has_key(x['Konto1']): saldo = saldos[x['Konto1']] else: saldo = 0.0 if x['Haben'] != 0.0: saldo = saldo + x['Haben'] if x['Soll'] != 0.0: saldo = saldo - x['Soll'] if saldo != 0.0: saldos[x['Konto1']] = saldo elif saldos.has_key(x['Konto1']): del saldos[x['Konto1']] if (x['Konto1'] != x['Konto2']): if saldos.has_key(x['Konto2']): saldo = saldos[x['Konto2']] else: saldo = 0.0 if x['Haben'] != 0.0: saldo = saldo - x['Haben'] if x['Soll'] != 0.0: saldo = saldo + x['Soll'] if saldo != 0.0: saldos[x['Konto2']] = saldo elif saldos.has_key(x['Konto2']): del saldos[x['Konto2']] # # store new saldos # for x in saldos.keys(): if x[:2] in self.accountStores.keys(): # # create transfer object # member = store.fetchObjectsOfClass(self.accountStores[x[:2]],'WHERE ID="%s"' % x) if member: attrs = member[0].allAttrs(0) transfer = Transfers() transfer.setTAID(self.getSite() + DateTime.now().strftime("%Y%m%d%H%M%S") + "%04d" % UniqueID.next()) if attrs.has_key('Firma') and attrs['Firma']: transfer.setImportWho(attrs['Firma']) transfer.setWho(attrs['Firma']) elif attrs.has_key('Bank'): transfer.setImportWho(attrs['Bank']) transfer.setWho(attrs['Bank']) elif attrs.has_key('Name'): transfer.setImportWho(attrs['Name']) transfer.setWho(attrs['Name']) else: transfer.setImportWho(attrs['Nachname'] + ', ' + attrs['Vorname']) transfer.setWho(attrs['Nachname'] + ', ' + attrs['Vorname']) transfer.setImportBeschreibung('Saldovortrag aus %i' % year) transfer.setBeschreibung('Saldovortrag aus %i' % year) if saldos[x] > 0.0: transfer.setBKZ('SVH') transfer.setTransferID(x + "_SVH") if year+1 == 2002: transfer.setHaben(round(saldos[x] / 1.95583,2)) else: transfer.setHaben(saldos[x]) transfer.setSoll(0.0) else: transfer.setBKZ('SVS') transfer.setTransferID(x + "_SVS") transfer.setHaben(0.0) if year+1 == 2002: transfer.setSoll(0.0 - round(saldos[x] / 1.95583,2)) else: transfer.setSoll(0.0 - saldos[x]) transfer.setKonto1(x) transfer.setKonto2(x) transfer.setChangedBy(self.transaction.session().value('authenticated_user','')) transfer.setChangedAt(DateTime.now()) transfer.setJahr(year+1) transfer.setDatum(DateTime.DateTimeFrom('31.12.' + str(year))) transfer.setChangedOn(self.getSite()) store.addObject(transfer) store.saveChanges() self.transaction.response().sendRedirect('Administration')