Skip to content

Commit

Permalink
La source de vérité sont les objets liés aux révisionacteurs (#861)
Browse files Browse the repository at this point in the history
  • Loading branch information
kolok authored Sep 23, 2024
1 parent 2d8f97d commit 649f92f
Show file tree
Hide file tree
Showing 9 changed files with 651 additions and 414 deletions.
414 changes: 234 additions & 180 deletions dags/create_final_actors.py

Large diffs are not rendered by default.

61 changes: 61 additions & 0 deletions qfdmo/management/commands/copy_acteur_objects_to_revisionacteur.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
from django.core.management.base import BaseCommand

from qfdmo.models.acteur import Acteur, RevisionActeur, RevisionPropositionService


class Command(BaseCommand):
help = """
Browse acteur correction and remov the acteur which doesn't have activity anymore
"""

def add_arguments(self, parser):
parser.add_argument(
"--limit",
help="limit the number of acteurs to process",
type=int,
default=None,
)
parser.add_argument(
"--quiet",
help="limit the number of acteurs to process",
type=bool,
default=False,
)

def handle(self, *args, **options):
nb_acteur_limit = options.get("limit")
nb_processed = 0
total_revisionacteur = RevisionActeur.objects.count()
for revisionacteur in RevisionActeur.objects.all():
acteur = Acteur.objects.filter(
identifiant_unique=revisionacteur.identifiant_unique
).first()
if not acteur:
print(f"Acteur {revisionacteur.identifiant_unique} not found")
continue
if nb_processed % 100 == 0:
print(f"Processed {nb_processed}/{total_revisionacteur}")
if revisionacteur.labels.count() == 0:
for label in acteur.labels.all():
revisionacteur.labels.add(label)

if revisionacteur.acteur_services.count() == 0:
for acteur_service in acteur.acteur_services.all():
revisionacteur.acteur_services.add(acteur_service)

if revisionacteur.proposition_services.count() == 0:

for proposition_service in acteur.proposition_services.all():
revision_proposition_service = (
RevisionPropositionService.objects.create(
acteur=revisionacteur,
action_id=proposition_service.action_id,
)
)
revision_proposition_service.sous_categories.add(
*proposition_service.sous_categories.all()
)

nb_processed += 1
if nb_acteur_limit and nb_processed > nb_acteur_limit:
break
10 changes: 7 additions & 3 deletions qfdmo/models/acteur.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,22 +310,26 @@ def get_or_create_revision(self):
"statut",
],
)
(acteur, created) = RevisionActeur.objects.get_or_create(
(revisionacteur, created) = RevisionActeur.objects.get_or_create(
identifiant_unique=self.identifiant_unique, defaults=fields
)
if created:
for proposition_service in self.proposition_services.all(): # type: ignore
revision_proposition_service = (
RevisionPropositionService.objects.create(
acteur=acteur,
acteur=revisionacteur,
action_id=proposition_service.action_id,
)
)
revision_proposition_service.sous_categories.add(
*proposition_service.sous_categories.all()
)
for label in self.labels.all():
revisionacteur.labels.add(label)
for acteur_service in self.acteur_services.all():
revisionacteur.acteur_services.add(acteur_service)

return acteur
return revisionacteur

def clean_location(self):
if self.location is None and self.acteur_type.code != "acteur digital":
Expand Down
231 changes: 0 additions & 231 deletions unit_tests/dags/dag_create_final_actors.py

This file was deleted.

Loading

0 comments on commit 649f92f

Please sign in to comment.