Skip to content

Commit 6f75fc9

Browse files
committed
Merge 0.7.2
2 parents 8171459 + 5b107d6 commit 6f75fc9

File tree

4 files changed

+260
-16
lines changed

4 files changed

+260
-16
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Generated by Django 5.1.6 on 2025-03-13 18:44
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('ifc_validation_models', '0009_company_email_address_pattern'),
10+
]
11+
12+
operations = [
13+
migrations.RemoveConstraint(
14+
model_name='authoringtool',
15+
name='unique_name_version',
16+
),
17+
migrations.AddConstraint(
18+
model_name='authoringtool',
19+
constraint=models.UniqueConstraint(fields=('name', 'version', 'company_id'), name='unique_name_version_company_id'),
20+
),
21+
migrations.AddConstraint(
22+
model_name='authoringtool',
23+
constraint=models.UniqueConstraint(condition=models.Q(('company_id__isnull', True)), fields=('name', 'version'), name='unique_name_version_company_id_null'),
24+
),
25+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.1.6 on 2025-03-15 15:01
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('ifc_validation_models', '0010_change_authoring_tool_unique_constraint'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='useradditionalinfo',
15+
name='is_vendor_self_declared',
16+
field=models.BooleanField(blank=True, help_text='Whether this user has self-declared an affiliation with an Authoring Tool vendor (optional)', null=True),
17+
),
18+
]

models.py

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import threading
33

44
from django.db import models
5+
from django.db.models import Q
56
from django.conf import settings
67
from django.core.exceptions import ImproperlyConfigured
78
from django.utils import timezone
@@ -244,6 +245,16 @@ class Meta:
244245
def __str__(self):
245246

246247
return f'{self.name}'
248+
249+
def find_users_by_email_pattern(self, only_new=False):
250+
251+
if self.email_address_pattern:
252+
matching_users = User.objects.filter(email__iregex=self.email_address_pattern)
253+
if only_new:
254+
matching_users = matching_users.exclude(useradditionalinfo__company=self)
255+
return matching_users if matching_users.exists() else None
256+
257+
return None
247258

248259

249260
class UserAdditionalInfo(AuditedBaseModel):
@@ -261,7 +272,14 @@ class UserAdditionalInfo(AuditedBaseModel):
261272
null=True,
262273
blank=True,
263274
help_text='Whether this user belongs to an Authoring Tool vendor (optional)'
264-
)
275+
)
276+
277+
is_vendor_self_declared = models.BooleanField(
278+
null=True,
279+
blank=True,
280+
verbose_name=("is vendor (self declared)"),
281+
help_text='Whether this user has self-declared an affiliation with an Authoring Tool vendor (optional)'
282+
)
265283

266284
company = models.ForeignKey(
267285
Company,
@@ -277,6 +295,19 @@ class Meta:
277295
verbose_name = "User Additional Info"
278296
verbose_name_plural = "User Additional Info"
279297

298+
def find_company_by_email_pattern(self):
299+
300+
if self.email:
301+
302+
companies = Company.objects.filter(email_address_pattern__isnull=False)
303+
if companies.exists():
304+
for company in companies:
305+
user = User.objects.filter(id=self.id, email__iregex=company.email_address_pattern).first()
306+
if user:
307+
return company
308+
309+
return None
310+
280311

281312
class AuthoringTool(TimestampedBaseModel):
282313
"""
@@ -319,7 +350,17 @@ class Meta:
319350
verbose_name_plural = "Authoring Tools"
320351

321352
constraints = [
322-
models.UniqueConstraint(fields=['name', 'version'], name='unique_name_version')
353+
# Postgres supports NULLS DISTINCT, but not all DB's do (Sqlite does not!) - hence workaround using two constraints
354+
# models.UniqueConstraint(fields=['name', 'version', 'company_id'], name='unique_name_version_company', nulls_distinct=False)
355+
models.UniqueConstraint(
356+
name='unique_name_version_company_id',
357+
fields=['name', 'version', 'company_id']
358+
),
359+
models.UniqueConstraint(
360+
name='unique_name_version_company_id_null',
361+
fields=['name', 'version'],
362+
condition=Q(company_id__isnull=True)
363+
)
323364
]
324365

325366
def __str__(self):

0 commit comments

Comments
 (0)