def ticket(ticket, random, product, sig1, sig2): if random is None: random = ticket & 0xffffffff ticket = ObjectId('%024x' % (ticket >> 32)) accounting.templating.formatters.apply(current_app.jinja_env, 'datetime') autovoid = bool(json.loads(request.cookies.get('autovoid', 'false')) or request.values.get('autovoid')) with ReadonlyContext(g.database) as ctx: ticket = blm.members.Ticket._query(id=ticket, random=random).run() if not ticket: resp = make_response( render_template('ticket.html', ticket=None, canvoid=bool(g.user), autovoid=autovoid)) resp.set_cookie('autovoid', json.dumps(autovoid), path='/ticket', expires=time.time() + 24 * 3600) return resp ticket, = ticket if 'print' in request.values: return redirect(url_for('getTicket', ticket=ticket.id[0], random=base64long.encode(ticket.random[0]))) canvoid = False voided = False if g.user: canvoid = ticket.canWrite(g.user, 'void') if canvoid: if 'unvoid' in request.values: interested = 'ticket-unvoid-%s' % ObjectId() with CommitContext(g.database, g.user) as ctx: op = CallToi(ticket.id[0], 'unvoid', []) ctx.runCommit([op], interested) result, error = wait_for_commit(g.database, interested) if error: raise error elif autovoid or 'void' in request.values: interested = 'ticket-void-%s' % ObjectId() with CommitContext(g.database, g.user) as ctx: op = CallToi(ticket.id[0], 'void', []) ctx.runCommit([op], interested) result, error = wait_for_commit(g.database, interested) voided = result[0][0] if error: raise error resp = make_response( render_template( 'ticket.html', ticket=ticket, canvoid=canvoid, autovoid=autovoid, voided=voided, ticket_url=url_for('ticket_simple', _external=True) ) ) resp.set_cookie('autovoid', json.dumps(autovoid), path='/ticket', expires=time.time() + 24 * 3600) return resp
def process_file(database, fname): if PYT3: with open(fname, 'r', encoding='iso-8859-1') as f: data = f.read() else: with open(fname, 'r') as f: data = f.read() interested_id = ObjectId() with CommitContext(database) as ctx: interested = 'import-payment-%s' % interested_id op = CreateToi('members.PGPaymentFile', None, attrData=dict(fileName=[os.path.basename(fname)], data=[data])) ctx.runCommit([op], interested=interested) (toid, ), error = wait_for_commit(database, interested=interested) if error: raise error with CommitContext(database) as ctx: interested = 'process-payment-file-%s' % interested_id op = CallToi(toid, 'process', []) ctx.runCommit([op], interested=interested) _, error = wait_for_commit(database, interested=interested) if error: raise error with ReadonlyContext(database): for paymentFile in blm.members.PGPaymentFile._query(id=toid).run(): for payment in paymentFile.payments: paymentId = payment.id[0] interested = 'match-payment-%s-%s' % (interested_id, paymentId) with CommitContext(database) as ctx: op = CallToi(paymentId, 'match', []) ctx.runCommit([op], interested) _, error = wait_for_commit(database, interested=interested) if error: raise error with ReadonlyContext(database): for payment in blm.members.PGPayment._query(paymentFile=toid).run(): paymentId = payment.id[0] interested = 'send-payment-confirmation-%s-%s' % (paymentId, ObjectId()) with CommitContext(database) as ctx: op = CallToi(paymentId, 'sendConfirmationEmail', []) ctx.runCommit([op], interested) _, error = wait_for_commit(database, interested=interested) if error: raise error archive_file(fname)
def process_file(database, fname): if PYT3: with open(fname, 'r', encoding='iso-8859-1') as f: data = f.read() else: with open(fname, 'r') as f: data = f.read() print('Processing file ', fname) interested_id = ObjectId() with CommitContext(database) as ctx: interested = 'import-bgcreport-%s' % interested_id op = CreateToi('accounting.BgcReport', None, attrData=dict(filename=[os.path.basename(fname)], multiline=[data])) ctx.runCommit([op], interested=interested) (toid, ), error = wait_for_commit(database, interested=interested) if error: raise error with CommitContext(database) as ctx: interested = 'process-bgc-report-{}', interested_id op = CallToi(toid, 'process_data', []) ctx.runCommit([op], interested=interested) _, error = wait_for_commit(database, interested=interested) if error: raise error
def process(database): with ReadonlyContext(database): for order in blm.accounting.PGOrder._query(sent=[False]).run(): with CommitContext.clone() as ctx: op = CallToi(order.id[0], 'send', []) interested = 'sendpg-%s' % ObjectId() ctx.runCommit([op], interested) result, error = wait_for_commit(database, interested) if error: raise error
def poll(database, providerId, purchaseId, invoiceRef): client, context, seqr_protocol = get_client_and_context(providerId, purchaseId, database=database) response = call_method(client.service.getPaymentStatus, context, invoiceRef) if response.resultCode == 0 and response.status == 'PAID': with CommitContext(database) as ctx: purchase, = blm.members.BasePurchase._query(id=purchaseId).run() op = CreateToi( 'members.SeqrPayment', None, dict(paymentProvider=[providerId], matchedPurchase=[purchase], amount=[response.receipt.invoice.totalAmount.value], paymentDate=[ datetime_to_epoch(response.receipt.paymentDate) ], invoiceReference=[response.receipt.invoiceReference], ersReference=[response.ersReference], paymentReference=[response.receipt.paymentReference], payerTerminalId=[response.receipt.payerTerminalId], receiverName=[ r for r in [response.receipt.receiverName] if r ])) interested = 'seqr-%s' % ObjectId() commit = ctx.runCommit([op], interested=interested) result, error = wait_for_commit(database, interested=interested) if error: raise error receiptDoc = client.factory.create('ns0:receiptDocument') receiptDoc.mimeType = 'text/plain' receiptDoc.receiptData = '' receiptDoc.receiptType = '' receipt_response = call_method(client.service.submitPaymentReceipt, context, response.ersReference, receiptDoc) paymentId = result[0] with CommitContext(database) as ctx: op = CallToi(paymentId, 'sendConfirmationEmail', []) interested = 'send-seqr-payment-confirmation-%s' % ObjectId() commit = ctx.runCommit([op], interested=interested) result, error = wait_for_commit(database, interested=interested) if error: raise error return jsonify({ 'resultCode': response.resultCode, 'status': response.status })
def acceptInvitation(user, code): with ReadonlyContext(g.database): q = blm.accounting.Invitation._query(inviteCode=code) for invitation in q.run(): user, = blm.accounting.User._query(id=user.id).run() op = CallToi(invitation.id[0], 'accept', [[user]]) interested = ObjectId() with CommitContext.clone() as ctx: ctx.runCommit([op], interested=interested) result, error = wait_for_commit(g.database, interested) if error: return redirect(url_for('invitation_expired'))
def update_payment(token, database, purchase=None, provider=None): log.info('Payson update') with ReadonlyContext(database): if blm.members.PaysonPayment._query(token=token).run(): log.info('Payment %s already registered, aborting.', token) return if not provider: purchase, = blm.members.Purchase._query(id=purchase, _attrList=['org']).run() provider = blm.accounting.PaysonProvider._query( org=purchase.org).run()[0] api = payson.PaysonApi(provider.apiUserId[0], provider.apiPassword[0]) payData = api.payment_details(token) if payData.status == 'COMPLETED': with CommitContext(database) as ctx: purchase, = blm.members.Purchase._query( id=payData.trackingId).run() op = CreateToi( 'members.PaysonPayment', None, dict(paymentProvider=[provider], matchedPurchase=[purchase], amount=[payData.receiverList[0].amount], purchaseId=[payData.purchaseId], senderEmail=[payData.senderEmail], token=[payData.token], receiverFee=[payData.receiverFee], receiverEmail=[payData.receiverList[0].email], type=[payData.type])) interested = 'payson-%s' % ObjectId() commit = ctx.runCommit([op], interested=interested) result, error = wait_for_commit(database, interested=interested) if error: raise error paymentId = result[0] with CommitContext(database) as ctx: op = CallToi(paymentId, 'sendConfirmationEmail', []) interested = 'send-payson-payment-confirmation-%s' % ObjectId() commit = ctx.runCommit([op], interested=interested) result, error = wait_for_commit(database, interested=interested) if error: raise error
def invite(): # xxx this shares a lot of code with accountingImport - think about generalising orgId = request.form['org'] interested = ObjectId() with CommitContext(g.database, g.user) as ctx: org, = blm.accounting.Org._query(id=orgId).run() ctx.setMayChange(True) email = request.form['email'] roles = request.form.getlist('roles') op = CallToi(ObjectId(orgId), 'invite', [[email], roles]) ctx.runCommit([op], interested=interested) result, errors = wait_for_commit(g.database, interested=interested) assert not errors, errors result = {'success': True} return jsonify(**result)
def getTickets(purchase, random=None): database = g.database.client.get_database( g.database.name, read_preference=pymongo.ReadPreference.PRIMARY) interested = 'get-tickets-%s' % ObjectId() with CommitContext(database) as ctx: toi, = blm.members.BasePurchase._query(id=purchase, random=random).run() op = CallToi(toi.id[0], 'maketickets', []) ctx.runCommit([op], interested=interested) result, error = wait_for_commit(database, interested) if error: raise error pdf = io.BytesIO() with ReadonlyContext(database) as ctx: tickets = blm.members.Ticket._query(id=result[0]).run() members.ticket.generate(pdf, tickets) return Response(response=pdf.getvalue(), mimetype='application/pdf')
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'])
(61, 80, 'T')], LBRejectedParser.payment_record_plusgiro), '25': ([(1, 80, 'T')], LBRejectedParser.faulty_record), '26': ([(1, 80, 'T')], LBRejectedParser.faulty_record), '27': ([(1, 80, 'T')], LBRejectedParser.faulty_record), '65': ([(1, 80, 'T')], LBRejectedParser.faulty_record), 'LB': ([(1, 80, 'T')], LBRejectedParser.faulty_record), '49': ([(3, 6, 'T'), (7, 10, 'T'), (11, 80, 'T')], LBRejectedParser.rejection_comment_record), '29': ([(3, 12, 'A'), (13, 20, 'I')], LBRejectedParser.end_record), } if __name__ == '__main__': import sys import accounting.db import members import blm.members database = accounting.db.connect() from pytransact.commit import CommitContext, CallToi with CommitContext(database) as ctx: ctx.setMayChange(True) pfile = blm.members.PGPaymentFile(data=sys.stdin, fileName='string') toid = pfile.id[0] pfile.process() ctx.runCommit([]) with CommitContext(database) as ctx: for payment in blm.members.PGPaymentFile._query(id=toid).run(): op = CallToi(toid, 'match', []) ctx.runCommit([op])