Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
AlekSIS-App-Paweljong
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Monitor
Service Desk
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Teckids
Projekt Hack-n-Fun
AlekSIS-App-Paweljong
Commits
cc35fca1
Commit
cc35fca1
authored
3 years ago
by
Tom Teichler
Browse files
Options
Downloads
Patches
Plain Diff
Ensure participants are in sync
parent
e3abb0b5
No related branches found
Branches containing commit
No related tags found
Tags containing commit
1 merge request
!20
Resolve "Synchronise/check synchronisation between event registrations and linked group"
Pipeline
#61158
failed
3 years ago
Stage: prepare
Stage: test
Stage: build
Stage: publish
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
aleksis/apps/paweljong/data_checks.py
+37
-0
37 additions, 0 deletions
aleksis/apps/paweljong/data_checks.py
aleksis/apps/paweljong/models.py
+21
-1
21 additions, 1 deletion
aleksis/apps/paweljong/models.py
aleksis/apps/paweljong/views.py
+0
-3
0 additions, 3 deletions
aleksis/apps/paweljong/views.py
with
58 additions
and
4 deletions
aleksis/apps/paweljong/data_checks.py
0 → 100644
+
37
−
0
View file @
cc35fca1
from
django.utils.translation
import
ugettext_lazy
as
_
from
aleksis.core.data_checks
import
DataCheck
,
IgnoreSolveOption
,
SolveOption
class
SyncEventMembers
(
SolveOption
):
name
=
"
sync_event_members
"
verbose_name
=
_
(
"
Sync members
"
)
@classmethod
def
solve
(
cls
,
check_result
:
"
DataCheckResult
"
):
event
=
check_result
.
related_object
event
.
sync_group_members
()
check_result
.
delete
()
class
EventMembersSyncDataCheck
(
DataCheck
):
name
=
"
event_members_sync
"
verbose_name
=
_
(
"
Ensure that all registered persons are member of the linked group
"
)
problem_name
=
_
(
"
Event members are out of sync with registrations!
"
)
solve_options
=
{
IgnoreSolveOption
.
name
:
IgnoreSolveOption
,
SyncEventMembers
.
name
:
SyncEventMembers
,
}
@classmethod
def
check_data
(
cls
):
from
.models
import
Event
async_events
=
[]
for
event
in
Event
.
objects
.
all
():
if
not
set
(
event
.
linked_group
.
members
.
values_list
(
"
id
"
,
flat
=
True
))
==
set
(
event
.
registrations
.
values_list
(
"
person
"
,
flat
=
True
)):
async_events
.
append
(
event
)
for
event
in
async_events
:
cls
.
register_result
(
event
)
This diff is collapsed.
Click to expand it.
aleksis/apps/paweljong/models.py
+
21
−
1
View file @
cc35fca1
from
datetime
import
datetime
from
decimal
import
Decimal
from
typing
import
Optional
from
django.contrib.contenttypes.models
import
ContentType
from
django.db
import
models
from
django.dispatch
import
receiver
from
django.urls
import
reverse
from
django.utils.text
import
slugify
from
django.utils.timezone
import
now
...
...
@@ -19,6 +21,7 @@ from aleksis.core.models import Group, Person
from
aleksis.core.util.core_helpers
import
generate_random_code
,
get_site_preferences
from
aleksis.core.util.email
import
send_email
from
.data_checks
import
EventMembersSyncDataCheck
class
RegistrationState
(
ExtensibleModel
):
...
...
@@ -101,6 +104,9 @@ class InfoMailing(ExtensibleModel):
class
Event
(
ExtensibleModel
):
data_checks
=
[
EventMembersSyncDataCheck
]
# Event details
display_name
=
models
.
CharField
(
verbose_name
=
_
(
"
Display name
"
),
max_length
=
255
)
linked_group
=
models
.
OneToOneField
(
...
...
@@ -136,11 +142,17 @@ class Event(ExtensibleModel):
else
:
self
.
slug
=
slugify
(
self
.
display_name
)
return
super
().
save
(
*
args
,
**
kwargs
)
super
().
save
(
*
args
,
**
kwargs
)
self
.
sync_group_members
()
def
__str__
(
self
)
->
str
:
return
self
.
display_name
def
sync_group_members
(
self
):
self
.
linked_group
.
members
.
set
(
self
.
registrations
.
values_list
(
"
person
"
,
flat
=
True
)
)
def
can_register
(
self
,
request
=
None
):
now
=
datetime
.
today
().
date
()
...
...
@@ -355,6 +367,14 @@ class EventRegistration(ExtensibleModel):
def
__str__
(
self
)
->
str
:
return
f
"
{
self
.
event
}
,
{
self
.
person
.
first_name
}
{
self
.
person
.
last_name
}
"
def
save
(
self
,
*
args
,
**
kwargs
):
self
.
event
.
sync_group_members
()
super
().
save
(
*
args
,
**
kwargs
)
def
delete
(
self
,
*
args
,
**
kwargs
):
self
.
event
.
sync_group_members
()
super
().
delete
(
*
args
,
**
kwargs
)
class
Meta
:
verbose_name
=
_
(
"
Event registration
"
)
verbose_name_plural
=
_
(
"
Event registrations
"
)
...
...
This diff is collapsed.
Click to expand it.
aleksis/apps/paweljong/views.py
+
0
−
3
View file @
cc35fca1
...
...
@@ -609,9 +609,6 @@ class RegisterEventWizardView(SessionWizardView):
_email
.
person
=
person
_email
.
save
()
# Add the current person to the event
event
.
linked_group
.
members
.
add
(
person
)
registration
=
EventRegistration
.
objects
.
create
(
event
=
event
,
person
=
person
,
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment