示例#1
0
文件: models.py 项目: ojr9/confessapp
    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()
示例#2
0
文件: models.py 项目: ojr9/g39
    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()
示例#3
0
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
示例#4
0
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
示例#5
0
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
示例#6
0
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)
示例#7
0
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)
示例#8
0
    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)
示例#9
0
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
示例#10
0
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
示例#11
0
    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')
示例#12
0
 def Get(self, transfer_id):
     transfer = Transfer()
     transfer.Id = transfer_id
     transfer.ExecutionDate = 12312312
     transfer.Status = "SUCCEEDED"
     return transfer
示例#13
0
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)
示例#14
0
    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')