diff --git a/bids/views.py b/bids/views.py index fa69b44..0f29af4 100644 --- a/bids/views.py +++ b/bids/views.py @@ -107,8 +107,8 @@ def edit_bid(request, bid_id): @login_required def accept_bid(request, bid_id): aw = AuctionWallet() - bid = ItemBid.objects.get(id=bid_id) - platform_fee_xmr = bid.bid_price_xmr * (settings.PLATFORM_FEE_PERCENT / 100) + bid = ItemBid.objects.filter(id=bid_id).first() + platform_fee_xmr = bid.bid_price_xmr * (settings.PLATFORM_FEE_PERCENT / 100) / 2 # split buyer/seller expected_payment_xmr = bid.bid_price_xmr + platform_fee_xmr account_label = f'Sale account for Item #{bid.item.id}, Bid #{bid.id}' diff --git a/items/templatetags/determine_platform_fee.py b/items/templatetags/determine_platform_fee.py index 5efd322..3315e6c 100644 --- a/items/templatetags/determine_platform_fee.py +++ b/items/templatetags/determine_platform_fee.py @@ -7,5 +7,5 @@ register = template.Library() @register.filter(is_safe=True) def determine_platform_fee(value): - platform_fee_xmr = float(value * (settings.PLATFORM_FEE_PERCENT / 100)) + platform_fee_xmr = float(value * (settings.PLATFORM_FEE_PERCENT / 100) / 2) return round(platform_fee_xmr, 4) diff --git a/sales/tasks.py b/sales/tasks.py index d95c1d5..59866c2 100644 --- a/sales/tasks.py +++ b/sales/tasks.py @@ -113,9 +113,9 @@ def poll_for_buyer_escrow_payments(): for sale in item_sales: logger.info(f'[INFO] Polling escrow address #{sale.escrow_account_index} for sale #{sale.id} for new funds.') sale_account = aw.wallet.accounts[sale.escrow_account_index] - balance = sale_account.balances()[1] - sale.received_payment_xmr = balance - if balance >= Decimal(sale.expected_payment_xmr): + unlocked = sale_account.balances()[1] + sale.received_payment_xmr = unlocked + if unlocked >= Decimal(str(sale.expected_payment_xmr)): logger.info(f'[INFO] Found payment of {sale.received_payment_xmr} XMR for sale #{sale.id}.') sale.payment_received = True @@ -131,12 +131,14 @@ def pay_sellers_on_sold_items(): item_sales = ItemSale.objects.filter(item_received=True, payment_received=True).filter(seller_paid=False) for sale in item_sales: - logger.info(f'[INFO] Sending {sale.agreed_price_xmr} XMR from wallet account #{sale.escrow_account_index} to item owner\'s payout address for sale #{sale.id}.') + # Take platform fees from the sale - the 50:50 split between buyer/seller + sale_total = sale.agreed_price_xmr - sale.platform_fee_xmr sale_account = aw.wallet.accounts[sale.escrow_account_index] + logger.info(f'[INFO] Sending {sale_total} XMR from wallet account #{sale.escrow_account_index} to item owner\'s payout address for sale #{sale.id}.') if sale_account.balances()[1] > Decimal(sale.agreed_price_xmr): try: - aw.wallet.accounts[sale.escrow_account_index].transfer( - sale.item.payout_address, sale.agreed_price_xmr + sale_account.transfer( + sale.item.payout_address, sale_total ) sale.seller_paid = True sale.escrow_complete = True @@ -156,7 +158,7 @@ def pay_sellers_on_sold_items(): sale.seller_notified_of_payout = True sale.save() -@periodic_task(crontab(minute='0', hour='*')) +@periodic_task(crontab(minute='*/30')) def pay_platform_on_sold_items(): aw = AuctionWallet() if aw.connected is False: @@ -171,9 +173,11 @@ def pay_platform_on_sold_items(): for sale in item_sales: logger.info(f'[INFO] Paying platform fees for sale #{sale.id} to wallet {aof}.') sale_account = aw.wallet.accounts[sale.escrow_account_index] - if sale_account.balances()[1] >= Decimal(0.0): + bal = sale_account.balances()[1] + if bal >= 0: + logger.info(f'[INFO] Getting platform fees of {bal} XMR') try: - aw.wallet.accounts[sale.escrow_account_index].sweep_all(aof) + sale_account.sweep_all(aof) sale.platform_paid = True sale.sale_finalized = True sale.save() diff --git a/sales/views.py b/sales/views.py index c71077e..98f8c71 100644 --- a/sales/views.py +++ b/sales/views.py @@ -33,13 +33,15 @@ def get_sale(request, sale_id): _address_qr = BytesIO() address_qr = qrcode_make(qr_uri).save(_address_qr) + total_seller_payout = sale.agreed_price_xmr - sale.platform_fee_xmr context = { 'sale': sale, 'qrcode': b64encode(_address_qr.getvalue()).decode(), 'shipping_address': UserShippingAddress.objects.filter( user=bid.bidder - ).first() + ).first(), + 'total_seller_payout': total_seller_payout, } return render(request, 'sales/get_sale.html', context) diff --git a/web/templates/sales/get_sale.html b/web/templates/sales/get_sale.html index 67a4c17..fa164f6 100644 --- a/web/templates/sales/get_sale.html +++ b/web/templates/sales/get_sale.html @@ -114,9 +114,12 @@ {% elif sale.item_received %}

Hey {{ sale.item.owner.username }},

-

The buyer confirmed receipt of their shipment which means things worked out. It's time for you to get paid!

-

Your payout address provided during item creation will be paid the accepted bid amount out of the escrow wallet.

-

Payout Address: {{ sale.item.payout_address }}

+

The buyer confirmed receipt of their shipment which means things worked out. It's time for you to get paid!

+

Your payout address provided during item creation will be paid the accepted bid amount out of the escrow wallet.

+

Accepted Bid (XMR): {{ sale.bid.bid_price_xmr }}

+

Platform Fee (XMR): {{ sale.platform_fee_xmr }}

+

Total Payout (XMR): {{ total_seller_payout }}

+

Payout Address: {{ sale.item.payout_address }}

Thanks for using {{ site_meta.name }}!


Please provide me with any feedback so I can make the process better in the future.