verifyRole('viewAvance'); $data['page_title'] = $this->pageTitle; return $this->render_template('avances/avance', $data); } public function fetchAvanceData() { helper(['url', 'form']); $Avance = new Avance(); $result = ['data' => []]; $data = $Avance->getAvanceData(); $session = session(); $users = $session->get('user'); $isAdmin = in_array($users['group_name'], ['Conseil', 'Direction']); $isCommerciale = in_array($users['group_name'], ['COMMERCIALE']); $isCaissier = in_array($users['group_name'], ['Caissier']); foreach ($data as $key => $value) { $isOwner = $users['id'] === $value['user_id']; $date_time = date('d-m-Y h:i a', strtotime($value['avance_date'])); // Boutons d’action $buttons = ''; if (in_array('updateAvance', $this->permission) && ($isAdmin || $isOwner)) { $buttons .= ''; } if (in_array('deleteAvance', $this->permission) && ($isAdmin || $isOwner)) { $buttons .= ' '; } if (in_array('viewAvance', $this->permission) && !$isAdmin) { $buttons .= ' '; } if ($isAdmin) { $row = [ $value['customer_name'], $value['customer_phone'], $value['customer_address'], number_format((int)$value['gross_amount'], 0, ',', ' '), number_format((int)$value['avance_amount'], 0, ',', ' '), $date_time, $buttons, ]; $result['data'][] = $row; } if ($isCommerciale || $isCaissier) { $row = [ $value['avance_id'], number_format((int)$value['avance_amount'], 0, ',', ' '), number_format((int)$value['amount_due'], 0, ',', ' '), $date_time, $buttons, ]; $result['data'][] = $row; } } return $this->response->setJSON($result); } public function createAvance() { $this->verifyRole('createAvance'); $data['page_title'] = $this->pageTitle; $validation = \Config\Services::validation(); $products = $this->request->getPost('product'); // Unicité des produits if ($products !== null && count($products) !== count(array_unique($products))) { return redirect()->back()->withInput()->with('errors', ['product' => 'Chaque produit sélectionné doit être unique.']); } // Règles de validation $validation->setRules([ 'product' => 'required' ]); $validationData = ['product' => $products]; $Avance = new Avance(); $Products = new Products(); $Notification = New NotificationController(); if ($this->request->getMethod() === 'post' && $validation->run($validationData)) { $session = session(); $users = $session->get('user'); $data = [ 'customer_name' => $this->request->getPost('customer_name_avance'), 'customer_address' => $this->request->getPost('customer_address_avance'), 'customer_phone' => $this->request->getPost('customer_phone_avance'), 'customer_cin' => $this->request->getPost('customer_cin_avance'), 'avance_date' => date('Y-m-d H:i:s'), 'user_id' => $users['id'], 'store_id' => $users['store_id'], 'product_id' => $this->request->getPost('product_id'), 'gross_amount' => (float)$this->request->getPost('gross_amount_avance'), 'avance_amount' => (float)$this->request->getPost('avance_amount'), 'amount_due' => (float)$this->request->getPost('amount_due'), ]; $posts = $products; if($avance_id = $Avance->createAvance($data)){ $Notification->createNotification('Une avance a été créé', "Conseil",$users['store_id'], 'avance'); return $this->response->setJSON([ 'success' => true, 'messages' => 'Avance créé avec succès !' ]); } else{ return $this->response->setJSON([ 'success' => false, 'messages' => 'Une erreur est survenue lors de la création d\une avance !' ]); } } } public function updateAvance(int $id) { $this->verifyRole('updateAvance'); $data['page_title'] = $this->pageTitle; $Products = new Products(); $Avance = new Avance(); if ($this->request->getMethod() === 'post') { $data = [ 'customer_name' => $this->request->getPost('customer_name_avance'), 'customer_address'=> $this->request->getPost('customer_address_avance'), 'customer_phone' => $this->request->getPost('customer_phone_avance'), 'customer_cin' => $this->request->getPost('customer_cin_avance'), 'avance_amount' => (float)$this->request->getPost('avance_amount'), 'amount_due' => (float)$this->request->getPost('amount_due'), ]; if ($Avance->updates($id, $data)) { session()->setFlashData('success', 'Avance mise à jour avec succès.'); } else { session()->setFlashData('errors', 'Une erreur est survenue lors de la mise à jour.'); } } } public function remove() { $this->verifyRole('deleteAvance'); $avance_id = $this->request->getPost('avance_id'); $response = []; $Avance = new Avance(); if ($Avance->remove($avance_id)) { $response['success'] = true; $response['messages'] = "Avance Supprimé avec succès"; } else { $response['success'] = false; $response['messages'] = "une erreur est survenue lors de la suppression d'une avance"; } return $this->response->setJSON($response); } public function fetchSingleAvance($avance_id) { $this->verifyRole('updateAvance'); try { $avanceModel = new Avance(); $data = $avanceModel->fetchSingleAvance($avance_id); return $this->response->setJSON($data); } catch (\Throwable $th) { log_message('error', "Erreur lors de la récupération d'une avance: " . $th->getMessage()); return $this->response ->setStatusCode(500) ->setJSON(['error' => 'Une erreur interne est survenue. Lors de la création d\'une avance']); } } }