get('user');
if ($user['group_name'] !== 'SuperAdmin') {
return redirect()->to('/');
}
$storesModel = new Stores();
$data['page_title'] = $this->pageTitle;
$data['stores'] = $storesModel->getActiveStore();
return $this->render_template('action_log/index', $data);
}
public function fetchData()
{
$session = session();
$user = $session->get('user');
if ($user['group_name'] !== 'SuperAdmin') {
return $this->response->setJSON(['data' => []]);
}
$historiqueModel = new Historique();
$filters = [
'action' => $this->request->getGet('action'),
'store_name' => $this->request->getGet('store_name'),
'product_name' => $this->request->getGet('product'),
'sku' => $this->request->getGet('sku'),
'date_from' => $this->request->getGet('date_from'),
'date_to' => $this->request->getGet('date_to'),
];
$allData = $historiqueModel->getHistoriqueWithFilters($filters);
$result = ['data' => []];
foreach ($allData as $row) {
$result['data'][] = [
date('d/m/Y H:i', strtotime($row['created_at'])),
$row['user_name'] ?? 'Système',
$this->getActionBadge($row['action']),
$this->getTableLabel($row['table_name']),
$row['description'] ?? '',
];
}
return $this->response->setJSON($result);
}
private function getActionBadge($action)
{
$badges = [
'CREATE' => 'Création',
'UPDATE' => 'Modification',
'DELETE' => 'Suppression',
'PAYMENT' => 'Paiement',
'VALIDATE' => 'Validation',
'REFUSE' => 'Refus',
'DELIVERY' => 'Livraison',
'ASSIGN_STORE' => 'Assignation',
'ENTRER' => 'Entrée',
'SORTIE' => 'Sortie',
'IMPORT' => 'Import',
'LOGIN' => 'Connexion',
];
return $badges[$action] ?? '' . $action . '';
}
private function getTableLabel($tableName)
{
$labels = [
'orders' => 'Commande',
'products' => 'Produit',
'users' => 'Utilisateur',
'groups' => 'Rôle',
'avances' => 'Avance',
'securite' => 'Sécurité',
'remise' => 'Remise',
'sortie_caisse' => 'Décaissement',
'autres_encaissements' => 'Encaissement',
'recouvrement' => 'Recouvrement',
'stores' => 'Point de vente',
'brands' => 'Marque',
'categories' => 'Catégorie',
];
return $labels[$tableName] ?? $tableName;
}
public function export()
{
$session = session();
$user = $session->get('user');
if ($user['group_name'] !== 'SuperAdmin') {
return redirect()->to('/');
}
$historiqueModel = new Historique();
$filters = [
'action' => $this->request->getGet('action'),
'store_name' => $this->request->getGet('store_name'),
'date_from' => $this->request->getGet('date_from'),
'date_to' => $this->request->getGet('date_to'),
];
$data = $historiqueModel->getHistoriqueWithFilters($filters);
$csv = "\xEF\xBB\xBF"; // BOM UTF-8 pour Excel
$csv .= "Date;Heure;Utilisateur;Action;Module;Description\n";
foreach ($data as $row) {
$date = date('d-m-Y', strtotime($row['created_at']));
$heure = date('H:i', strtotime($row['created_at']));
$userName = $row['user_name'] ?? 'Système';
$action = $row['action'];
$module = $this->getTableLabel($row['table_name']);
$description = str_replace('"', '""', $row['description'] ?? '');
$csv .= "{$date};{$heure};{$userName};{$action};{$module};\"{$description}\"\n";
}
$filename = 'historique_actions_' . date('Y-m-d_H-i') . '.csv';
return $this->response
->setHeader('Content-Type', 'text/csv; charset=utf-8')
->setHeader('Content-Disposition', 'attachment; filename="' . $filename . '"')
->setBody($csv);
}
}