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

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
}