Expliquer comment mettre en place dans une famille Freedom un calcul automatique et chronologique de la référence des documents. De plus, nous verrons comment créer un titre personnalisé prenant en compte ce numéro chronologique et le contenu d'un autre champ
Prenons le cas d'une famille devant gérer les non-conformités. Il existe deux types de non conformités :
L'utilisateur devra donc sélectionner dans une liste déroulante le type de la non-conformité.
Nous souhaitons dans un premier temps avoir une référence de document du type « FNC-XXX » ou « FNI-XXX» Ou XXX doit être un numéro chronologique unique pour tous les documents de la famille.
Pour compliquer un peu les choses, dans un deuxième temps, nous souhaitons avoir une référence de document du type « FNC-XXX » ou « FNI-YYY» Ou XXX doit être un numéro chronologique unique pour les FNX et YYY un numéro unique pour les FNI.
De plus :
Ce fichier OOo contient la définition de la famille. Les méthodes ci-dessous sont à enregistrer dans le fichier “FDL/Method.Reference_Automatique1.php” :
function PostCreated() {
if ($this->revision==0) {
$this->setValue("ref_titre",$this->getValue("ref_type")."-".$this->getCurSequence());
}
}
Commentaires :
function postModify() {
if (substr($this->title,0,14)=="duplication de") {
$this->setTitle(substr($this->title,15,strlen($this->title)));
}
}
Commentaires :
function SpecRefresh() {
if($this->initid>0) {
$this->getAttribute('ref_type')->mvisibility = 'S';
}
}
Commentaires :
Ce fichier OOo contient la définition de la famille. La seule différence par rapport à la famille précédente est l'ajout du numéro de chrono qui sera utilisé pour connaître le dernier numéro attribué pour chaque type de document.
Pour le fichier méthode, il faut recopier celui de l'exemple précédent en le nommant “FDL/Method.Reference_Automatique1.php”.
La seule différence étant la méthode “PostCreated” dont voici le détail :
function PostCreated() {
if ($this->revision==0) {
include_once("FDL/Lib.Dir.php");
$dbaccess=GetParam("FREEDOM_DB");
$filter=array();
$filter[]="ref_chrono>0";
$filter[]="ref_type='".pg_escape_string($this->getValue("ref_type"))."' ";
$tdoc=getChildDoc($dbaccess,
0, // dans toute la base//
"0","1", // retourne 1 resultat//
$filter, // filtre de recherhce//
1, // utilisateur Freedom Master//
"TABLE", // retourne liste de structure document//
"REF_AUTO2", // famid : REF_AUTO2//
false, // last révision//
"ref_chrono desc"); // string $orderby: field order //
if (count($tdoc)>0) {
$doc=$tdoc[0];
$chrono=$doc["ref_chrono"]+1;
} else {
$chrono=1;
}
$this->setValue("ref_chrono",$chrono);
$this->setValue("ref_titre",$this->getValue("ref_type")."-".$chrono);
}
}
Remarques :