mirror of
https://github.com/pretix/pretix.git
synced 2026-05-14 16:44:06 +00:00
62 lines
2.5 KiB
Python
62 lines
2.5 KiB
Python
from django.contrib import messages
|
|
from django.dispatch import receiver
|
|
from django.http import HttpResponseNotAllowed
|
|
from django.shortcuts import redirect
|
|
from django.template.loader import get_template
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from pretix.base.datasync.datasync import sync_targets
|
|
from pretix.base.models import Event, Order
|
|
from pretix.control.signals import order_info
|
|
from pretix.control.views.orders import OrderView
|
|
|
|
|
|
@receiver(order_info, dispatch_uid="datasync_control_order_info")
|
|
def on_control_order_info(sender: Event, request, order: Order, **kwargs):
|
|
providers = [provider for provider, meta in sync_targets.filter(active_in=sender)]
|
|
if not providers: return ""
|
|
|
|
queued = order.queued_sync_jobs.all()
|
|
queued_provider_ids = {p.sync_provider for p in queued}
|
|
non_pending = [(provider.identifier, provider.display_name) for provider in providers if provider.identifier not in queued_provider_ids]
|
|
|
|
#sync_logs = order.all_logentries().filter(action_type__in=(
|
|
# "pretix.event.order.data_sync.success",
|
|
# "pretix.event.order.data_sync.failed"
|
|
#))
|
|
|
|
template = get_template("pretixcontrol/datasync/control_order_info.html")
|
|
ctx = {
|
|
"order": order,
|
|
"request": request,
|
|
"event": sender,
|
|
"non_pending_providers": non_pending,
|
|
"queued_sync_jobs": queued,
|
|
}
|
|
return template.render(ctx, request=request)
|
|
|
|
|
|
class ControlSyncJob(OrderView):
|
|
permission = 'can_change_orders'
|
|
|
|
def post(self, request, provider, *args, **kwargs):
|
|
prov, meta = sync_targets.get(active_in=self.request.event, identifier=provider)
|
|
|
|
if self.request.POST.get("queue_sync") == "true":
|
|
prov.enqueue_order(self.order, 'user')
|
|
messages.success(self.request, _('The sync job has been enqueued and will run in the next minutes.'))
|
|
elif self.request.POST.get("cancel_job"):
|
|
job = self.order.queued_sync_jobs.get(pk=self.request.POST.get("cancel_job"))
|
|
job.delete()
|
|
messages.success(self.request, _('The sync job has been canceled.'))
|
|
elif self.request.POST.get("run_job_now"):
|
|
job = self.order.queued_sync_jobs.get(pk=self.request.POST.get("run_job_now"))
|
|
job.not_before = None
|
|
job.save()
|
|
messages.success(self.request, _('The sync job has been set to run as soon as possible.'))
|
|
|
|
return redirect(self.get_order_url())
|
|
|
|
def get(self, *args, **kwargs):
|
|
return HttpResponseNotAllowed(['POST'])
|