## Gestion Moto & Commandes - Correction des notifications pour la Caissière - Le bouton "Enregistrer" changé en "Payer" - La moto commandée reste visible dans la liste jusqu'à livraison par la sécurité ## Espace Sécurité - Ajout des notifications de livraison - Transfert vers l'espace commande après livraison ## Espace SuperAdmin - Rejet de commande : le produit redevient disponible en stock automatiquement - Correction de la gestion des rôles (permissions inversées) - Avance complète : s'affiche directement chez la Caissière ## Historique des Actions - Ajout de l'historique des actions pour SuperAdmin (traçabilité) ## Dashboard - Filtre par date ajouté (par défaut : aujourd'hui) - Affichage uniquement des données du site concerné ## Espace Commercial - Liste des produits disponibles sur la liste déroulante dans l'ajout des commandes - Le bouton "+" se cache après le premier clic pour les clients particuliers ## Impression Documents - Refonte facture, bon de livraison, facture d'acompte (QR codes, infos dynamiques) ## Sidebar - Correction des animations et du logo dynamique Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
155 lines
5.4 KiB
PHP
155 lines
5.4 KiB
PHP
<?php
|
|
|
|
namespace App\Controllers;
|
|
|
|
use App\Models\Historique;
|
|
use App\Models\Stores;
|
|
|
|
class ActionLogController extends AdminController
|
|
{
|
|
private $pageTitle = 'Historique des Actions';
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
helper(['form', 'url']);
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$session = session();
|
|
$user = $session->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'] ?? '<em>Système</em>',
|
|
$this->getActionBadge($row['action']),
|
|
$this->getTableLabel($row['table_name']),
|
|
$row['description'] ?? '',
|
|
];
|
|
}
|
|
|
|
return $this->response->setJSON($result);
|
|
}
|
|
|
|
private function getActionBadge($action)
|
|
{
|
|
$badges = [
|
|
'CREATE' => '<span class="label label-success">Création</span>',
|
|
'UPDATE' => '<span class="label label-warning">Modification</span>',
|
|
'DELETE' => '<span class="label label-danger">Suppression</span>',
|
|
'PAYMENT' => '<span class="label label-primary">Paiement</span>',
|
|
'VALIDATE' => '<span class="label label-info">Validation</span>',
|
|
'REFUSE' => '<span class="label label-danger">Refus</span>',
|
|
'DELIVERY' => '<span class="label label-success">Livraison</span>',
|
|
'ASSIGN_STORE' => '<span class="label label-info">Assignation</span>',
|
|
'ENTRER' => '<span class="label label-primary">Entrée</span>',
|
|
'SORTIE' => '<span class="label label-default">Sortie</span>',
|
|
'IMPORT' => '<span class="label label-success">Import</span>',
|
|
'LOGIN' => '<span class="label label-default">Connexion</span>',
|
|
];
|
|
|
|
return $badges[$action] ?? '<span class="label label-secondary">' . $action . '</span>';
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|