Modifier la base et regénérer

Le framework openMairie permet de modifier la base et prendre en compte ses modifications en regénérant les scripts sans mettre en péril la personnalisation que vous avez effectuée.

Nous vous proposons de rajouter un champ registre dans la table courrier et de rajouter l’adresse dans la table emetteur.

Pour cette partie on considère que l’on est en train de préparer la version 1.0.0 de notre application.

Ajouter un nouveau fichier v1.0.0.dev0.sql dans data/pgsql, ce fichier va contenir toutes les modifications de la base de données de l’application pour la version 1.0.

Dans le fichier data/pgsql/install.sql ajouter la ligne suivante pour que le fichier soit pris en compte :

-- Mise à jour depuis la dernière version (en cours de développement)
\i v1.0.0.dev0.sql

Rajouter un champ registre dans courrier

Il est proposé de rajouter un champ registre dans le courrier dont le but est de stocker le numéro de registre du courrier sous la forme annee_numero_d_ordre.

Dans le fichier data/pgsql/v1.0.0.dev0.sql, nous allons d’abord créer un champ registre dans la table courrier de la manière suivante :

ALTER TABLE courrier ADD registre VARCHAR( 20 ) ;

Lancer la commande de création de la base pour prendre en compte la modification.

Vous devez regénérer votre application courrier dans l’option du menu Administration -> Générateur -> Courrier et laisser cochées les options par défaut :

gen/obj/courrier.class.php

gen/sql/pgsql/courrier.inc.php

gen/sql/pgsql/courrier.form.inc.php

Valider l’opération.

Vous pouvez remarquer si vous allez sur le formulaire d’ajout qu’il y a un nouveau champ registre. Votre personnalisation n’est pas affectée.

Nous voulons que le numéro de registre se mette en ajout de manière automatique une fois le formulaire validé.

Il faut donc surcharger les méthodes suivantes dans obj/courrier.class.php :

// pour que registre ne soit pas modifiable

function setType(&$form,$maj) {
    parent::setType($form,$maj);
    $form->setType('registre', 'hiddenstatic');
}

// pour la mise à jour de la séquence avant l'ajout de l enregistrement

function triggerajouter($id, &$dnu1 = NULL, $val = array(), $dnu2 = NULL) {
    //  prochain numero de registre
    //  fonction DB pear
    $temp= $this->f->db->nextId(DB_PREFIXE."courrier");
    // fabrication du numero annee_no_d_ordre
    $temp = date('Y')."-".$temp;
    $this->valF['registre'] = $temp;
}

Si vous souhaitez que registre apparaisse dans l’affichage de la table, vous devez aussi modifier la variable champAffiche de sql/pgsql/courrier.inc de la manière suivante :

$champAffiche = array(
    'courrier.courrier as "'._("courrier").'"',
    'to_char(courrier.dateenvoi ,\'DD/MM/YYYY\') as "'.__("dateenvoi").'"',
    'concat(emetteur.nom,\' \',emetteur.prenom) as "'.__("emetteur").'"',
    'CASE lu WHEN true then \'Oui\' else \'NON\' END as "'.__("lu").'"',
    'service.libelle as "'.__("service").'"',
    'registre'
);

Votre affichage de la table courrier est modifié.

Rajouter l’adresse dans emetteur

Il est proposé de rajouter l’adresse de l’emetteur à savoir : le libellé, le code postal et la ville.

La requête est la suivante :

ALTER TABLE emetteur ADD adresse VARCHAR( 40 ) ,
ADD cp VARCHAR( 5 ) ,
ADD ville VARCHAR( 40 ) ;

Lancer la commande de création de la base pour prendre en compte la modification.

Vous devez regénérer votre application courrier en allant dans l’option du menu : administration -> generateur -> emetteur et laisser cochées les options par défaut :

gen/obj/emetteur.class.php

gen/sql/pgsql/emetteur.inc.php

gen/sql/pgsql/emetteur.form.inc.php

Validez l’opération.

N’ayant pas modifié sql/pgsql/emetteur.inc, le framework fonctionne avec le code généré.

Améliorer la présentation du formulaire emetteur

Nous pouvons continuer à améliorer les présentations de nos formulaires en utilisant les méthodes setLayout() et setFieldset() dans le script obj/emetteur.class.php.

Il vous est proposé d’insérer dans votre script obj/emetteur.class.php le code suivant :

function setLayout(&$form, $maj) {

    $form->setFieldset('nom', 'D', __('nom'), "collapsible");
    $form->setFieldset('prenom', 'F');

    $form->setFieldset('adresse', 'D', __('adresse'), "startClosed");
    $form->setFieldset('ville', 'F');
}

Le fieldset nom est affiché par défaut, pas celui de l’adresse :

../_images/utilisation_28.png

Vos formulaires sont maintenant au point.