Blog

Technologie

OpenERP/Odoo – Sortieren nach Prozess-Status

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 [hide_email info@initos.com].

zurück zur Übersicht