You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
5.9 KiB
163 lines
5.9 KiB
<?php
|
|
|
|
namespace App\Controllers;
|
|
|
|
use App\Controllers\AdminController;
|
|
use App\Models\Notification;
|
|
use App\Models\Orders;
|
|
use App\Models\Remise;
|
|
|
|
class RemiseController extends AdminController
|
|
{
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
private $pageTitle = 'Remise';
|
|
|
|
public function index()
|
|
{
|
|
$this->verifyRole('viewRemise');
|
|
|
|
$data = json_decode($this->fetchTotal(),true);
|
|
|
|
$this->render_template('demande/index', $data);
|
|
}
|
|
|
|
|
|
public function fetchTotal(){
|
|
$data = [
|
|
'user_permission' => $this->permission,
|
|
'page_title' => $this->pageTitle
|
|
];
|
|
return json_encode($data);
|
|
}
|
|
|
|
|
|
public function fetchRemiseData()
|
|
{
|
|
helper(['url', 'form']);
|
|
$Remise = new Remise();
|
|
|
|
$draw = intval($this->request->getVar('draw'));
|
|
$data = $Remise->getAllDemandeRemiseToday();
|
|
$totalRecords = count($data);
|
|
|
|
$result = [
|
|
"draw" => $draw,
|
|
"recordsTotal" => $totalRecords,
|
|
"recordsFiltered" => $totalRecords,
|
|
"data" => []
|
|
];
|
|
foreach ($data as $key => $value) {
|
|
$buttons = '';
|
|
|
|
if (in_array('validateRemise', $this->permission) && $value['demande_status'] == 'En attente') {
|
|
$buttons .= '<button type="submit" class="btn btn-success" onclick="valideFunc(' . $value['id_demande'] . ')">';
|
|
$buttons .= '<i class="fa fa-check-circle"></i>';
|
|
$buttons .= '</button>';
|
|
}
|
|
|
|
if (in_array('refusedRemise', $this->permission) && $value['demande_status'] == 'En attente') {
|
|
$buttons .= ' <button type="button" class="btn btn-danger" onclick="refuseFunc(' . $value['id_demande'] . ')">';
|
|
$buttons .= '<i class="fa fa-times-circle"></i>';
|
|
$buttons .= '</button>';
|
|
}
|
|
|
|
$result['data'][$key] = [
|
|
$value['id_demande'],
|
|
$value['product'],
|
|
number_format($value['total_price'], 0, '.', ' '),
|
|
number_format($value['montant_demande'], 0, '.', ' '),
|
|
$value['demande_status'],
|
|
$buttons
|
|
];
|
|
}
|
|
|
|
return $this->response->setJSON($result);
|
|
}
|
|
|
|
|
|
public function updateRemise($id_demande)
|
|
{
|
|
$this->verifyRole('validateRemise');
|
|
|
|
$validation = \Config\Services::validation();
|
|
$data['page_title'] = $this->pageTitle;
|
|
|
|
$validation->setRules([
|
|
'demande_status' => 'required'
|
|
]);
|
|
|
|
$validationData = [
|
|
'demande_status' => $this->request->getPost('demande_status')
|
|
];
|
|
|
|
$Remise = new Remise();
|
|
|
|
if ($this->request->getMethod() == 'post') {
|
|
$today = date('Y-m-d');
|
|
$demande_status = $this->request->getPost('demande_status');
|
|
|
|
$data = [
|
|
'demande_status' => $demande_status,
|
|
'date_demande' => $today,
|
|
];
|
|
|
|
if ($Remise->updateRemise($id_demande, $data)) {
|
|
$remise_product = $Remise->getProductByDemandeId($id_demande);
|
|
$Notification = new NotificationController();
|
|
$session = session();
|
|
$users = $session->get('user');
|
|
$ordersModel = new Orders();
|
|
$order_id = $Remise->getOrderIdByDemandeId($id_demande);
|
|
|
|
// Logique de notification selon le statut
|
|
if ($demande_status == 'Refusé') {
|
|
// Mettre à jour le paid_status de la commande à 0 (Refusé)
|
|
if ($order_id) {
|
|
$ordersModel->update($order_id, ['paid_status' => 0]);
|
|
}
|
|
|
|
// Si refusé par le Conseil : notification retourne au Commercial
|
|
$Notification->createNotification(
|
|
"Votre demande de remise a été refusée pour le produit: " . $remise_product . ". Veuillez modifier la commande.",
|
|
"COMMERCIALE",
|
|
(int)$users['store_id'],
|
|
"orders" // Retour à l'ajout de commande chez le commercial
|
|
);
|
|
|
|
$message = 'La demande de remise a été refusée. Une notification a été envoyée au commercial.';
|
|
|
|
} elseif ($demande_status == 'Accepté' || $demande_status == 'Validé') {
|
|
// Si accepté par le Conseil : la commande reste "En Attente" (paid_status = 2)
|
|
// La caissière devra la valider manuellement
|
|
if ($order_id) {
|
|
$ordersModel->update($order_id, ['paid_status' => 2]); // 2 = En Attente
|
|
}
|
|
|
|
// Notification à la Caissière pour qu'elle valide la commande
|
|
$Notification->createNotification(
|
|
"Une commande avec remise acceptée est prête pour validation. Produit: " . $remise_product,
|
|
"Caissière",
|
|
(int)$users['store_id'],
|
|
"orders" // Va chez la caissière pour validation finale
|
|
);
|
|
|
|
$message = 'La demande de remise a été acceptée. La commande a été envoyée à la caissière pour validation.';
|
|
}
|
|
|
|
return $this->response->setJSON([
|
|
'success' => true,
|
|
'messages' => $message
|
|
]);
|
|
} else {
|
|
return $this->response->setJSON([
|
|
'success' => false,
|
|
'messages' => 'Erreur lors de la modification de la remise.'
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
}
|