# coding: utf-8 ''' @author: d.gulyakin ''' import json from nci._nci_orm import test_matrixCursor, vw_test_matrix_themesCursor from umk._umk_orm import specialityCursor try: from ru.curs.showcase.core.jython import JythonDTO, JythonDownloadResult, JythonErrorResult except: from ru.curs.celesta.showcase import JythonDTO, JythonDownloadResult, JythonErrorResult #XDocReport from ru.curs.celesta.showcase.utils import XMLJSONConverter from ru.curs.showcase.core import UserMessageFactory from ru.curs.showcase.app.api.grid import GridSaveResult from common.sysfunctions import toHexForXml, getGridHeight # from security.functions import userHasPermission _header = {"id": ["~~id"], "name": [u'Специальность/Конфигурация/БТЗ'], "theme": [u'Тема'], "action": [u'Действие'], "question_count": [u'Количество вопросов'], "HasChildren": [u'HasChildren'], 'properties': [u'properties']} def getTreeData(context, main, add, filterinfo, session, elementId, sortColumnList, firstrecord, pagesize, parentId=None): u'''Функция получения данных для tree-грида. ''' for column in _header: _header[column].append(toHexForXml(_header[column][0])) data = {"records":{"rec":[]}} if parentId is None: specialityCur = specialityCursor(context) specialityCur.orderBy('name') for speciality in specialityCur.iterate(): row = {} row[_header["id"][1]] = "speciality.{}".format(speciality.uid) row[_header["name"][1]] = speciality.name row[_header["action"][1]] = {'div':{'ins':{'font':{"@style": "cursor: pointer !important", '@color': 'blue', '@title': u'Добавить конфигурацию теста', '#text': u'Добавить конфигурацию'}}}} row[_header['properties'][1]] = {'event': { '@name': 'cell_single_click', '@column': _header['action'][0], 'action': { '@show_in': 'MODAL_WINDOW', '#sorted': [ {'main_context': 'current'}, {'modalwindow': { '@caption': u'{}: добавление конфигурации теста'.format(speciality.name), '@height': '620', '@width': '1110'}}, {'datapanel': { '@type': 'current', '@tab': 'current', 'element': { '@id': 'addTestVariantCard', 'add_context': json.dumps({'action': 'add', 'speciality': speciality.name, 'speciality_id': speciality.uid})}}}]}}} data["records"]["rec"].append(row) specialityCur.close() else: row = parentId.split('.') param = row[0] row_id = row[1] if param == 'speciality': test_matrixCur = test_matrixCursor(context) test_matrixCur.setRange('speciality_id', row_id) test_matrixCur.orderBy('tm_name') for item in test_matrixCur.iterate(): row = {} row[_header["id"][1]] = "matrix.{}".format(item.tm_id) row[_header["name"][1]] = item.tm_name row[_header["question_count"][1]] = item.question_count row[_header["action"][1]] = {'div':{'ins':{'font':{"@style": "cursor: pointer !important", '@color': 'blue', '@title': u'Изменить конфигурацию теста', '#text': u'Изменить'}}}} row[_header['properties'][1]] = {'event': { '@name': 'cell_single_click', '@column': _header['action'][0], 'action': { '@show_in': 'MODAL_WINDOW', '#sorted': [ {'main_context': 'current'}, {'modalwindow': { '@caption': u'Изменение конфигурации теста', '@height': '620', '@width': '1110'}}, {'datapanel': { '@type': 'current', '@tab': 'current', 'element': { '@id': 'addTestVariantCard', 'add_context': json.dumps({'action': 'edit', 'tm_id': item.tm_id, 'speciality': '', 'speciality_id': row_id})}}}]}}} data["records"]["rec"].append(row) test_matrixCur.close() elif param == 'matrix': test_matrix_themesCur = vw_test_matrix_themesCursor(context) test_matrix_themesCur.setRange('tm_id', row_id) test_matrix_themesCur.orderBy('package_name', 'theme_name') for theme in test_matrix_themesCur.iterate(): row = {} row[_header["id"][1]] = "theme.{}".format(theme.id) row[_header["name"][1]] = theme.package_name row[_header["theme"][1]] = theme.theme_name row[_header["question_count"][1]] = theme.question_count row[_header["HasChildren"][1]] = False data["records"]["rec"].append(row) test_matrix_themesCur.close() res = XMLJSONConverter.jsonToXml(json.dumps(data)) return JythonDTO(res, None) def getTreeSettings(context, main, add, filterinfo, session, elementId): u'''Функция получения настроек для tree-грида. ''' panelWidth = '100%' panelHeight = getGridHeight(session, numberOfGrids = 1, delta=65) # speciality = main # groupsCur = educational_groupCursor(context) # groupsCur.setRange('speciality', speciality) # Проходят обучение # totalCount = studentCur.count() totalCount = 0 # groupsCur.close() # Определяем список полей таблицы для отображения settings = {} settings["gridsettings"] = { # "labels": {'header': u'ЭОР по теме'}, "columns": {"col":[ {"@id":_header["name"][0], "@width":"300px"}, {"@id":_header["theme"][0], "@width":"300px"}, {"@id":_header["question_count"][0], "@width":"100px", "@horAlign": 'CENTER'}, {"@id":_header["action"][0], "@width":"200px", "@horAlign": 'CENTER'}]}, "properties": { "@gridHeight": panelHeight, "@gridWidth": panelWidth, # "@pagesize": "25", "@totalCount": totalCount}} res_set = XMLJSONConverter.jsonToXml(json.dumps(settings)) return JythonDTO(None, res_set) def gridToolBar(context, main=None, add=None, filterinfo=None, session=None, elementId=None): try: row = json.loads(session)['sessioncontext']['related']['gridContext']["currentRecordId"] except: row = None grid_toolbar = { 'gridtoolbar': { '#sorted': [ {'item': { '@text': u'Добавить вариант', '@hint': u'Добавление вариант тестирования', '@disable': 'false', 'action': { '@show_in': 'MODAL_WINDOW', '#sorted': [ {'main_context': 'current'}, {'modalwindow': { '@caption': u'Добавление вариант тестирования', "@height":"400", "@width":"460"}}, {'datapanel': { '@type': 'current', '@tab': 'current', 'element': { '@id': 'addTestGroupCard', 'add_context': row}}}]}}}, # {'item': { # '@text': u'Добавить слушателей', # '@hint': u'Добавление слушателей в группу для проведения тестирования', # '@disable': 'false' if status_id == 0 else 'true', # 'action': { # '@show_in': 'MODAL_WINDOW', # '#sorted': [ # {'main_context': 'current'}, # {'modalwindow': { # '@caption': u'{}. Добавление слушателей'.format(group_name), # "@height":"600", # "@width":"980"}}, # {'datapanel': { # '@type': 'current', # '@tab': 'current', # 'element': { # '@id': 'addTestGroupPersonsCard', # 'add_context': row}}}]}}} ]}} return XMLJSONConverter.jsonToXml(json.dumps(grid_toolbar)) # def gridPartialUpdate(context, main, add, filterinfo, session, elementId, sortColumnList, firstrecord, pagesize, parentId=None): # u"""Частичное обновление грида""" # data = {"records":{"rec":[]}} # # if add: # row = add.split('.') # row_type = row[0] # row_id = row[1] # if row_type == 'task': # eor_tasksCursor = student_eor_tasksCursor(context) # if eor_tasksCursor.tryGet(row_id): # type = eor_tasksCursor.eor_type # id = "task.{}".format(eor_tasksCursor.task_id) # row = {} # row[_header["id"][1]] = id # row[_header["name"][1]] = eor_tasksCursor.package_name # row[_header["eor_type"][1]] = EOR_TYPE[type][0] # row[_header["score"][1]] = eor_tasksCursor.score # if type == TEST: # row[_header["attempts_count"][1]] = eor_tasksCursor.attempts_count # row[_header["HasChildren"][1]] = 0 # row[_header['properties'][1]] = {'event': { # '@name': 'row_save_data', # 'action': { # '#sorted': [ # {'main_context': 'current'}, # {'datapanel': { # '@type': 'current', # '@tab': 'current', # "element": [ # {"@id": "studentsTreeGrid", # "@keep_user_settings": "true", # "@partial_update": "true", # "add_context": id}]}}]}}} # data["records"]["rec"].append(row) # # eor_tasksCursor.close() # # res = XMLJSONConverter.jsonToXml(json.dumps(data)) # return JythonDTO(res, None)