V1.30.11 models simplification
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import os
|
||||
from abc import ABC
|
||||
from datetime import datetime
|
||||
|
||||
@@ -8,8 +9,14 @@ 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
|
||||
SETTING = os.environ['WORKOUTTEST_SETTING']
|
||||
if SETTING == "PROD" :
|
||||
from aitrainer_backoffice.aitrainer_backoffice.models.sports import Sport
|
||||
from aitrainer_backoffice.aitrainer_backoffice.models.customer import Customer
|
||||
else:
|
||||
from aitrainer_backoffice.models.sports import Sport
|
||||
from aitrainer_backoffice.models.customer import Customer
|
||||
|
||||
from ..automation.notification import Notification
|
||||
|
||||
class SportFilter(SimpleListFilter, ABC):
|
||||
|
||||
@@ -1,23 +1,41 @@
|
||||
from django.contrib import admin
|
||||
import os
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from ..models.frequent_customers import FrequentCustomers
|
||||
|
||||
SETTING = os.environ['WORKOUTTEST_SETTING']
|
||||
if SETTING == "PROD" :
|
||||
from aitrainer_backoffice.aitrainer_backoffice.models.customer import Customer
|
||||
from aitrainer_backoffice.aitrainer_backoffice.models.exercises import Exercises
|
||||
else:
|
||||
from aitrainer_backoffice.models.customer import Customer
|
||||
from aitrainer_backoffice.models.exercises import Exercises
|
||||
|
||||
class FrequentCustomers(Customer):
|
||||
@property
|
||||
def exercise_count(self):
|
||||
count = Exercises.objects.filter(customer_id=self.customer_id).count()
|
||||
return count
|
||||
|
||||
class Meta:
|
||||
proxy = True
|
||||
verbose_name = _("Frequent Customer")
|
||||
verbose_name_plural = _("Frequent Customers")
|
||||
|
||||
|
||||
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')
|
||||
# qs = super(FrequentCustomersAdmin, self).get_queryset(request)
|
||||
# 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)
|
||||
|
||||
@@ -1,15 +1,36 @@
|
||||
from django.contrib import admin
|
||||
from django.db.models import Count
|
||||
import os
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
#from aitrainer_backoffice.models.exercise_type import ExerciseType
|
||||
|
||||
SETTING = os.environ['WORKOUTTEST_SETTING']
|
||||
if SETTING == "PROD" :
|
||||
from aitrainer_backoffice.aitrainer_backoffice.models.exercise_type import ExerciseType
|
||||
from aitrainer_backoffice.aitrainer_backoffice.models.exercises import Exercises
|
||||
else:
|
||||
from aitrainer_backoffice.models.exercise_type import ExerciseType
|
||||
from aitrainer_backoffice.models.exercises import Exercises
|
||||
|
||||
class FrequentExerciseType(ExerciseType):
|
||||
@property
|
||||
def exercise_count(self):
|
||||
count = Exercises.objects.filter(exercise_type_id=self.exercise_type_id).count()
|
||||
return count
|
||||
class Meta:
|
||||
proxy = True
|
||||
verbose_name = _("Frequent Exercise")
|
||||
verbose_name_plural = _("Frequent Exercises")
|
||||
|
||||
|
||||
class FrequentExerciseTypeAdmin(admin.ModelAdmin):
|
||||
list_display = ('exercise_type_id', 'name', 'exercise_count')
|
||||
|
||||
|
||||
def get_queryset(self, request):
|
||||
qs = super(FrequentExerciseTypeAdmin, self).get_queryset(request)
|
||||
qs = super(FrequentExerciseTypeAdmin, self).get_queryset(request) #.annotate(_exercise_count=Count("exercise_count",distinct=True ))
|
||||
return qs.filter(active=True)
|
||||
|
||||
#exercise_count.admin_order_field = '_exercise_count'
|
||||
|
||||
#admin.site.register(FrequentExerciseTypeAdmin)
|
||||
#admin.autodiscover()
|
||||
admin.site.register(FrequentExerciseType, FrequentExerciseTypeAdmin)
|
||||
admin.autodiscover()
|
||||
|
||||
@@ -10,7 +10,6 @@ class FCM:
|
||||
# To learn more, visit the docs here:
|
||||
# https://cloud.google.com/docs/authentication/getting-started>
|
||||
env = os.environ['GOOGLE_APPLICATION_CREDENTIALS']
|
||||
print(f'ENV: {env}')
|
||||
default_app = initialize_app()
|
||||
|
||||
def send_to_multiple_token(self, title, body, registration_token, image_url = None):
|
||||
|
||||
@@ -1,20 +1,25 @@
|
||||
import os
|
||||
import datetime
|
||||
import pytz
|
||||
from .notification_hook import NotificationHook
|
||||
|
||||
from aitrainer_backoffice.aitrainer_backoffice.models import notification as notif
|
||||
SETTING = os.environ['WORKOUTTEST_SETTING']
|
||||
if SETTING == "PROD":
|
||||
from aitrainer_backoffice.aitrainer_backoffice.models.notification import NotificationHistory, Notification
|
||||
else:
|
||||
from aitrainer_backoffice.models.notification import NotificationHistory, Notification
|
||||
|
||||
|
||||
from ..models.notification import NotificationHistory
|
||||
from .fcm import FCM
|
||||
import traceback
|
||||
|
||||
class Notification:
|
||||
fcm = FCM()
|
||||
fcm = None
|
||||
def __init__(self) -> None:
|
||||
self.fcm = FCM()
|
||||
|
||||
def run(self):
|
||||
print("** Running Notification automation")
|
||||
notification_queryset = notif.Notification.objects.using('live').raw('SELECT * from notification WHERE active = 1')
|
||||
notification_queryset = Notification.objects.using('live').raw('SELECT * from notification WHERE active = 1')
|
||||
|
||||
for notification in notification_queryset:
|
||||
if notification.schedule_date != None:
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
from ..models.customer import Customer
|
||||
import datetime
|
||||
import os
|
||||
|
||||
SETTING = os.environ['WORKOUTTEST_SETTING']
|
||||
if SETTING == "PROD":
|
||||
from aitrainer_backoffice.aitrainer_backoffice.models.customer import Customer
|
||||
else:
|
||||
from aitrainer_backoffice.models.customer import Customer
|
||||
|
||||
class NotificationHook:
|
||||
def __init__(self) -> None:
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
from .customer import Customer
|
||||
from .exercises import Exercises
|
||||
from .frequent_customers import FrequentCustomers
|
||||
@@ -1,46 +0,0 @@
|
||||
import os
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
SETTING = os.environ['WORKOUTTEST_SETTING']
|
||||
if SETTING == "PROD" :
|
||||
from aitrainer_backoffice.aitrainer_backoffice.models.sports import Sport
|
||||
else:
|
||||
from aitrainer_backoffice.models.sports import Sport
|
||||
|
||||
'''
|
||||
class Sport(models.Model):
|
||||
sport_id = models.AutoField(primary_key=True)
|
||||
name = models.CharField(max_length=200, help_text='Unique name',
|
||||
verbose_name=_("name"))
|
||||
|
||||
class Meta:
|
||||
db_table = 'sport'
|
||||
'''
|
||||
|
||||
class Customer(models.Model):
|
||||
customer_id = models.BigAutoField(primary_key=True)
|
||||
name = models.CharField(max_length=100, help_text='Last name', verbose_name=_("name"))
|
||||
firstname = models.CharField(max_length=100, help_text='First name', verbose_name=_("firstname"))
|
||||
email = models.CharField(max_length=100)
|
||||
sport = models.ForeignKey(Sport, on_delete=models.CASCADE)
|
||||
goal = models.CharField(max_length=20)
|
||||
fitness_level = models.CharField(max_length=20)
|
||||
date_add = models.DateField()
|
||||
synced_date = models.DateTimeField(blank=True,null=True)
|
||||
firebase_reg_token = models.CharField(max_length=255, blank=True, null=True)
|
||||
|
||||
def has_add_permission(self, request):
|
||||
return False
|
||||
|
||||
def has_delete_permission(self, request, obj=None):
|
||||
return False
|
||||
|
||||
class Meta:
|
||||
db_table = 'customer'
|
||||
verbose_name = _("Customer")
|
||||
verbose_name_plural = _("Customers")
|
||||
app_label = 'controlling'
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
@@ -1,23 +0,0 @@
|
||||
from django.db import models
|
||||
from ..models.customer import Customer
|
||||
|
||||
|
||||
class Exercises(models.Model):
|
||||
exercise_id = models.BigAutoField(primary_key=True)
|
||||
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
|
||||
exercise_type_id = models.IntegerField()
|
||||
#exercise_type = models.ForeignKey(ExerciseType, on_delete=models.CASCADE)
|
||||
date_add = models.DateField()
|
||||
quantity = models.DecimalField(decimal_places=0, max_digits=6)
|
||||
unit = models.CharField(max_length=20)
|
||||
unit_quantity = models.DecimalField(decimal_places=0, max_digits=6,blank=True, null=True)
|
||||
|
||||
|
||||
def has_add_permission(self, request):
|
||||
return False
|
||||
|
||||
def has_delete_permission(self, request, obj=None):
|
||||
return False
|
||||
|
||||
class Meta:
|
||||
db_table = 'exercises'
|
||||
@@ -1,32 +0,0 @@
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from .exercises import Exercises
|
||||
|
||||
|
||||
class FrequentCustomers(models.Model):
|
||||
customer_id = models.BigAutoField(primary_key=True)
|
||||
name = models.CharField(max_length=100, help_text='Last name', verbose_name=_("name"))
|
||||
firstname = models.CharField(max_length=100, help_text='First name', verbose_name=_("firstname"))
|
||||
email = models.CharField(max_length=100)
|
||||
date_add = models.DateField()
|
||||
#exercises = models.ManyToManyField(Exercises)
|
||||
|
||||
#def exercises(self):
|
||||
# exercises = Exercises.objects.filter(customer__customer_id=self.customer_id)
|
||||
# return exercises
|
||||
|
||||
@property
|
||||
def exercise_count(self):
|
||||
count = Exercises.objects.filter(customer__customer_id=self.customer_id).count()
|
||||
return count
|
||||
|
||||
class Meta:
|
||||
db_table = 'customer'
|
||||
verbose_name = _("Frequent Customer")
|
||||
verbose_name_plural = _("Frequent Customers")
|
||||
#ordering = ['exercise_count']
|
||||
#filter(exercise_count__gt=10)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
@@ -1,48 +0,0 @@
|
||||
import os
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
SETTING = os.environ['WORKOUTTEST_SETTING']
|
||||
if SETTING == "PROD":
|
||||
from aitrainer_backoffice.aitrainer_backoffice.models.notification import Notification
|
||||
else:
|
||||
from aitrainer_backoffice.models.notification import Notification
|
||||
|
||||
from ..models import Customer
|
||||
|
||||
'''
|
||||
class Notification(models.Model):
|
||||
notification_id = models.AutoField(primary_key=True)
|
||||
message_title = models.CharField(max_length=50)
|
||||
message_body = models.TextField(max_length=100, blank=True, null=True)
|
||||
image_url = models.ImageField(upload_to='images/', help_text='The notification image')
|
||||
schedule_date = models.DateField(blank=True, null=True)
|
||||
schedule_hook = models.TextField(max_length=100, blank=True, null=True)
|
||||
schedule_sql = models.TextField(max_length=1000, blank=True, null=True)
|
||||
internal_name = models.CharField(max_length=50, blank=True, null=True)
|
||||
internal_description = models.TextField(max_length=500, blank=True, null=True)
|
||||
active = models.BooleanField(default=0)
|
||||
|
||||
class Meta:
|
||||
db_table = 'notification'
|
||||
verbose_name = _("Notification")
|
||||
verbose_name_plural = _("Notifications")
|
||||
|
||||
def __str__(self):
|
||||
return self.internal_name
|
||||
|
||||
'''
|
||||
|
||||
class NotificationHistory(models.Model):
|
||||
notification_history_id = models.AutoField(primary_key=True)
|
||||
notification = models.ForeignKey(Notification, on_delete=models.CASCADE)
|
||||
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
|
||||
response = models.CharField(max_length=255)
|
||||
notification_date = models.DateTimeField(blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
db_table = 'notification_history'
|
||||
app_label = 'controlling'
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.notification};{self.customer};{self.response}'
|
||||
Reference in New Issue
Block a user