示例#1
0
文件: util.py 项目: XHermitOne/defis
def SetFilter(dataset, flt=None):
    """
    Устанавливаем фильтр на нужный объект данных.
    @type dataset: C{icSQLObjDataset}
    @param dataset: Объект индексного доступа к классу данных.
    @type flt: C{string | dictionary}
    @param flt: Фильтр, накладываемый на класс данных.
    """
    try:
        real_name = dataset.name
        #   Если буфер заполнен, то необходимо запросить потверждение на
        #   обновление данных и обновить данные. В противном случае изменения
        #   будут потеряны
        if dataset.isChangeRowBuff() and ic_dlg.icAskBox(
                None, _('Save changes?'),
                style=wx.YES_NO | wx.ICON_QUESTION) == wx.ID_YES:
            dataset.update()

        dataset.FilterFields(flt)
        #   Уведомляем другие компоненты формы о том, что состояние объекта данных могло измениться
        for key, obj in dataset.evalSpace['_has_source'].items():
            try:
                dataset.evalSpace['_has_source'][key].UpdateViewFromDB(
                    real_name)
                #   Обновляем связанные гриды
                dataset.evalSpace['_has_source'][key].UpdateDataView(real_name)
            except:
                pass
    except:
        log.fatal(u'SetFilter Error')
示例#2
0
 def delFilter(self, filter_name=None):
     """
     Удалить фильтр.
     @param filter_name: Имя фильтра.
     @return: True/False.
     """
     if filter_name is None:
         # Если имя не определено удалить выбранный фильтр
         i = self.filterCheckList.GetSelection()
         if i >= 0:
             do_del = ic_dlg.icAskBox(u'Удаление', u'Удалить фильтр?')
             if do_del:
                 del self._filters[i]
                 self.filterCheckList.Delete(i)
                 return True
             return False
     else:
         filters_id = [filter_dict['id'] for filter_dict in self._filters]
         try:
             i = filters_id.index(filter_name)
         except IndexError:
             io_prnt.outWarning(u'Не найден фильтр <%s> среди <%s>' % (filter_name, filters_id))
             return False
         del self._filters[i]
         self.filterCheckList.Delete(i+1)
         return True
示例#3
0
 def genYear(self, Year_):
     """
     Генерация календарного графика на год с опросом пользователя.
     """
     if ic_dlg.icAskBox(
             u'ВНИМАНИЕ!',
             u'Создать календарный график на %s год?' % (str(Year_))):
         if self._delYearRec(Year_):
             self.generateYear(Year_)
示例#4
0
 def extend(self):
     """
     Дополнительные инструменты узла.
     """
     # Данном случае проверка связи с БД
     yes = ic_dlg.icAskBox(u'Поверить связь с БД?')
     if yes:
         from ic.db import icsqlalchemy
         res = self.getMyRes()
         db_url = icsqlalchemy.createDBUrl(res)
         check_connect = icsqlalchemy.checkDBConnect(db_url)
         msg = u'Связь с БД <%s> успешно установлена' % db_url if check_connect else u'Нет связи с БД <%s>' % db_url
         ic_dlg.icMsgBox(u'Проверка связи с БД', msg)
示例#5
0
 def Clear(self, Ask_=False):
     """
     Очистить справочник от данных.
     @param Ask_: Спросить о подтверждении очистки справочника?
     """
     storage = self.getStorage()
     if storage:
         if Ask_:
             if ic_dlg.icAskBox(
                     u'ВНИМАНИЕ!',
                     u'Очистить справочник <%s> от всех данных?' %
                     self.getName()):
                 return storage.clear()
         else:
             # Подтверждения не требуется - просто удалтиь
             return storage.clear()
示例#6
0
 def extend(self):
     """
     Дополнительные инструменты узла.
     """
     # Данном случае проверка связи с БД
     res = self.getMyRes()
     name = res.keys()[0]
     spc = res.get(name, dict())
     yes = ic_dlg.icAskBox(
         u'Проверка связи с БД',
         u'Поверить связь с БД <%s : %s>?' % (spc['name'], spc['type']))
     if yes:
         from ic.db import icsqlalchemy
         db_url = icsqlalchemy.createDBUrl(spc)
         check_connect = icsqlalchemy.checkDBConnect(db_url)
         msg = u'Связь с БД <%s> успешно установлена' % db_url if check_connect else u'Нет связи с БД <%s>' % db_url
         ic_dlg.icMsgBox(u'Проверка связи с БД', msg)
示例#7
0
 def _delYearRec(self, Year_):
     """
     Удалить год.
     """
     if self.isYear(Year_) == True:
         if ic_dlg.icAskBox(
                 u'ВНИМАНИЕ!',
                 u'Календарный график на %s год уже существует. Удалить?' %
             (str(Year_))):
             storage = self.getStorage()
             if storage:
                 cod = self.ListCode2StrCode((str(Year_), ))
                 return storage.delRecByCod(cod)
             return True
         else:
             return False
     return True
示例#8
0
 def onDelToolClicked(self, event):
     """
     Обработчик инструмента удаления записи справочника.
     """
     rec_idx = self.recs_listCtrl.GetFirstSelected()
     if rec_idx != -1:
         record = self._list_ctrl_dataset[rec_idx]
         del_code = record['cod']
         if ic_dlg.icAskBox(
                 u'УДАЛЕНИЕ',
                 u'Удаление записи справочника <%s>. Вы уверены?' %
                 record['name']):
             self.sprav.delRec(del_code)
             self.del_sprav_tree_item(self.sprav_treeCtrl.GetSelection(),
                                      del_code)
             self.del_sprav_list_item(del_code)
     event.Skip()
示例#9
0
 def onDelButtonMouseClick(self, event, values=None):
     """
     Обработчик нажатия на кнопку удаления пользователя.
     """
     try:
         if values:
             user_name = values['user']
             if ic_dlg.icAskBox(u'УДАЛЕНИЕ',
                                u'Удалить пользователя %s?' % user_name):
                 del self._data[user_name]
                 self._init_data(self._data)
         else:
             ic_dlg.icWarningBox(u'ВНИМАНИЕ', u'Выберите пользователя, которого надо удалить.')
                 
         if event:
             event.Skip()
     except:
         io_prnt.outErr(u'Ошибка удаления пользователя.')
示例#10
0
def gen_wxfb_prj(parent=None, resource=None, fbp_filename=None):
    """
    Функция запуска генерации форм wxFormBuilder бизнес объекта/документа.
    @param parent: Родительское окно.
    @param resource: Ресурс, по которому происходит генерация
    @param fbp_filename: Файл проекта wxFormBuilder для сохранения.
    @return: True - генерация прошла успешно.
        False - Возникла какая-то ошибка.
    """
    if parent is None:
        app = wx.GetApp()
        parent = app.GetTopWindow()

    if resource is None:
        log.warning(u'Не определен ресурс генерации форм wxFormBuilder')
        return False

    if fbp_filename is None:
        fbp_filename = ic_dlg.icFileDlg(parent,
                                        u'Выбор файла проекта wxFormBuilder для генерации',
                                        u'wxFormBuilder project (*.fbp)|*.fbp')

    if not fbp_filename:
        log.warning(u'Не определен файл проекта wxFormBuilder для генерации форм')
        return False

    if os.path.exists(fbp_filename):
        if not ic_dlg.icAskBox(u'ВНИМАНИЕ', u'Файл <%s> уже существует. Перезаписать его?' % fbp_filename):
            # Не надо перезаписывать,
            # тогда нет смысла и генерировать его
            return False

    generator = icWxFBPrjGenerator()
    if not generator.isParsed(resource):
        ic_dlg.icWarningBox(u'ОШИБКА', u'Тип ресурса не поддерживается генератором форм wxFormBuilder')
        return False

    generator.setResource(resource)
    generator.setGenFilename(fbp_filename)
    txt = generator.genPrj()
    return generator.savePrj(txt)
示例#11
0
    def findWordInRecordsListCtrl(self, start_row=None):
        """
        Процедура поиска слова в списке текущих записей.
        @param start_row: Начальная строка поиска. Если не определено,
            то поиск производится с текущей выбранной строки.
        """
        cur_row = start_row
        if cur_row is None:
            cur_row = self.getItemSelectedIdx(self.recs_listCtrl)

        # log.debug(u'Текущая выбранная строка <%d>' % cur_row)
        find_word = self.find_textCtrl.GetValue()
        find_result = self.find_word_in_records(find_word,
                                                start_row=cur_row + 1)

        do_find = find_result is not None

        if do_find:
            find_row, find_col = find_result
            self.selectItem_list_ctrl(self.recs_listCtrl, find_row)
        else:
            msg = u'Не найдено поисковое слово. Начать поиск с начала?'
            if ic_dlg.icAskBox(u'ВНИМАНИЕ', msg):
                self.findWordInRecordsListCtrl(-1)
示例#12
0
def parse_cf_file(cf_filename, cf_dirname=None, txt_ctrl=None):
    """
    Парсинг файла конфигурации 1с.
    @param cf_filename: Полное имя CF файла конфигурации 1c.
    @param cf_dirname: Директория, в которую будет происходить парсинг.
    @param txt_ctrl: Объект wxTxtCtrl для вывода результатов выполнения комманды парсинга.
    """
    try:
        if not os.path.exists(cf_filename):
            log.warning(u'ERROR! CF file <%s> not exists!' % cf_filename)
            ic_dlg.icWarningBox(u'ОШИБКА', u'CF файл <%s> не найден!' % cf_filename)
            return
        else:
            if cf_dirname is None:
                global CUR_CF_DIR
                CUR_CF_DIR = gen_cf_dir(cf_filename)
                cf_dirname = CUR_CF_DIR

        if os.path.exists(cf_dirname):
            if not ic_dlg.icAskBox(Title_=u'ВНИМАНИЕ',
                                   Text_=u'Папка <%s> распарсенного файла конфигурации уже существует. Заменить?' % cf_dirname):
                return
            # Удалить папку конфигурации, если она существует
            shutil.rmtree(cf_dirname, True)
            log.info(u'DELETE DIRECTORY: <%s>' % cf_dirname)

        v8unpack_filename = os.path.join(os.path.dirname(__file__), DEFAULT_V8UNPACK_PATH)
        v8unpack_filename = os.path.abspath(v8unpack_filename)
        if not os.path.exists(v8unpack_filename):
            log.warning(u'ERROR! V8Unpack file <%s> not exists!' % v8unpack_filename)
            ic_dlg.icWarningBox(u'ОШИБКА', u'V8Unpack файл <%s> не найден!' % v8unpack_filename)
            return

        run_parser(v8unpack_filename, cf_filename, cf_dirname, txt_ctrl)
    except:
        log.fatal(u'ERROR! Error in parse_cf_file function')
示例#13
0
    def login(self, User_=None, Password_=None, prj_filename=None):
        """
        Открыть регистрацию программиста в режиме редактирования.
        @param User_: Имя пользователя.
        @param Password_: Пароль. Если имя или пароль не указаны, то выводится
        окно входа в систему.
        @param prj_filename: Имя файла проекта, который пытаемся открыть.
            Необходимо для снятия блокировки пользователя.
        """
        # ВНИМАНИЕ!
        # Меняется проект, меняется и файл ресурса ограничения доступа
        # поэтому объект управления правами пользователей необходимо
        # создавать каждый раз заново при открытии проекта
        result = False
        try:
            result = ic_user.getKernel().Login(User_, Password_)
        except icexceptions.LoginInvalidException:
            ic_dlg.icMsgBox(
                u'Вход в систему',
                u'Неправильный пользователь или пароль. Доступ запрещен.')
        except icexceptions.LoginErrorException:
            if ic_dlg.icAskBox(
                    u'Вход в систему',
                    u'Пользователь уже зарегистрирован в системе. Снять регистрацию пользователя?'
            ):
                from ic.engine import icusermanager
                user_mngr = icusermanager.icUserManager()
                tree_ctrl = self.getParent()
                pro_file_name = prj_filename
                if not os.path.exists(pro_file_name):
                    pro_file_name = ic_dlg.icFileDlg(
                        tree_ctrl,
                        u'Удаление регистрационной информации о пользователе из проекта',
                        _('Project file (*.pro)|*.pro'))
                if pro_file_name:
                    prj_dir = os.path.dirname(os.path.dirname(pro_file_name))
                    if os.path.exists(prj_dir):
                        user_mngr.unregisterUser(prj_dir)
        except icexceptions.LoginDBExclusiveException:
            ic_dlg.icMsgBox(
                u'Вход в систему',
                u'БД открыта в монопольном режиме другим пользователем. Вход в систему запрещен.'
            )
        except icexceptions.LoginWorkTimeException:
            ic_dlg.icMsgBox(
                u'Вход в систему',
                u'Попытка входа в систему в не регламентированное время пользователем. Вход в систему запрещен.'
            )
        except:
            log.fatal(u'Ошибка регистрации пользователя')

        if result:
            from ic.kernel import icsettings
            icsettings.setProjectSettingsToEnvironment(self.name,
                                                       ReDefine_=True)
        if result:
            self._prj_user = ic_user.getKernel().getUser()
        else:
            self._prj_user = None

        return result