<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class MunganyoController extends AbstractController
{
// Données centralisées des actes
private $actsData = [
[
'id' => 1,
'type' => 'decret',
'typeLabel' => 'Décret',
'typeIcon' => 'fa-gavel',
'numero' => '2026-045/PR',
'titre' => 'Portant nomination des membres du gouvernement',
'description' => 'Modifie le décret n°2025-089/PR',
'institution' => 'Présidence',
'institutionDetail' => 'Cabinet du Président',
'date' => '2026-03-01',
'dateFormatted' => '01 mars 2026',
'status' => 'vigueur',
'statusLabel' => 'En vigueur',
'statusIcon' => 'fa-check-circle',
'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'
],
[
'id' => 2,
'type' => 'arrete',
'typeLabel' => 'Arrêté',
'typeIcon' => 'fa-file-alt',
'numero' => '2026-089/MF',
'titre' => 'Fixant les modalités de paiement des impôts 2026',
'description' => 'Modalités de paiement pour l\'exercice fiscal 2026',
'institution' => 'Min. Finances',
'institutionDetail' => 'Direction Générale des Impôts',
'date' => '2026-02-25',
'dateFormatted' => '25 février 2026',
'status' => 'vigueur',
'statusLabel' => 'En vigueur',
'statusIcon' => 'fa-check-circle',
'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'
],
[
'id' => 3,
'type' => 'decret',
'typeLabel' => 'Décret',
'typeIcon' => 'fa-gavel',
'numero' => '2026-044/PR',
'titre' => 'Portant création de l\'Agence Nationale du Numérique',
'description' => 'Création d\'un établissement public à caractère administratif',
'institution' => 'Présidence',
'institutionDetail' => 'Cabinet du Président',
'date' => '2026-02-20',
'dateFormatted' => '20 février 2026',
'status' => 'vigueur',
'statusLabel' => 'En vigueur',
'statusIcon' => 'fa-check-circle',
'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'
],
[
'id' => 4,
'type' => 'arrete',
'typeLabel' => 'Arrêté',
'typeIcon' => 'fa-chart-line',
'numero' => '2026-156/MJ',
'titre' => 'Portant organisation des greffes judiciaires',
'description' => 'Réorganisation administrative des greffes',
'institution' => 'Min. Justice',
'institutionDetail' => 'Direction des Services Judiciaires',
'date' => '2026-02-15',
'dateFormatted' => '15 février 2026',
'status' => 'vigueur',
'statusLabel' => 'En vigueur',
'statusIcon' => 'fa-check-circle',
'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'
],
[
'id' => 5,
'type' => 'circulaire',
'typeLabel' => 'Circulaire',
'typeIcon' => 'fa-envelope',
'numero' => '2026-001/SGG',
'titre' => 'Relative à la dématérialisation administrative',
'description' => 'Instructions pour la transition numérique',
'institution' => 'Secrétariat Général',
'institutionDetail' => 'Secrétariat Général du Gouvernement',
'date' => '2026-02-10',
'dateFormatted' => '10 février 2026',
'status' => 'vigueur',
'statusLabel' => 'En vigueur',
'statusIcon' => 'fa-check-circle',
'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'
]
];
#[Route('/munganyo', name: 'app_munganyo')]
public function index(): Response
{
return $this->render('munganyo/index.html.twig', [
'acts' => $this->actsData
]);
}
#[Route('/munganyo/search', name: 'app_munganyo_search', methods: ['GET'])]
public function search(Request $request): JsonResponse
{
$query = $request->query->get('q', '');
$type = $request->query->get('type', '');
$institution = $request->query->get('institution', '');
$year = $request->query->get('year', '');
$status = $request->query->get('status', '');
$results = $this->actsData;
// Filtre par recherche textuelle
if (!empty($query)) {
$results = array_filter($results, function($act) use ($query) {
return stripos($act['numero'], $query) !== false ||
stripos($act['titre'], $query) !== false ||
stripos($act['description'], $query) !== false;
});
}
// Filtre par type
if (!empty($type)) {
$results = array_filter($results, function($act) use ($type) {
return $act['type'] === $type;
});
}
// Filtre par institution
if (!empty($institution)) {
$results = array_filter($results, function($act) use ($institution) {
return stripos($act['institution'], $institution) !== false;
});
}
// Filtre par année
if (!empty($year)) {
$results = array_filter($results, function($act) use ($year) {
return substr($act['date'], 0, 4) === $year;
});
}
// Filtre par statut
if (!empty($status)) {
$results = array_filter($results, function($act) use ($status) {
return $act['status'] === $status;
});
}
return $this->json(array_values($results));
}
#[Route('/munganyo/act/{id}', name: 'app_munganyo_act_details', methods: ['GET'])]
public function getActDetails($id): JsonResponse
{
foreach ($this->actsData as $act) {
if ($act['id'] == $id) {
return $this->json($act);
}
}
return $this->json(['error' => 'Acte non trouvé'], 404);
}
}