56 lines
2.0 KiB
Python
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,
|
|
)
|