Template:RWT Report.py

From Gramps
class DbSummaryReport(Report):

    def __init__(self, database, options_class, user):

        Report.__init__(self, database, options_class, user)

        what_types_option = options_class.menu.get_option_by_name('what_types')
        self.what_types = what_types_option.get_selected()

        self.set_locale(
            options_class.menu.get_option_by_name("trans").get_value())

    def _write_normal_paragraph(self, text):
        self.doc.start_paragraph('DBS-Normal')
        self.doc.write_text(text)
        self.doc.end_paragraph()

    def _write_title_paragraph(self, text):
        self.doc.start_paragraph('DBS-Title')
        self.doc.write_text(text)
        self.doc.end_paragraph()

    def _count(self):
        males = 0
        females = 0
        others = 0
        unkn = 0
        total = 0
        surname_map = {}
        for person in self.database.iter_people():

            if person.get_gender() == Person.MALE:
                males += 1
            elif person.get_gender() == Person.FEMALE:
                females += 1
            elif person.get_gender() == Person.OTHER:
                others += 1
            else:
                unkn += 1
            total += 1

            surname = person.get_primary_name().get_surname()

            if surname in surname_map:
                surname_map[surname] += 1
            else:
                surname_map[surname] = 1

        slist = []
        for key in surname_map.keys():
            slist.append((surname_map[key], key))
        slist.sort(reverse=True)
        return (males, females, others, unkn, total, slist)

    def write_report(self):

        males, females, others, unkn, total, slist = self._count()

        self._write_title_paragraph(self._("Database Summary Report"))

        if _('Males') in self.what_types:
            self._write_normal_paragraph(self._('Males: %d') % males)

        if _('Females') in self.what_types:
            self._write_normal_paragraph(self._('Females: %d') % females)

        if _('Unknown gender') in self.what_types:
            self._write_normal_paragraph(
                self._("Individuals with unknown gender: %d") % unkn)

        if _('Other') in self.what_types:
            self._write_normal_paragraph(
                self._("Individuals with other gender: %d") % others)

        self._write_normal_paragraph(
            self._("Number of individuals: %d") % total)

        self._write_normal_paragraph(
            self._('Total unique surnames') + ': %d' % len(slist))

        top_surnames = (', '.join([s[1] for s in slist[:10]]))
        self._write_normal_paragraph(
            self._('Top Surnames') + ' : %s' % top_surnames)