Calculer une référence automatique et chronologique pour les documents d'une famille

Calculer une référence automatique et chronologique pour les documents d'une famille

But de ce document

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

Exemple concret utilisé dans ce document

Prenons le cas d'une famille devant gérer les non-conformités. Il existe deux types de non conformités :

  • FNC = Fiche de non-conformité client
  • FNI = Fiche de non-conformité interne

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 :

  • une fois le document créé, le type de la non-conformité ne doit plus être modifiable.
  • il ne faut pas que le numéro change si celui-ci change de révision
  • il faut que le numéro soit recalculé si le document est dupliqué.

Solution N°1 (Numéro unique pour les FNC et les FNI)

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 :

  • La méthode “PostCreated”, permet de renseigner le champ caché servant à alimenter le titre lors de la création du document.
  • Ce champ est renseigné uniquement lors de la première révision du document ($this→revision==0).
  • La fonction “getCurSequence” permet de retourner un numéro unique pour les documents de la famille.
function postModify() {
	if (substr($this->title,0,14)=="duplication de") {
		$this->setTitle(substr($this->title,15,strlen($this->title)));
	}
}

Commentaires :

  • La méthode “postModify” permet de supprimer le “duplication de” du titre lors de la duplication du document
function SpecRefresh() {
	if($this->initid>0) { 
		$this->getAttribute('ref_type')->mvisibility = 'S'; 
	}
}

Commentaires :

  • La méthode “postModify” permet de rendre le type non modifiable une fois le document créé ($this→initid>0)

Solution N°2 (Numéro unique pour les FNC et un autre numéro unique pour les FNI)

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 :

  • Cette méthode recherche dans les documents déjà créés le dernier numéro de chrono affecté pour le type (FNC ou FNI) indiqué.
  • Une fois ce numéro identifié, il suffit d'ajouter 1 et d'enregistrer cette valeur dans le champ “ref_chrono”
contribution/cookbook/ref_auto.txt · Dernière modification: 09/03/2010 14:37 (édition externe)