product_id = $product_id; // ustaw obiekt, żeby nie wywoływać kilku zapytań dla tej samej instancji obiektu $c = new Criteria(); $c->add(ProductPriceHistoryMinPeer::PRODUCT_ID, $this->product_id); $c->addDescendingOrderByColumn(ProductPriceHistoryMinPeer::CREATED_AT); $last = ProductPriceHistoryMinPeer::doSelectOne($c); if (! empty($last)) $this->product_min = $last; else $this->product_min = NULL; return true; } /** * Sprawdż czy jest zapisana ostatnia cena produktu w st_prodcut_price_history_min * * @return bool - true jest wpis z ceną, false - nie ma */ public function isMinProductPrice() { $c = new Criteria(); $c->add(ProductPriceHistoryMinPeer::PRODUCT_ID, $this->product_id); $c->addDescendingOrderByColumn(ProductPriceHistoryMinPeer::CREATED_AT); $last = ProductPriceHistoryMinPeer::doSelectOne($c); if (! empty($last)) { return true; } else { return false; } } /** * Odczytaj wartość price_change. * @return string wartość up|down|NULL */ public function getPriceChange() { if (is_null($this->product_min)) return NULL; $price_change = $this->product_min->getPriceChange(); if ($price_change == 'up') return 'up'; if ($price_change == 'down') return 'down'; return NULL; } /** * Odczytaj datę minimalnej ceny 30 dni przed zmianą */ public function getDatePreviousMinPrice() { if (is_null($this->product_min)) return NULL; $date_previous_min_price = $this->product_min->getDatePreviousMinPrice(); // zamien format 2022-12-01 10:49:11 -> 2022-12-01 $date = date_create($date_previous_min_price); $date_formated = date_format($date,"Y-m-d"); return $date_formated; } /** * Odczytaj datę ostatniej zmiany */ public function getDateLastPriceChange() { if (is_null($this->product_min)) return NULL; $date_last_price_change = $this->product_min->getDateLastPriceChange(); // zamien format 2022-12-01 10:49:11 -> 2022-12-01 $date = date_create($date_last_price_change); $date_formated = date_format($date,"Y-m-d"); return $date_formated; } /** * Odczytaj ostatnią cenę produktu z st_prodcu_price_history_min * Ostatnia cena zapisana tutaj to cena 30 dni przed zmianą. * * @return float ostatnia cena brutto */ public function getMinProductPriceBrutto() { $c = new Criteria(); $c->add(ProductPriceHistoryMinPeer::PRODUCT_ID, $this->product_id); $c->addDescendingOrderByColumn(ProductPriceHistoryMinPeer::CREATED_AT); $last = ProductPriceHistoryMinPeer::doSelectOne($c); if (! empty($last)) { $price_brutto = $last->getPriceBrutto(); return $price_brutto; } else { return false; } } /** * Odczytaj ostatnie dane z last dla produktu * * @return object ProductPriceHistoryMin */ public function getMinProduct() { $c = new Criteria(); $c->add(ProductPriceHistoryMinPeer::PRODUCT_ID, $this->product_id); $c->addDescendingOrderByColumn(ProductPriceHistoryMinPeer::CREATED_AT); $last = ProductPriceHistoryMinPeer::doSelectOne($c); if (! empty($last)) { return $last; } else return NULL; } /** * Zapisz cenę produktu w st_prodcu_price_history_min. Dodanie wpisu. * * @param object $product stProduct - odwołanie bezpośrednie referencja * @param string $change Infomrmacja czy cena wzrosła 'up', czyt spadla 'down' * @return NULL */ public function addMinProductPrice($product,$change) { $price = $product->getPrice(); $price_netto = $product->getPriceNetto(); $price_brutto = $product->getPriceBrutto(); $main_price = $product->getMainPrice(); $main_price_netto = $product->getMainPriceNetto(); $main_price_brutto = $product->getMainPriceBrutto(); $price_currency = $product->getPrice(); if (empty($price_currency)) { $price_currency = $product->getPriceBrutto(); } // dodatkowe informacje do zapisu informacji z kiedy byla brana data i kiedy nastapila aktualizacja $date_previous_min_price = $product->getCreatedAt(); $date_last_price_change = date("Y-m-d"); $currency_id = $product->getCurrencyId(); if (empty($currency_id)) $currency_id = $this->default_currency; $product_min = new ProductPriceHistoryMin(); $product_min->setProductId($this->product_id); $product_min->setPrice($price_currency); $product_min->setPriceNetto($price_netto); $product_min->setPriceBrutto($price_brutto); $product_min->setMainPrice($main_price); $product_min->setMainPriceBrutto($main_price_brutto); $product_min->setMainPriceNetto($main_price_netto); $product_min->setCurrencyId($currency_id); $product_min->setPriceChange($change); $product_min->setDatePreviousMinPrice($date_previous_min_price); $product_min->setDateLastPriceChange($date_last_price_change); $product_min->save(); // zaktualizuj dane w produkcie stProduct->opt_price_history_change - wartosc $change $x = new Criteria(); $x->add(ProductPeer::ID, $this->product_id); $product_opt = ProductPeer::doSelectOne($x); $product_opt->setOptPriceHistoryChange($change); $product_opt->disablePriceHistorySave(); // zabezpieczenie przed infinite loop $product_opt->save(); return NULL; } /** * Zapisz cenę produktu w st_prodcu_price_history_min. Aktuaizacja. * * @param object $product stProduct - odwołanie bezpośrednie referencja * @param string $change Infomrmacja czy cena wzrosła 'up', czyt spadla 'down' * @return NULL */ public function updateMinProductPrice($product,$change) { $price = $product->getPrice(); $price_netto = $product->getPriceNetto(); $price_brutto = $product->getPriceBrutto(); $main_price = $product->getMainPrice(); $main_price_netto = $product->getMainPriceNetto(); $main_price_brutto = $product->getMainPriceBrutto(); $price_currency = $product->getPrice(); if (empty($price_currency)) { $price_currency = $product->getPriceBrutto(); } // dodatkowe informacje do zapisu informacji z kiedy byla brana data i kiedy nastapila aktualizacja $date_previous_min_price = $product->getCreatedAt(); $date_last_price_change = date("Y-m-d"); $currency_id = $product->getCurrencyId(); if (empty($currency_id)) $currency_id = $this->default_currency; $c = new Criteria(); $c->add(ProductPriceHistoryMinPeer::PRODUCT_ID, $this->product_id); $c->addDescendingOrderByColumn(ProductPriceHistoryMinPeer::CREATED_AT); $product_min = ProductPriceHistoryMinPeer::doSelectOne($c); $product_min->setProductId($this->product_id); $product_min->setPrice($price_currency); $product_min->setPriceNetto($price_netto); $product_min->setPriceBrutto($price_brutto); $product_min->setMainPrice($main_price); $product_min->setMainPriceNetto($main_price_netto); $product_min->setMainPriceBrutto($main_price_brutto); $product_min->setCurrencyId($currency_id); $product_min->setPriceChange($change); $product_min->setDatePreviousMinPrice($date_previous_min_price); $product_min->setDateLastPriceChange($date_last_price_change); $product_min->save(); // zaktualizuj dane w produkcie stProduct->opt_price_history_change - wartosc $change $x = new Criteria(); $x->add(ProductPeer::ID, $this->product_id); $product_opt = ProductPeer::doSelectOne($x); $product_opt->setOptPriceHistoryChange($change); $product_opt->disablePriceHistorySave(); // zabezpieczenie przed infinite loop $product_opt->save(); // $this->getLogger()->info('Product Min id: %id% Updated',array('%id%'=>$id)); return NULL; } }