motorbike/app/Controllers/SecuriteController.php
andrymodeste 38d37a0987 feat: modifications et corrections du 03-04-2026
- Bouton impression conditionnel : 2 boutons (Facture + BL) si 1 produit, 1 bouton (BL) si plusieurs produits
- Ajout filtres (date, point de vente, utilisateur) sur la page Rapports principale
- Ajout filtres (date, point de vente) sur la page Rapports/Stock pour les 3 tableaux
- Remplacement affichage "UGS" par "N° SERIE" dans toutes les pages
- Mise en page facture avec remise : titre FACTURE repositionné, tableau plus compact
- Correction remise commandes multi-produits : total_price recevait un tableau au lieu d'un nombre
- SuperAdmin voit toutes les remises (tous statuts) au lieu de seulement "En attente"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:49:40 +02:00

188 lines
6.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Controllers;
use App\Models\Securite;
use App\Models\Products;
use App\Models\Orders;
use App\Models\Stores;
use App\Models\Historique;
class SecuriteController extends AdminController
{
public function __construct()
{
parent::__construct();
helper(['form', 'url']);
}
private $pageTitle = 'Validation sortie motos';
public function index() // ou validateSecurite() ou autre nom
{
$this->verifyRole('viewSecurite'); // ou autre permission
$session = session();
$user = $session->get('user');
$data['page_title'] = 'Validation Sécurité';
$data['user_role'] = $user['group_name']; // ✅ AJOUTER CETTE LIGNE
$data['user_permission'] = $this->permission;
// ✅ RÉCUPÉRER LES MAGASINS
$storeModel = new \App\Models\Stores();
$data['stores'] = $storeModel->getActiveStore();
return $this->render_template('securite/index', $data);
}
public function fetchSecuriteData()
{
$securiteModel = new Securite();
$Products = new Products();
$securites = $securiteModel->getAllSecuriteData();
$result = ['data' => []];
foreach ($securites as $securite) {
if ($securite['status'] === 'PENDING') {
$product = $Products->getProductData($securite['product_id']);
if (! $product) continue;
// Bouton daction
$buttons = in_array('validateCommande1', $this->permission)
? '<button type="button" class="btn btn-success" onclick="editFunc(' . $securite['id'] . ')"><i class="fa fa-check"></i></button>'
: '';
// Statut
$statut = '<span class="label label-warning">EN ATTENTE DE VALIDATION</span>';
// Image
$img = '<img src="' . base_url('assets/images/product_image/' . $product['image']) . '" '
. 'alt="' . esc($product['name']) . '" class="img-circle" width="50" height="50" />';
$result['data'][] = [
'image' => $img,
'num_serie' => esc($product['sku']),
'designation' => esc($product['name']),
'statut' => $statut,
'action' => $buttons
];
}
}
return $this->response->setJSON($result);
}
public function fetchSecuriteDataById($id)
{
if ($id) {
$Securite = new Securite();
$Orders = new Orders();
$Products = new Products();
$data = $Securite->getSecuriteData($id);
$order_data = $Orders->getOrdersDataByBillNo($data['bill_no']);
$product = $Products->getProductData($data['product_id']);
$response = [
'image' => base_url('assets/images/product_image/' . $product['image']),
'nom' => $product['name'],
'num_serie' => $product['sku'],
'bill_no' => $data['bill_no'],
'customer_name' => $order_data['customer_name'],
'customer_address' => $order_data['customer_address'],
'customer_phone' => $order_data['customer_phone'],
'customer_cin' => $order_data['customer_cin'],
];
return $this->response->setJSON($response);
}
}
public function update(int $id)
{
$this->verifyRole('updateCommande1');
$securiteModel = new Securite();
$post = $this->request->getPost();
$response = [];
if ($id && isset($post['status'])) {
$data = [
'status' => $post['status'],
'active' => 0
];
$session = session();
$users = $session->get('user');
$Notification = new NotificationController();
if ($securiteModel->updateSecurite($data, $id)) {
if ($post['status'] === "Validé") {
// ✅ Récupérer les infos de la ligne securite
$securiteData = $securiteModel->getSecuriteData($id);
if ($securiteData) {
// ✅ Marquer le produit comme vendu (product_sold = 1)
$productModel = new Products();
$productModel->update($securiteData['product_id'], ['product_sold' => 1]);
// ✅ Mettre à jour la commande liée (paid_status = 3 = livré)
if (!empty($securiteData['bill_no'])) {
$orderModel = new Orders();
$order = $orderModel->getOrdersDataByBillNo($securiteData['bill_no']);
if ($order) {
$orderModel->update($order['id'], [
'paid_status' => 3,
'delivered_by' => $users['id'],
'delivered_at' => date('Y-m-d H:i:s')
]);
}
}
}
$Notification->notifyGroupsByPermission('notifRemise', 'Une commande a été validée et livrée', (int)$users['store_id'], 'orders');
}
// Log de l'action livraison
$historique = new Historique();
$billNo = $securiteData['bill_no'] ?? 'N/A';
$historique->logAction('securite', 'DELIVERY', $id, "Confirmation de livraison - Facture: {$billNo}");
$response = ['success' => true, 'messages' => 'Livraison confirmée avec succès'];
} else {
$response = ['success' => false, 'messages' => 'Erreur en base lors de la mise à jour'];
}
} else {
$response = ['success' => false, 'messages' => 'ID ou statut manquant'];
}
return $this->response->setJSON($response);
}
public function remove()
{
$this->verifyRole('deleteCommande1');
$response = [];
$storeId = $this->request->getPost('store_id');
if ($storeId) {
$storeModel = new Stores();
if ($storeModel->delete($storeId)) {
$response['success'] = true;
$response['messages'] = "Supprimé avec succès";
} else {
$response['success'] = false;
$response['messages'] = "Erreur dans la base de données lors de la suppression des informations sur la marque";
}
} else {
$response['success'] = false;
$response['messages'] = "Référez à nouveau la page !!";
}
return $this->response->setJSON($response);
}
}