Beispiel #1
0
    def get_table_kwargs(self) -> Dict[str, List[Tuple[str, Column]]]:
        credit_lines = models.CreditLine.objects.filter(
            user=self.request.user).order_by("priority")
        extra_cols = []  # type: List[Tuple[str, Column]]

        def get_linkify_func(
                col_name: str) -> Callable[[Mapping[str, Any]], str]:
            """Returns a function to linkify each column.

            This takes advantage of closures to generate a separate
            linkify function for each column. See django-tables2 docs
            for more information on what these callables look like.
            """
            def linkify_func(record: Mapping[str, Any]) -> str:
                return tables.linkify_statement(col_name, record["month"])

            return linkify_func

        for cl in credit_lines:
            extra_cols.append((
                cl.name,
                Column(
                    attrs={"td": dict(align="right")},
                    orderable=False,
                    linkify=get_linkify_func(cl.name),
                ),
            ))
        extra_cols.append(
            ("Total", Column(attrs={"td": dict(align="right")},
                             orderable=False)))

        return {"extra_columns": extra_cols}
Beispiel #2
0
class ProductTable(Table):
    title = TemplateColumn(
        verbose_name=_('Title'),
        template_name='dashboard/catalogue/product_row_title.html',
        order_by='title',
        accessor=A('title'))
    image = TemplateColumn(
        verbose_name=_('Image'),
        template_name='dashboard/catalogue/product_row_image.html',
        orderable=False)
    product_class = Column(verbose_name=_('Product type'),
                           accessor=A('product_class'),
                           order_by='product_class__name')
    gift = Column(verbose_name=_('Is Gift'), order_by='gift')
    variants = TemplateColumn(
        verbose_name=_("Variants"),
        template_name='dashboard/catalogue/product_row_variants.html',
        orderable=False)
    stock_records = TemplateColumn(
        verbose_name=_('Stock records'),
        template_name='dashboard/catalogue/product_row_stockrecords.html',
        orderable=False)
    actions = TemplateColumn(
        verbose_name=_('Actions'),
        template_name='dashboard/catalogue/product_row_actions.html',
        orderable=False)

    class Meta(DashboardTable.Meta):
        model = Product
        fields = ('upc', 'date_updated')
        sequence = ('title', 'upc', 'image', 'product_class', 'variants',
                    'stock_records', '...', 'date_updated', 'actions')
        order_by = '-date_updated'
Beispiel #3
0
class ServerTable(Table):
    pulp_site = Column(verbose_name='Pulp Site')
    hostname = Column()
    empty_text = "There are no Pulp servers configured."

    def render_pulp_site(self, record):
        return ServerView.make_link(record.pulp_site, record.server_slug)
Beispiel #4
0
class ListStreamTable(tables.Table):

    name = Column(verbose_name="Stream")
    details = Column(verbose_name="Description")
    creators = Column(verbose_name="Creator", accessor="creators__0")
    items = Column()
    restrict = Column(verbose_name="Open")

    streams = {
        "alias": "Address alias registrations",
        "DOI": "Open Stream that maps DOI to ISCC",
        "ISBN": "Open Stream that maps ISBN to ISCC",
        "iscc": "Public ISCC Registry",
        "smart-license": "Public Smart License Registry",
        "test": "Stream for test data",
        "timestamp": "Open timestamping with SHA-256",
    }

    class Meta:
        attrs = {"class": "table table-sm table-striped table-hover"}

    def render_name(self, value):
        return format_html('<a href="/stream/{}">{}</a>', value, value)

    def render_details(self, value, record):
        value = value.get("info")
        if not value:
            value = self.streams.get(record["name"])
        return value

    def render_restrict(self, value):
        return not value["read"]
Beispiel #5
0
class ParentRequirementTable(Table):
    document = Column(verbose_name='Doc.')
    uid = Column(verbose_name='Parent req')
    actions = Column(empty_values=())

    class Meta:
        template_name = "django_tables2/bootstrap4.html"

    def __init__(self, data=None, item=None):
        self._item = item
        super().__init__(data, attrs={'class': 'table table-sm'})

    # noinspection PyUnusedLocal
    @staticmethod
    def render_uid(value, record):
        # type: (str, Item) -> str
        return format_html(
            '<a id="{}" href="{}">{}</a>', record.uid,
            reverse('item-details',
                    args=[record.document.prefix, record.uid.value]), value)

    def render_actions(self, record):
        # type: (Item) -> str
        html = format_html('<div class="btn-toolbar"><div class="btn-group">')
        html += format_html(
            '<a href="{}" class="btn btn-outline-primary btn-sm" title="Unlink parent req"><i class="fa fa-unlink"></i></a>',
            reverse('item-action-target',
                    args=[
                        self._item.document.prefix, self._item.uid.value,
                        'unlink', record.uid
                    ]))
        html += format_html('</div></div>')
        return html
Beispiel #6
0
class SQRTable(Table):
    quiz = Column("Quiz")
    attempt = Column("Attempt")
    cur_quest = Column("Question")
    score = Column("Score")
    details = Column("Details", empty_values=(), orderable=False)

    class Meta:
        model = StudentQuizResult
        attrs = {'class': 'paleblue'}
        fields = ['quiz', 'attempt', 'cur_quest', 'score']

    def render_cur_quest(self, value, record):
        if value == 0:
            return "Completed"
        else:
            return value

    def render_details(self, value, record):
        return format_html(
            '<a href="{}">Details</a>',
            reverse('quiz_details',
                    kwargs={
                        'sqr_pk': record.pk,
                        'quiz_pk': record.quiz.pk,
                        'course_pk': record.quiz.course.pk,
                    }))
Beispiel #7
0
class BlockTable(tables.Table):

    height = LinkColumn(verbose_name="Height", orderable=True)
    time = DateTimeColumn(verbose_name="Time (UTC)",
                          format="Y-m-d H:i:s",
                          orderable=True)
    miner = LinkColumn(verbose_name=settings.MEX_MINER)
    txcount = Column(verbose_name="TXs", orderable=True)
    size = Column(orderable=True)

    class Meta:
        model = Block
        fields = ("height", "time", "miner", "txcount", "size")
        order_by = ("-height", )
        attrs = {"class": "table table-sm table-striped table-hover"}
        orderable = False

    def render_height(self, record=None):
        link = reverse("block-detail", args=[str(record.hash)])
        return mark_safe(
            '<a href="{}" class="badge badge-info"><i class="fas fa-cube"></i>  {}</a>'
            .format(link, record.height))

    def render_miner(self, record=None):
        link = reverse("address-detail", args=[str(record.miner)])
        return mark_safe('<a href="{}">{}</a>'.format(link, record.miner))
Beispiel #8
0
class MarkedQuestionTable(Table):
    # Record is a MarkedQuestion
    problem_str = MathColumn()
    choices = Column(empty_values=())
    test = Column(empty_values=())

    class Meta:
        attrs = {'class': 'paleblue'}
        model = MarkedQuestion
        fields = ['category', 'problem_str', 'choices']

    def render_choices(self, value, record):
        return format_html(
            '<a href={}>Edit Choices</a>',
            reverse('edit_choices',
                    kwargs={
                        'mq_pk': record.pk,
                        'quiz_pk': record.quiz.pk,
                        'course_pk': record.quiz.course.pk,
                    }))

    def render_test(self, value, record):
        return format_html(
            '<a href={}>Test</a>',
            reverse('test_quiz_question',
                    kwargs={
                        'mq_pk': record.pk,
                        'quiz_pk': record.quiz.pk,
                        'course_pk': record.quiz.course.pk,
                    }))
Beispiel #9
0
class BlockTable(tables.Table):

    height = LinkColumn(verbose_name='Height', orderable=True)
    time = DateTimeColumn(verbose_name='Time (UTC)',
                          format="Y-m-d H:i:s",
                          orderable=True)
    miner = LinkColumn(verbose_name=settings.MEX_MINER)
    txcount = Column(verbose_name='TXs', orderable=True)
    size = Column(orderable=True)

    class Meta:
        model = Block
        fields = (
            'height',
            'time',
            'miner',
            'txcount',
            'size',
        )
        order_by = '-height',
        attrs = {'class': 'table table-sm table-striped table-hover'}
        orderable = False

    def render_height(self, record=None):
        link = reverse('block-detail', args=[str(record.hash)])
        return mark_safe(
            '<a href="{}" class="badge badge-info"><i class="fas fa-cube"></i>  {}</a>'
            .format(link, record.height))

    def render_miner(self, record=None):
        link = reverse('address-detail', args=[str(record.miner)])
        return mark_safe('<a href="{}">{}</a>'.format(link, record.miner))
Beispiel #10
0
class CollaborationTable(tables.Table):
    people = Column(order_by='members')
    description = Column(order_by='project__text')

    def render_project(self, record, value):
        return mark_safe('<a href="%s">%s</a>' %
                         (record.get_absolute_url(), value))

    def render_labs(self, record, value):
        return mark_safe('<a href="%s">%s</a>' %
                         (record.get_absolute_url(), value.count()))

    def render_members(self, record, value):
        return mark_safe('<a href="%s">%s</a>' %
                         (record.get_absolute_url(), record.members.count()))

    def render_people(self, record, value):
        return mark_safe("; ".join([
            '<a href="%s">%s</a>' %
            (member.get_url(), member.password or member.last_name)
            for member in record.members.all()
        ]))

#    def render_description(self, record, value):
#        return markdown(value)

    class Meta:
        model = Collaboration
        attrs = {'class': 'paleblue'}
        exclude = ('id', )
        fields = ('project', 'labs', 'members', 'people', 'description')
Beispiel #11
0
class Results(tables.Table):
    name = Column()
    type = Column()
    entries = Column()
    wetSession = Column()
    view = TemplateColumn(
        template_name='results/table/results_view_column.html')
Beispiel #12
0
class MarksTable(Table):
    """ Used for displaying a student's individual marks. The score and percent
        will render differently if a note has been submitted for this work.
        `record' will therefore be a StudentMark object
    """
    name    = Column(verbose_name="Name", empty_values=())
    out_of  = Column(verbose_name="Out of", empty_values=())
    score   = Column(verbose_name="Score", empty_values=())
    percent = Column(verbose_name="Percent", empty_values=())

    class Meta:
        attrs = {'class': 'paleblue'}

    def render_name(self, value, record):
        return record.category.name

    def render_out_of(self, value, record):
        return str(record.category.out_of)

    def render_score(self, value, record):
        notes = record.has_note()
        if notes: 
            return html_for_notes(notes)
        else:
            return value

    def render_percent(self, value, record):
        notes = record.has_note()
        if notes:
            return html_for_notes(notes)
        else:
            if record.score:
                return str(round(100*record.score/record.category.out_of,2))
            else:
                return ''
class ConfigComplianceGlobalFeatureTable(BaseTable):
    """Table for feature compliance report."""

    name = Column(accessor="rule__feature__slug", verbose_name="Feature")
    count = Column(accessor="count", verbose_name="Total")
    compliant = Column(accessor="compliant", verbose_name="Compliant")
    non_compliant = Column(accessor="non_compliant",
                           verbose_name="Non-Compliant")
    comp_percent = PercentageColumn(accessor="comp_percent",
                                    verbose_name="Compliance (%)")

    class Meta(BaseTable.Meta):
        """Metaclass attributes of ConfigComplianceGlobalFeatureTable."""

        model = models.ConfigCompliance
        fields = [
            "name", "count", "compliant", "non_compliant", "comp_percent"
        ]
        default_columns = [
            "name",
            "count",
            "compliant",
            "non_compliant",
            "comp_percent",
        ]
Beispiel #14
0
class GitFileStatus(Table):
    selected = CheckBoxColumn()
    name = Column(verbose_name='File name')
    status_text = Column(verbose_name='Status')
    actions = Column(empty_values=())

    class Meta:
        template_name = "django_tables2/bootstrap4.html"

    def __init__(self, data=None):
        super().__init__(data, attrs={'class': 'table table-sm'})

    @staticmethod
    def render_name(value, record):
        return format_html(
            f'<a href="?f={record.base_name}">{record.name}</a>')

    @staticmethod
    def render_actions(_record):
        # type: (Item) -> str
        html = format_html('<div class="btn-toolbar"><div class="btn-group">')
        html += format_html(
            '<a href="{}" class="btn btn-outline-primary btn-sm" title="Unlink parent req"><i class="fa fa-edit"></i></a>',
            reverse('index', args=[]))
        html += format_html('</div></div>')
        return html
Beispiel #15
0
class VMTemplateTable(BaseTable):

    template_name = LinkColumn("template-detail",
                               args=[A("cluster.slug"),
                                     A("template_name")],
                               verbose_name="name")
    description = Column()
    cluster = LinkColumn("cluster-detail",
                         args=[A("cluster.slug")],
                         accessor="cluster.slug",
                         verbose_name="cluster")
    os = Column(verbose_name='OS')
    memory = Column(verbose_name='RAM')
    disk_space = Column()
    vcpus = Column(verbose_name='vCPUs')

    class Meta:
        sequence = ("template_name", "description", "cluster", "os", "memory",
                    "disk_space", "vcpus")
        order_by = ("template_name")
        empty_text = "No Templates"

    def render_os(self, value):
        return render_os(value)

    def render_memory(self, value):
        return render_storage(value)

    def render_disk_space(self, value):
        return render_storage(value)
Beispiel #16
0
class BusinessSaleTable(DashboardTable):
    isp = TemplateColumn(
        verbose_name=u'用户',
        template_name='dashboard/business/business_sale_row_isp.html',
    )
    ispname = TemplateColumn(
        verbose_name=u'商家名称',
        template_name='dashboard/business/business_sale_row_ispname.html',
    )
    upc = TemplateColumn(
        verbose_name=u'商品代码',
        template_name='dashboard/business/pickup_store_row_upc.html',
        order_by='product__upc')
    created_date = Column(verbose_name=u'成交日期')
    can_pickup_quantity = Column(verbose_name=u'待提取量')
    yet_pickup_quantity = TemplateColumn(
        verbose_name=u'已提取量',
        template_name='dashboard/business/business_sale_row_yetpick.html',
    )

    caption = u'商品销售情况'
    icon = 'sitemap'

    class Meta(DashboardTable.Meta):
        model = TradeComplete
        fields = ('product', 'c_type', 'unit_price', 'quantity', 'total',
                  'can_pickup_quantity', 'created_date')
        sequence = ('isp', 'ispname', 'product', 'upc', 'c_type', 'unit_price',
                    'quantity', 'total', 'can_pickup_quantity',
                    'yet_pickup_quantity', 'created_date')

        order_by = '-created_date'
Beispiel #17
0
    def get_context_data(self, **kwargs) -> Dict[str, Any]:
        context = super().get_context_data(**kwargs)

        fmt = "%b_%y"
        orig = thirteen_months_ago()
        first = datetime.date(year=orig.year, month=orig.month, day=1)
        now = timezone.now()
        last = datetime.date(year=now.year, month=now.month, day=1)

        # Add each month to the header
        cols = []
        cur = first
        while cur <= last:
            cols.append(cur.strftime(fmt))
            cur = first_day_month_after(cur)

        linkify_func = self.get_category_linkify_func(self.object.id)
        extra_cols = [("category",
                       Column(accessor="category", linkify=linkify_func))]
        extra_cols.extend([(c, Column(attrs={"td": dict(align="right")}))
                           for c in cols])
        qs = oys_qs(user=self.request.user, class_id=self.object.id)
        t = self.table_class(data=qs, extra_columns=extra_cols)
        context["table"] = t
        return context
Beispiel #18
0
class ClusterTable(BaseTable):

    cluster = LinkColumn("cluster-detail",
                         args=[A("slug")],
                         accessor="slug",
                         verbose_name='cluster')
    description = Column()
    version = Column(accessor="info.software_version",
                     orderable=False,
                     default="unknown")
    hypervisor = Column(accessor="info.default_hypervisor",
                        orderable=False,
                        default="unknown")
    master_node = LinkColumn("node-detail",
                             kwargs={
                                 "cluster_slug": A("slug"),
                                 "host": A("info.master")
                             },
                             accessor="info.master",
                             orderable=False,
                             default="unknown")
    nodes = Column(accessor="nodes.count", orderable=False)
    vms = Column(accessor="virtual_machines.count",
                 verbose_name='VMs',
                 orderable=False)

    class Meta:
        empty_text = "No Clusters"
        sequence = ("cluster", "description", "version", "hypervisor",
                    "master_node", "nodes", "vms")
        order_by = ("cluster")

    def render_hypervisor(self, value):
        return hv_prettify(value)
Beispiel #19
0
class RollingAdTable(DashboardTable):
    title = LinkColumn('dashboard:ad-rolling_ad-update', args=[A('pk')])
    image = TemplateColumn(
        verbose_name=_('Image'),
        template_name='dashboard/ad/rolling_ad_row_image.html',
        orderable=False)
    link_url = URLColumn(verbose_name=_(u'链接地址'),
                         accessor='link_url',
                         orderable=False)
    description = TemplateColumn(
        verbose_name=_("Description"),
        accessor='description',
        orderable=False,
        template_code='{{ record.description|default:""|striptags'
        '|cut:"&nbsp;"|truncatewords:6 }}')
    order_num = Column(verbose_name=_(u'顺序'),
                       accessor='order_num',
                       orderable=True)
    valid = Column(verbose_name=_(u'开启'), accessor='valid', orderable=False)
    actions = TemplateColumn(
        verbose_name=_('Actions'),
        template_name=
        'dashboard/ad/rolling_ad_row_actions.html',  #'dashboard/ad/rolling_ad_row_actions.html',
        orderable=False)

    icon = "sitemap"

    class Meta(DashboardTable.Meta):
        model = RollingAd
        fields = ('title', 'position', 'image', 'link_url', 'order_num',
                  'description', 'valid')
        sequence = ('title', 'position', 'image', 'link_url', 'order_num',
                    'description', 'valid', 'actions')
        order_by = '-order_num'
class GroupTable(Table):
    row_class = Column(visible=False,
                       empty_values=())  #used to highlight some rows
    involvement = Column(empty_values=())

    def render_row_class(self, value, record):
        if record.status == Group.STB:
            return 'info'

        if record.status == Member.ACT:
            return 'success'

    def render_involvement(self, value):
        try:
            count = Affiliation.objects.values(group=value).count()
            return unicode(count)
        except:
            return unicode('None')

    class Meta:
        model = Group
        fields = (
            'type',
            'acronym',
            'title',
            'desc',
            'involvement',
        )
        attrs = {"class": "table"}
Beispiel #21
0
class SDKApplicationTable(DashboardTable):
    application_id = Column(verbose_name=_("Application ID"), orderable=False)
    first_name = Column(verbose_name=_("First Name"), orderable=False)
    last_name = Column(verbose_name=_("Last Name"), orderable=False)
    application_status = Column(verbose_name=_("Status"), orderable=False)
    prequal_details = TemplateColumn(
        verbose_name=_("Pre-Qualification Details"),
        template_name="wfrs/dashboard/_sdk_application_row_prequal_link.html",
        orderable=False,
    )
    created_datetime = TZAwareDateTimeColumn(verbose_name=_("Created On"),
                                             order_by="created_datetime",
                                             format="D, N j Y, P")
    modified_datetime = TZAwareDateTimeColumn(
        verbose_name=_("Last Modified On"),
        order_by="modified_datetime",
        format="D, N j Y, P",
    )

    class Meta(DashboardTable.Meta):
        sequence = (
            "application_id",
            "first_name",
            "last_name",
            "application_status",
            "prequal_details",
            "created_datetime",
            "modified_datetime",
        )
Beispiel #22
0
class ProductTable(Table):
    title = TemplateColumn(
        template_name='dashboard/catalogue/product_row_title.html',
        order_by='title',
        accessor=A('get_title'))
    image = TemplateColumn(
        template_name='dashboard/catalogue/product_row_image.html',
        orderable=False)
    product_class = Column(verbose_name=_("Type"),
                           accessor=A('get_product_class.name'),
                           order_by=('product_class__name'))
    parent = LinkColumn('dashboard:catalogue-product',
                        verbose_name=_("Parent"),
                        args=[A('parent.pk')],
                        accessor=A('parent.title'))
    children = Column(accessor=A('children.count'), orderable=False)
    stock_records = Column(accessor=A('stockrecords.count'), orderable=False)
    actions = TemplateColumn(
        template_name='dashboard/catalogue/product_row_actions.html',
        orderable=False)

    class Meta(DashboardTable.Meta):
        model = Product
        fields = ('upc', 'date_created')
        sequence = ('title', 'upc', 'image', 'product_class', 'parent',
                    'children', 'stock_records', '...', 'date_created',
                    'actions')
        order_by = '-date_created'
Beispiel #23
0
class MeetingTable(Table):
    row_class = Column(visible=False,
                       empty_values=())  #used to highlight some rows
    totals = Column(verbose_name='Présents/Excusés', empty_values=())
    details = Column(verbose_name='Détails', empty_values=())

    def render_row_class(self, record):
        if record.when < timezone.now():
            return 'danger'

    def render_totals(self, record):
        return '{} / {}'.format(
            Meeting_Attendance.objects.filter(meeting=record,
                                              present=True).count(),
            Meeting_Attendance.objects.filter(meeting=record,
                                              present=False).count())

    def render_details(self, record):
        link = '<center><a class="btn btn-info btn-sm" href="/meetings/list/{}/"><i class="fa fa-list"></i></a></center>'.format(
            escape(record.num))
        return mark_safe(link)

    class Meta:
        model = Meeting
        fields = (
            'title',
            'when',
            'location',
            'totals',
            'details',
        )
        attrs = {"class": "table table-striped"}
Beispiel #24
0
class AllQuizTable(Table):
    out_of = Column("Points", empty_values=())
    immediate_solutions = Column("Solutions Visible", empty_values=())

    class Meta:
        model = Quiz
        attrs = {'class': 'paleblue'}
        exclude = ['id', '_cat_list']

    def render_immediate_solutions(self, value, record):
        return record.solutions_are_visible

    def render_out_of(self, value, record):
        return record.out_of

    def render_cat_list(self, value, record):
        return len(cat_list)

    def render_tries(self, value, record):
        # Returns the value or infinity if value is 0
        return value or format_html('&infin;')

    def render_name(self, value, record):
        return format_html('<a href={}>{}</a>', 
            reverse('quiz_admin', 
                kwargs={'quiz_pk': record.pk,}
            ), value 
        )
    class Meta(BaseTable.Meta):
        """Metaclass attributes of ConfigComplianceDeleteTable."""

        device = Column(accessor="device__name", verbose_name="Device Name")
        compliance = Column(accessor="compliance", verbose_name="Compliance")
        model = models.ConfigCompliance
        fields = ("device", "feature", "compliance")
Beispiel #26
0
class MeetingTable(Table):
    row_class = Column(visible=False,
                       empty_values=())  #used to highlight some rows
    totals = Column(verbose_name='Présents/Excusés', empty_values=())
    details = Column(verbose_name='Détails', empty_values=())

    def render_row_class(self, record):
        if record.when < date.today():
            return 'danger'

    def render_totals(self, record):
        return '{} / {}'.format(record.attendance.all().count(),
                                record.excused.all().count())

    def render_details(self, record):
        link = '<a class="btn btn-default btn-sm" href="/meetings/list/{}/"><span class="glyphicon glyphicon-list"></span></a>'.format(
            escape(record.num))
        return mark_safe(link)

    class Meta:
        model = Meeting
        fields = (
            'title',
            'when',
            'location',
            'totals',
            'details',
        )
        attrs = {"class": "table table-striped"}
Beispiel #27
0
class SeeAllMarksTable(Table):
    last_name  = Column(verbose_name="Last Name")
    first_name = Column(verbose_name="First Name")
    username   = Column(verbose_name="UTORid")
    number     = Column(verbose_name="Student Number")

    class Meta:
        attrs = {'class': 'paleblue'}
        row_attrs = {'data-active': lambda record: record.user.is_active}
Beispiel #28
0
class TournamentTable(CustomTable):
    id = Column(linkify=True)

    name = Column(linkify=True)

    class Meta:
        model = Tournament
        fields = ('id', 'name', 'date', 'season', 'num_teams',
                  'num_novice_debaters')
Beispiel #29
0
class TrackingTable(Table):
    type = Column()
    date = Column()
    user = Column()
    description = Column()
    tags = Column()

    def render_tags(self, record):
        return ', '.join((str(t) for t in record.tags.all()))
Beispiel #30
0
class TeamTable(CustomTable):
    id = Column(linkify=True)
    name = Column(linkify=True)

    class Meta:
        model = Team
        fields = ('id',
                  'name',
                  'debaters_display')