Projet

Général

Profil

Dépréciations et aide pour migrer

Le rapport de dépréciations concerne w.c.s, la brique des démarches (cf https://doc-publik.entrouvert.com/admin-fonctionnel/elements-deprecies/ pour voir toutes les dépréciations). Il est accessible à partir du back-office Studio > Rapport sur les dépréciations ou directement avec l'url https://url-de-wcs.portail.fr/backoffice/studio/deprecations/.

Il existe 8 types de dépréciations :

  • Types de champ dépréciés
  • Texte EZT
  • Condition Python
  • Source de données Python
  • Expression Python
  • Préremplissage Python
  • Modèles de document RTF
  • Source de données JSONP

Le bouton "Scanner à nouveau" permet de forcer la génération du rapport, si des corrections ont été effectuées par exemple.

Types de champ dépréciés

Les types de champs dépréciés sont :

  • les tableaux (tableau, tableau de liste, tableau de longueur libre)
  • les éléments classés

La plupart du temps, ils peuvent être remplacés par des blocs de champs.

Textes EZT

Cette dépréciation est probablement la plus simple à traiter.

Il y a fort fort longtemps, les variables devaient être mises entre crochets pour être interprétées.

Par exemple :

[agendas_url]api/booking/[reservation_response_booking_id]/cancel/

Il suffit de remplacer les crochets par des doubles accolades :

{{ agendas_url }}api/booking/{{reservation_response_booking_id }}/cancel/

Il est possible de trouver des textes comme :

[if-any user] ... [else ] ... [endif]
[if-any details] ... [endif]

À remplacer par :
{% if form_user %} ... {% else %} ... {% endif %}
{% if form_details %} ... {% endif %}

Mais aussi :

Texte EZT Gabarit Django
[url] {{ form_url }}
[number] {{ form_number }}
[before] {{ form_previous_status }}
[after] {{ form_status }}

Attention, certaines expressions utilisent des crochets mais il ne s'agit pas de texte EZT ! Par exemple :

form_var_telephone[:2] in ("06", "07")

Ici il s'agit d'une expression Python, à traiter comme indiqué dans la section concernée.

Conditions Python

Transformation/manipulation de valeurs

Les transformations de textes ou de valeurs passent désormais par les filtres Django. Les filtres permettent des opérations plus complexes, comme ajouter des jours ou des années ou encore faire du calcul d'âge. Profitez de repasser sur vos conditions pour les simplifier.

form_var_commune.lower() ==  "Paris" 
devient en Django :
form_var_commune|lower == "Paris" 
int(form_var_besoin_capacite) > 1
==>
form_var_besoin_capacite|decimal > 1
date(form_var_fin_saison) >= date(form_var_date_reprise)
==> 
form_var_fin_saison|date >= form_var_date_reprise|date
utils.age_in_days(form_var_date_debut_travaux) < -9
==>
form_var_date_debut_travaux|age_in_days < -9
(((datetime.datetime.today()-datetime.datetime.strptime(form_var_dn,"%d/%m/%Y")).days/365.25636567)<60)
==>
form_var_dn|age_in_years < 60
int(form_var_nb_organisateurs) + int(form_var_nb_public) <= int(form_var_capacite)
==> 
form_var_nb_organisateurs|add:form_var_nb_public|decimal <= form_var_capacite|decimal
form_var_telephone[:2] in ("06", "07")
==> 
form_var_telephone|startswith:"06" or form_var_telephone|startswith:"07" 
form_var_demandeur not in ["Autre","Son ex-époux ou son ex-épouse"] or (form_var_demandeur in ["Autre","Son ex-époux ou son ex-épouse"] and form_var_type_acte == "Un extrait d'acte sans filiation")
==> 
"Autre" not in form_var_demandeur or "Son ex-époux ou son ex-épouse" not in form_var_demandeur or "Autre" in form_var_demandeur and form_var_type_acte == "Un extrait d'acte sans filiation" or "Son ex-époux ou son ex-épouse" in form_var_demandeur and form_var_type_acte == "Un extrait d'acte sans filiation" 
inscription_response_in_waiting_list and inscription_response_in_waiting_list == True
==> 
form_workflow_data_inscription_response_in_waiting_list

Récupération de valeurs d'un webservice

Par exemple :

webservice.mon_webservice['places']['available'] > 0

Il faut vérifier le format de retour du webservice, les données peuvent être accessibles dans data ou autre :

webservice.mon_webservice.places.available|decimal > 0
webservice.mon_webservice.data.places.available|decimal > 0

La gestion des parenthèses

Les parenthèses ne sont pas prises en charge en Django. Pour remplacer une condition qui utilise des parenthèses, il faut tenir compte des priorités. "and" est prioritaire sur "or". Dans une condition de type :

form_var_foo == "Oui" or (form_var_bar == "Oui" and form_var_truc == "Oui")

Les parenthèses peuvent être enlevées sans problème, car form_var_bar "Oui" and form_var_truc "Oui" sera évalué en premier :

form_var_foo == "Oui" or form_var_bar == "Oui" and form_var_truc == "Oui" 

En revanche, pour :

(form_var_foo == "Oui" or form_var_bar == "Oui") and form_var_truc == "Oui" 

Il faut revoir la condition en :

form_var_foo == "Oui" and form_var_truc == "Oui" or form_var_bar == "Oui" and form_var_truc == "Oui" 

Sources de données Python

Les sources de données python peuvent être remplacées par des sources de données fiches ou par une liste simple. Si vous avez besoin de valeurs fixes indépendantes des libellés, passez par des fiches.

Exemples courants de sources de données python :

[{'id': 'MALE', 'text': 'Masculin'}, {'id': 'FEMALE', 'text': 'Féminin'}]
[{"id":"DEMI_PENSIONNAIRE", "text":"demi-pensionnaire"},{"id":"INTERNE", "text":"interne"},{"id":"EXTERNE", "text":"externe"},{"id":"RPI", "text":"RPI"}]

[{"id": "cni", "text": "carte d'identité"}, {"id": "passeport", "text": "passeport"}, {"id": "cni_passeport", "text": "carte d'identité et passeport"}]
[{"id": "1pers", "text": "une personne", "duree": "30 minutes"}, {"id": "2pers", "text": "deux personnes", "duree": "1 heure"}, {"id": "3pers", "text": "trois personnes", "duree": "1 heure 30"}]

Expressions Python et préremplissages Python

qualification_manuelle_var_quartier_manuel if form_var_avancement == "qualification manuelle du secteur" else form_var_secteur
==>
{% if form_var_avancement == "qualification manuelle du secteur" %}{{ qualification_manuelle_var_quartier_manuel_raw }}{% else %}{{ form_var_secteur_raw }}{% endif %}
"Je souhaite payer au guichet" if form_var_essai == "Oui" else "" 
==>
{% if form_var_essai == "Je souhaite payer au guichet" %}Oui{% endif %}
"Oui" if form_var_envoi_usager == "Oui" else "Non" 
==>
{% if form_var_envoi_usager == "Oui" %}Oui{% else %}Non{% endif %}
vars().get('reponse_var_salle_raw') or form_var_salle_raw
==>
{% firstof form_workflow_data_reponse_var_salle_raw form_var_salle_raw "" %}
str(Decimal(form_option_tarif) * Decimal(form_var_nb_places))
==>
form_option_tarif|multiply:form_var_nb_places

(La chaîne étant le format par défaut dans Publik, il n'est pas nécessaire de forcer son type).

utils.make_date(form_var_enfant_birthdate).strftime('%d/%m/%Y')
==>
form_var_enfant_birthdate|date:"d/m/Y" 
form_var_commune.lower()
==>
form_var_commune|lower
vars().get('form_var_avis', "En attente")
==>
{{ form_var_avis|default:"En attente" }}
date(today) + days(10)
==>
{{ today|add_days:10 }}
int(form_var_nombre_redirections)+1
==>
{{ form_var_nombre_redirections|add:1 }}
rdv_var_heure + "H" + rdv_var_minute
==>
{{ rdv_var_heure }}H{{ rdv_var_minute }}
form_var_cp_ville.split(' - ',1)[0]
==>
form_var_cp_ville|split:' - '|first

Attention, split est une fonction un peu complexe de python. L'exemple ci-dessus ne s'appliquera pas à toute expression l'utilisant.

form_var_event_datetime[:4]
form_var_event_datetime[5:7]
==>
form_var_event_datetime|date:"Y" 
form_var_event_datetime|date:"m" 
form_var_nom+" "+form_var_prenom
==>
{{ form_var_nom }} {{ form_var_prenom }}

Pré-remplissage d'un champ liste à choix multiples

['Banane', 'Poire']

est identique en Django.

Pré-remplissage d'un champ "case à cocher choix unique"

True

est identique en Django.

Les fichiers joints

L'ancienne forme était :

form_attachments.fichier_usager

Ou
getattr(vars().get('form_attachments'), 'fichier_usager', None)

Il faut désormais utiliser la syntaxe :

form_var_fichier_usager_raw

Modèles de document RTF

Dans les actions de workflow "Créer un document", il était possible de mettre un rtf. Il faut désormais utiliser le format odt.

Source de données JSONP

À remplacer par une source de données JSON, mais cela nécessite de bien comprendre le fonctionnement de la source de données utilisée pour récupérer un élément précis ("id") et permettre d'effectuer une recherche ("q").

Formats disponibles : PDF HTML TXT