Möglichkeit die Attributwerte einer Produktvariante im Nachhinein zu pflegen

Dieser Artikel beschreibt eine Möglichkeit, wie man die Attributwerte einer Produktvariante nachträglich pflegen kann. Um die Thematik nachvollziehen zu können, wird nachfolgend zunächst die Problemstellung näher erläutert.

bisheriges Problem: 

Sind bei einem Produkt Attributwerte gesetzt, so erstellt das Open Source ERP System Odoo aus allen möglichen Kombinationen der Attributwerte Produktvarianten. Sollte nun eine dieser Produktvarianten nicht im Produkt-Sortiment vorhanden sein, so kann diese Produktvariante durch den Nutzer gelöscht werden. Was ist allerdings, wenn diese zuvor gelöschte Produktvariante zu einem späteren Zeitpunkt doch eine mögliche Kombination darstellt? So muss man bisher die Attribute des Produkts löschen und wieder neu anlegen. Dadurch legt Odoo wiederum alle möglichen Kombinationen der Attributwerte als Produktvarianten an. Nachteil: Nun müssen alle Artikelnummern neu und von Hand eingetragen werden. Grund hierfür ist, dass das Open Source ERP System Odoo alle Kombinationen neu anlegt.

 

Zunächst einmal zeigt folgende Abbildung wie die Formansicht vor der Anpassung angezeigt wurde. Hier wird deutlich, dass es keine Möglichkeit gab im Nachhinein die Attributwerte einer Variante zu pflegen. Dies lag daran, dass durch das Equitania-Paket (via X-Path) die Anzeige der Produktattributwerte ersetzt worden sind. Außerdem war das Feld, welches die Attributwerte anzeigt, das Feld attribute_value_ids, nur als readonly definiert und konnte somit nicht bearbeitet werden. 

vorher:

Durch die entsprechenden Anpassungen im Equitania-Modul können nun die Produktattributwerte nachträglich neu gesetzt werden, allerdings gab es hier noch das Problem, dass die durch die Aktion des "Duplizierend" neu-erstellte Produktvariante nicht zu dem richtigen Produkt-Template zugeordnet wurde. 

nachher

Um dieses Problem zu lösen, musste die copy-Funktion dementsprechend untersucht werden, um eine Möglichkeit zu finden, dass die neu-erstellte Produktvariante dem richtigen Produkt-Template zugeordnet wird. Das nachfolgende Code-Snippet zeigt die copy-Funktion des Kerns vom Open Source ERP System Odoo. Hier fällt auf, dass eine Variante erst dann bei einem Kopiervorgang dem gleichen Produkt-Template zugeordnet wird, wie die kopierte Produktvariante, wenn der Kontext den Key 'Variante' enthält. 

myodoo-server/addons/product/product.py:

def copy(self, cr, uid, id, default=None, context=None):
        if context is None:
            context={}

        if default is None:
            default = {}

        product = self.browse(cr, uid, id, context)
        if context.get('variant'):
            # if we copy a variant or create one, we keep the same template
            default['product_tmpl_id'] = product.product_tmpl_id.id
        elif 'name' not in default:
            default['name'] = _("%s (copy)") % (product.name,)

        return super(product_product, self).copy(cr, uid, id, default=default, context=context)


Um diese Aktion bei einem Kopiervorgang auszulösen, musste in der entsprechenden View, der Kontext dauerhaft auf "variant":True (siehe product_view.xml) gesetzt werden. Durch diese Anpassung wird schlussendlich die Kopie einer Produktvariante dem gleichen Produkt-Template zugeordnet wie die Produktvariante, die kopiert wurde.

equitania/product_view.xml:

<record id="product.product_normal_action_sell" model="ir.actions.act_window">
            <field name="name">Product Variants</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">product.product</field>
            <field name="view_mode">kanban,tree,form</field>
            <field name="view_type">form</field>
            <field name="context">{"search_default_filter_to_sell": 1, "variant": True}</field>
            <field name="view_id" ref="product.product_product_tree_view"/>
            <field name="search_view_id" ref="product.product_search_form_view"/>
            <field name="help" type="html">
              <p class="oe_view_nocontent_create">
                Click to define a new product.
              </p><p>
                You must define a product for everything you sell, whether it's
                a physical product, a consumable or a service you offer to
                customers.
              </p><p>
                The product form contains information to simplify the sale
                process: price, notes in the quotation, accounting data,
                procurement methods, etc.
              </p>
            </field>
</record>


Zusammenfassung:

Dieser Artikel beschreibt die Möglichkeit im Nachhinein Attributwerte einer Produktvariante zu pflegen. Diese Möglichkeit erleichtert das nachträgliche Hinzufügen von zu einem späteren Zeitpunkt möglichen Produktvarianten.

 

 

Verwandte Artikel