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 .= ''; } if (in_array('refusedRemise', $this->permission) && $value['demande_status'] == 'En attente') { $buttons .= ' '; } $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.' ]); } } } }