Commit 35f00d9d authored by unknown's avatar unknown

ajouter

parent a6084ba3
......@@ -82,6 +82,20 @@ $routes->get('atlas/etablissements', 'C_structure::fetchEtablissements');
// $routes->get('getIefByIa/(:num)', 'C_structure::getIefByIa/$1');
// $routes->get('getEtablissementByIef/(:num)', 'C_structure::getEtablissementByIef/$1');
$routes->get('structures/getEtablissementsByCommune/(:num)', 'C_structure::getEtablissementsByCommune/$1');
// classes
$routes->get('classes','C_classes::index');
$routes->post('classes/store','C_classes::store');
$routes->get('classes/edit/(:num)','C_classes::edit/$1');
$routes->post('classes/update/(:num)','C_classes::update/$1');
$routes->post('classes/delete/(:num)','C_classes::delete/$1');
$routes->post('classes/affecter','C_classes::affecter');
$routes->get('classes/facilitateurs/(:any)', 'C_classes::getFacilitateurs/$1');
$routes->get('classes/detail/(:num)', 'C_classes::detail/$1');
$routes->get('facilitateurs/classe/(:num)', 'C_faculitateur::getClasse/$1');
$routes->get('classes/byStructure/(:any)', 'C_classes::byStructure/$1');
$routes->get('classes/getClassesDisponibles/(:num)', 'C_classes::getClassesDisponibles/$1');
$routes->get('facilitateurs/byOperateur/(:num)', 'C_faculitateur::getByOperateur/$1');
$routes->get('classes/getDetailClasse/(:num)', 'C_classes::getDetailClasse/$1');
// source financement
$routes->get('source','C_source::index');
$routes->post('source/store/', 'C_source::store');
......@@ -118,14 +132,25 @@ $routes->post('facilitateur/store/', 'C_faculitateur::store');
$routes->get('facilitateur/edit/(:num)','C_faculitateur::edit/$1');
$routes->post('facilitateur/update/(:num)','C_faculitateur::update/$1');
$routes->post('facilitateur/delete/(:num)','C_faculitateur::delete/$1');
$routes->get('facilitateur/getByOperateur', 'C_faculitateur::getByOperateur');
// apprenant
$routes->get('apprenants/liste_par_classe/(:num)', 'C_apprenant::liste_par_classe/$1');
$routes->get('apprenants/liste_par_niveau/(:num)', 'C_apprenant::liste_par_niveau/$1');
// enfant
$routes->get('enfant','C_enfant::index');
$routes->post('enfant/store/', 'C_enfant::store');
$routes->get('enfant/edit/(:num)','C_enfant::edit/$1');
$routes->post('enfant/update/(:num)','C_enfant::update/$1');
$routes->post('enfant/delete/(:num)','C_enfant::delete/$1');
$routes->get('enfant/exportExcel/(:num)', 'C_enfant::exportExcel/$1');
$routes->post('/enfant/import', 'C_enfant::import');
$routes->get('enfant/view/(:num)', 'C_enfant::view/$1');
// prétest
$routes->get('pretest','C_pretest::index');
$routes->post('pretest/store','C_pretest::store');
$routes->get('pretest/edit/(:num)','C_pretest::edit/$1');
$routes->post('pretest/update','C_pretest::update');
$routes->get('pretest/affecter/(:num)/(:num)','C_pretest::affecter/$1/$2');
// critere
$routes->get('critere','C_critere::index');
$routes->post('critere/store/', 'C_critere::store');
......@@ -139,4 +164,22 @@ $routes->get('enfantselectionne/edit/(:num)','C_enfantselectionne::edit/$1');
$routes->post('enfantselectionne/update/(:num)','C_enfantselectionne::update/$1');
$routes->post('enfantselectionne/delete/(:num)','C_enfantselectionne::delete/$1');
$routes->get('enfantselectionne/view/(:num)', 'C_enfantselectionne::view/$1');
// 404
\ No newline at end of file
// emploi du temps
$routes->get('emploi','C_emploi::index');
$routes->post('emploi/store/', 'C_emploi::store');
$routes->get('emploi/edit/(:num)','C_emploi::edit/$1');
$routes->post('emploi/update/(:num)','C_emploi::update/$1');
$routes->post('emploi/delete/(:num)','C_emploi::delete/$1');
$routes->get('emploi/getEmploiByClasse/(:num)', 'C_emploi::getEmploiByClasse/$1');
$routes->get('emploi/getEmploiByFacilitateur/(:num)', 'C_emploi::getEmploiByFacilitateur/$1');
$routes->get('emploi/getEmploiByNiveau/(:num)', 'C_emploi::getEmploiByNiveau/$1');
$routes->post('emploidutemps/emploibyniveau', 'C_emploi::emploibyniveau');
$routes->post('emploidutemps/coursbyniveau', 'C_emploi::coursbyniveau');
$routes->post('emploidutemps/facilitateurbyniveau', 'C_emploi::facilitateurbyniveau');
$routes->get('emploidutemps/exportPDF/(:num)', 'C_emploi::exportPDF/$1');
// cours
$routes->get('cours','C_cours::index');
$routes->post('cours/store','C_cours::store');
$routes->get('cours/edit/(:num)','C_cours::edit/$1');
$routes->post('cours/update/(:num)','C_cours::update/$1');
$routes->post('cours/delete/(:num)','C_cours::delete/$1');
......@@ -122,4 +122,26 @@ public function liste_par_classe($id_classe)
return $this->response->setStatusCode(500)->setJSON(['error' => $e->getMessage()]);
}
}
public function liste_par_niveau($id_niveau)
{
try {
$db = \Config\Database::connect();
$builder = $db->table('apprenant a');
// Sélection des données de l'enfant
$builder->select('e.nom, e.prenom, e.date_naissance, e.lieu_naissance, n.nom as niveau_nom');
$builder->join('enfant e', 'e.id_enfant = a.id_enfant');
$builder->join('classes c', 'c.id_classe = a.id_classe');
$builder->join('niveaux n', 'n.id_niveau = c.id_niveau');
$builder->where('c.id_niveau', $id_niveau);
$resultat = $builder->get()->getResultArray();
return $this->response->setJSON($resultat);
} catch (\Exception $e) {
return $this->response->setStatusCode(500)->setJSON(['error' => $e->getMessage()]);
}
}
}
......@@ -5,6 +5,8 @@ use App\Models\M_classes;
use App\Models\M_faculitateur;
use App\Models\M_structure;
use App\Models\M_niveau;
use App\Models\M_apprenants;
use App\Models\M_emploi;
use App\Models\securite\M_user;
use App\Controllers\BaseController;
use App\Controllers\session;
......@@ -26,6 +28,7 @@ public function index()
$code_str = $this->request->getGet('code_str');
$code_classe= $this->request->getGet('code_classe');
$data['structures'] = $modelstructures->findAll();
$data['classe'] = $model->find($id_classe);
$data['classes'] = $model->getClassesAvecDetails($code_str);
$data['niveaux'] = $modelniveaux->findAll();
$data['facilitateurs'] = $modelfacilitateur->findAll();
......@@ -42,8 +45,11 @@ public function getFacilitateurs($code_str)
return $this->response->setJSON($data);
}
public function getByOperateur($id_operateur = null)
{
if (!$id_operateur) {
return $this->response->setJSON([]);
}
......@@ -58,76 +64,128 @@ public function getByOperateur($id_operateur = null)
return $this->response->setJSON($data);
}
public function getClassesDisponibles($idFac)
{
$model = new M_classes();
$classes = $model->getClassesByFacilitateur($idFac);
public function getClassesDisponibles($idFac)
{
$model = new M_classes();
return view('classes/partial_list', [
'classes' => $classes
]);
}
$classes = $model->getClassesByFacilitateur($idFac);
public function detail($id_classe)
{
$model = new M_classes();
$classe = $model->getClasseDetail($id_classe);
return view('classes/partial_list', [
'classes' => $classes
]);
}
return view('partials/classes_details', [
'classe' => $classe
]);
}
public function store()
public function detail($id_classe)
{
$classeModel = new M_classes();
$facilitateurModel = new M_faculitateur();
$structureModel = new M_structure();
$model = new M_classes();
$apprenantModel = new M_apprenants();
$classe = $model->getClasseDetail($id_classe);
$apprenants = $apprenantModel->getApprenantsByClasse($id_classe);
return view('partials/classes_details', [
'classe' => $classe,
'apprenants' => $apprenants
]);
}
$id_facilitateur = $this->request->getPost('id_facilitateur');
$code_str = $this->request->getPost('code_str');
// public function getDetailClasse($id_classe)
// {
// try {
// $modelClasse = new M_classes();
// $apprenantModel = new M_apprenants();
$structure = $structureModel->find($code_str);
$facilitateur = $facilitateurModel->find($id_facilitateur);
// $classe = $modelClasse->getClasseDetail($id_classe);
// $apprenants = $apprenantModel->getApprenantsByClasse($id_classe);
if (!$structure) {
return redirect()->back()->withInput()->with('error', 'Structure invalide.');
}
// if (!$classe) {
// return $this->response->setStatusCode(404)->setJSON([
// 'status' => 'error',
// 'message' => 'Classe introuvable — id: ' . $id_classe
// ]);
// }
// $classe['nb_apprenants'] = count($apprenants);
// // ✅ JSON (pas une vue) car le JS attend du JSON
// return $this->response->setJSON([
// 'status' => 'success',
// 'classe' => $classe,
// 'apprenants' => $apprenants
// ]);
// } catch (\Exception $e) {
// log_message('error', 'getDetailClasse: ' . $e->getMessage());
// return $this->response->setStatusCode(500)->setJSON([
// 'status' => 'error',
// 'message' => $e->getMessage(),
// 'line' => $e->getLine()
// ]);
// }
// }
public function getDetailClasse($id_classe)
{
try {
$modelClasse = new M_classes();
$apprenantModel = new M_apprenants();
$db = \Config\Database::connect();
if (!$facilitateur) {
return redirect()->back()->withInput()->with('error', 'Facilitateur invalide.');
$classe = $modelClasse->getClasseDetail($id_classe);
$apprenants = $apprenantModel->getApprenantsByClasse($id_classe);
if (!$classe) {
return $this->response->setStatusCode(404)->setJSON([
'status' => 'error',
'message' => 'Classe introuvable — id: ' . $id_classe
]);
}
$data = [
'code_classe' => generateCodeClasse($code_str), // Génère CAF1, ECB1, etc.
'nom_classe' => $this->request->getPost('nom_classe'),
'code_str' => $this->request->getPost('code_str'),
'nombre_place' => $this->request->getPost('nombre_place'),
'date_ouverture' => $this->request->getPost('date_ouverture'),
'id_facilitateur'=> $id_facilitateur,
'id_niveau' => $this->request->getPost('id_niveau'),
];
if ($classeModel->insert($data)) {
return redirect()->to('/classes')
->with('success', 'Classe ajoutée avec succès. Code: ' . $data['code_classe']);
} else {
return redirect()->back()
->withInput()
->with('error', 'Erreur lors de l\'ajout de la classe');
$classe['nb_apprenants'] = count($apprenants);
// ─── EMPLOI DU TEMPS ──────────────────────────────────────
// Vérifiez le nom exact de votre table ici ↓
$emploi = $db->query("
SELECT
e.id_emploi,
e.jour,
TIME_FORMAT(e.heure_debut, '%H:%i') AS heure_debut,
TIME_FORMAT(e.heure_fin, '%H:%i') AS heure_fin,
e.duree,
c.nom_cours
FROM emplois_temps e
LEFT JOIN cours c ON c.id_cours = e.id_cours
WHERE e.id_classe = ?
AND (e.date_suppression = '0000-00-00' OR e.date_suppression IS NULL)
ORDER BY
FIELD(e.jour,'Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'),
e.heure_debut ASC
", [$id_classe])->getResultArray();
return $this->response->setJSON([
'status' => 'success',
'classe' => $classe,
'apprenants' => $apprenants,
'emploi' => $emploi, // ← ajout
]);
} catch (\Exception $e) {
log_message('error', 'getDetailClasse: ' . $e->getMessage());
return $this->response->setStatusCode(500)->setJSON([
'status' => 'error',
'message' => $e->getMessage(),
'line' => $e->getLine()
]);
}
}
public function facilitateurbyStructure()
{
$code_str = $this->request->getGet('code_str');
public function facilitateurbyStructure()
{
$code_str = $this->request->getGet('code_str');
$model = new M_faculitateur();
$model = new M_faculitateur();
return $this->response->setJSON(
$model->where('code_str', $code_str)->findAll()
);
}
return $this->response->setJSON(
$model->where('code_str', $code_str)->findAll()
);
}
public function affecter()
{
$model = new M_classes();
......
<?php
namespace App\Controllers;
use App\Models\M_classes;
use App\Models\M_cours;
use CodeIgniter\Controller;
use CodeIgniter\HTTP\ResponseInterface;
class C_cours extends Controller
{
public function index($id_niveau = null)
{
$coursModel = new M_cours();
$modelClasses = new M_classes();
$session = session();
// valeur par défaut si vide
if ($id_niveau === null) {
$id_niveau = 1;
}
$data['cours'] = $coursModel->getCoursParNiveau($id_niveau);
$data['classes'] = $modelClasses->getClassesAvecDetails();
return view('V_cours', $data);
}
public function store()
{
$modelcours=new M_cours();
$data = [
'nom_cours' => $this->request->getPost('nom_cours'),
'id_classe' => $this->request->getPost('id_classe'),
];
if ($modelcours->insert($data)) {
return redirect()->to('/cours')->with('success', 'cours ajouté avec succès');
}
return redirect()->back()->withInput()->with('error', 'Erreur lors de l\'ajout du cours');
}
public function edit($id)
{
$model = new M_cours();
$cours = $model->find($id);
if (!$cours) {
return $this->response->setStatusCode(404)
->setJSON(['error' => 'Cours non trouvé']);
}
return $this->response->setJSON($cours);
}
public function update()
{
$id = $this->request->getPost('id_classe');
if (!$this->modelClasse->find($id)) {
return redirect()->to(base_url('classe'))->with('error', 'Classe non trouvée');
}
$data = [
'nom' => $this->request->getPost('classe'),
'etape' => $this->request->getPost('etape')
];
if ($this->modelClasse->update($id, $data)) {
return redirect()->to(base_url('classe'))->with('success', 'Classe modifiée avec succès');
}
return redirect()->to(base_url('classe'))->with('error', 'Échec de la modification');
}
public function delete($id)
{
$model = new M_cours();
if ($model->delete($id)) {
return $this->response->setJSON([
'status' => 'success',
'message' => 'Cours supprimé avec succès'
]);
}
return $this->response->setJSON([
'status' => 'error',
'message' => 'Échec de la suppression'
]);
}
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
......@@ -9,11 +9,11 @@ class C_enfantselectionne extends BaseController
public function index()
{
$model = new M_enfant();
$selectionModel = new M_enfantselectionne();
// $data['enfants_selectionnes'] = $selectionModel->findAll();
$data['enfants_selectionnes'] = $selectionModel->getEnfantsEligibles();
return view("V_enfantselectionne",$data);
$code_str = $this->request->getGet('code_str');
$data['enfants_selectionnes'] = $model->getEnfantsEligibles($code_str);
$data['code_str'] = $code_str;
return view("V_enfantselectionne", $data);
}
public function view($id)
{
......
<?php
namespace App\Controllers;
use App\Models\M_classes;
use App\Models\M_faculitateur;
class C_faculitateur extends BaseController
{
......@@ -40,20 +41,30 @@ public function index()
// ✅ Si administrateur (ex: 1)
if ($profil == 26) {
$data['faculitateurs'] = $model->findAll();
$data['facilitateurs'] = $model->getFacilitateursAvecClasse();
} else {
// ✅ Sinon filtrer
$data['faculitateurs'] = $model->getMesFacilitateurs($idSession);
$data['facilitateurs'] = $model->getFacilitateursAvecClasse($idSession);
}
return view("V_faculitateur", $data);
}
public function getByOperateur($id_operateur = null)
{
$model = new M_faculitateur();
$id_operateur = $id_operateur ?? $this->request->getGet('id_operateur');
$data['facilitateurs'] = $model->getFacilitateursAvecClasse($id_operateur);
// On retourne la vue partielle directement
return view('partials/facilitateurs_list', $data);
}
public function store()
{
$model = new M_faculitateur();
$idConnecte = session()->get('user_id');
$id_operateur = $this->request->getPost('id_operateur') ?? session()->get('user_id');
$data = [
'matricule' => $this->request->getPost('matricule'),
......@@ -61,10 +72,7 @@ public function store()
'nom' => $this->request->getPost('nom'),
'email_pro' => $this->request->getPost('email_pro'),
'telephone' => $this->request->getPost('telephone'),
// C'EST CETTE LIGNE QUI EMPÊCHE L'ERREUR :
'id_operateur' => $idConnecte,
'id_operateur' => $id_operateur,
];
$model->insert($data);
......@@ -107,4 +115,24 @@ public function store()
}
return $this->response->setJSON(['success' => false, 'message' => 'Erreur lors de la suppression']);
}
public function getClasse($id_facilitateur)
{
$classeModel = new M_classes();
$classe = $classeModel
->where('id_facilitateur', $id_facilitateur)
->first();
if (!$classe) {
return $this->response->setJSON([
'status' => 'error',
'message' => 'Aucune classe trouvée pour ce facilitateur.'
]);
}
return $this->response->setJSON([
'status' => 'success',
'data' => $classe
]);
}
}
......@@ -14,7 +14,7 @@ class C_pretest extends BaseController
$model = new M_pretest();
$modelenfant = new M_enfant();
$data['pretestes'] = $model->getPretestes();
$data['enfants'] = $modelenfant->getEnfantsEligible();
$data['enfants'] = $modelenfant->getEnfantsEligibles();
return view("V_pretest", $data);
}
public function store()
......
......@@ -6,6 +6,7 @@ use App\Models\M_typeoffre;
use App\Models\M_structure;
use App\Models\M_operateur;
use App\Models\M_superviseur;
use App\Models\M_niveau;
use App\Models\M_source;
use App\Models\M_site;
use App\Models\M_statut;
......@@ -20,12 +21,14 @@ class C_structure extends BaseController
$structuremodel =new M_structure();
$typeoffremodel =new M_typeoffre();
$operateurmodel=new M_operateur();
$niveauxmodel=new M_niveau();
$superviseurmodel=new M_superviseur();
$sitemodel=new M_site();
$statutmodel=new M_statut();
$sourcemodel=new M_source();
$promoteurmodel=new M_promoteurs();
$data=[
'niveaux'=>$niveauxmodel->findAll(),
'structures' =>$structuremodel->getStructuresWithDetails(),
'typeoffres'=>$typeoffremodel->findAll(),
'sources'=>$sourcemodel->findAll(),
......
......@@ -56,14 +56,37 @@ public function getApprenantsAvecDetails()
->get()
->getResultArray();
}
public function getApprenantsByClasse($id_classe)
{
$db = \Config\Database::connect();
return $db->table('apprenant a')
->select('
a.id_apprenant,
a.date_inscription,
e.id_enfant,
e.prenom,
e.nom,
e.date_naissance,
e.sexe,
e.lieu_naissance,
e.situation_familiale,
e.situation_scolaire,
e.handicap
')
->join('enfant e', 'e.id_enfant = a.id_enfant', 'left')
->where('a.id_classe', $id_classe)
->get()
->getResultArray();
}
// Exemple de fonction dans votre Modèle
public function getApprenantsParNiveau($id_classe, $niveau) {
return $this->db->table('apprenants')
->select('apprenants.*, classes.nom_classe, facilitateurs.nom as nom_facilitateur, facilitateurs.prenom as prenom_facilitateur')
->join('classes', 'classes.id_classe = apprenants.id_classe')
->join('facilitateurs', 'facilitateurs.id_facilitateur = classes.id_facilitateur')
->where('apprenants.id_classe', $id_classe)
->where('apprenants.niveau', $niveau) // Le filtre est ici
return $this->db->table('apprenant a')
->select('a.*, c.nom_classe, f.nom as nom_facilitateur, f.prenom as prenom_facilitateur')
->join('classes c', 'c.id_classe = a.id_classe')
->join('facilitateurs f', 'f.id_facilitateur = c.id_facilitateur')
->where('a.id_classe', $id_classe)
->where('a.niveau', $niveau) // Le filtre est ici
->get()
->getResultArray();
}
......
......@@ -47,6 +47,10 @@ class M_classes extends Model
->get()
->getResultArray();
}
public function getNiveaux() {
return $this->db->table('niveaux')->get()->getResultArray();
}
// public function getClassesAvecDetails($code_str)
// {
......@@ -124,18 +128,52 @@ public function getClasseDetail($id_classe)
return $db->table('classes c')
->select('
c.*,
n.nom as niveau_nom,
f.nom as facilitateur_nom,
f.prenom as facilitateur_prenom,
s.nom_structure,
COUNT(a.id_apprenant) as nb_apprenants
n.nom AS niveau_nom,
f.nom AS facilitateur_nom,
f.prenom AS facilitateur_prenom,
s.nom_structure
')
->join('niveaux n', 'n.id_niveau = c.id_niveau', 'left')
->join('facilitateurs f', 'f.id_facilitateur = c.id_facilitateur', 'left')
->join('structure s', 's.code_str = c.code_str', 'left')
->join('apprenant a', 'a.id_classe = c.id_classe', 'left')
->join('niveaux n', 'n.id_niveau = c.id_niveau', 'left')
->join('facilitateurs f', 'f.id_facilitateur = c.id_facilitateur', 'left')
->join('structure s', 's.code_str = c.code_str', 'left')
->where('c.id_classe', $id_classe)
->get()
->getRowArray();
}
// public function getDetailClasse($id_classe)
// {
// $db = \Config\Database::connect();
// // ── Infos classe + niveau + facilitateur ──────────────────
// $classe = $db->table('classes c')
// ->select('c.*, n.nom AS niveau_nom, n.etape, f.nom AS fac_nom, f.prenom AS fac_prenom')
// ->join('niveaux n', 'n.id_niveau = c.id_niveau', 'left')
// ->join('facilitateurs f', 'f.id_facilitateur = c.id_facilitateur', 'left')
// ->where('c.id_classe', $id_classe)
// ->get()->getRowArray();
// if (!$classe) {
// return $this->response->setJSON(['status' => 'error', 'message' => 'Classe introuvable']);
// }
// // ── Apprenants ayant passé le pré-test ────────────────────
// // Un enfant est "pré-testé" s'il a une entrée dans apprenants avec date_inscription remplie
// $apprenants = $db->table('apprenants a')
// ->select('e.id_enfant, e.prenom, e.nom, e.date_naissance, e.sexe,
// e.lieu_naissance, e.situation_familiale, e.situation_scolaire,
// a.date_inscription, a.id_apprenant')
// ->join('enfants e', 'e.id_enfant = a.id_enfant', 'inner')
// ->where('a.id_classe', $id_classe)
// ->where('a.date_suppression', '0000-00-00') // non supprimé
// ->orderBy('e.nom', 'ASC')
// ->get()->getResultArray();
// $classe['nb_apprenants'] = count($apprenants);
// return $this->response->setJSON([
// 'status' => 'success',
// 'classe' => $classe,
// 'apprenants' => $apprenants
// ]);
// }
}
\ No newline at end of file
......@@ -14,7 +14,7 @@ class M_cours extends Model
protected $returnType = 'array';
protected $useSoftDeletes = false;
protected $allowedFields = ['nom_cours','id_niveau'];
protected $allowedFields = ['nom_cours','id_classe'];
protected $useTimestamps = true;
protected $createdField = 'date_creation';
......@@ -24,4 +24,66 @@ class M_cours extends Model
protected $validationRules = [];
protected $validationMessages = [];
protected $skipValidation = false;
public function getCoursParClasse($id_classe)
{
$builder = $this->db->table('cours c');
$builder->select("
c.id_cours,
c.nom_cours,
c.code_str,
cl.nom_classe,
CONCAT(f.prenom, ' ', f.nom) AS facilitateur
");
$builder->join('classes cl', 'cl.id_classe = c.id_classe');
$builder->join('facilitateurs f', 'f.id_facilitateur = c.id_facilitateur'); // ← c. au lieu de cl.
$builder->where('c.id_classe', $id_classe);
return $builder->get()->getResultArray();
}
public function getCoursByClasse($id_classe)
{
return $this->db->table('cours c')
->select('c.id_cours, c.nom_cours')
->where('c.id_classe', $id_classe)
->get()
->getResultArray();
}
// public function getCoursParNiveau($id_niveau)
// {
// return $this->db->table('cours c')
// ->select('
// c.id_cours,
// c.nom_cours,
// cl.code_str,
// cl.id_classe,
// cl.id_niveau
// ')
// ->join('classes cl', 'cl.id_classe = c.id_classe', 'left')
// ->where('cl.id_niveau', $id_niveau)
// ->get()
// ->getResultArray();
// }
public function getCoursParNiveau($id_niveau)
{
return $this->db->table('cours c')
->select('
c.id_cours,
c.nom_cours,
cl.code_str,
cl.id_classe,
cl.id_niveau,
f.prenom as prenom_facilitateur,
f.nom as nom_facilitateur
')
->join('classes cl', 'cl.id_classe = c.id_classe', 'left')
// On lie le facilitateur via la table classes
->join('facilitateurs f', 'f.id_facilitateur = cl.id_facilitateur', 'left')
->where('cl.id_niveau', $id_niveau)
->get()
->getResultArray();
}
}
\ No newline at end of file
......@@ -5,19 +5,256 @@
class M_emploi extends Model
{
protected $table = 'emplois';
protected $table = 'emplois_temps';
protected $primaryKey = 'id_emploi';
protected $useAutoIncrement = true;
protected $returnType = 'array';
protected $useSoftDeletes = false;
protected $allowedFields = ['heure_debut','heure_fin','jour','id_cours'];
protected $useTimestamps = true;
protected $allowedFields = ['heure_debut','heure_fin','jour','id_cours','duree','id_classe','id_niveau','id_facilitateur','code_str'];
protected $useTimestamps = true;
protected $createdField = 'date_creation';
protected $updatedField = 'date_modification';
protected $deletedField = 'date_suppression';
protected $validationRules = [];
protected $validationMessages = [];
protected $skipValidation = false;
public function getFullEmploi($id_classe)
{
return $this->select('emplois_temps.*, cours.nom_cours, cours.code_str, facilitateurs.nom as nom_prof, classes.nom_classe')
->join('cours', 'cours.id_cours = emplois_temps.id_cours')
->join('classes', 'classes.id_classe = emplois_temps.id_classe') // Jointure vers la table classe
->join('facilitateurs', 'facilitateurs.id_facilitateur = emplois_temps.id_facilitateur', 'left')
->where('emplois_temps.id_classe', $id_classe)
->findAll();
}
public function getEmploiParNiveau($id_niveau)
{
return $this->db->table('emplois_temps')
->select('
emplois_temps.*,
cours.nom_cours,
classes.nom_classe,
classes.code_str,
facilitateurs.nom AS nom_facilitateur,
facilitateurs.prenom AS prenom_facilitateur
')
// Lien Emploi -> Cours
->join('cours', 'cours.id_cours = emplois_temps.id_cours')
// Lien Cours -> Classe
->join('classes', 'classes.id_classe = cours.id_classe')
// Lien Classe -> Facilitateur
->join('facilitateurs', 'facilitateurs.id_facilitateur = classes.id_facilitateur', 'left')
// Filtrer par niveau via la classe du cours
->where('classes.id_niveau', $id_niveau)
->get()
->getResultArray();
}
public function getNiveauxAvecEmplois()
{
$builder = $this->db->table($this->table);
$builder->distinct();
$builder->select('id_niveau');
$query = $builder->get();
return array_column($query->getResultArray(), 'id_niveau');
}
/**
* Optionnel : récupérer les infos complètes des niveaux ayant un emploi
*/
public function getInfosNiveauxAvecEmplois()
{
$ids = $this->getNiveauxAvecEmplois();
if (empty($ids)) return [];
$niveauModel = new M_niveau();
return $niveauModel->whereIn('id_niveau', $ids)->findAll();
}
// public function getEmploiByNiveaux($id_niveau)
// {
// return $this->select('planning.*, cours.nom_cours, facilitateurs.nom AS nom_facilitateur,facilitateurs.prenom AS prenom_facilitateur, niveaux.nom AS nom_niveau')
// ->join('cours', 'cours.id_cours = planning.id_cours')
// ->join('facilitateurs', 'facilitateurs.id_facilitateur = planning.id_facilitateur')
// ->join('niveaux', 'niveaux.id_niveau = planning.id_niveau')
// ->where('planning.id_niveau', $id_niveau)
// ->findAll();
// }
public function findAllWithNames() {
$builder = $this->db->table('emplois_temps');
$builder->select('
emplois_temps.*,
cours.nom_cours AS nom_du_cours,
cours.id_classe AS id_classe,
classes.code_str AS code_str,
classes.id_facilitateur AS id_facilitateur,
facilitateurs.nom AS nom_facilitateur,
facilitateurs.prenom AS prenom_facilitateur,
niveaux.nom AS nom_niveau,
niveaux.etape AS etape_niveau
');
$builder->join('cours', 'cours.id_cours = emplois_temps.id_cours', 'left');
$builder->join('classes', 'classes.id_classe = cours.id_classe', 'left');
$builder->join('facilitateurs', 'facilitateurs.id_facilitateur = classes.id_facilitateur', 'left');
$builder->join('niveaux', 'niveaux.id_niveau = classes.id_niveau', 'left');
$query = $builder->get();
return $query->getResultArray();
}
public function getEmploiByNiveau($id_niveau)
{
return $this->db->table('emplois_temps et')
->select("
et.jour,
et.heure_debut,
et.heure_fin,
et.duree,
c.nom_cours,
cl.code_str,
cl.nom_classe,
f.prenom,
f.nom
")
->join('cours c', 'c.id_cours = et.id_cours')
->join('classes cl', 'cl.id_classe = c.id_classe')
->join('facilitateurs f', 'f.id_facilitateur = cl.id_facilitateur', 'left')
->where('cl.id_niveau', $id_niveau)
->orderBy('et.heure_debut', 'ASC')
->get()
->getResultArray();
}
public function getEmploiDuTempsParNiveau($id_niveau)
{
$result = $this->db->table('emplois_temps et')
->select('et.*, c.nom_cours, f.prenom AS facilitateur')
->join('cours c', 'c.id_cours = et.id_cours')
->join('classes cl', 'cl.id_classe = c.id_classe')
->join('facilitateurs f', 'f.id_facilitateur = cl.id_facilitateur', 'left')
->where('cl.id_niveau', $id_niveau)
->get()
->getResultArray();
// Définir les jours et les plages horaires
$jours = ['Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'];
$heures = ['08:00 - 10:00','10:00 - 12:00','14:00 - 16:00','16:00 - 18:00'];
// Initialiser toutes les cellules à null
$emplois = [];
foreach ($jours as $jour) {
foreach ($heures as $heure) {
$emplois[$jour][$heure] = [
'nom_cours' => null,
'facilitateur' => null
];
}
}
// Remplir avec les cours réels
foreach ($result as $row) {
$heure = $row['heure_debut'].' - '.$row['heure_fin'];
$emplois[$row['jour']][$row['heure_debut'].' - '.$row['heure_fin']] = [
'nom_cours' => $row['nom_cours'] ?? null,
'facilitateur' => $row['facilitateur'] ?? null
];
}
return $emplois;
}
public function getCoursInfos($id_cours)
{
return $this->db->table('cours c')
->select('
c.id_cours,
c.id_classe,
cl.id_niveau,
cl.id_facilitateur,
cl.code_str
')
->join('classes cl', 'cl.id_classe = c.id_classe')
->where('c.id_cours', $id_cours)
->get()
->getRowArray();
}
public function getNomNiveau($id_niveau)
{
return $this->db->table('niveaux')
->select('nom')
->where('id_niveau', $id_niveau)
->get()
->getRow()->nom;
}
// public function getEmploiByNiveau($id_niveau)
// {
// return $this->select('planning.*, cours.nom_cours, facilitateurs.nom_facilitateur, niveaux.nom_niveau')
// ->join('cours', 'cours.id_cours = planning.id_cours')
// ->join('facilitateurs', 'facilitateurs.id_facilitateur = planning.id_facilitateur')
// ->join('niveaux', 'niveaux.id_niveau = planning.id_niveau')
// ->where('planning.id_niveau', $id_niveau)
// ->where('planning.date_suppression', '0000-00-00')
// ->orderBy('FIELD(jour,"Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi")')
// ->orderBy('heure_debut', 'ASC')
// ->findAll();
// }
public function getEmplois($id_niveau)
{
return $this->select('
emplois_temps.id,
emplois_temps.jour,
emplois_temps.heure_debut,
emplois_temps.heure_fin,
classes.id_classe,
facilitateurs.nom AS nom_facilitateur,
niveaux.nom AS nom_niveau,
structure.nom_structure,
cours.nom_cours
')
->join('classes', 'classes.id_classe = emplois_temps.id_classe')
->join('niveaux', 'niveaux.id_niveau = classes.id_niveau')
->join('cours', 'cours.id_niveau = niveaux.id_niveau')
->join('structure', 'structure.code_str = classes.code_str')
->join('facilitateurs', 'facilitateurs.id_facilitateur = classes.id_facilitateur', 'left')
->findAll();
}
// Méthode pour récupérer les emplois avec toutes les infos
public function getEmploisComplet()
{
return $this->select('emplois_temps.*, classes.code_str, classes.id_niveau as classe_niveau,
niveaux.nom,
facilitateurs.nom, facilitateurs.prenom,
cours.nom_cours')
->join('classes', 'emplois_temps.id_classe = classes.id_classe')
->join('niveaux', 'emplois_temps.id_niveau = niveaux.id_niveau')
->join('facilitateurs', 'emplois_temps.id_facilitateur = facilitateurs.id_facilitateur', 'left')
->join('cours', 'emplois_temps.id_cours = cours.id_cours')
->orderBy('emplois_temps.jour, emplois_temps.heure_debut', 'ASC')
->findAll();
}
}
\ No newline at end of file
......@@ -8,7 +8,7 @@ class M_enfant extends Model
protected $table = 'enfant';
protected $primaryKey = 'id_enfant';
protected $returnType = 'array';
protected $allowedFields = ['prenom', 'situation_scolaire','situation_familiale', 'nom','id_parent', 'date_naissance', 'lieu_naissance', 'derniere_classe_frequentee', 'cause_descolarisation','type_handicap', 'handicap', 'maladie', 'vit_avec_parents', 'localisation_region', 'localisation_departement', 'localisation_commune','localisation_quartier', 'existence_extrait'];
protected $allowedFields = ['prenom', 'situation_scolaire','situation_familiale', 'nom','id_parent', 'date_naissance', 'lieu_naissance', 'derniere_classe_frequentee', 'cause_descolarisation','type_handicap', 'handicap', 'maladie', 'vit_avec_parents', 'localisation_region', 'localisation_departement', 'localisation_commune','localisation_quartier', 'existence_extrait', 'code_str'];
protected $useTimestamps = true;
protected $createdField = 'date_creation';
......@@ -64,6 +64,63 @@ public function getEnfantWithParent($id) {
return $query->getResultArray();
}
public function getEnfantsEligibles($code_str = null, $id_type_offre = null)
{
$db = \Config\Database::connect();
$critereBuilder = $db->table('critere c')->select('c.*');
if (!empty($id_type_offre)) {
$critereBuilder->where('c.id_type_offre', $id_type_offre);
} elseif (!empty($code_str)) {
$critereBuilder->join('structure s', 's.id_type_offre = c.id_type_offre')
->where('s.code_str', $code_str);
}
$criteres = $critereBuilder->get()->getResultArray();
if (empty($criteres)) {
return [];
}
$builder = $db->table('enfant e');
$builder->select('e.*');
if (!empty($code_str)) {
$builder->where('e.code_str', $code_str);
}
$builder->where('e.date_naissance IS NOT NULL', null, false)
->where('e.date_naissance !=', '0000-00-00')
->where('e.date_naissance !=', '1970-01-01');
$builder->groupStart();
foreach ($criteres as $critere) {
$dateRef = !empty($critere['date_ref']) ? $critere['date_ref'] : date('Y-m-d');
$ageMin = (int) $critere['age_min'];
$ageMax = (int) $critere['age_max'];
$builder->orWhere("TIMESTAMPDIFF(YEAR, e.date_naissance, '{$dateRef}') BETWEEN {$ageMin} AND {$ageMax}", null, false);
}
$builder->groupEnd();
$builder->groupStart()
->where('e.situation_scolaire', 'descolaire')
->orWhere('e.situation_scolaire', 'non_scolaire')
->groupEnd();
$builder->orderBy("CASE WHEN e.handicap = 'oui' THEN 1 ELSE 2 END", '', false)
->orderBy("CASE WHEN e.situation_familiale = 'orphelin' THEN 1 WHEN e.situation_familiale = 'parents_divorces' THEN 2 WHEN e.situation_familiale = 'sous_tutorat' THEN 3 ELSE 4 END", '', false)
->orderBy("CASE WHEN e.sexe = 'F' THEN 1 ELSE 2 END", '', false)
->orderBy("CASE WHEN TIMESTAMPDIFF(YEAR, e.date_naissance, CURDATE()) < 12 THEN TIMESTAMPDIFF(YEAR, e.date_naissance, CURDATE()) * -1 ELSE TIMESTAMPDIFF(YEAR, e.date_naissance, CURDATE()) END", '', false);
return $builder->get()->getResultArray();
}
public function getEnfantsEligible()
{
return $this->getEnfantsEligibles();
}
public function getStructuresWithDetails()
{
return $this->select('structure.*,
......
......@@ -20,13 +20,13 @@ class M_enfantselectionne extends Model
$builder->select("
e.*,
TIMESTAMPDIFF(YEAR, e.date_naissance, c.date_ref) AS age_actuel
TIMESTAMPDIFF(YEAR, e.date_naissance, c.date_creation) AS age_actuel
");
$builder->join('critere c', 'c.id_critere = 5');
$builder->where("
TIMESTAMPDIFF(YEAR, e.date_naissance, c.date_ref)
TIMESTAMPDIFF(YEAR, e.date_naissance, c.date_creation)
BETWEEN c.age_min AND c.age_max
");
......@@ -55,9 +55,9 @@ class M_enfantselectionne extends Model
$builder->orderBy("
CASE
WHEN TIMESTAMPDIFF(YEAR, e.date_naissance, c.date_ref) < 12
THEN TIMESTAMPDIFF(YEAR, e.date_naissance, c.date_ref) * -1
ELSE TIMESTAMPDIFF(YEAR, e.date_naissance, c.date_ref)
WHEN TIMESTAMPDIFF(YEAR, e.date_naissance, c.date_creation) < 12
THEN TIMESTAMPDIFF(YEAR, e.date_naissance, c.date_creation) * -1
ELSE TIMESTAMPDIFF(YEAR, e.date_naissance, c.date_creation)
END
", '', false);
......
......@@ -25,7 +25,18 @@ public function getMesFacilitateurs($id)
// return $this->where('id_operateur', $idOperateur)
// ->findAll();
// }
public function getFacilitateursAvecClasse($id_operateur = null)
{
$builder = $this->db->table('facilitateurs f')
->select('f.*, c.nom_classe, c.id_classe')
->join('classes c', 'c.id_facilitateur = f.id_facilitateur', 'left');
if ($id_operateur !== null) {
$builder->where('f.id_operateur', $id_operateur);
}
return $builder->get()->getResultArray();
}
}
\ No newline at end of file
<?php
namespace App\Models;
use CodeIgniter\Model;
class M_planning extends Model
{
protected $table = 'planning';
protected $primaryKey = 'id';
protected $returnType = 'array';
protected $useSoftDeletes = false;
protected $allowedFields = [
'id_emploi',
'jour',
'heure_debut',
'heure_fin',
'id_cours',
'id_niveau',
'id_facilitateur',
'duree',
'code_str'
];
protected $useTimestamps = true;
protected $createdField = 'date_creation';
protected $updatedField = 'date_modification';
protected $deletedField = 'date_suppression';
protected $validationRules = [];
protected $validationMessages = [];
protected $skipValidation = false;
}
......@@ -151,6 +151,7 @@ class M_structure extends Model
public function getStructuresWithDetails()
{
return $this->select('structure.*,
cod_structure.NOM_STRUCTURE AS etablissement_nom,
operateurs.nom AS nom_operateur,
operateurs.prenom AS prenom_operateur,
superviseurs.prenom AS prenom_superviseur,
......@@ -165,6 +166,8 @@ class M_structure extends Model
promoteur.libelle AS promoteur_nom,
statut_occupation.libelle AS statut_nom
')
->join('cod_structure', 'cod_structure.ID_STRUCTURE = structure.etablissement', 'left')
->join('operateurs', 'operateurs.id_operateur = structure.id_operateur', 'left')
->join('superviseurs', 'superviseurs.id_superviseur = structure.id_superviseur', 'left')
->join('atlas AS ia', 'ia.code = structure.ia', 'left')
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -8,8 +8,9 @@
<!-- Page-Title -->
<div class="row">
<div class="col-sm-12">
<h4 class="pull-left page-title">Liste des enfants sélectionnés</h4>
<!-- <ol class="breadcrumb pull-right">
<h4 class="pull-left page-title">Liste des enfants sélectionnés</h4> <a href="<?= site_url('enfant' . (!empty($code_str) ? '?code_str=' . urlencode($code_str) : '')) ?>" class="btn btn-outline-secondary btn-sm pull-right">
<i class="fa fa-list"></i> Tous les enfants
</a> <!-- <ol class="breadcrumb pull-right">
<button data-toggle="modal" data-target="#add-category"
class="btn btn-success waves-effect waves-light">Ajouter<i
class="md md-add-circle-outline"></i></button>
......@@ -43,7 +44,7 @@
<small class="text-muted">Situation scolaire:
<?= $enfant['situation_scolaire'] ?></small>
</td>
<td><?= $enfant['age_actuel'] ?> ans</td>
<!-- <td><p?= $enfant['age_actuel'] ?> ans</td> -->
<td>
<?php if($enfant['handicap'] == 'oui'): ?>
<span class="badge bg-danger">Handicap</span>
......@@ -283,6 +284,20 @@ $(document).ready(function() {
<span class="fw-bold">${check(response.parent.lien_parente)}</span>
</div>
</div>
${response.parent.date_naissance ? `
<div class="col-md-6 mb-2">
<div class="d-flex border-bottom pb-1">
<span class="text-muted flex-grow-1">Âge du parent :</span>
<span class="fw-bold">${calculateAge(response.parent.date_naissance)}</span>
</div>
</div>
<div class="col-md-6 mb-2">
<div class="d-flex border-bottom pb-1">
<span class="text-muted flex-grow-1">Date de naissance du parent :</span>
<span class="fw-bold text-primary">${check(response.parent.date_naissance)}</span>
</div>
</div>
` : ''}
<div class="col-md-6 mb-2">
<div class="d-flex border-bottom pb-1">
<span class="text-muted flex-grow-1">Profession :</span>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<?php if (empty($classe)): ?>
<div class="alert alert-danger">Classe introuvable</div>
<?php else: ?>
<!-- Infos classe -->
<!-- ═══════════════════════════════════════════════════════
FORMULAIRE NIVEAU — EN TÊTE
═══════════════════════════════════════════════════════ -->
<div class="row mb-4">
<div class="col-12">
<div class="card border-0 shadow-sm">
<div class="card-header bg-primary text-white">
<i class="fa fa-layer-group me-1"></i>
<strong>Niveau : <?= esc($classe['niveau_nom']) ?></strong>
</div>
<div class="card-body">
<!-- ✅ Collez votre formulaire niveau ici -->
</div>
</div>
</div>
</div>
<!-- ═══════════════════════════════════════════════════════
INFOS CLASSE
═══════════════════════════════════════════════════════ -->
<div class="row mb-3">
<div class="col-md-6">
<div class="alert alert-info">
......@@ -17,6 +39,9 @@
</div>
</div>
<!-- ═══════════════════════════════════════════════════════
STATISTIQUES
═══════════════════════════════════════════════════════ -->
<div class="row mb-3">
<div class="col-md-4">
<div class="card text-center border-0 shadow-sm">
......@@ -37,32 +62,25 @@
<div class="col-md-4">
<div class="card text-center border-0 shadow-sm">
<div class="card-body py-3">
<!-- Emploi du temps -->
<a href="<?= base_url('emploidutemps?id_niveau=' . $classe['id_niveau']) ?>"
class="btn btn-outline-primary btn-sm btn-block mb-2">
<i class="fa fa-calendar"></i> Emploi du temps
</a>
<!-- Évaluation -->
<a href="<?= base_url('evaluation?id_classe=' . $classe['id_classe']) ?>"
class="btn btn-outline-warning btn-sm btn-block">
<i class="fa fa-tasks"></i> Évaluation
</a>
</div>
</div>
</div>
</div>
<!-- Bouton voir apprenants -->
<!-- ═══════════════════════════════════════════════════════
VOIR APPRENANTS
═══════════════════════════════════════════════════════ -->
<div class="text-center mt-3">
<!-- <a href="<p?= base_url('apprenants?id_classe=' . $classe['id_classe']) ?>" class="btn btn-primary">
<i class="fa fa-users"></i> Voir les apprenants
</a> -->
<button type="button" class="btn btn-primary btn-load-apprenants"
data-id-classe="<?= $classe['id_classe'] ?>"
data-nom-classe="<?= esc($classe['nom_classe']) ?>"
data-nom-niveau="<?= esc($classe['niveau_nom']) ?>">
<button type="button" class="btn btn-primary btn-load-apprenants" data-id-niveau="<?= $classe['id_niveau'] ?>"
data-nom-classe="<?= esc($classe['nom_classe']) ?>" data-nom-niveau="<?= esc($classe['niveau_nom']) ?>">
<i class="fa fa-users"></i> Voir les apprenants
</button>
</div>
<?php endif; ?>
<?php endif; ?>
\ No newline at end of file
<?php if (!empty($facilitateurs)): ?>
<?php foreach ($facilitateurs as $facilitateur): ?>
<tr id="row-<?= esc($facilitateur['id_facilitateur']) ?>">
<td><?= esc($facilitateur['prenom'] . ' ' . $facilitateur['nom']) ?></td>
<td><?= esc($facilitateur['matricule']) ?></td>
<td>
<?= esc($facilitateur['telephone']) ?><br>
<small class="text-muted"><?= esc($facilitateur['email_pro']) ?></small>
</td>
<td>
<?php if (!empty($facilitateur['nom_classe'])): ?>
<a href="#" class="view-classes-btn" data-id="<?= esc($facilitateur['id_facilitateur']) ?>"
data-classe-id="<?= esc($facilitateur['id_classe']) ?>"
data-name="<?= esc($facilitateur['prenom'] . ' ' . $facilitateur['nom']) ?>"
data-classe="<?= esc($facilitateur['nom_classe']) ?>"
data-facilitateur="<?= esc($facilitateur['id_facilitateur']) ?>" data-toggle="modal"
data-target="#modal-classe-detail" style="text-decoration: none; color: #17a2b8; font-weight: 500;">
<i class="fa fa-chalkboard-teacher me-1"></i>
<?= esc($facilitateur['nom_classe']) ?>
</a>
<?php else: ?>
<span class="badge badge-secondary">
<i class="fa fa-times me-1"></i> Non affecté
</span> <!-- ✅ balise fermée -->
<?php endif; ?>
</td>
<td class="text-center">
<button class="btn btn-sm btn-primary waves-effect waves-light edit_btn"
data-id="<?= esc($facilitateur['id_facilitateur']) ?>" data-toggle="modal"
data-target="#edit-facilitateur-modal">
<i class="fa fa-edit"></i>
</button>
<button class="btn btn-sm <?=$facilitateur['etat'] == '1' ? 'btn-success' : 'btn-danger' ?> toggle-status"
data-user-id="<?= $facilitateur['id_facilitateur'] ?>" data-current-status="<?= $facilitateur['etat'] ?>">
<i class="fa <?= $facilitateur['etat'] == '1'? 'fa-check-circle' : 'fa-times-circle' ?>"></i>
</button>
</td>
</tr>
<?php endforeach; ?>
<?php else: ?>
<tr>
<td colspan="5" class="text-center text-muted">
Aucun facilitateur trouvé pour cet opérateur.
</td>
</tr>
<?php endif; ?>
\ No newline at end of file
<style>
table { width: 100%; border-collapse: collapse; }
th, td { border: 1px solid #ccc; padding: 10px; text-align: center; }
th { background: #f4f4f4; }
.header { text-align: center; margin-bottom: 20px; }
</style>
<div class="header">
<h2>EMPLOI DU TEMPS - <?= esc($niveau['nom']) ?></h2>
</div>
<table>
<thead>
<tr>
<th>Heure</th>
<th>Lundi</th>
<th>Mardi</th>
<th>Mercredi</th>
<th>Jeudi</th>
<th>Vendredi</th>
</tr>
</thead>
<tbody>
<?php
$creneaux = ['08:00:00', '09:00:00', '10:00:00', '11:00:00', '14:00:00', '15:00:00'];
foreach($creneaux as $heure): ?>
<tr>
<td><?= substr($heure, 0, 5) ?></td>
<?php
$jours = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi'];
foreach($jours as $j): ?>
<td>
<?php foreach($planning as $p):
if($p['jour'] == $j && $p['heure_debut'] == $heure): ?>
<strong><?= esc($p['matiere']) ?></strong><br>
<small><?= $p['duree'] ?></small>
<?php endif;
endforeach; ?>
</td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>
\ No newline at end of file
......@@ -60,6 +60,8 @@ var resizefunc = [];
<script src="<?=base_url()?>assets/plugins/datatables/dataTables.bootstrap4.min.js"></script>
<script src="<?=base_url()?>assets/plugins/datatables/dataTables.responsive.min.js"></script>
<script src="<?=base_url()?>assets/plugins/datatables/responsive.bootstrap4.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<script>
/* ==============================================
Counter Up
......@@ -71,7 +73,7 @@ jQuery(document).ready(function($) {
});
});
</script>
<script>
<script>
$(document).ready(function() {
$('#datatable').dataTable();
$('#datatable-keytable').DataTable( { keys: true } );
......@@ -81,6 +83,69 @@ jQuery(document).ready(function($) {
} );
TableManageButtons.init();
</script>
<!-- classe -->
<!-- apprenants -->
<script>
$(document).ready(function() {
$('#table-apprenants').dataTable();
$('#datatable-keytable').DataTable( { keys: true } );
$('#datatable-responsive').DataTable();
$('#datatable-scroller').DataTable( { ajax: "../plugins/datatables/json/scroller-demo.json", deferRender: true, scrollY: 380, scrollCollapse: true, scroller: true } );
var table = $('#datatable-fixed-header').DataTable( { fixedHeader: true } );
} );
TableManageButtons.init();
</script>
<script>
$(document).ready(function() {
$('#classe-table').dataTable();
$('#datatable-keytable').DataTable( { keys: true } );
$('#datatable-responsive').DataTable();
$('#datatable-scroller').DataTable( { ajax: "../plugins/datatables/json/scroller-demo.json", deferRender: true, scrollY: 380, scrollCollapse: true, scroller: true } );
var table = $('#datatable-fixed-header').DataTable( { fixedHeader: true } );
} );
TableManageButtons.init();
</script>
<!-- operateurs -->
<script>
$(document).ready(function() {
$('#datatable_operateurs').dataTable();
$('#datatable-keytable').DataTable( { keys: true } );
$('#datatable-responsive').DataTable();
$('#datatable-scroller').DataTable( { ajax: "../plugins/datatables/json/scroller-demo.json", deferRender: true, scrollY: 380, scrollCollapse: true, scroller: true } );
var table = $('#datatable-fixed-header').DataTable( { fixedHeader: true } );
} );
TableManageButtons.init();
</script>
<script>
$(document).ready(function() {
$('#datatable_selection').dataTable();
$('#datatable-keytable').DataTable( { keys: true } );
$('#datatable-responsive').DataTable();
$('#datatable-scroller').DataTable( { ajax: "../plugins/datatables/json/scroller-demo.json", deferRender: true, scrollY: 380, scrollCollapse: true, scroller: true } );
var table = $('#datatable-fixed-header').DataTable( { fixedHeader: true } );
} );
TableManageButtons.init();
</script>
<script>
$(document).ready(function() {
$('#datatable_pretest').dataTable();
$('#datatable-keytable').DataTable( { keys: true } );
$('#datatable-responsive').DataTable();
$('#datatable-scroller').DataTable( { ajax: "../plugins/datatables/json/scroller-demo.json", deferRender: true, scrollY: 380, scrollCollapse: true, scroller: true } );
var table = $('#datatable-fixed-header').DataTable( { fixedHeader: true } );
} );
TableManageButtons.init();
</script>
<script>
$(document).ready(function() {
$('#datatable_facilitateur').dataTable();
$('#datatable-keytable').DataTable( { keys: true } );
$('#datatable-responsive').DataTable();
$('#datatable-scroller').DataTable( { ajax: "../plugins/datatables/json/scroller-demo.json", deferRender: true, scrollY: 380, scrollCollapse: true, scroller: true } );
var table = $('#datatable-fixed-header').DataTable( { fixedHeader: true } );
} );
TableManageButtons.init();
</script>
</body>
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment