Beispiel #1
0
 def render_indicia_publisher(self, record):
     from apps.gcd.templatetags.display import absolute_url,\
                                               show_indicia_pub
     from apps.gcd.templatetags.credits import get_country_flag
     return_val = show_indicia_pub(record)
     if record.series.publisher != self.brand.parent:
         return_val += " (%s%s)" % (get_country_flag(
             record.series.publisher.country),
                                    absolute_url(record.series.publisher))
     return mark_safe(return_val)
Beispiel #2
0
 def _show_feature_logo(self, story):
     from apps.gcd.templatetags.display import absolute_url
     first = True
     features = ''
     for feature in story.feature_logo.all():
         if first:
             first = False
         else:
             features += '; '
         features += absolute_url(feature, feature.logo)
     return mark_safe(features)
Beispiel #3
0
def field_value(revision, field):
    value = getattr(revision, field)
    if field in ['is_surrogate', 'no_volume', 'display_volume_with_number',
                 'no_brand', 'page_count_uncertain', 'title_inferred',
                 'no_barcode', 'no_indicia_frequency', 'no_isbn',
                 'year_began_uncertain', 'year_ended_uncertain',
                 'on_sale_date_uncertain', 'is_comics_publication']:
        return yesno(value, 'Yes,No')
    elif field in ['is_current']:
        res_holder_display = ''
        if revision.previous():
            reservation = revision.source.get_ongoing_reservation()
            if revision.previous().is_current and not value and reservation:
                res_holder = reservation.indexer
                res_holder_display = ' (ongoing reservation held by %s %s)' % \
                  (res_holder.first_name, res_holder.last_name)
        return yesno(value, 'Yes,No') + res_holder_display
    elif field in ['publisher', 'indicia_publisher', 'series',
                   'origin_issue', 'target_issue']:
        return absolute_url(value)
    elif field in ['origin', 'target']:
        return value.full_name_with_link()
    elif field == 'brand':
        if value and value.emblem:
            return mark_safe('<img src="' + value.emblem.icon.url + '"> ' \
                             + absolute_url(value))
        return absolute_url(value)
    elif field in ['notes', 'tracking_notes', 'publication_notes',
                   'characters', 'synopsis']:
        return linebreaksbr(value)
    elif field == 'reprint_notes':
        reprint = ''
        if value.strip() != '':
            for string in split_reprint_string(value):
                string = string.strip()
                reprint += '<li> ' + esc(string) + ' </li>'
            if reprint != '':
                reprint = '<ul>' + reprint + '</ul>'
        return mark_safe(reprint)
    elif field in ['url']:
        return urlize(value)
    elif field in ['indicia_pub_not_printed']:
        return yesno(value, 'Not Printed,Printed')
    elif field == 'group':
        brand_groups = ''
        for brand in value.all():
            brand_groups += absolute_url(brand) + '; '
        if brand_groups:
            brand_groups = brand_groups[:-2]
        return mark_safe(brand_groups)
    elif field in ['no_editing', 'no_script', 'no_pencils', 'no_inks',
                   'no_colors', 'no_letters']:
        return yesno(value, 'X, ')
    elif field in ['page_count']:
        if revision.source_name == 'issue' and \
           revision.changeset.storyrevisions.count():
            # only calculate total sum for issue not sequences
            total_pages = sum_page_counts(revision.active_stories())
            if revision.variant_of:
                if revision.changeset.issuerevisions.count() > 1:
                    stories = revision.changeset.storyrevisions\
                                      .exclude(issue=revision.issue)
                else:
                    stories = revision.variant_of.active_stories()
                if revision.active_stories().count():
                    # variant has cover sequence, add page counts without cover
                    stories = stories.exclude(sequence_number=0)
                    total_pages += sum_page_counts(stories)
                else:
                    # variant has no extra cover sequence
                    total_pages = sum_page_counts(stories)
            sum_story_pages = format_page_count(total_pages)

            return u'%s (note: total sum of story page counts is %s)' % \
                   (format_page_count(value), sum_story_pages)
        return format_page_count(value)
    elif field == 'isbn':
        if value:
            if validated_isbn(value):
                return u'%s (note: valid ISBN)' % value
            elif len(value.split(';')) > 1:
                return_val = value + ' (note: '
                for isbn in value.split(';'):
                    return_val = return_val + u'%s; ' % ("valid ISBN" \
                                   if validated_isbn(isbn) else "invalid ISBN")
                return return_val + 'ISBNs are inequal)'
            elif value:
                return u'%s (note: invalid ISBN)' % value
    elif field == 'barcode':
        if value:
            barcodes = value.split(';')
            return_val = value + ' (note: '
            for barcode in barcodes:
                return_val = return_val + u'%s; ' % ("valid UPC/EAN" \
                             if valid_barcode(barcode) \
                             else "invalid UPC/EAN or non-standard")
            return return_val[:-2] + ')'
    elif field == 'leading_article':
        if value == True:
            return u'Yes (sorted as: %s)' % remove_leading_article(revision.name)
        else:
            return u'No'
    elif field in ['has_barcode', 'has_isbn', 'has_issue_title',
                   'has_indicia_frequency', 'has_volume', 'has_rating']:
        if hasattr(revision, 'changed'):
            if revision.changed[field] and value == False:
                kwargs = {field[4:]: ''}
                if field[4:] == 'issue_title':
                    kwargs = {'title': ''}
                if revision.series:
                    value_count = revision.series.active_issues()\
                                                 .exclude(**kwargs).count()
                    if value_count:
                        return 'No (note: %d issues have a non-empty %s value)' % \
                                (value_count, field[4:])
        return yesno(value, 'Yes,No')
    elif field == 'is_singleton':
        if hasattr(revision, 'changed'):
            if revision.changed[field] and value == True:
                 if revision.series:
                     value_count = revision.series.active_base_issues().count()
                     if value_count:
                        return 'Yes (note: the series has %d issue%s)' % \
                                (value_count, pluralize(value_count))
        return yesno(value, 'Yes,No')
    elif field == 'after' and not hasattr(revision, 'changed'):
        # for previous revision (no attr changed) display empty string
        return ''
    return value
Beispiel #4
0
 def render_publisher(self, value):
     from apps.gcd.templatetags.display import absolute_url
     from apps.gcd.templatetags.credits import show_country_info
     display_publisher = "<img %s>" % (show_country_info(value.country))
     return mark_safe(display_publisher) + absolute_url(value)
Beispiel #5
0
def field_value(revision, field):
    value = getattr(revision, field)
    if field in ['script', 'pencils', 'inks', 'colors', 'letters', 'editing']:
        if type(revision).__name__ == 'IssueRevision':
            credits = revision.issue_credit_revisions.filter(
                credit_type__id=CREDIT_TYPES[field], deleted=False)
        else:
            credits = revision.story_credit_revisions.filter(
                credit_type__id=CREDIT_TYPES[field], deleted=False)
        if value and credits:
            value += '; '
        for credit in credits:
            value += credit.creator.display_credit(credit, url=True) + '; '
        if credits:
            value = value[:-2]
        return mark_safe(value)
    if field in [
            'is_surrogate', 'no_volume', 'display_volume_with_number',
            'no_brand', 'page_count_uncertain', 'title_inferred', 'no_barcode',
            'no_indicia_frequency', 'no_isbn', 'year_began_uncertain',
            'year_overall_began_uncertain', 'year_ended_uncertain',
            'year_overall_ended_uncertain', 'on_sale_date_uncertain',
            'is_comics_publication', 'no_indicia_printer'
    ]:
        return yesno(value, 'Yes,No')
    elif field in ['is_current']:
        res_holder_display = ''
        if revision.previous():
            reservation = revision.source.get_ongoing_reservation()
            if revision.previous().is_current and not value and reservation:
                res_holder = reservation.indexer
                res_holder_display = ' (ongoing reservation held by %s %s)' % \
                                     (res_holder.first_name,
                                      res_holder.last_name)
        return yesno(value, 'Yes,No') + res_holder_display
    elif field in [
            'publisher', 'indicia_publisher', 'series', 'origin_issue',
            'target_issue', 'award', 'from_feature', 'to_feature'
    ]:
        return absolute_url(value)
    elif field in ['origin', 'target']:
        return value.full_name_with_link()
    elif field == 'brand':
        if value and value.emblem:
            if settings.FAKE_IMAGES:
                return absolute_url(value)
            else:
                return mark_safe('<img src="' + value.emblem.icon.url + '"> ' +
                                 absolute_url(value))
        return absolute_url(value)
    elif field in ['feature_object', 'feature_logo']:
        first = True
        features = ''
        for feature in value.all():
            if first:
                first = False
            else:
                features += '; '
            features += '<a href="%s">%s</a>' % (feature.get_absolute_url(),
                                                 esc(feature.name))
        return mark_safe(features)
    elif field in [
            'notes', 'tracking_notes', 'publication_notes', 'characters',
            'synopsis'
    ]:
        return linebreaksbr(value)
    elif field == 'reprint_notes':
        reprint = ''
        if value.strip() != '':
            for string in split_reprint_string(value):
                string = string.strip()
                reprint += '<li> ' + esc(string) + ' </li>'
            if reprint != '':
                reprint = '<ul>' + reprint + '</ul>'
        return mark_safe(reprint)
    elif field in ['url']:
        return urlize(value)
    elif field in ['indicia_pub_not_printed']:
        return yesno(value, 'Not Printed,Printed')
    elif field == 'group':
        brand_groups = ''
        for brand in value.all():
            brand_groups += absolute_url(brand) + '; '
        if brand_groups:
            brand_groups = brand_groups[:-2]
        return mark_safe(brand_groups)
    elif field in [
            'no_editing', 'no_script', 'no_pencils', 'no_inks', 'no_colors',
            'no_letters'
    ]:
        return yesno(value, 'X, ')
    elif field in ['page_count']:
        if revision.source_name == 'issue' and \
           revision.changeset.storyrevisions.count():
            # only calculate total sum for issue not sequences
            total_pages = sum_page_counts(revision.active_stories())
            if revision.variant_of:
                if revision.changeset.issuerevisions.count() > 1:
                    stories = revision.changeset.storyrevisions\
                                      .exclude(issue=revision.issue)
                else:
                    stories = revision.variant_of.active_stories()
                if revision.active_stories().count():
                    # variant has cover sequence, add page counts without cover
                    stories = stories.exclude(sequence_number=0)
                    total_pages += sum_page_counts(stories)
                else:
                    # variant has no extra cover sequence
                    total_pages = sum_page_counts(stories)
            sum_story_pages = format_page_count(total_pages)

            return '%s (note: total sum of story page counts is %s)' % \
                   (format_page_count(value), sum_story_pages)
        return format_page_count(value)
    elif field == 'isbn':
        if value:
            if validated_isbn(value):
                return '%s (note: valid ISBN)' % show_isbn(value)
            elif len(value.split(';')) > 1:
                return_val = show_isbn(value) + ' (note: '
                for isbn in value.split(';'):
                    return_val = return_val + '%s; ' % ("valid ISBN"
                                                        if validated_isbn(isbn)
                                                        else "invalid ISBN")
                return return_val + 'ISBNs are inequal)'
            elif value:
                return '%s (note: invalid ISBN)' % value
    elif field == 'barcode':
        if value:
            barcodes = value.split(';')
            return_val = show_barcode(value) + ' (note: '
            for barcode in barcodes:
                return_val = return_val + '%s; ' % (
                    "valid UPC/EAN part" if valid_barcode(barcode) else
                    "invalid UPC/EAN part or non-standard")
            return return_val[:-2] + ')'
    elif field == 'leading_article':
        if value is True:
            return 'Yes (sorted as: %s)' % remove_leading_article(
                revision.name)
        else:
            return 'No'
    elif field in [
            'has_barcode', 'has_isbn', 'has_issue_title',
            'has_indicia_frequency', 'has_volume', 'has_rating'
    ]:
        if hasattr(revision, 'changed'):
            if revision.changed[field] and value is False:
                kwargs = {field[4:]: ''}
                if field[4:] == 'issue_title':
                    kwargs = {'title': ''}
                if revision.series:
                    value_count = revision.series.active_issues()\
                                                 .exclude(**kwargs).count()
                    if value_count:
                        return 'No (note: %d issues have a non-empty %s value)' % \
                                (value_count, field[4:])
        return yesno(value, 'Yes,No')
    elif field == 'is_singleton':
        if hasattr(revision, 'changed'):
            if revision.changed[field] and value is True:
                if revision.series:
                    value_count = revision.series.active_base_issues().count()
                    if value_count != 1:
                        return 'Yes (note: the series has %d issue%s)' % \
                               (value_count, pluralize(value_count))
                    elif revision.series.active_issues()\
                                 .exclude(indicia_frequency='').count():
                        return 'Yes (note: the issue has an indicia frequency)'
        return yesno(value, 'Yes,No')
    elif field == 'after' and not hasattr(revision, 'changed'):
        # for previous revision (no attr changed) display empty string
        return ''
    elif field == 'cr_creator_names':
        creator_names = ", ".join(value.all().values_list('name', flat=True))
        return creator_names
    elif field == 'creator_name':
        creator_names = "; ".join(value.all().values_list('name', flat=True))
        return creator_names
    elif field == 'feature_object':
        features = "; ".join(value.all().values_list('name', flat=True))
        return features
    elif field == 'feature_logo':
        features = "; ".join(value.all().values_list('name', flat=True))
        return features
    elif field == 'indicia_printer':
        features = "; ".join(value.all().values_list('name', flat=True))
        return features
    elif field == 'feature' and \
      revision._meta.model_name == 'featurelogorevision':
        features = ''
        for feature in value.all():
            features += absolute_url(feature) + '; '
        if features:
            features = features[:-2]
        return mark_safe(features)
    return value
Beispiel #6
0
 def render_name(self, record):
     from apps.gcd.templatetags.display import absolute_url
     return absolute_url(record.creator)
Beispiel #7
0
 def render_brand(self, value):
     from apps.gcd.templatetags.display import absolute_url
     return absolute_url(value)
Beispiel #8
0
def header_link(changeset):
    if changeset.inline():
        revision = changeset.inline_revision()
    else:
        if changeset.issuerevisions.count():
            revision = changeset.issuerevisions.all()[0]
        elif changeset.change_type == CTYPES['series_bond']:
            revision = changeset.seriesbondrevisions.get()
        else:
            raise NotImplementedError

    if changeset.change_type == CTYPES['publisher']:
        return absolute_url(revision)
    elif changeset.change_type == CTYPES['brand_group'] or \
            changeset.change_type == CTYPES['indicia_publisher']:
        return mark_safe(u'%s : %s' % (absolute_url(revision.parent),
                                       absolute_url(revision)))
    elif changeset.change_type == CTYPES['brand']:
        header_link = u''
        if revision.parent:
            return mark_safe(u'%s : %s' % (absolute_url(revision.parent),
                                           absolute_url(revision)))
        for group in revision.group.all():
            header_link += absolute_url(group) + '; '
        header_link = header_link[:-2]
        return mark_safe(u'%s : %s' % (header_link, absolute_url(revision)))
    elif changeset.change_type == CTYPES['brand_use']:
        return mark_safe(u'%s at %s (%s)' % (absolute_url(revision.emblem),
                                             absolute_url(revision.publisher),
                                             revision.year_began))
    elif changeset.change_type == CTYPES['series']:
        if revision.previous() and (revision.previous().publisher !=
                                    revision.publisher):
            publisher_string = u'<span class="comparison_highlight">%s</span>'\
              % absolute_url(revision.publisher)
        else:
            publisher_string = absolute_url(revision.publisher)
        return mark_safe(u'%s (%s)' %
                         (absolute_url(revision), publisher_string))
    elif changeset.change_type in [CTYPES['cover'],
                                   CTYPES['issue'],
                                   CTYPES['variant_add'],
                                   CTYPES['two_issues']]:
        if changeset.change_type == CTYPES['variant_add']:
            # second issue revision is base issue and does exist in any case
            revision = changeset.issuerevisions.all()[1]
        if changeset.change_type == CTYPES['two_issues']:
            revision = changeset.issuerevisions.all()[0]
        series_url = absolute_url(revision.issue.series)
        pub_url = absolute_url(revision.issue.series.publisher)
        issue_url = revision.issue.get_absolute_url()
        issue_num = revision.issue.display_number
        header_link = mark_safe(u'%s (%s) <a href="%s">%s</a>' % (series_url,
                                                                  pub_url,
                                                                  issue_url,
                                                                  issue_num))
        if changeset.change_type == CTYPES['two_issues']:
            revision = changeset.issuerevisions.all()[1]
            series_url = absolute_url(revision.issue.series)
            pub_url = absolute_url(revision.issue.series.publisher)
            issue_url = revision.issue.get_absolute_url()
            issue_num = revision.issue.display_number
            header_link += mark_safe(u' and %s (%s) <a href="%s">%s</a>' %
                                     (series_url, pub_url,
                                      issue_url, issue_num)
                                     )
        if changeset.change_type == CTYPES['cover']:
            if revision.issue.variant_name:
                header_link += mark_safe(' [%s]' %
                                         esc(revision.issue.variant_name))
        if changeset.change_type == CTYPES['issue']:
            if revision.variant_name:
                header_link += mark_safe(' [%s]' % esc(revision.variant_name))
        return header_link

    elif changeset.change_type == CTYPES['issue_add']:
        series_url = absolute_url(revision.series)
        pub_url = absolute_url(revision.series.publisher)

        # get first skeleton's display num
        revision = changeset.issuerevisions.order_by('revision_sort_code')[0]
        issue_num = revision.display_number
        if revision.issue:
            # if it's been approved, make it a link to real issue
            issue_num = u'<a href="%s">%s</a>' % \
                        (revision.issue.get_absolute_url(), issue_num)

        if changeset.issuerevisions.count() > 1:
            # if it was a bulk skeleton, do same for last issue number
            last_revision = \
              changeset.issuerevisions.order_by('-revision_sort_code')[0]
            last_issue_num = last_revision.display_number
            if last_revision.issue:
                last_issue_num = u'<a href="%s">%s</a>' % \
                  (last_revision.issue.get_absolute_url(), last_issue_num)
            issue_num = u'%s - %s' % (issue_num, last_issue_num)

        return mark_safe(u'%s (%s) %s' % (series_url, pub_url, issue_num))
    elif changeset.change_type in [CTYPES['feature'], CTYPES['feature_logo']]:
        return mark_safe(u'%s' % (absolute_url(revision)))
    elif changeset.change_type == CTYPES['image']:
        return absolute_url(revision.object)
    elif changeset.change_type == CTYPES['award']:
        return mark_safe(u'%s' % (absolute_url(revision)))
    elif changeset.change_type == CTYPES['creator']:
        return mark_safe(u'%s' % (absolute_url(revision)))
    elif changeset.change_type == CTYPES['creator_art_influence']:
        return mark_safe(u'%s : %s' %
                         (absolute_url(revision.creator),
                          absolute_url(revision)))
    elif changeset.change_type == CTYPES['received_award']:
        return mark_safe(u'%s : %s' %
                         (absolute_url(revision.recipient),
                          absolute_url(revision)))
    elif changeset.change_type == CTYPES['creator_membership']:
        return mark_safe(u'%s : %s' %
                         (absolute_url(revision.creator),
                          absolute_url(revision)))
    elif changeset.change_type == CTYPES['creator_non_comic_work']:
        return mark_safe(u'%s : %s' %
                         (absolute_url(revision.creator),
                          absolute_url(revision)))
    elif changeset.change_type == CTYPES['creator_relation']:
        return mark_safe(u'%s : %s' %
                         (absolute_url(revision.from_creator),
                          absolute_url(revision.to_creator)))
    elif changeset.change_type == CTYPES['creator_school']:
        return mark_safe(u'%s : %s' %
                         (absolute_url(revision.creator),
                          absolute_url(revision)))
    elif changeset.change_type == CTYPES['creator_degree']:
        return mark_safe(u'%s : %s' %
                         (absolute_url(revision.creator),
                          absolute_url(revision)))
    else:
        return u''
Beispiel #9
0
def header_link(changeset):
    if changeset.inline():
        revision = changeset.inline_revision()
    else:
        if changeset.issuerevisions.count():
            revision = changeset.issuerevisions.all()[0]
        elif changeset.change_type == CTYPES['series_bond']:
            revision = changeset.seriesbondrevisions.get()
        else:
            raise NotImplementedError

    if changeset.change_type == CTYPES['publisher']:
        return absolute_url(revision)
    elif changeset.change_type == CTYPES['brand_group'] or \
            changeset.change_type == CTYPES['indicia_publisher']:
        return mark_safe(u'%s : %s' % (absolute_url(revision.parent),
                                       absolute_url(revision)))
    elif changeset.change_type == CTYPES['brand']:
        header_link = u''
        if revision.parent:
            return mark_safe(u'%s : %s' % (absolute_url(revision.parent),
                                           absolute_url(revision)))
        for group in revision.group.all():
            header_link += absolute_url(group) + '; '
        header_link = header_link[:-2]
        return mark_safe(u'%s : %s' % (header_link, absolute_url(revision)))
    elif changeset.change_type == CTYPES['brand_use']:
        return mark_safe(u'%s at %s (%s)' % (absolute_url(revision.emblem),
                                             absolute_url(revision.publisher),
                                             revision.year_began))
    elif changeset.change_type == CTYPES['series']:
        if revision.previous() and (revision.previous().publisher !=
                                    revision.publisher):
            publisher_string = u'<span class="comparison_highlight">%s</span>'\
              % absolute_url(revision.publisher)
        else:
            publisher_string = absolute_url(revision.publisher)
        return mark_safe(u'%s (%s)' %
                         (absolute_url(revision), publisher_string))
    elif changeset.change_type in [CTYPES['cover'],
                                   CTYPES['issue'],
                                   CTYPES['variant_add'],
                                   CTYPES['two_issues']]:
        if changeset.change_type == CTYPES['variant_add']:
            # second issue revision is base issue and does exist in any case
            revision = changeset.issuerevisions.all()[1]
        if changeset.change_type == CTYPES['two_issues']:
            revision = changeset.issuerevisions.all()[0]
        series_url = absolute_url(revision.issue.series)
        pub_url = absolute_url(revision.issue.series.publisher)
        issue_url = revision.issue.get_absolute_url()
        issue_num = revision.issue.display_number
        header_link = mark_safe(u'%s (%s) <a href="%s">%s</a>' % (series_url,
                                                                  pub_url,
                                                                  issue_url,
                                                                  issue_num))
        if changeset.change_type == CTYPES['two_issues']:
            revision = changeset.issuerevisions.all()[1]
            series_url = absolute_url(revision.issue.series)
            pub_url = absolute_url(revision.issue.series.publisher)
            issue_url = revision.issue.get_absolute_url()
            issue_num = revision.issue.display_number
            header_link += mark_safe(u' and %s (%s) <a href="%s">%s</a>' %
                            (series_url, pub_url, issue_url, issue_num))
        if changeset.change_type == CTYPES['cover']:
            if revision.issue.variant_name:
                header_link += mark_safe(' [%s]' %
                                         esc(revision.issue.variant_name))
        if changeset.change_type == CTYPES['issue']:
            if revision.variant_name:
                header_link += mark_safe(' [%s]' % esc(revision.variant_name))
        return header_link

    elif changeset.change_type == CTYPES['issue_add']:
        series_url = absolute_url(revision.series)
        pub_url = absolute_url(revision.series.publisher)

        # get first skeleton's display num
        revision = changeset.issuerevisions.order_by('revision_sort_code')[0]
        issue_num = revision.display_number
        if revision.issue:
            # if it's been approved, make it a link to real issue
            issue_num = u'<a href="%s">%s</a>' % \
                        (revision.issue.get_absolute_url(), issue_num)

        if changeset.issuerevisions.count() > 1:
            # if it was a bulk skeleton, do same for last issue number
            last_revision = \
              changeset.issuerevisions.order_by('-revision_sort_code')[0]
            last_issue_num = last_revision.display_number
            if last_revision.issue:
                last_issue_num = u'<a href="%s">%s</a>' % \
                  (last_revision.issue.get_absolute_url(), last_issue_num)
            issue_num = u'%s - %s' % (issue_num, last_issue_num)

        return mark_safe(u'%s (%s) %s' % (series_url, pub_url, issue_num))
    elif changeset.change_type == CTYPES['image']:
        return absolute_url(revision.object)
    else:
        return u''
Beispiel #10
0
def field_value(revision, field):
    value = getattr(revision, field)
    if field in [
            'is_surrogate', 'no_volume', 'display_volume_with_number',
            'no_brand', 'page_count_uncertain', 'title_inferred', 'no_barcode',
            'no_indicia_frequency', 'no_isbn', 'year_began_uncertain',
            'year_ended_uncertain', 'on_sale_date_uncertain',
            'is_comics_publication'
    ]:
        return yesno(value, 'Yes,No')
    elif field in ['is_current']:
        res_holder_display = ''
        if revision.previous():
            reservation = revision.source.get_ongoing_reservation()
            if revision.previous().is_current and not value and reservation:
                res_holder = reservation.indexer
                res_holder_display = ' (ongoing reservation held by %s %s)' % \
                  (res_holder.first_name, res_holder.last_name)
        return yesno(value, 'Yes,No') + res_holder_display
    elif field in [
            'publisher', 'indicia_publisher', 'series', 'origin_issue',
            'target_issue'
    ]:
        return absolute_url(value)
    elif field in ['origin', 'target']:
        return value.full_name_with_link()
    elif field == 'brand':
        if value and value.emblem:
            return mark_safe('<img src="' + value.emblem.icon.url + '"> ' \
                             + absolute_url(value))
        return absolute_url(value)
    elif field in [
            'notes', 'tracking_notes', 'publication_notes', 'characters',
            'synopsis'
    ]:
        return linebreaksbr(value)
    elif field == 'reprint_notes':
        reprint = ''
        if value.strip() != '':
            for string in split_reprint_string(value):
                string = string.strip()
                reprint += '<li> ' + esc(string) + ' </li>'
            if reprint != '':
                reprint = '<ul>' + reprint + '</ul>'
        return mark_safe(reprint)
    elif field in ['url']:
        return urlize(value)
    elif field in ['indicia_pub_not_printed']:
        return yesno(value, 'Not Printed,Printed')
    elif field == 'group':
        brand_groups = ''
        for brand in value.all():
            brand_groups += absolute_url(brand) + '; '
        if brand_groups:
            brand_groups = brand_groups[:-2]
        return mark_safe(brand_groups)
    elif field in [
            'no_editing', 'no_script', 'no_pencils', 'no_inks', 'no_colors',
            'no_letters'
    ]:
        return yesno(value, 'X, ')
    elif field in ['page_count']:
        if revision.source_name == 'issue' and \
           revision.changeset.storyrevisions.count():
            # only calculate total sum for issue not sequences
            total_pages = sum_page_counts(revision.active_stories())
            if revision.variant_of:
                if revision.changeset.issuerevisions.count() > 1:
                    stories = revision.changeset.storyrevisions\
                                      .exclude(issue=revision.issue)
                else:
                    stories = revision.variant_of.active_stories()
                if revision.active_stories().count():
                    # variant has cover sequence, add page counts without cover
                    stories = stories.exclude(sequence_number=0)
                    total_pages += sum_page_counts(stories)
                else:
                    # variant has no extra cover sequence
                    total_pages = sum_page_counts(stories)
            sum_story_pages = format_page_count(total_pages)

            return u'%s (note: total sum of story page counts is %s)' % \
                   (format_page_count(value), sum_story_pages)
        return format_page_count(value)
    elif field == 'isbn':
        if value:
            if validated_isbn(value):
                return u'%s (note: valid ISBN)' % value
            elif len(value.split(';')) > 1:
                return_val = value + ' (note: '
                for isbn in value.split(';'):
                    return_val = return_val + u'%s; ' % ("valid ISBN" \
                                   if validated_isbn(isbn) else "invalid ISBN")
                return return_val + 'ISBNs are inequal)'
            elif value:
                return u'%s (note: invalid ISBN)' % value
    elif field == 'barcode':
        if value:
            barcodes = value.split(';')
            return_val = value + ' (note: '
            for barcode in barcodes:
                return_val = return_val + u'%s; ' % ("valid UPC/EAN" \
                             if valid_barcode(barcode) \
                             else "invalid UPC/EAN or non-standard")
            return return_val[:-2] + ')'
    elif field == 'leading_article':
        if value == True:
            return u'Yes (sorted as: %s)' % remove_leading_article(
                revision.name)
        else:
            return u'No'
    elif field in [
            'has_barcode', 'has_isbn', 'has_issue_title',
            'has_indicia_frequency', 'has_volume', 'has_rating'
    ]:
        if hasattr(revision, 'changed'):
            if revision.changed[field] and value == False:
                kwargs = {field[4:]: ''}
                if field[4:] == 'issue_title':
                    kwargs = {'title': ''}
                if revision.series:
                    value_count = revision.series.active_issues()\
                                                 .exclude(**kwargs).count()
                    if value_count:
                        return 'No (note: %d issues have a non-empty %s value)' % \
                                (value_count, field[4:])
        return yesno(value, 'Yes,No')
    elif field == 'is_singleton':
        if hasattr(revision, 'changed'):
            if revision.changed[field] and value == True:
                if revision.series:
                    value_count = revision.series.active_base_issues().count()
                    if value_count:
                        return 'Yes (note: the series has %d issue%s)' % \
                                (value_count, pluralize(value_count))
        return yesno(value, 'Yes,No')
    elif field == 'after' and not hasattr(revision, 'changed'):
        # for previous revision (no attr changed) display empty string
        return ''
    return value
Beispiel #11
0
    def display_credit(self, credit, url=True, compare=False):
        co_name = ''
        as_name = ''
        compare_info = False
        if self.is_official_name:
            name = self.name
        else:
            name = self.creator.gcd_official_name
            if credit.is_credited \
              or (self.type and self.type_id == NAME_TYPES['studio']) \
              or (self.in_script !=
                  self.creator.creator_names.get(
                      is_official_name=True).in_script):
                as_name = self
            elif compare:
                as_name = self
                compare_info = True
            if self.type and self.type_id == NAME_TYPES['studio'] \
               and self.creator_relation.count():
                co_name = self.creator_relation.get().to_creator

        if credit.uncertain:
            name += ' ?'

        # no credited_as, signed_as
        if hasattr(credit, 'is_signed') and (
                credit.is_signed and not credit.signed_as
        ) and (credit.is_signed and not credit.signature) and (
                credit.is_credited and not credit.credited_as) and (
                    credit.is_credited and credit.creator.is_official_name):
            credit_attribute = 'credited, signed'
        elif hasattr(credit, 'is_signed') and (credit.is_signed
                                               and not credit.signed_as) and (
                                                   credit.is_signed
                                                   and not credit.signature):
            credit_attribute = 'signed'
        elif (credit.is_credited and not credit.credited_as
              and credit.creator.is_official_name):
            credit_attribute = 'credited'
        else:
            credit_attribute = ''

        if url:
            credit_text = '<a href="%s">%s</a>' % \
                          (self.creator.get_absolute_url(),
                           esc(name))
            if co_name:
                credit_text += ' of <a href="%s">%s</a>' % \
                               (co_name.get_absolute_url(),
                                esc(co_name.gcd_official_name))
            if as_name:
                if credit.is_credited and not credit.credited_as:
                    attribute = 'credited '
                else:
                    attribute = ''
                credit_text += ' (%sas <a href="%s">%s</a>)' % \
                               (attribute,
                                as_name.get_absolute_url(),
                                esc(as_name.name))
                if compare_info:
                    credit_text += ' Note: Non-official name selected without '\
                                   'credited-flag.'
            if credit_attribute:
                credit_text += ' (%s)' % credit_attribute
            if hasattr(credit, 'signature') and credit.signature:
                from apps.gcd.templatetags.display import absolute_url
                credit_text += ' (signed as %s)' % \
                               absolute_url(credit.signature,
                                            credit.signature.signature,
                                            esc(credit.signature.name))
        else:
            credit_text = esc(name)
            if as_name:
                credit_text += ' [as %s]' % esc(as_name.name)

        if credit.credited_as and getattr(credit, 'signed_as', None) and \
           (credit.credited_as == credit.signed_as):
            credit_text += ' (credited, signed as %s)' % \
                           esc(credit.credited_as)
        else:
            if credit.credited_as:
                credit_text += ' (credited as %s)' % esc(credit.credited_as)
            if hasattr(credit, 'is_signed') and credit.signed_as:
                credit_text += ' (signed as %s)' % esc(credit.signed_as)

        if credit.credit_name:
            credit_text += ' (%s)' % esc(credit.credit_name)

        return mark_safe(credit_text)
Beispiel #12
0
    def display_credit(self,
                       credit,
                       url=True,
                       compare=False,
                       search=False,
                       show_sources=False):
        co_name = ''
        as_name = ''
        extra_name = ''
        compare_info = ''
        if search:
            url = False
        if self.is_official_name:
            name = self.name
            if self.type and self.type_id == NAME_TYPES['house']:
                if credit.credit_name:
                    credit.credit_name += ', house name'
                else:
                    credit.credit_name = 'house name'
        else:
            name = self.creator.gcd_official_name
            if (credit.is_credited and not credit.credited_as) \
               or (self.type and self.type_id == NAME_TYPES['studio']) \
               or (self.in_script != self.creator.creator_names.get(
                                          is_official_name=True).in_script):
                as_name = self
            if self.type and self.type_id == NAME_TYPES['ghost']:
                if self.creator_relation.exists():
                    as_name = self.creator_relation.get().to_creator
                else:
                    as_name = self
            elif self.type and self.type_id == NAME_TYPES['house']:
                if self.creator_relation.exists():
                    as_name = self.creator_relation.get().to_creator\
                                  .active_names().get(is_official_name=True)
                else:
                    as_name = self
            elif compare or search:
                # for compare and search use uncredited non-official-name
                as_name = self
            if self.type and self.type_id == NAME_TYPES['studio'] \
               and self.creator_relation.count():
                co_name = self.creator_relation.get().to_creator

        if credit.uncertain:
            name += ' ?'

        # no credited_as, signed_as
        if hasattr(credit, 'is_signed') and (
                credit.is_signed and not credit.signed_as
        ) and (credit.is_signed and not credit.signature) and (
                credit.is_credited and not credit.credited_as) and (
                    credit.is_credited and credit.creator.is_official_name):
            credit_attribute = 'credited, signed'
        elif hasattr(credit, 'is_signed') and (credit.is_signed
                                               and not credit.signed_as) and (
                                                   credit.is_signed
                                                   and not credit.signature):
            credit_attribute = 'signed'
        elif (credit.is_credited and not credit.credited_as
              and credit.creator.is_official_name):
            credit_attribute = 'credited'
        else:
            credit_attribute = ''

        if url:
            credit_text = '<a href="%s">%s</a>' % \
                          (self.creator.get_absolute_url(),
                           esc(name))
        else:
            credit_text = esc(name)
        if co_name:
            if self.type_id == NAME_TYPES['studio']:
                if url:
                    credit_text += ' of <a href="%s">%s</a>' % \
                                    (co_name.get_absolute_url(),
                                     esc(co_name.gcd_official_name))
                else:
                    credit_text += ' of %s' % esc(co_name.gcd_official_name)
            else:
                raise ValueError
        if as_name:
            if self.type_id == NAME_TYPES['ghost']:
                attribute = 'ghosted for'
                if self.creator_relation.exists():
                    display_as_name = as_name.gcd_official_name
                    if self.name != display_as_name:
                        extra_name = self.name
                else:
                    display_as_name = as_name.name
            elif self.type_id == NAME_TYPES['house']:
                attribute = 'under house name'
                display_as_name = as_name.name
            elif credit.is_credited and not credit.credited_as:
                attribute = 'credited as'
                display_as_name = as_name.name
            else:
                attribute = 'as'
                display_as_name = as_name.name
                if compare and self.type_id != NAME_TYPES['studio']:
                    compare_info = '<br> Note: Non-official name '\
                                    'selected without credited-flag.'
            if url:
                credit_text += ' (%s <a href="%s">%s</a>)' % \
                                (attribute,
                                 as_name.get_absolute_url(),
                                 esc(display_as_name))
            else:
                credit_text += ' (%s %s)' % \
                                (attribute,
                                 esc(display_as_name))
            if extra_name:
                credit_text = credit_text[:-1] + ' as %s)' % extra_name
        if credit_attribute:
            credit_text += ' (%s)' % credit_attribute
        if hasattr(credit, 'signature') and credit.signature:
            if url:
                from apps.gcd.templatetags.display import absolute_url
                credit_text += ' (signed as %s)' % \
                               absolute_url(credit.signature,
                                            credit.signature.signature,
                                            esc(credit.signature.name))
            else:
                credit_text += ' (signed as %s)' % esc(credit.signature.name)

        if credit.credited_as and getattr(credit, 'signed_as', None) and \
           (credit.credited_as == credit.signed_as):
            credit_text += ' (credited, signed as %s)' % \
                           esc(credit.credited_as)
        else:
            if credit.credited_as:
                credit_text += ' (credited as %s)' % esc(credit.credited_as)
            if hasattr(credit, 'is_signed') and credit.signed_as:
                credit_text += ' (signed as %s)' % esc(credit.signed_as)

        if credit.is_sourced:
            if show_sources:
                credit_text += ' (sourced: %s)' % esc(credit.sourced_by)
            else:
                if url:
                    credit_text += ' <a hx-get="/credit/%d/source/"' % \
                      credit.id
                    credit_text += ' hx-target="body" hx-swap="beforeend"' +\
                                   ' style="color: #00e;">(sourced)</a>'
                else:
                    credit_text += ' (sourced)'

        if credit.credit_name:
            credit_text += ' (%s)' % esc(credit.credit_name)

        if compare_info:
            credit_text += compare_info

        return mark_safe(credit_text)