8943 : Webcal: add an sign that somebody is not alive and make the report nicer

This commit is contained in:
SNoiraud 2015-12-08 18:23:00 +01:00
parent 31bcba8d5d
commit 1021b6d178

View File

@ -8,6 +8,7 @@
# Copyright (C) 2008-2011 Rob G. Healey <robhealey1@gmail.com> # Copyright (C) 2008-2011 Rob G. Healey <robhealey1@gmail.com>
# Copyright (C) 2008 Jason Simanek # Copyright (C) 2008 Jason Simanek
# Copyright (C) 2010 Jakim Friant # Copyright (C) 2010 Jakim Friant
# Copyright (C) 2015 Serge Noiraud
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -259,7 +260,7 @@ class WebCalReport(Report):
config.set('paths.website-directory', config.set('paths.website-directory',
os.path.dirname(self.html_dir) + os.sep) os.path.dirname(self.html_dir) + os.sep)
def add_day_item(self, text, year, month, day, event): def add_day_item(self, text, year, month, day, event, age_at_death, dead_event_date):
""" """
adds birthdays, anniversaries, and holidays to their perspective lists adds birthdays, anniversaries, and holidays to their perspective lists
@ -267,6 +268,8 @@ class WebCalReport(Report):
year, month, day -- date to add the text to year, month, day -- date to add the text to
event -- one of 'BirthDay', 'Anniversary', or 'Holiday' event -- one of 'BirthDay', 'Anniversary', or 'Holiday'
age_at_death -- The age in text. ie : 68 years, 6 months
dead_event_date -- The date of the event used to calculate the age_at_death
""" """
# This may happen for certain "about" dates. # This may happen for certain "about" dates.
@ -289,7 +292,7 @@ class WebCalReport(Report):
else: else:
event_date = Date.EMPTY # Incomplete date.... event_date = Date.EMPTY # Incomplete date....
day_list.append((text, event, event_date)) day_list.append((text, event, event_date, age_at_death, dead_event_date))
month_dict[day] = day_list month_dict[day] = day_list
# determine which dictionary to add it to??? # determine which dictionary to add it to???
@ -313,7 +316,7 @@ class WebCalReport(Report):
for day in range(1, 32): for day in range(1, 32):
holiday_names = holiday_table.get_holidays(month, day) holiday_names = holiday_table.get_holidays(month, day)
for holiday_name in holiday_names: for holiday_name in holiday_names:
self.add_day_item(holiday_name, year, month, day, 'Holiday') self.add_day_item(holiday_name, year, month, day, 'Holiday', None, None)
step() step()
def copy_calendar_files(self): def copy_calendar_files(self):
@ -784,7 +787,7 @@ class WebCalReport(Report):
unordered = Html("ul") unordered = Html("ul")
tcell += unordered tcell += unordered
for nyears, date, text, event in day_list: for nyears, date, text, event, notused, notused in day_list:
unordered += Html("li", text, inline = False unordered += Html("li", text, inline = False
if event == 'Anniversary' else True) if event == 'Anniversary' else True)
@ -995,7 +998,7 @@ class WebCalReport(Report):
# list the events # list the events
ordered = Html("ol") ordered = Html("ol")
content += ordered content += ordered
for nyears, date, text, event in day_list: for nyears, date, text, event, age_at_death, dead_event_date in day_list:
ordered += Html("li", text, inline = False if event == 'Anniversary' else True) ordered += Html("li", text, inline = False if event == 'Anniversary' else True)
# create blank line for stylesheets # create blank line for stylesheets
@ -1094,16 +1097,26 @@ class WebCalReport(Report):
family_list = person.get_family_handle_list() family_list = person.get_family_handle_list()
birth_ref = person.get_birth_ref() birth_ref = person.get_birth_ref()
birth_date = Date.EMPTY birth_date = Date()
if birth_ref: if birth_ref:
birth_event = db.get_event_from_handle(birth_ref.ref) birth_event = db.get_event_from_handle(birth_ref.ref)
birth_date = birth_event.get_date_object() birth_date = birth_event.get_date_object()
death_ref = person.get_death_ref()
person_death = Date()
age_at_death = None
if death_ref and birth_date:
death_event = db.get_event_from_handle(death_ref.ref)
death_date = death_event.get_date_object()
person_death = death_date
if birth_date != Date() and birth_date.is_valid() and death_date:
age_at_death = death_date - birth_date
# determine birthday information??? # determine birthday information???
if (self.birthday and birth_date is not Date.EMPTY and birth_date.is_valid()): if (self.birthday and birth_date is not Date() and birth_date.is_valid()):
birth_date = gregorian(birth_date) birth_date = gregorian(birth_date)
year = birth_date.get_year() or this_year year = birth_date.get_year()
month = birth_date.get_month() month = birth_date.get_month()
day = birth_date.get_day() day = birth_date.get_day()
@ -1142,7 +1155,10 @@ class WebCalReport(Report):
prefix = self.narweb_prefix))) prefix = self.narweb_prefix)))
else: else:
text = short_name text = short_name
self.add_day_item(text, year, month, day, 'Birthday') if age_at_death == None:
self.add_day_item(text, year, month, day, 'Birthday', age_at_death, birth_date)
else:
self.add_day_item(text, year, month, day, 'Birthday', age_at_death, person_death)
# add anniversary if requested # add anniversary if requested
if self.anniv: if self.anniv:
@ -1159,12 +1175,26 @@ class WebCalReport(Report):
if spouse: if spouse:
spouse_name = self.get_name(spouse) spouse_name = self.get_name(spouse)
short_name = self.get_name(person) short_name = self.get_name(person)
death_ref = spouse.get_death_ref()
spouse_death = Date()
if death_ref:
death_event = db.get_event_from_handle(death_ref.ref)
death_date = death_event.get_date_object()
if death_date != Date() and death_date.is_valid():
spouse_death = death_date
first_died = Date()
if person_death == Date():
first_died = spouse_death
elif spouse_death != Date():
first_died = person_death if spouse_death > person_death else spouse_death
else:
first_died = person_death
# will return a marriage event or False if not married any longer # will return a marriage event or False if not married any longer
marriage_event = get_marriage_event(db, fam) marriage_event = get_marriage_event(db, fam)
if marriage_event: if marriage_event:
event_date = marriage_event.get_date_object() event_date = marriage_event.get_date_object()
if event_date is not Date.EMPTY and event_date.is_valid(): if event_date is not Date() and event_date.is_valid():
event_date = gregorian(event_date) event_date = gregorian(event_date)
year = event_date.get_year() year = event_date.get_year()
month = event_date.get_month() month = event_date.get_month()
@ -1172,6 +1202,9 @@ class WebCalReport(Report):
# date to figure if someone is still alive # date to figure if someone is still alive
prob_alive_date = Date(this_year, month, day) prob_alive_date = Date(this_year, month, day)
wedding_age = None
if first_died != Date():
wedding_age = first_died - event_date
if self.link_to_narweb: if self.link_to_narweb:
spouse_name = str(Html("a", spouse_name, spouse_name = str(Html("a", spouse_name,
@ -1183,13 +1216,16 @@ class WebCalReport(Report):
alive1 = probably_alive(person, db, prob_alive_date) alive1 = probably_alive(person, db, prob_alive_date)
alive2 = probably_alive(spouse, db, prob_alive_date) alive2 = probably_alive(spouse, db, prob_alive_date)
if first_died == Date():
first_died = Date(0, 0, 0)
if ((self.alive and alive1 and alive2) or not self.alive): if ((self.alive and alive1 and alive2) or not self.alive):
text = _('%(spouse)s and %(person)s') % { text = _('%(spouse)s and %(person)s') % {
'spouse' : spouse_name, 'spouse' : spouse_name,
'person' : short_name} 'person' : short_name}
self.add_day_item(text, year, month, day, 'Anniversary') self.add_day_item(text, year, month, day, 'Anniversary',
wedding_age, first_died)
def write_footer(self, nr_up): def write_footer(self, nr_up):
""" """
@ -1682,22 +1718,22 @@ def get_day_list(event_date, holiday_list, bday_anniv_list):
################################################################## ##################################################################
# birthday/ anniversary on this day # birthday/ anniversary on this day
# Date.EMPTY signifies an incomplete date for an event. See add_day_item() # Date.EMPTY signifies an incomplete date for an event. See add_day_item()
bday_anniv_list = [(t, e, d) for t, e, d in bday_anniv_list bday_anniv_list = [(t, e, d, n, x) for t, e, d, n, x in bday_anniv_list
if d != Date.EMPTY] if d != Date.EMPTY]
# number of years have to be at least zero # number of years have to be at least zero
bday_anniv_list = [(t, e, d) for t, e, d in bday_anniv_list bday_anniv_list = [(t, e, d, n, x) for t, e, d, n, x in bday_anniv_list
if (event_date.get_year() - d.get_year()) >= 0] if (event_date.get_year() - d.get_year()) >= 0]
# a holiday # a holiday
# zero will force holidays to be first in list # zero will force holidays to be first in list
nyears = 0 nyears = 0
for text, event, date in holiday_list: for text, event, date, notused, notused in holiday_list:
day_list.append((nyears, date, text, event)) day_list.append((nyears, date, text, event, notused, notused))
# birthday and anniversary list # birthday and anniversary list
for text, event, date in bday_anniv_list: for text, event, date, age_at_death, dead_event_date in bday_anniv_list:
# number of years married, ex: 10 # number of years married, ex: 10
nyears = (event_date.get_year() - date.get_year()) nyears = (event_date.get_year() - date.get_year())
@ -1709,12 +1745,18 @@ def get_day_list(event_date, holiday_list, bday_anniv_list):
# a birthday # a birthday
if event == 'Birthday': if event == 'Birthday':
txt_str = (text + ', <em>' if age_at_death is not None:
# TRANSLATORS: expands to smth like "12 years old", death_symbol = "&#10014;" # latin cross for html code
# where "12 years" is already localized to your language mess = _("Died %(death_date)s.") % { 'death_date' : dead_event_date }
+ (_('%s old') % str(age_str) age = ", <font size='+1' ><b>%s</b></font> <em>%s (%s)" % (death_symbol, mess, age_at_death)
if nyears else _('birth')) else:
+ '</em>') # TRANSLATORS: expands to smth like "12 years old",
# where "12 years" is already localized to your language
age = ', <em>'
date_y = date.get_year()
age += _('%s old') % str(age_str) if date_y != 0 else \
_("Born %(birth_date)s.") % {'birth_date' : dead_event_date }
txt_str = (text + age + '</em>')
# an anniversary # an anniversary
elif event == "Anniversary": elif event == "Anniversary":
@ -1723,14 +1765,25 @@ def get_day_list(event_date, holiday_list, bday_anniv_list):
txt_str = _('%(couple)s, <em>wedding</em>') % { txt_str = _('%(couple)s, <em>wedding</em>') % {
'couple' : text} 'couple' : text}
else: else:
years_str = '<em>%s</em>' % nyears if age_at_death is not None:
# translators: leave all/any {...} untranslated age = '%s %s' % ( _("Married"), age_at_death)
txt_str = ngettext("{couple}, {years} year anniversary", txt_str = "%s, <em>%s" % (text, age)
"{couple}, {years} year anniversary", if isinstance(dead_event_date, Date) and dead_event_date.get_year() > 0:
nyears).format(couple=text, years=years_str) txt_str += " ("
txt_str += str(dead_event_date)
txt_str += ")</em>"
else:
txt_str += "</em>"
else:
age = '<em>%s' % nyears
# translators: leave all/any {...} untranslated
txt_str = ngettext("{couple}, {years} year anniversary",
"{couple}, {years} year anniversary",
nyears).format(couple=text, years=age)
txt_str += "</em>"
txt_str = Html('span', txt_str, class_ = "yearsmarried") txt_str = Html('span', txt_str, class_ = "yearsmarried")
day_list.append((nyears, date, txt_str, event)) day_list.append((nyears, date, txt_str, event, age_at_death, dead_event_date))
# sort them based on number of years # sort them based on number of years
# holidays will always be on top of event list # holidays will always be on top of event list