changeset 8c9ccb68fdf9 in modules/party_relationship:default
details: 
https://hg.tryton.org/modules/party_relationship?cmd=changeset&node=8c9ccb68fdf9
description:
        Move distance definition into party module

        issue10104
        review343621004
diffstat:

 __init__.py |   1 -
 party.py    |  58 ++++++++++------------------------------------------------
 2 files changed, 10 insertions(+), 49 deletions(-)

diffs (103 lines):

diff -r b4b6d7123a56 -r 8c9ccb68fdf9 __init__.py
--- a/__init__.py       Sat Feb 27 18:16:28 2021 +0100
+++ b/__init__.py       Wed Mar 24 21:38:29 2021 +0100
@@ -10,5 +10,4 @@
         party.Relation,
         party.RelationAll,
         party.Party,
-        party.ContactMechanism,
         module='party_relationship', type_='model')
diff -r b4b6d7123a56 -r 8c9ccb68fdf9 party.py
--- a/party.py  Sat Feb 27 18:16:28 2021 +0100
+++ b/party.py  Wed Mar 24 21:38:29 2021 +0100
@@ -3,7 +3,7 @@
 import json
 from functools import partial
 
-from sql import Union, As, Column, Null, Literal, With, Select
+from sql import Union, As, Column, Null, Literal, With
 from sql.aggregate import Min
 
 from trytond.config import config
@@ -223,12 +223,6 @@
     __name__ = 'party.party'
 
     relations = fields.One2Many('party.relation.all', 'from_', 'Relations')
-    distance = fields.Function(fields.Integer('Distance'), 'get_distance')
-
-    @classmethod
-    def __setup__(cls):
-        super().__setup__()
-        cls._order.insert(0, ('distance', 'ASC NULLS LAST'))
 
     @classmethod
     def _distance_query(cls, usages=None, party=None, depth=None):
@@ -240,6 +234,9 @@
         context = transaction.context
         database = transaction.database
 
+        query = super()._distance_query(
+            usages=usages, party=party, depth=depth)
+
         if usages is None:
             usages = context.get('relation_usages', [])
         if party is None:
@@ -248,7 +245,7 @@
             depth = context.get('depth', default_depth)
 
         if not party:
-            return
+            return query
 
         all_relations = RelationAll.__table__()
 
@@ -288,44 +285,9 @@
                 & (distance.distance < depth)))
         distance.query.all_ = True
 
-        return (distance
-            .select(
-                distance.to, Min(distance.distance).as_('distance'),
-                group_by=[distance.to], with_=[distance])
-            | Select([Literal(party).as_('to'), Literal(0).as_('distance')]))
-
-    @classmethod
-    def order_distance(cls, tables):
-        party, _ = tables[None]
-        key = 'distance'
-        if key not in tables:
-            query = cls._distance_query()
-            if not query:
-                return []
-            join = party.join(query, type_='LEFT',
-                condition=query.to == party.id)
-            tables[key] = {
-                None: (join.right, join.condition),
-                }
-        else:
-            query, _ = tables[key][None]
-        return [query.distance]
-
-    @classmethod
-    def get_distance(cls, parties, name):
-        distances = {p.id: None for p in parties}
-        query = cls._distance_query()
+        relation_distance = distance.select(
+            distance.to, Min(distance.distance).as_('distance'),
+            group_by=[distance.to], with_=[distance])
         if query:
-            cursor = Transaction().connection.cursor()
-            cursor.execute(*query)
-            distances.update(cursor)
-        return distances
-
-
-class ContactMechanism(metaclass=PoolMeta):
-    __name__ = 'party.contact_mechanism'
-
-    @classmethod
-    def __setup__(cls):
-        super().__setup__()
-        cls._order.insert(0, ('party.distance', 'ASC NULLS LAST'))
+            relation_distance |= query
+        return relation_distance

Reply via email to