# coding: utf-8 u''' Основной грид реестра ФЛ (медработников). ''' import json from com.jayway.jsonpath import JsonPath from common.sysfunctions import toHexForXml, getGridHeight from nci._nci_orm import edu_organizationCursor, person_edu_organizationCursor from ru.curs.celesta.showcase.utils import XMLJSONConverter from security.functions import userHasPermission try: from ru.curs.showcase.core.jython import JythonDTO from ru.curs.showcase.app.api import MessageType, UserMessage except: from ru.curs.celesta.showcase import JythonDTO def gridData(context, main, add=None, filterinfo=None, session=None, elementId=None, sortColumnList=None, firstrecord=None, pagesize=None): edu_organization = edu_organizationCursor(context) peo = person_edu_organizationCursor(context) person_id = JsonPath.read(session, "$.sessioncontext.related.gridContext.currentRecordId") # Заголовки _header = { 'uid': ['~~id', 'uid'], 'name': [u'Наименование', 'name'], 'shortname': [u'Краткое наименование', 'shortname'], 'actual': [u'Актуальная', 'actual'], 'role': [u'Роль', 'role'], 'properties': [u'properties', 'properties']} for column in _header: _header[column].append(toHexForXml(_header[column][0])) peo.setRange('person_id', person_id) peo.limit(firstrecord - 1, pagesize) grid_data = {'records': {'rec':[]}} for row in peo.iterate(): currentrow = {} currentrow[_header['uid'][2]] = row.uid edu_organization.get(row.edu_organization_id) currentrow[_header['name'][2]] = edu_organization.name currentrow[_header['shortname'][2]] = edu_organization.shortname currentrow[_header['actual'][2]] = '%s.png' % str(edu_organization.actual).lower() currentrow[_header['role'][2]] = ROLES_LIST[row.role] currentrow[_header['properties'][2]] = { 'event': { '@name': 'row_single_click', 'action': { '#sorted': [ {'main_context': 'current'}, {'datapanel': { '@type': 'current', '@tab': 'current'}}]}}} grid_data['records']['rec'].append(currentrow) return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(grid_data)), None) def gridMeta(context, main=None, add=None, filterinfo=None, session=None, elementId=None, sortColumnList=None): peo = person_edu_organizationCursor(context) person_id = JsonPath.read(session, "$.sessioncontext.related.gridContext.currentRecordId") peo.setRange('person_id', person_id) # Заголовки _header = { 'uid': ['~~id', 'uid'], 'name': [u'Наименование', 'name'], 'shortname': [u'Краткое наименование', 'shortname'], 'actual': [u'Актуальная', 'actual'], 'role': [u'Роль', 'role'], 'properties': [u'properties', 'properties']} for column in _header: _header[column].append(toHexForXml(_header[column][0])) grid_settings = {} grid_settings['gridsettings'] = { 'labels': { 'header': 'Связь ФЛ с образовательными организациями'}, 'columns': { 'col': []}, 'properties': { '@pagesize': 50, '@gridWidth': '100%', '@gridHeight': getGridHeight(session, numberOfGrids=2, gridHeaderHeight=55, delta=59), '@totalCount': peo.count(), '@profile': 'default.properties'}} # Добавляем поля для отображения в gridsettingss grid_settings['gridsettings']['columns']['col'].append({'@id': _header['name'][0]}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['shortname'][0]}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['actual'][0], '@type': 'IMAGE', '@width': '50px'}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['role'][0]}) return JythonDTO(None, XMLJSONConverter.jsonToXml(json.dumps(grid_settings))) def gridToolBar(context, main=None, add=None, filterinfo=None, session=None, elementId=None): session_json = json.loads(session)['sessioncontext'] grid_context = session_json['related']['gridContext'] string_bool = lambda x: x and 'true' or 'false' record_selected = False for gc in grid_context: if gc['@id'] == 'personEduOrganizationGrid' and 'currentRecordId' in gc: record_selected = True # добавление if userHasPermission(context, session_json['sid'], 'addPersonEduOrganization'): add_style = string_bool(False) else: add_style = string_bool(True) # редактирование if userHasPermission(context, session_json['sid'], 'editPersonEduOrganization'): edit_style = (string_bool(False) if record_selected else string_bool(True)) else: edit_style = string_bool(True) # удаление if userHasPermission(context, session_json['sid'], 'delPersonEduOrganization'): delete_style = edit_style else: delete_style = string_bool(True) grid_toolbar = {'gridtoolbar': { '#sorted': [ {'item': { '@text': u'Добавить', '@hint': u'Добавить связь с образовательной организацией', '@disable': add_style, 'action': { '@show_in': 'MODAL_WINDOW', '#sorted': [ {'main_context': 'current'}, {'modalwindow': { '@caption': u'Добавить связь с образовательной организацией', '@height': '300', '@width': '700'}}, {'datapanel': { '@type': 'current', '@tab': 'current', 'element': { '@id': 'personEduOrganizationCard', 'add_context': 'add'}}}]}}}, {'item': { '@text': u'Редактировать', '@hint': u'Редактировать связь с обр. организацией', '@disable': edit_style, 'action': { '@show_in': 'MODAL_WINDOW', '#sorted': [ {'main_context': 'current'}, {'modalwindow': { '@caption': u'Редактировать связь с обр. организацией', '@height': '300', '@width': '700'}}, {'datapanel': { '@type': 'current', '@tab': 'current', 'element': { '@id': 'personEduOrganizationCard', 'add_context': 'edit'}}}]}}}, {'item': { '@text': u'Удалить', '@hint': u'Удалить связь с обр. организацией', '@disable': delete_style, 'action': { '@show_in': 'MODAL_WINDOW', '#sorted': [ {'main_context': 'current'}, {'modalwindow': { '@caption': 'Удалить связь с обр. организацией', '@height': '140', '@width': '400'}}, {'datapanel': { '@type': 'current', '@tab': 'current', 'element': { '@id': 'personEduOrganizationDeleteCard', 'add_context': ''}}}]}}}]}} return XMLJSONConverter.jsonToXml(json.dumps(grid_toolbar)) from nci import ROLES_LIST