db = $db; } /** * Pobiera stan magazynowy produktu * * @param int $productId ID produktu * @return int|null Ilość produktu lub null jeśli nie znaleziono */ public function getQuantity(int $productId): ?int { $quantity = $this->db->get('pp_shop_products', 'quantity', ['id' => $productId]); // Medoo zwraca false jeśli nie znaleziono return $quantity !== false ? (int)$quantity : null; } /** * Pobiera produkt po ID * * @param int $productId ID produktu * @return array|null Dane produktu lub null */ public function find(int $productId): ?array { $product = $this->db->get('pp_shop_products', '*', ['id' => $productId]); return $product ?: null; } /** * Pobiera cenę produktu (promocyjną jeśli jest niższa, w przeciwnym razie regularną) * * @param int $productId ID produktu * @return float|null Cena brutto lub null jeśli nie znaleziono */ public function getPrice(int $productId): ?float { $prices = $this->db->get('pp_shop_products', ['price_brutto', 'price_brutto_promo'], ['id' => $productId]); if (!$prices) { return null; } if ($prices['price_brutto_promo'] != '' && $prices['price_brutto_promo'] < $prices['price_brutto']) { return (float)$prices['price_brutto_promo']; } return (float)$prices['price_brutto']; } /** * Pobiera nazwę produktu w danym języku * * @param int $productId ID produktu * @param string $langId ID języka * @return string|null Nazwa produktu lub null jeśli nie znaleziono */ public function getName(int $productId, string $langId): ?string { $name = $this->db->get('pp_shop_products_langs', 'name', ['AND' => ['product_id' => $productId, 'lang_id' => $langId]]); return $name ?: null; } /** * Aktualizuje ilość produktu * * @param int $productId ID produktu * @param int $quantity Nowa ilość * @return bool Czy aktualizacja się powiodła */ public function updateQuantity(int $productId, int $quantity): bool { $result = $this->db->update( 'pp_shop_products', ['quantity' => $quantity], ['id' => $productId] ); return $result !== false; } /** * Przywraca produkt z archiwum (wraz z kombinacjami) * * @param int $productId ID produktu * @return bool Czy operacja się powiodła */ public function unarchive(int $productId): bool { $this->db->update( 'pp_shop_products', [ 'status' => 1, 'archive' => 0 ], [ 'id' => $productId ] ); $this->db->update( 'pp_shop_products', [ 'status' => 1, 'archive' => 0 ], [ 'parent_id' => $productId ] ); return true; } /** * Przenosi produkt do archiwum (wraz z kombinacjami) * * @param int $productId ID produktu * @return bool Czy operacja się powiodła */ public function archive(int $productId): bool { $this->db->update( 'pp_shop_products', [ 'status' => 0, 'archive' => 1 ], [ 'id' => $productId ] ); $this->db->update( 'pp_shop_products', [ 'status' => 0, 'archive' => 1 ], [ 'parent_id' => $productId ] ); return true; } }