Exemplo n.º 1
0
    def run(self, request, context):
        base = self.parent
        is_get_data = context.isGetData
        # Получаем объект по id
        try:
            obj = base.get_row(context.id)
        except base._nofound_exception:
            return OperationResult.by_message(MSG_DOESNOTEXISTS % context.id)

        # Разница между новым и созданным объектов в том,
        # что у нового нет id или он пустой
        create_new = True
        if isinstance(obj, dict) and obj.get('id') is not None:
            create_new = False
        elif hasattr(obj, 'id') and getattr(obj, 'id') is not None:
            create_new = False
        if create_new and base.add_window:
            win = utils.bind_object_from_request_to_form(
                request, base.get_row, base.add_window)
        else:
            win = utils.bind_object_from_request_to_form(
                request, base.get_row, base.edit_window)

        if not win.title:
            win.title = base.title
        win.form.url = base.save_action.get_absolute_url()
        # укажем адрес для чтения данных
        win.data_url = base.edit_window_action.get_absolute_url()

        # проверим право редактирования
        if not self.parent.has_sub_permission(request.user,
                                              self.parent.PERM_EDIT, request):
            exclude_list = ['close_btn', 'cancel_btn']
            win.make_read_only(True, exclude_list)

        # У окна может быть процедура доп. конфигурации
        # под конкретный справочник
        if (hasattr(win, 'configure_for_dictpack')
                and callable(win.configure_for_dictpack)):
            win.configure_for_dictpack(action=self,
                                       pack=self.parent,
                                       request=request,
                                       context=context)

        if not is_get_data:
            # если запрашивали не данные - вернем окно
            return ExtUIScriptResult(base.get_edit_window(win))
        else:
            # если просили данные, то выжмем их из окна обратно в объект,
            # т.к. в окне могли быть и другие данных (не из этого объекта)
            data_object = {}
            # т.к. мы не знаем какие поля должны быть у объекта - создадим
            # все, которые есть на форме
            all_fields = win.form._get_all_fields(win)
            for field in all_fields:
                data_object[field.name] = None
            win.form.to_object(data_object)
            return PreJsonResult({'success': True, 'data': data_object})
Exemplo n.º 2
0
    def run(self, request, context):
        base = self.parent
        is_get_data = context.isGetData
        # Получаем объект по id
        try:
            obj = base.get_row(context.id)
        except base._nofound_exception:
            return OperationResult.by_message(MSG_DOESNOTEXISTS % context.id)

        # Разница между новым и созданным объектов в том,
        # что у нового нет id или он пустой
        create_new = True
        if isinstance(obj, dict) and obj.get('id') is not None:
            create_new = False
        elif hasattr(obj, 'id') and getattr(obj, 'id') is not None:
            create_new = False
        if create_new and base.add_window:
            win = utils.bind_object_from_request_to_form(
                request, base.get_row, base.add_window)
        else:
            win = utils.bind_object_from_request_to_form(
                request, base.get_row, base.edit_window)

        if not win.title:
            win.title = base.title
        win.form.url = base.save_action.get_absolute_url()
        # укажем адрес для чтения данных
        win.data_url = base.edit_window_action.get_absolute_url()

        # проверим право редактирования
        if not self.parent.has_sub_permission(
                request.user, self.parent.PERM_EDIT, request):
            exclude_list = ['close_btn', 'cancel_btn']
            win.make_read_only(True, exclude_list)

        # У окна может быть процедура доп. конфигурации
        # под конкретный справочник
        if (hasattr(win, 'configure_for_dictpack') and
                callable(win.configure_for_dictpack)):
            win.configure_for_dictpack(action=self, pack=self.parent,
                                       request=request, context=context)

        if not is_get_data:
            # если запрашивали не данные - вернем окно
            return ExtUIScriptResult(base.get_edit_window(win))
        else:
            # если просили данные, то выжмем их из окна обратно в объект,
            # т.к. в окне могли быть и другие данных (не из этого объекта)
            data_object = {}
            # т.к. мы не знаем какие поля должны быть у объекта - создадим
            # все, которые есть на форме
            all_fields = win.form._get_all_fields(win)
            for field in all_fields:
                data_object[field.name] = None
            win.form.to_object(data_object)
            return PreJsonResult({'success': True, 'data': data_object})
Exemplo n.º 3
0
    def run(self, request, context):
        base = self.parent
        win = utils.bind_object_from_request_to_form(request, base.get_node,
                                                     base.edit_node_window,
                                                     base.contextTreeIdName)
        win.orig_request = request
        win.orig_context = context
        if not win.title:
            win.title = base.title
        win.form.url = base.save_node_action.get_absolute_url()

        # проверим право редактирования
        if not self.parent.has_perm(request, self.parent.PERM_EDIT):
            win.make_read_only(access_off=True,
                               exclude_list=['close_btn', 'cancel_btn'])

        # У окна может быть процедура доп. конфигурации под конкретный справочник
        if hasattr(win, 'configure_for_dictpack') and callable(
                win.configure_for_dictpack):
            win.configure_for_dictpack(action=self,
                                       pack=self.parent,
                                       request=request,
                                       context=context)

        return ExtUIScriptResult(base.get_node_edit_window(win))
Exemplo n.º 4
0
    def run(self, request, context):
        """
        """
        base = self.parent

        win = utils.bind_object_from_request_to_form(request,
                                                     base.get_row,
                                                     base.edit_window,
                                                     exclusion=['id'])

        if not win.title:
            win.title = base.title

        win.form.url = base.save_action.get_absolute_url()
        # укажем адрес для чтения данных
        win.data_url = base.edit_window_action.get_absolute_url()
        win.orig_request = request
        win.orig_context = context

        # У окна может быть процедура доп. конфигурации
        # под конкретный справочник
        if (hasattr(win, 'configure_for_dictpack')
                and callable(win.configure_for_dictpack)):
            win.configure_for_dictpack(action=self,
                                       pack=self.parent,
                                       request=request,
                                       context=context)

        return ExtUIScriptResult(base.get_edit_window(win))
Exemplo n.º 5
0
    def run(self, request, context):
        """
        """
        base = self.parent

        win = utils.bind_object_from_request_to_form(
            request, base.get_row, base.edit_window, exclusion=['id'])

        if not win.title:
            win.title = base.title

        win.form.url = base.save_action.get_absolute_url()
        # укажем адрес для чтения данных
        win.data_url = base.edit_window_action.get_absolute_url()
        win.orig_request = request
        win.orig_context = context

        # У окна может быть процедура доп. конфигурации
        # под конкретный справочник
        if (hasattr(win, 'configure_for_dictpack') and
                callable(win.configure_for_dictpack)):
            win.configure_for_dictpack(
                action=self, pack=self.parent,
                request=request, context=context)

        return ExtUIScriptResult(base.get_edit_window(win))
Exemplo n.º 6
0
    def run(self, request, context):
        base = self.parent
        win = utils.bind_object_from_request_to_form(request, base.get_row,
                                                     base.edit_window)
        win.orig_request = request
        win.orig_context = context
        if not win.title:
            win.title = base.title
        win.form.url = base.save_row_action.get_absolute_url()

        # проверим право редактирования
        if not self.parent.has_perm(request, self.parent.PERM_EDIT):
            win.make_read_only(access_off=True,
                               exclude_list=['cancel_btn', 'close_btn'])

        return ExtUIScriptResult(base.get_edit_window(win))
Exemplo n.º 7
0
    def run(self, request, context):
        base = self.parent
        win = utils.bind_object_from_request_to_form(
            request, base.get_row, base.edit_window)
        win.orig_request = request
        win.orig_context = context
        if not win.title:
            win.title = base.title
        win.form.url = base.save_row_action.get_absolute_url()

        # проверим право редактирования
        if not self.parent.has_perm(request, self.parent.PERM_EDIT):
            win.make_read_only(
                access_off=True, exclude_list=['cancel_btn', 'close_btn'])

        return ExtUIScriptResult(base.get_edit_window(win))
Exemplo n.º 8
0
    def run(self, request, context):
        base = self.parent
        try:
            win = utils.bind_object_from_request_to_form(request, base.get_row, base.edit_window)
        except self.parent._nofound_exception:
            return OperationResult.by_message(MSG_DOESNOTEXISTS % context.id)

        if not win.title:
            win.title = base.title
        win.form.url = base.save_row_action.get_absolute_url()

        # проверим право редактирования
        if not self.parent.has_perm(request, self.parent.PERM_EDIT):
            win.make_read_only(
                access_off=True, exclude_list=['cancel_btn', 'close_btn'])

        # У окна может быть процедура доп. конфигурации под конкретный справочник
        if hasattr(win, 'configure_for_dictpack') and callable(win.configure_for_dictpack):
            win.configure_for_dictpack(action=self, pack=self.parent,
                                       request=request, context=context)

        return ExtUIScriptResult(base.get_edit_window(win))
Exemplo n.º 9
0
    def run(self, request, context):
        base = self.parent
        win = utils.bind_object_from_request_to_form(
            request, base.get_node,
            base.edit_node_window, base.contextTreeIdName)
        win.orig_request = request
        win.orig_context = context
        if not win.title:
            win.title = base.title
        win.form.url = base.save_node_action.get_absolute_url()

        # проверим право редактирования
        if not self.parent.has_perm(request, self.parent.PERM_EDIT):
            win.make_read_only(
                access_off=True, exclude_list=['close_btn', 'cancel_btn'])

        # У окна может быть процедура доп. конфигурации под конкретный справочник
        if hasattr(win, 'configure_for_dictpack') and callable(
                win.configure_for_dictpack):
            win.configure_for_dictpack(
                action=self, pack=self.parent,
                request=request, context=context)

        return ExtUIScriptResult(base.get_node_edit_window(win))
Exemplo n.º 10
0
 def object_to_form(self, request, context, get_obj, win_cls):
     """
     Заполнение элементов формы данными из объекта.
     (вынесено для удобства переопределения)
     """
     return utils.bind_object_from_request_to_form(request, get_obj, win_cls)