Example #1
0
 def get(self, request, index, *args, **kw):
     """Returns a rendered HTML version the requested user dashboard."""
     ar = BaseRequest(request)
     ar.renderer = settings.SITE.plugins.react.renderer
     ar.requesting_panel = f"dashboard-{index}"
     dash = ar.get_user().get_preferences().dashboard_items
     if len(dash) > index:
         html = ar.show_story([dash[index]])
     else:
         html = ""
     ar.success(html=html)
     return json_response(ar.response, ar.content_type)
Example #2
0
    def get(self, request, name=None):
        # ar = action_request(None, None, request, request.GET, True)
        ar = BaseRequest(
            # user=user,
            request=request,
            renderer=settings.SITE.plugins.openui5.renderer)
        u = ar.get_user()

        context = dict(
            menu=settings.SITE.get_site_menu(None, u.user_type)
        )

        device_type = request.device_type
        print ("device_type", device_type)
        # print(u)
        # print(name)
        if name.startswith("dialog/SignInActionFormPanel"):
            tplname = "openui5/fragment/SignInActionFormPanel.fragment.xml"

        elif name.startswith("menu/user/user.fragment.xml"):
            tplname = "openui5/fragment/UserMenu.fragment.xml"

        elif name.startswith("menu/"):
            tplname = "openui5/fragment/Menu.fragment.xml"
            sel_menu = name.split("/", 1)[1].split('.', 1)[0]
            # [05/Feb/2018 09:32:25] "GET /ui/menu/mailbox.fragment.xml HTTP/1.1" 200 325
            for i in context['menu'].items:
                if i.name == sel_menu:
                    context.update(dict(
                        opened_menu=i
                    ))
                    break
            else:
                raise Exception("No Menu with name %s" % sel_menu)
        elif name.startswith("grid/") or name.startswith("slavetable/") or \
                name.startswith("view/grid/") or name.startswith("view/slavetable/"):  # Table/grid view
            # todo Get table data
            # "grid/tickets/AllTickets.view.xml"
            # or
            # "slavetable/tickets/AllTickets.view.xml
            app_label, actor = re.match(r"(?:(?:view\/)?grid|slavetable)\/(.+)\/(.+).view.xml$", name).groups()
            ar = action_request(app_label, actor, request, request.GET, True)
            actor = rt.models.resolve(app_label + "." + actor)
            store = ar.ah.store
            columns = actor.get_handle().get_columns()
            store.list_fields
            # todo match columns's field.name with store.list_fields storefield's index.
            index_mod = 0
            for c in columns:
                c.fields_index = find(store.list_fields, c.field.name,
                                      key=lambda f: f.name) + index_mod
                if isinstance(c, ComboFieldElement):
                    # Skip the data value for multi value columns, such as choices and FK fields.
                    # use c.fields_index -1 for data value
                    index_mod += 1
            # print(ar.ah.store.pk_index) # indexk of PK in detail row data

            if settings.SITE.is_installed('contenttypes'):
                # Used in slave tables of gfks relations
                m = getattr(store.pk, 'model', None)
                # e.g. pk may be the VALUE_FIELD of a choicelist which
                # has no model
                if m is not None:
                    ct = ContentType.objects.get_for_model(m).pk
                    context.update(content_type=ct)

            context.update({
                "actor": actor,
                "columns": columns,
                "actions": actor.get_actions(),
                "title": actor.label,
                "pk_index": store.pk_index,
                "is_slave": name.startswith("slavetable/") or actor.master is not None,
            })
            if name.startswith("slavetable/"):
                tplname = "openui5/view/slaveTable.view.xml"
            else:
                # if device_type == 'desktop':
                if not actor.tablet_columns and not actor.mobile_columns:
                    tplname = "openui5/view/table.view.xml"  # Change to "grid" to match action?
                else:
                    tplname = "openui5/view/table.mview.xml"

                    # ar = action_request(app_label, actor, request, request.GET, True)
                    # add to context

        elif name.startswith("detail") or name.startswith("view/detail"):  # Detail view
            # "detail/tickets/AllTickets.view.xml"
            app_label, actor = re.match(r"(?:view\/)?detail\/(.+)\/(.+).view.xml$", name).groups()
            actor = rt.models.resolve(app_label + "." + actor)
            # detail_action = actor.actions['detail']
            detail_action = actor.detail_action
            window_layout = detail_action.get_window_layout()
            layout_handle = window_layout.get_layout_handle(settings.SITE.plugins.openui5)
            layout_handle.main.elements  # elems # Refactor into actor get method?
            ba_actions = actor.get_toolbar_actions(actor.detail_action.action)
            context.update({
                "actor": actor,
                # "columns": actor.get_handle().get_columns(),
                "actions": actor.get_actions(),
                'ba_actions': ba_actions,
                "title": actor.label,  #
                # "main_elems": layout_handle.main.elements,
                "main": layout_handle.main,
                "layout_handle": layout_handle

            })
            tplname = "openui5/view/detail.view.xml"  # Change to "grid" to match action?
            # ar = action_request(app_label, actor, request, request.GET, True)
            # add to context

        elif name.startswith("view/") or \
                name.startswith("controller/") or \
                name.startswith("core/") or name.startswith("fragment/"):
            tplname = "openui5/" + name

            if "manifest.json" in name:
                ## List all master tables for routing
                actors_list = [
                    rpt for rpt in kernel.master_tables
                                   + kernel.slave_tables
                                   + list(kernel.generic_slaves.values())
                                   + kernel.virtual_tables
                                   + kernel.frames_list
                ]
                detail_list = set()

                def add(res, collector, fl, formpanel_name):
                    if fl is None or fl._datasource is None:
                        return  # 20130804
                    if fl._datasource != res:
                        fl._other_datasources.add(res)
                    if fl not in collector:
                        collector.add(res)

                for res in actors_list:
                    add(res, detail_list, res.detail_layout, "detail.%s" % res)

                    # self.actors_list.extend(
                #     [a for a in list(kernel.CHOICELISTS.values())
                #      if settings.SITE.is_installed(a.app_label)])

                # don't include for abstract actors
                actors_list = [a for a in actors_list
                               if not a.is_abstract()]

                context.update(actors_list=actors_list,
                               detail_list=detail_list,
                               )



        else:
            raise Exception("Can't find a view for path: {}".format(name))

        return XML_response(ar, tplname, context)