Blog

How-To

Die Standard-Mengeneinheit in OpenERP/Odoo

Viele Verhaltensweisen in OpenERP/Odoo lassen sich an die individuellen Bedürfnisse des Anwenders anpassen. Oft kann schon mit kleinen Änderungen das ERP-System schneller und fehlerfreier bedient werden. In OpenERP/Odoo gibt es von Haus aus keine Möglichkeit die standardmäßig verwendete Mengeneinheit zu konfigurieren; es wird immer die zuerst in der Datenbank gespeicherte herangezogen: Einheit(en). Diese fehlende Flexibilität kann mit unserer Erweiterung „Product Default UoM“ nachgerüstet werden.

product-default-uom-configuration

Screenshot 1: Die Standard-Mengeneinheit kann per Drop-Down-Menü festgelegt werden.

Über ein Konfigurationsmenü kann die gewünschte Mengeneinheit festgelegt werden. Diese ist dann beispielsweise beim Anlegen eines neuen Produktes schon vorausgewählt.

product-default-uom-newproduct

Screenshot 2: Die neue Standard-Mengeneinheit ist beim Anlegen eines Produkt vorausgewählt.

Technisch wird das ganze realisiert, indem die relevanten Datenmodelle (product.template und sale.order.line) so überladen werden, dass sie den Standardwert für Mengeneinheiten aus einem Systemparameter „product.default_uom“ beziehen. Auf solch einen Systemparameter, der immer ein String ist, kann man in einem Model mittels

 self.pool.get("ir.config_parameter").get_param(cr, uid, "product.default_uom")

zugreifen. Solch ein Parameter kann zwar über das Menü Einstellungen > Technisch > Parameter > Systemparameter verwaltet werden; dies ist jedoch für den Endanwender nicht komfortabel. Um eine Konfigurationsmöglichkeit per Drop-Down-Auswahl (wie oben in Screenshot 1 gezeigt) zu erhalten, muss man eines der Konfigurations-Models überladen. Für die Standard-Mengeneinheit passt sale.config.settings am besten. Das überladende Model benötigt ein Feld, das dem zu konfigurierenden Wert entspricht. In diesem Fall ist es ein fields.many2one(‚product.uom‘), da es sich um eine Mengeneinheit handelt. Zusätzlich zum Feld (hier product_default_uom) benötigt man noch zwei Methoden get_default_product_default_uom und set_product_default_uom. Diese diesen als Schnittstelle zwischen dem Systemparameter, der immer ein String ist, und dem Konfigurationseintrag, der vom Typ Mengeneinheit ist.

from openerp.osv import fields, osv

class sale_configuration(osv.TransientModel):
    _inherit = 'sale.config.settings'

    _columns = {
        'product_default_uom': fields.many2one('product.uom', 'Default Unit of Measure')
    }

    def get_default_product_default_uom(self, cr, uid, ids, context=None):
        product_uom = self.pool.get('product.uom')
        default_id = self.pool.get("ir.config_parameter").get_param(cr, uid, "product.default_uom")
        default_uom = None
        if default_id:
            default_uom = product_uom.browse(cr, uid, int(default_id), context=context)
            if default_uom:
                default_uom = default_uom.id
        return {'product_default_uom' : default_uom }

    def set_product_default_uom(self, cr, uid, ids, context=None):
        config = self.browse(cr, uid, ids)
        config = config and config[0]
        self.pool.get('ir.config_parameter').set_param(cr,uid, 'product.default_uom', str(config.product_default_uom.id))
        return True

Man findet das Modul bei den OpenERP/Odoo Apps:
https://apps.openerp.com/apps/7.0/product_default_uom/
oder als Source:
https://code.launchpad.net/~initos.com/initos.com-openerp-addons/7.0

Falls Sie auch Interesse an OpenERP/Odoo haben oder unsere Expertise für Ihr ERP-Projekt benötigen, dann nehmen Sie mit uns Kontakt auf. Wir helfen Ihnen gerne weiter! Sie erreichen uns entweder telefonisch unter +49 4105 56156-99, per Mail an info@initos.com oder über unser Kontaktformular.

zurück zur Übersicht