partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

commit 947d725a92f5d17a72596cb89ebf0a62e6d061fd
parent a18f2991765941cb886969a4f20ba7b6f6bc42eb
Author: Felicitus <felicitus@felicitus.org>
Date:   Wed, 29 Jun 2011 21:14:47 +0200

Added cache update cronjob, externalized some cache methods to Parts

Diffstat:
Acronjobs/UpdatePartCacheData.php | 27+++++++++++++++++++++++++++
Msrc/de/RaumZeitLabor/PartKeepr/Part/Part.php | 39++++++++++++++++++++++++++++++++++++++-
Msrc/de/RaumZeitLabor/PartKeepr/Stock/StockEntry.php | 28+++-------------------------
3 files changed, 68 insertions(+), 26 deletions(-)

diff --git a/cronjobs/UpdatePartCacheData.php b/cronjobs/UpdatePartCacheData.php @@ -0,0 +1,27 @@ +<?php +namespace de\RaumZeitLabor\PartKeepr\Cronjobs; + +declare(encoding = 'UTF-8'); + +include("../src/de/RaumZeitLabor/PartKeepr/PartKeepr.php"); + +use de\RaumZeitLabor\PartKeepr\PartKeepr; +use de\RaumZeitLabor\PartKeepr\Statistic\StatisticSnapshotManager; +PartKeepr::initialize(); + +$query = PartKeepr::getEM()->createQuery("SELECT p FROM de\RaumZeitLabor\PartKeepr\Part\Part p"); +$result = $query->getResult(); + +$fc = 0; + +foreach ($result as $part) { + $fc++; + if ($fc > 50) { + PartKeepr::getEM()->flush(); + $fc=0; + } + $part->updateCacheData(); +} + +PartKeepr::getEM()->flush(); + diff --git a/src/de/RaumZeitLabor/PartKeepr/Part/Part.php b/src/de/RaumZeitLabor/PartKeepr/Part/Part.php @@ -262,7 +262,24 @@ class Part extends BaseEntity implements Serializable, Deserializable { */ public function setCategory (PartCategory $category) { $this->category = $category; - $this->categoryPath = PartCategoryManager::getInstance()->getNodeManager()->wrapNode($category)->getPath(' > ', true); + $this->updateCategoryCache(); + } + + /** + * Returns the assigned category + * @return \de\RaumZeitLabor\PartKeepr\PartCategory\PartCategory + */ + public function getCategory () { + return $this->category; + } + + /** + * Updates the category cache + */ + public function updateCategoryCache () { + if ($this->getCategory() !== null) { + $this->categoryPath = PartCategoryManager::getInstance()->getNodeManager()->wrapNode($this->getCategory())->getPath(' > ', true); + } } /** @@ -382,6 +399,26 @@ class Part extends BaseEntity implements Serializable, Deserializable { return $this->status; } + public function updateCacheData () { + $this->updateStockLevel(); + $this->updateCategoryCache(); + $this->updatePrice(); + } + + /** + * Updates the average price for a part + */ + public function updatePrice () { + $query = PartKeepr::getEM()->createQuery("SELECT SUM(se.price*se.stockLevel) / SUM(se.stockLevel) FROM de\RaumZeitLabor\PartKeepr\Stock\StockEntry se WHERE se.part = :part AND se.stockLevel > 0"); + $query->setParameter("part", $this); + $val = $query->getSingleScalarResult(); + + $query = PartKeepr::getEM()->createQuery('UPDATE de\RaumZeitLabor\PartKeepr\Part\Part p SET p.averagePrice = :val WHERE p = :part'); + $query->setParameter("val", $val); + $query->setParameter("part", $this); + $query->execute(); + } + /** * (non-PHPdoc) * @see de\RaumZeitLabor\PartKeepr\Util.Serializable::serialize() diff --git a/src/de/RaumZeitLabor/PartKeepr/Stock/StockEntry.php b/src/de/RaumZeitLabor/PartKeepr/Stock/StockEntry.php @@ -171,8 +171,8 @@ class StockEntry extends BaseEntity implements Serializable { * @PostPersist */ public function postPersist () { - $this->updateStockLevel(); - $this->updatePrice(); + $this->part->updateStockLevel(); + $this->part->updatePrice(); } /** @@ -202,28 +202,6 @@ class StockEntry extends BaseEntity implements Serializable { ); } - public function updateStockLevel () { - $query = PartKeepr::getEM()->createQuery("SELECT SUM(se.stockLevel) FROM de\RaumZeitLabor\PartKeepr\Stock\StockEntry se WHERE se.part = :part"); - $query->setParameter("part", $this->part); - $val = $query->getSingleScalarResult(); - - $query = PartKeepr::getEM()->createQuery('UPDATE de\RaumZeitLabor\PartKeepr\Part\Part p SET p.stockLevel = :val WHERE p = :part'); - $query->setParameter("val", $val); - $query->setParameter("part", $this->part); - $query->execute(); - } + - /** - * Updates the average price for a part - */ - public function updatePrice () { - $query = PartKeepr::getEM()->createQuery("SELECT SUM(se.price*se.stockLevel) / SUM(se.stockLevel) FROM de\RaumZeitLabor\PartKeepr\Stock\StockEntry se WHERE se.part = :part AND se.stockLevel > 0"); - $query->setParameter("part", $this->part); - $val = $query->getSingleScalarResult(); - - $query = PartKeepr::getEM()->createQuery('UPDATE de\RaumZeitLabor\PartKeepr\Part\Part p SET p.averagePrice = :val WHERE p = :part'); - $query->setParameter("val", $val); - $query->setParameter("part", $this->part); - $query->execute(); - } } \ No newline at end of file