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.
Par convention, dans toutes les tables :
Les champs "_ext " pourraient par exemple servir
Toujours activer le jeu de caractères UTF-8, ainsi que les "foreign keys" (tables liées)
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).
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 )
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') )
Le lien est assuré par une clé étrangère ("foreign key") qui contient la référence du client.
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)
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 )
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') )
Le lien est assuré par une clé étrangère ("foreign key") qui contient la référence de l'unité.
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') )
Trois foreign-keys assurent l'intégrité du time-sheet par rapport au reste des données :
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).
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
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