I believe that all Person, Name, and Surname editing is done

svn: r19637
This commit is contained in:
Doug Blank 2012-05-24 17:22:14 +00:00
parent eadc089835
commit fe01467480
4 changed files with 141 additions and 69 deletions

View File

@ -17,7 +17,7 @@
{% endfilter %}
<h3>{{person|make_name:user}} [{{person.gramps_id}}]</h3>
<h3>{{nameform.model|make_name:user}} [{{person.gramps_id}}]</h3>
<div id="summaryarea">
<table class="infolist" style="width:90%;"> {% comment %} 4 cols {% endcomment %}
<tbody>
@ -54,11 +54,7 @@
</tr>
<tr>
<td class="ColumnAttribute">{{nameform.preferred.label}}:</td>
{% if nameform.model.preferred %}
<td class="ColumnValue" id="data">True</td>
{% else %}
<td class="ColumnValue" id="data">{% render nameform.preferred user action %}</td>
{% endif %}
<td class="ColumnAttribute">{{nameform.private.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.private user action %}</td>
</tr>

View File

@ -625,14 +625,12 @@ class Name(DateObject, SecondaryObject):
person = models.ForeignKey("Person")
_sanitized = False
def get_primary_surname(self):
try:
return self.surname_set.get(primary=True).surname
except:
return ""
def __unicode__(self):
return "%s, %s" % (self.get_primary_surname(),
try:
surname = self.surname_set.get(primary=True)
except:
surname = "[No primary surname]"
return "%s, %s" % (surname,
self.first_name)
@staticmethod
def get_dummy():

View File

@ -169,19 +169,78 @@ def set_date(obj):
obj.day1, obj.month1, obj.year1, obj.slash1 = 0, 0, 0, 0
obj.day2, obj.month2, obj.year2, obj.slash2 = 0, 0, 0, 0
def check_order(person):
"""
Check for proper ordering 1..., and for a preferred name.
"""
order = 1
preferred = False
for name in person.name_set.all().order_by("order"):
if name.preferred:
preferred = True
if name.order != order:
name.order = order
name.save()
order += 1
if not preferred:
name = person.name_set.get(order=1)
name.preferred = True
name.save()
def check_primary(surname, surnames):
"""
Check for a proper primary surname.
"""
if surname.primary:
# then all reast should not be:
# then all rest should not be:
for s in surnames:
if s.primary:
s.primary = False
s.save()
else:
# then one of them should be
if not any([s.primary for s in surnames]):
surnames[0].primary = True
surnames[0].save()
ok = False
for s in surnames:
if s.id != surname.id:
if s.primary:
ok = True
break
else:
s.primary = False
s.save()
ok = True
break
if not ok:
name.primary = True
def check_preferred(name, person):
"""
Check for a proper preferred name.
"""
names = []
if person:
names = person.name_set.all()
if name.preferred:
# then all reast should not be:
for s in names:
if s.preferred and s.id != name.id:
s.preferred = False
s.save()
else:
# then one of them should be
ok = False
for s in names:
if s.id != name.id:
if s.preferred:
ok = True
break
else:
s.preferred = False
s.save()
ok = True
break
if not ok:
name.preferred = True
def process_surname(request, handle, order, sorder, action="view"):
# /sdjhgsdjhdhgsd/name/1/surname/1 (view)
@ -235,8 +294,8 @@ def process_surname(request, handle, order, sorder, action="view"):
sf.model = surname
if sf.is_valid():
surname.prefix = ssf.cleaned_data["prefix"] if sf.cleaned_data["prefix"] != " prefix " else ""
surname = sf.save(commit=False)
check_primary(surname, surnames)
sf.save()
return redirect("/person/%s/name/%s/surname/%s" %
(person.handle, name.order, sorder))
action = "edit"
@ -247,8 +306,9 @@ def process_surname(request, handle, order, sorder, action="view"):
sf.model = surname
if sf.is_valid():
surname.prefix = ssf.cleaned_data["prefix"] if sf.cleaned_data["prefix"] != " prefix " else ""
surname = sf.save(commit=False)
check_primary(surname, name.surname_set.all().exclude(order=surname.order))
sf.save()
surname.save()
return redirect("/person/%s/name/%s/surname/%s" %
(person.handle, name.order, sorder))
action = "edit"
@ -274,40 +334,31 @@ def process_surname(request, handle, order, sorder, action="view"):
return render_to_response(view_template, context)
def process_name(request, handle, order, action="view"):
## FIXME: can't add second name
if order == "add":
order = 0
action = "add"
if request.POST.has_key("action"):
action = request.POST.get("action")
### Process action:
if action == "view":
pf, nf, sf, person = get_person_forms(handle)
pf, nf, sf, person = get_person_forms(handle, order=order)
name = nf.model
elif action == "edit":
pf, nf, sf, person = get_person_forms(handle)
pf, nf, sf, person = get_person_forms(handle, order=order)
name = nf.model
elif action == "delete":
person = Person.objects.get(handle=handle)
names = person.name_set.all().order_by("order")
if names.count() > 1:
name_to_delete = names[0]
was_preferred = name_to_delete.preferred
name_to_delete.delete()
names = person.name_set.all().order_by("order")
for count in range(names[1:].count()):
if was_preferred:
names[count].preferred = True
was_preferred = False
names[count].order = count
names[count].save()
nf = NameForm()
name = Name()
nf.model = name
action = "back"
name = person.name_set.filter(order=order)
names = person.name_set.all()
if len(names) > 1:
name.delete()
check_order(person)
else:
request.user.message_set.create(message = "Can't delete only name.")
return redirect("/person/%s" % person.handle)
elif action == "add": # add name
person = Person.objects.get(handle=handle)
name = Name(person=person,
preferred=False,
display_as=NameFormatType.objects.get(val=NameFormatType._DEFAULT[0]),
sort_as=NameFormatType.objects.get(val=NameFormatType._DEFAULT[0]),
name_type=NameType.objects.get(val=NameType._DEFAULT[0]))
@ -319,35 +370,35 @@ def process_name(request, handle, order, action="view"):
name_origin_type=NameOriginType.objects.get(val=NameOriginType._DEFAULT[0]))
sf = SurnameForm(request.POST, instance=surname)
elif action == "create":
# look up old data:
# make new data
person = Person.objects.get(handle=handle)
name = Name(preferred=False)
name.person = person
next_order = max([name.order for name in person.name_set.all()]) + 1
surname = Surname(name=name,
primary=True,
order=next_order,
name_origin_type=NameOriginType.objects.get(val=NameOriginType._DEFAULT[0]))
# combine with user data:
pf = PersonForm(request.POST, instance=person)
pf.model = person
nf = NameForm(request.POST, instance=name)
name.id = None # FIXME: why did this get set to an existing name? Should be new.
name.preferred = False
nf.model = name
sf = SurnameForm(request.POST, instance=surname)
sf.model = surname
if nf.is_valid() and sf.is_valid():
# name.preferred and surname.primary get set False in the above is_valid()
# person = pf.save()
# Process data:
name = nf.save(commit=False)
name.person = person
name = nf.save()
# Manually set any data:
name.suffix = nf.cleaned_data["suffix"] if nf.cleaned_data["suffix"] != " suffix " else ""
name.preferred = False # FIXME: why is this False?
name.order = next_order
name.save()
# Process data:
surname.name = name
surname = sf.save(commit=False)
surname.name = name
# Manually set any data:
surname.prefix = sf.cleaned_data["prefix"] if sf.cleaned_data["prefix"] != " prefix " else ""
surname.primary = True # FIXME: why is this False?
@ -361,7 +412,7 @@ def process_name(request, handle, order, action="view"):
elif action == "save":
# look up old data:
person = Person.objects.get(handle=handle)
oldname = person.name_set.get(preferred=True)
oldname = person.name_set.get(order=order)
oldsurname = oldname.surname_set.get(primary=True)
# combine with user data:
pf = PersonForm(request.POST, instance=person)
@ -378,6 +429,7 @@ def process_name(request, handle, order, action="view"):
# Manually set any data:
name.suffix = nf.cleaned_data["suffix"] if nf.cleaned_data["suffix"] != " suffix " else ""
name.preferred = True # FIXME: why is this False?
check_preferred(name, person)
name.save()
# Process data:
oldsurname.name = name
@ -403,7 +455,7 @@ def process_name(request, handle, order, action="view"):
context["object"] = person
context["nameform"] = nf
context["surnameform"] = sf
context["order"] = name.order
context["order"] = order
context["next"] = "/person/%s/name/%d" % (person.handle, name.order)
view_template = "view_name_detail.html"
return render_to_response(view_template, context)
@ -1015,6 +1067,7 @@ def process_person(request, context, handle, action): # view, edit, save
# Manually set any data:
name.suffix = nf.cleaned_data["suffix"] if nf.cleaned_data["suffix"] != " suffix " else ""
name.preferred = True # FIXME: why is this False?
check_preferred(name, person)
name.save()
# Process data:
surname.name = name
@ -1056,20 +1109,27 @@ def process_person(request, context, handle, action): # view, edit, save
context["object"] = person
context["next"] = "/person/%s" % person.handle
def get_person_forms(handle, protect=False, empty=False):
def get_person_forms(handle, protect=False, empty=False, order=None):
if handle:
person = Person.objects.get(handle=handle)
else:
person = Person()
#person.gramps_id = "I0000" # FIXME: get next ID
## get a name
try:
name = person.name_set.get(preferred=True)
except:
name = Name(person=person, preferred=True,
display_as=NameFormatType.objects.get(val=NameFormatType._DEFAULT[0]),
sort_as=NameFormatType.objects.get(val=NameFormatType._DEFAULT[0]),
name_type=NameType.objects.get(val=NameType._DEFAULT[0]))
name = None
if order is not None:
try:
name = person.name_set.get(order=order)
except:
pass
if name is None:
try:
name = person.name_set.get(preferred=True)
except:
name = Name(person=person, preferred=True,
display_as=NameFormatType.objects.get(val=NameFormatType._DEFAULT[0]),
sort_as=NameFormatType.objects.get(val=NameFormatType._DEFAULT[0]),
name_type=NameType.objects.get(val=NameType._DEFAULT[0]))
## get a surname
try:
surname = name.surname_set.get(primary=True)

View File

@ -290,19 +290,25 @@ def surname_table(obj, user, action, url=None, *args):
order = args[1]
retval = ""
table = Table()
table.columns(_("Surname"),)
table.columns(_("Order"), _("Surname"),)
if user.is_authenticated():
links = []
count = 1
name = obj.name_set.filter(order=order)[0]
for surname in name.surname_set.all():
table.row(surname.surname)
links.append(('URL',
# url is "/person/%s/name/%s/surname"
(url % args) + ("/%s" % count)))
count += 1
table.links(links)
retval += table.get_html()
try:
name = obj.name_set.filter(order=order)[0]
except:
name = None
if name:
links = []
count = 1
for surname in name.surname_set.all():
table.row(str(count), surname.surname)
links.append(('URL',
# url is "/person/%s/name/%s/surname"
(url % args) + ("/%s" % count)))
count += 1
table.links(links)
retval += table.get_html()
else:
retval += "<p id='error'>No such name order = %s</p>" % order
if user.is_superuser and url and action == "view":
retval += make_button(_("Add surname"), (url + "/add") % args)
else:
@ -631,11 +637,19 @@ def render_name(name, user):
if isinstance(name, models.Name):
if not user.is_authenticated():
name.sanitize()
return "%s, %s" % (name.get_primary_surname(), name.first_name)
try:
surname = name.surname_set.get(primary=True)
except:
surname = "[No primary surname]"
return "%s, %s" % (surname, name.first_name)
elif isinstance(name, forms.NameForm):
if not user.is_authenticated():
name.model.sanitize()
return "%s, %s" % (name.model.get_primary_surname(),
try:
surname = name.model.surname_set.get(primary=True)
except:
surname = "[No primary surname]"
return "%s, %s" % (surname,
name.model.first_name)
elif isinstance(name, gen.lib.Person): # name is a gen.lib.Person
person = name
@ -647,7 +661,11 @@ def render_name(name, user):
return "[No preferred name]"
if not user.is_authenticated():
name.sanitize()
return "%s, %s" % (name.get_primary_surname(), name.first_name)
try:
surname = name.surname_set.get(primary=True)
except:
surname = "[No primary surname]"
return "%s, %s" % (surname, name.first_name)
elif isinstance(name, models.Person): # django person
person = name
try: