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:
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