src/Controller/MunganyoController.php line 103

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. class MunganyoController extends AbstractController
  9. {
  10. // Données centralisées des actes
  11. private $actsData = [
  12. [
  13. 'id' => 1,
  14. 'type' => 'decret',
  15. 'typeLabel' => 'Décret',
  16. 'typeIcon' => 'fa-gavel',
  17. 'numero' => '2026-045/PR',
  18. 'titre' => 'Portant nomination des membres du gouvernement',
  19. 'description' => 'Modifie le décret n°2025-089/PR',
  20. 'institution' => 'Présidence',
  21. 'institutionDetail' => 'Cabinet du Président',
  22. 'date' => '2026-03-01',
  23. 'dateFormatted' => '01 mars 2026',
  24. 'status' => 'vigueur',
  25. 'statusLabel' => 'En vigueur',
  26. 'statusIcon' => 'fa-check-circle',
  27. 'content' => 'Le Président de l\'Union des Comores,\nVu la Constitution,\nVu la loi organique relative au gouvernement,\nDécrète :\n\nArticle 1er : Sont nommés membres du gouvernement :\n- Monsieur Ahmed Abdallah, Premier Ministre\n- Madame Fatima Saïd, Ministre des Finances\n- Monsieur Ali Mohamed, Ministre de la Justice\n- Madame Nadia Combo, Ministre de l\'Éducation\n\nArticle 2 : Les membres du gouvernement entrent en fonction immédiatement.\n\nArticle 3 : Le Premier Ministre est chargé de l\'exécution du présent décret.\n\nFait à Moroni, le 28 février 2026\nLe Président de l\'Union'
  28. ],
  29. [
  30. 'id' => 2,
  31. 'type' => 'arrete',
  32. 'typeLabel' => 'Arrêté',
  33. 'typeIcon' => 'fa-file-alt',
  34. 'numero' => '2026-089/MF',
  35. 'titre' => 'Fixant les modalités de paiement des impôts 2026',
  36. 'description' => 'Modalités de paiement pour l\'exercice fiscal 2026',
  37. 'institution' => 'Min. Finances',
  38. 'institutionDetail' => 'Direction Générale des Impôts',
  39. 'date' => '2026-02-25',
  40. 'dateFormatted' => '25 février 2026',
  41. 'status' => 'vigueur',
  42. 'statusLabel' => 'En vigueur',
  43. 'statusIcon' => 'fa-check-circle',
  44. 'content' => 'Le Ministre des Finances,\nVu le code général des impôts,\nVu la loi de finances 2026,\n\nArrête :\n\nArticle 1er : Les modalités de paiement des impôts pour l\'année 2026 sont fixées comme suit :\n- Impôt sur les sociétés : 25%\n- TVA : 18%\n- IRPP : Barème progressif de 0% à 30%\n\nArticle 2 : Les paiements peuvent être effectués :\n1. En ligne sur la plateforme e-impots.km\n2. Dans les centres des impôts\n3. Dans les institutions bancaires agréées\n\nArticle 3 : Le présent arrêté entre en vigueur le 1er mars 2026.\n\nFait à Moroni, le 25 février 2026\nLe Ministre des Finances'
  45. ],
  46. [
  47. 'id' => 3,
  48. 'type' => 'decret',
  49. 'typeLabel' => 'Décret',
  50. 'typeIcon' => 'fa-gavel',
  51. 'numero' => '2026-044/PR',
  52. 'titre' => 'Portant création de l\'Agence Nationale du Numérique',
  53. 'description' => 'Création d\'un établissement public à caractère administratif',
  54. 'institution' => 'Présidence',
  55. 'institutionDetail' => 'Cabinet du Président',
  56. 'date' => '2026-02-20',
  57. 'dateFormatted' => '20 février 2026',
  58. 'status' => 'vigueur',
  59. 'statusLabel' => 'En vigueur',
  60. 'statusIcon' => 'fa-check-circle',
  61. 'content' => 'Le Président de l\'Union des Comores,\nVu la Constitution,\nVu la loi n°2025-12 relative à la transformation numérique,\n\nDécrète :\n\nArticle 1er : Il est créé l\'Agence Nationale du Numérique (ANN), établissement public à caractère administratif doté de la personnalité morale et de l\'autonomie financière.\n\nArticle 2 : L\'agence a pour missions :\n- Coordonner la transformation numérique du pays\n- Développer l\'infrastructure numérique nationale\n- Former les citoyens aux compétences numériques\n\nArticle 3 : L\'agence est dirigée par un Directeur Général nommé par décret.\n\nArticle 4 : Le Premier Ministre est chargé de l\'exécution du présent décret.\n\nFait à Moroni, le 20 février 2026\nLe Président de l\'Union'
  62. ],
  63. [
  64. 'id' => 4,
  65. 'type' => 'arrete',
  66. 'typeLabel' => 'Arrêté',
  67. 'typeIcon' => 'fa-chart-line',
  68. 'numero' => '2026-156/MJ',
  69. 'titre' => 'Portant organisation des greffes judiciaires',
  70. 'description' => 'Réorganisation administrative des greffes',
  71. 'institution' => 'Min. Justice',
  72. 'institutionDetail' => 'Direction des Services Judiciaires',
  73. 'date' => '2026-02-15',
  74. 'dateFormatted' => '15 février 2026',
  75. 'status' => 'vigueur',
  76. 'statusLabel' => 'En vigueur',
  77. 'statusIcon' => 'fa-check-circle',
  78. 'content' => 'Le Ministre de la Justice,\nVu le code de l\'organisation judiciaire,\nVu la loi portant statut de la magistrature,\n\nArrête :\n\nArticle 1er : Les greffes judiciaires sont organisés conformément aux dispositions du présent arrêté.\n\nArticle 2 : Chaque juridiction comprend un greffe dirigé par un greffier en chef.\n\nArticle 3 : Les greffiers sont chargés :\n- De la tenue des registres\n- De la délivrance des expéditions\n- De la conservation des minutes\n\nArticle 4 : Le présent arrêté entre en vigueur le premier jour du mois suivant sa publication.\n\nFait à Moroni, le 15 février 2026\nLe Ministre de la Justice'
  79. ],
  80. [
  81. 'id' => 5,
  82. 'type' => 'circulaire',
  83. 'typeLabel' => 'Circulaire',
  84. 'typeIcon' => 'fa-envelope',
  85. 'numero' => '2026-001/SGG',
  86. 'titre' => 'Relative à la dématérialisation administrative',
  87. 'description' => 'Instructions pour la transition numérique',
  88. 'institution' => 'Secrétariat Général',
  89. 'institutionDetail' => 'Secrétariat Général du Gouvernement',
  90. 'date' => '2026-02-10',
  91. 'dateFormatted' => '10 février 2026',
  92. 'status' => 'vigueur',
  93. 'statusLabel' => 'En vigueur',
  94. 'statusIcon' => 'fa-check-circle',
  95. 'content' => 'Le Secrétaire Général du Gouvernement,\nA l\'attention des ministères et institutions publiques,\n\nLa présente circulaire a pour objet d\'orienter les administrations vers la dématérialisation de leurs processus.\n\nArticle 1 : Tous les documents administratifs doivent être disponibles en version numérique sur les plateformes officielles.\n\nArticle 2 : Les signatures électroniques sont reconnues au même titre que les signatures manuscrites.\n\nArticle 3 : Un délai de six mois est accordé pour la mise en conformité.\n\nArticle 4 : Chaque ministère désignera un référent numérique.\n\nFait à Moroni, le 10 février 2026\nLe Secrétaire Général du Gouvernement'
  96. ]
  97. ];
  98. #[Route('/munganyo', name: 'app_munganyo')]
  99. public function index(): Response
  100. {
  101. return $this->render('munganyo/index.html.twig', [
  102. 'acts' => $this->actsData
  103. ]);
  104. }
  105. #[Route('/munganyo/search', name: 'app_munganyo_search', methods: ['GET'])]
  106. public function search(Request $request): JsonResponse
  107. {
  108. $query = $request->query->get('q', '');
  109. $type = $request->query->get('type', '');
  110. $institution = $request->query->get('institution', '');
  111. $year = $request->query->get('year', '');
  112. $status = $request->query->get('status', '');
  113. $results = $this->actsData;
  114. // Filtre par recherche textuelle
  115. if (!empty($query)) {
  116. $results = array_filter($results, function($act) use ($query) {
  117. return stripos($act['numero'], $query) !== false ||
  118. stripos($act['titre'], $query) !== false ||
  119. stripos($act['description'], $query) !== false;
  120. });
  121. }
  122. // Filtre par type
  123. if (!empty($type)) {
  124. $results = array_filter($results, function($act) use ($type) {
  125. return $act['type'] === $type;
  126. });
  127. }
  128. // Filtre par institution
  129. if (!empty($institution)) {
  130. $results = array_filter($results, function($act) use ($institution) {
  131. return stripos($act['institution'], $institution) !== false;
  132. });
  133. }
  134. // Filtre par année
  135. if (!empty($year)) {
  136. $results = array_filter($results, function($act) use ($year) {
  137. return substr($act['date'], 0, 4) === $year;
  138. });
  139. }
  140. // Filtre par statut
  141. if (!empty($status)) {
  142. $results = array_filter($results, function($act) use ($status) {
  143. return $act['status'] === $status;
  144. });
  145. }
  146. return $this->json(array_values($results));
  147. }
  148. #[Route('/munganyo/act/{id}', name: 'app_munganyo_act_details', methods: ['GET'])]
  149. public function getActDetails($id): JsonResponse
  150. {
  151. foreach ($this->actsData as $act) {
  152. if ($act['id'] == $id) {
  153. return $this->json($act);
  154. }
  155. }
  156. return $this->json(['error' => 'Acte non trouvé'], 404);
  157. }
  158. }