Skip to content
Snippets Groups Projects
Commit 2baddb98 authored by Alexa Valentová's avatar Alexa Valentová
Browse files

update team display, better import

parent 6fb5f5a3
Branches
No related tags found
2 merge requests!1147Release,!1146Update team display, better import
Pipeline #19877 passed
...@@ -10,7 +10,7 @@ class Command(BaseCommand): ...@@ -10,7 +10,7 @@ class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
for people_page in DistrictPeoplePage.objects.all(): for people_page in DistrictPeoplePage.objects.all():
for shortcut in people_page.get_syncable_octopus_groups(): for group in people_page.get_syncable_octopus_groups():
collection_id = people_page.root_page.image_collection_id collection_id = people_page.root_page.image_collection_id
if collection_id is None: if collection_id is None:
...@@ -19,11 +19,12 @@ class Command(BaseCommand): ...@@ -19,11 +19,12 @@ class Command(BaseCommand):
import_people_from_group.delay( import_people_from_group.delay(
people_page.id, people_page.id,
collection_id, collection_id,
shortcut, group["shortcut"],
group["title"],
) )
for people_page in DistrictPeoplePage.objects.all(): for people_page in DistrictPeoplePage.objects.all():
for shortcut in people_page.get_syncable_octopus_teams(): for team in people_page.get_syncable_octopus_teams():
collection_id = people_page.root_page.image_collection_id collection_id = people_page.root_page.image_collection_id
if collection_id is None: if collection_id is None:
...@@ -32,5 +33,6 @@ class Command(BaseCommand): ...@@ -32,5 +33,6 @@ class Command(BaseCommand):
import_people_from_team.delay( import_people_from_team.delay(
people_page.id, people_page.id,
collection_id, collection_id,
shortcut, team["shortcut"],
team["title"],
) )
# Generated by Django 5.0.7 on 2024-10-03 21:54
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('district', '0291_alter_districtpeoplepage_content'),
]
operations = [
migrations.AddField(
model_name='districtoctopuspersonpage',
name='originating_display',
field=models.CharField(blank=True, help_text='Název týmu nebo skupiny, ze kterých byla tato osba importována.', max_length=128, null=True, verbose_name='Název týmu/skupiny'),
),
]
...@@ -376,6 +376,14 @@ class DistrictOctopusPersonPage( ...@@ -376,6 +376,14 @@ class DistrictOctopusPersonPage(
null=True, null=True,
) )
originating_display = models.CharField(
verbose_name="Název týmu/skupiny",
help_text="Název týmu nebo skupiny, ze kterých byla tato osba importována.",
max_length=128,
blank=True,
null=True,
)
### PANELS ### PANELS
content_panels = Page.content_panels + [ content_panels = Page.content_panels + [
...@@ -429,11 +437,12 @@ class DistrictOctopusPersonPage( ...@@ -429,11 +437,12 @@ class DistrictOctopusPersonPage(
@property @property
def position(self) -> None: def position(self) -> None:
return None return self.person.position
@property @property
def primary_group(self) -> None: def primary_group(self) -> None:
return None print(self.originating_display)
return self.originating_display
@property @property
def perex(self): def perex(self):
...@@ -634,11 +643,14 @@ class DistrictPeoplePage(MainPeoplePageMixin): ...@@ -634,11 +643,14 @@ class DistrictPeoplePage(MainPeoplePageMixin):
[ [
HelpPanel( HelpPanel(
content=mark_safe( content=mark_safe(
"Pokud chceš importovat skupinu osob z Chobotnice, můžeš přidat do " "Pokud chceš importovat osoby z Chobotnice, můžeš přidat do sekce "
"sekce <em>Lidé a týmy</em> blok <em>Skupina z Chobotnice</em>. Do " "<em>Lidé a týmy</em> blok <em>Skupina z Chobotnice</em> nebo <em>"
"zkratky skupiny můžeš vyplnit například <em>cen_ao_ved</em> pro " "Tým z Chobotnice</em>. Jako zkratku skupiny můžeš vyplnit "
"skupinu <a href='https://pi2.cz/chobo-ao'>Administrativní odbor - " "například <em>cen_ao_ved</em> pro skupinu "
" vedení</a>." "<a href='https://pi2.cz/chobo-ao'>Administrativní odbor - vedení</a>."
"Jako zkratku týmu můžeš vyplnit např. <em>TO-admin</em> pro tým"
"<a href='https://pi2.cz/chobo-to'>Administrátoři TO</a>. Při sync. "
"týmů se do pozice osoby propíše role v daném týmu."
), ),
), ),
FieldPanel("content"), FieldPanel("content"),
...@@ -657,24 +669,34 @@ class DistrictPeoplePage(MainPeoplePageMixin): ...@@ -657,24 +669,34 @@ class DistrictPeoplePage(MainPeoplePageMixin):
### OTHERS ### OTHERS
def get_syncable_octopus_groups(self): def get_syncable_octopus_groups(self):
group_shortcuts = [] groups = []
for block in self.content: for block in self.content:
if block.block_type == "octopus_group": if block.block_type == "octopus_group":
group_shortcuts.append(block.value["group_shortcut"]) groups.append({
"shortcut": block.value["group_shortcut"],
"title": block.value["title"],
})
# Don't duplicate groups needlessly # Remove duplicates by converting to a set of tuples and back to a list of dicts
return list(set(group_shortcuts)) unique_groups = [dict(g) for g in {tuple(group.items()) for group in groups}]
return unique_groups
def get_syncable_octopus_teams(self): def get_syncable_octopus_teams(self):
team_shortcuts = [] teams = []
for block in self.content: for block in self.content:
if block.block_type == "octopus_team": if block.block_type == "octopus_team":
team_shortcuts.append(block.value["team_shortcut"]) teams.append({
"shortcut": block.value["team_shortcut"],
"title": block.value["title"],
})
# Remove duplicates by converting to a set of tuples and back to a list of dicts
unique_teams = [dict(t) for t in {tuple(team.items()) for team in teams}]
# Don't duplicate groups needlessly return unique_teams
return list(set(team_shortcuts))
class DistrictCalendarPage(SubpageMixin, MetadataPageMixin, CalendarMixin, Page): class DistrictCalendarPage(SubpageMixin, MetadataPageMixin, CalendarMixin, Page):
......
...@@ -36,6 +36,7 @@ def import_people_from_group( ...@@ -36,6 +36,7 @@ def import_people_from_group(
people_parent_page_id, people_parent_page_id,
collection_id, collection_id,
group_shortcut, group_shortcut,
group_display
): ):
from .models import DistrictOctopusPersonPage, DistrictPeoplePage from .models import DistrictOctopusPersonPage, DistrictPeoplePage
...@@ -55,6 +56,7 @@ def import_people_from_group( ...@@ -55,6 +56,7 @@ def import_people_from_group(
person_page_model=DistrictOctopusPersonPage, person_page_model=DistrictOctopusPersonPage,
collection_id=collection_id, collection_id=collection_id,
group_shortcut=group_shortcut, group_shortcut=group_shortcut,
group_display=group_display,
lock_file_name=lock_file_name, lock_file_name=lock_file_name,
).perform_import() ).perform_import()
...@@ -64,6 +66,7 @@ def import_people_from_team( ...@@ -64,6 +66,7 @@ def import_people_from_team(
people_parent_page_id, people_parent_page_id,
collection_id, collection_id,
team_shortcut, team_shortcut,
team_display,
): ):
from .models import DistrictOctopusPersonPage, DistrictPeoplePage from .models import DistrictOctopusPersonPage, DistrictPeoplePage
...@@ -83,5 +86,6 @@ def import_people_from_team( ...@@ -83,5 +86,6 @@ def import_people_from_team(
person_page_model=DistrictOctopusPersonPage, person_page_model=DistrictOctopusPersonPage,
collection_id=collection_id, collection_id=collection_id,
team_shortcut=team_shortcut, team_shortcut=team_shortcut,
team_display=team_display,
lock_file_name=lock_file_name, lock_file_name=lock_file_name,
).perform_import() ).perform_import()
# Generated by Django 5.0.7 on 2024-10-03 21:13
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shared', '0010_alter_octopusperson_photo'),
]
operations = [
migrations.AddField(
model_name='octopusperson',
name='position',
field=models.CharField(blank=True, max_length=128, null=True, verbose_name='Pozice'),
),
]
...@@ -2184,6 +2184,13 @@ class OctopusPerson(models.Model): ...@@ -2184,6 +2184,13 @@ class OctopusPerson(models.Model):
null=True, null=True,
) )
position = models.CharField(
"Pozice",
max_length=128,
blank=True,
null=True,
)
facebook_url = models.CharField( facebook_url = models.CharField(
"Facebook URL", "Facebook URL",
blank=True, blank=True,
......
...@@ -25,6 +25,7 @@ class PeopleGroupImporter: ...@@ -25,6 +25,7 @@ class PeopleGroupImporter:
person_page_model, person_page_model,
collection_id, collection_id,
group_shortcut, group_shortcut,
group_display,
lock_file_name, lock_file_name,
): ):
try: try:
...@@ -33,6 +34,7 @@ class PeopleGroupImporter: ...@@ -33,6 +34,7 @@ class PeopleGroupImporter:
self.person_page_model = person_page_model self.person_page_model = person_page_model
self.collection_id = collection_id self.collection_id = collection_id
self.group_shortcut = group_shortcut self.group_shortcut = group_shortcut
self.group_display = group_display
self.lock_file_name = lock_file_name self.lock_file_name = lock_file_name
self.new_user_count = 0 self.new_user_count = 0
...@@ -298,7 +300,7 @@ class PeopleGroupImporter: ...@@ -298,7 +300,7 @@ class PeopleGroupImporter:
return md5.hexdigest() return md5.hexdigest()
def perform_import(self): def ppeople_idserform_import(self):
logger.info( logger.info(
"Started Octopus person sync for page %s", self.people_parent_page_id "Started Octopus person sync for page %s", self.people_parent_page_id
) )
...@@ -328,12 +330,16 @@ class PeopleGroupImporter: ...@@ -328,12 +330,16 @@ class PeopleGroupImporter:
person=person_instance, person=person_instance,
is_automatically_created=True, is_automatically_created=True,
originating_group=self.group_shortcut, originating_group=self.group_shortcut,
originating_display=self.group_display,
title=person_instance.display_name, title=person_instance.display_name,
) )
self.people_parent_page.add_child(instance=person_page) self.people_parent_page.add_child(instance=person_page)
person_page.save_revision().publish() person_page.save_revision().publish()
else:
person_page.originating_display = self.group_display
person_page.save_revision().publish()
# Delete old pages that correspond to profiles which aren't # Delete old pages that correspond to profiles which aren't
# part of the group we are importing anymore. # part of the group we are importing anymore.
...@@ -371,6 +377,7 @@ class PeopleTeamImporter: ...@@ -371,6 +377,7 @@ class PeopleTeamImporter:
person_page_model, person_page_model,
collection_id, collection_id,
team_shortcut, team_shortcut,
team_display,
lock_file_name, lock_file_name,
): ):
try: try:
...@@ -379,6 +386,7 @@ class PeopleTeamImporter: ...@@ -379,6 +386,7 @@ class PeopleTeamImporter:
self.person_page_model = person_page_model self.person_page_model = person_page_model
self.collection_id = collection_id self.collection_id = collection_id
self.team_shortcut = team_shortcut self.team_shortcut = team_shortcut
self.team_display = team_display
self.lock_file_name = lock_file_name self.lock_file_name = lock_file_name
self.new_user_count = 0 self.new_user_count = 0
...@@ -411,6 +419,7 @@ class PeopleTeamImporter: ...@@ -411,6 +419,7 @@ class PeopleTeamImporter:
edges {{ edges {{
node {{ node {{
memberships {{ memberships {{
roleDisplay
person {{ person {{
id id
}} }}
...@@ -424,13 +433,16 @@ class PeopleTeamImporter: ...@@ -424,13 +433,16 @@ class PeopleTeamImporter:
result = self.client.execute(query) result = self.client.execute(query)
user_ids = [] users = []
for node in result["allTeams"]["edges"]: for node in result["allTeams"]["edges"]:
for membership in node["node"]["memberships"]: for membership in node["node"]["memberships"]:
user_ids.append(membership["person"]["id"]) users.append({
"id": membership["person"]["id"],
"role": membership["roleDisplay"]
})
return user_ids return users
def get_person_profile_from_id(self, id: str, kind: str): def get_person_profile_from_id(self, id: str, kind: str):
query = gql( query = gql(
...@@ -486,25 +498,30 @@ class PeopleTeamImporter: ...@@ -486,25 +498,30 @@ class PeopleTeamImporter:
def get_processed_people_profiles(self, people_ids): def get_processed_people_profiles(self, people_ids):
people_profiles = {} people_profiles = {}
for person_id in people_ids: for person in people_ids:
id = person["id"]
position = person["role"]
prirotizied_profiles = [] prirotizied_profiles = []
prirotizied_profiles.append( prirotizied_profiles.append(
self.get_person_profile_from_id(person_id, "POLITICAL") self.get_person_profile_from_id(id, "POLITICAL")
) )
prirotizied_profiles.append( prirotizied_profiles.append(
self.get_person_profile_from_id(person_id, "PIRATE") self.get_person_profile_from_id(id, "PIRATE")
) )
for profile in prirotizied_profiles: for profile in prirotizied_profiles:
if profile is None: if profile is None:
continue continue
people_profiles[person_id] = profile people_profiles[id] = profile
break break
if person_id not in people_profiles: if id not in people_profiles:
people_profiles[person_id] = None people_profiles[id] = None
else:
people_profiles[id]["position"] = position
return people_profiles return people_profiles
...@@ -540,6 +557,7 @@ class PeopleTeamImporter: ...@@ -540,6 +557,7 @@ class PeopleTeamImporter:
"degree_before": profile["person"]["degreeBeforeName"], "degree_before": profile["person"]["degreeBeforeName"],
"degree_after": profile["person"]["degreeAfterName"], "degree_after": profile["person"]["degreeAfterName"],
"display_name": profile["person"]["displayName"], "display_name": profile["person"]["displayName"],
"position": profile["position"]
} }
if person is None: if person is None:
...@@ -674,12 +692,16 @@ class PeopleTeamImporter: ...@@ -674,12 +692,16 @@ class PeopleTeamImporter:
person=person_instance, person=person_instance,
is_automatically_created=True, is_automatically_created=True,
originating_team=self.team_shortcut, originating_team=self.team_shortcut,
originating_display=self.team_display,
title=person_instance.display_name, title=person_instance.display_name,
) )
self.people_parent_page.add_child(instance=person_page) self.people_parent_page.add_child(instance=person_page)
person_page.save_revision().publish() person_page.save_revision().publish()
else:
person_page.originating_display = self.team_display
person_page.save_revision().publish()
# Delete old pages that correspond to profiles which aren't # Delete old pages that correspond to profiles which aren't
# part of the group we are importing anymore. # part of the group we are importing anymore.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment