コード例 #1
0
    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)
コード例 #2
0
ファイル: profile.py プロジェクト: Adniel/hejasverige.content
    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        
コード例 #3
0
    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
コード例 #4
0
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)
コード例 #5
0
    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))
コード例 #6
0
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)
コード例 #7
0
    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)