Files
exchange/offers/admin.py
2026-01-07 09:12:35 +07:00

56 lines
2.0 KiB
Python

from django.contrib import admin, messages
from .models import Offer
from .services import OfferService
@admin.register(Offer)
class OfferAdmin(admin.ModelAdmin):
list_display = [
'product_name',
'status',
'workflow_status',
'team_uuid',
'location_name',
'location_country',
'quantity',
'price_per_unit',
'created_at',
]
list_filter = ['status', 'workflow_status', 'created_at', 'category_name', 'location_country']
search_fields = ['product_name', 'description', 'location_name', 'uuid']
readonly_fields = ['uuid', 'workflow_status', 'workflow_error', 'created_at', 'updated_at']
actions = ['sync_to_graph']
@admin.action(description="Синхронизировать в граф (запустить workflow)")
def sync_to_graph(self, request, queryset):
"""Запускает workflow для пересинхронизации выбранных офферов в ArangoDB граф"""
success_count = 0
error_count = 0
for offer in queryset:
try:
workflow_id, run_id = OfferService.resync_offer_via_workflow(offer)
offer.workflow_status = 'pending'
offer.workflow_error = ''
offer.save(update_fields=['workflow_status', 'workflow_error'])
success_count += 1
except Exception as e:
offer.workflow_status = 'error'
offer.workflow_error = str(e)
offer.save(update_fields=['workflow_status', 'workflow_error'])
error_count += 1
if success_count:
self.message_user(
request,
f"Запущен workflow для {success_count} офферов",
messages.SUCCESS,
)
if error_count:
self.message_user(
request,
f"Ошибка при запуске workflow для {error_count} офферов",
messages.ERROR,
)