Add historical records to every model for auditing

This commit is contained in:
Tanner Collin 2020-02-05 00:00:33 +00:00
parent 30294e7332
commit bad18e069a
4 changed files with 25 additions and 1 deletions

View File

@ -1,10 +1,11 @@
from django.apps import apps from django.apps import apps
from django.contrib import admin from django.contrib import admin
from django.contrib.admin.sites import AlreadyRegistered from django.contrib.admin.sites import AlreadyRegistered
from simple_history.admin import SimpleHistoryAdmin
app_models = apps.get_app_config('api').get_models() app_models = apps.get_app_config('api').get_models()
for model in app_models: for model in app_models:
try: try:
admin.site.register(model) admin.site.register(model, SimpleHistoryAdmin)
except AlreadyRegistered: except AlreadyRegistered:
pass pass

View File

@ -2,6 +2,10 @@ from datetime import date, datetime
from django.db import models from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.utils.timezone import now from django.utils.timezone import now
from simple_history.models import HistoricalRecords
from simple_history import register
register(User)
IGNORE = '+' IGNORE = '+'
@ -38,6 +42,8 @@ class Member(models.Model):
paused_date = models.DateField(blank=True, null=True) paused_date = models.DateField(blank=True, null=True)
monthly_fees = models.IntegerField(default=55, blank=True, null=True) monthly_fees = models.IntegerField(default=55, blank=True, null=True)
history = HistoricalRecords()
class Transaction(models.Model): class Transaction(models.Model):
user = models.ForeignKey(User, related_name='transactions', blank=True, null=True, on_delete=models.SET_NULL) user = models.ForeignKey(User, related_name='transactions', blank=True, null=True, on_delete=models.SET_NULL)
recorder = models.ForeignKey(User, related_name=IGNORE, blank=True, null=True, on_delete=models.SET_NULL) recorder = models.ForeignKey(User, related_name=IGNORE, blank=True, null=True, on_delete=models.SET_NULL)
@ -58,15 +64,21 @@ class Transaction(models.Model):
report_type = models.TextField(blank=True, null=True) report_type = models.TextField(blank=True, null=True)
report_memo = models.TextField(blank=True, null=True) report_memo = models.TextField(blank=True, null=True)
history = HistoricalRecords()
class PayPalHint(models.Model): class PayPalHint(models.Model):
account = models.CharField(unique=True, max_length=13) account = models.CharField(unique=True, max_length=13)
member_id = models.IntegerField() member_id = models.IntegerField()
history = HistoricalRecords()
class IPN(models.Model): class IPN(models.Model):
datetime = models.DateTimeField(auto_now_add=True) datetime = models.DateTimeField(auto_now_add=True)
data = models.TextField() data = models.TextField()
status = models.CharField(max_length=32) status = models.CharField(max_length=32)
history = HistoricalRecords()
class Card(models.Model): class Card(models.Model):
user = models.ForeignKey(User, related_name='cards', blank=True, null=True, on_delete=models.SET_NULL) user = models.ForeignKey(User, related_name='cards', blank=True, null=True, on_delete=models.SET_NULL)
@ -76,11 +88,15 @@ class Card(models.Model):
last_seen_at = models.DateField(default=date.today, blank=True, null=True) last_seen_at = models.DateField(default=date.today, blank=True, null=True)
active_status = models.CharField(max_length=32, blank=True, null=True) active_status = models.CharField(max_length=32, blank=True, null=True)
history = HistoricalRecords()
class Course(models.Model): class Course(models.Model):
name = models.TextField(blank=True, null=True) name = models.TextField(blank=True, null=True)
description = models.TextField(blank=True, null=True) description = models.TextField(blank=True, null=True)
is_old = models.BooleanField(default=False) is_old = models.BooleanField(default=False)
history = HistoricalRecords()
class Session(models.Model): class Session(models.Model):
instructor = models.ForeignKey(User, related_name='teaching', blank=True, null=True, on_delete=models.SET_NULL) instructor = models.ForeignKey(User, related_name='teaching', blank=True, null=True, on_delete=models.SET_NULL)
course = models.ForeignKey(Course, related_name='sessions', blank=True, null=True, on_delete=models.SET_NULL) course = models.ForeignKey(Course, related_name='sessions', blank=True, null=True, on_delete=models.SET_NULL)
@ -91,6 +107,8 @@ class Session(models.Model):
cost = models.DecimalField(max_digits=5, decimal_places=2) cost = models.DecimalField(max_digits=5, decimal_places=2)
max_students = models.IntegerField(blank=True, null=True) max_students = models.IntegerField(blank=True, null=True)
history = HistoricalRecords()
class Training(models.Model): class Training(models.Model):
user = models.ForeignKey(User, related_name='training', blank=True, null=True, on_delete=models.SET_NULL) user = models.ForeignKey(User, related_name='training', blank=True, null=True, on_delete=models.SET_NULL)
session = models.ForeignKey(Session, related_name='students', blank=True, null=True, on_delete=models.SET_NULL) session = models.ForeignKey(Session, related_name='students', blank=True, null=True, on_delete=models.SET_NULL)
@ -99,3 +117,5 @@ class Training(models.Model):
attendance_status = models.TextField(blank=True, null=True) attendance_status = models.TextField(blank=True, null=True)
sign_up_date = models.DateField(default=date.today, blank=True, null=True) sign_up_date = models.DateField(default=date.today, blank=True, null=True)
paid_date = models.DateField(blank=True, null=True) paid_date = models.DateField(blank=True, null=True)
history = HistoricalRecords()

View File

@ -66,6 +66,7 @@ INSTALLED_APPS = [
'allauth.account', 'allauth.account',
'allauth.socialaccount', # to support user deletion 'allauth.socialaccount', # to support user deletion
'rest_auth.registration', 'rest_auth.registration',
'simple_history',
] ]
MIDDLEWARE = [ MIDDLEWARE = [
@ -76,6 +77,7 @@ MIDDLEWARE = [
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'simple_history.middleware.HistoryRequestMiddleware',
] ]
ROOT_URLCONF = 'apiserver.urls' ROOT_URLCONF = 'apiserver.urls'

View File

@ -10,6 +10,7 @@ defusedxml==0.6.0
Django==3.0.2 Django==3.0.2
django-allauth==0.41.0 django-allauth==0.41.0
django-rest-auth==0.9.5 django-rest-auth==0.9.5
django-simple-history==2.8.0
djangorestframework==3.11.0 djangorestframework==3.11.0
docutils==0.16 docutils==0.16
fuzzywuzzy==0.17.0 fuzzywuzzy==0.17.0