forked from ScoDoc/ScoDoc
Ménage: supprime ancien code entreprises
This commit is contained in:
parent
5998f97fde
commit
ca286288bc
@ -293,7 +293,6 @@ def delete_dept(dept_id: int):
|
||||
"create temp table formsemestres_temp as select id from notes_formsemestre where dept_id = %(dept_id)s",
|
||||
"create temp table moduleimpls_temp as select id from notes_moduleimpl where formsemestre_id in (select id from formsemestres_temp)",
|
||||
"create temp table formations_temp as select id from notes_formations where dept_id = %(dept_id)s",
|
||||
"create temp table entreprises_temp as select id from entreprises where dept_id = %(dept_id)s",
|
||||
"create temp table tags_temp as select id from notes_tags where dept_id = %(dept_id)s",
|
||||
]
|
||||
for r in reqs:
|
||||
@ -345,13 +344,9 @@ def delete_dept(dept_id: int):
|
||||
"delete from notes_formsemestre where dept_id = %(dept_id)s",
|
||||
"delete from scolar_news where dept_id = %(dept_id)s",
|
||||
"delete from notes_semset where dept_id = %(dept_id)s",
|
||||
"delete from entreprise_contact where entreprise_id in (select id from entreprises_temp) ",
|
||||
"delete from entreprise_correspondant where entreprise_id in (select id from entreprises_temp) ",
|
||||
"delete from entreprises where dept_id = %(dept_id)s",
|
||||
"delete from notes_formations where dept_id = %(dept_id)s",
|
||||
"delete from departement where id = %(dept_id)s",
|
||||
"drop table tags_temp",
|
||||
"drop table entreprises_temp",
|
||||
"drop table formations_temp",
|
||||
"drop table moduleimpls_temp",
|
||||
"drop table etudids_temp",
|
||||
|
@ -1,324 +0,0 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Gestion scolarite IUT
|
||||
#
|
||||
# Copyright (c) 1999 - 2022 Emmanuel Viennet. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# Emmanuel Viennet emmanuel.viennet@viennet.net
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
"""Fonctions sur les entreprises
|
||||
"""
|
||||
# codes anciens déplacés de ZEntreprise
|
||||
import datetime
|
||||
from operator import itemgetter
|
||||
|
||||
import app.scodoc.sco_utils as scu
|
||||
import app.scodoc.notesdb as ndb
|
||||
from app.scodoc.notesdb import ScoDocCursor, EditableTable, DateISOtoDMY, DateDMYtoISO
|
||||
|
||||
|
||||
def _format_nom(nom):
|
||||
"formatte nom (filtre en entree db) d'une entreprise"
|
||||
if not nom:
|
||||
return nom
|
||||
return nom[0].upper() + nom[1:]
|
||||
|
||||
|
||||
class EntreprisesEditor(EditableTable):
|
||||
def delete(self, cnx, oid):
|
||||
"delete correspondants and contacts, then self"
|
||||
# first, delete all correspondants and contacts
|
||||
cursor = cnx.cursor(cursor_factory=ScoDocCursor)
|
||||
cursor.execute(
|
||||
"delete from entreprise_contact where entreprise_id=%(entreprise_id)s",
|
||||
{"entreprise_id": oid},
|
||||
)
|
||||
cursor.execute(
|
||||
"delete from entreprise_correspondant where entreprise_id=%(entreprise_id)s",
|
||||
{"entreprise_id": oid},
|
||||
)
|
||||
cnx.commit()
|
||||
EditableTable.delete(self, cnx, oid)
|
||||
|
||||
def list(
|
||||
self,
|
||||
cnx,
|
||||
args={},
|
||||
operator="and",
|
||||
test="=",
|
||||
sortkey=None,
|
||||
sort_on_contact=False,
|
||||
limit="",
|
||||
offset="",
|
||||
):
|
||||
# list, then sort on date of last contact
|
||||
R = EditableTable.list(
|
||||
self,
|
||||
cnx,
|
||||
args=args,
|
||||
operator=operator,
|
||||
test=test,
|
||||
sortkey=sortkey,
|
||||
limit=limit,
|
||||
offset=offset,
|
||||
)
|
||||
if sort_on_contact:
|
||||
for r in R:
|
||||
c = do_entreprise_contact_list(
|
||||
args={"entreprise_id": r["entreprise_id"]},
|
||||
disable_formatting=True,
|
||||
)
|
||||
if c:
|
||||
r["date"] = max([x["date"] or datetime.date.min for x in c])
|
||||
else:
|
||||
r["date"] = datetime.date.min
|
||||
# sort
|
||||
R.sort(key=itemgetter("date"))
|
||||
for r in R:
|
||||
r["date"] = DateISOtoDMY(r["date"])
|
||||
return R
|
||||
|
||||
def list_by_etud(
|
||||
self, cnx, args={}, sort_on_contact=False, disable_formatting=False
|
||||
):
|
||||
"cherche rentreprise ayant eu contact avec etudiant"
|
||||
cursor = cnx.cursor(cursor_factory=ScoDocCursor)
|
||||
cursor.execute(
|
||||
"select E.*, I.nom as etud_nom, I.prenom as etud_prenom, C.date from entreprises E, entreprise_contact C, identite I where C.entreprise_id = E.entreprise_id and C.etudid = I.etudid and I.nom ~* %(etud_nom)s ORDER BY E.nom",
|
||||
args,
|
||||
)
|
||||
_, res = [x[0] for x in cursor.description], cursor.dictfetchall()
|
||||
R = []
|
||||
for r in res:
|
||||
r["etud_prenom"] = r["etud_prenom"] or ""
|
||||
d = {}
|
||||
for key in r:
|
||||
v = r[key]
|
||||
# format value
|
||||
if not disable_formatting and key in self.output_formators:
|
||||
v = self.output_formators[key](v)
|
||||
d[key] = v
|
||||
R.append(d)
|
||||
# sort
|
||||
if sort_on_contact:
|
||||
R.sort(key=lambda x: (x["date"] or datetime.date.min))
|
||||
|
||||
for r in R:
|
||||
r["date"] = DateISOtoDMY(r["date"] or datetime.date.min)
|
||||
return R
|
||||
|
||||
|
||||
_entreprisesEditor = EntreprisesEditor(
|
||||
"entreprises",
|
||||
"entreprise_id",
|
||||
(
|
||||
"entreprise_id",
|
||||
"nom",
|
||||
"adresse",
|
||||
"ville",
|
||||
"codepostal",
|
||||
"pays",
|
||||
"contact_origine",
|
||||
"secteur",
|
||||
"privee",
|
||||
"localisation",
|
||||
"qualite_relation",
|
||||
"plus10salaries",
|
||||
"note",
|
||||
"date_creation",
|
||||
),
|
||||
filter_dept=True,
|
||||
sortkey="nom",
|
||||
input_formators={
|
||||
"nom": _format_nom,
|
||||
"plus10salaries": bool,
|
||||
},
|
||||
)
|
||||
|
||||
# ----------- Correspondants
|
||||
_entreprise_correspEditor = EditableTable(
|
||||
"entreprise_correspondant",
|
||||
"entreprise_corresp_id",
|
||||
(
|
||||
"entreprise_corresp_id",
|
||||
"entreprise_id",
|
||||
"civilite",
|
||||
"nom",
|
||||
"prenom",
|
||||
"fonction",
|
||||
"phone1",
|
||||
"phone2",
|
||||
"mobile",
|
||||
"fax",
|
||||
"mail1",
|
||||
"mail2",
|
||||
"note",
|
||||
),
|
||||
sortkey="nom",
|
||||
)
|
||||
|
||||
|
||||
# ----------- Contacts
|
||||
_entreprise_contactEditor = EditableTable(
|
||||
"entreprise_contact",
|
||||
"entreprise_contact_id",
|
||||
(
|
||||
"entreprise_contact_id",
|
||||
"date",
|
||||
"type_contact",
|
||||
"entreprise_id",
|
||||
"entreprise_corresp_id",
|
||||
"etudid",
|
||||
"description",
|
||||
"enseignant",
|
||||
),
|
||||
sortkey="date",
|
||||
output_formators={"date": DateISOtoDMY},
|
||||
input_formators={"date": DateDMYtoISO},
|
||||
)
|
||||
|
||||
|
||||
def do_entreprise_create(args):
|
||||
"entreprise_create"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
r = _entreprisesEditor.create(cnx, args)
|
||||
return r
|
||||
|
||||
|
||||
def do_entreprise_delete(oid):
|
||||
"entreprise_delete"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
_entreprisesEditor.delete(cnx, oid)
|
||||
|
||||
|
||||
def do_entreprise_list(**kw):
|
||||
"entreprise_list"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
return _entreprisesEditor.list(cnx, **kw)
|
||||
|
||||
|
||||
def do_entreprise_list_by_etud(**kw):
|
||||
"entreprise_list_by_etud"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
return _entreprisesEditor.list_by_etud(cnx, **kw)
|
||||
|
||||
|
||||
def do_entreprise_edit(*args, **kw):
|
||||
"entreprise_edit"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
_entreprisesEditor.edit(cnx, *args, **kw)
|
||||
|
||||
|
||||
def do_entreprise_correspondant_create(args):
|
||||
"entreprise_correspondant_create"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
r = _entreprise_correspEditor.create(cnx, args)
|
||||
return r
|
||||
|
||||
|
||||
def do_entreprise_correspondant_delete(oid):
|
||||
"entreprise_correspondant_delete"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
_entreprise_correspEditor.delete(cnx, oid)
|
||||
|
||||
|
||||
def do_entreprise_correspondant_list(**kw):
|
||||
"entreprise_correspondant_list"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
return _entreprise_correspEditor.list(cnx, **kw)
|
||||
|
||||
|
||||
def do_entreprise_correspondant_edit(*args, **kw):
|
||||
"entreprise_correspondant_edit"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
_entreprise_correspEditor.edit(cnx, *args, **kw)
|
||||
|
||||
|
||||
def do_entreprise_correspondant_listnames(args={}):
|
||||
"-> liste des noms des correspondants (pour affichage menu)"
|
||||
C = do_entreprise_correspondant_list(args=args)
|
||||
return [(x["prenom"] + " " + x["nom"], str(x["entreprise_corresp_id"])) for x in C]
|
||||
|
||||
|
||||
def do_entreprise_contact_delete(oid):
|
||||
"entreprise_contact_delete"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
_entreprise_contactEditor.delete(cnx, oid)
|
||||
|
||||
|
||||
def do_entreprise_contact_list(**kw):
|
||||
"entreprise_contact_list"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
return _entreprise_contactEditor.list(cnx, **kw)
|
||||
|
||||
|
||||
def do_entreprise_contact_edit(*args, **kw):
|
||||
"entreprise_contact_edit"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
_entreprise_contactEditor.edit(cnx, *args, **kw)
|
||||
|
||||
|
||||
def do_entreprise_contact_create(args):
|
||||
"entreprise_contact_create"
|
||||
cnx = ndb.GetDBConnexion()
|
||||
r = _entreprise_contactEditor.create(cnx, args)
|
||||
return r
|
||||
|
||||
|
||||
def do_entreprise_check_etudiant(etudiant):
|
||||
"""Si etudiant est vide, ou un ETUDID valide, ou un nom unique,
|
||||
retourne (1, ETUDID).
|
||||
Sinon, retourne (0, 'message explicatif')
|
||||
"""
|
||||
etudiant = etudiant.strip().translate(
|
||||
str.maketrans("", "", "'()")
|
||||
) # suppress parens and quote from name
|
||||
if not etudiant:
|
||||
return 1, None
|
||||
cnx = ndb.GetDBConnexion()
|
||||
cursor = cnx.cursor(cursor_factory=ScoDocCursor)
|
||||
cursor.execute(
|
||||
"select etudid, nom, prenom from identite where upper(nom) ~ upper(%(etudiant)s) or etudid=%(etudiant)s",
|
||||
{"etudiant": etudiant},
|
||||
)
|
||||
r = cursor.fetchall()
|
||||
if len(r) < 1:
|
||||
return 0, 'Aucun etudiant ne correspond à "%s"' % etudiant
|
||||
elif len(r) > 10:
|
||||
return (
|
||||
0,
|
||||
"<b>%d etudiants</b> correspondent à ce nom (utilisez le code)" % len(r),
|
||||
)
|
||||
elif len(r) > 1:
|
||||
e = ['<ul class="entreprise_etud_list">']
|
||||
for x in r:
|
||||
e.append(
|
||||
"<li>%s %s (code %s)</li>" % ((x[1]).upper(), x[2] or "", x[0].strip())
|
||||
)
|
||||
e.append("</ul>")
|
||||
return (
|
||||
0,
|
||||
"Les étudiants suivants correspondent: préciser le nom complet ou le code\n"
|
||||
+ "\n".join(e),
|
||||
)
|
||||
else: # une seule reponse !
|
||||
return 1, r[0][0].strip()
|
@ -449,7 +449,6 @@ _adresseEditor = ndb.EditableTable(
|
||||
"telephonemobile",
|
||||
"fax",
|
||||
"typeadresse",
|
||||
"entreprise_id",
|
||||
"description",
|
||||
),
|
||||
convert_null_outputs_to_empty=True,
|
||||
|
@ -2362,29 +2362,6 @@ td.fvs_tit_chk {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* ----- Entreprises ------- */
|
||||
|
||||
table.entreprise_list, table.corr_list, table.contact_list {
|
||||
width : 100%;
|
||||
border-width: 0px;
|
||||
/* border-style: solid; */
|
||||
border-spacing: 0px 0px;
|
||||
padding: 0px;
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
table.entreprise_list td.nbcorr a, table.entreprise_list td.nbcontact a, table.contact_list td.etudnom a, table.contact_list td a {
|
||||
color: navy;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
tr.entreprise_list_even, tr.corr_list_even, tr.contact_list_even {
|
||||
background-color: rgb(85%,85%,95%);
|
||||
}
|
||||
tr.entreprise_list_odd, tr.corr_list_odd, tr.contact_list_odd {
|
||||
background-color: rgb(90%,90%, 90%);
|
||||
}
|
||||
|
||||
span.table_nav_mid {
|
||||
flex-grow: 1; /* Set the middle element to grow and stretch */
|
||||
}
|
||||
@ -2398,82 +2375,6 @@ div.table_nav {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
td.entreprise_descr, td.corr_descr, td.contact_descr {
|
||||
padding-left: 2em;
|
||||
}
|
||||
td.entreprise_descr_link {
|
||||
padding-left: 2em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
td.entreprise_descr_name { white-space: nowrap; }
|
||||
|
||||
a.entreprise_delete { color: black; text-decoration: underline; }
|
||||
a.entreprise_delete:visited { color: black; }
|
||||
|
||||
a.entreprise_edit {
|
||||
text-decoration: underline;
|
||||
color : rgb(0,0,204);
|
||||
font-weight: normal;
|
||||
}
|
||||
a.entreprise_edit:visited { color : rgb(0,0,204); }
|
||||
a.entreprise_edit:hover {
|
||||
color: rgb(153,51,51);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
p.entreprise_create { padding-top: 2em; }
|
||||
a.entreprise_create { color : black; font-weight: bold; }
|
||||
a.entreprise_create:visited { color : black; }
|
||||
|
||||
table.entreprise_list_title {
|
||||
width: 100%;
|
||||
border-top: 1px solid rgb(51,102,204);
|
||||
border-spacing: 0px 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
tr.entreprise_list_title {
|
||||
background-color: rgb(229,236,249);
|
||||
font-weight: bold;
|
||||
}
|
||||
td.entreprise_list_title {
|
||||
padding-left: 1em;
|
||||
}
|
||||
td.entreprise_list_title_res {
|
||||
font-weight: normal;
|
||||
text-align : right;
|
||||
}
|
||||
|
||||
h2.entreprise {
|
||||
color: rgb(6,102,18);
|
||||
border: 1px solid blue;
|
||||
}
|
||||
|
||||
h2.entreprise_contact:before {
|
||||
content: url(/ScoDoc/static/icons/contact_img.png);
|
||||
vertical-align: -80%;
|
||||
padding-right: 1em;
|
||||
}
|
||||
h2.entreprise_correspondant:before {
|
||||
content: url(/ScoDoc/static/icons/correspondant_img.png);
|
||||
vertical-align: -80%;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
h2.entreprise_new:before {
|
||||
content: url(/ScoDoc/static/icons/entreprise_img.png);
|
||||
vertical-align: -80%;
|
||||
padding-right: 2em;
|
||||
}
|
||||
|
||||
p.entreprise_warning, p.gtr_warning, p.gtr_interdit, p.gtr_devel {
|
||||
color: red;
|
||||
font-style: italic;
|
||||
margin-top: -1em;
|
||||
}
|
||||
P.entreprise_warning:before {
|
||||
content: url(/ScoDoc/static/icons/warning_img.png);
|
||||
vertical-align: -80%;
|
||||
}
|
||||
P.gtr_interdit:before {
|
||||
content: url(/ScoDoc/static/icons/interdit_img.png);
|
||||
vertical-align: -80%;
|
||||
@ -2482,9 +2383,6 @@ P.gtr_devel:before {
|
||||
content: url(/ScoDoc/static/icons/devel_img.png);
|
||||
vertical-align: -80%;
|
||||
}
|
||||
div.entreprise-insidebar {
|
||||
border: 1px solid blue;
|
||||
}
|
||||
|
||||
/* ---- Sortable tables --- */
|
||||
/* Sortable tables */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1665,7 +1665,6 @@ def etudident_delete(etudid, dialog_confirmed=False):
|
||||
"notes_moduleimpl_inscription",
|
||||
"notes_formsemestre_inscription",
|
||||
"group_membership",
|
||||
"entreprise_contact",
|
||||
"etud_annotations",
|
||||
"scolog",
|
||||
"admissions",
|
||||
|
@ -53,7 +53,6 @@ tables = (
|
||||
"billet_absence",
|
||||
"scolog",
|
||||
"etud_annotations",
|
||||
"entreprise_contact",
|
||||
"notes_formsemestre_inscription",
|
||||
"notes_moduleimpl_inscription",
|
||||
"notes_notes",
|
||||
|
@ -1,683 +0,0 @@
|
||||
|
||||
-- Creation des tables pour gestion notes ScoDoc 7 (OBSOLETE !)
|
||||
-- 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;
|
@ -92,27 +92,6 @@ ANONYMIZED_FIELDS = {
|
||||
"admissions.nomlycee": anonymize_name,
|
||||
"billet_absence.description": anonymize_null,
|
||||
"etud_annotations.comment": anonymize_name,
|
||||
# "entreprises.nom": anonymize_name,
|
||||
# "entreprises.adresse": anonymize_null,
|
||||
# "entreprises.ville": anonymize_null,
|
||||
# "entreprises.codepostal": anonymize_null,
|
||||
# "entreprises.pays": anonymize_null,
|
||||
# "entreprises.contact_origine": anonymize_null,
|
||||
# "entreprises.secteur": anonymize_null,
|
||||
# "entreprises.note": anonymize_null,
|
||||
# "entreprises.privee": anonymize_null,
|
||||
# "entreprises.localisation": anonymize_null,
|
||||
# "entreprise_correspondant.nom": anonymize_name,
|
||||
# "entreprise_correspondant.prenom": anonymize_name,
|
||||
# "entreprise_correspondant.phone1": anonymize_null,
|
||||
# "entreprise_correspondant.phone2": anonymize_null,
|
||||
# "entreprise_correspondant.mobile": anonymize_null,
|
||||
# "entreprise_correspondant.mail1": anonymize_null,
|
||||
# "entreprise_correspondant.mail2": anonymize_null,
|
||||
# "entreprise_correspondant.note": anonymize_null,
|
||||
# "entreprise_correspondant.fax": anonymize_null,
|
||||
# "entreprise_contact.description": anonymize_null,
|
||||
# "entreprise_contact.enseignant": anonymize_null,
|
||||
"notes_appreciations.comment": anonymize_name,
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user