*** Settings ***
Documentation  Test de task.

# On inclut les mots-clefs
Resource  resources/resources.robot
# On ouvre/ferme le navigateur au début/à la fin du Test Suite.
Suite Setup  For Suite Setup
Suite Teardown  For Suite Teardown


*** Test Cases ***
Activation de l'option 'option_notification_piece_numerisee'
    [Documentation]  Il est nécessaire de faire cette manipulation pour éviter le
    ...  FAIL: Element with locator 'dossier_message_id' not found.

    &{om_param} =  Create Dictionary
    ...  libelle=option_notification_piece_numerisee
    ...  valeur=true
    ...  om_collectivite=agglo
    Gerer le paramètre par WS  ${om_param}

    Depuis la page d'accueil  admin  admin
    Rendre les types de dossier d'autorisation détaillés utilisés transmissible à Plat'AU  PCI


Paramétrage d'un sous dossier
    [Documentation]  Paramètre un type de dossier pour un sous-dossier et un type de
    ...  demande lié à ce type de dossier.

    Depuis la page d'accueil  admin  admin

    # activation de mode service consulté, l'onglet dois maintenant être
    # visible
    Activer le mode service consulté

    # Paramétrage d'un type de sous-dossier
    ${codeSsDossier} =  Set Variable  SDTT
    Set Suite Variable  ${codeSsDossier}
    ${libelleSsDossier} =  Set Variable  Sous Dossier Test Tasks
    Set Suite Variable  ${libelleSsDossier}
    @{di_compatibles} =    Create List
    ...    PCI - P - Permis de construire pour une maison individuelle et / ou ses annexes - Initial
    &{args_type_di} =  Create Dictionary
    ...  code=${codeSsDossier}
    ...  libelle=${libelleSsDossier}
    ...  dossier_autorisation_type_detaille=PCI (Permis de construire pour une maison individuelle et / ou ses annexes)
    ...  sous_dossier=true
    ...  suffixe=true
    ...  lien_sous_dossier_type_di=@{di_compatibles}
    ...  maj_da_localisation=false
    ${idSsDossierTestAjout} =  Ajouter type de dossier d'instruction  ${args_type_di}

    Set Suite Variable  ${idSsDossierTestAjout}

    &{args_demande_type} =  Create Dictionary
    ...    code=TEST${codeSsDossier}
    ...    libelle=Test Tasks sous dossier
    ...    groupe=Autorisation ADS
    ...    dossier_autorisation_type_detaille=PCI (Permis de construire pour une maison individuelle et / ou ses annexes)
    ...    demande_nature=Dossier existant
    ...    dossier_instruction_type=${libelleSsDossier}
    ...    evenement=Notification de delai
    Ajouter un nouveau type de demande depuis le menu  ${args_demande_type}

    # Ajout d'une famille et de natures de travaux pour vérifier la conservation de ces
    # natures lors de la création du sous-dossier
    &{famille_travaux} =  Create Dictionary
    ...  libelle=Restauration SSDS
    ...  code=RES
    ${famille_travaux.id} =  Ajouter la famille de travaux  ${famille_travaux}
    Set Suite Variable  ${famille_travaux}

    @{dit_nature_travaux} =  Create List
    ...  PCI - Initial
    &{nature_travaux_ssds1} =  Create Dictionary
    ...  libelle=Ravalement d'établissement public ssds
    ...  code=RAEP
    ...  famille_travaux=${famille_travaux.libelle}
    ${nature_travaux_ssds1.id} =  Ajouter la nature de travaux  ${nature_travaux_ssds1}  ${dit_nature_travaux}
    Set Suite Variable  ${nature_travaux_ssds1}

    &{nature_travaux2_ssds1} =  Create Dictionary
    ...  libelle=Ravalement d'établissement privé ssds
    ...  code=RAEP
    ...  famille_travaux=${famille_travaux.libelle}
    ${nature_travaux2_ssds1.id} =  Ajouter la nature de travaux  ${nature_travaux2_ssds1}  ${dit_nature_travaux}
    Set Suite Variable  ${nature_travaux2_ssds1}

    @{nature_travaux_ssds} =  Create List
    ...  ${nature_travaux_ssds1.famille_travaux} / ${nature_travaux_ssds1.libelle}
    ...  ${nature_travaux2_ssds1.famille_travaux} / ${nature_travaux2_ssds1.libelle}

    # Ajout de la compatibilité avec le sous dossier pour une nature de travaux sur les deux
    @{dit_nature_travaux} =  Create List
    ...  PCI - Initial
    ...  ${libelleSsDossier}
    Modifier la nature de travaux  ${nature_travaux_ssds1.id}  ${nature_travaux_ssds1}  ${dit_nature_travaux}
    @{not_nature_travaux_ssds} =  Create List
    ...  ${nature_travaux2_ssds1.famille_travaux} / ${nature_travaux2_ssds1.libelle}
    @{nature_travaux_ssds} =  Create List
    ...  ${nature_travaux_ssds1.famille_travaux} / ${nature_travaux_ssds1.libelle}

    # Ajoute l'action et l'événement pour changer la prise en compte métier
    &{args_action} =  Create Dictionary
    ...  action=changer_pec_task
    ...  libelle=Changer PeC Task
    ...  regle_pec_metier=pec_metier
    Ajouter l'action depuis le menu  ${args_action}
    @{etat_source} =  Create List  delai de notification envoye
    @{di_list} =    Create List
    ...    PCI - P - Initial
    ...    - SDTT - ${libelleSsDossier}
    ${libellePecSsDossier} =  Set Variable  306 - Prise en compte métier Sous dossier
    Set Suite Variable  ${libellePecSsDossier}
    &{args_evenement} =  Create Dictionary
    ...  libelle=${libellePecSsDossier}
    ...  etats_depuis_lequel_l_evenement_est_disponible=${etat_source}
    ...  dossier_instruction_type=@{di_list}
    ...  action=Changer PeC Task
    ...  etat=delai de notification envoye
    ...  pec_metier=Pris en compte
    ...  commentaire=true
    Ajouter l'événement depuis le menu  ${args_evenement}

    # Création d'un événement spécifique au sous-dossier
    &{args_evenement1} =  Create Dictionary
    ...  libelle=Test des sous-dossiers
    ...  etats_depuis_lequel_l_evenement_est_disponible=${etat_source}
    ...  dossier_instruction_type=@{di_list}

    Depuis la page d'accueil  admin  admin
    ${evenement_id} =  Ajouter l'événement depuis le menu  ${args_evenement1}

    Set Suite Variable  ${taks_number}  306
    Set Suite Variable  ${acteur}  taskSsDossierPlatau
    Set Suite Variable  ${collectivite}  LIBRECOM_taskSsDossierPlatau
   
    &{librecom_values} =  Create Dictionary
    ...  om_collectivite_libelle=${collectivite}
    ...  departement=13
    ...  commune=${taks_number}
    ...  insee=13${taks_number}
    ...  direction_code=Notif${taks_number}
    ...  direction_libelle=Direction de ${collectivite}
    ...  direction_chef=Chef
    ...  division_code=Task${taks_number}
    ...  division_libelle=Division Task
    ...  division_chef=Chef
    ...  guichet_om_utilisateur_nom=Tasks Guichet
    ...  guichet_om_utilisateur_email=task${taks_number}guichet@openads-test.fr
    ...  guichet_om_utilisateur_login=task${taks_number}guichet
    ...  guichet_om_utilisateur_pwd=task${taks_number}guichet
    ...  instr_om_utilisateur_nom=Task Instr
    ...  instr_om_utilisateur_email=task${taks_number}instr@openads-test.fr
    ...  instr_om_utilisateur_login=task${taks_number}instr
    ...  instr_om_utilisateur_pwd=task${taks_number}instr
    ...  acteur=${acteur}
    Isolation d'un contexte  ${librecom_values}

    # ajoute le paramètre 'acteur' à la collectivité/au service
    &{om_param} =  Create Dictionary
    ...  libelle=platau_acteur_service_consulte
    ...  valeur=${acteur}
    ...  om_collectivite=${collectivite}
    Gerer le paramètre par WS  ${om_param}
    # définir les paramètres de type de demande
    &{platau_type_demande_initial} =  Create Dictionary
    ...  libelle=platau_type_demande_initial_PCI
    ...  valeur=DI
    ...  om_collectivite=agglo
    Gerer le paramètre par WS  ${platau_type_demande_initial}


Vérification de l'ajout des tasks creation_DA, creation_DI, depot_DI et qualification_DI lors de l'ajout d'un dossier sous dossier d'instruction.
    [Documentation]  Permet de vérifier le bon fonctionnement de la création des tâches lié à la création d'un dossier d'instruction
    ...  Vérifie aussi qu'il n'y a pas de création d'autre tâche non concerné

    Depuis la page d'accueil  admin  admin

    # Récupère le payload de création DI
    ${json_payload} =  Get File  ${EXECDIR}${/}binary_files${/}json_payload_ref.txt
    ${json_payload} =  Replace String  ${json_payload}  3XY-DK4-7X  306-AAA-00
    ${json_payload} =  Replace String  ${json_payload}  7XY-DK8-5X  AAA-306-00
    ${json_payload} =  Replace String  ${json_payload}  13055  13306
    ${json_payload} =  Replace String  ${json_payload}  SDF-ZER-74R  ${acteur}
    ${json_payload} =  Replace String  ${json_payload}  EF-DSQ-4512  ${acteur}
    ${json_payload} =  Replace String  ${json_payload}  TEST300TASKPRENOM777  TEST306TASKNOM01
    ${json_payload} =  Replace String  ${json_payload}  TEST300TASKNOM0777  TEST306TASKPRENOM01
    ${json_payload} =  Replace String  ${json_payload}  PC0130552007777P0  PC0133062007777P0
    ${json_payload} =  Replace String  ${json_payload}  PC 013055 20 07777P0  PC 013306 20 07777P0

    ${json_payload} =  Replace String  ${json_payload}  "terrain_adresse_voie_numero": "",  "terrain_adresse_voie_numero": "24",
    ${json_payload} =  Replace String  ${json_payload}  "terrain_adresse_voie": "",  "terrain_adresse_voie": "rue des marmottons",
    ${json_payload} =  Replace String  ${json_payload}  "terrain_adresse_lieu_dit": "",  "terrain_adresse_lieu_dit": "Le pré des marmottons",
    ${json_payload} =  Replace String  ${json_payload}  "terrain_adresse_code_postal": "13306",  "terrain_adresse_code_postal": "13306",
    ${json_payload} =  Replace String  ${json_payload}  "terrain_adresse_localite": "",  "terrain_adresse_localite": "TEST306AdresseLocalite",


    ${payload_dict} =  To Json  ${json_payload}
    # Préparation de la tâche de création du dossier
    ${task_values} =  Create Dictionary
    ...  type=create_DI_for_consultation
    ...  json_payload=${json_payload}
    Ajouter la tâche par WS  ${task_values}

    ${msg} =  Déclencher le traitement des tâches par WS

    # Récupération du numéro de dossier
    ${search_values} =  Create Dictionary
    ...  source_depot=Plat'AU
    ...  om_collectivite=${collectivite}
    ...  particulier=TEST306TASKNOM01
    Depuis le contexte du dossier d'instruction par la recherche avance  ${search_values}  ${collectivite}

    Wait Until Keyword Succeeds  ${TIMEOUT}  ${RETRY_INTERVAL}  Page Should Contain Element  css=#dossier_libelle
    ${di1} =  Get Text  css=#dossier_libelle
    ${di1_sans_espace} =  Sans espace  ${di1}

    &{donnees_techniques_values} =  Create Dictionary
    ...  enga_decla_lieu=TEST306engadelalieu
    ...  enga_decla_date=${DATE_DDMMYYYY}
    Saisir les données techniques du DI  ${di1}  ${donnees_techniques_values}

    # On ferme l'overlay
    Click Element Until No More Element  css=.ui-icon-closethick

    # Création, affichage d'un sous-dossier
    Ajouter le sous-dossier au dossier  ${idSsDossierTestAjout}

    # Vérification du numéro de dossier
    Wait Until Element Contains  css=#title > h2  Instruction > ${libelleSsDossier} > ${di1} > ${codeSsDossier}01

    ${numSsDossier} =  Set Variable  ${di1} ${codeSsDossier}01
    ${numSsDossier_sans_espace} =  Sans espace  ${numSsDossier}

    Element Should Contain  css=#dossier_libelle  ${numSsDossier}

    ${instr_pec} =  Ajouter une instruction au DI  ${numSsDossier}  Test des sous-dossiers  null  sous_dossier  null  null

    # Ajout d'une instruction de prise en compte et vérification de la modification
    # sur le dossier d'instruction, ainsi que de la création de la tâche
    ${instr_pec} =  Ajouter une instruction au DI  ${numSsDossier}  ${libellePecSsDossier}  null  sous_dossier  null  null  commentaire sur la pec

    # Vérifcation d'existence du flux de sortie PEC
    Depuis le menu Moniteur Plat'AU

    # On ouvre la recherche
    Wait Until Element Is Visible  css=div#adv-search-adv-fields input#dossier
    Wait Until Element Is Visible  css=div#adv-search-adv-fields select#type

    # On remplit la recherche
    Input Text  css=div#adv-search-adv-fields input#dossier  ${numSsDossier_sans_espace}
    Select From List By Label  css=div#adv-search-adv-fields select#type  PeC consultation

    # On valide le formulaire de recherche
    Click On Search Button

    Element Should Contain  css=td.col-1 a.lienTable  PeC consultation
    Element Should Contain  css=td.col-4 a.lienTable  ${numSsDossier_sans_espace}
    ${task_id} =  Get Text  css=td.col-0 a.lienTable

    # On ouvre 
    Click On Link  PeC consultation

    # Vérification des valeurs de la lettre d'incompletude
    Open Fieldset  task  json_payload-calculee

    Element Should Contain  css=pre#json_payload  "dossier": "AAA-306-00"
    Element Should Contain  css=pre#json_payload  "dossier_consultation": "306-AAA-00"

    # Utilisation de l'action 997 pour ajouter l'external UID
    &{update_data} =  Create Dictionary
    ...  external_uid=306-PEC-01

    &{validate_data} =  Create Dictionary
    ...  type=prise en compte
    ...  state=à réaliser

    ${COOKIE} =  Get Cookie  ${SESSION_COOKIE}
    ${cookies} =  Create Dictionary  ${SESSION_COOKIE}=${COOKIE.value}
    ${session} =  Set Variable  ${PROJECT_NAME}_web_ihm
    Create Session  ${session}  ${PROJECT_URL}  cookies=${cookies}
    ${headers} =  Create Dictionary  Content-Type=application/x-www-form-urlencoded
    ${response} =  Post Request  ${session}  /app/index.php?module=form&obj=task&action=997&idx=${task_id}  data=${update_data}  headers=${headers}

    # Verification des Id tech sur le sous-dossier
    Depuis l'onglet des sous_dossiers du dossier d'instruction  ${di1}
    Click On Link  css=#sousform-sous_dossier .firstcol a[href$="idx=${numSsDossier_sans_espace}"]
    Page Should Contain Element  css=#fieldset-form-sous_dossier-plat_au---identifiants-techniques
    Open Fieldset  sous_dossier  plat_au---identifiants-techniques
    Wait Until Keyword Succeeds  ${TIMEOUT}  ${RETRY_INTERVAL}    Element Should Contain  css=#fieldset-form-sous_dossier-plat_au---identifiants-techniques  ${validate_data.type}
    Element Should Contain  css=#fieldset-form-sous_dossier-plat_au---identifiants-techniques  ${update_data.external_uid}
    Element Should Contain  css=#fieldset-form-sous_dossier-plat_au---identifiants-techniques  ${validate_data.state}

    # Verification des Id tech sur le dossier parent 
    ${search_values} =  Create Dictionary
    ...  source_depot=Plat'AU
    ...  om_collectivite=${collectivite}
    ...  particulier=TEST306TASKNOM01
    Depuis le contexte du dossier d'instruction par la recherche avance  ${search_values}  ${collectivite}

    Page Should Contain Element  css=#fieldset-form-dossier_instruction-plat_au---identifiants-techniques
    Open Fieldset  dossier_instruction  plat_au---identifiants-techniques
    Wait Until Keyword Succeeds  ${TIMEOUT}  ${RETRY_INTERVAL}    Element Should Contain  css=#fieldset-form-dossier_instruction-plat_au---identifiants-techniques  ${validate_data.type}
    Element Should Contain  css=#fieldset-form-dossier_instruction-plat_au---identifiants-techniques  ${update_data.external_uid}
    Element Should Contain  css=#fieldset-form-dossier_instruction-plat_au---identifiants-techniques  ${validate_data.state}


Suppression des paramètres
    [Documentation]  Réinitialise les paramètres

    &{args_type_DA_detaille_modification} =  Create Dictionary
    ...  dossier_platau=false
    Modifier type de dossier d'autorisation détaillé  PCI  ${args_type_DA_detaille_modification}

    &{om_param} =  Create Dictionary
    ...  libelle=option_notification_piece_numerisee
    ...  valeur=false
    ...  om_collectivite=agglo
    Gerer le paramètre par WS  ${om_param}

    &{om_param} =  Create Dictionary
    ...  delete=true
    ...  libelle=platau_acteur_service_consulte
    ...  om_collectivite=${collectivite}
    Gerer le paramètre par WS  ${om_param}

    &{platau_type_demande_initial} =  Create Dictionary
    ...  delete=true
    ...  libelle=platau_type_demande_initial_PCI
    ...  om_collectivite=agglo
    Gerer le paramètre par WS  ${platau_type_demande_initial}