def create(self, author, recipient, amount): sender = MangoUser.objects.get(user=author) receiver = MangoUser.objects.get(user=recipient) swid = MangoWallet.objects.get(mid=sender.mid).wid credwallet = MangoWallet.objects.get(mid=receiver.mid).wid rwid = credwallet.wid self.currency = credwallet.currency transfer = Transfer(AuthorId=sender.mid, DebitedFunds=Money(amount, self.currency), Fees=Money(self.fees, self.currency), DebitedWalletId=swid, CreditedWalletId=rwid) transfer.save() self.tid = transfer.get_pk() self.creation_date = transfer.execution_date self.author = sender.mid self.recipient = receiver.mid self.dwid = transfer.DebitedWalletId self.cwid = transfer.CreditedWalletId self.amount = amount self.status = transfer.status self.result_code = transfer.result_code self.result_message = transfer.result_message self.save()
def create(self): transfer = Transfer(AuthorId=self.saver.mid, DebitedFunds=Money(self.amount, self.currency), Fees=Money(msdfsdfsdfsdfsdf(self.amount*0.05), self.currency), DebitedWalletId=self.debited_cuenta.wid, CreditedWalletId=self.credited_cuenta.wid) transfer.save() self.tid = transfer.Id #try the Id thingy like this. self.execution_date = datetime.datetime.fromtimestamp(transfer.execution_date) self.save()
def initiate_transfer(db, t_id): amount, status = db.one( """ SELECT t.amount, t.status FROM transfers t WHERE t.id = %s AND t.status = 'pre' """, (t_id, )) assert status == 'pre', (t_id, status) tipper_wallet = db.one( """ SELECT w.remote_id, w.remote_owner_id FROM transfers t JOIN wallets w ON w.remote_id = t.wallet_from WHERE t.id = %s """, (t_id, )) tippee_wallet = db.one( """ SELECT w.remote_id, w.remote_owner_id FROM transfers t JOIN wallets w ON w.remote_id = t.wallet_to WHERE t.id = %s """, (t_id, )) tr = Transfer() tr.AuthorId = tipper_wallet.remote_owner_id tr.CreditedUserId = tippee_wallet.remote_owner_id tr.CreditedWalletId = tippee_wallet.remote_id tr.DebitedFunds = amount.int() tr.DebitedWalletId = tipper_wallet.remote_id tr.Fees = Money(0, amount.currency) tr.Tag = str(t_id) execute_transfer(db, t_id, tr) return tr
def transfer(db, tipper, tippee, amount, context, **kw): tipper_wallet = NS(remote_id=kw.get('tipper_wallet_id'), remote_owner_id=kw.get('tipper_mango_id')) if not all(tipper_wallet.__dict__.values()): tipper_wallet = Participant.from_id(tipper).get_current_wallet( amount.currency) tippee_wallet = NS(remote_id=kw.get('tippee_wallet_id'), remote_owner_id=kw.get('tippee_mango_id')) if not all(tippee_wallet.__dict__.values()): tippee_wallet = Participant.from_id(tippee).get_current_wallet( amount.currency, create=True) wallet_from = tipper_wallet.remote_id wallet_to = tippee_wallet.remote_id t_id = prepare_transfer( db, tipper, tippee, amount, context, wallet_from, wallet_to, team=kw.get('team'), invoice=kw.get('invoice'), bundles=kw.get('bundles'), unit_amount=kw.get('unit_amount'), ) tr = Transfer() tr.AuthorId = tipper_wallet.remote_owner_id tr.CreditedUserId = tippee_wallet.remote_owner_id tr.CreditedWalletId = wallet_to tr.DebitedFunds = amount.int() tr.DebitedWalletId = wallet_from tr.Fees = Money(0, amount.currency) tr.Tag = str(t_id) return execute_transfer(db, t_id, tr), t_id
def initiate_transfer(db, t_id): amount, status = db.one(""" SELECT t.amount, t.status FROM transfers t WHERE t.id = %s AND t.status = 'pre' """, (t_id,)) assert status == 'pre', (t_id, status) tipper_wallet = db.one(""" SELECT w.remote_id, w.remote_owner_id FROM transfers t JOIN wallets w ON w.remote_id = t.wallet_from WHERE t.id = %s """, (t_id,)) tippee_wallet = db.one(""" SELECT w.remote_id, w.remote_owner_id FROM transfers t JOIN wallets w ON w.remote_id = t.wallet_to WHERE t.id = %s """, (t_id,)) tr = Transfer() tr.AuthorId = tipper_wallet.remote_owner_id tr.CreditedUserId = tippee_wallet.remote_owner_id tr.CreditedWalletId = tippee_wallet.remote_id tr.DebitedFunds = Money_to_cents(amount) tr.DebitedWalletId = tipper_wallet.remote_id tr.Fees = Money(0, amount.currency) tr.Tag = str(t_id) execute_transfer(db, t_id, tr) return tr
def refund_transfer(db, remote_id): tr = Transfer.get(remote_id) t = db.one("SELECT * FROM transfers WHERE id = %s", (tr.Tag,)) refund_id = prepare_transfer( db, t.tippee, t.tipper, t.amount, 'refund', t.wallet_to, t.wallet_from, refund_ref=t.id ) refund = TransferRefund(Transfer=tr, AuthorId=tr.AuthorId, Tag=refund_id) execute_transfer(db, refund_id, refund)
def refund_transfer(db, remote_id): tr = Transfer.get(remote_id) t = db.one("SELECT * FROM transfers WHERE id = %s", (tr.Tag,)) refund_id = prepare_transfer( db, t.tippee, t.tipper, t.amount, 'refund', t.wallet_to, t.wallet_from, refund_ref=t.id ) refund = TransferRefund(Transfer=tr, AuthorId=tr.AuthorId, Tag=refund_id) execute_transfer(db, refund_id, refund)
def get_transfer(self): author = self.mangopay_debited_wallet.mangopay_user.get_user() debited_wallet = self.mangopay_debited_wallet.get_wallet() credited_user = self.mangopay_credited_wallet.mangopay_user.get_user() credited_wallet = self.mangopay_credited_wallet.get_wallet() return Transfer(id=self.mangopay_id, author=author, credited_user=credited_user, debited_funds=python_money_to_mangopay_money( self.debited_funds), fees=python_money_to_mangopay_money(self.fees), debited_wallet=debited_wallet, credited_wallet=credited_wallet)
def transfer(db, tipper, tippee, amount, context, **kw): tipper_wallet = NS(remote_id=kw.get('tipper_wallet_id'), remote_owner_id=kw.get('tipper_mango_id')) if not all(tipper_wallet.__dict__.values()): tipper_wallet = Participant.from_id(tipper).get_current_wallet(amount.currency) tippee_wallet = NS(remote_id=kw.get('tippee_wallet_id'), remote_owner_id=kw.get('tippee_mango_id')) if not all(tippee_wallet.__dict__.values()): tippee_wallet = Participant.from_id(tippee).get_current_wallet(amount.currency, create=True) wallet_from = tipper_wallet.remote_id wallet_to = tippee_wallet.remote_id t_id = prepare_transfer( db, tipper, tippee, amount, context, wallet_from, wallet_to, team=kw.get('team'), invoice=kw.get('invoice'), bundles=kw.get('bundles'), ) tr = Transfer() tr.AuthorId = tipper_wallet.remote_owner_id tr.CreditedUserId = tippee_wallet.remote_owner_id tr.CreditedWalletId = wallet_to tr.DebitedFunds = amount.int() tr.DebitedWalletId = wallet_from tr.Fees = Money(0, amount.currency) tr.Tag = str(t_id) return execute_transfer(db, t_id, tr), t_id
def transfer(db, tipper, tippee, amount, context, **kw): get = lambda id, col: db.one( "SELECT {0} FROM participants WHERE id = %s".format(col), (id, )) wallet_from = kw.get('tipper_wallet_id') or get(tipper, 'mangopay_wallet_id') wallet_to = kw.get('tippee_wallet_id') or get(tippee, 'mangopay_wallet_id') if not wallet_to: wallet_to = create_wallet(db, Participant.from_id(tippee)) t_id = prepare_transfer( db, tipper, tippee, amount, context, wallet_from, wallet_to, team=kw.get('team'), invoice=kw.get('invoice'), bundles=kw.get('bundles'), ) tr = Transfer() tr.AuthorId = kw.get('tipper_mango_id') or get(tipper, 'mangopay_user_id') tr.CreditedUserId = kw.get('tippee_mango_id') or get( tippee, 'mangopay_user_id') tr.CreditedWalletId = wallet_to tr.DebitedFunds = Money(int(amount * 100), 'EUR') tr.DebitedWalletId = wallet_from tr.Fees = Money(0, 'EUR') tr.Tag = str(t_id) tr.save() return record_transfer_result(db, t_id, tr), t_id
def test_retrieve_users_transactions(self): self.mock_natural_user() self.mock_legal_user() self.mock_user_wallet() self.mock_card() self.register_mock([{ 'method': responses.GET, 'url': settings.MANGOPAY_API_SANDBOX_URL + settings.MANGOPAY_CLIENT_ID + '/users/1167495', 'body': { "FirstName": "Victor", "LastName": "Hugo", "Address": { "AddressLine1": "AddressLine1", "AddressLine2": "AddressLine2", "City": "City", "Region": "Region", "PostalCode": "11222", "Country": "FR" }, "Birthday": today_timestamp, "Nationality": "FR", "CountryOfResidence": "FR", "Occupation": "Writer", "IncomeRange": 6, "ProofOfIdentity": None, "ProofOfAddress": None, "PersonType": "NATURAL", "Email": "*****@*****.**", "Id": "1169419", "Tag": "custom tag", "CreationDate": 1383321421, "KYCLevel": "LIGHT", "UserCategory": "OWNER" }, 'status': 200 }, { 'method': responses.POST, 'url': settings.MANGOPAY_API_SANDBOX_URL + settings.MANGOPAY_CLIENT_ID + '/transfers', 'body': { "Id": "1169434", "Tag": "DefaultTag", "CreationDate": 1431648000, "AuthorId": "1167495", "CreditedUserId": "1167502", "DebitedFunds": { "Currency": "EUR", "Amount": 1000 }, "CreditedFunds": { "Currency": "EUR", "Amount": 900 }, "Fees": { "Currency": "EUR", "Amount": 100 }, "Status": "SUCCEEDED", "ResultCode": "000000", "ResultMessage": "Success", "ExecutionDate": today_timestamp, "Type": "TRANSFER", "Nature": "REGULAR", "DebitedWalletId": "1167496", "CreditedWalletId": "1167504" }, 'status': 200 }, { 'method': responses.GET, 'url': settings.MANGOPAY_API_SANDBOX_URL + settings.MANGOPAY_CLIENT_ID + '/users/1169419/transactions', 'body': [{ "Id": "1174837", "Tag": "my transfer", "CreationDate": 1431648000, "AuthorId": "1167495", "CreditedUserId": "1167502", "DebitedFunds": { "Currency": "EUR", "Amount": 1000 }, "CreditedFunds": { "Currency": "EUR", "Amount": 900 }, "Fees": { "Currency": "EUR", "Amount": 100 }, "Status": "SUCCEEDED", "ResultCode": "000000", "ResultMessage": "Success", "ExecutionDate": today_timestamp, "Type": "TRANSFER", "Nature": "REGULAR", "CreditedWalletId": "1167496", "DebitedWalletId": "1167504" }], 'status': 200 }]) wallet_params = { 'tag': 'My custom tag', 'owners': [self.card.user], 'description': 'Wallet of Victor Hugo', 'currency': 'EUR' } wallet = Wallet(**wallet_params) wallet.save() # Create a transaction: params = { "author": self.card.user, "credited_user": self.legal_user, "debited_funds": Money(amount=10, currency='EUR'), "fees": Money(amount=1, currency='EUR'), "debited_wallet": wallet, "credited_wallet": self.legal_user_wallet, "tag": "custom tag" } transfer = Transfer(**params) transfer.save() # List wallet's transactions transactions = Transaction.all(**{"user_id": self.card.user.id}) self.assertEqual(len(transactions), 1) self.assertEqual(transactions[0].type, 'TRANSFER')
def Get(self, transfer_id): transfer = Transfer() transfer.Id = transfer_id transfer.ExecutionDate = 12312312 transfer.Status = "SUCCEEDED" return transfer
def transfer(db, tipper, tippee, amount, context, **kw): t_id = db.one(""" INSERT INTO transfers (tipper, tippee, amount, context, team, invoice, status) VALUES (%s, %s, %s, %s, %s, %s, 'pre') RETURNING id """, (tipper, tippee, amount, context, kw.get('team'), kw.get('invoice'))) get = lambda id, col: db.one("SELECT {0} FROM participants WHERE id = %s".format(col), (id,)) tr = Transfer() tr.AuthorId = kw.get('tipper_mango_id') or get(tipper, 'mangopay_user_id') tr.CreditedUserId = kw.get('tippee_mango_id') or get(tippee, 'mangopay_user_id') tr.CreditedWalletId = kw.get('tippee_wallet_id') or get(tippee, 'mangopay_wallet_id') if not tr.CreditedWalletId: tr.CreditedWalletId = create_wallet(db, Participant.from_id(tippee)) tr.DebitedFunds = Money(int(amount * 100), 'EUR') tr.DebitedWalletId = kw.get('tipper_wallet_id') or get(tipper, 'mangopay_wallet_id') tr.Fees = Money(0, 'EUR') tr.Tag = str(t_id) tr.save() return record_transfer_result(db, t_id, tr)
def test_retrieve_users_transactions(self): self.mock_natural_user() self.mock_legal_user() self.mock_user_wallet() self.mock_card() self.register_mock([ { 'method': responses.GET, 'url': settings.MANGOPAY_API_SANDBOX_URL + settings.MANGOPAY_CLIENT_ID + '/users/1167495', 'body': { "FirstName": "Victor", "LastName": "Hugo", "Address": { "AddressLine1": "AddressLine1", "AddressLine2": "AddressLine2", "City": "City", "Region": "Region", "PostalCode": "11222", "Country": "FR" }, "Birthday": today_timestamp, "Nationality": "FR", "CountryOfResidence": "FR", "Occupation": "Writer", "IncomeRange": 6, "ProofOfIdentity": None, "ProofOfAddress": None, "PersonType": "NATURAL", "Email": "*****@*****.**", "Id": "1169419", "Tag": "custom tag", "CreationDate": 1383321421, "KYCLevel": "LIGHT" }, 'status': 200 }, { 'method': responses.POST, 'url': settings.MANGOPAY_API_SANDBOX_URL + settings.MANGOPAY_CLIENT_ID + '/transfers', 'body': { "Id": "1169434", "Tag": "DefaultTag", "CreationDate": 1431648000, "AuthorId": "1167495", "CreditedUserId": "1167502", "DebitedFunds": { "Currency": "EUR", "Amount": 1000 }, "CreditedFunds": { "Currency": "EUR", "Amount": 900 }, "Fees": { "Currency": "EUR", "Amount": 100 }, "Status": "SUCCEEDED", "ResultCode": "000000", "ResultMessage": "Success", "ExecutionDate": today_timestamp, "Type": "TRANSFER", "Nature": "REGULAR", "DebitedWalletId": "1167496", "CreditedWalletId": "1167504" }, 'status': 200 }, { 'method': responses.GET, 'url': settings.MANGOPAY_API_SANDBOX_URL + settings.MANGOPAY_CLIENT_ID + '/users/1169419/transactions', 'body': [ { "Id": "1174837", "Tag": "my transfer", "CreationDate": 1431648000, "AuthorId": "1167495", "CreditedUserId": "1167502", "DebitedFunds": { "Currency": "EUR", "Amount": 1000 }, "CreditedFunds": { "Currency": "EUR", "Amount": 900 }, "Fees": { "Currency": "EUR", "Amount": 100 }, "Status": "SUCCEEDED", "ResultCode": "000000", "ResultMessage": "Success", "ExecutionDate": today_timestamp, "Type": "TRANSFER", "Nature": "REGULAR", "CreditedWalletId": "1167496", "DebitedWalletId": "1167504" } ], 'status': 200 } ]) wallet_params = { 'tag': 'My custom tag', 'owners': [self.card.user], 'description': 'Wallet of Victor Hugo', 'currency': 'EUR' } wallet = Wallet(**wallet_params) wallet.save() # Create a transaction: params = { "author": self.card.user, "credited_user": self.legal_user, "debited_funds": Money(amount=10, currency='EUR'), "fees": Money(amount=1, currency='EUR'), "debited_wallet": wallet, "credited_wallet": self.legal_user_wallet, "tag": "custom tag" } transfer = Transfer(**params) transfer.save() # List wallet's transactions transactions = Transaction.all(**{"user_id": self.card.user.id}) self.assertEqual(len(transactions), 1) self.assertEqual(transactions[0].type, 'TRANSFER')