Skip to content
Snippets Groups Projects
Verified Commit e3a83085 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch '115-remove-legacy-multi-tenant-support'

parents f84087b6 f95ab294
No related branches found
No related tags found
No related merge requests found
Pipeline #272 failed
......@@ -9,7 +9,8 @@ New features
* Two-factor authentication with TOTP (Google Authenticator), Yubikey, SMS
and phone call.
* Devs: CRUDMixin provides a crud_event relation that returns all CRUD
events for an object
`1.0a2`_
--------
......
......@@ -70,7 +70,7 @@ class Migration(migrations.Migration):
('import_ref', models.CharField(blank=True, editable=False, max_length=64, null=True, verbose_name='Reference ID of import source')),
('guardians', models.ManyToManyField(related_name='children', to='core.Person', verbose_name='Guardians / Parents')),
('primary_group', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.Group')),
('school', models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School')),
('school', models.ForeignKey(default=l, on_delete=django.db.models.deletion.CASCADE, to='core.School')),
('user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='person', to=settings.AUTH_USER_MODEL)),
],
options={
......@@ -96,7 +96,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='group',
name='school',
field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'),
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='core.School'),
),
migrations.AlterUniqueTogether(
name='group',
......
......@@ -32,7 +32,7 @@ class Migration(migrations.Migration):
('caption', models.CharField(max_length=30, verbose_name='Visible caption of the term')),
('date_start', models.DateField(null=True, verbose_name='Effective start date of term')),
('date_end', models.DateField(null=True, verbose_name='Effective end date of term')),
('school', models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School')),
('school', models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='core.School')),
],
options={
'abstract': False,
......
......@@ -69,16 +69,10 @@ class ExtensibleModel(object):
cls._safe_add(func, func.__name__)
class SchoolRelated(models.Model):
class CRUDMixin(models.Model):
class Meta:
abstract = True
# objects = SchoolRelatedManager()
school = models.ForeignKey(
'core.School', on_delete=models.CASCADE, default=get_current_school)
@property
def crud_events(self) -> QuerySet:
"""Get all CRUD events connected to this object from easyaudit."""
......
......@@ -7,7 +7,7 @@ from django.utils.translation import ugettext_lazy as _
from image_cropping import ImageCropField, ImageRatioField
from phonenumber_field.modelfields import PhoneNumberField
from .mixins import ExtensibleModel, SchoolRelated
from .mixins import CRUDMixin, ExtensibleModel
class School(models.Model):
......@@ -30,7 +30,7 @@ class School(models.Model):
ordering = ['name', 'name_official']
class SchoolTerm(SchoolRelated):
class SchoolTerm(models.Model):
""" Information about a term (limited time frame) that data can
be linked to.
"""
......@@ -44,13 +44,12 @@ class SchoolTerm(SchoolRelated):
'Effective end date of term'), null=True)
class Person(SchoolRelated, ExtensibleModel):
class Person(ExtensibleModel):
""" A model describing any person related to a school, including, but not
limited to, students, teachers and guardians (parents).
"""
class Meta:
unique_together = [['school', 'short_name'], ['school', 'import_ref']]
ordering = ['last_name', 'first_name']
SEX_CHOICES = [
......@@ -70,7 +69,7 @@ class Person(SchoolRelated, ExtensibleModel):
'Additional name(s)'), max_length=30, blank=True)
short_name = models.CharField(verbose_name=_(
'Short name'), max_length=5, blank=True, null=True)
'Short name'), max_length=5, blank=True, null=True, unique=True)
street = models.CharField(verbose_name=_(
'Street'), max_length=30, blank=True)
......@@ -96,7 +95,8 @@ class Person(SchoolRelated, ExtensibleModel):
photo_cropping = ImageRatioField('photo', '600x800', size_warning=True)
import_ref = models.CharField(verbose_name=_(
'Reference ID of import source'), max_length=64, blank=True, null=True, editable=False)
'Reference ID of import source'), max_length=64,
blank=True, null=True, editable=False, unique=True)
guardians = models.ManyToManyField('self', verbose_name=_('Guardians / Parents'),
symmetrical=False, related_name='children')
......@@ -132,19 +132,18 @@ class Person(SchoolRelated, ExtensibleModel):
return self.full_name
class Group(SchoolRelated, ExtensibleModel):
class Group(ExtensibleModel):
"""Any kind of group of persons in a school, including, but not limited
classes, clubs, and the like.
"""
class Meta:
unique_together = [['school', 'name'], ['school', 'short_name']]
ordering = ['short_name', 'name']
name = models.CharField(verbose_name=_(
'Long name of group'), max_length=60)
'Long name of group'), max_length=60, unique=True)
short_name = models.CharField(verbose_name=_(
'Short name of group'), max_length=16)
'Short name of group'), max_length=16, unique=True)
members = models.ManyToManyField('Person', related_name='member_of')
owners = models.ManyToManyField('Person', related_name='owner_of')
......
......@@ -29,10 +29,6 @@ def get_app_packages() -> Sequence[str]:
return pkgs
def get_current_school() -> int:
return 1
def is_impersonate(request: HttpRequest) -> bool:
if hasattr(request, 'user'):
return getattr(request.user, 'is_impersonate', False)
......
......@@ -10,7 +10,7 @@ from django_cron.models import CronJobLog
from .decorators import admin_required
from .forms import PersonsAccountsFormSet, EditPersonForm, EditGroupForm, EditSchoolForm, EditTermForm
from .models import Person, Group
from .models import Person, Group, School
from .tables import PersonsTable, GroupsTable
from .util import messages
......@@ -198,7 +198,7 @@ def school_management(request: HttpRequest) -> HttpResponse:
def edit_school(request: HttpRequest) -> HttpResponse:
context = {}
school = request.user.person.school
school = School.objects.first()
edit_school_form = EditSchoolForm(request.POST or None, request.FILES or None, instance=school)
context['school'] = school
......@@ -219,7 +219,7 @@ def edit_school(request: HttpRequest) -> HttpResponse:
def edit_schoolterm(request: HttpRequest) -> HttpResponse:
context = {}
term = request.user.person.school.current_term
term = School.objects.first().current_term
edit_term_form = EditTermForm(request.POST or None, instance=term)
if request.method == 'POST':
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment