diff --git a/env.d/dashboard b/env.d/dashboard index bea190d9..8f95e626 100644 --- a/env.d/dashboard +++ b/env.d/dashboard @@ -29,3 +29,5 @@ DASHBOARD_CONTROL_AUTHORITY_REPRESENTED_BY=John Doe DASHBOARD_CONTROL_AUTHORITY_EMAIL=jdoe@exemple.com DASHBOARD_CONSENT_DONE_AT=Paris + +DASHBOARD_TEAM_EMAIL=contact@exemple.com diff --git a/src/dashboard/apps/consent/forms.py b/src/dashboard/apps/consent/forms.py index 3e94e7b0..bd4878cd 100644 --- a/src/dashboard/apps/consent/forms.py +++ b/src/dashboard/apps/consent/forms.py @@ -14,13 +14,95 @@ class ConsentCheckboxInput(CheckboxInput): class ConsentForm(forms.Form): """Save user consent through a checkbox field.""" + # Specific authorisation checkbox + is_authorized_signatory = forms.BooleanField( + required=True, + initial=False, + widget=ConsentCheckboxInput( + attrs={ + "label": "Le signataire du présent formulaire déclare être dûment " + "habilité par le client pour la signature du présent " + "document.", + }, + ), + ) + + allows_measurements = forms.BooleanField( + required=True, + initial=False, + widget=ConsentCheckboxInput( + attrs={ + "label": "L'historique des mesures, en kWh,", + "description": "du site (et puissances atteintes et dépassements " + "de puissance) : sur la période souhaitée, de 36 mois " + "maximum à compter de la date de la demande " + "(période limitée à la date de début du contrat)", + }, + ), + ) + allows_daily_index_readings = forms.BooleanField( + required=True, + initial=False, + widget=ConsentCheckboxInput( + attrs={ + "label": "L'historique des relevés d'index quotidiens, kWh, ", + "description": "du site; sur la période souhaitée, de 36 mois maximum " + "à compter de la date de la demande (période limitée " + "à la date de début du contrat)", + }, + ), + ) + allows_max_daily_power = forms.BooleanField( + required=True, + initial=False, + widget=ConsentCheckboxInput( + attrs={ + "label": "L'historique de la puissance maximale quotidienne, kVA " + "ou kWh,", + "description": "du site ; sur la période souhaitée, de 36 mois maximum " + "à compter de la date de la demande (période limitée à " + "la date de début du contrat)", + }, + ), + ) + allows_load_curve = forms.BooleanField( + required=True, + initial=False, + widget=ConsentCheckboxInput( + attrs={ + "label": "L'historique de courbe de charge, aux pas restitués " + "par Enedis,", + "description": "du site1; sur la période souhaitée, " + "de 24 mois maximum " + "à compter de la date de la demande (période limitée à " + "la date de début du contrat)", + "help_text": "1 Ensembles de valuers moyennes horodatées " + "de la puissance active ou réactive soutirée, sur des " + "périodes d'intégrations consécutives et de même durée.", + }, + ), + ) + allows_technical_contractual_data = forms.BooleanField( + required=True, + initial=False, + widget=ConsentCheckboxInput( + attrs={ + "label": "Les données techniques et contractuelles disponibles ", + "description": "du site ; Caractéristiques du raccordement, du " + "dispositif de comptage et des informations " + "contractuelles (option tarifaire, puissance " + "souscrite...)", + }, + ), + ) + + # Global authorisation checkbox consent_agreed = forms.BooleanField( required=True, initial=False, widget=ConsentCheckboxInput( attrs={ - "label": _("I agree to give my consent"), - "help_text": _("Please confirm your consent by checking this box."), + "label": _("J'accepte de donner mon consentement"), }, ), ) diff --git a/src/dashboard/apps/consent/templates/consent/forms/widgets/checkbox.html b/src/dashboard/apps/consent/templates/consent/forms/widgets/checkbox.html index 519a6996..b85c280d 100644 --- a/src/dashboard/apps/consent/templates/consent/forms/widgets/checkbox.html +++ b/src/dashboard/apps/consent/templates/consent/forms/widgets/checkbox.html @@ -2,6 +2,10 @@ + diff --git a/src/dashboard/apps/consent/templates/consent/includes/_manage_authorisations.html b/src/dashboard/apps/consent/templates/consent/includes/_manage_authorisations.html new file mode 100644 index 00000000..247abec8 --- /dev/null +++ b/src/dashboard/apps/consent/templates/consent/includes/_manage_authorisations.html @@ -0,0 +1,71 @@ +{% load i18n %} + +
+ + D. Données à transmettre à la DGEC + + +

Par la signature de ce document, le Client autorise expressément le Tiers à + demander et à recevoir communication auprès d'Enedis, SA à directoire et à + conseil de surveillance, au capital de 270 037 000 euros, immatriculés au R.C.S + de Nanterre sous le numéro 444 608 442 et dont le siège social est situé Tour + Enedis, 34 place des Corolles, 92070 Paris La Défense Cedex, des données + cochées ci-dessous, sous réserve de disponibilité : +

+ + {% for field in form %} + + {% if forloop.last %} + {% comment %} + Ce paragraphe se situe juste avant La case à cocher de consentement global + Attention: la case à cocher 'consent_agreed' doit toujours se trouver en dernière + position dans le form correspondant + {% endcomment %} +

+ Usage des données : Suivi de la mise en œuvre de la politique énergétique. +

+

+ La présente autorisation ne peut être cédée et pourra être retirée à tout moment. + Elle est consentie pour toute la période du contrat ou à défaut pour la durée de + 12 mois à compter de la date de signature. Les données ainsi acquises sont + détruites dès la fin de validité de la présente autorisation. +
+ La présente autorisation est conservée pendant 5 ans à compter + de sa signature conformément à l’article 2224 du code civil et sont destinées à + Enedis qui s’engage à ne pas communiquer ces informations à des tiers sauf + obligation réglementaire. +
+ Conformément à la loi n°78-17 du 6 janvier 1978 modifiée et au règlement (UE) + n°2016/679 du 27 avril 2016, les informations recueillies sont enregistrées dans + un fichier informatisé par ENEDIS en sa qualité de responsable du traitement à + des fins de gestion et de traçabilité des demandes. +
+ Vous disposez d’un droit d’accès à vos données, de rectification, d’opposition et + d’effacement pour motifs légitimes. + Vous disposez, également, d’un droit à la limitation du traitement et à la + portabilité des données à caractère personnel vous concernant. + Vous pouvez exercer vos droits à l’adresse suivante : Enedis, 34 place des + Corolles, 92079 Paris La Défense Cedex. + Conformément à la loi "informatique et libertés", vous disposez de la faculté + d’introduire une réclamation auprès de la CNIL. +

+ + {% include "consent/includes/_manage_consents_date_place.html" %} + {% endif %} + +
+
+ {{ field }} + +
+
+ {% endfor %} +
diff --git a/src/dashboard/apps/consent/templates/consent/includes/_manage_company_informations.html b/src/dashboard/apps/consent/templates/consent/includes/_manage_company_informations.html new file mode 100644 index 00000000..0108f46e --- /dev/null +++ b/src/dashboard/apps/consent/templates/consent/includes/_manage_company_informations.html @@ -0,0 +1,71 @@ +{% load i18n %} + +{% for entity in entities %} +
+ + B. Client raccordé + + +

+ Merci de vérifier l'exactitude des informations concernant votre structure et le + signataire de ce présent formulaire. +
+ En cas d'informations erronées, merci de nous contacter : + + {{ mailto }} + +

+
+
+
+
+ + + + + + + + + + {% with row_number=0 %} + + + + {% include "consent/includes/_table_row.html" with label="Dénomination sociale" value=entity.name row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="Type de structure" value=entity.company_type row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="Forme juridique" value=entity.legal_form row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="Nom commercial" value=entity.trade_name row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="N° d'identification SIRET" value=entity.siret row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="Activité NAF" value=entity.naf row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="Adresse" value=entity.address_1 row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="Complément d'adresse" value=entity.address_2 row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="Code Postale" value=entity.address_zip_code row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="Commune" value=entity.address_city row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="Nom du titulaire du contrat" value="-" row_number=row_number|add:"1" %} + + + + + {% include "consent/includes/_table_row.html" with label="Nom" value=request.user.last_name row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="Prénom" value=request.user.first_name row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="E-mail" value=request.user.email row_number=row_number|add:"1" %} + {% endwith %} + +
+ {% trans "Informations sur l'entreprise et le représentant" %} +
+ Libellé + + Valeur +
Informations sur la structure
+ Informations sur le signataire du présent formulaire +
+
+
+
+
+ +
+ {% endfor %} diff --git a/src/dashboard/apps/consent/templates/consent/includes/_manage_consents.html b/src/dashboard/apps/consent/templates/consent/includes/_manage_consents.html new file mode 100644 index 00000000..f17bbfd2 --- /dev/null +++ b/src/dashboard/apps/consent/templates/consent/includes/_manage_consents.html @@ -0,0 +1,57 @@ +{% load i18n %} + +
+ + A. Points de livraison à valider + + +

+ Cochez les lignes correspondant aux PRM pour lesquelles vous autorisez expressément + la DGEC à demander et à recevoir communication des données mentionnées au point D. +

+ + {# toggle button #} +
+ + +
+ + {# delivery points #} + +
diff --git a/src/dashboard/apps/consent/templates/consent/includes/_manage_consents_control_authority.html b/src/dashboard/apps/consent/templates/consent/includes/_manage_consents_control_authority.html new file mode 100644 index 00000000..b13f5409 --- /dev/null +++ b/src/dashboard/apps/consent/templates/consent/includes/_manage_consents_control_authority.html @@ -0,0 +1,43 @@ +{% load i18n %} + +
+ + C. Tiers + + +
+
+
+
+ + + + + + + + + + {% with row_number=0 %} + {% include "consent/includes/_table_row.html" with label="Dénomination sociale" value=control_authority.name row_number=row_number|add:"1" %} + {% with control_authority.address_1|add:"
"|add:control_authority.address_2|add:"
"|add:control_authority.zip_code|add:" "|add:control_authority.city as control_authority_address %} + {% include "consent/includes/_table_row.html" with label="Adresse" value=control_authority_address|safe row_number=row_number|add:"1" %} + {% endwith %} + {% include "consent/includes/_table_row.html" with label="Représenté par" value=control_authority.represented_by row_number=row_number|add:"1" %} + {% include "consent/includes/_table_row.html" with label="E-mail" value=control_authority.email row_number=row_number|add:"1" %} + {% endwith %} + +
+ {% trans "Informations sur le tiers" %} +
+ Libellé + + Valeur +
+
+
+
+
+ +
+ diff --git a/src/dashboard/apps/consent/templates/consent/includes/_manage_consents_date_place.html b/src/dashboard/apps/consent/templates/consent/includes/_manage_consents_date_place.html new file mode 100644 index 00000000..43c33061 --- /dev/null +++ b/src/dashboard/apps/consent/templates/consent/includes/_manage_consents_date_place.html @@ -0,0 +1,14 @@ +{% load i18n %} + +

+ Fait à : {{ consent_done_at }} +
+ Le : {% now "d/m/Y" %} +

+ + diff --git a/src/dashboard/apps/consent/templates/consent/includes/_table_row.html b/src/dashboard/apps/consent/templates/consent/includes/_table_row.html new file mode 100644 index 00000000..c7efb768 --- /dev/null +++ b/src/dashboard/apps/consent/templates/consent/includes/_table_row.html @@ -0,0 +1,8 @@ + + + {{ label }} + + + {{ value }} + + diff --git a/src/dashboard/apps/consent/templates/consent/manage.html b/src/dashboard/apps/consent/templates/consent/manage.html index d29a7dd4..ec099047 100644 --- a/src/dashboard/apps/consent/templates/consent/manage.html +++ b/src/dashboard/apps/consent/templates/consent/manage.html @@ -3,86 +3,34 @@ {% load i18n static %} {% block dashboard_content %} -

{% trans "Manage consents" %}

+

Gérer les autorisations

+

+ Indiquez les point de livraisons pour lesquels vous autorisez la DGEC à interroger + le gestionnaire du réseau de distribution. +

-{% if entities %} -
- {% csrf_token %} - -
- {% if form.errors %} -
-

- {% trans "The form contains errors" %} -

-
- {% endif %} -
- - {# toggle button #} -
-
- - -
-
- - - - {# checkbox to apply the consent globally #} -
-
- {{ form.consent_agreed }} -
- {% if form.consent_agreed.errors %} - {% for error in form.consent_agreed.errors %} -

- {{ error }} -

- {% endfor %} - {% endif %} -
-
+ {% if entities %} + + {% csrf_token %} + +
+ {% if form.errors %} +
+

+ {% trans "The form contains errors" %} +

+
+ {% endif %}
- - - + {% include "consent/includes/_manage_consents.html" %} + {% include "consent/includes/_manage_company_informations.html" %} + {% include "consent/includes/_manage_consents_control_authority.html" %} + {% include "consent/includes/_manage_authorisations.html" %} + + + {% else %}

{% trans "No consents to validate" %}

diff --git a/src/dashboard/apps/consent/views.py b/src/dashboard/apps/consent/views.py index cd8b8fec..bc0baf47 100644 --- a/src/dashboard/apps/consent/views.py +++ b/src/dashboard/apps/consent/views.py @@ -10,12 +10,14 @@ from django.views.generic import FormView, TemplateView from apps.core.models import Entity +from dashboard.settings import TEAM_EMAIL from ..auth.models import DashboardUser from . import AWAITING, VALIDATED from .forms import ConsentForm from .mixins import BreadcrumbContextMixin from .models import Consent +from .settings import CONSENT_CONTROL_AUTHORITY, CONSENT_DONE_AT class IndexView(BreadcrumbContextMixin, TemplateView): @@ -67,7 +69,10 @@ def get_context_data(self, **kwargs): If a slug is provided, adds the entity corresponding to the slug. """ context = super().get_context_data(**kwargs) + context["control_authority"] = CONSENT_CONTROL_AUTHORITY context["entities"] = self._get_entities() + context["consent_done_at"] = CONSENT_DONE_AT + context["mailto"] = TEAM_EMAIL return context def _get_entities(self) -> list: diff --git a/src/dashboard/dashboard/settings.py b/src/dashboard/dashboard/settings.py index 575f0a38..bc9758ab 100644 --- a/src/dashboard/dashboard/settings.py +++ b/src/dashboard/dashboard/settings.py @@ -181,6 +181,9 @@ send_default_pii=True, ) +## Dashboard +TEAM_EMAIL = env.str("TEAM_EMAIL") + ## Consent app # CONSENT_NUMBER_DAYS_END_DATE allows to calculate the end date of a consent period by