You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
354 lines
8.8 KiB
354 lines
8.8 KiB
const { database } = require('../database.backup')
|
|
const { matiereSysteme } = require('../function/System')
|
|
const { convertArrayAndString } = require('../function/StringArrayConvertion')
|
|
|
|
/**
|
|
* function uset to create matiere
|
|
* @param {*} nom
|
|
* @returns Promise
|
|
*/
|
|
async function createMatiere(nom, credit, uniter, ue) {
|
|
const query = database.prepare(
|
|
'INSERT INTO matieres (nom, unite_enseignement, credit, heure, ue) VALUES (?, ?, ?, ?, ?)'
|
|
)
|
|
|
|
const uniterHeure = database.prepare('SELECT uniter_heure FROM nessesaryTable').get()
|
|
const heure = credit * uniterHeure.uniter_heure
|
|
|
|
try {
|
|
response = await query.run(nom, uniter, credit, heure, ue)
|
|
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
/**
|
|
* function to get all matieres
|
|
* @returns Promise
|
|
*/
|
|
async function getMatiere() {
|
|
const query = database.prepare('SELECT * FROM matieres ORDER BY id DESC')
|
|
|
|
try {
|
|
let response = await query.all()
|
|
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
async function displayMatiereFromForm(niveau, mention_id, parcours) {
|
|
// Fetch the semestre array
|
|
let semestre = await matiereSysteme(niveau) // Ensure this returns an array with at least 2 items
|
|
|
|
if (niveau !== 'L1') {
|
|
if (semestre.length < 2) {
|
|
console.error('Error: Semestre array does not contain enough elements.')
|
|
return
|
|
}
|
|
|
|
// Prepare the query
|
|
let matiereQuery = database.prepare(`
|
|
SELECT DISTINCT m.*
|
|
FROM matieres m
|
|
JOIN matiere_semestre ms ON m.id = ms.matiere_id
|
|
JOIN semestres s ON ms.semestre_id = s.id
|
|
JOIN parcoursmatiere pm ON m.id = pm.matiere_id
|
|
JOIN parcours p ON pm.parcour_id = p.id
|
|
WHERE (s.nom LIKE ? OR s.nom LIKE ?)
|
|
AND ms.mention_id = ?
|
|
AND p.nom = ?
|
|
`)
|
|
|
|
try {
|
|
// Execute the query with parameters
|
|
let response = matiereQuery.all(`%${semestre[0]}%`, `%${semestre[1]}%`, mention_id, parcours)
|
|
|
|
console.log(response)
|
|
// Log the response
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
} else {
|
|
if (semestre.length < 2) {
|
|
console.error('Error: Semestre array does not contain enough elements.')
|
|
return
|
|
}
|
|
|
|
// Prepare the query
|
|
let matiereQuery = database.prepare(`
|
|
SELECT DISTINCT m.*
|
|
FROM matieres m
|
|
JOIN matiere_semestre ms ON m.id = ms.matiere_id
|
|
JOIN semestres s ON ms.semestre_id = s.id
|
|
WHERE (s.nom LIKE ? OR s.nom LIKE ?)
|
|
AND ms.mention_id = ?
|
|
`)
|
|
|
|
try {
|
|
// Execute the query with parameters
|
|
let response = matiereQuery.all(`%${semestre[0]}%`, `%${semestre[1]}%`, mention_id)
|
|
console.log(response)
|
|
// Log the response
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* function to get single matiere
|
|
* @param {*} id
|
|
* @returns promise
|
|
*/
|
|
async function getSingleMatiere(id) {
|
|
const query = await database.prepare('SELECT * FROM matieres WHERE id = ?')
|
|
|
|
try {
|
|
let response = query.get(id)
|
|
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
/**
|
|
* function used when updating matiere
|
|
* @param {*} nom
|
|
* @param {*} id
|
|
* @returns promise
|
|
*/
|
|
async function updateMatiere(nom, id, credit, uniter, ue) {
|
|
const query = database.prepare(
|
|
'UPDATE matieres SET nom = ?, credit = ?, unite_enseignement = ?, heure = ?, ue = ? WHERE id = ?'
|
|
)
|
|
|
|
const uniterHeure = await database.prepare('SELECT uniter_heure FROM nessesaryTable').get()
|
|
const heure = credit * uniterHeure.uniter_heure
|
|
|
|
try {
|
|
response = await query.run(nom, credit, uniter, heure, ue, id)
|
|
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
async function deleteMatiere(id) {
|
|
const query = database.prepare('DELETE FROM matieres WHERE id = ?')
|
|
|
|
try {
|
|
let response = query.run(id)
|
|
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
async function asygnationToMention(formData, id) {
|
|
const clearQuery = database.prepare('DELETE FROM matiere_mention WHERE matiere_id = ?')
|
|
const query = database.prepare(
|
|
'INSERT INTO matiere_mention (matiere_id, mention_id) VALUES (?,?)'
|
|
)
|
|
const selectedKeys = Object.keys(formData).filter((key) => formData[key])
|
|
const placeholders = selectedKeys.map(() => '?').join(',')
|
|
// Prepare the query with placeholders
|
|
const clearSemestreMentionQuery = database.prepare(
|
|
`DELETE FROM matiere_semestre WHERE matiere_id = ? AND mention_id NOT IN (${placeholders})`
|
|
)
|
|
|
|
const clearNoreQuery = database.prepare(
|
|
`DELETE FROM notes WHERE matiere_id = ? AND mention_id NOT IN (${placeholders})`
|
|
)
|
|
|
|
try {
|
|
let response
|
|
await clearQuery.run(id)
|
|
await clearNoreQuery.run(id, ...selectedKeys)
|
|
clearSemestreMentionQuery.run(id, ...selectedKeys)
|
|
// use transaction for speed execution
|
|
database.transaction(() => {
|
|
for (let index = 0; index < selectedKeys.length; index++) {
|
|
response = query.run(id, selectedKeys[index])
|
|
}
|
|
})()
|
|
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
async function getMentionMatiere(id) {
|
|
const query = database.prepare('SELECT * FROM matiere_mention WHERE matiere_id = ?')
|
|
|
|
try {
|
|
let response = await query.all(id)
|
|
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
async function getMentionMatiereChecked(matiere_id) {
|
|
const getMentionMatiere = database.prepare('SELECT * FROM matiere_mention WHERE matiere_id = ?')
|
|
let MentionArray = await getMentionMatiere.all(matiere_id)
|
|
let arrayID = []
|
|
|
|
for (let index = 0; index < MentionArray.length; index++) {
|
|
arrayID.push(MentionArray[index].mention_id)
|
|
}
|
|
|
|
const mentionQuery = database.prepare(
|
|
`SELECT * FROM mentions WHERE id IN (${arrayID.map(() => '?').join(', ')})`
|
|
)
|
|
|
|
try {
|
|
const results = await mentionQuery.all(...arrayID)
|
|
|
|
return results
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
async function getSemestreMatiere(id) {
|
|
const query = database.prepare('SELECT * FROM matiere_semestre WHERE matiere_id = ?')
|
|
|
|
try {
|
|
let response = await query.all(id)
|
|
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
async function getSemestre() {
|
|
const query = database.prepare('SELECT * FROM semestres')
|
|
|
|
try {
|
|
let response = await query.all()
|
|
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
async function insertUpdateMentionSemestre(matiere_id, formData) {
|
|
const clearQuery = database.prepare('DELETE FROM matiere_semestre WHERE matiere_id = ?')
|
|
clearQuery.run(matiere_id)
|
|
|
|
const query = database.prepare(
|
|
'INSERT INTO matiere_semestre (matiere_id, semestre_id, mention_id) VALUES (?, ?, ?)'
|
|
)
|
|
let response
|
|
database.transaction(() => {
|
|
for (const key in formData) {
|
|
if (formData.hasOwnProperty(key)) {
|
|
for (let jindex = 0; jindex < formData[key].length; jindex++) {
|
|
response = query.run(matiere_id, formData[key][jindex], key)
|
|
}
|
|
}
|
|
}
|
|
})()
|
|
return response
|
|
}
|
|
|
|
async function getEnseignants() {
|
|
const getIdQuery = database.prepare(
|
|
'SELECT id FROM matiereEnseignants GROUP BY matiere_id ORDER BY MAX(date) DESC'
|
|
)
|
|
|
|
const query = database.prepare(
|
|
'SELECT * FROM matiereEnseignants WHERE id IN (' +
|
|
new Array(getIdQuery.all().length).fill('?').join(',') +
|
|
')'
|
|
)
|
|
|
|
try {
|
|
// Get the latest `id` for each `matiere_id`
|
|
const latestIds = getIdQuery.all().map((row) => row.id)
|
|
|
|
// If no ids exist, return an empty array
|
|
if (latestIds.length === 0) {
|
|
return []
|
|
}
|
|
|
|
// Fetch the full details using the filtered IDs
|
|
let response = query.all(...latestIds)
|
|
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
async function insertNewProf(matiere_id, nom, prenom, contact, date) {
|
|
const query = database.prepare(
|
|
'INSERT INTO matiereEnseignants (matiere_id, nom_enseignant, prenom_enseignant, contact, date) VALUES (?, ?, ?, ?, ?)'
|
|
)
|
|
|
|
try {
|
|
let response = query.run(matiere_id, nom, prenom, contact, date)
|
|
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
async function getSIngleProf(id) {
|
|
try {
|
|
const prof = await database
|
|
.prepare('SELECT * FROM matiereEnseignants WHERE matiere_id = ?')
|
|
.get(id)
|
|
|
|
return prof
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
async function updateProf(matiere_id, nom, prenom, contact, date) {
|
|
const query = database.prepare(
|
|
'UPDATE matiereEnseignants SET nom_enseignant = ?, prenom_enseignant = ?, contact = ?, date = ? WHERE matiere_id = ?'
|
|
)
|
|
|
|
try {
|
|
let response = query.run(nom, prenom, contact, date, matiere_id)
|
|
|
|
return response
|
|
} catch (error) {
|
|
return error
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
createMatiere,
|
|
getSIngleProf,
|
|
getMatiere,
|
|
getSingleMatiere,
|
|
updateMatiere,
|
|
displayMatiereFromForm,
|
|
deleteMatiere,
|
|
asygnationToMention,
|
|
getMentionMatiere,
|
|
getMentionMatiereChecked,
|
|
getSemestreMatiere,
|
|
getSemestre,
|
|
insertUpdateMentionSemestre,
|
|
getEnseignants,
|
|
insertNewProf,
|
|
updateProf
|
|
}
|
|
|