1
0
forked from ScoDoc/ScoDoc
ScoDoc/misc/createtables.sql

683 lines
24 KiB
PL/PgSQL

-- Creation des tables pour gestion notes
-- E. Viennet, Sep 2005
-- creation de la base: utiliser le script config/create_dept.sh
--
-- ou pour tester: en tant qu'utilisateur postgres
-- createuser --pwprompt scogea
-- createdb -E UTF-8 -O scogea SCOGEA "scolarite GEA"
--
--
-- generation des id
CREATE SEQUENCE serial;
CREATE SEQUENCE notes_idgen;
CREATE FUNCTION notes_newid( text ) returns text as '
select $1 || to_char( nextval(''notes_idgen''), ''FM999999999'' )
as result;
' language SQL;
CREATE SEQUENCE notes_idgen2;
CREATE FUNCTION notes_newid2( text ) returns text as '
select $1 || to_char( nextval(''notes_idgen2''), ''FM999999999'' )
as result;
' language SQL;
CREATE SEQUENCE notes_idgen_etud;
CREATE FUNCTION notes_newid_etud( text ) returns text as '
select $1 || to_char( nextval(''notes_idgen_etud''), ''FM999999999'' )
as result;
' language SQL;
-- Fonction pour anonymisation:
-- inspirée par https://www.simononsoftware.com/random-string-in-postgresql/
CREATE FUNCTION random_text_md5( integer ) returns text
LANGUAGE SQL
AS $$
select upper( substring( (SELECT string_agg(md5(random()::TEXT), '')
FROM generate_series(
1,
CEIL($1 / 32.)::integer)
), 1, $1) );
$$;
-- Preferences
CREATE TABLE sco_prefs (
pref_id text DEFAULT notes_newid('PREF'::text) UNIQUE NOT NULL,
name text NOT NULL,
value text,
formsemestre_id text default NULL,
UNIQUE(name,formsemestre_id)
) WITH OIDS;
CREATE TABLE identite (
etudid text DEFAULT notes_newid_etud('EID'::text) UNIQUE NOT NULL,
nom text,
prenom text,
civilite text NOT NULL CHECK (civilite IN ('M', 'F', 'X')),
date_naissance date, -- new: date en texte
lieu_naissance text,
dept_naissance text,
nationalite text,
statut text, -- NULL ou 'SALARIE'
foto text, -- deprecated
photo_filename text,
code_nip text UNIQUE, -- code NIP Apogee (may be null)
code_ine text UNIQUE, -- code INE Apogee (may be null)
nom_usuel text, -- optionnel (si present, affiché à la place du nom)
boursier text -- 'O' (capital o) si boursier
) WITH OIDS;
CREATE TABLE adresse (
adresse_id text DEFAULT notes_newid_etud('ADR'::text) NOT NULL,
etudid text NOT NULL,
email text, -- email institutionnel
emailperso text, -- email personnel (exterieur)
domicile text,
codepostaldomicile text,
villedomicile text,
paysdomicile text,
telephone text,
telephonemobile text,
fax text,
typeadresse text DEFAULT 'domicile'::text NOT NULL,
entreprise_id integer,
description text
) WITH OIDS;
CREATE TABLE admissions (
adm_id text DEFAULT notes_newid_etud('ADM'::text) NOT NULL,
etudid text NOT NULL,
annee integer,
bac text,
specialite text,
annee_bac integer,
math real,
physique real,
anglais real,
francais real,
rang integer, -- dans les voeux du candidat (inconnu avec APB)
qualite real,
rapporteur text,
decision text,
score real,
commentaire text,
nomlycee text,
villelycee text,
codepostallycee text,
codelycee text,
debouche text, -- OBSOLETE UNUSED situation APRES etre passe par chez nous (texte libre)
type_admission text, -- 'APB', 'APC-PC', 'CEF', 'Direct', '?' (autre)
boursier_prec integer default NULL, -- etait boursier dans le cycle precedent (lycee) ?
classement integer default NULL, -- classement par le jury d'admission (1 à N), global (pas celui d'APB si il y a des groupes)
apb_groupe text, -- code du groupe APB
apb_classement_gr integer default NULL -- classement (1..Ngr) par le jury dans le groupe APB
) WITH OIDS;
CREATE TABLE itemsuivi (
itemsuivi_id text DEFAULT notes_newid('SUI'::text) PRIMARY KEY,
etudid text NOT NULL,
item_date date DEFAULT now(), -- date de l'observation
situation text -- situation à cette date (champ libre)
) WITH OIDS;
CREATE TABLE itemsuivi_tags (
tag_id text DEFAULT notes_newid('TG') PRIMARY KEY,
title text UNIQUE NOT NULL
) WITH OIDS;
CREATE TABLE itemsuivi_tags_assoc (
tag_id text REFERENCES itemsuivi_tags(tag_id) ON DELETE CASCADE,
itemsuivi_id text REFERENCES itemsuivi(itemsuivi_id) ON DELETE CASCADE,
PRIMARY KEY (tag_id, itemsuivi_id)
) WITH OIDS;
CREATE TABLE absences (
etudid text NOT NULL,
jour date, -- jour de l'absence
estabs boolean, -- vrai si absent
estjust boolean, -- vrai si justifie
matin boolean, -- vrai si concerne le matin, faux si apres midi
description text, -- "raison" de l'absence
entry_date timestamp with time zone DEFAULT now(),
moduleimpl_id text -- moduleimpid concerne (optionnel)
) WITH OIDS;
CREATE TABLE absences_notifications (
etudid text NOT NULL,
notification_date timestamp with time zone DEFAULT now(),
email text NOT NULL,
nbabs integer,
nbabsjust integer,
formsemestre_id text -- semestre concerne par cette notification
) WITH OIDS;
CREATE SEQUENCE notes_idgen_billets;
CREATE FUNCTION notes_newid_billet( text ) returns text as '
select $1 || to_char( nextval(''notes_idgen_billets''), ''FM999999999'' )
as result;
' language SQL;
CREATE TABLE billet_absence (
billet_id text DEFAULT notes_newid_billet('B'::text) NOT NULL,
etudid text NOT NULL,
abs_begin timestamp with time zone,
abs_end timestamp with time zone,
description text, -- "raison" de l'absence
etat integer default 0, -- 0 new, 1 processed
entry_date timestamp with time zone DEFAULT now(),
justified integer default 0 -- 1 si l'absence pourrait etre justifiée
) WITH OIDS;
-- --- Log des actions (journal modif etudiants)
CREATE TABLE scolog (
date timestamp without time zone DEFAULT now(),
authenticated_user text,
remote_addr text,
remote_host text,
method text,
etudid character(32),
msg text
) WITH OIDS;
CREATE TABLE etud_annotations (
id integer DEFAULT nextval('serial'::text) NOT NULL,
date timestamp without time zone DEFAULT now(),
etudid character(32),
author text, -- now unused
comment text,
zope_authenticated_user text, -- should be author
zope_remote_addr text
) WITH OIDS;
-- ------------ Nouvelle gestion des absences ------------
CREATE SEQUENCE abs_idgen;
CREATE FUNCTION abs_newid( text ) returns text as '
select $1 || to_char( nextval(''abs_idgen''), ''FM999999999'' )
as result;
' language SQL;
CREATE TABLE abs_absences (
absid text default abs_newid('AB') PRIMARY KEY,
etudid character(32),
abs_begin timestamp with time zone,
abs_end timestamp with time zone
) WITH OIDS;
CREATE TABLE abs_presences (
absid text default abs_newid('PR') PRIMARY KEY,
etudid character(32),
abs_begin timestamp with time zone,
abs_end timestamp with time zone
) WITH OIDS;
CREATE TABLE abs_justifs (
absid text default abs_newid('JU') PRIMARY KEY,
etudid character(32),
abs_begin timestamp with time zone,
abs_end timestamp with time zone,
category text,
description text
) WITH OIDS;
-- ------------ ENTREPRISES ------------
CREATE TABLE entreprises (
entreprise_id serial NOT NULL,
nom text,
adresse text,
ville text,
codepostal text,
pays text,
contact_origine text,
secteur text,
note text,
privee text,
localisation text,
qualite_relation integer, -- -1 inconnue, 0, 25, 50, 75, 100
plus10salaries integer,
date_creation timestamp without time zone DEFAULT now()
) WITH OIDS;
CREATE TABLE entreprise_correspondant (
entreprise_corresp_id serial NOT NULL,
nom text,
prenom text,
fonction text,
phone1 text,
phone2 text,
mobile text,
mail1 text,
mail2 text,
note text,
entreprise_id integer,
civilite text,
fax text
) WITH OIDS;
--
--
CREATE TABLE entreprise_contact (
entreprise_contact_id serial NOT NULL,
date date,
type_contact text,
entreprise_id integer,
entreprise_corresp_id integer,
etudid text,
description text,
enseignant text
) WITH OIDS;
-- ------------ NOTES ------------
-- Description generique d'un module (eg infos du PPN)
CREATE SEQUENCE notes_idgen_fcod;
CREATE FUNCTION notes_newid_fcod( text ) returns text as '
select $1 || to_char( nextval(''notes_idgen_fcod''), ''FM999999999'' )
as result;
' language SQL;
CREATE TABLE notes_formations (
formation_id text default notes_newid('FORM') PRIMARY KEY,
acronyme text NOT NULL, -- 'DUT R&T', 'LPSQRT', ...
titre text NOT NULL, -- titre complet
titre_officiel text NOT NULL, -- "DUT Gestion des Entreprises et Admininistration"
version integer default 1, -- version de la formation
formation_code text default notes_newid_fcod('FCOD') NOT NULL,
type_parcours int DEFAULT 0, -- 0 DUT, 100 Lic Pro
code_specialite text default NULL,
UNIQUE(acronyme,titre,version)
) WITH OIDS;
CREATE TABLE notes_ue (
ue_id text default notes_newid('UE') PRIMARY KEY,
formation_id text REFERENCES notes_formations(formation_id),
acronyme text NOT NULL,
numero int, -- ordre de presentation
titre text,
type int DEFAULT 0, -- 0 normal ("fondamentale"), 1 "sport", 2 "projet et stage (LP)", 4 "élective"
ue_code text default notes_newid_fcod('UCOD') NOT NULL,
ects real, -- nombre de credits ECTS
is_external integer default 0, -- si UE effectuee dans le cursus d'un autre etablissement
code_apogee text, -- id de l'element pedagogique Apogee correspondant
coefficient real -- coef UE, utilise seulement si l'option use_ue_coefs est activée
) WITH OIDS;
CREATE TABLE notes_matieres (
matiere_id text default notes_newid('MAT') PRIMARY KEY,
ue_id text REFERENCES notes_ue(ue_id),
titre text,
numero int, -- ordre de presentation
UNIQUE(ue_id,titre)
) WITH OIDS;
CREATE TABLE notes_semestres (
-- une bete table 1,2,3,...,8 pour l'instant fera l'affaire...
semestre_id int PRIMARY KEY
) WITH OIDS;
INSERT INTO notes_semestres (semestre_id) VALUES (-1); -- denote qu'il n'y a pas de semestres dans ce diplome
INSERT INTO notes_semestres (semestre_id) VALUES (1);
INSERT INTO notes_semestres (semestre_id) VALUES (2);
INSERT INTO notes_semestres (semestre_id) VALUES (3);
INSERT INTO notes_semestres (semestre_id) VALUES (4);
INSERT INTO notes_semestres (semestre_id) VALUES (5);
INSERT INTO notes_semestres (semestre_id) VALUES (6);
INSERT INTO notes_semestres (semestre_id) VALUES (7);
INSERT INTO notes_semestres (semestre_id) VALUES (8);
CREATE TABLE notes_modules (
module_id text default notes_newid('MOD') PRIMARY KEY,
titre text,
code text NOT NULL,
heures_cours real,
heures_td real,
heures_tp real,
coefficient real, -- coef PPN
ue_id text REFERENCES notes_ue(ue_id),
formation_id text REFERENCES notes_formations(formation_id),
matiere_id text REFERENCES notes_matieres(matiere_id),
semestre_id integer REFERENCES notes_semestres(semestre_id),
numero int, -- ordre de presentation
abbrev text, -- nom court
ects real, -- nombre de credits ECTS (NON UTILISES)
code_apogee text, -- id de l'element pedagogique Apogee correspondant
module_type int -- NULL ou 0:defaut, 1: malus (NOTES_MALUS)
) WITH OIDS;
CREATE TABLE notes_tags (
tag_id text default notes_newid('TAG') PRIMARY KEY,
title text UNIQUE NOT NULL
) WITH OIDS;
CREATE TABLE notes_modules_tags (
tag_id text REFERENCES notes_tags(tag_id) ON DELETE CASCADE,
module_id text REFERENCES notes_modules(module_id) ON DELETE CASCADE,
PRIMARY KEY (tag_id, module_id)
) WITH OIDS;
-- Mise en oeuvre d'un semestre de formation
CREATE TABLE notes_formsemestre (
formsemestre_id text default notes_newid('SEM') PRIMARY KEY,
formation_id text REFERENCES notes_formations(formation_id),
semestre_id int REFERENCES notes_semestres(semestre_id),
titre text,
date_debut date,
date_fin date,
-- responsable_id text,
-- gestion_absence integer default 1, -- XXX obsolete
-- bul_show_decision integer default 1, -- XXX obsolete
-- bul_show_uevalid integer default 1, -- XXX obsolete
etat integer default 1, -- 1 ouvert, 0 ferme (verrouille)
-- nomgroupetd text default 'TD', -- XXX obsolete
-- nomgroupetp text default 'TP', -- XXX obsolete
-- nomgroupeta text default 'langues', -- XXX obsolete
-- bul_show_codemodules integer default 1, -- XXX obsolete
-- bul_show_rangs integer default 1, -- XXX obsolete
-- bul_show_ue_rangs integer default 1, -- XXX obsolete
-- bul_show_mod_rangs integer default 1, -- XXX obsolete
gestion_compensation integer default 0, -- gestion compensation sem DUT
bul_hide_xml integer default 0, -- ne publie pas le bulletin XML
gestion_semestrielle integer default 0, -- semestres decales (pour gestion jurys)
bul_bgcolor text default 'white', -- couleur fond bulletins HTML
modalite text, -- FI, FC, APP, ''
resp_can_edit integer default 0, -- autorise resp. a modifier semestre
resp_can_change_ens integer default 1, -- autorise resp. a modifier slt les enseignants
ens_can_edit_eval int default 0, -- autorise les ens a creer des evals
elt_sem_apo text, -- code element semestre Apogee, eg VRTW1 ou V2INCS4,V2INLS4
elt_annee_apo text -- code element annee Apogee, eg VRT1A ou V2INLA,V2INCA
) WITH OIDS;
-- id des utilisateurs responsables (aka directeurs des etudes) du semestre:
CREATE TABLE notes_formsemestre_responsables (
formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id) ON DELETE CASCADE,
responsable_id text NOT NULL,
UNIQUE(formsemestre_id, responsable_id)
) WITH OIDS;
-- Etape Apogee associes au semestre:
CREATE TABLE notes_formsemestre_etapes (
formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id) ON DELETE CASCADE,
etape_apo text NOT NULL
) WITH OIDS;
CREATE TABLE notes_form_modalites (
form_modalite_id text default notes_newid('Md') PRIMARY KEY,
modalite text, -- la clef dans notes_formsemestre
titre text, -- le nom complet de la modalite pour les documents scodoc
numero SERIAL -- integer, ordre de presentation
);
INSERT INTO notes_form_modalites (modalite, titre) VALUES ('', 'Autres formations');
INSERT INTO notes_form_modalites (modalite, titre) VALUES ('FI', 'Formation Initiale');
INSERT INTO notes_form_modalites (modalite, titre) VALUES ('FC', 'Formation Continue');
INSERT INTO notes_form_modalites (modalite, titre) VALUES ('FAP', 'Apprentissage');
INSERT INTO notes_form_modalites (modalite, titre) VALUES ('DEC', 'Formation Décalées');
INSERT INTO notes_form_modalites (modalite, titre) VALUES ('LIC', 'Licence');
INSERT INTO notes_form_modalites (modalite, titre) VALUES ('CP', 'Contrats de Professionnalisation');
INSERT INTO notes_form_modalites (modalite, titre) VALUES ('EXT', 'Extérieur');
-- semsets
CREATE TABLE notes_semset (
semset_id text default notes_newid('NSS') PRIMARY KEY,
title text,
annee_scolaire int default NULL, -- 2016
sem_id int default NULL -- periode: 0 (année), 1 (Simpair), 2 (Spair)
) WITH OIDS;
CREATE TABLE notes_semset_formsemestre (
formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id) ON DELETE CASCADE,
semset_id text REFERENCES notes_semset (semset_id) ON DELETE CASCADE,
PRIMARY KEY (formsemestre_id, semset_id)
) WITH OIDS;
-- Coef des UE capitalisees arrivant dans ce semestre:
CREATE TABLE notes_formsemestre_uecoef (
formsemestre_uecoef_id text default notes_newid('SEM') PRIMARY KEY,
formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id),
ue_id text REFERENCES notes_ue(ue_id),
coefficient real NOT NULL,
UNIQUE(formsemestre_id, ue_id)
) WITH OIDS;
-- Formules utilisateurs pour calcul moyenne UE
CREATE TABLE notes_formsemestre_ue_computation_expr (
notes_formsemestre_ue_computation_expr_id text default notes_newid('UEXPR') PRIMARY KEY,
formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id),
ue_id text REFERENCES notes_ue(ue_id),
computation_expr text, -- formule de calcul moyenne
UNIQUE(formsemestre_id, ue_id)
) WITH OIDS;
-- Menu custom associe au semestre
CREATE TABLE notes_formsemestre_custommenu (
custommenu_id text default notes_newid('CMENU') PRIMARY KEY,
formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id),
title text,
url text,
idx integer default 0 -- rang dans le menu
) WITH OIDS;
-- Mise en oeuvre d'un module pour une annee/semestre
CREATE TABLE notes_moduleimpl (
moduleimpl_id text default notes_newid('MIP') PRIMARY KEY,
module_id text REFERENCES notes_modules(module_id),
formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id),
responsable_id text,
computation_expr text, -- formule de calcul moyenne
UNIQUE(module_id,formsemestre_id) -- ajoute
) WITH OIDS;
-- Enseignants (chargés de TD ou TP) d'un moduleimpl
CREATE TABLE notes_modules_enseignants (
modules_enseignants_id text default notes_newid('ENS') PRIMARY KEY,
moduleimpl_id text REFERENCES notes_moduleimpl(moduleimpl_id),
ens_id text -- est le user_name de sco_users (de la base SCOUSERS)
) WITH OIDS;
-- Inscription a un semestre de formation
CREATE TABLE notes_formsemestre_inscription (
formsemestre_inscription_id text default notes_newid2('SI') PRIMARY KEY,
etudid text REFERENCES identite(etudid),
formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id),
etat text, -- I inscrit, D demission en cours de semestre, DEF si "defaillant"
etape text, -- etape apogee d'inscription (experimental 2020)
UNIQUE(formsemestre_id, etudid)
) WITH OIDS;
-- Inscription a un module (etudiants,moduleimpl)
CREATE TABLE notes_moduleimpl_inscription (
moduleimpl_inscription_id text default notes_newid2('MI') PRIMARY KEY,
moduleimpl_id text REFERENCES notes_moduleimpl(moduleimpl_id),
etudid text REFERENCES identite(etudid),
UNIQUE( moduleimpl_id, etudid)
) WITH OIDS;
CREATE TABLE partition(
partition_id text default notes_newid2('P') PRIMARY KEY,
formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id),
partition_name text, -- "TD", "TP", ... (NULL for 'all')
compute_ranks integer default 1, -- calcul rang etudiants dans les groupes (currently unused)
numero SERIAL, -- ordre de presentation
bul_show_rank integer default 0,
show_in_lists integer default 1, -- montre dans les noms de groupes
UNIQUE(formsemestre_id,partition_name)
) WITH OIDS;
CREATE TABLE group_descr (
group_id text default notes_newid2('G') PRIMARY KEY,
partition_id text REFERENCES partition(partition_id),
group_name text, -- "A", "C2", ... (NULL for 'all')
UNIQUE(partition_id, group_name)
) WITH OIDS;
CREATE TABLE group_membership(
group_membership_id text default notes_newid2('GM') PRIMARY KEY,
etudid text REFERENCES identite(etudid),
group_id text REFERENCES group_descr(group_id),
UNIQUE(etudid, group_id)
) WITH OIDS;
-- Evaluations (controles, examens, ...)
CREATE TABLE notes_evaluation (
evaluation_id text default notes_newid('EVAL') PRIMARY KEY,
moduleimpl_id text REFERENCES notes_moduleimpl(moduleimpl_id),
jour date,
heure_debut time,
heure_fin time,
description text,
note_max real,
coefficient real,
visibulletin integer default 1,
publish_incomplete integer default 0, -- prise en compte meme si incomplete
evaluation_type integer default 0, -- type d'evaluation: 0 normale, 1 rattrapage
numero int -- ordre de presentation (le plus petit numero est normalement la plus ancienne eval)
) WITH OIDS;
-- Les notes...
CREATE TABLE notes_notes (
etudid text REFERENCES identite(etudid),
evaluation_id text REFERENCES notes_evaluation(evaluation_id),
value real, -- null si absent, voir valeurs speciales dans notes_table.py
UNIQUE(etudid,evaluation_id),
-- infos sur saisie de cette note:
comment text,
date timestamp default now(),
uid text
) WITH OIDS;
CREATE INDEX notes_notes_evaluation_id_idx ON notes_notes (evaluation_id);
-- Historique des modifs sur notes (anciennes entrees de notes_notes)
CREATE TABLE notes_notes_log (
id SERIAL PRIMARY KEY,
etudid text REFERENCES identite(etudid),
evaluation_id text, -- REFERENCES notes_evaluation(evaluation_id),
value real,
comment text,
date timestamp,
uid text
-- pas de foreign key, sinon bug lors supression notes (et on
-- veut garder le log)
-- FOREIGN KEY (etudid,evaluation_id) REFERENCES notes_notes(etudid,evaluation_id)
) WITH OIDS;
---------------------------------------------------------------------
-- Parcours d'un etudiant
--
-- etat: INSCRIPTION inscr. de l'etud dans ce semestre
-- DEM l'etud demissionne EN COURS DE SEMESTRE
-- DIPLOME en fin semestre, attribution du diplome correspondant
-- (ou plutot, validation du semestre)
-- AUT_RED en fin semestre, autorise a redoubler ce semestre
-- EXCLUS exclus (== non autorise a redoubler)
-- VALID_SEM obtention semestre après jury terminal
-- VALID_UE obtention UE après jury terminal
-- ECHEC_SEM echec a ce semestre
-- UTIL_COMPENSATION utilise formsemestre_id pour compenser et valider
-- comp_formsemestre_id
CREATE TABLE scolar_events (
event_id text default notes_newid('EVT') PRIMARY KEY,
etudid text,
event_date timestamp default now(),
formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id),
ue_id text REFERENCES notes_ue(ue_id),
event_type text, -- 'CREATION', 'INSCRIPTION', 'DEMISSION',
-- 'AUT_RED', 'EXCLUS', 'VALID_UE', 'VALID_SEM'
-- 'ECHEC_SEM'
-- 'UTIL_COMPENSATION'
comp_formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id)
-- semestre compense par formsemestre_id
) WITH OIDS;
-- Stockage des codes d'etat apres jury
CREATE SEQUENCE notes_idgen_svalid;
CREATE FUNCTION notes_newidsvalid( text ) returns text as '
select $1 || to_char( nextval(''notes_idgen_svalid''), ''FM999999999'' )
as result;
' language SQL;
CREATE TABLE scolar_formsemestre_validation (
formsemestre_validation_id text default notes_newidsvalid('VAL') PRIMARY KEY,
etudid text NOT NULL,
formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id), -- anciennement (<2015-03-17) NULL si external
ue_id text REFERENCES notes_ue(ue_id), -- NULL si validation de semestre
code text NOT NULL,
assidu integer, -- NULL pour les UE, 0|1 pour les semestres
event_date timestamp default now(),
compense_formsemestre_id text, -- null sauf si compense un semestre
moy_ue real, -- moyenne UE capitalisee (/20, NULL si non calculee)
semestre_id int, -- (normalement NULL) indice du semestre, utile seulement pour UE "antérieures" et si la formation définit des UE utilisées dans plusieurs semestres (cas R&T IUTV v2)
is_external integer default 0, -- si UE validée dans le cursus d'un autre etablissement
UNIQUE(etudid,formsemestre_id,ue_id) -- une seule decision
) WITH OIDS;
CREATE TABLE scolar_autorisation_inscription (
autorisation_inscription_id text default notes_newidsvalid('AUT') PRIMARY KEY,
etudid text NOT NULL,
formation_code text NOT NULL,
semestre_id int REFERENCES notes_semestres(semestre_id), -- semestre ou on peut s'inscrire
date timestamp default now(),
origin_formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id)
) WITH OIDS;
---------------------------------------------------------------------
-- NOUVELLES (pour page d'accueil et flux rss associe)
--
CREATE TABLE scolar_news (
news_id text default notes_newid('NEWS') PRIMARY KEY,
date timestamp default now(),
authenticated_user text,
type text, -- 'INSCR', 'NOTES', 'FORM', 'SEM', 'MISC'
object text, -- moduleimpl_id, formation_id, formsemestre_id,
text text, -- free text
url text -- optional URL
) WITH OIDS;
-- Appreciations sur bulletins
CREATE TABLE notes_appreciations (
id integer DEFAULT nextval('serial'::text) NOT NULL,
date timestamp without time zone DEFAULT now(),
etudid text REFERENCES identite(etudid),
formsemestre_id text REFERENCES notes_formsemestre(formsemestre_id),
author text,
comment text,
zope_authenticated_user text,
zope_remote_addr text
) WITH OIDS;
CREATE OR REPLACE FUNCTION truncate_tables(username IN VARCHAR) RETURNS void AS $$
DECLARE
statements CURSOR FOR
SELECT tablename FROM pg_tables
WHERE tableowner = username AND schemaname = 'public'
AND tablename <> 'notes_semestres'
AND tablename <> 'notes_form_modalites';
BEGIN
FOR stmt IN statements LOOP
EXECUTE 'TRUNCATE TABLE ' || quote_ident(stmt.tablename) || ' CASCADE;';
END LOOP;
END;
$$ LANGUAGE plpgsql;