Ejemplo n.º 1
0
def test():
    """
    Тестовая функция.
    """
    import ic
    ok_login = ic.Login('test', '', 'c:/defis/Registr/Registr', True)
    print('START SpravTreeComboCtrl TEST ... Login:'******'Sprav', 'StdCls', None, 'registr_nsi.mtd', 'Registr'), )

        frame = wx.Frame(None)

        tree_combo_ctrl = icSpravTreeComboCtrlPrototype(sprav_psp,
                                                        None,
                                                        True,
                                                        parent=frame,
                                                        size=wx.Size(200, -1),
                                                        level_enable=1,
                                                        popup_type=1)
        tree_combo_ctrl.set_label_func(tree_combo_ctrl.getLabel_s1)
        tree_combo_ctrl.set_selected_sprav_code(
            u'PA110020010,PA110020020,PA110020030', 's1')
        button = wx.Button(frame, pos=wx.Point(10, 100))
        frame.Show()
        ic.getKernel().MainLoop()
        ic.Logout()
        print('STOP SpravTreeComboCtrl TEST ... OK')
Ejemplo n.º 2
0
    def _refreshData(self):
        """
        Обновить данные по контролам редактирования.
        """
        # Главное окно и горизонтальное меню наследуются у текущего пользователя
        default_main_win = ic.getKernel().GetAuthUser().resource['main_win']
        default_main_menubars = ic.getKernel().GetAuthUser(
        ).resource['menubars']

        data = util.icSpcDefStruct(icUser.SPC_IC_USER, {
            'main_win': default_main_win,
            'menubars': default_main_menubars
        })

        name_edit = self.GetNameObj('nameEdit')
        if name_edit:
            data['name'] = name_edit.GetValue()

        description_edit = self.GetNameObj('descriptionEdit')
        if description_edit:
            data['description'] = description_edit.GetValue()

        local_dir_edit = self.GetNameObj('localDirEdit')
        if local_dir_edit:
            data['local_dir'] = local_dir_edit.GetValue()

        role_choice = self.GetNameObj('roleChoice')
        if role_choice:
            roles = self._manager.getRoles()
            selection = role_choice.GetSelection()
            try:
                data['roles'] = [roles[selection][0]]
            except:
                data['roles'] = []

        password_edit1 = self.GetNameObj('passwordEdit1')
        password_edit2 = self.GetNameObj('passwordEdit2')
        if password_edit1 and password_edit2:
            password1_txt = password_edit1.GetValue()
            password2_txt = password_edit2.GetValue()
            password1_md5 = md5.new(password1_txt).hexdigest()
            password2_md5 = md5.new(password2_txt).hexdigest()
            if password1_md5 == password2_md5:
                if not password1_txt.strip():
                    # Выбрана пустая строка
                    data['password'] = md5.new('').hexdigest()
                else:
                    data['password'] = password1_md5
            else:
                ic_dlg.icWarningBox(
                    u'ВНИМАНИЕ!',
                    u'Введенный пароль и подтверждение на совпадают. Введите еще раз.',
                    ParentWin_=self.getDialog())
                return None

        self._data = data
        return self._data
Ejemplo n.º 3
0
    def Search(self, ParentForm_=None, Context_=None, search_form_psp=None):
        """
        Режим поиска объекта.
        @param ParentForm_: Родительская форма.
        @param Context_: Пространство имен.
        @param search_from_psp: Паспорт формы для подмены стандартной формы вывода.
        @return: Возвращает UUID выбранного объекта или None,
        если объект не выбран.
        """
        # Перед созданием формы необходмо создать
        # все ресурсы таблиц хранения объекта, если
        # их нет
        self._createTableResource()

        # Создание и вывод формы
        if search_form_psp is None:
            frm_psp = self.getSearchFormPsp()
            if not frm_psp:
                frm_psp = self.createSearchFormRes()
        else:
            frm_psp = search_form_psp

        try:
            # Сначала полностью проинициализировать контекст
            if Context_ is None:
                Context_ = self.GetContext()

            # Добавить в пространство имен указатель на текущий БИЗНЕС-ОБЪЕКТ
            Context_['OBJ'] = self

            obj_uuid = None
            if not self.isDoSearch():
                # Создать и открыть форму
                panel_obj = ic.getKernel().Create(frm_psp,
                                                  parent=ParentForm_,
                                                  context=Context_)

                # Создать и открыть форму
                frm_obj = ic.getKernel().Create(frm_psp,
                                                parent=ParentForm_,
                                                context=Context_)
                frm_obj.ShowModal()

                if frm_obj.isPressOk():
                    obj_uuid = frm_obj.get_manager().getSelectedObjUUID()

                # ВНИМАНИЕ!
                # Обязательно удалять форму после использования, а то
                # остаются ссылки на нее
                frm_obj.Destroy()
            else:
                obj_uuid = self.doSearch()

            return obj_uuid
        except:
            ic.io_prnt.outErr(u'Ошибка режима поиска БИЗНЕС-ОБЪЕКТА %s' %
                              self.name)
Ejemplo n.º 4
0
 def _add_values(self, prj_res_ctrl=None):
     """
     Добавить в таблицу значения перечислений.
     @param prj_res_ctrl: Контроллер управления ресурсом проекта.
     """
     tab_name = self._get_enum_tabname(prj_res_ctrl)
     if prj_res_ctrl.isRes(tab_name, 'tab'):
         tab = ic.getKernel().CreateObj(tab_name, tab_name, 'tab')
         if tab:
             name_lat = ic_str.rus2lat(self.name)
             len_code = self._get_enum_spravlevel_len()
             code_fmt = '%%0%dd' % len_code
             # Сначала удалить все данные представления
             tab.del_where(tab.c.type == name_lat)
             # Затем добавить значения
             values = self.children[0].children
             for i, value in enumerate(values):
                 code = code_fmt % (i + 1)
                 tab.add(type=name_lat,
                         cod=code,
                         name=value.description,
                         s1=value.name,
                         uid1c=value.uid)
         else:
             log.warning(
                 u'Ошибка создания объекта таблицы хранения перечислений 1С <%s>'
                 % tab_name)
     else:
         log.warning(
             u'Не найден ресурс таблицы хранения перечислений 1С <%s>' %
             tab_name)
Ejemplo n.º 5
0
    def gen_resource(self):
        """
        Генерация ресурса, соответстствующего объеку 1С.
        @return: True/False.
        """
        # Открыть проект
        prj_res_ctrl = ic.getKernel().getProjectResController()
        if prj_res_ctrl is None:
            log.warning(
                u'Не определен контроллер управления ресурсом проекта. Генерация ресурса таблицы хранения перечислений 1С не взможна.'
            )
            return False
        else:
            log.debug(u'Контроллер управления ресурсом проекта <%s>' %
                      prj_res_ctrl)
        prj_res_ctrl.openPrj()

        # Создать необходимые ресурсные файлы
        self._gen_enum_tab(prj_res_ctrl)
        self._gen_enum_spravmanager(prj_res_ctrl)
        self._gen_enum_sprav(prj_res_ctrl)

        # Добавить в таблицу значения перечислений
        self._add_values(prj_res_ctrl)

        return True
Ejemplo n.º 6
0
def InitEvalSpace(evalSpace=None):
    """
    Функция создает структуру пространства имен для внешних функций при
    обработке сообщений в формах.
    Ключи:
    - B{_root_obj}: Содержит дерево объектов
    - B{_dict_obj}: Содержит словарь всех объектов. Имена объектов используются в
        качестве ключей.
    - B{_lfp}: Содержит описание параметров последней вызванной функции.
    - B{_self}: Содержит указатель на объект, где происходят вычисления.
    - B{_has_source}: Содержит словарь всех объектов, которые обращаются к
        источникам данных. Признаком таких объектов является ключ 'source' в их
        ресурсном описании.
    - B{_sources}: Содержит словарь всех источников данных.
    """
    init_eval_space_modules()
    if evalSpace is None:
        evalSpace = icContext.Context(ic.getKernel())
    else:
        space = icContext.Context()
        space.update(evalSpace)
        evalSpace = space

    evalSpace.setKey('CreateForm', icprs.CreateForm)
    evalSpace.setKey('ResultForm', icprs.ResultForm)
    evalSpace.setKey('ModalForm', icprs.ModalForm)
    evalSpace.setKey('method', icres.method)
    evalSpace.setKey('setKey', setKey)
    evalSpace.setKey('wx', wx)
    evalSpace.setKey('ic', ic)
    evalSpace.setKey('SetFilter', SetFilter)
    evalSpace.setKey('icImageLibName', common.icImageLibName)
    evalSpace.setKey('imglib', common)
    evalSpace.setKey('common', common)
    return evalSpace
Ejemplo n.º 7
0
    def setBitmap(self, BmpPsp_):
        """
        Функция установки картинки пункта меню.
        @param BmpPsp_: Паспорт картинки.
        """
        try:
            item_kind = self.GetKind()
            # для разделителя нельзя установить картинку
            if item_kind == wx.ITEM_SEPARATOR:
                return

            # Паспорт не определен
            if not BmpPsp_:
                return

            bitmap_obj = ic.getKernel().Create(BmpPsp_)
            img = bitmap_obj.getBitmap()

            if img and (item_kind == wx.ITEM_CHECK
                        or item_kind == wx.ITEM_NORMAL):
                # ВНИМАНИЕ:
                #    Картинки необходимо устанавливать до присоединения
                #    пункта к меню. Иначе она не будет отображаться!
                self.SetBitmap(img)
        except:
            io_prnt.outErr(
                u'Ошибка установки картинки %s для пункта меню %s!' %
                (BmpPsp_, self.GetID()))
            return
Ejemplo n.º 8
0
def getSpravChoiceListDlg(parent=None, sprav=None):
    """
    Вызов диалогового окна выбора кода справочника.
    @param parent: Родительское окно.
    @param sprav: Справочник. Может задаваться как объектом,
        так и паспортом справочника.
    @return: Строковый выбранный код.
    """
    result = None
    if parent is None:
        parent = wx.GetApp().GetTopWindow()
    if sprav:
        if ic_util.is_pasport(sprav):
            # Справочник задается паспортом
            # Надо создать объект
            sprav = ic.getKernel().Create(sprav)

        dlg = None
        try:
            dlg = icSpravChoiceListDialog(parent)
            dlg.setSprav(sprav)
            dlg.ShowModal()
            result = dlg.getSelectedCode()
            dlg.Destroy()
            dlg = None
        except:
            if dlg:
                dlg.Destroy()
            io_prnt.outErr(u'Ошибка диалогового окна выбора кода справочника.')
    else:
        io_prnt.outWarning(
            u'Не определен справочник диалогового окна выбора кода справочника.'
        )
    return result
Ejemplo n.º 9
0
 def _init(self):
     """
     Основная функция инициализации внутренних объектов.
     """        
     self.main_win=ic.getKernel().GetContext().getMainWin()
     #Тестируемый бизнес объект
     #print 'DEBUGER ic.metadata:',ic.metadata
     self.business_obj=ic.metadata.work_flow.mtd.test_businessobject.BusinessObj.create()
Ejemplo n.º 10
0
 def _createSprav(self, SpravPsp_):
     """
     Создание справочника.
     """
     kernel = ic.getKernel()
     if kernel:
         return kernel.Create(SpravPsp_)
     return None
Ejemplo n.º 11
0
def over_test():
    """ Тестовая функция граничных значений."""
    import ic
    ok_login = ic.Login('test_user', '', 'c:/defis/NSI/NSI', True)
    print('START SpravTreeComboCtrl TEST ... Login:'******'Sprav', 'OrganPrinyat', None, 'nsi_sprav.mtd', 'NSI'), )
        frame = wx.Frame(None)

        tree_combo_ctrl = icSpravTreeComboCtrlPrototype(sprav_psp,
                                                        None,
                                                        True,
                                                        parent=frame,
                                                        size=wx.Size(200, -1))
        button = wx.Button(frame, pos=wx.Point(10, 100))
        print('SELECTED CODE:', tree_combo_ctrl.getSelectedCode())

        frame.Show()
        ic.getKernel().MainLoop()
        ic.Logout()
        print('STOP SpravTreeComboCtrl TEST ... OK')
Ejemplo n.º 12
0
    def Browse(self, ParentForm_=None, Context_=None, choice_form_psp=None):
        """
        Режим выбора объекта с элементом поиска/фильтра.
        В виде страницы главного нотебука.
        @param ParentForm_: Родительская форма.
        @param Context_: Контекст.
        @param choice_form_psp: Паспорт формы для подмены стандартной формы вывода.
        """
        # Перед созданием необходмо создать
        # все ресурсы таблиц хранения объекта, если
        # их нет
        self._createTableResource()

        # Создание и вывод
        if choice_form_psp is None:
            psp = self.getChoiceFormPsp()
            if not psp:
                psp = self.createChoicePanelRes()
        else:
            psp = choice_form_psp

        try:
            # Сначала полностью проинициализировать контекст
            if Context_ is None:
                Context_ = self.GetContext()

            # Добавить в пространство имен указатель на текущий БИЗНЕС-ОБЪЕКТ
            Context_['OBJ'] = self

            # Создать и открыть
            obj = ic.getKernel().Create(psp,
                                        parent=ParentForm_,
                                        context=Context_)
            ic.getKernel().GetContext().getMainWin().AddOrgPage(
                obj, self.description)
        except:
            ic.io_prnt.outErr(u'Ошибка режима выбора БИЗНЕС-ОБЪЕКТА <%s>' %
                              self.name)
Ejemplo n.º 13
0
 def TestComponentResource(res, context, parent, *arg, **kwarg):
     """
     Функция тестирования компонента SQL запроса в режиме редактора ресурса.
     @param res:
     @param context:
     @param parent:
     @param arg:
     @param kwarg:
     @return:
     """
     import ic
     from SCADA.controllers import test_uni_reader_ctrl_dlg
     log.info(u'Тестирование контроллера <%s>. Имя файла <%s>. Расширение <%s>' % (res['name'], parent._formName,
                                                                                   parent.file.split('.')[1]))
     controller = ic.getKernel().createObjBySpc(None, res, context=context)
     test_uni_reader_ctrl_dlg.view_test_uni_reader_ctrl_dlg(parent=None, controller=controller)
Ejemplo n.º 14
0
def test():
    """
    Тестовая функция.
    """
    import copy
    mwin = ic.getKernel().GetContext().getMainWin()
    print('TEST filter constructor START ... ok')
    env = copy.deepcopy(filter_builder_env.FILTER_ENVIRONMENT)

    app = wx.PySimpleApp()
    dlg = wx.Dialog(mwin, -1)
    constructor = icFilterConstructorTreeList(dlg, -1)
    constructor.setEnvironment(env)
    constructor.setDefault()
    dlg.ShowModal()
    app.MainLoop()

    print('TEST filter constructor STOP ... ok')
Ejemplo n.º 15
0
    def TestComponentResource(res, context, parent, *arg, **kwarg):
        """
        Функция тестирования компонента SQL запроса в режиме редактора ресурса.
        @param res:
        @param context:
        @param parent:
        @param arg:
        @param kwarg:
        @return:
        """
        import ic
        from ic.components.user.objects import view_sql_query_dlg
        log.info(
            u'Тестирование запроса <%s>. Имя файла <%s>. Расширение <%s>' %
            (res['name'], parent._formName, parent.file.split('.')[1]))

        db = ic.getKernel().Create(res['source'])
        view_sql_query_dlg.view_sql_query_dlg(parent=None,
                                              db=db,
                                              sql_txt=res['sql_txt'])
Ejemplo n.º 16
0
    def gen_resource(self):
        """
        Генерация ресурса, соответстствующего объеку 1С.
        @return: True/False.
        """
        # Открыть проект
        prj_res_ctrl = ic.getKernel().getProjectResController()
        if prj_res_ctrl is None:
            log.warning(
                u'Не определен контроллер управления ресурсом проекта. Генерация ресурса таблицы хранения справочника <%s> 1С не взможна.'
                % self.name)
            return False
        else:
            log.debug(u'Контроллер управления ресурсом проекта <%s>' %
                      prj_res_ctrl)
        prj_res_ctrl.openPrj()

        # Создать необходимые ресурсные файлы
        self._gen_registry(prj_res_ctrl)

        return True
Ejemplo n.º 17
0
    def View(self,
             ParentForm_=None,
             Context_=None,
             UUID_=None,
             view_form_psp=None):
        """
        Режим просмотра объекта.
        @param ParentForm_: Родительская форма.
        @param Context_: Контекст.
        @param UUID_: Уникальный идентификатор.
        @param view_from_psp: Паспорт формы для подмены стандартной формы вывода.
        """
        # Перед созданием формы необходмо создать
        # все ресурсы таблиц хранения объекта, если
        # их нет
        self._createTableResource()

        # Создание и вывод формы
        if view_form_psp is None:
            frm_psp = self.getViewFormPsp()
            if not frm_psp:
                frm_psp = self.createViewFormRes()
        else:
            frm_psp = view_form_psp

        if UUID_ is None:
            UUID_ = self.getUUID()

        try:
            # Сначала полностью проинициализировать контекст
            if Context_ is None:
                Context_ = self.GetContext()

            # Добавить в пространство имен указатель на текущий БИЗНЕС-ОБЪЕКТ
            Context_['OBJ'] = self

            # Заполнение значений по умолчанию реквизитов через контекст
            requisite_values = self.loadRequisiteData(UUID_)

            ok = None
            if not self.isDoView():
                # Создать и открыть форму инициализации документа
                frm_obj = ic.getKernel().Create(frm_psp,
                                                parent=ParentForm_,
                                                context=Context_)
                frm_obj.GetContext().setValueInCtrl(frm_obj, requisite_values)
                frm_obj.ShowModal()

                # ВНИМАНИЕ!
                # Обязательно удалять форму после использования, а то
                # остаются ссылки на нее
                frm_obj.Destroy()
                ok = frm_obj.isPressOk()
            else:
                ok = self.doView(requisite_values=requisite_values)

            return ok
        except:
            ic.io_prnt.outErr(u'Ошибка просмотра БИЗНЕС-ОБЪЕКТА <%s>' %
                              self.name)
        return False
Ejemplo n.º 18
0
    def Edit(self,
             ParentForm_=None,
             Context_=None,
             UUID_=None,
             edit_form_psp=None):
        """
        Запуск объекта на редактирование.
        @param ParentForm_: Родительская форма.
        @param Context_: Контекст.
        @param UUID_: Уникальный идентификатор редактируемого объекта.
        Если None, то идентификатор берется из текущего объекта.
        @param edit_from_psp: Паспорт формы для подмены стандартной формы вывода.
        @return: True-исменения успешно сохранены, False-нажата <Отмена>.
        """
        # Перед созданием формы необходмо создать
        # все ресурсы таблиц хранения объекта, если
        # их нет
        self._createTableResource()

        # Создание и вывод формы
        if edit_form_psp is None:
            frm_psp = self.getEditFormPsp()
            if not frm_psp:
                frm_psp = self.createEditFormRes()
        else:
            frm_psp = edit_form_psp

        if UUID_ is None:
            UUID_ = self.getUUID()

        if not self.startEdit():
            # Объект заблокирован
            return False

        try:
            # Сначала полностью проинициализировать контекст
            if Context_ is None:
                Context_ = self.GetContext()

            # Добавить в пространство имен указатель на текущий БИЗНЕС-ОБЪЕКТ
            Context_['OBJ'] = self

            # Заполнение значений реквизитов через контекст
            requisite_values = self.loadRequisiteData(UUID_)

            ok_save = False
            edit_values = None
            if not self.isDoEdit():
                # Создать и открыть форму инициализации документа
                frm_obj = ic.getKernel().Create(frm_psp,
                                                parent=ParentForm_,
                                                context=Context_)
                frm_obj.GetContext().setValueInCtrl(frm_obj, requisite_values)
                frm_obj.ShowModal()

                if frm_obj.isPressOk():
                    # Сохранить реквизиты объекта
                    edit_values = frm_obj.GetContext().getValueInCtrl(frm_obj)
                    edit_ok = self.validEdit(
                        requisite_values=edit_values,
                        obj_uuid=UUID_) if self.isValidEdit() else True
                    if edit_ok:
                        ok_save = self.saveRequisiteData(edit_values)

                # ВНИМАНИЕ!
                # Обязательно удалять форму после использования, а то
                # остаются ссылки на нее
                frm_obj.Destroy()
            else:
                edit_values = self.doEdit(requisite_values=requisite_values)
                edit_ok = self.validEdit(
                    requisite_values=edit_values,
                    obj_uuid=UUID_) if self.isValidEdit() else True
                if edit_ok:
                    ok_save = self.saveRequisiteData(edit_values)

            self.stopEdit()  # Снять блокировку

            return ok_save
        except:
            ic.io_prnt.outErr(u'Ошибка редактирования БИЗНЕС-ОБЪЕКТА <%s>' %
                              self.name)

        # Снять блокировку
        self.stopEdit()
        return False
Ejemplo n.º 19
0
    def Init(self,
             ParentForm_=None,
             Context_=None,
             auto_add=False,
             init_form_psp=None):
        """
        Запуск инициализации/создания.
        @param ParentForm_: Родительская форма.
        @param Context_: Контекст.
        @param auto_add: Признак автодобавления в БД.
        @param init_from_psp: Паспорт формы для подмены стандартной формы вывода.
        @return: Словарь нового объекта или None в случае ошибки.
        """
        # Перед созданием формы необходмо создать
        # все ресурсы таблиц хранения объекта, если
        # их нет
        self._createTableResource()

        # Создание и вывод формы инициализации
        if init_form_psp is None:
            frm_psp = self.getInitFormPsp()
            if not frm_psp:
                frm_psp = self.createInitFormRes()
        else:
            frm_psp = init_form_psp

        try:
            # Сначала полностью проинициализировать контекст
            if Context_ is None:
                Context_ = self.GetContext()

            # Добавить в пространство имен указатель на текущий БИЗНЕС-ОБЪЕКТ
            Context_['OBJ'] = self

            # Заполнение значений по умолчанию реквизитов через контекст
            requisite_values = self.getRequisiteDataDefault()

            init_values = None
            if not self.isDoInit():
                # Создать и открыть форму инициализации документа
                frm_obj = ic.getKernel().Create(frm_psp,
                                                parent=ParentForm_,
                                                context=Context_)
                frm_obj.GetContext().setValueInCtrl(frm_obj, requisite_values)
                frm_obj.ShowModal()

                if frm_obj.isPressOk():
                    # Сохранить реквизиты доокумента
                    init_values = frm_obj.GetContext().getValueInCtrl(frm_obj)
                    if auto_add:
                        add_ok = self.validInit(
                            requisite_values=init_values) if self.isValidInit(
                            ) else True
                        if add_ok:
                            uuid_new_obj = self.addRequisiteData(init_values)
                            ic.io_prnt.outLog(
                                u'Автодобавление объекта [%s] в <%s>' %
                                (uuid_new_obj, self.name))

                # ВНИМАНИЕ!
                # Обязательно удалять форму после использования, а то
                # остаются ссылки на нее
                frm_obj.Destroy()
            else:
                init_values = self.doInit(requisite_values=requisite_values)
                if auto_add and init_values:
                    add_ok = self.validInit(requisite_values=init_values
                                            ) if self.isValidInit() else True
                    if add_ok:
                        uuid_new_obj = self.addRequisiteData(init_values)
                        ic.io_prnt.outLog(
                            u'Автодобавление объекта [%s] в <%s>' %
                            (uuid_new_obj, self.name))

            # Сохранение реквизитов не произошло
            return init_values
        except:
            ic.io_prnt.outErr(u'Ошибка  инициализации БИЗНЕС-ОБЪЕКТА <%s>' %
                              self.name)
        return None