Add admin action to solve disputes as successful trades (#672)

This commit is contained in:
Reckless_Satoshi 2023-06-19 20:06:11 +00:00 committed by GitHub
parent 4c7676cd02
commit 143ab9ec5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 139 additions and 0 deletions

View File

@ -130,6 +130,7 @@ class OrderAdmin(AdminChangeLinksMixin, admin.ModelAdmin):
"maker_wins",
"taker_wins",
"return_everything",
"successful_trade",
"compute_median_trade_time",
]
@ -251,6 +252,46 @@ class OrderAdmin(AdminChangeLinksMixin, admin.ModelAdmin):
messages.ERROR,
)
@admin.action(description="Solve dispute: successful trade")
def successful_trade(self, request, queryset):
"""
Solves a dispute as if the trade had been successful, i.e.,
returns both bonds (added as compensations) and triggers the payout.
"""
for order in queryset:
if (
order.status in [Order.Status.DIS, Order.Status.WFR]
and order.is_disputed
):
order.maker.robot.earned_rewards = order.maker_bond.num_satoshis
order.maker.robot.save(update_fields=["earned_rewards"])
order.taker.robot.earned_rewards = order.taker_bond.num_satoshis
order.taker.robot.save(update_fields=["earned_rewards"])
if order.is_swap:
order.payout_tx.status = OnchainPayment.Status.VALID
order.payout_tx.save(update_fields=["status"])
order.status = Order.Status.SUC
else:
order.status = Order.Status.PAY
order.save(update_fields=["status"])
Logics.pay_buyer(order)
self.message_user(
request,
f"Dispute of order {order.id} solved as successful trade",
messages.SUCCESS,
)
else:
self.message_user(
request,
f"Order {order.id} is not in a disputed state",
messages.ERROR,
)
@admin.action(description="Compute median trade completion time")
def compute_median_trade_time(self, request, queryset):
"""

View File

@ -0,0 +1,98 @@
# Generated by Django 4.2.2 on 2023-06-19 19:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("api", "0038_alter_lnpayment_order_donated"),
]
operations = [
migrations.AlterField(
model_name="currency",
name="currency",
field=models.PositiveSmallIntegerField(
choices=[
(1, "USD"),
(2, "EUR"),
(3, "JPY"),
(4, "GBP"),
(5, "AUD"),
(6, "CAD"),
(7, "CHF"),
(8, "CNY"),
(9, "HKD"),
(10, "NZD"),
(11, "SEK"),
(12, "KRW"),
(13, "SGD"),
(14, "NOK"),
(15, "MXN"),
(16, "BYN"),
(17, "RUB"),
(18, "ZAR"),
(19, "TRY"),
(20, "BRL"),
(21, "CLP"),
(22, "CZK"),
(23, "DKK"),
(24, "HRK"),
(25, "HUF"),
(26, "INR"),
(27, "ISK"),
(28, "PLN"),
(29, "RON"),
(30, "ARS"),
(31, "VES"),
(32, "COP"),
(33, "PEN"),
(34, "UYU"),
(35, "PYG"),
(36, "BOB"),
(37, "IDR"),
(38, "ANG"),
(39, "CRC"),
(40, "CUP"),
(41, "DOP"),
(42, "GHS"),
(43, "GTQ"),
(44, "ILS"),
(45, "JMD"),
(46, "KES"),
(47, "KZT"),
(48, "MYR"),
(49, "NAD"),
(50, "NGN"),
(51, "AZN"),
(52, "PAB"),
(53, "PHP"),
(54, "PKR"),
(55, "QAR"),
(56, "SAR"),
(57, "THB"),
(58, "TTD"),
(59, "VND"),
(60, "XOF"),
(61, "TWD"),
(62, "TZS"),
(63, "XAF"),
(64, "UAH"),
(65, "EGP"),
(66, "LKR"),
(67, "MAD"),
(68, "AED"),
(69, "TND"),
(70, "ETB"),
(71, "GEL"),
(72, "UGX"),
(73, "RSD"),
(74, "IRT"),
(75, "BDT"),
(300, "XAU"),
(1000, "BTC"),
],
unique=True,
),
),
]