Skip to main content.



 

Structure de la base de données

Par convention, dans toutes les tables:

Les champs "_ext " pourraient par exemple servir

Paramètres

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

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