def render(self): session = ISession(self.request, None) if session is None: return None utils = getToolByName(self, "plone_utils") url = self.context.absolute_url() + '/' + MEGABANKVIEW_URL responseCode = self.request['responseCode'] transactionId = self.request['transactionId'] bank = Bank() if responseCode == 'Cancel': # the person pressed Cacel or error occured # TODO: Kontrollera att Megabank lyckas med cancel, lägg till i meddeelande result = bank.cancelOnlineTransaction(transactionId) utils.addPortalMessage(_(u'Betalningen avbröts'), 'info') return self.request.response.redirect(url) if responseCode == 'OK': # The PSP performed payment # TODO: Kontrollera att Megabank lyckas med commit, lägg till i meddeelande # Remove payed invoices from session's selected_invoices session[SessionKeys.selected_invoices] = [] result = bank.commitOnlineTransaction(transactionId) utils.addPortalMessage(_(u'Betalningen genomfördes'), 'info') return self.request.response.redirect(url)
def myinfo(self): user = api.user.get_current() fullname = user.getProperty('fullname') if type(fullname).__name__ == 'object': fullname = None portrait = user.portal_memberdata.getPersonalPortrait() #import pdb;pdb.set_trace() info = {'name': fullname, 'clubs': ['BB', 'CC', 'DD'], 'portrait': portrait} if self.megabankisinstalled: from hejasverige.megabank.bank import Bank pid = api.user.get_current().getProperty('personal_id') # if field is not defined as a personal property it becomes an object and the bank fails to load if type(pid).__name__ == 'object': info['balance'] = 'error' info['amount_pending'] = 'error' else: import locale locale.setlocale(locale.LC_ALL, 'sv_SE.utf-8') try: accountinfo = Bank().getAccount(personalid=pid, context=self) info['balance'] = locale.currency(accountinfo.get('Balance', None), grouping=True) info['amount_pending'] = locale.currency(accountinfo.get('AmountPending', None), grouping=True) except: info['balance'] = 'conerror' info['amount_pending'] = 'conerror' #import pdb; pdb.set_trace() return info
def myinfo(self): info = {} pid = api.user.get_current().getProperty('personal_id') #import pdb; pdb.set_trace() try: accountinfo = Bank().getAccount(personalid=pid, context=self) info['pid'] = pid info['balance'] = accountinfo.get('Balance', None) info['amount_pending'] = accountinfo.get('AmountPending', None) info['amount_to_pay'] = self.session()[SessionKeys.selected_amount] except: pass return info
def sendInvoice(obj, pos_transition, neg_transition=None): # read invoice info bank = Bank() workflowTool = getToolByName(obj, 'portal_workflow') logger.debug("getToolByName says: %s" % workflowTool) result = None createInvoiceResult = '' try: result = bank.createInvoice(obj) createInvoiceResult = str(result) except Exception, ex: createInvoiceResult = 'Det gick inte att skapa en faktura i banken: %s' % str(ex) logger.error(createInvoiceResult)
def update(self): logger = logging.getLogger("transactionsviewlet") s = Settings() settings = s.getSettings() user = api.user.get_current() pid = user.getProperty('personal_id') # if field is not defined as a personal property it becomes an object and the bank fails to load if type(pid).__name__=='object': pid = None self.hasTransactions = False self.hasAccount = False self.hasConnectionError = False if pid: logger.info('List transactions for ' + str(user)) # verify that the megabank settings are made before requesting... # Create new bank try: logger.info('Creating Bank') bank = Bank(settings=settings) except: logger.exception('Unable to create the Bank...') if bank: try: self.transactions = bank.getTransactions(personalid=pid) if self.transactions: self.hasTransactions = True except ConnectionError: self.hasConnectionError = True logger.info("Connection Error") except Timeout: self.hasConnectionError = True logger.info("Timeout") else: self.hasTransactions = False logger.info("User %s has no personal_id", str(user))
def getAccount(event): logger.info("Will make sure %s has an account." % event.principal.getId()) bank = Bank() #import pdb; pdb.set_trace() personal_id = event.principal.getProperty('personal_id') if type(personal_id).__name__ == 'object': personal_id = None fullname = event.principal.getProperty('fullname') if personal_id: try: result = bank.getAccount(personal_id) except Exception, ex: logger.exception('Unable to access the bank. User account could not be checked: %s' % (str(ex))) # problems accessing the bank #pass else: if not result: # user had no account in the bank # create account result = bank.createAccount(personalid=personal_id, name=fullname)
def update(self): """ Renders the view """ session = ISession(self.request, None) if session is None: return None if 'form.button.Submit' in self.request: #import pdb; pdb.set_trace() authenticator = getMultiAdapter((self.context, self.request), name=u"authenticator") if not authenticator.verify(): raise Forbidden() utils = getToolByName(self, "plone_utils") url = self.url() if float(self.request['points_amount']) > float(self.myinfo().get('balance')): utils.addPortalMessage(_('Angivna poäng är fler än du har.'), 'error') return self.request.response.redirect(url) if float(self.request['points_amount']) + float(self.request['card_amount']) != float(self.myinfo().get('amount_to_pay')): utils.addPortalMessage(_('Totalbeloppet är inte korrekt.'), 'error') return self.request.response.redirect(url) if float(self.request['points_amount']) < 0: utils.addPortalMessage(_('Antalet poäng får ej vara mindre än 0'), 'error') return self.request.response.redirect(url) if float(self.request['card_amount']) < 0: utils.addPortalMessage(_('Kortbelopp får ej vara mindre än 0'), 'error') return self.request.response.redirect(url) bank = Bank() obj = dict() obj['amount'] = float(self.request['card_amount']) if len(session[SessionKeys.selected_invoices]) > 1: invoiceword = 'fakturor' else: invoiceword = 'faktura' obj['description'] = "Onlinebetalning av %s (%s) " % (invoiceword, ", ".join([x.get('invoiceno') for x in session[SessionKeys.selected_invoices]])) obj['invoices'] = [int(x.get('id')) for x in session[SessionKeys.selected_invoices]] obj['url'] = self.context.absolute_url() + '/@@psplandingpage' pid = self.myinfo().get('pid') try: result = bank.registerOnlineTransaction(obj, pid) #import pdb; pdb.set_trace() except Exception, ex: error_message = u'Kunde inte kontakta banken. Betalningen kunde inte registreras.' logger.error(error_message + ' Ex: %s' % (str(ex))) utils.addPortalMessage(_(result.get(error_message)), 'error') return self.request.response.redirect(url) pass else: if result: try: redir_url = result.get('Url', None) if redir_url: return self.request.response.redirect(redir_url) except: pass utils.addPortalMessage(_(u'Banken svarade dåligt. Ingen betalning kan genomföras.'), 'error') return self.request.response.redirect(url)