commit baced71ddd75d38dcf9eaf0d2849c3119e31a5d3
parent d94412d8765f0232716fbd8a54990ad5ffe1ae26
Author: Timo A. Hummel <timo@netraver.de>
Date: Mon, 6 Jun 2011 20:19:41 +0200
Added filter for the different stock levels
Diffstat:
3 files changed, 111 insertions(+), 2 deletions(-)
diff --git a/frontend/js/Components/Part/PartsGrid.js b/frontend/js/Components/Part/PartsGrid.js
@@ -15,6 +15,14 @@ Ext.define('PartDB2.PartsGrid', {
scopeAllText: i18n("All subcategories"),
scopeSelectedText: i18n('Only selected category'),
+ stockMode: "all",
+ stockModeAll: i18n("Any stock level"),
+ stockModeZero: i18n("Stock = 0"),
+ stockModeBelow: i18n("Stock less than minimum stock"),
+ stockModeAvailable: i18n("Stock > 0"),
+
+ stockModes: [ "all", "nonzero", "zero", "below" ],
+
initComponent: function () {
this.callParent();
@@ -37,7 +45,38 @@ Ext.define('PartDB2.PartsGrid', {
}
});
+ this.stockModeButton = Ext.create("Ext.button.Split", {
+ text: this.stockModeAll,
+ handler: this.stockModeButtonHandler,
+ scope: this,
+ menu: {
+ items: [
+ {
+ text: this.stockModeAll,
+ handler: this.stockModeAllHandler,
+ scope: this
+ },
+ {
+ text: this.stockModeZero,
+ handler: this.stockModeZeroHandler,
+ scope: this
+ },
+ {
+ text: this.stockModeBelow,
+ handler: this.stockModeBelowHandler,
+ scope: this
+ },
+ {
+ text: this.stockModeAvailable,
+ handler: this.stockModeAvailableHandler,
+ scope: this
+ }
+ ]
+ }
+ });
+
this.bottomToolbar.add(this.categoryScopeButton);
+ this.bottomToolbar.add(this.stockModeButton);
this.setScopeMode("all");
},
categoryModeButtonHandler: function () {
@@ -77,6 +116,61 @@ Ext.define('PartDB2.PartsGrid', {
var proxy = this.store.getProxy();
proxy.extraParams.categoryScope = this.categoryScope;
},
+ stockModeAllHandler: function () {
+ this.setStockMode("all");
+ this.store.load();
+ },
+ stockModeZeroHandler: function () {
+ this.setStockMode("zero");
+ this.store.load();
+ },
+ stockModeBelowHandler: function () {
+ this.setStockMode("below");
+ this.store.load();
+ },
+ stockModeAvailableHandler: function () {
+ this.setStockMode("nonzero");
+ this.store.load();
+ },
+ stockModeButtonHandler: function () {
+ var idx = Ext.Array.indexOf(this.stockModes, this.stockMode);
+
+ idx++;
+
+ if (idx > (this.stockModes.length - 1)) {
+ idx = idx - this.stockModes.length;
+ }
+
+ this.setStockMode(this.stockModes[idx]);
+ this.store.load();
+
+ },
+ setStockMode: function (mode) {
+ if (!Ext.Array.contains(this.stockModes, mode)) {
+ window.alert("Invalid stock mode "+mode+" for setStockMode!");
+ return;
+ }
+
+ this.stockMode = mode;
+
+ switch (this.stockMode) {
+ case "zero":
+ this.stockModeButton.setText(this.stockModeZero);
+ break;
+ case "nonzero":
+ this.stockModeButton.setText(this.stockModeAvailable);
+ break;
+ case "below":
+ this.stockModeButton.setText(this.stockModeBelow);
+ break;
+ case "all":
+ this.stockModeButton.setText(this.stockModeAll);
+ break;
+ }
+
+ var proxy = this.store.getProxy();
+ proxy.extraParams.stockMode = this.stockMode;
+ },
setCategory: function (category) {
var proxy = this.store.getProxy();
diff --git a/src/de/RaumZeitLabor/PartDB2/Part/PartManager.php b/src/de/RaumZeitLabor/PartDB2/Part/PartManager.php
@@ -24,7 +24,7 @@ use de\RaumZeitLabor\PartDB2\Util\Singleton,
de\RaumZeitLabor\PartDB2\Footprint\Exceptions\FootprintNotFoundException;
class PartManager extends Singleton {
- public function getParts ($start = 0, $limit = 10, $sort = "name", $dir = "asc", $filter = "", $category = 0, $categoryScope = "all") {
+ public function getParts ($start = 0, $limit = 10, $sort = "name", $dir = "asc", $filter = "", $category = 0, $categoryScope = "all", $stockMode = "all") {
$qb = PartDB2::getEM()->createQueryBuilder();
$qb->select("COUNT(p.id)")->from("de\RaumZeitLabor\PartDB2\Part\Part","p")
@@ -68,6 +68,20 @@ class PartManager extends Singleton {
}
}
+ switch ($stockMode) {
+ case "all":
+ break;
+ case "zero":
+ $qb->andWhere("p.stockLevel = 0");
+ break;
+ case "nonzero":
+ $qb->andWhere("p.stockLevel > 0");
+ break;
+ case "below":
+ $qb->andWhere("p.stockLevel < p.minStockLevel");
+ break;
+ }
+
$totalQuery = $qb->getQuery();
diff --git a/src/de/RaumZeitLabor/PartDB2/Part/PartService.php b/src/de/RaumZeitLabor/PartDB2/Part/PartService.php
@@ -31,7 +31,8 @@ class PartService extends Service implements RestfulService {
$this->getParameter("dir", $aSortParams["direction"]),
$this->getParameter("query", ""),
$this->getParameter("category", 0),
- $this->getParameter("categoryScope", "all"));
+ $this->getParameter("categoryScope", "all"),
+ $this->getParameter("stockMode", "all"));
}
}