Add new admin action to close public order

This commit is contained in:
Reckless_Satoshi 2024-01-28 13:52:30 +00:00
parent 6297643703
commit 4aca6b9184
No known key found for this signature in database
GPG Key ID: 9C4585B561315571
3 changed files with 42 additions and 0 deletions

View File

@ -11,6 +11,7 @@ from rest_framework.authtoken.models import TokenProxy
from api.logics import Logics
from api.models import Currency, LNPayment, MarketTick, OnchainPayment, Order, Robot
from api.utils import objects_to_hyperlinks
from api.tasks import send_notification
admin.site.unregister(Group)
admin.site.unregister(User)
@ -135,6 +136,7 @@ class OrderAdmin(AdminChangeLinksMixin, admin.ModelAdmin):
return format_html(f'<table style="width: 100%">{with_hyperlinks}</table>')
actions = [
"cancel_public_order",
"maker_wins",
"taker_wins",
"return_everything",
@ -142,6 +144,37 @@ class OrderAdmin(AdminChangeLinksMixin, admin.ModelAdmin):
"compute_median_trade_time",
]
@admin.action(description="Close public order")
def cancel_public_order(self, request, queryset):
"""
Closes an existing Public/Paused order.
"""
for order in queryset:
if order.status in [Order.Status.PUB, Order.Status.PAU]:
if Logics.return_bond(order.maker_bond):
order.update_status(Order.Status.UCA)
self.message_user(
request,
f"Order {order.id} successfully closed",
messages.SUCCESS,
)
send_notification.delay(
order_id=order.id, message="coordinator_cancelled"
)
else:
self.message_user(
request,
f"Could not unlock bond of {order.id}",
messages.ERROR,
)
else:
self.message_user(
request,
f"Order {order.id} is not public or paused",
messages.ERROR,
)
@admin.action(description="Solve dispute: maker wins")
def maker_wins(self, request, queryset):
"""

View File

@ -185,3 +185,9 @@ class Telegram:
self.send_message(user.robot.telegram_chat_id, text)
return
def coordinator_cancelled(self, order):
if order.maker.robot.telegram_enabled:
text = f"🛠️ Your order with ID {order.id} has been cancelled by the coordinator {config('COORDINATOR_ALIAS', cast=str, default='NoAlias')} for the upcoming maintenance stop."
self.send_message(order.maker.robot.telegram_chat_id, text)
return

View File

@ -304,4 +304,7 @@ def send_notification(order_id=None, chat_message_id=None, message=None):
elif message == "new_chat_message":
telegram.new_chat_message(order, chat_message)
elif message == "coordinator_cancelled":
telegram.coordinator_cancelled(order)
return