Esempio n. 1
0
def webhook():
    data = request.get_json()
    log.info('WEBHOOK: %r', data)
    if not 'user_id' in data:
        return '' # Nothing we know what to do with
    with ReadonlyContext(g.database) as ctx:
        provider = blm.accounting.StripeProvider._query(stripe_id = data['user_id']).run()
        if not provider:
            return ''
        org_ug = provider[0].org[0].ug[0]

    interested = 'stripe-%s-%s-%s' % (data['type'], data['id'], ObjectId())
    with CommitContext(g.database, org_ug) as ctx:  # Use organisations permissions
        op = []
        if data['type'] == 'invoice.created':
            op.append(CallBlm('members', 'handleStripeInvoice', [[data], provider]))
        elif data['type'] == 'charge.succeeded':
            op.append(CallBlm('members', 'handleStripeCharge', [[data], provider]))
        elif data['type'] == 'invoice.payment_succeeded':
            pass
        ctx.runCommit(op, interested)
    _, error = wait_for_commit(g.database, interested)
    if error:
        raise error

    return ''
Esempio n. 2
0
def main():
    database = db.connect()
    interested = 'bootstrap-%s' % ObjectId()
    with CommitContext(database) as ctx:
        ctx.set_read_preference(pymongo.ReadPreference.PRIMARY)
        op = CallBlm('accounting', 'bootstrap', [])
        ctx.runCommit([op], interested=interested)
    result, error = wait_for_commit(database, interested)
    if error:
        raise error
Esempio n. 3
0
def import_products(org, products):
    import blm.members
    database = db.connect()
    interested = 'izettle-import-%s' % bson.objectid.ObjectId()
    with pytransact.commit.CommitContext(database) as ctx:
        ctx.setMayChange(True)
        op = CallBlm('members', 'import_izettle_products', [[org], [products]])
        ctx.runCommit([op], interested=interested)
        result, errors = pytransact.commit.wait_for_commit(
            database, interested=interested)
        assert not errors, errors
Esempio n. 4
0
def createOrders(database):
    with ReadonlyContext(database):
        for org in blm.accounting.identifyOrgsWithDueTransfers():
            supInvList = blm.accounting.identifyDueTransfers(org=org)
            with CommitContext.clone() as ctx:
                op = CallBlm('accounting', 'createSignedBgcOrder',
                             [[org], supInvList])
                interested = 'createSignedBgcOrder_org-%s_%s' % (org.id[0],
                                                                 ObjectId())
                ctx.runCommit([op], interested)
            result, error = wait_for_commit(database, interested)
            if error:
                raise error
Esempio n. 5
0
def import_transactions(org, transactionsfilename):
    with open(transactionsfilename) as f:
        filedata = f.read().encode('base64')
    import blm.members
    database = db.connect()
    interested = 'izettle-import-%s' % bson.objectid.ObjectId()
    with pytransact.commit.CommitContext(database) as ctx:
        ctx.setMayChange(True)
        op = CallBlm('members', 'import_izettle_payments', [[org], [filedata]])
        ctx.runCommit([op], interested=interested)
        result, errors = pytransact.commit.wait_for_commit(
            database, interested=interested)
        assert not errors, errors
Esempio n. 6
0
def invoice_credit(toid):
    interested = 'rest-invoice-credit-%s' % ObjectId()
    op = CallBlm('members', 'createCreditInvoice', [[toid]])
    with CommitContext(g.database, g.user) as ctx:
        ctx.runCommit([op], interested=interested)
    result, error = wait_for_commit(g.database, interested)
    if error:
        if isinstance(error, (PermissionError, AttrPermError)):
            raise Forbidden
        else:
            raise error
    toid = result[0][0]
    return {'id': toid}
Esempio n. 7
0
def sendOrders(database, out):
    with ReadonlyContext(database):
        for order in blm.accounting.BgcOrder._query(
                order_signed=NotEmpty(), sent=Empty()).run():
            with CommitContext.clone() as ctx:
                op = CallBlm('accounting', 'sendBgcOrder', [[order]])
                interested = 'sendBgcOrder_order-%s_%s' % (order.id[0],
                                                           ObjectId())
                ctx.runCommit([op], interested)
            result, error = wait_for_commit(database, interested)
            if error:
                raise error
            for r in result:
                out.write('Sent {}\n'.format(r))
Esempio n. 8
0
    def do_call(self, blmname, methodname, params):
        interested = 'direct-call-%s' % ObjectId()
        with CommitContext(self.database, self.user) as ctx:
            if params is None:
                params = []
            for i, param in enumerate(params):
                if not isinstance(param, list):
                    params[i] = [param]
            op = CallBlm(blmname, methodname, params)
            ctx.runCommit([op], interested=interested)

        with ReadonlyContext(self.database, self.user) as ctx:
            result, error = wait_for_commit(self.database, interested)
            assert not error, error
            return result[0]
Esempio n. 9
0
def import_products_file(org, filename):
    import blm.members
    with open(filename) as f:
        products = f.read().encode('base64')

    database = db.connect()
    interested = 'izettle-import-%s' % bson.objectid.ObjectId()
    with pytransact.commit.CommitContext(database) as ctx:
        ctx.setMayChange(True)
        op = CallBlm('members', 'import_izettle_products_file',
                     [[org], [products]])
        ctx.runCommit([op], interested=interested)
        result, errors = pytransact.commit.wait_for_commit(
            database, interested=interested)
        assert not errors, errors
Esempio n. 10
0
def invoice_create():
    interested = 'rest-invoice-create-%s' % ObjectId()
    try:
        data = flask.request.data.decode('utf-8')
    except AttributeError:
        data = flask.request.data
    op = CallBlm('members', 'invoice', [[json.loads(data)]])
    with CommitContext(g.database, g.user) as ctx:
        ctx.runCommit([op], interested=interested)
    result, error = wait_for_commit(g.database, interested)
    if error:
        if isinstance(error, (PermissionError, AttrPermError)):
            raise Forbidden
        else:
            raise error
    toid = result[0][0]['invoice']
    return {'id': toid}
Esempio n. 11
0
def create_profile():
    error = ''

    if request.method == 'POST':
        name = request.values['name']
        email = request.values['email']
        op = CallBlm('accounting', 'registerUser',
                     [[name], [email], [session['openid']]])

        interested = ObjectId()
        with CommitContext(g.database) as ctx:
            ctx.setMayChange(True)
            ctx.runCommit([op], interested=interested)

        result, error = wait_for_commit(g.database, interested)
        session['userid'] = result[0][0]
        del session['openid']
        return redirect(session.pop('login_next', request.url_root))

    return render_template('create_profile.html', error=error)
Esempio n. 12
0
def simulatePayment(provider, purchase):
    interested = 'simulatePayment-%s' % ObjectId()
    amount = request.values['amount']
    with CommitContext(g.database, g.user) as ctx:
        op = CallBlm('members', 'generateFakePayment',
                     [[provider], [purchase], [amount]])
        ctx.runCommit([op], interested=interested)
    result, error = wait_for_commit(g.database, interested)
    if error:
        raise error

    paymentId = result[0]
    with CommitContext(g.database) as ctx:
        op = CallToi(paymentId, 'sendConfirmationEmail', [])
        interested = 'send-sim-payment-confirmation-%s' % ObjectId()
        ctx.runCommit([op], interested=interested)
    result, error = wait_for_commit(g.database, interested=interested)
    if error:
        raise error

    return redirect(request.values['returnurl'])
Esempio n. 13
0
def accountingImport():
    orgId = request.form['org']

    interested = ObjectId()

    try:
        with CommitContext(g.database, g.user) as ctx:
            org, = blm.accounting.Org._query(id=orgId).run()
            ctx.setMayChange(True)
            data = BlobVal(request.files['siefile'])
            op = CallBlm('accounting', 'accountingImport', [[org], [data]])
            ctx.runCommit([op], interested=interested)
        result, errors = wait_for_commit(g.database, interested=interested)
        if errors:
            result = {'success': False}
            log.error('Error while importing SIE file: %s', errors)
        else:
            result = {'success': True, 'id': str(result[0][0])}
    except Exception:
        result = {'success': False}
        log.error('Error while importing SIE file', exc_info=True)
    return jsonify(**result)