Quintilien

Quis, quid, ubi, quibus auxiliis, cur, quomodo, quando

Aspects techniques - Structure de la base de données

Page classée dans : Gestion des prestations
Page précédente : Comment installer (ou désinstaller) Quintilien

Répertoires et fichiers

Les répertoires et les fichiers utilisés par Quintilien sont repris en détail dans le descriptif (pdf) que vous pouvez télécharger ici.

En résumé

Structure de la base de données

Par convention, dans toutes les tables :

  • _id est un identifiant unique de l'enregistrement (numérique entier, indexé)
  • _ref est la référence unique (du client, du dossier, etc), en 12 caractères maximum, majuscules et/ou chiffres, sans espaces,
  • _name ou _descr nom ou description, en 40 caractères maximum
  • _ext est une zone non utilisée par Quintilien, destinée à être prise en compte dans le cadre d'extensions éventuelles du logiciel
  • _sleep est un champ numérique (entier) qui contient la valeur 0 (par défaut) ou 1 (si l'enregistrement est "en sommeil"), sauf dans le cas de l'utilisateur spécial "admin', pour lequel sleep est à la valeur -1 (cf plus loin)

Les champs "_ext " pourraient par exemple servir

  • à définir des catégories de client
  • à contenir la description des dossiers
  • à incorporer des catégories de tarifs
  • à mémoriser un budget ou un prix de revient standard

Paramètres

Toujours activer le jeu de caractères UTF-8, ainsi que les "foreign keys" (tables liées)

  • PRAGMA encoding = 'UTF-8'
  • PRAGMA foreign_keys = ON

La table des paramètres.

CREATE TABLE "t_param" (
'param_id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
'param_ref' TEXT NOT NULL UNIQUE,
'param_1' TEXT DEFAULT '',
'param_2' TEXT DEFAULT '',
'param_3' TEXT DEFAULT '',
'param_4' TEXT DEFAULT '' )

Le premier enregistrement de cette table - identifié par la référence "Version" - contient le numéro de version de la base de données ainsi que le code de la langue à utiliser par défaut.

Les autres enregistrements contiennent la traduction FR/NL/UK des zones affichées sur les différents écrans (une quatrième langue peut être définie, via le champ param_4, si on le souhaite).

La table des clients

CREATE TABLE "t_customer" (
'cust_id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
'cust_ref' TEXT NOT NULL UNIQUE,
'cust_name' TEXT DEFAULT '',
'cust_ext' TEXT DEFAULT '',
'cust_sleep' INTEGER DEFAULT 0 )

La table des dossiers (ou des commandes)

CREATE TABLE "t_order" (
'ord_id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
'ord_ref' TEXT NOT NULL UNIQUE,
'ord_fk_cust_ref' TEXT,
'ord_descr' TEXT DEFAULT '',
'ord_ext' TEXT DEFAULT '',
'ord_sleep' INTEGER DEFAULT 0,
FOREIGN KEY('ord_fk_cust_ref') REFERENCES 't_customer'('cust_ref') )

Liens entre dossiers et clients.

Le lien est assuré par une clé étrangère ("foreign key") qui contient la référence du client.

La table des prestataires (utilisateurs)

CREATE TABLE "t_who" (
'who_id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
'who_ref' TEXT NOT NULL UNIQUE,
'who_name' TEXT DEFAULT '',
'who_ext' TEXT DEFAULT '',
'who_price' REAL DEFAULT 0.0,
'who_pswd' TEXT DEFAULT '',
'who_admin' INTEGER DEFAULT 0,
'who_sleep' INTEGER NOT NULL DEFAULT 0 )

Cette table contient toujours un enregistrement qui définit l'utilisateur "admin", avec un code "sommeil" à -1

INSERT INTO t_who (who_ref, who_name, who_pswd, who_admin, who_sleep) \
VALUES ("ADMIN", "Admin", "", 1, -1)

La table des unités

CREATE TABLE "t_unit" (
'unit_id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
'unit_ref' TEXT NOT NULL UNIQUE,
'unit_descr' TEXT DEFAULT '',
'unit_sleep' INTEGER DEFAULT 0 )

La table des codes de prestations

CREATE TABLE "t_what" (
'what_id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
'what_ref' TEXT NOT NULL UNIQUE,
'what_descr' TEXT DEFAULT '',
'what_fk_unit_ref' TEXT,
'what_ext' TEXT DEFAULT '',
'what_price' REAL DEFAULT 0.0,
'what_sleep' INTEGER DEFAULT 0,
FOREIGN KEY('what_fk_unit_ref') REFERENCES 't_unit'('unit_ref') )

Liens entre prestations et unités de mesure

Le lien est assuré par une clé étrangère ("foreign key") qui contient la référence de l'unité.

La table "time-sheet"

CREATE TABLE "t_who_when_what" (
'w_id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
'w_fk_who_ref' TEXT,
'w_when' TEXT NOT NULL,
'w_fk_ord_ref' TEXT,
'w_fk_what_ref' TEXT,
'w_descr' TEXT,
'w_qty' REAL DEFAULT 0.0,
'w_sleep' INTEGER NOT NULL DEFAULT 0,
FOREIGN KEY('w_fk_who_ref') REFERENCES 't_who'('who_ref'),
FOREIGN KEY('w_fk_ord_ref') REFERENCES 't_order'('ord_ref'),
FOREIGN KEY('w_fk_what_ref') REFERENCES 't_what'('what_ref') )

Liens entre le time-sheet et les autres tables

Trois foreign-keys assurent l'intégrité du time-sheet par rapport au reste des données :

Remarques

Par contre, la valeur de w_sleep est prise en compte lors de l'affichage du Timesheet sur l'écran principal : si la zone ne contient pas valeur zéro (c-à-d sa valeur par défaut), la ligne qui correspond à l'enregistrement n'est plus affichée sur l'écran de saisie (et n'est donc plus modifiable).

Une application externe à Quintilien qui souhaiterait verrouiller la modification d'une ligne pourrait utiliser cette fonctionnalité (pour interdire la modification d'un encodage une fois une prestation facturée, par exemple).

La valeur de la zone n'affecte en rien le fonctionnement du reste de l'application (les listings, par exemples, tiennent compte de tous les enregistrements de la table t_who_when_what quelle que soit la valeur de w_sleep).

Critères de validité d'une référence

Quintilien convertit automatiquement les références suivant les critères suivants

Ces critères sont applicables à toutes les références ('_ref') des tables gérées par Quintilien

Exemple en Python :

def validate_ref(ref):	# test a reference and convert it to 12 uppercase charact.
    ref = ref.strip() # remove spaces in front and behind
    trs = str.maketrans("âäàéèêëîïôöùûüçÿ ²&'(§!)^$µ,;:=<>³°¨*%£?./+|@#{[^{}[]`´",\
    "aaaeeeeiioouuucy_$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")
    ref = ref.translate(trs)	# translate 'exotics' charact.
    ref = ref.upper()	# convert in uppercase
    ref = ref.replace('$','') # remove exotics charact.
    ref = ref.replace('"','') # remove quotes
    if len(ref)>12:	# use 12 charact. max
            ref = ref[0:12] 
    return ref


 ↑  Retourner en début de page
Page précédente : Comment installer (ou désinstaller) Quintilien

© 2024 Quintilien