get('user'); // Vérifier si l'utilisateur est admin (Conseil ou Direction) $isAdmin = in_array($user['group_name'], ['Conseil', 'Direction']); $builder = $this->where('is_piece', 0) ->where('product_sold', 0); // ✅ Si pas admin ET a un store_id valide, filtrer par son magasin if (!$isAdmin) { // ✅ Si l'utilisateur n'a pas de store_id (NULL ou 0), ne retourner aucun produit if (empty($user['store_id']) || $user['store_id'] == 0) { // Retourner une requête impossible pour avoir 0 résultats $builder->where('id', -1); } else { // Filtrer par le store_id de l'utilisateur $builder->where('store_id', $user['store_id']); } } // Si un ID spécifique est demandé if ($id) { return $builder->where('id', $id)->first(); } return $builder->orderBy('id', 'DESC')->findAll(); } /** * get the brand data * @param int $id * @return array|object|null */ public function getProductData(int $id = null) { if ($id) { return $this->where('id', $id)->first(); } return $this->where([ 'is_piece' => 0, 'product_sold' => 0 ])->orderBy('id', 'DESC')->findAll(); } public function getProductData2(int $id) { $builder = $this->where('is_piece', 0) ->where('product_sold', 0) ->where('store_id', $id); return $builder->join('brands', 'brands.id = products.marque') ->orderBy('products.id', 'DESC') ->select('brands.name as brand_name,COUNT( products.id) as total_product, products.store_id as store_id,products.*') ->groupBy('store_id') ->findAll(); } public function getProductData3(int $id) { if ($id == 0) { return $this->where('is_piece', 0)->orderBy('id', 'DESC')->findAll(); } return $this->where('is_piece', 0)->where('product_sold', 0)->where('store_id', $id)->orderBy('id', 'DESC')->findAll(); } public function getProductDataStore(int $store_id, bool $excludeAvance = true, int $currentProductId = null) { $builder = $this->where('is_piece', 0) ->where('product_sold', 0) ->where('availability', 1) ->where('store_id', $store_id); if ($excludeAvance) { $db = \Config\Database::connect(); $subQuery = $db->table('avances') ->select('product_id') ->where('active', 1) ->where('is_order', 0) ->getCompiledSelect(); $builder->where("id NOT IN ($subQuery)", null, false); } if ($currentProductId) { $builder->orWhere('id', $currentProductId); } return $builder->orderBy('id', 'DESC')->findAll(); } public function getActiveProductData() { return $this->where('is_piece', 0)->orderBy('id', 'DESC')->findAll(); } public function assignToStore($productid = null, $storeid = null) { if (!is_null($productid) && !is_null($storeid)) { $this->db->table('products') ->where('id', $productid) ->update(['store_id' => $storeid]); return true; } return false; } public function create(array $data) { return $this->insert($data) ? true : false; } public function updateProduct(array $data, int $id) { return $this->update($id, $data) ? true : false; } public function remove(int $id) { return $this->delete($id) ? true : false; } public function countTotalProducts() { $db = \Config\Database::connect(); $subQuery = $db->table('avances') ->select('product_id') ->where('active', 1) ->where('is_order', 0) ->getCompiledSelect(); return $this->where('is_piece', 0) ->where('product_sold', 0) ->where("id NOT IN ($subQuery)", null, false) ->countAllResults(); } public function countAllProductsIncludingSold() { return $this->countAll(); } public function getTotalProductPriceByIds(array $productIds) { try { $total = 0.0; foreach ($productIds as $id) { $row = $this->select('price') ->where('id', $id) ->first(); if ($row && isset($row['price'])) { $total += (float) $row['price']; } } return $total; } catch (\Throwable $th) { return false; } } public function getProductNameById(int $id): ?string { $product = $this->where('id', $id)->first(); if ($product && isset($product['name'])) { return $product['name']; } return null; } /** * Compter les produits par store selon le rôle de l'utilisateur * @return int */ public function countProductsByUserStore() { $session = session(); $user = $session->get('user'); // Vérifier si l'utilisateur est admin $isAdmin = in_array($user['group_name'], ['DAF', 'Direction']); $db = \Config\Database::connect(); // Sous-requête pour exclure les produits en avance $subQuery = $db->table('avances') ->select('product_id') ->where('active', 1) ->where('is_order', 0) ->getCompiledSelect(); $builder = $this->where('is_piece', 0) ->where('product_sold', 0) ->where("id NOT IN ($subQuery)", null, false); // Si pas admin ET a un store_id valide, filtrer par son magasin if (!$isAdmin && !empty($user['store_id']) && $user['store_id'] != 0) { $builder->where('store_id', $user['store_id']); } elseif (!$isAdmin) { // Utilisateur sans store = 0 produits return 0; } return $builder->countAllResults(); } }