summaryrefslogtreecommitdiff
path: root/ishtar_common/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r--ishtar_common/utils.py39
1 files changed, 31 insertions, 8 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 4f8dce853..ebfbaaa77 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -1091,7 +1091,7 @@ def create_default_areas(models=None, verbose=False):
def get_relations_for_graph(rel_model, obj_pk, above_relations=None,
equal_relations=None, treated=None, styles=None,
- render_above=True, render_bellow=True):
+ render_above=True, render_bellow=True, full=False):
"""
Get all above and equal relations of an object (get all child and parent
relations)
@@ -1103,6 +1103,7 @@ def get_relations_for_graph(rel_model, obj_pk, above_relations=None,
:param styles: current styles
:param render_above: render relation above the current object
:param render_bellow: render relation bellow the current object
+ :param full: render the full graph
:return: above and equal relations list (each containing lists of two
members)
"""
@@ -1136,14 +1137,18 @@ def get_relations_for_graph(rel_model, obj_pk, above_relations=None,
logical_relation = relation['relation_type__logical_relation']
left_record = relation['left_record_id']
right_record = relation['right_record_id']
+ is_above, is_bellow = False, False
+
if not logical_relation:
continue
elif get_bellow and logical_relation == 'above' and \
(left_record, right_record) not in above_relations:
above_relations.append((left_record, right_record))
+ is_bellow = True
elif get_above and logical_relation == 'bellow' and \
(right_record, left_record) not in above_relations:
above_relations.append((right_record, left_record))
+ is_above = True
elif logical_relation == 'equal' and \
(right_record, left_record) not in equal_relations and \
(left_record, right_record) not in equal_relations:
@@ -1156,11 +1161,29 @@ def get_relations_for_graph(rel_model, obj_pk, above_relations=None,
else:
other_record = right_record
- ar, er, substyles = get_relations_for_graph(
- rel_model, other_record, above_relations, equal_relations,
- treated, styles, render_above=render_above,
- render_bellow=render_bellow
- )
+ render_bellow = False
+ if get_above and get_bellow and not full and (is_bellow or
+ is_above):
+ if is_above:
+ ar, er, substyles = get_relations_for_graph(
+ rel_model, other_record, above_relations,
+ equal_relations, treated, styles,
+ render_above=True,
+ render_bellow=False
+ )
+ elif is_bellow:
+ ar, er, substyles = get_relations_for_graph(
+ rel_model, other_record, above_relations,
+ equal_relations, treated, styles,
+ render_above=False,
+ render_bellow=True
+ )
+ else:
+ ar, er, substyles = get_relations_for_graph(
+ rel_model, other_record, above_relations, equal_relations,
+ treated, styles, render_above=render_above,
+ render_bellow=render_bellow, full=full
+ )
styles.update(substyles)
error_style = "color=red"
for r in ar:
@@ -1192,7 +1215,7 @@ def get_relations_for_graph(rel_model, obj_pk, above_relations=None,
def generate_relation_graph(obj, highlight_current=True,
render_above=True, render_bellow=True,
- debug=False):
+ full=False, debug=False):
if not settings.DOT_BINARY:
return
@@ -1202,7 +1225,7 @@ def generate_relation_graph(obj, highlight_current=True,
# get relations
above_relations, equal_relations, styles = get_relations_for_graph(
rel_model, obj.pk, render_above=render_above,
- render_bellow=render_bellow)
+ render_bellow=render_bellow, full=full)
if not above_relations and not equal_relations:
obj.relation_image = None
obj.save()