From 5bff53542899545447ef56556c2a12437623a7d9 Mon Sep 17 00:00:00 2001 From: Doug Blank Date: Tue, 24 Jul 2012 20:34:10 +0000 Subject: [PATCH] New functionality: remove, and re-order children from/in family svn: r20071 --- src/webapp/grampsdb/views.py | 52 ++++++++++++++++++++++++++++++++++++ src/webapp/urls.py | 1 + src/webapp/utils.py | 2 +- 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/webapp/grampsdb/views.py b/src/webapp/grampsdb/views.py index de3a94838..dc6c8dbe7 100644 --- a/src/webapp/grampsdb/views.py +++ b/src/webapp/grampsdb/views.py @@ -1199,6 +1199,58 @@ def safe_int(num): except: return -1 +def process_child(request, handle, act, child): + """ + handle - Family handle + act - 'remove', 'up', or 'down' + child - child number + """ + from webapp.grampsdb.forms import FamilyForm + context = RequestContext(request) + context["view"] = "family" + context["tview"] = _("Family") + context["tviews"] = _("Familes") + family = Family.objects.get(handle=handle) + obj_type = ContentType.objects.get_for_model(family) + childrefs = dji.ChildRef.filter(object_id=family.id, + object_type=obj_type).order_by("order") + + if act == "remove": + person = childrefs[int(child) - 1].ref_object + [f.delete() for f in person.parent_families.filter(handle=handle)] + childrefs[int(child) - 1].delete() + dji.rebuild_cache(person) + dji.rebuild_cache(family) + elif act == "up": + if int(child) >= 2: + for ref in childrefs: + if ref.order == int(child): + ref.order = ref.order - 1 + elif ref.order == int(child) - 1: + ref.order = ref.order + 1 + else: + ref.order = ref.order + for ref in childrefs: + ref.save() + dji.rebuild_cache(family) + elif act == "down": + if int(child) <= len(childrefs) - 1: + childrefs[int(child) - 1].order = int(child) + 1 + childrefs[int(child)].order = int(child) + childrefs[int(child) - 1].save() + childrefs[int(child)].save() + dji.rebuild_cache(family) + else: + raise Exception("invalid child action: %s" % act) + familyform = FamilyForm(instance=family) + familyform.model = family + context["familyform"] = familyform + context["object"] = family + context["family"] = family + context["action"] = "view" + view_template = "view_family_detail.html" + return render_to_response(view_template, context) + def process_reference(request, ref_by, handle, ref_to, order): # FIXME: can I make this work for all? context = RequestContext(request) diff --git a/src/webapp/urls.py b/src/webapp/urls.py index 21210481b..ab1d07fa5 100644 --- a/src/webapp/urls.py +++ b/src/webapp/urls.py @@ -91,6 +91,7 @@ urlpatterns += patterns('', process_surname), (r'^person/(?P(\w+))/name/(?P(\w+))/surname/(?P(\w+))/(?P(\w+))$', process_surname), + (r'^family/(?P(\w+))/(?P(\w+))/child/(?P(\w+))$', process_child), ) # In urls: diff --git a/src/webapp/utils.py b/src/webapp/utils.py index cf6ff76cd..d1a91d6fc 100644 --- a/src/webapp/utils.py +++ b/src/webapp/utils.py @@ -859,7 +859,7 @@ def children_table(obj, user, act, url=None, *args): for childref in childrefs: child = childref.ref_object if user.is_authenticated(): - table.row(Link("[[x%d]][[^%d]][[v%d]]" % (count, count, count)), + table.row(Link("[[x%d]][[^%d]][[v%d]]" % (count, count, count)), str(count), "[%s]" % child.gramps_id, render_name(child, user),