BO 1.23 controlling, cron: sync customers

This commit is contained in:
Tibor Bossanyi (Freelancer)
2021-07-27 07:44:37 +02:00
parent ffbfe4c877
commit 3c02685ed6
26 changed files with 464 additions and 5 deletions
@@ -0,0 +1,3 @@
from .customer import CustomerAdmin
from .frequent_customers import FrequentCustomersAdmin
from .frequent_exercises import FrequentExerciseTypeAdmin
@@ -0,0 +1,83 @@
from abc import ABC
from datetime import datetime
from django.contrib.admin import SimpleListFilter
from django.http import HttpResponseRedirect
from django.utils.translation import ugettext_lazy as _
from django.contrib import admin
from rangefilter.filters import DateRangeFilter, DateTimeRangeFilter
from django.urls import path
from ..models.customer import Customer
from ..models.customer import Sport
from ..mautic import MauticHelper
from ..cron import cron
class SportFilter(SimpleListFilter, ABC):
title = "Sport"
parameter_name = 'sport_id'
def lookups(self, request, model_admin):
data = []
for s in Sport.objects.filter():
data.append([s.sport_id, s.sport_name])
return data
def queryset(self, request, queryset):
if self.value():
return Customer.objects.filter(sport__sport_id=self.value())
else:
return queryset
class CustomerAdmin(admin.ModelAdmin):
change_list_template = "controlling/mautic.html"
list_display = ('customer_id', 'name','firstname', 'email', 'date_add', 'get_sport')
list_filter = (
('date_add', DateRangeFilter),
SportFilter
)
def get_sport(self, obj):
return obj.sport.sport_name
get_sport.short_description = 'Sport'
get_sport.admin_order_field = 'sport__sport_name'
# If you would like to add a default range filter
# method pattern "get_rangefilter_{field_name}_default"
def get_rangefilter_date_add_default(self, request):
return (datetime.today(), datetime.today())
# If you would like to change a title range filter
# method pattern "get_rangefilter_{field_name}_title"
def get_rangefilter_date_add_title(self, request, field_path):
return _('Registered')
def changelist_view(self, request, extra_context=None):
if not request.GET.__contains__('date_add__range__gte'):
q = request.GET.copy()
q['date_add__range__gte'] = datetime.today()
q['date_add__range__lte'] = datetime.today()
request.GET = q
request.META['QUERY_STRING'] = request.GET.urlencode()
return super(CustomerAdmin, self).changelist_view(
request, extra_context=extra_context)
def get_urls(self):
urls = super().get_urls()
my_urls = [
path('mautic/', self.set_mautic),
]
return my_urls + urls
def set_mautic(self, request):
cron.sync_customers()
self.message_user(request, "All heroes are now synced")
return HttpResponseRedirect("../")
admin.site.register(Customer, CustomerAdmin)
admin.autodiscover()
@@ -0,0 +1,24 @@
from django.contrib import admin
from ..models.frequent_customers import FrequentCustomers
class FrequentCustomersAdmin(admin.ModelAdmin):
list_display = ('customer_id', 'name', 'firstname', 'email', 'exercise_count')
#def get_queryset(self, request):
# qs = super(FrequentCustomersAdmin, self).get_queryset(request)
# return FrequentCustomers.objects.extra(
# select=["customer_id, name, firstname, email, ( select count(exercise_id) from exercises where exercises.customer_id = customer_customer.id) as exercise_count "],
#group_by=["customer_id"],
#having=["exercise_count > 10"],
# order_by=["-exercise_count"]
#)
#return qs.values("exercises").annotate(exercise_count=Count('exercises')).order_by('-exercise_count')
#return Exercises.objects.annotate(count=Count("customer__customer_id"))
#return qs.values('user').annotate(visit_sum=Count('visit_count')).order_by('-visit_sum')
admin.site.register(FrequentCustomers, FrequentCustomersAdmin)
admin.autodiscover()
@@ -0,0 +1,15 @@
from django.contrib import admin
from ..models import ExerciseType
class FrequentExerciseTypeAdmin(admin.ModelAdmin):
list_display = ('exercise_type_id', 'name', 'exercise_count')
def get_queryset(self, request):
qs = super(FrequentExerciseTypeAdmin, self).get_queryset(request)
return qs.filter(active=True)
admin.site.register(ExerciseType, FrequentExerciseTypeAdmin)
admin.autodiscover()