insert($data); } catch (\Exception $e) { log_message('error', 'Erreur lors de l\'ajout de l\'avance : ' . $e->getMessage()); return false; } } public function updateAvance(int $id, array $data) { if ($id <= 0) { log_message('error', 'ID invalide pour la mise à jour du recouvrement : ' . $id); return false; } try { // Recalcul de la deadline si le type change if (!empty($data['type']) && !empty($data['avance_date'])) { if (strtolower($data['type']) === 'avance sur terre') { $data['deadline'] = date('Y-m-d', strtotime($data['avance_date'] . ' +15 days')); } elseif (strtolower($data['type']) === 'avance sur mer') { $data['deadline'] = date('Y-m-d', strtotime($data['avance_date'] . ' +2 months')); } } return $this->update($id, $data); } catch (\Exception $e) { log_message('error', 'Erreur lors de la mise à jour de l\'avance : ' . $e->getMessage()); return false; } } // 📌 Le reste de tes fonctions restent inchangées public function getAllAvanceData(int $id=null) { $session = session(); $users = $session->get('user'); $isAdmin = in_array($users['group_name'], ['Conseil', 'Direction']); if($isAdmin) { if($id){ try { return $this->where('user_id',$id) ->where('is_order',0) ->where('active',1) ->orderBy('avance_date', 'DESC') ->findAll(); } catch (\Exception $e) { log_message('error', 'Erreur lors de la récupération des recouvrements : ' . $e->getMessage()); return false; } } try { return $this ->where('is_order',0) ->where('active',1) ->orderBy('avance_date', 'DESC') ->findAll(); } catch (\Exception $e) { log_message('error', 'Erreur lors de la récupération des recouvrements : ' . $e->getMessage()); return false; } } else { if($id){ try { return $this->where('user_id',$id) ->where('is_order',0) ->where('active',1) ->where('store_id',$users['store_id']) ->orderBy('avance_date', 'DESC') ->findAll(); } catch (\Exception $e) { log_message('error', 'Erreur lors de la récupération des recouvrements : ' . $e->getMessage()); return false; } } try { return $this ->where('is_order',0) ->where('active',1) ->where('store_id',$users['store_id']) ->orderBy('avance_date', 'DESC') ->findAll(); } catch (\Exception $e) { log_message('error', 'Erreur lors de la récupération des recouvrements : ' . $e->getMessage()); return false; } } } public function fetchSingleAvance(int $avance_id){ return $this->where('avance_id',$avance_id)->first(); } public function removeAvance(int $avance_id){ return $this->delete($avance_id); } public function getTotalAvance() { $session = session(); $users = $session->get('user'); $isAdmin = in_array($users['group_name'], ['Conseil', 'Direction']); if($isAdmin) { try { return $this->select('SUM(avance_amount) AS ta') ->where('is_order', 0) ->get() ->getRowObject(); } catch (\Exception $e) { log_message('error', 'Erreur lors du total du montant des avances : ' . $e->getMessage()); return false; } } else { try { return $this->select('SUM(avance_amount) AS ta') ->where('is_order', 0) ->where('store_id',$users['store_id']) ->get() ->getRowObject(); } catch (\Exception $e) { log_message('error', 'Erreur lors du total du montant des avances : ' . $e->getMessage()); return false; } } } public function getPaymentModesAvance() { $session = session(); $users = $session->get('user'); $isAdmin = in_array($users['group_name'], ['Conseil', 'Direction']); if ($isAdmin) { return $this->db->table('avances') ->select(' SUM(avance_amount) AS total, SUM(CASE WHEN LOWER(type_payment) = "mvola" THEN avance_amount ELSE 0 END) AS total_mvola, SUM(CASE WHEN LOWER(type_payment) = "en espèce" THEN avance_amount ELSE 0 END) AS total_espece, SUM(CASE WHEN LOWER(type_payment) = "virement bancaire" THEN avance_amount ELSE 0 END) AS total_virement_bancaire ') ->where('active', 1) ->get() ->getRowObject(); } else { return (object) [ 'total' => 0, 'total_mvola' => 0, 'total_espece' => 0, 'total_virement_bancaire' => 0 ]; } } public function getAllAvanceData1(int $id=null) { $session = session(); $users = $session->get('user'); $isAdmin = in_array($users['group_name'], ['Conseil', 'Direction']); if($isAdmin) { if($id){ try { return $this->where('user_id',$id) ->where('is_order',1) ->where('active',1) ->orderBy('avance_date', 'DESC') ->findAll(); } catch (\Exception $e) { log_message('error', 'Erreur lors de la récupération des recouvrements : ' . $e->getMessage()); return false; } } try { return $this ->where('is_order',1) ->where('active',1) ->orderBy('avance_date', 'DESC') ->findAll(); } catch (\Exception $e) { log_message('error', 'Erreur lors de la récupération des recouvrements : ' . $e->getMessage()); return false; } } else { if($id){ try { return $this->where('user_id',$id) ->where('is_order',1) ->where('active',1) ->where('store_id',$users['store_id']) ->orderBy('avance_date', 'DESC') ->findAll(); } catch (\Exception $e) { log_message('error', 'Erreur lors de la récupération des recouvrements : ' . $e->getMessage()); return false; } } try { return $this ->where('is_order',0) ->orderBy('avance_date', 'DESC') ->findAll(); } catch (\Exception $e) { log_message('error', 'Erreur lors de la récupération des recouvrements : ' . $e->getMessage()); return false; } } } public function getAllAvanceData2(int $id=null) { $session = session(); $users = $session->get('user'); $isAdmin = in_array($users['group_name'], ['Conseil', 'Direction']); if($isAdmin) { if($id){ try { return $this->where('user_id',$id) ->where('is_order',0) ->where('active',0) ->orderBy('avance_date', 'DESC') ->findAll(); } catch (\Exception $e) { log_message('error', 'Erreur lors de la récupération des recouvrements : ' . $e->getMessage()); return false; } } try { return $this ->where('is_order',0) ->where('active',0) ->orderBy('avance_date', 'DESC') ->findAll(); } catch (\Exception $e) { log_message('error', 'Erreur lors de la récupération des recouvrements : ' . $e->getMessage()); return false; } } else { if($id){ try { return $this->where('user_id',$id) ->where('is_order',0) ->where('active',0) ->where('store_id',$users['store_id']) ->orderBy('avance_date', 'DESC') ->findAll(); } catch (\Exception $e) { log_message('error', 'Erreur lors de la récupération des recouvrements : ' . $e->getMessage()); return false; } } try { return $this ->where('is_order',0) ->where('active',0) ->where('store_id',$users['store_id']) ->orderBy('avance_date', 'DESC') ->findAll(); } catch (\Exception $e) { log_message('error', 'Erreur lors de la récupération des recouvrements : ' . $e->getMessage()); return false; } } } public function checkExpiredAvance() { $now = date('Y-m-d'); $avances = $this->where('active', '1') ->where('deadline <', $now) ->findAll(); if (!empty($avances)) { $productModel = new Products(); foreach ($avances as $avance) { $this->update($avance['avance_id'], ['active' => '0']); $productModel->update($avance['product_id'], ['product_sold' => 0]); } } } /** * Récupérer les avances qui arrivent à échéance dans X jours */ public function getAvancesNearDeadline($days = 3) { $alertDate = date('Y-m-d', strtotime("+{$days} days")); return $this->select('avances.*, users.store_id') ->join('users', 'users.id = avances.user_id') ->where('avances.is_order', 0) ->where('avances.active', 1) ->where('avances.amount_due >', 0) ->where('DATE(avances.deadline)', $alertDate) ->findAll(); } // Avances incomplètes (reste à payer > 0 et non transformées en commande) public function getIncompleteAvances(int $id = null) { $session = session(); $users = $session->get('user'); $isAdmin = in_array($users['group_name'], ['Conseil', 'Direction']); $builder = $this->where('is_order', 0) ->where('active', 1) ->where('amount_due >', 0); if (!$isAdmin) { $builder->where('store_id', $users['store_id']); } if ($id) { $builder->where('user_id', $id); } return $builder->orderBy('avance_date', 'DESC')->findAll(); } // Avances complètes (reste à payer = 0 et non transformées en commande) public function getCompletedAvances(int $id = null) { $session = session(); $users = $session->get('user'); $isAdmin = in_array($users['group_name'], ['Conseil', 'Direction']); $builder = $this->where('is_order', 0) ->where('active', 1) ->where('amount_due', 0); if (!$isAdmin) { $builder->where('store_id', $users['store_id']); } if ($id) { $builder->where('user_id', $id); } return $builder->orderBy('avance_date', 'DESC')->findAll(); } }