Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client
1 result
Show changes
Commits on Source (2)
Showing
with 196 additions and 635 deletions
[
{
"_id": { "$oid": "5fbb933b80a5c257dc0161f5" },
"modules": [
{
"id": 260,
"display_id": "260",
"display_name": "Modules APTIC - n°260",
"digest": "Maitrise de l’environnement d’un ordinateur (clavier, souris)",
"text": "Maitrise de l’environnement d’un ordinateur (clavier, souris)",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/260/",
"receipt_time": "2020-09-01T15:16:53",
"last_update_time": "2020-09-28T11:34:49"
},
{
"id": 259,
"display_id": "259",
"display_name": "Modules APTIC - n°259",
"digest": "Composantes et facettes de l’identité numérique",
"text": "Composantes et facettes de l’identité numérique",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/259/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:35:39"
},
{
"id": 261,
"display_id": "261",
"display_name": "Modules APTIC - n°261",
"digest": "Internet : fonctionnement et outils de navigation web",
"text": "Internet : fonctionnement et outils de navigation web",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/261/",
"receipt_time": "2020-09-28T11:49:27",
"last_update_time": "2020-09-28T11:49:27"
},
{
"id": 249,
"display_id": "249",
"display_name": "Modules APTIC - n°249",
"digest": "Internet : fonctionnement des emails",
"text": "Internet : fonctionnement des emails",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/249/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:34:34"
},
{
"id": 222,
"display_id": "222",
"display_name": "Modules APTIC - n°222",
"digest": "Le smartphone : principes de fonctionnement",
"text": "Le smartphone : principes de fonctionnement",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/222/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:36:31"
},
{
"id": 212,
"display_id": "212",
"display_name": "Modules APTIC - n°212",
"digest": "Internet : envoyer, recevoir, gérer ses emails",
"text": "Internet : envoyer, recevoir, gérer ses emails",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/212/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:37:10"
},
{
"id": 186,
"display_id": "186",
"display_name": "Modules APTIC - n°186",
"digest": "Smartphones et Tablettes sous Androïd",
"text": "Smartphones et Tablettes sous Androïd",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/186/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:37:58"
},
{
"id": 183,
"display_id": "183",
"display_name": "Modules APTIC - n°183",
"digest": "Smartphone : Les principaux gestes pour l'écran tactile",
"text": "Smartphone : Les principaux gestes pour l'écran tactile",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/183/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:38:33"
}
],
"name": "Les compétences de base",
"id": "baseSkills",
"__v": 0
},
{
"_id": { "$oid": "5fbb934180a5c257dc0161f6" },
"modules": [
{
"id": 176,
"display_id": "176",
"display_name": "Modules APTIC - n°176",
"digest": "Pôle Emploi : faire ses déclarations en ligne",
"text": "Pôle Emploi : faire ses déclarations en ligne",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/176/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:40:18"
},
{
"id": 175,
"display_id": "175",
"display_name": "Modules APTIC - n°175",
"digest": "Déclarer ses revenus en ligne et découvertes des services proposés",
"text": "Déclarer ses revenus en ligne et découvertes des services proposés",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/175/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:41:14"
},
{
"id": 174,
"display_id": "174",
"display_name": "Modules APTIC - n°174",
"digest": "Accéder à ses droits sociaux et les gérer en ligne (RSA…)",
"text": "Accéder à ses droits sociaux et les gérer en ligne (RSA…)",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/174/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:41:49"
},
{
"id": 173,
"display_id": "173",
"display_name": "Modules APTIC - n°173",
"digest": "Ouvrir et gérer son dossier de retraite (CNAF/CARSAT) en ligne",
"text": "Ouvrir et gérer son dossier de retraite (CNAF/CARSAT) en ligne",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/173/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:42:26"
},
{
"id": 172,
"display_id": "172",
"display_name": "Modules APTIC - n°172",
"digest": "Gérer son abonnement et ses factures d'électricité/gaz en ligne",
"text": "Gérer son abonnement et ses factures d'électricité/gaz en ligne",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/172/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:43:02"
},
{
"id": 171,
"display_id": "171",
"display_name": "Modules APTIC - n°171",
"digest": "Gérer ses droits d'assuré social en ligne/sur internet",
"text": "Gérer ses droits d'assuré social en ligne/sur internet",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/171/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:43:38"
},
{
"id": 167,
"display_id": "167",
"display_name": "Modules APTIC - n°167",
"digest": "Plateforme Ameli.fr : la sécurité sociale en ligne",
"text": "Plateforme Ameli.fr : la sécurité sociale en ligne",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/167/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:46:37"
},
{
"id": 165,
"display_id": "165",
"display_name": "Modules APTIC - n°165",
"digest": "Plateforme France Connect",
"text": "Plateforme France Connect",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/165/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T11:47:07"
}
],
"name": "Accès aux droits",
"id": "accessRight",
"__v": 0
},
{
"_id": { "$oid": "5fbb934780a5c257dc0161f7" },
"modules": [
{
"id": 254,
"display_id": "254",
"display_name": "Modules APTIC - n°254",
"digest": "Utiliser les réseaux sociaux pour sa recherche d'emploi",
"text": "Utiliser les réseaux sociaux pour sa recherche d'emploi",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/254/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:00:45"
},
{
"id": 240,
"display_id": "240",
"display_name": "Modules APTIC - n°240",
"digest": "Panorama des plateformes de recherche d’emploi",
"text": "Panorama des plateformes de recherche d’emploi",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/240/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:00:16"
},
{
"id": 194,
"display_id": "194",
"display_name": "Modules APTIC - n°194",
"digest": "Traitement de texte : découverte",
"text": "Traitement de texte : découverte",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/194/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:01:59"
},
{
"id": 193,
"display_id": "193",
"display_name": "Modules APTIC - n°193",
"digest": "Traitement de texte : utilisation de base",
"text": "Traitement de texte : utilisation de base",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/193/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:03:40"
},
{
"id": 192,
"display_id": "192",
"display_name": "Modules APTIC - n°192",
"digest": "Traitement de texte : utilisation avancée",
"text": "Traitement de texte : utilisation avancée",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/192/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:01:15"
},
{
"id": 191,
"display_id": "191",
"display_name": "Modules APTIC - n°191",
"digest": "Tableur : découverte",
"text": "Tableur : découverte",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/191/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T16:59:55"
},
{
"id": 262,
"display_id": "262",
"display_name": "Modules APTIC - n°262",
"digest": "Réalisation CV",
"text": "Réalisation CV",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/262/",
"receipt_time": "2020-09-28T12:16:43",
"last_update_time": "2020-09-28T12:16:43"
},
{
"id": 263,
"display_id": "263",
"display_name": "Modules APTIC - n°263",
"digest": "Diffuser son CV en ligne",
"text": "Diffuser son CV en ligne",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/263/",
"receipt_time": "2020-09-28T12:18:40",
"last_update_time": "2020-09-28T12:18:40"
},
{
"id": 3,
"display_id": "3",
"display_name": "Modules APTIC - n°3",
"digest": "Organiser sa recherche d'emploi",
"text": "Organiser sa recherche d'emploi",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/3/",
"receipt_time": "2020-09-01T15:13:48",
"last_update_time": "2020-10-08T17:01:53"
}
],
"name": "Insertion sociale et professionnelle",
"id": "socialAndProfessional",
"__v": 0
},
{
"_id": { "$oid": "5fbb934c80a5c257dc0161f8" },
"modules": [
{
"id": 257,
"display_id": "257",
"display_name": "Modules APTIC - n\u00b0257",
"digest": "\u00catre parent \u00e0 l'\u00e8re num\u00e9rique: conna\u00eetre les usages, jouer son r\u00f4le de parent - 03",
"text": "\u00catre parent \u00e0 l'\u00e8re num\u00e9rique: conna\u00eetre les usages, jouer son r\u00f4le de parent - 03",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/257/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:04:33"
},
{
"id": 238,
"display_id": "238",
"display_name": "Modules APTIC - n\u00b0238",
"digest": "D\u00e9couvrir l\u2019univers des jeux vid\u00e9o - 22",
"text": "D\u00e9couvrir l\u2019univers des jeux vid\u00e9o - 22",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/238/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T12:27:06"
},
{
"id": 178,
"display_id": "178",
"display_name": "Modules APTIC - n\u00b0178",
"digest": "Suivre la scolarit\u00e9 de son enfant - 82",
"text": "Suivre la scolarit\u00e9 de son enfant - 82",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/178/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T12:27:28"
},
{
"id": 166,
"display_id": "166",
"display_name": "Modules APTIC - n\u00b0166",
"digest": "D\u00e9couvrir les services en ligne de l'enfance de votre commune - 94",
"text": "D\u00e9couvrir les services en ligne de l'enfance de votre commune - 94",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/166/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T12:27:49"
}
],
"name": "Aide à la parentalité",
"id": "parentingHelp",
"__v": 0
},
{
"_id": { "$oid": "5fbb935080a5c257dc0161f9" },
"modules": [
{
"id": 264,
"display_id": "264",
"display_name": "Modules APTIC - n\u00b0264",
"digest": "Les conduites \u00e0 risques et les bons usages du num\u00e9rique - 02",
"text": "Les conduites \u00e0 risques et les bons usages du num\u00e9rique - 02",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/264/",
"receipt_time": "2020-09-28T12:20:29",
"last_update_time": "2020-10-08T17:07:13"
},
{
"id": 255,
"display_id": "255",
"display_name": "Modules APTIC - n\u00b0255",
"digest": "D\u00e9couvrir les r\u00e9seaux sociaux : d\u00e9finition, fonctionnement - 05",
"text": "D\u00e9couvrir les r\u00e9seaux sociaux : d\u00e9finition, fonctionnement - 05",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/255/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:07:08"
},
{
"id": 265,
"display_id": "265",
"display_name": "Modules APTIC - n\u00b0265",
"digest": "Fablab : charte, valeurs et panorama des outils num\u00e9riques - 09",
"text": "Fablab : charte, valeurs et panorama des outils num\u00e9riques - 09",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/265/",
"receipt_time": "2020-09-28T12:24:48",
"last_update_time": "2020-10-08T17:06:35"
},
{
"id": 232,
"display_id": "232",
"display_name": "Modules APTIC - n\u00b0232",
"digest": "Les paiements en ligne - 28",
"text": "Les paiements en ligne - 28",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/232/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:15:56"
},
{
"id": 225,
"display_id": "225",
"display_name": "Modules APTIC - n\u00b0225",
"digest": "Internet : comprendre les principes de fonctionnement - 35",
"text": "Internet : comprendre les principes de fonctionnement - 35",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/225/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T12:21:13"
},
{
"id": 221,
"display_id": "221",
"display_name": "Modules APTIC - n\u00b0221",
"digest": "Techniques de v\u00e9rification de l\u2019information - 39",
"text": "Techniques de v\u00e9rification de l\u2019information - 39",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/221/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:12:07"
},
{
"id": 218,
"display_id": "218",
"display_name": "Modules APTIC - n\u00b0218",
"digest": "Cr\u00e9er et param\u00e9trer un compte Google - 42",
"text": "Cr\u00e9er et param\u00e9trer un compte Google - 42",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/218/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T12:21:50"
},
{
"id": 209,
"display_id": "209",
"display_name": "Modules APTIC - n\u00b0209",
"digest": "G\u00e9rer ses donn\u00e9es : sauvegarde en ligne (dans le cloud) - 51",
"text": "G\u00e9rer ses donn\u00e9es : sauvegarde en ligne (dans le cloud) - 51",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/209/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T12:22:21"
},
{
"id": 208,
"display_id": "208",
"display_name": "Modules APTIC - n\u00b0208",
"digest": "G\u00e9rer ses donn\u00e9es : sauvegardes locales (disques durs externes, cl\u00e9 USB) - 52",
"text": "G\u00e9rer ses donn\u00e9es : sauvegardes locales (disques durs externes, cl\u00e9 USB) - 52",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/208/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T12:23:10"
},
{
"id": 206,
"display_id": "206",
"display_name": "Modules APTIC - n\u00b0206",
"digest": "Classer, g\u00e9rer et partager ses photos - 54",
"text": "Classer, g\u00e9rer et partager ses photos - 54",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/206/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:12:28"
},
{
"id": 195,
"display_id": "195",
"display_name": "Modules APTIC - n\u00b0195",
"digest": "Skype et autres outils de visioconf\u00e9rence - 65",
"text": "Skype et autres outils de visioconf\u00e9rence - 65",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/195/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-09-28T12:25:44"
},
{
"id": 164,
"display_id": "164",
"display_name": "Modules APTIC - n\u00b0164",
"digest": "Connaitre et g\u00e9rer son identit\u00e9 num\u00e9rique - 96",
"text": "Connaitre et g\u00e9rer son identit\u00e9 num\u00e9rique - 96",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/164/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:13:35"
},
{
"id": 163,
"display_id": "163",
"display_name": "Modules APTIC - n\u00b0163",
"digest": "Nettoyer son identit\u00e9 num\u00e9rique - 97",
"text": "Nettoyer son identit\u00e9 num\u00e9rique - 97",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/163/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:13:57"
},
{
"id": 162,
"display_id": "162",
"display_name": "Modules APTIC - n\u00b0162",
"digest": "Effacer ses traces sur le web, prot\u00e9ger ses donn\u00e9es personnelles - 98",
"text": "Effacer ses traces sur le web, prot\u00e9ger ses donn\u00e9es personnelles - 98",
"url": "https://services.formulaireextranet.grandlyon.com/backoffice/data/modules-aptic/162/",
"receipt_time": "2020-09-01T15:16:52",
"last_update_time": "2020-10-08T17:13:04"
}
],
"name": "Culture et sécurité numérique",
"id": "digitalCultureSecurity",
"__v": 0
}
]
{
"name": "pamn",
"version": "2.0.0-beta2.1",
"version": "2.0.0-beta2.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
......@@ -12294,7 +12294,7 @@
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
"integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
"dev": true
},
"cacache": {
......@@ -12825,7 +12825,7 @@
"commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
"integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
"dev": true
},
"compare-func": {
......@@ -12874,7 +12874,7 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
}
}
......@@ -12935,7 +12935,7 @@
"console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
"integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
"dev": true
},
"content-disposition": {
......@@ -13271,7 +13271,7 @@
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
"dev": true
},
"copy-anything": {
......@@ -13665,7 +13665,7 @@
"custom-event": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
"integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
"integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==",
"dev": true
},
"d": {
......@@ -13779,7 +13779,7 @@
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==",
"dev": true
},
"dedent": {
......@@ -13826,7 +13826,7 @@
"defaults": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
"integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
"integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==",
"dev": true,
"requires": {
"clone": "^1.0.2"
......@@ -13856,7 +13856,7 @@
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
"dev": true
},
"depd": {
......@@ -13904,7 +13904,7 @@
"di": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
"integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
"integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==",
"dev": true
},
"diff": {
......@@ -13931,7 +13931,7 @@
"dns-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
"integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
"integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==",
"dev": true
},
"dns-packet": {
......@@ -13955,7 +13955,7 @@
"dom-serialize": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
"integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
"integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==",
"dev": true,
"requires": {
"custom-event": "~1.0.0",
......@@ -14221,7 +14221,7 @@
"ent": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
"integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
"integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==",
"dev": true
},
"entities": {
......@@ -16050,7 +16050,7 @@
"has-unicode": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
"dev": true
},
"hat": {
......@@ -16102,7 +16102,7 @@
"hpack.js": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
"integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
"integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
"dev": true,
"requires": {
"inherits": "^2.0.1",
......@@ -16201,7 +16201,7 @@
"http-deceiver": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
"integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
"integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",
"dev": true
},
"http-errors": {
......@@ -16404,7 +16404,7 @@
"humanize-ms": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
"integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=",
"integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
"dev": true,
"requires": {
"ms": "^2.0.0"
......@@ -16478,7 +16478,7 @@
"image-size": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
"integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
"integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
"dev": true,
"optional": true
},
......@@ -16785,7 +16785,7 @@
"is-lambda": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
"integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=",
"integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
"dev": true
},
"is-module": {
......@@ -16914,7 +16914,7 @@
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true
},
"isstream": {
......@@ -19850,7 +19850,7 @@
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
"dev": true
},
"merge-stream": {
......@@ -19868,7 +19868,7 @@
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
"dev": true
},
"micromatch": {
......@@ -20502,7 +20502,7 @@
"normalize-range": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
"integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
"integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
"dev": true
},
"npm-bundled": {
......@@ -21308,7 +21308,7 @@
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
"dev": true
},
"path-type": {
......@@ -21969,7 +21969,7 @@
"promise-inflight": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
"integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
"dev": true
},
"promise-retry": {
......@@ -22378,7 +22378,7 @@
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
"integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
"dev": true,
"optional": true
},
......@@ -22489,7 +22489,7 @@
"read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
"integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
"dev": true,
"requires": {
"pify": "^2.3.0"
......@@ -22498,7 +22498,7 @@
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true
}
}
......@@ -23159,7 +23159,7 @@
"select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
"integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
"integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",
"dev": true
},
"selenium-webdriver": {
......@@ -25053,7 +25053,7 @@
"void-elements": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
"integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
"integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==",
"dev": true
},
"w3c-hr-time": {
......@@ -25105,7 +25105,7 @@
"wcwidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
"integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
"integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
"dev": true,
"requires": {
"defaults": "^1.0.3"
......@@ -5,7 +5,6 @@ import { CartoComponent } from './carto/carto.component';
import { ContactComponent } from './contact/contact.component';
import { FooterComponent } from './footer/footer.component';
import { StructureListPrintComponent } from './form/orientation-form/component/structure-list-print/structure-list-print.component';
import { OrientationFormComponent } from './form/orientation-form/orientation-form.component';
import { AdminGuard } from './guards/admin.guard';
import { AuthGuard } from './guards/auth.guard';
import { LegalNoticeComponent } from './legal-notice/legal-notice.component';
......@@ -49,6 +48,9 @@ const routes: Routes = [
path: '',
outlet: 'left-pane',
component: StructureDetailsComponent,
resolve: {
structure: StructureResolver,
},
},
],
},
......@@ -135,6 +137,9 @@ const routes: Routes = [
outlet: 'left-pane',
data: { fullScreen: true },
component: StructureDetailsComponent,
resolve: {
structure: StructureResolver,
},
},
],
},
......
......@@ -100,13 +100,14 @@ export class FooterFormComponent implements OnChanges {
* Check if trainings are selected in order to ask for pricing
*/
public isTrainingsSelected(): boolean {
return (
this.form.value.accessRight.length > 0 ||
this.form.value.baseSkills.length > 0 ||
this.form.value.digitalCultureSecurity.length > 0 ||
this.form.value.parentingHelp.length > 0 ||
this.form.value.socialAndProfessional.length > 0
);
return this.form.value.categories.baseSkills.length > 0 || this.form.value.categories.advancedSkills.length > 0;
}
/**
* Check if trainings are selected in order to ask for pricing
*/
public isOtherAccompanimentSelected(): boolean {
return this.form.value.categories?.onlineProcedures.find((el) => el === 'autres') ? true : false;
}
public prevPage(): void {
......@@ -123,6 +124,14 @@ export class FooterFormComponent implements OnChanges {
}
return;
}
if (this.currentStep === structureFormStep.structureTrainingType) {
if (this.isOtherAccompanimentSelected()) {
this.changeCurrentStep.emit(structureFormStep.structureDigitalHelpingAccompanimentOther);
} else {
this.changeCurrentStep.emit(structureFormStep.structureDigitalHelpingAccompaniment);
}
return;
}
this.goToPreviousPage();
} else {
history.back();
......@@ -173,6 +182,15 @@ export class FooterFormComponent implements OnChanges {
}
return;
}
// Check if trainings are selected in order to ask for pricing
if (this.currentStep === structureFormStep.structureDigitalHelpingAccompaniment) {
if (this.isOtherAccompanimentSelected()) {
this.changeCurrentStep.emit(structureFormStep.structureDigitalHelpingAccompanimentOther);
} else {
this.changeCurrentStep.emit(structureFormStep.structureTrainingType);
}
return;
}
if (this.currentStep === structureFormStep.structureContactCompletion) {
//TODO Go to send mail page and send the mail
return;
......
......@@ -5,8 +5,8 @@
(closed)="hasRedirectionAccepted($event)"
></app-modal-confirmation>
<app-progress-bar
*ngIf="!isEditMode"
[formType]="formType[routeParam]"
[isEditMode]="isEditMode"
[currentPage]="currentPage - 1"
[nbSteps]="nbSteps"
></app-progress-bar>
......
......@@ -57,6 +57,11 @@
@include lato-bold-22;
}
}
h4 {
@include lato-bold-18;
margin-bottom: 0;
}
p {
@include lato-regular-18;
color: $grey-3;
......
import { Component, OnInit } from '@angular/core';
import { AfterViewInit, ChangeDetectorRef, Component, OnInit } from '@angular/core';
import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
import { forkJoin, of } from 'rxjs';
......@@ -26,7 +26,7 @@ import { structureFormStep } from './structure-form/structureFormStep.enum';
templateUrl: './form-view.component.html',
styleUrls: ['./form-view.component.scss'],
})
export class FormViewComponent implements OnInit {
export class FormViewComponent implements OnInit, AfterViewInit {
public routeParam: string;
public formType = formType;
public currentPage: stepType;
......@@ -83,9 +83,14 @@ export class FormViewComponent implements OnInit {
private profileService: ProfileService,
private structureService: StructureService,
private personalOfferService: PersonalOfferService,
private notificationService: NotificationService
private notificationService: NotificationService,
private cdRef: ChangeDetectorRef
) {}
ngAfterViewInit(): void {
this.cdRef.detectChanges();
}
async ngOnInit(): Promise<void> {
this.routeParam = this.router.routerState.snapshot.url.split('/')[2];
......@@ -162,9 +167,9 @@ export class FormViewComponent implements OnInit {
this.structure = new Structure();
this.structureForm = this.formUtils.createStructureForm(this.structure);
this.currentForm = this.structureForm;
// Init hours form
this.hoursForm = this.formUtils.createHoursForm(this.structure);
}
// Init hours form
this.hoursForm = this.formUtils.createHoursForm(this.structure);
}
if (formType[this.routeParam] === formType.personaloffer) {
this.nbSteps = totalFormSteps;
......@@ -224,13 +229,11 @@ export class FormViewComponent implements OnInit {
private createPersonalOfferForm(personalOffer: PersonalOffer): void {
this.personalOfferForm = new UntypedFormGroup({
publicsAccompaniment: new UntypedFormControl(personalOffer.publicsAccompaniment),
proceduresAccompaniment: new UntypedFormControl(personalOffer.proceduresAccompaniment),
baseSkills: new UntypedFormControl(personalOffer.baseSkills),
accessRight: new UntypedFormControl(personalOffer.accessRight),
digitalCultureSecurity: new UntypedFormControl(personalOffer.digitalCultureSecurity),
socialAndProfessional: new UntypedFormControl(personalOffer.socialAndProfessional),
parentingHelp: new UntypedFormControl(personalOffer.parentingHelp),
categories: new UntypedFormGroup({
onlineProcedures: new UntypedFormControl(personalOffer.categories.onlineProcedures),
baseSkills: new UntypedFormControl(personalOffer.categories.baseSkills),
advancedSkills: new UntypedFormControl(personalOffer.categories.advancedSkills),
}),
});
}
......@@ -376,7 +379,7 @@ export class FormViewComponent implements OnInit {
});
}
public setCurrentStep(step: stepType): void {
//THIS PROBABLY CREATES CONSOLE ERRORS NG100 only in dev mode, please refer to https://angular.io/errors/NG0100 for more info
// THIS PROBABLY CREATES CONSOLE ERRORS NG100 only in dev mode, please refer to https://angular.io/errors/NG0100 for more info
this.isPageValid = false;
this.currentPage = step;
}
......@@ -409,7 +412,9 @@ export class FormViewComponent implements OnInit {
};
case structureFormStep.structureAccessModality:
return {
accessModality: this.structureForm.get('accessModality').value,
categories: {
accessModality: this.structureForm.get('categories').get('accessModality').value,
},
};
case structureFormStep.structureHours:
return {
......@@ -429,42 +434,58 @@ export class FormViewComponent implements OnInit {
website: this.structureForm.get('website').value,
};
case structureFormStep.structurePublicTarget:
return { publics: this.structureForm.get('publics').value };
return {
categories: {
age: this.structureForm.get('categories').get('age').value,
languageAndIlliteracy: this.structureForm.get('categories').get('languageAndIlliteracy').value,
handicaps: this.structureForm.get('categories').get('handicaps').value,
publicOthers: this.structureForm.get('categories').get('publicOthers').value,
},
};
case structureFormStep.structureDigitalHelpingAccompanimentOther:
return {
otherDescription: this.structureForm.get('otherDescription').value,
};
case structureFormStep.structureDigitalHelpingAccompaniment:
return {
proceduresAccompaniment: this.structureForm.get('proceduresAccompaniment').value,
categories: {
onlineProcedures: this.structureForm.get('categories').get('onlineProcedures').value,
},
};
case structureFormStep.structureTrainingType:
return {
accessRight: this.structureForm.get('accessRight').value,
baseSkills: this.structureForm.get('baseSkills').value,
digitalCultureSecurity: this.structureForm.get('digitalCultureSecurity').value,
parentingHelp: this.structureForm.get('parentingHelp').value,
socialAndProfessional: this.structureForm.get('socialAndProfessional').value,
categories: {
baseSkills: this.structureForm.get('categories').get('baseSkills').value,
advancedSkills: this.structureForm.get('categories').get('advancedSkills').value,
},
};
case structureFormStep.structureTrainingPrice:
return {
freeWorkShop: this.structureForm.get('freeWorkShop').value,
};
case structureFormStep.structureOtherServices:
return {
categories: {
equipmentsServices: this.structureForm.get('categories').get('equipmentsAndServices').value,
},
};
case structureFormStep.structureWifi:
return {
equipmentsAndServices: this.structureForm.get('equipmentsAndServices').value,
categories: {
selfServiceMaterial: this.structureForm.get('categories').get('selfServiceMaterial').value,
},
};
case structureFormStep.structureEquipments:
return {
nbComputers: this.structureForm.get('nbComputers').value,
nbNumericTerminal: this.structureForm.get('nbNumericTerminal').value,
nbPrinters: this.structureForm.get('nbPrinters').value,
nbScanners: this.structureForm.get('nbScanners').value,
nbTablets: this.structureForm.get('nbTablets').value,
};
case structureFormStep.structureLabels:
return {
labelsQualifications: this.structureForm.get('labelsQualifications').value,
};
case structureFormStep.structureOtherServices:
return {
equipmentsAndServices: this.structureForm.get('equipmentsAndServices').value,
categories: {
labelsQualifications: this.structureForm.get('categories').get('labelsQualifications').value,
},
};
case structureFormStep.structureDescription:
return {
......
......@@ -34,6 +34,7 @@ import { StructureLabelsComponent } from './structure-form/structure-labels/stru
import { StructureNameAndAddressComponent } from './structure-form/structure-name-and-address/structure-name-and-address.component';
import { StructureOtherServicesComponent } from './structure-form/structure-other-services/structure-other-services.component';
import { StructurePmrComponent } from './structure-form/structure-pmr/structure-pmr.component';
import { structureDigitalHelpingAccompanimentOtherComponent } from './structure-form/structure-public-target-other/structure-public-target-other.component';
import { StructurePublicTargetComponent } from './structure-form/structure-public-target/structure-public-target.component';
import { StructureTrainingPriceComponent } from './structure-form/structure-training-price/structure-training-price.component';
import { StructureTrainingTypeComponent } from './structure-form/structure-training-type/structure-training-type.component';
......@@ -66,6 +67,7 @@ import { StructureWifiComponent } from './structure-form/structure-wifi/structur
StructurePmrComponent,
StructureWebAndSocialNetworkComponent,
StructurePublicTargetComponent,
structureDigitalHelpingAccompanimentOtherComponent,
StructureDigitalHelpingAccompanimentComponent,
StructureTrainingPriceComponent,
StructureWifiComponent,
......
<div class="progressBar" *ngIf="!isEditMode">
<div class="progressBar">
<p *ngIf="formType === formTypeEnum.account">Création de compte</p>
<p *ngIf="formType === formTypeEnum.profile">Création du profil</p>
<p *ngIf="formType === formTypeEnum.structure">Création de la structure</p>
<p *ngIf="formType === formTypeEnum.personaloffer">Création d'offre de service</p>
<div fxLayout="row" fxLayoutAlign="space-between center" fxLayoutGap="20px">
<label [ngClass]="{ validate: currentPage == nbPagesForm }" for="progressForm"
<label [ngClass]="{ validate: currentPage == nbSteps }" for="progressForm"
>{{ progressStatus > 100 ? 100 : (progressStatus | number: '1.0-0') }}%
</label>
<progress
id="progressForm"
[ngClass]="{ validate: currentPage == nbPagesForm }"
[ngClass]="{ validate: currentPage == nbSteps }"
max="100"
[value]="progressStatus"
></progress>
</div>
</div>
<div class="topSpacing" *ngIf="isEditMode"></div>
......@@ -6,13 +6,13 @@
</div>
<div fxLayout="column" fxLayoutGap="32px">
<div *ngIf="proceduresAccompaniment" class="btn-grid">
<span *ngFor="let module of proceduresAccompaniment.modules">
<div *ngIf="onlineProcedures" class="btn-grid">
<span *ngFor="let module of onlineProcedures.modules">
<app-button
[ngClass]="{ selectedChoice: true }"
[extraClass]="isSelectedModule(module) ? 'selected' : ''"
[style]="buttonTypeEnum.CheckButton"
[text]="module.text"
[text]="module.name"
(action)="toogleResult(module)"
></app-button>
</span>
......
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { UntypedFormGroup } from '@angular/forms';
import { Structure } from '../../../../models/structure.model';
import { ButtonType } from '../../../../shared/components/button/buttonType.enum';
import { Category } from '../../../../structure-list/models/category.model';
import { Module } from '../../../../structure-list/models/module.model';
import { SearchService } from '../../../../structure-list/services/search.service';
@Component({
selector: 'app-personal-offer-accompaniment',
......@@ -14,23 +12,15 @@ import { SearchService } from '../../../../structure-list/services/search.servic
export class PersonalOfferAccompanimentComponent implements OnInit {
@Input() structureName: string;
@Input() personalOfferForm: UntypedFormGroup;
@Input() onlineProcedures: Category;
@Output() validateForm = new EventEmitter<any>();
public buttonTypeEnum = ButtonType;
public proceduresAccompaniment: Category;
public selectedModules: Module[] = [];
constructor(private searchService: SearchService) {}
ngOnInit(): void {
this.validateForm.emit();
this.searchService.getCategoriesAccompaniment().subscribe((categories: Category[]) => {
this.proceduresAccompaniment = categories[0];
const proceduresAccompaniment = this.personalOfferForm.get('proceduresAccompaniment').value;
this.selectedModules = proceduresAccompaniment.map((procedure) =>
this.proceduresAccompaniment.modules.find((module) => module.id === procedure)
);
});
}
public toogleResult(module: Module): void {
......@@ -40,7 +30,10 @@ export class PersonalOfferAccompanimentComponent implements OnInit {
} else {
this.selectedModules.push(module);
}
this.personalOfferForm.get('proceduresAccompaniment').patchValue(this.selectedModules.map((_module) => _module.id));
this.personalOfferForm
.get('categories')
.get('onlineProcedures')
.patchValue(this.selectedModules.map((module) => module.id));
}
public isSelectedModule(module: Module): boolean {
......
......@@ -3,12 +3,14 @@
<app-personal-offer-accompaniment
[structureName]="structureName"
[personalOfferForm]="personalOfferForm"
[onlineProcedures]="onlineProcedures"
></app-personal-offer-accompaniment>
</ng-container>
<ng-container *ngIf="currentStep === personalOfferFormStep.personalOfferTrainingType">
<app-personal-offer-training-type
[structureName]="structureName"
[personalOfferForm]="personalOfferForm"
[trainingCategories]="trainingCategories"
></app-personal-offer-training-type>
</ng-container>
<ng-container *ngIf="currentStep === personalOfferFormStep.personalOfferStructureChoice">
......
import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';
import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';
import { UntypedFormGroup } from '@angular/forms';
import { Router } from '@angular/router';
import { CategoriesToggle } from 'src/app/models/categoriesToggle.model';
import { CategoryEnum } from 'src/app/shared/enum/category.enum';
import { Category } from 'src/app/structure-list/models/category.model';
import { SearchService } from 'src/app/structure-list/services/search.service';
import { formType } from '../formType.enum';
import { personalOfferFormStep } from './personalOfferFormStep.enum';
......@@ -8,7 +12,7 @@ import { personalOfferFormStep } from './personalOfferFormStep.enum';
selector: 'app-personal-offer-form',
templateUrl: './personal-offer-form.component.html',
})
export class PersonalOfferFormComponent implements OnChanges {
export class PersonalOfferFormComponent implements OnChanges, OnInit {
@Input() nbSteps: number;
@Input() currentStep: personalOfferFormStep;
@Input() personalOfferForm: UntypedFormGroup;
......@@ -16,11 +20,16 @@ export class PersonalOfferFormComponent implements OnChanges {
@Output() setHasOtherOffer = new EventEmitter<boolean>();
@Output() pageValid = new EventEmitter<any>();
public trainingCategories: CategoriesToggle[] = [];
public onlineProcedures: Category;
public personalOfferFormStep = personalOfferFormStep;
public formTypeEnum = formType;
constructor(private router: Router) {}
constructor(private searchService: SearchService, private router: Router) {}
ngOnInit(): void {
this.setCategories();
}
ngOnChanges(changes: SimpleChanges): void {
if (changes.currentStep) {
if (
......@@ -32,6 +41,23 @@ export class PersonalOfferFormComponent implements OnChanges {
}
}
async setCategories(): Promise<void> {
const categories = await this.searchService.getCategories().toPromise();
categories.forEach((categ) => {
switch (categ.id) {
case CategoryEnum.onlineProcedures: {
this.onlineProcedures = categ;
break;
}
case CategoryEnum.baseSkills:
case CategoryEnum.advancedSkills: {
this.trainingCategories.push({ category: categ, openned: false });
break;
}
}
});
}
public validPage(): void {
this.pageValid.emit();
}
......
<form [formGroup]="personalOfferForm" *ngIf="personalOfferForm">
<div class="title">
<p class="overtitle">{{ structureName }}</p>
<h3>Quelles formations au numérique proposez-vous&nbsp;?</h3>
<h3>Quels accompagnements au numérique proposez-vous&nbsp;?</h3>
<p>Facultatif</p>
</div>
<app-training-type-picker
[baseSkills]="personalOfferForm.get('baseSkills').value"
[accessRight]="personalOfferForm.get('accessRight').value"
[digitalCultureSecurity]="personalOfferForm.get('digitalCultureSecurity').value"
[socialAndProfessional]="personalOfferForm.get('socialAndProfessional').value"
[parentingHelp]="personalOfferForm.get('parentingHelp').value"
[baseSkills]="personalOfferForm.get('categories').get('baseSkills').value"
[advancedSkills]="personalOfferForm.get('categories').get('advancedSkills').value"
[trainingCategories]="trainingCategories"
(selectedType)="setTrainingsFromCategories($event)"
></app-training-type-picker>
</form>
import { Component, Input } from '@angular/core';
import { UntypedFormGroup } from '@angular/forms';
import { CategoriesToggle } from 'src/app/models/categoriesToggle.model';
import { Category } from '../../../../structure-list/models/category.model';
@Component({
......@@ -9,12 +10,13 @@ import { Category } from '../../../../structure-list/models/category.model';
export class PersonalOfferTrainingTypeComponent {
@Input() structureName: string;
@Input() personalOfferForm: UntypedFormGroup;
@Input() trainingCategories: CategoriesToggle[];
public setTrainingsFromCategories(categories: Category[]) {
for (const categorie of categories) {
const moduleIds: string[] = categorie.modules.map((module) => module.id);
if (this.personalOfferForm.get(categorie.id)) {
this.personalOfferForm.get(categorie.id).patchValue(moduleIds);
if (this.personalOfferForm.get('categories').get(categorie.id)) {
this.personalOfferForm.get('categories').get(categorie.id).patchValue(moduleIds);
}
}
}
......
......@@ -12,7 +12,7 @@
<p>Plusieurs choix possibles</p>
</div>
</div>
<p class="missing-information" *ngIf="isEditMode && !structureForm.get('accessModality').valid">
<p class="missing-information" *ngIf="isEditMode && !structureForm.get('categories').get('accessModality').valid">
<app-svg-icon [iconClass]="'icon-26'" [type]="'form'" [icon]="'notValidate'" class="validationIcon"></app-svg-icon>
<span>Il faut renseigner au moins un champ</span>
</p>
......@@ -20,9 +20,9 @@
<app-checkbox-form
*ngFor="let module of accessModality.modules"
[isChecked]="isInArray('accessModality', module.id)"
[text]="module.text"
[text]="module.name"
[iconSvg]="module.id"
(checkEvent)="onCheckChange($event, 'accessModality', module.id)"
(checkEvent)="onCheckChange($event, 'categories.accessModality', module.id)"
>
</app-checkbox-form>
</div>
......
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { UntypedFormGroup } from '@angular/forms';
import { formUtils } from 'src/app/utils/formUtils';
import { Category } from '../../../../structure-list/models/category.model';
@Component({
......@@ -13,6 +14,8 @@ export class StructureAccessModalityComponent implements OnInit {
@Output() checkChange = new EventEmitter<any>();
@Output() validateForm = new EventEmitter<any>();
public formUtils = new formUtils();
ngOnInit(): void {
this.validateForm.emit();
}
......@@ -26,11 +29,9 @@ export class StructureAccessModalityComponent implements OnInit {
}
public isInArray(formControlName: string, term: string) {
if (this.structureForm.controls[formControlName].value) {
return this.structureForm.controls[formControlName].value.includes(term);
}
return false;
return this.formUtils.isInCategoryArray(term, formControlName, this.structureForm);
}
public goBack(): void {
history.back();
}
......
<form [formGroup]="structureForm" *ngIf="structureForm" (keyup.enter)="isPageValid && !isEditMode ? nextPage() : null">
<form
[formGroup]="structureForm"
*ngIf="structureForm && onlineProcedures"
(keyup.enter)="isPageValid && !isEditMode ? nextPage() : null"
>
<div class="title" [ngClass]="{ editTitle: isEditMode }">
<app-svg-icon
(click)="goBack()"
......@@ -8,17 +12,17 @@
[icon]="'arrowBack'"
></app-svg-icon>
<div class="titleContent">
<h3>Quelles aides au numérique propose la structure&nbsp;?</h3>
<h3>Quelles démarches en ligne propose la structure&nbsp;?</h3>
<p>Facultatif</p>
</div>
</div>
<div class="btn-grid">
<span *ngFor="let accompaniment of proceduresAccompaniment.modules">
<span *ngFor="let accompaniment of onlineProcedures.modules">
<app-button
[ngClass]="{ selectedChoice: true }"
[extraClass]="isInArray(accompaniment.id) ? 'selected' : ''"
[style]="buttonTypeEnum.CheckButton"
[text]="accompaniment.text"
[text]="accompaniment.name"
(action)="updateChoiceAccompaniment(accompaniment.id)"
></app-button>
</span>
......
......@@ -9,7 +9,7 @@ import { Category } from '../../../../structure-list/models/category.model';
})
export class StructureDigitalHelpingAccompanimentComponent implements OnInit {
@Input() structureForm: UntypedFormGroup;
@Input() proceduresAccompaniment: Category;
@Input() onlineProcedures: Category;
@Input() isEditMode: boolean;
@Output() updateChoice = new EventEmitter<any>();
@Output() validateForm = new EventEmitter<any>();
......@@ -21,13 +21,13 @@ export class StructureDigitalHelpingAccompanimentComponent implements OnInit {
}
public updateChoiceAccompaniment(choice: string) {
this.updateChoice.emit({ formControlName: 'proceduresAccompaniment', choice });
this.updateChoice.emit({ formControlName: 'categories.onlineProcedures', choice });
}
public isInArray(choice: string) {
if (
this.structureForm.get('proceduresAccompaniment') &&
this.structureForm.get('proceduresAccompaniment').value.includes(choice)
this.structureForm.get('categories').get('onlineProcedures') &&
this.structureForm.get('categories').get('onlineProcedures').value.includes(choice)
)
return true;
return false;
......
......@@ -13,17 +13,14 @@
</div>
</div>
<ng-container *ngFor="let equipment of equipmentsAndServices">
<div
class="controller equipments"
*ngIf="['ordinateurs', 'tablettes', 'bornesNumeriques', 'imprimantes', 'scanners'].includes(equipment.module.id)"
>
<div class="controller equipments" *ngIf="['computer', 'printer', 'scanner'].includes(equipment.module.id)">
<div fxLayout="column">
<div class="controllerHeader" fxLayout="row" fxLayoutAlign="space-between center">
<div class="flex-item">
<p class="no-margin">Nombre {{ formatEquipment(equipment.module.text) }}</p>
<p class="no-margin">Nombre {{ formatEquipment(equipment.module.name) }}</p>
</div>
<div class="inputSection flex-item equipments" fxLayout="row" fxLayoutAlign="center center">
<ng-container *ngIf="equipment.module.id == 'ordinateurs'">
<ng-container *ngIf="equipment.module.id == 'computer'">
<svg
class="hide"
aria-hidden="true"
......@@ -43,27 +40,7 @@
[(value)]="structureForm.value.nbComputers"
/>
</ng-container>
<ng-container *ngIf="equipment.module.id == 'tablettes'">
<svg
class="hide"
aria-hidden="true"
(click)="changeValueHandler(equipment.module.id, -1)"
[ngClass]="{ disabled: structureForm.value.nbTablets === 0 }"
>
<use [attr.xlink:href]="'assets/form/sprite.svg#minus'"></use>
</svg>
<input
type="number"
(input)="setValidationsForm()"
formControlName="nbTablets"
min="0"
step="1"
max="1000"
class="form-input nbEquipment"
[(value)]="structureForm.value.nbTablets"
/>
</ng-container>
<ng-container *ngIf="equipment.module.id == 'imprimantes'">
<ng-container *ngIf="equipment.module.id == 'printer'">
<svg
class="hide"
aria-hidden="true"
......@@ -83,27 +60,7 @@
[(value)]="structureForm.value.nbPrinters"
/>
</ng-container>
<ng-container *ngIf="equipment.module.id == 'bornesNumeriques'">
<svg
class="hide"
aria-hidden="true"
(click)="changeValueHandler(equipment.module.id, -1)"
[ngClass]="{ disabled: structureForm.value.nbNumericTerminal === 0 }"
>
<use [attr.xlink:href]="'assets/form/sprite.svg#minus'"></use>
</svg>
<input
type="number"
(input)="setValidationsForm()"
formControlName="nbNumericTerminal"
min="0"
step="1"
max="1000"
class="form-input nbEquipment"
[(value)]="structureForm.value.nbNumericTerminal"
/>
</ng-container>
<ng-container *ngIf="equipment.module.id == 'scanners'">
<ng-container *ngIf="equipment.module.id == 'scanner'">
<svg
class="hide"
aria-hidden="true"
......