Ejemplo n.º 1
0
    def format_as_html(self, ar):
        elems = []
        if len(self.used_events) == 0:
            return E.p(gettext("No invoiced events"))
        # used_events = list(self.used_events)
        invoiced = self.used_events[self.invoiced_events:]
        coming = self.used_events[:self.invoiced_events]

        fmt = self.generator.get_invoiceable_event_formatter()
        # def fmt(ev):
        #     return self.generator.format_invoiceable_event(ev, ar)

        if len(invoiced) > 0:
            elems.append("{0} : ".format(_("Invoiced")))
            if len(invoiced) > MAX_SHOWN:
                elems.append("(...) ")
                invoiced = invoiced[-MAX_SHOWN:]
            elems += join_elems(map(fmt, invoiced), sep=', ')
            # s += ', '.join(map(fmt, invoiced))
            # elems.append(E.p(s))
        if len(coming) > 0:
            if len(elems) > 0:
                elems.append(E.br())
            elems.append("{0} : ".format(_("Not invoiced")))
            elems += join_elems(map(fmt, coming), sep=', ')
            # s += ', '.join(map(fmt, coming))
            # elems.append(E.p(s))
        return E.p(*elems)
Ejemplo n.º 2
0
 def contact_details(self, ar):
     if ar is None:
         return ''
     sar = rt.models.phones.ContactDetailsByPartner.request(parent=ar, master_instance=self)
     items = [o.detail_type.as_html(o, sar)
              for o in sar if not o.end_date]
     return E.p(*join_elems(items, sep=', '))
Ejemplo n.º 3
0
 def print_actions(self, ar):
     if ar is None:
         return ''
     elems = []
     elems.append(ar.instance_action_button(
         self.write_xml))
     return E.p(*join_elems(elems, sep=", "))
Ejemplo n.º 4
0
 def print_actions(self, ar):
     if ar is None:
         return ''
     elems = []
     elems.append(ar.instance_action_button(
         self.write_xml))
     return E.p(*join_elems(elems, sep=", "))
Ejemplo n.º 5
0
 def print_actions(self, ar):
     if ar is None:
         return ''
     elems = []
     elems.append(ar.instance_action_button(self.print_presence_sheet))
     elems.append(ar.instance_action_button(self.print_presence_sheet_html))
     return E.p(*join_elems(elems, sep=", "))
Ejemplo n.º 6
0
 def print_actions(self, ar):
     if ar is None:
         return ''
     elems = []
     elems.append(ar.instance_action_button(self.print_labels))
     elems.append(ar.instance_action_button(self.print_members))
     elems.append(ar.instance_action_button(self.print_members_html))
     return E.p(*join_elems(elems, sep=", "))
Ejemplo n.º 7
0
 def print_actions(self, ar):
     if ar is None:
         return ''
     elems = []
     elems.append(ar.instance_action_button(
         self.print_presence_sheet))
     elems.append(ar.instance_action_button(
         self.print_presence_sheet_html))
     return E.p(*join_elems(elems, sep=", "))
Ejemplo n.º 8
0
 def welcome_messages(ar):
     locked_rows = list(Lockable.get_lockable_rows(ar.get_user()))
     if locked_rows:
         chunks = [
             ugettext("You have a dangling edit lock on"), " "]
         chunks += join_elems(
             [ar.obj2html(obj) for obj in locked_rows], ", ")
         chunks.append('.')
         yield E.div(*chunks)
Ejemplo n.º 9
0
        def f(obj, ar):
            if obj is None or ar is None:
                return E.div()
            try:
                utype = UploadType.objects.get(shortcut=i)
            except UploadType.DoesNotExist:
                return E.div()
            items = []
            target = sender.modules.resolve(i.target)
            sar = ar.spawn_request(actor=target,
                                   master_instance=obj,
                                   known_values=dict(type=utype))
            # param_values=dict(pupload_type=et))
            n = sar.get_total_count()
            if n == 0:
                iar = target.insert_action.request_from(sar,
                                                        master_instance=obj)
                btn = iar.ar2button(
                    None,
                    _("Upload"),
                    icon_name="page_add",
                    title=_("Upload a file from your PC to the server."))
                items.append(btn)
            elif n == 1:
                after_show = ar.get_status()
                obj = sar.data_iterator[0]
                items.append(
                    sar.renderer.href_button(
                        sender.build_media_url(obj.file.name),
                        _("show"),
                        target='_blank',
                        icon_name='page_go',
                        style="vertical-align:-30%;",
                        title=_("Open the uploaded file in a "
                                "new browser window")))
                after_show.update(record_id=obj.pk)
                items.append(
                    sar.window_action_button(
                        sar.ah.actor.detail_action,
                        after_show,
                        _("Edit"),
                        icon_name='application_form',
                        title=_("Edit metadata of the uploaded file.")))
            else:
                obj = sar.sliced_data_iterator[0]
                items.append(
                    ar.obj2html(obj, pgettext("uploaded file", "Last")))

                btn = sar.renderer.action_button(obj,
                                                 sar,
                                                 sar.bound_action,
                                                 _("All {0} files").format(n),
                                                 icon_name=None)
                items.append(btn)

            return E.div(*join_elems(items, ', '))
Ejemplo n.º 10
0
 def pupil_info(self, ar):
     txt = self.pupil.get_full_name(nominative=True)
     if ar is None:
         elems = [txt]
     else:
         elems = [ar.obj2html(self.pupil, txt)]
     elems += [', ']
     elems += join_elems(list(self.pupil.address_location_lines()),
                         sep=', ')
     return E.p(*elems)
Ejemplo n.º 11
0
 def pupil_info(self, ar):
     txt = self.pupil.get_full_name(nominative=True)
     if ar is None:
         elems = [txt]
     else:
         elems = [ar.obj2html(self.pupil, txt)]
     elems += [', ']
     elems += join_elems(
         list(self.pupil.address_location_lines()),
         sep=', ')
     return E.p(*elems)
Ejemplo n.º 12
0
 def print_actions(self, ar):
     if ar is None:
         return ''
     elems = []
     elems.append(ar.instance_action_button(
         self.print_labels))
     elems.append(ar.instance_action_button(
         self.print_members))
     elems.append(ar.instance_action_button(
         self.print_members_html))
     return E.p(*join_elems(elems, sep=", "))
Ejemplo n.º 13
0
        def f(obj, ar):
            if obj is None or ar is None:
                return E.div()
            try:
                utype = UploadType.objects.get(shortcut=i)
            except UploadType.DoesNotExist:
                return E.div()
            items = []
            target = sender.modules.resolve(i.target)
            sar = ar.spawn_request(
                actor=target,
                master_instance=obj,
                known_values=dict(type=utype))
                # param_values=dict(pupload_type=et))
            n = sar.get_total_count()
            if n == 0:
                iar = target.insert_action.request_from(
                    sar, master_instance=obj)
                btn = iar.ar2button(
                    None, _("Upload"), icon_name="page_add",
                    title=_("Upload a file from your PC to the server."))
                items.append(btn)
            elif n == 1:
                after_show = ar.get_status()
                obj = sar.data_iterator[0]
                items.append(sar.renderer.href_button(
                    sender.build_media_url(obj.file.name),
                    _("show"),
                    target='_blank',
                    icon_name='page_go',
                    style="vertical-align:-30%;",
                    title=_("Open the uploaded file in a "
                            "new browser window")))
                after_show.update(record_id=obj.pk)
                items.append(sar.window_action_button(
                    sar.ah.actor.detail_action,
                    after_show,
                    _("Edit"), icon_name='application_form',
                    title=_("Edit metadata of the uploaded file.")))
            else:
                obj = sar.sliced_data_iterator[0]
                items.append(ar.obj2html(
                    obj, pgettext("uploaded file", "Last")))

                btn = sar.renderer.action_button(
                    obj, sar, sar.bound_action,
                    _("All {0} files").format(n),
                    icon_name=None)
                items.append(btn)

            return E.div(*join_elems(items, ', '))
Ejemplo n.º 14
0
Archivo: ui.py Proyecto: khchine5/xl
 def description(self, obj, ar):
     # pv = dict(start_date=obj.day, end_date=obj.day)
     # pv.update(observed_event=dd.PeriodEvents.active)
     # pv.update(user=ar.param_values.user)
     # sar = ar.spawn(MySessionsByDate, param_values=pv)
     elems = [obj.sar.ar2button(label=six.text_type(obj))]
     tickets = [
         ar.obj2html(t, "#{0}".format(t.id), title=t.summary)
         for t in obj._tickets]
     if len(tickets) > 0:
         elems.append(" (")
         elems += join_elems(tickets, ', ')
         elems.append(")")
     return E.span(*elems)
Ejemplo n.º 15
0
 def contact_details(self, ar):
     # if ar is None:
     #     return ''
     items = []
     for cdt in ContactDetailTypes.get_list_items():
         if cdt.field_name:
             value = getattr(self, cdt.field_name)
         if value:
             items.append(cdt.format(value))
     # items.append(ContactDetailTypes.email.format(self.email))
     # # items.append(E.a(self.email, href="mailto:" + self.email))
     # items.append(self.phone)
     # items.append(E.a(self.url, href=self.url))
     return E.p(*join_elems(items, sep=', '))
Ejemplo n.º 16
0
    def unused_get_table_summary(self, obj, ar):
        sar = self.request_from(ar, master_instance=obj)
        chunks = []

        for mbr in sar:
            chunks.append(ar.obj2html(mbr, str(mbr.user)))
        chunks = join_elems(chunks, ', ')

        # sar = self.insert_action.request_from(sar)
        # if sar.get_permission():
        #     btn = sar.ar2button(None, _("Add member"), icon_name=None)
        #     chunks.append(E.p((btn)))

        return E.div(*chunks)
Ejemplo n.º 17
0
    def get_table_summary(self, obj, ar):
        if ar is None:
            return ''
        elems = []

        # Button for starting a session from ticket
        sar = obj.start_session.request_from(ar)
        # if ar.renderer.is_interactive and sar.get_permission():
        # if sar.get_permission():
        #     btn = sar.ar2button(obj)
        #     elems += [E.p(btn)]

        # Active sessions:
        active_sessions = []
        session_summaries = E.ul()
        qs = rt.models.working.Session.objects.filter(ticket=obj)
        tot = Duration()
        for ses in qs:
            d = ses.get_duration()
            if d is not None:
                tot += d
            if ses.end_time is None:
                txt = "{0} since {1}".format(ses.user, ses.start_time)
                lnk = ar.obj2html(ses, txt)
                sar = ses.end_session.request_from(ar)
                if sar.get_permission():
                    lnk = E.span(lnk, " ", sar.ar2button(ses))
                active_sessions.append(lnk)
            if ses.summary:
                session_summaries.insert(0,
                    E.li(
                        "%s %s: %s"%(ses.user,
                                     naturaltime(datetime.combine(
                                                 ses.start_date, ses.start_time))
                                     ,ses.summary)
                    )
                )


        # elems.append(E.p(_("Total {0} hours.").format(tot)))
        elems.append(E.p(_("Total %s hours.") % tot))

        if len(active_sessions) > 0:
            elems.append(E.p(
                ensureUtf(_("Active sessions")), ": ",
                *join_elems(active_sessions, ', ')))
        if len(session_summaries) > 0:
            elems.append(session_summaries)

        return ar.html_text(E.div(*elems))
Ejemplo n.º 18
0
    def get_table_summary(self, obj, ar):
        sar = self.request_from(ar, master_instance=obj)
        chunks = []
        
        for mbr in sar:
            chunks.append(ar.obj2html(mbr, str(mbr.user)))
        chunks = join_elems(chunks, ', ')

        # sar = self.insert_action.request_from(sar)
        # if sar.get_permission():
        #     btn = sar.ar2button(None, _("Add member"), icon_name=None)
        #     chunks.append(E.p((btn)))

        return E.div(*chunks)
Ejemplo n.º 19
0
    def get_table_summary(self, obj, ar):
        if ar is None:
            return ''
        elems = []

        # Button for starting a session from ticket
        sar = obj.start_session.request_from(ar)
        # if ar.renderer.is_interactive and sar.get_permission():
        # if sar.get_permission():
        #     btn = sar.ar2button(obj)
        #     elems += [E.p(btn)]

        # Active sessions:
        active_sessions = []
        session_summaries = E.ul()
        qs = rt.models.working.Session.objects.filter(ticket=obj)
        tot = Duration()
        for ses in qs:
            d = ses.get_duration()
            if d is not None:
                tot += d
            if ses.end_time is None:
                txt = "{0} since {1}".format(ses.user, ses.start_time)
                lnk = ar.obj2html(ses, txt)
                sar = ses.end_session.request_from(ar)
                if sar.get_permission():
                    lnk = E.span(lnk, " ", sar.ar2button(ses))
                active_sessions.append(lnk)
            if ses.summary:
                session_summaries.insert(
                    0,
                    E.li("%s %s: %s" %
                         (ses.user,
                          naturaltime(
                              datetime.combine(ses.start_date,
                                               ses.start_time)), ses.summary)))

        # elems.append(E.p(_("Total {0} hours.").format(tot)))
        elems.append(E.p(_("Total %s hours.") % tot))

        if len(active_sessions) > 0:
            elems.append(
                E.p(ensureUtf(_("Active sessions")), ": ",
                    *join_elems(active_sessions, ', ')))
        if len(session_summaries) > 0:
            elems.append(session_summaries)

        return ar.html_text(E.div(*elems))
Ejemplo n.º 20
0
 def get_language_knowledge(self, *buttons):
     self.load_language_knowledge()
     lst = []
     for lng in settings.SITE.languages:
         cl = self._cef_levels.get(lng.django_code, "---")
         lst.append("{}: {}".format(lng.name, cl))
         # if cl is None:
         #     lst.append("{}: {}".format(lng.name, ))
         # else:
         #     lst.append("{}: {}".format(lng.name, cl))
     if len(self._mother_tongues):
         lst.append("{}: {}".format(
             _("Mother tongues"), self.mother_tongues))
     lst += buttons
     lst = join_elems(lst, E.br)
     return E.p(*lst)
Ejemplo n.º 21
0
 def get_language_knowledge(self, *buttons):
     self.load_language_knowledge()
     lst = []
     for lng in settings.SITE.languages:
         lst.append("{}: {}".format(
             lng.name, self._cef_levels.get(lng.django_code, NONE)))
         # if cl is None:
         #     lst.append("{}: {}".format(lng.name, ))
         # else:
         #     lst.append("{}: {}".format(lng.name, cl))
     if len(self._mother_tongues):
         lst.append("{}: {}".format(
             _("Mother tongues"), self.mother_tongues))
     lst += buttons
     lst = join_elems(lst, E.br)
     return E.p(*lst)
Ejemplo n.º 22
0
 def get_overview_elems(self, ar):
     elems = []
     buttons = self.get_mti_buttons(ar)
     # buttons = join_elems(buttons, ', ')
     elems.append(E.p(str(_("See as ")), *buttons,
                      style="font-size:8px;text-align:right;padding:3pt;"))
     elems += self.get_name_elems(ar)
     elems.append(E.br())
     elems += join_elems(list(self.address_location_lines()), sep=E.br)
     elems = [
         E.div(*forcetext(elems),
               style="font-size:18px;font-weigth:bold;"
               "vertical-align:bottom;text-align:middle")]
     elems += AddressOwner.get_overview_elems(self, ar)
     elems += ContactDetailsOwner.get_overview_elems(self, ar)
     return elems
Ejemplo n.º 23
0
def welcome_messages(ar):
    """Yield a message "Your stars are X, Y, ..." for the welcome page.

    This message mentions all starred objects of the requesting user
    and whose :attr:`nickname <Star.nickname>` is not empty.

    """
    Star = rt.models.stars.Star
    qs = Star.objects.filter(user=ar.get_user()).exclude(nickname='')
    if qs.count() > 0:
        chunks = [str(_("Your stars are "))]
        chunks += join_elems([
            ar.obj2html(obj.owner, obj.nickname or unicode(obj.owner))
            for obj in qs])
        chunks.append('.')
        yield E.span(*chunks)
Ejemplo n.º 24
0
 def worked_tickets(self, obj, ar):
     # pv = dict(start_date=obj.day, end_date=obj.day)
     # pv.update(observed_event=dd.PeriodEvents.active)
     # pv.update(user=ar.param_values.user)
     # sar = ar.spawn(MySessionsByDate, param_values=pv)
     # elems = [obj.sar.ar2button(label=six.text_type(obj))]
     elems = []
     tickets = [
         ar.obj2html(t, "#{0}".format(t.id), title=t.summary)
         for t in obj._tickets
     ]
     if len(tickets) > 0:
         # elems.append(" (")
         elems += join_elems(tickets, ', ')
         # elems.append(")")
     return E.span(*elems)
Ejemplo n.º 25
0
            def welcome_messages(ar):
                def fmt(model, pk):
                    try:
                        obj = model.objects.get(pk=pk)
                    except model.DoesNotExist:
                        return "{}{}".format(model.__name__, pk)
                    return ar.obj2html(obj)

                up = ar.get_user().get_preferences()
                if len(up.locked_rows):
                    chunks = [
                        ugettext("You have a dangling edit lock on"), " "]
                    chunks += join_elems(
                        [fmt(m, pk) for m, pk in up.locked_rows], ", ")
                    chunks.append('.')
                    yield E.span(*chunks)
Ejemplo n.º 26
0
def welcome_messages(ar):
    """Yield a message "Your stars are X, Y, ..." for the welcome page.

    This message mentions all starred objects of the requesting user
    and whose :attr:`nickname <Star.nickname>` is not empty.

    """
    Star = rt.models.stars.Star
    qs = Star.objects.filter(user=ar.get_user()).exclude(nickname='')
    if qs.count() > 0:
        chunks = [str(_("Your stars are "))]
        chunks += join_elems([
            ar.obj2html(obj.owner, obj.nickname or unicode(obj.owner))
            for obj in qs])
        chunks.append('.')
        yield E.span(*chunks)
Ejemplo n.º 27
0
            def welcome_messages(ar):
                def fmt(model, pk):
                    try:
                        obj = model.objects.get(pk=pk)
                    except model.DoesNotExist:
                        return "{}{}".format(model.__name__, pk)
                    return ar.obj2html(obj)

                up = ar.get_user().get_preferences()
                if len(up.locked_rows):
                    chunks = [
                        ugettext("You have a dangling edit lock on"), " "
                    ]
                    chunks += join_elems(
                        [fmt(m, pk) for m, pk in up.locked_rows], ", ")
                    chunks.append('.')
                    yield E.span(*chunks)
Ejemplo n.º 28
0
 def my_description(cls, obj, ar):
     mi = ar.master_instance
     if mi is None:
         return
     lst = [obj.summary]
     tpl = u"{0}: {1}"
     # if obj.site is not None and obj.site == mi.interesting_for:
     #     lst.append(_("site-specific"))
     if obj.site is not None:  # and obj.site != mi.interesting_for:
         lst.append(tpl.format(ensureUtf(_("Site")), ensureUtf(obj.site)))
     if obj.user is not None:
         lst.append(tpl.format(ensureUtf(_("Author")), ensureUtf(obj.user)))
     # if obj.project is not None:
     #     lst.append(tpl.format(
     #         ensureUtf(_("Project")), ensureUtf(obj.project)))
     # if obj.topic is not None:
     #     lst.append(tpl.format(
     #         ensureUtf(_("Topic")), ensureUtf(obj.topic)))
     return E.p(*join_elems(lst, '. '))
Ejemplo n.º 29
0
    def recent_comments(self, ar):
        if ar is None:
            return ''
        cls = rt.models.comments.CommentsByRFC
        sar = cls.request_from(
            ar, master_instance=self, limit=3)
        chunks = []
        for com in sar.sliced_data_iterator:
            chunks.append(ar.obj2html(com, str(com)))
        chunks.append("...")
        chunks = join_elems(chunks, ', ')

        sar = cls.insert_action.request_from(sar)
        if sar.get_permission():
            btn = sar.ar2button(None, _("Write comment"), icon_name=None)
            chunks.append(" ")
            chunks.append(btn)

        return E.div(*chunks)
Ejemplo n.º 30
0
    def recent_comments(self, ar):
        if ar is None:
            return ''
        cls = rt.models.comments.CommentsByRFC
        sar = cls.request_from(
            ar, master_instance=self, limit=3)
        chunks = []
        for com in sar.sliced_data_iterator:
            chunks.append(ar.obj2html(com, str(com)))
        chunks.append("...")
        chunks = join_elems(chunks, ', ')

        sar = cls.insert_action.request_from(sar)
        if sar.get_permission():
            btn = sar.ar2button(None, _("Write comment"), icon_name=None)
            chunks.append(" ")
            chunks.append(btn)

        return E.div(*chunks)
Ejemplo n.º 31
0
 def get_overview_elems(self, ar):
     elems = []
     buttons = self.get_mti_buttons(ar)
     if len(buttons) > 1:
         # buttons = join_elems(buttons, ', ')
         elems.append(
             E.p(str(_("See as ")),
                 *buttons,
                 style="font-size:8px;text-align:right;padding:3pt;"))
     elems += self.get_name_elems(ar)
     elems.append(E.br())
     elems += join_elems(list(self.address_location_lines()), sep=E.br)
     elems = [
         E.div(*forcetext(elems),
               style="font-size:18px;font-weigth:bold;"
               "vertical-align:bottom;text-align:middle")
     ]
     elems += AddressOwner.get_overview_elems(self, ar)
     elems += ContactDetailsOwner.get_overview_elems(self, ar)
     return elems
Ejemplo n.º 32
0
 def my_description(cls, obj, ar):
     mi = ar.master_instance
     if mi is None:
         return
     lst = [obj.summary]
     tpl = u"{0}: {1}"
     # if obj.site is not None and obj.site == mi.interesting_for:
     #     lst.append(_("site-specific"))
     if obj.site is not None:  # and obj.site != mi.interesting_for:
         lst.append(tpl.format(
             ensureUtf(_("Site")), ensureUtf(obj.site)))
     if obj.user is not None:
         lst.append(tpl.format(
             ensureUtf(_("Author")), ensureUtf(obj.user)))
     # if obj.project is not None:
     #     lst.append(tpl.format(
     #         ensureUtf(_("Project")), ensureUtf(obj.project)))
     # if obj.topic is not None:
     #     lst.append(tpl.format(
     #         ensureUtf(_("Topic")), ensureUtf(obj.topic)))
     return E.p(*join_elems(lst, '. '))
Ejemplo n.º 33
0
 def pick_choice(self, ar):
     if ar is None:
         return fld.value_from_object(self)
     # ▶: U+25B6, ◀: U+25C0
     selected_tpl = "▶{}◀"
     elems = []
     ba = ar.actor.get_action_by_name(action_name)
     for v in cls.get_list_items():
         kw = dict(action_param_values=dict(choice=v))
         label = str(v.button_text or v.text)
         if fld.value_from_object(self, ar) == v:
             elems.append(E.b(selected_tpl.format(label)))
         else:
             if fldname in ar.actor.get_disabled_fields(self, ar):
                 pass  # elems.append(label)
             else:
                 elems.append(
                     ar.action_button(ba,
                                      self,
                                      label=label,
                                      request_kwargs=kw,
                                      title=v.text))
     return E.p(*join_elems(elems, sep=" | "))
Ejemplo n.º 34
0
 def get_table_summary(self, obj, ar):
     if obj is None:
         return
     UploadType = rt.models.uploads.UploadType
     # Upload = rt.models.uploads.Upload
     elems = []
     types = []
     perm = ar.get_user().user_type.has_required_roles(self.required_roles)
     qs = UploadType.objects.all()
     if isinstance(obj, UploadController):
         area = obj.get_upload_area()
         if area is not None:
             qs = qs.filter(upload_area=area)
     else:
         return E.div("{} is not an UploadController!".format(
             model_class_path(obj.__class__)))
     volume = obj.get_uploads_volume()
     # print(20190208, volume)
     for ut in qs:
         sar = ar.spawn(
             self, master_instance=obj,
             known_values=dict(type_id=ut.id))
         # logger.info("20140430 %s", sar.data_iterator.query)
         files = []
         for m in sar:
             text = self.format_row_in_slave_summary(ar, m)
             if text is None:
                 continue
             edit = ar.obj2html(
                 m,  text,  # _("Edit"),
                 # icon_name='application_form',
                 title=_("Edit metadata of the uploaded file."))
             if m.file.name:
                 url = settings.SITE.build_media_url(m.file.name)
             elif m.volume_id and m.volume.base_url and m.library_file:
                 url = m.volume.base_url + m.library_file
             else:
                 url = None
             if url:
                 show = ar.renderer.href_button(
                     url,
                     # u"\u21A7",  # DOWNWARDS ARROW FROM BAR (↧)
                     # u"\u21E8",
                     u"\u21f2",  # SOUTH EAST ARROW TO CORNER (⇲)
                     style="text-decoration:none;",
                     # _(" [show]"),  # fmt(m),
                     target='_blank',
                     # icon_name=settings.SITE.build_static_url(
                     #     'images/xsite/link'),
                     # icon_name='page_go',
                     # style="vertical-align:-30%;",
                     title=_("Open the file in a new browser window"))
                     # title=_("Open the uploaded file in a new browser window"))
                 # logger.info("20140430 %s", tostring(e))
                 files.append(E.span(edit, ' ', show))
             else:
                 files.append(edit)
         if perm and ut.wanted \
            and (ut.max_number < 0 or len(files) < ut.max_number):
             btn = self.insert_action.request_from(
                 sar, master_instance=obj,
                 known_values=dict(type_id=ut.id, volume=volume)).ar2button()
             if btn is not None:
                 files.append(btn)
         if len(files) > 0:
             chunks = (str(ut), ': ') + tuple(join_elems(files, ', '))
             types.append(chunks)
     # logger.info("20140430 %s", [tostring(e) for e in types])
     # elems += [str(ar.bound_action.action.__class__), " "]
     if ar.bound_action.action.window_type == "d":
         if len(types) == 0:
             elems.append(E.ul(E.li(str(ar.no_data_text))))
         else:
             elems.append(E.ul(*[E.li(*chunks) for chunks in types]))
     else:
         if len(types) == 0:
             elems.append(str(ar.no_data_text))
             elems.append(" / ")
         else:
             for chunks in types:
                 elems.extend(chunks)
                 elems.append(" / ")
         elems.append(obj.show_uploads.as_button_elem(ar))
     # ba = self.find_action_by_name("show_uploads")
     return E.div(*elems)
Ejemplo n.º 35
0
    def get_table_summary(self, obj, ar):
        """Displays the uploads related to this controller as a list grouped
        by uploads type.

        Note that this also works on
        :class:`lino_welfare.modlib.uploads.models.UploadsByClient`
        and their subclasses for the different `_upload_area`.

        """
        if obj is None:
            return
        UploadType = rt.models.uploads.UploadType
        # Upload = rt.models.uploads.Upload
        elems = []
        types = []
        perm = ar.get_user().user_type.has_required_roles(self.required_roles)
        qs = UploadType.objects.all()
        if isinstance(obj, UploadController):
            area = obj.get_upload_area()
            if area is not None:
                qs = qs.filter(upload_area=area)
        else:
            raise Exception("A {} is not an UploadController!".format(
                obj.__class__))

        for ut in qs:
            sar = ar.spawn(self,
                           master_instance=obj,
                           known_values=dict(type_id=ut.id))
            # logger.info("20140430 %s", sar.data_iterator.query)
            files = []
            for m in sar:
                text = self.format_row_in_slave_summary(ar, m)
                if text is None:
                    continue
                edit = ar.obj2html(
                    m,
                    text,  # _("Edit"),
                    # icon_name='application_form',
                    title=_("Edit metadata of the uploaded file."))
                if m.file.name:
                    show = ar.renderer.href_button(
                        settings.SITE.build_media_url(m.file.name),
                        # u"\u21A7",  # DOWNWARDS ARROW FROM BAR (↧)
                        # u"\u21E8",
                        u"\u21f2",  # SOUTH EAST ARROW TO CORNER (⇲)
                        style="text-decoration:none;",
                        # _(" [show]"),  # fmt(m),
                        target='_blank',
                        # icon_name=settings.SITE.build_static_url(
                        #     'images/xsite/link'),
                        # icon_name='page_go',
                        # style="vertical-align:-30%;",
                        title=_(
                            "Open the uploaded file in a new browser window"))
                    # logger.info("20140430 %s", tostring(e))
                    files.append(E.span(edit, ' ', show))
                else:
                    files.append(edit)
            if perm and ut.wanted \
               and (ut.max_number < 0 or len(files) < ut.max_number):
                btn = self.insert_action.request_from(
                    sar, master_instance=obj,
                    known_values=dict(type_id=ut.id)).ar2button()
                if btn is not None:
                    files.append(btn)
            if len(files) > 0:
                e = E.p(str(ut), ': ', *join_elems(files, ', '))
                types.append(e)
        # logger.info("20140430 %s", [tostring(e) for e in types])
        if len(types) == 0:
            elems.append(E.ul(E.li(str(ar.no_data_text))))
        else:
            elems.append(E.ul(*[E.li(e) for e in types]))
        return E.div(*elems)
Ejemplo n.º 36
0
 def get_table_summary(self, obj, ar):
     if obj is None:
         return
     UploadType = rt.models.uploads.UploadType
     # Upload = rt.models.uploads.Upload
     elems = []
     types = []
     perm = ar.get_user().user_type.has_required_roles(self.required_roles)
     qs = UploadType.objects.all()
     if isinstance(obj, UploadController):
         area = obj.get_upload_area()
         if area is not None:
             qs = qs.filter(upload_area=area)
     else:
         return E.div("{} is not an UploadController!".format(
             model_class_path(obj.__class__)))
     volume = obj.get_uploads_volume()
     # print(20190208, volume)
     for ut in qs:
         sar = ar.spawn(self,
                        master_instance=obj,
                        known_values=dict(type_id=ut.id))
         # logger.info("20140430 %s", sar.data_iterator.query)
         files = []
         for m in sar:
             text = self.format_row_in_slave_summary(ar, m)
             if text is None:
                 continue
             edit = ar.obj2html(
                 m,
                 text,  # _("Edit"),
                 # icon_name='application_form',
                 title=_("Edit metadata of the uploaded file."))
             if m.file.name:
                 url = settings.SITE.build_media_url(m.file.name)
             elif m.volume_id and m.volume.base_url and m.library_file:
                 url = m.volume.base_url + m.library_file
             else:
                 url = None
             if url:
                 show = ar.renderer.href_button(
                     url,
                     # u"\u21A7",  # DOWNWARDS ARROW FROM BAR (↧)
                     # u"\u21E8",
                     u"\u21f2",  # SOUTH EAST ARROW TO CORNER (⇲)
                     style="text-decoration:none;",
                     # _(" [show]"),  # fmt(m),
                     target='_blank',
                     # icon_name=settings.SITE.build_static_url(
                     #     'images/xsite/link'),
                     # icon_name='page_go',
                     # style="vertical-align:-30%;",
                     title=_("Open the file in a new browser window"))
                 # title=_("Open the uploaded file in a new browser window"))
                 # logger.info("20140430 %s", tostring(e))
                 files.append(E.span(edit, ' ', show))
             else:
                 files.append(edit)
         if perm and ut.wanted \
            and (ut.max_number < 0 or len(files) < ut.max_number):
             btn = self.insert_action.request_from(
                 sar,
                 master_instance=obj,
                 known_values=dict(type_id=ut.id,
                                   volume=volume)).ar2button()
             if btn is not None:
                 files.append(btn)
         if len(files) > 0:
             chunks = (str(ut), ': ') + tuple(join_elems(files, ', '))
             types.append(chunks)
     # logger.info("20140430 %s", [tostring(e) for e in types])
     # elems += [str(ar.bound_action.action.__class__), " "]
     if ar.bound_action.action.window_type == "d":
         if len(types) == 0:
             elems.append(E.ul(E.li(str(ar.no_data_text))))
         else:
             elems.append(E.ul(*[E.li(*chunks) for chunks in types]))
     else:
         if len(types) == 0:
             elems.append(str(ar.no_data_text))
             elems.append(" / ")
         else:
             for chunks in types:
                 elems.extend(chunks)
                 elems.append(" / ")
         elems.append(obj.show_uploads.as_button_elem(ar))
     # ba = self.find_action_by_name("show_uploads")
     return E.div(*elems)