# coding: utf-8 ''' @author: dgulyakin ''' import json from uuid import uuid4 from ru.curs.celesta.showcase.utils import XMLJSONConverter from nci._nci_orm import test_matrixCursor, test_matrix_themesCursor,\ global_settingsCursor from qt._qt_orm import QtiQuestionCursor, QtiThemeCursor, QtiPackageCursor try: from ru.curs.showcase.core.jython import JythonDTO except: from ru.curs.celesta.showcase import JythonDTO def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None): u'''Карточка параметров варианта формирования теста''' add_json = json.loads(add) action = add_json['action'] params = {} variant_name = u'' total_question_count = 0 theme_json = {'theme': [ {'selected_btz_id': '', 'package_name': '', 'package_question_count': 0, 'theme_id': '', 'theme_name': '', 'theme_question_count': 0, 'question_count': 0}]} global_settingsCur = global_settingsCursor(context) for item in global_settingsCur.iterate(): params[item.id] = {'name': item.name, 'value': item.value} global_settingsCur.close() if action == 'edit': test_matrixCur = test_matrixCursor(context) if test_matrixCur.tryGet(add_json['tm_id']): variant_name = test_matrixCur.tm_name if test_matrixCur.params: params = json.loads(test_matrixCur.params) params['QuantityQuestions']['value'] = test_matrixCur.question_count # total_question_count = test_matrixCur.question_count test_matrixCur.close() test_matrix_themesCur = test_matrix_themesCursor(context) test_matrix_themesCur.setRange('tm_id', add_json['tm_id']) packageCur = QtiPackageCursor(context) qti_theme = QtiThemeCursor(context) qti_question = QtiQuestionCursor(context) theme_json['theme'] = [] for theme in test_matrix_themesCur.iterate(): package_name = u'' package_question_count = 0 if packageCur.tryGet(theme.package_id): package_name = packageCur.PackageName theme_id = theme.theme_id theme_name = u'' theme_question_count = 0 if theme_id: qti_question.setRange('ThemeID', theme_id) theme_question_count = qti_question.count() if qti_theme.tryGet(theme_id): theme_name = qti_theme.ThemeName else: qti_theme.clear() qti_theme.setRange('PackageID', theme.package_id) for qti_theme in qti_theme.iterate(): qti_question.setRange('ThemeID', qti_theme.ThemeID) package_question_count += qti_question.count() theme_json['theme'].append({'selected_btz_id': theme.package_id, 'package_name': package_name, 'package_question_count': package_question_count, 'theme_id': theme_id, 'theme_name': theme_name, 'theme_question_count': theme_question_count, 'question_count': theme.question_count}) qti_question.close() qti_theme.close() packageCur.close() test_matrix_themesCur.close xformsdata = {"schema": { "@xmlns":"", 'speciality': add_json['speciality'], 'speciality_id': add_json['speciality_id'], 'variant_name': variant_name, 'error_message': '', 'total_question_count': total_question_count, 'params': params, 'themes': theme_json, 'template': { 'theme':{ 'selected_btz_id': '', 'package_name': '', 'package_question_count': 0, 'theme_id': '', 'theme_name': '', 'theme_question_count': 0, 'question_count': 0}}}} xformssettings = {"properties": { "event": [ {"@name":"single_click", "@linkId": "1", "action": { '#sorted': [ {"main_context": "current"}, {"datapanel": {"@type": "current", "@tab": "current", "element": { "@id":"testSettingsGrid", "add_context": ""}}}]}}]}} return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(xformsdata)), XMLJSONConverter.jsonToXml(json.dumps(xformssettings))) def cardSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None): u'''Сохранение глобальных параметров''' data_dict = json.loads(xformsdata)["schema"] add_json = json.loads(add) action = add_json['action'] test_matrixCur = test_matrixCursor(context) if action == 'add': test_variant_id = unicode(uuid4()) test_matrixCur = test_matrixCursor(context) test_matrixCur.setRange('speciality_id', data_dict['speciality_id']) test_matrixCur.setRange('tm_name', data_dict['variant_name']) if test_matrixCur.tryFirst(): test_matrixCur.close() context.error(u'Конфигурация с именем "{}" для данной специальности уже есть'.format(data_dict['variant_name'])) test_matrixCur.clear() test_matrixCur.tm_id = test_variant_id test_matrixCur.tm_name = data_dict['variant_name'] test_matrixCur.speciality_id = data_dict['speciality_id'] test_matrixCur.question_count = int(data_dict['params']['QuantityQuestions']['value']) test_matrixCur.params = json.dumps(data_dict['params']) test_matrixCur.insert() test_matrixCur.close() else: test_variant_id = add_json['tm_id'] test_matrixCur.setRange('speciality_id', data_dict['speciality_id']) test_matrixCur.setFilter('tm_id', """!'{}'""".format(test_variant_id)) test_matrixCur.setRange('tm_name', data_dict['variant_name']) if test_matrixCur.tryFirst(): test_matrixCur.close() context.error(u'Конфигурация с именем "{}" для данной специальности уже есть'.format(data_dict['variant_name'])) test_matrixCur.clear() if test_matrixCur.tryGet(test_variant_id): test_matrixCur.tm_name = data_dict['variant_name'] test_matrixCur.question_count = int(data_dict['params']['QuantityQuestions']['value']) test_matrixCur.params = json.dumps(data_dict['params']) test_matrixCur.update() test_matrixCur.close() themes = data_dict['themes']['theme'] if not isinstance(themes, list): themes = [themes] test_matrix_themesCur = test_matrix_themesCursor(context) if action == 'edit': test_matrix_themesCur.setRange('tm_id', test_variant_id) test_matrix_themesCur.deleteAll() for theme in themes: test_matrix_themesCur.clear() test_matrix_themesCur.tm_id = test_variant_id test_matrix_themesCur.package_id = theme['selected_btz_id'] test_matrix_themesCur.theme_id = theme['theme_id'] test_matrix_themesCur.question_count = int(theme['question_count']) test_matrix_themesCur.insert() test_matrix_themesCur.close()