partkeepr

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

commit 47f4dfa1cb3e483507cedcec4a274ef2020b4352
parent e3c1a0906568153feb36efc1ca96141fa80d03d8
Author: Timo A. Hummel <timo@netraver.de>
Date:   Thu, 26 May 2011 01:10:03 +0200

Added manufacturers

Diffstat:
Mfrontend/index.html | 4++++
Afrontend/js/de.RaumZeitLabor.PartDB2/ManufacturerManager/ManufacturerListGrid.js | 165+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Afrontend/js/de.RaumZeitLabor.PartDB2/ManufacturerManager/ManufacturerManagerDetails.js | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Afrontend/js/de.RaumZeitLabor.PartDB2/ManufacturerManager/ManufacturerManagerWindow.js | 37+++++++++++++++++++++++++++++++++++++
Mfrontend/js/de.RaumZeitLabor.PartDB2/PartsManager/PartsManagerAddPartForm.js | 60+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
Mfrontend/js/org.jerrymouse.components/Menubar.js | 4++++
Mfrontend/js/org.jerrymouse.util.locale/locales/en_US.js | 11+++++++++++
Asrc/de/RaumZeitLabor/PartDB2/Manufacturer/Manufacturer.php | 28++++++++++++++++++++++++++++
Asrc/de/RaumZeitLabor/PartDB2/Manufacturer/ManufacturerManager.php | 71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/de/RaumZeitLabor/PartDB2/Manufacturer/ManufacturerService.php | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/de/RaumZeitLabor/PartDB2/Part/Part.php | 10++++++++++
Msrc/de/RaumZeitLabor/PartDB2/Part/PartManager.php | 12++++++++++++
Msrc/de/RaumZeitLabor/PartDB2/Part/PartManagerService.php | 1+
Msrc/de/RaumZeitLabor/PartDB2/PartDB2.php | 3++-
14 files changed, 521 insertions(+), 2 deletions(-)

diff --git a/frontend/index.html b/frontend/index.html @@ -58,6 +58,10 @@ <script type="text/javascript" src="js/de.RaumZeitLabor.PartDB2/StorageLocationManager/StorageLocationListGrid.js"></script> <script type="text/javascript" src="js/de.RaumZeitLabor.PartDB2/StorageLocationManager/StorageLocationManagerDetails.js"></script> + <script type="text/javascript" src="js/de.RaumZeitLabor.PartDB2/ManufacturerManager/ManufacturerManagerWindow.js"></script> + <script type="text/javascript" src="js/de.RaumZeitLabor.PartDB2/ManufacturerManager/ManufacturerListGrid.js"></script> + <script type="text/javascript" src="js/de.RaumZeitLabor.PartDB2/ManufacturerManager/ManufacturerManagerDetails.js"></script> + <script type="text/javascript" src="js/de.RaumZeitLabor.PartDB2/PartsManager/PartsManagerTree.js"></script> <!-- <script type="text/javascript" src="js/de.RaumZeitLabor.PartDB2/PartsManager/FootPrintManagerDetails.js"></script> --> <script type="text/javascript" src="js/de.RaumZeitLabor.PartDB2/PartsManager/PartsManagerWindow.js"></script> diff --git a/frontend/js/de.RaumZeitLabor.PartDB2/ManufacturerManager/ManufacturerListGrid.js b/frontend/js/de.RaumZeitLabor.PartDB2/ManufacturerManager/ManufacturerListGrid.js @@ -0,0 +1,165 @@ +Ext.ns("de.RaumZeitLabor.PartDB2"); + +de.RaumZeitLabor.PartDB2.ManufacturerListGrid = Ext.extend(Ext.grid.GridPanel, { + + store: null, + initComponent: function () { + + var pageSize = 13; + + + var call = new org.jerrymouse.service.Call( + "de.RaumZeitLabor.PartDB2.Manufacturer.ManufacturerService", + "getManufacturers"); + + call.setLoadMessage('$[de.RaumZeitLabor.PartDB2.ManufacturerManager.loading]'); + call.setParameter("limit", pageSize); + + this.store = new Ext.data.JsonStore({ + root: 'manufacturers', + totalProperty: 'totalCount', + proxy: new ServiceCallDataProxy(call), + idProperty: 'id', + remoteSort: true, + + fields: [ + 'id', + 'name' + ] + }); + + Ext.apply(this, { + containerScroll: true, + rootVisible: false, + lines: false, + store: this.store, + autoExpandColumn: 'name', + sm: new Ext.grid.RowSelectionModel({ + singleSelect: true, + listeners: { + "rowselect": this.onManufacturerSelected.createDelegate(this), + "selectionchange": this.onManufacturerSelectionChange.createDelegate(this) + } + + }), + viewConfig: { + forceFit: true + }, + + colModel: new Ext.grid.ColumnModel({ + defaults: { + width: 230, + sortable: true + }, + columns: [ + {header: '$[de.RaumZeitLabor.PartDB2.ManufacturerManager.name]', dataIndex: 'name', id: 'name'} + + ], + }), + + tbar: { + items: [ + { + tooltip: '$[de.RaumZeitLabor.PartDB2.ManufacturerManager.add]', + icon: 'resources/silkicons/add.png', + handler: this.addManufacturer.createDelegate(this) + }, + { + tooltip: '$[de.RaumZeitLabor.PartDB2.ManufacturerManager.delete]', + icon: 'resources/silkicons/delete.png', + id: 'manufacturer-delete-button', + handler: this.deleteManufacturer.createDelegate(this), + disabled: true + },{ + xtype: 'tbfill' + },{ + xtype: 'tbtext', + text: 'Filter:' + + },{ + xtype: 'org.jerrymouse.gui.widgets.searchField', + listeners: { + 'startSearch': function (text) { + this.store.proxy.call.setParameter("filter", text); + this.store.reload(); + }.createDelegate(this), + 'resetSearch': function (text) { + this.store.proxy.call.setParameter("filter", ''); + this.store.reload(); + }.createDelegate(this) + }, + id: 'filter' + }] + + }, + bbar: new Ext.PagingToolbar( + { + "pageSize": pageSize, + store: this.store, + displayInfo: false + }) + + }); + + this.loadManufacturers(); + + de.RaumZeitLabor.PartDB2.ManufacturerListGrid.superclass.initComponent.call(this); + + }, + + onManufacturerSelected: function (sm, rowIdx, record) { + Ext.getCmp("manufacturer-delete-button").enable(); + + Ext.getCmp("manufacturer-details").editManufacturer(record.get("id")); + }, + onManufacturerSelectionChange: function (sm) { + if (sm.getCount() == 0) { + Ext.getCmp("manufacturer-delete-button").disable(); + } + }, + loadManufacturers: function () { + this.store.load(); + }, + deleteManufacturer: function () { + var record = this.getSelectionModel().getSelected(); + + org.jerrymouse.gui.widgets.messagebox.confirm( + '$[de.RaumZeitLabor.PartDB2.ManufacturerManager.deleteManufacturerDialogTitle]', + sprintf('$[de.RaumZeitLabor.PartDB2.ManufacturerManager.deleteManufacturerDialogMessage]', record.get("name")), + function(btn, text){ + if (btn == 'yes'){ + var call = new org.jerrymouse.service.Call( + "de.RaumZeitLabor.PartDB2.Manufacturer.ManufacturerService", + "deleteManufacturer"); + call.setParameter("id", record.get("id")); + call.setLoadMessage('$[de.RaumZeitLabor.PartDB2.ManufacturerManager.deleteManufacturer]'); + call.setHandler(this.onManufacturerDeleted.createDelegate(this)) + call.doCall(); + } + }.createDelegate(this)); + }, + addManufacturer: function () { + org.jerrymouse.gui.widgets.messagebox.prompt( + '$[de.RaumZeitLabor.PartDB2.ManufacturerManager.addManufacturerDialogTitle]', + '$[de.RaumZeitLabor.PartDB2.ManufacturerManager.addManufacturerDialogMessage]', + function(btn, text){ + if (btn == 'ok'){ + var call = new org.jerrymouse.service.Call( + "de.RaumZeitLabor.PartDB2.Manufacturer.ManufacturerService", + "addManufacturer"); + call.setParameter("name", text); + call.setLoadMessage('$[de.RaumZeitLabor.PartDB2.ManufacturerManager.addManufacturer]'); + call.setHandler(this.onManufacturerAdded.createDelegate(this)) + call.doCall(); + } + }.createDelegate(this)); + }, + + onManufacturerAdded: function (result) { + this.loadManufacturers(); + }, + onManufacturerDeleted: function (result) { + Ext.getCmp("manufacturer-details").hide(); + this.loadManufacturers(); + } +}); diff --git a/frontend/js/de.RaumZeitLabor.PartDB2/ManufacturerManager/ManufacturerManagerDetails.js b/frontend/js/de.RaumZeitLabor.PartDB2/ManufacturerManager/ManufacturerManagerDetails.js @@ -0,0 +1,64 @@ +Ext.ns("de.RaumZeitLabor.PartDB2.ManufacturerManagerDetails"); + +de.RaumZeitLabor.PartDB2.ManufacturerManagerDetails = Ext.extend(Ext.form.FormPanel, { + id: "manufacturer-details", + storageLocationId: null, + labelWidth: 150, + initComponent: function () { + + Ext.apply(this, { + cls: 'x-panel-mc', + bodyStyle:'padding:0px 5px 0', + items: [ + { fieldLabel: '$[de.RaumZeitLabor.PartDB2.ManufacturerManager.name]', + name: 'name', + xtype: 'textfield' + } + ], + hidden: true, + buttons: [{ + text: '$[de.RaumZeitLabor.PartDB2.save]', + handler: this.saveManufacturer.createDelegate(this) + },{ + text: '$[de.RaumZeitLabor.PartDB2.cancel]', + handler: function () { + this.hide(); + }.createDelegate(this) + }] + }); + de.RaumZeitLabor.PartDB2.ManufacturerManagerDetails.superclass.initComponent.call(this); + }, + + setManufacturer: function (id) { + this.storageLocationId = id; + }, + + editManufacturer: function (id) { + this.setManufacturer(id); + + var call = new org.jerrymouse.service.Call( + "de.RaumZeitLabor.PartDB2.Manufacturer.ManufacturerService", + "getManufacturer"); + call.setParameter("id", this.storageLocationId); + call.setLoadMessage('$[de.RaumZeitLabor.PartDB2.ManufacturerManager.loadManufacturer]'); + call.setHandler(this.onManufacturerLoaded.createDelegate(this)) + call.doCall(); + }, + saveManufacturer: function () { + var call = new org.jerrymouse.service.Call( + "de.RaumZeitLabor.PartDB2.Manufacturer.ManufacturerService", + "saveManufacturer"); + call.setParameter("id", this.storageLocationId); + call.setParameters(this.getForm().getValues()); + call.setLoadMessage('$[de.RaumZeitLabor.PartDB2.ManufacturerManager.saveManufacturer]'); + call.setHandler(this.onManufacturerSaved.createDelegate(this)) + call.doCall(); + }, + onManufacturerSaved: function (response) { + var record = Ext.getCmp("manufacturer-list").getStore().reload(); + }, + onManufacturerLoaded: function (response) { + this.getForm().setValues(response); + this.show(); + } +});+ \ No newline at end of file diff --git a/frontend/js/de.RaumZeitLabor.PartDB2/ManufacturerManager/ManufacturerManagerWindow.js b/frontend/js/de.RaumZeitLabor.PartDB2/ManufacturerManager/ManufacturerManagerWindow.js @@ -0,0 +1,37 @@ +Ext.ns("de.RaumZeitLabor.PartDB2.ManufacturerManagerWindow"); + +de.RaumZeitLabor.PartDB2.ManufacturerManagerWindow = Ext.extend(org.jerrymouse.gui.widgets.window, { + title: "$[de.RaumZeitLabor.PartDB2.ManufacturerManager.manage]", + width: 600, + height: 400, + layout: 'border', + defaults: { + collapsible: false, + split: false + }, + initComponent: function () { + + this.manufacturerList = new de.RaumZeitLabor.PartDB2.ManufacturerListGrid({ + region: 'west', + id: 'storagelocation-list', + width: 250 + }); + + this.manufacturerDetails = new de.RaumZeitLabor.PartDB2.ManufacturerManagerDetails({ + region: 'center' + }); + + this.items = [ + this.manufacturerList, + this.manufacturerDetails + ]; + + de.RaumZeitLabor.PartDB2.ManufacturerManagerWindow.superclass.initComponent.call(this); + } +}); + +de.RaumZeitLabor.PartDB2.ManufacturerManagerWindow.handler = function () { + var manufacturerManager = new de.RaumZeitLabor.PartDB2.ManufacturerManagerWindow(); + manufacturerManager.show(); +} + diff --git a/frontend/js/de.RaumZeitLabor.PartDB2/PartsManager/PartsManagerAddPartForm.js b/frontend/js/de.RaumZeitLabor.PartDB2/PartsManager/PartsManagerAddPartForm.js @@ -116,6 +116,37 @@ de.RaumZeitLabor.PartDB2.PartsManagerAddPartForm = Ext.extend(Ext.form.FormPanel valueField: "id", fieldLabel: "Footprint" }); + + // @todo Put the footprint combobox into an own component + this.manufacturerCall = new org.jerrymouse.service.Call( + "de.RaumZeitLabor.PartDB2.Manufacturer.ManufacturerService", + "getManufacturers"); + + this.manufacturerCall.setParameter("limit", -1); + + this.manufacturerStore = new Ext.data.JsonStore({ + root: 'manufacturers', + totalProperty: 'totalCount', + proxy: new ServiceCallDataProxy(this.manufacturerCall), + idProperty: 'id', + remoteSort: false, + fields: [ + 'id', + 'name' + ] + }); + + this.manufacturerCombo = new Ext.form.ClearableComboBox({ + validator: function (value) { + return true; + }.createDelegate(this), + store: this.manufacturerStore, + displayField: "name", + anchor: '100%', + mode: 'local', + valueField: "id", + fieldLabel: "Hersteller" + }); this.keepStorageLocation = new Ext.form.Checkbox({ boxLabel: "Lagerort nach dem Speichern beibehalten" @@ -142,6 +173,7 @@ de.RaumZeitLabor.PartDB2.PartsManagerAddPartForm = Ext.extend(Ext.form.FormPanel this.partStorageLocation, this.keepStorageLocation, this.footprintCombo, + this.manufacturerCombo, this.commentField ]; @@ -214,6 +246,7 @@ de.RaumZeitLabor.PartDB2.PartsManagerAddPartForm = Ext.extend(Ext.form.FormPanel call.setParameter("name", this.partName.getValue()); call.setParameter("quantity", this.partQuantity.getValue()); call.setParameter("minstock", this.partMinStock.getValue()); + call.setParameter("manufacturer", this.getManufacturer()); call.setParameter("storagelocation", this.getStorageLocation()); call.setParameter("footprint", this.footprintCombo.getValue()); @@ -238,6 +271,21 @@ de.RaumZeitLabor.PartDB2.PartsManagerAddPartForm = Ext.extend(Ext.form.FormPanel return idx; }, + getManufacturer: function () { + var idx = this.manufacturerCombo.store.findExact("id", this.manufacturerCombo.getValue()); + + if (idx !== -1) { + return this.manufacturerCombo.store.getAt(idx).get("id"); + } + + var idx = this.manufacturerCombo.store.findExact("name", this.manufacturerCombo.getValue()); + + if (idx !== -1) { + return this.manufacturerCombo.store.getAt(idx).get("id"); + } + + return idx; + }, onPartAdded: function () { this.clearForm(); if (this.mode == "edit") { @@ -281,7 +329,15 @@ de.RaumZeitLabor.PartDB2.PartsManagerAddPartForm = Ext.extend(Ext.form.FormPanel onPartLoaded: function (response) { this.commentField.setValue(response.comment); - this.footprintCombo.setValue(response.footprint.footprint); + + if (response.footprint !== null) { + this.footprintCombo.setValue(response.footprint.footprint); + } + + if (response.manufacturer !== null) { + this.manufacturerCombo.setValue(response.manufacturer.name); + } + this.partMinStock.setValue(response.minStockLevel); this.partName.setValue(response.name); @@ -303,6 +359,7 @@ de.RaumZeitLabor.PartDB2.PartsManagerAddPartForm = Ext.extend(Ext.form.FormPanel this.partQuantity.setRawValue(0); this.partMinStock.setRawValue(0); this.footprintCombo.setRawValue(""); + this.manufacturerCombo.setRawValue(""); this.commentField.setRawValue(""); if (this.keepStorageLocation.getValue() !== true || force == true) @@ -318,5 +375,6 @@ de.RaumZeitLabor.PartDB2.PartsManagerAddPartForm = Ext.extend(Ext.form.FormPanel reloadStorageLocations: function () { this.storageLocationStore.reload(); this.footprintStore.reload(); + this.manufacturerStore.reload(); } }); \ No newline at end of file diff --git a/frontend/js/org.jerrymouse.components/Menubar.js b/frontend/js/org.jerrymouse.components/Menubar.js @@ -53,6 +53,10 @@ org.jerrymouse.components.Menubar = Ext.extend(Ext.Toolbar, { },{ text: "$[de.RaumZeitLabor.PartDB2.PartsManager.manage]", handler: de.RaumZeitLabor.PartDB2.PartsManagerWindow.handler + }, + { + text: "$[de.RaumZeitLabor.PartDB2.ManufacturerManager.manage]", + handler: de.RaumZeitLabor.PartDB2.ManufacturerManagerWindow.handler } diff --git a/frontend/js/org.jerrymouse.util.locale/locales/en_US.js b/frontend/js/org.jerrymouse.util.locale/locales/en_US.js @@ -66,6 +66,17 @@ locales.en_US = { "de.RaumZeitLabor.PartDB2.StorageLocationManager.addStorageLocationDialogMessage": "Enter the name of the new storage location:", "de.RaumZeitLabor.PartDB2.StorageLocationManager.name": "Name", + /* Manufacturers */ + "de.RaumZeitLabor.PartDB2.ManufacturerManager.manage": "Manage Manufacturers", + "de.RaumZeitLabor.PartDB2.ManufacturerManager.name": "Manufacturer Name", + "de.RaumZeitLabor.PartDB2.ManufacturerManager.add": "Add Manufacturer", + "de.RaumZeitLabor.PartDB2.ManufacturerManager.delete": "Delete Manufacturer", + "de.RaumZeitLabor.PartDB2.ManufacturerManager.deleteManufacturerDialogTitle": "Delete Manufacturer", + "de.RaumZeitLabor.PartDB2.ManufacturerManager.deleteManufacturerDialogMessage": "Do you really wish to delete the selected manufacturer?", + "de.RaumZeitLabor.PartDB2.ManufacturerManager.addManufacturerDialogTitle": "Add a new manufacturer", + "de.RaumZeitLabor.PartDB2.ManufacturerManager.addManufacturerDialogMessage": "Enter the name of the new manufacturer:", + "de.RaumZeitLabor.PartDB2.ManufacturerManager.name": "Name", + /* Parts */ "de.RaumZeitLabor.PartDB2.PartsManager.manage": "Manage Parts" }; diff --git a/src/de/RaumZeitLabor/PartDB2/Manufacturer/Manufacturer.php b/src/de/RaumZeitLabor/PartDB2/Manufacturer/Manufacturer.php @@ -0,0 +1,27 @@ +<?php +namespace de\RaumZeitLabor\PartDB2\Manufacturer; +declare(encoding = 'UTF-8'); + +/** @Entity **/ +class Manufacturer { + + /** + * @Id @Column(type="integer") + * @GeneratedValue(strategy="AUTO") + * @var unknown_type + */ + private $id; + + /** + * @Column(type="string",unique=true) + */ + private $name; + + public function setName ($name) { + $this->name = $name; + } + + public function serialize () { + return array("id" => $this->id, "name" => $this->name); + } +}+ \ No newline at end of file diff --git a/src/de/RaumZeitLabor/PartDB2/Manufacturer/ManufacturerManager.php b/src/de/RaumZeitLabor/PartDB2/Manufacturer/ManufacturerManager.php @@ -0,0 +1,70 @@ +<?php +namespace de\RaumZeitLabor\PartDB2\Manufacturer; +declare(encoding = 'UTF-8'); + +use de\RaumZeitLabor\PartDB2\Util\Singleton, + de\RaumZeitLabor\PartDB2\Manufacturer\Manufacturer, + de\RaumZeitLabor\PartDB2\PartDB2, + de\RaumZeitLabor\PartDB2\Category\CategoryManager, + de\RaumZeitLabor\PartDB2\Manufacturer\Exceptions\ManufacturerNotFoundException; + +class ManufacturerManager extends Singleton { + public function getManufacturers ($start = 0, $limit = 10, $sort = "footprint", $dir = "asc", $filter = "") { + + $qb = PartDB2::getEM()->createQueryBuilder(); + $qb->select("st.id, st.name")->from("de\RaumZeitLabor\PartDB2\Manufacturer\Manufacturer","st"); + + if ($filter != "") { + $qb = $qb->where("st.name LIKE :filter"); + $qb->setParameter("filter", "%".$filter."%"); + } + + if ($limit > -1) { + $qb->setMaxResults($limit); + $qb->setFirstResult($start); + } + + $qb->orderBy("st.".$sort, $dir); + + $query = $qb->getQuery(); + + $result = $query->getResult(); + + $totalQueryBuilder = PartDB2::getEM()->createQueryBuilder(); + $totalQueryBuilder->select("COUNT(st.id)")->from("de\RaumZeitLabor\PartDB2\Manufacturer\Manufacturer","st"); + + + + if ($filter != "") { + $totalQueryBuilder = $totalQueryBuilder->where("st.name LIKE :filter"); + $totalQueryBuilder->setParameter("filter", "%".$filter."%"); + } + + $totalQuery = $totalQueryBuilder->getQuery(); + + return array("manufacturers" => $result, "totalCount" => $totalQuery->getSingleScalarResult()); + } + + public function getManufacturer ($id) { + $manufacturer = PartDB2::getEM()->find("de\RaumZeitLabor\PartDB2\Manufacturer\Manufacturer", $id); + + if ($manufacturer) { + return $manufacturer; + } else { + throw new ManufacturerNotFoundException(); + } + } + + public function addManufacturer ($name) { + $manufacturer = new Manufacturer(); + $manufacturer->setName($name); + + PartDB2::getEM()->persist($manufacturer); + } + public function deleteManufacturer ($id) { + $manufacturer = $this->getManufacturer($id); + + PartDB2::getEM()->remove($manufacturer); + PartDB2::getEM()->flush(); + } +}+ \ No newline at end of file diff --git a/src/de/RaumZeitLabor/PartDB2/Manufacturer/ManufacturerService.php b/src/de/RaumZeitLabor/PartDB2/Manufacturer/ManufacturerService.php @@ -0,0 +1,51 @@ +<?php +namespace de\RaumZeitLabor\PartDB2\Manufacturer; +declare(encoding = 'UTF-8'); + +use de\RaumZeitLabor\PartDB2\Service\Service; +use de\RaumZeitLabor\PartDB2\Part\PartManager, + de\RaumZeitLabor\PartDB2\Stock\StockEntry, + de\RaumZeitLabor\PartDB2\PartDB2, + de\RaumZeitLabor\PartDB2\Session\SessionManager; + +class ManufacturerService extends Service { + public function getManufacturers() { + return ManufacturerManager::getInstance()->getManufacturers( + $this->getParameter("start", 0), + $this->getParameter("limit", 10), + $this->getParameter("sortby", "name"), + $this->getParameter("dir", "asc"), + $this->getParameter("filter", "")); + } + + public function addManufacturer () { + $this->requireParameter("name"); + + ManufacturerManager::getInstance()->addManufacturer($this->getParameter("name")); + } + + public function deleteManufacturer () { + $this->requireParameter("id"); + + ManufacturerManager::getInstance()->deleteManufacturer($this->getParameter("id")); + } + + public function getManufacturer () { + $this->requireParameter("id"); + + return ManufacturerManager::getInstance()->getManufacturer($this->getParameter("id"))->serialize(); + } + + public function saveManufacturer () { + $this->requireParameter("id"); + $this->requireParameter("name"); + + $Manufacturer = ManufacturerManager::getInstance()->getManufacturer($this->getParameter("id")); + + $Manufacturer->setName($this->getParameter("name")); + + PartDB2::getEM()->flush(); + + return $Manufacturer->serialize(); + } +}+ \ No newline at end of file diff --git a/src/de/RaumZeitLabor/PartDB2/Part/Part.php b/src/de/RaumZeitLabor/PartDB2/Part/Part.php @@ -35,6 +35,11 @@ class Part { private $storageLocation; /** + * @ManyToOne(targetEntity="de\RaumZeitLabor\PartDB2\Manufacturer\Manufacturer") + */ + private $manufacturer; + + /** * @Column(type="text") */ private $comment; @@ -80,6 +85,10 @@ class Part { $this->footprint = $footprint; } + public function setManufacturer (\de\RaumZeitLabor\PartDB2\Manufacturer\Manufacturer $manufacturer) { + $this->manufacturer = $manufacturer; + } + public function setComment ($comment) { $this->comment = $comment; } @@ -100,6 +109,7 @@ class Part { "footprint" => is_object($this->footprint) ? $this->footprint->serialize() : null, "minStockLevel" => $this->minStockLevel, "storageLocation" => is_object($this->storageLocation) ? $this->storageLocation->serialize() : null, + "manufacturer" => is_object($this->manufacturer) ? $this->manufacturer->serialize() : null, "category" => $this->category->serialize() diff --git a/src/de/RaumZeitLabor/PartDB2/Part/PartManager.php b/src/de/RaumZeitLabor/PartDB2/Part/PartManager.php @@ -15,6 +15,7 @@ use de\RaumZeitLabor\PartDB2\Util\Singleton, de\RaumZeitLabor\PartDB2\Footprint\Footprint, de\RaumZeitLabor\PartDB2\PartDB2, de\RaumZeitLabor\PartDB2\Category\CategoryManager, + de\RaumZeitLabor\PartDB2\Manufacturer\ManufacturerManager, de\RaumZeitLabor\PartDB2\Footprint\Exceptions\FootprintNotFoundException; class PartManager extends Singleton { @@ -157,6 +158,17 @@ class PartManager extends Singleton { PartDB2::getEM()->persist($storageLocation); } + try { + $manufacturer = ManufacturerManager::getInstance()->getManufacturer($aParameters["manufacturer"]); + $part->setManufacturer($manufacturer); + } catch (\Exception $e) { + $manufacturer = new Manufacturer(); + $manufacturer->setName($aParameters["manufacturer"]); + $part->setManufacturer($manufacturer); + + PartDB2::getEM()->persist($manufacturer); + } + $category = CategoryManager::getInstance()->getCategory($aParameters["category"]); $part->setCategory($category->getNode()); diff --git a/src/de/RaumZeitLabor/PartDB2/Part/PartManagerService.php b/src/de/RaumZeitLabor/PartDB2/Part/PartManagerService.php @@ -51,6 +51,7 @@ class PartManagerService extends Service { $aParameters["storagelocation"] = $this->getParameter("storagelocation"); $aParameters["footprint"] = $this->getParameter("footprint"); $aParameters["comment"] = $this->getParameter("comment"); + $aParameters["manufacturer"] = $this->getParameter("manufacturer"); PartManager::getInstance()->addOrUpdatePart($aParameters); diff --git a/src/de/RaumZeitLabor/PartDB2/PartDB2.php b/src/de/RaumZeitLabor/PartDB2/PartDB2.php @@ -156,7 +156,8 @@ class PartDB2 { PartDB2::getEM()->getClassMetadata('de\RaumZeitLabor\PartDB2\Category\Category'), PartDB2::getEM()->getClassMetadata('de\RaumZeitLabor\PartDB2\Part\Part'), PartDB2::getEM()->getClassMetadata('de\RaumZeitLabor\PartDB2\StorageLocation\StorageLocation'), - PartDB2::getEM()->getClassMetadata('de\RaumZeitLabor\PartDB2\Stock\StockEntry') + PartDB2::getEM()->getClassMetadata('de\RaumZeitLabor\PartDB2\Stock\StockEntry'), + PartDB2::getEM()->getClassMetadata('de\RaumZeitLabor\PartDB2\Manufacturer\Manufacturer') ); return $classes;