Skip to content

Commit

Permalink
Permettre d'importer des aidants/responsables en donnant le numéro de…
Browse files Browse the repository at this point in the history
… demande datapass de l'orga à la place de l'id interne Django #466
  • Loading branch information
tut-tuuut authored Nov 22, 2021
2 parents a2e62ba + 8c063e4 commit bd029e7
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 2 deletions.
14 changes: 13 additions & 1 deletion aidants_connect_web/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
from import_export.admin import ImportMixin, ExportMixin, ImportExportMixin
from import_export.fields import Field
from import_export.results import RowResult
from import_export.widgets import ManyToManyWidget
from import_export.widgets import ManyToManyWidget, ForeignKeyWidget
from magicauth.models import MagicToken
from nested_admin import NestedModelAdmin, NestedTabularInline
from tabbed_admin import TabbedModelAdmin
Expand Down Expand Up @@ -335,6 +335,18 @@ class AidantResource(resources.ModelResource):
token = Field(attribute="token", column_name="token")
carte_ac = Field(attribute="carte_ac", column_name="carte_ac")
carte_totp = Field(attribute="carte_totp", column_name="carte_ac", readonly=True)
datapass_id = Field(
attribute="organisation",
widget=ForeignKeyWidget(Organisation, field="data_pass_id"),
)
responsable_de = Field(
attribute="responsable_de",
widget=ManyToManyWidget(Organisation, separator=";"),
)
respo_de_datapass_id = Field(
attribute="responsable_de",
widget=ManyToManyWidget(Organisation, field="data_pass_id", separator=";"),
)

class Meta:
model = Aidant
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,22 @@
<dl>
<dt>username</dt>
<dd>Obligatoire. Doit contenir l'e-mail de l'aidant.</dd>
<dt>datapass_id</dt>
<dd>Numéro de demande datapass de l'organisation.<br>
Si vous donnez ce numéro, <code>organisation_id</code> ne doit pas être présente.
</dd>
<dt>respo_de_datapass_id</dt>
<dd>Numéros de demande datapass des organisations dont l'aidant est responsable.
Séparez ces numéros par des <strong>POINTS-VIRGULES</strong>, par exemple : <code>4587;5933</code>.<br>
Si vous remplissez cette colonne, ne mettez pas de colonne <code>responsable_de</code>.
</dd>
<dt>organisation_id</dt>
<dd>Identifiant interne Django de l'organisation. Vous pouvez le retrouver dans la colonne ID de la page
Organisations de l'admin Django.
</dd>
<dt>responsable_de</dt>
<dd>Identifiants internes Django des organisations dont l'aidant est responsable.<br>
Séparez les identifiants par des virgules, par exemple&nbsp;: <code>4,5,6</code></dd>
Séparez les identifiants par des points-virgules, par exemple&nbsp;: <code>4;5;6</code></dd>
<dt>can_create_mandats</dt>
<dd>
Entrer <code>0</code> (zéro) ou <code>False</code> permet de créer un compte «&nbsp;responsable seulement&nbsp;»
Expand Down
34 changes: 34 additions & 0 deletions aidants_connect_web/tests/test_functional/test_import_aidant.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,3 +136,37 @@ def test_import_carte_totp(self):
aidant_a = Aidant.objects.get(username="plop@example.net")
self.assertTrue(aidant_a.has_a_carte_totp)
self.assertTrue(aidant_a.has_a_totp_device)

def test_import_using_datapass_id(self):
excel_file = path_join(
dirname(aidants_connect_web.__file__),
"fixtures",
"import-aidants",
"edge-cases",
"import-by-datapass-id.xlsx",
)

orga1 = OrganisationFactory(data_pass_id=5666)
orga2 = OrganisationFactory(data_pass_id=5667)
orga3 = OrganisationFactory(data_pass_id=5668)

self.import_file(excel_file)

self.assertEqual(5, Aidant.objects.count(), "Unexpected count of Aidants in DB")

aidant1 = Aidant.objects.get(username="aidant1@toto.net")
self.assertEqual(aidant1.organisation, orga1)

respo1 = Aidant.objects.get(username="respo1@toto.net")
self.assertEqual(aidant1.organisation, orga1)
self.assertIn(orga1, respo1.responsable_de.all())

respo2 = Aidant.objects.get(username="respo2@toto.net")
respo2_respo = respo2.responsable_de.all()
for org in (orga1, orga2):
self.assertIn(org, respo2_respo)

respo3 = Aidant.objects.get(username="respo3@toto.net")
respo3_respo = respo3.responsable_de.all()
for org in (orga1, orga2, orga3):
self.assertIn(org, respo3_respo)

0 comments on commit bd029e7

Please sign in to comment.