OpenERP/Odoo – Sortieren nach Prozess-Status

veröffentlicht in Software Engineering am 15. Aug. 2013 Tags: , , ,

Nutzt man in OpenERP/Odoo die Listenansicht, kann man diese auch nach dem Prozess-Status sortieren. Ein Problem, welches dabei auftritt, ist, dass das Feld nach Namen des Status und nicht nach der Reihenfolge des Status im Prozess sortiert wird. Das gleiche Problem tritt auf, wenn man die Standardsortierung anpassen will. Die Standardsortierung wird im Modell durch folgenden Ausdruck geändert.

_order = "state ASC"

Da OpenERP/Odoo die Sortierfunktion der Datenbank verwendet, benötigt man einen komplexeren Ausdruck für den SQL-Query. Dies lässt sich aber nicht in das _order -Feld schreiben, weil der ORM-Mapper von OpenERP/Odoo nur das Sortieren nach einfachen Feldern, aber keine Datenbankausdrücke an dieser Stelle, erlaubt.

Die Lösung für das Modell in unserem Beispiel „Angebot (sale_order)“ ist, die Funktion des ORM-Mappers zu überschreiben.

Folgender Code-Schnipsel löst das Problem und jedes Mal, wenn nach dem Status des Prozesses sortiert wird, wird die Reihenfolge gewählt, mit dem die Status im Modell definiert sind.

def _generate_order_by(self, order_spec, query):
        state = self._columns['state']
        my_order = "CASE "
        i = 0
        for stat in state.selection:
            my_order += "WHEN %s.state='%s' THEN %i " % (self._table,stat[0], i)
            i += 1   
        my_order += "END " 
        if order_spec and order_spec.find('state ') >= 0:
            order_by = super(sale_order, self)._generate_order_by(order_spec, query)
            return order_by.replace('"%s"."state" ' % self._table,my_order)
        else:
            my_order += "ASC "        
        if order_spec:
            return super(sale_order, self)._generate_order_by(order_spec, query) + ", " + my_order
        return " order by " + my_order

Dieser Beitrag wurde als Erstes auf help.openerp.com diskutiert und dies ist die generische Version.

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 unter der Telefonnummer +49 (0)4105 5615699 oder per Mail an {This email is obscured. Your must have javascript enabled to see it}.

Über Markus Schneider

Als Analytiker und Informatiker ist Markus Schneider Experte für Shop- und ERP-Systeme. Dabei setzt er sein fundiertes Wissen insbesondere im Bereich der Open Source Software ein und kann verschiedene
Anwendungssysteme, z.B. Oxid eSales, OTRS, und Solr Suche, darin integrieren. Auch mit der Onlineshopsoftware Magento kennt sich Herr Schneider bestens aus. Zudem greift er auf gesammelte Erfahrungen unterschiedlicher Systeme wie Sage, SAP und speziell OpenERP / Odoo zurück.

Ein Kommentar zu 'OpenERP/Odoo – Sortieren nach Prozess-Status'

Kommentare als RSS

  1. yves sagt,

    am 10. Sep. 2013

    super – besten Dank. Da habe ich schon lange nach einer Lösung gesucht