# coding: utf-8 u''' Основной грид реестра ФЛ (медработников). ''' import json from common.sysfunctions import toHexForXml, getGridHeight from nci._nci_orm import vw_edu_organizationCursor, org_typeCursor, \ org_subtypeCursor, subtype_by_orgCursor,\ activity_typeCursor, activity_kindCursor, org_activity_typeCursor, org_activity_kindCursor from gridsettings.functions.gridSettings import filter_button, filter_reset_button from ru.curs.celesta.showcase.utils import XMLJSONConverter from security.functions import userHasPermission try: from ru.curs.showcase.core.jython import JythonDTO 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 = vw_edu_organizationCursor(context) org_type = org_typeCursor(context) org_subtype = org_subtypeCursor(context) subtype_by_org = subtype_by_orgCursor(context) org_activity_kind = org_activity_kindCursor(context) org_activity_type = org_activity_typeCursor(context) activity_type = activity_typeCursor(context) activity_kind = activity_kindCursor(context) # сортировка if sortColumnList: sortName = toHexForXml(sortColumnList[0].id) sortType = unicode(sortColumnList[0].sorting).lower() else: sortName = None edu_organization.orderBy('name') # Заголовки _header = { 'uid': ['~~id'], 'name': [u'Наименование'], 'shortname': [u'Краткое наименование'], 'abbreviation': [u'Аббревиатура'], 'org_type': [u'Тип организации'], 'subtypes': [u'Подтипы организации'], 'act_types': [u'Типы деятельности'], 'act_kind': [u'Виды деятельности'], 'phone': [u'Телефон'], 'email': [u'Эл.Почта'], 'subordinate_ministry': [u'Подчинена минздраву'], 'region_name': [u'Регион'], 'city_name': [u'Населенный пункт'], 'address': [u'Почтовый адрес'], 'actual': [u'Актуальная'], 'properties': [u'properties'] } if context.getData().get('eduOrganizationFilter',''): ext_filter(context.getData()['eduOrganizationFilter'],edu_organization,context) for column in _header: _header[column].append(toHexForXml(_header[column][0])) if sortName == _header[column][1]: edu_organization.orderBy("%s %s" % (column, sortType)) edu_organization.limit(firstrecord - 1, pagesize) grid_data = { 'records': { 'rec': [] } } for edu_organization in edu_organization.iterate(): row = {} u"""Данные для полей с множественными значениями""" subtypes = "" act_types = "" act_kind = "" if org_type.tryGet(edu_organization.org_type_id): org_type_name = org_type.name else: org_type_name = '' u"""Получение подтипов организации""" subtype_by_org.setRange("org_id", edu_organization.uid) if subtype_by_org.count(): for subtype in subtype_by_org.iterate(): org_subtype.get(subtype.subtype_id) subtypes += org_subtype.name + ". " subtypes = subtypes[:-2] u"""Получение типов деятельности организации""" org_activity_type.setRange('org_id',edu_organization.uid) if org_activity_type.count(): for org_activity_type in org_activity_type.iterate(): activity_type.get(org_activity_type.type_id) act_types += activity_type.name +". " act_types = act_types[:-2] u"""Получение видов деятельности организации""" org_activity_kind.setRange('org_id',edu_organization.uid) if org_activity_kind.count(): for org_activity_kind in org_activity_kind.iterate(): activity_kind.get(org_activity_kind.kind_id) act_kind += activity_kind.name + ". " act_kind = act_kind[:-2] for field in _header: if field not in ('properties', 'actual','subtypes', 'act_kind','act_types','org_type'): row[_header[field][1]] = getattr(edu_organization, field) row[_header['actual'][1]] = '%s.png' % str(edu_organization.actual).lower() row[_header['subtypes'][1]] = subtypes row[_header['act_types'][1]] = act_types row[_header['act_kind'][1]] = act_kind row[_header['org_type'][1]] = org_type_name row[_header['org_type'][1]] = org_type_name row[_header['subordinate_ministry'][1]] = '%s.png' % str(edu_organization.subordinate_ministry).lower() row[_header['properties'][1]] = { 'event': { '@name': 'row_single_click', 'action': { '#sorted': [ { 'main_context': 'current' }, { 'datapanel': { '@type': 'current', '@tab': 'current' } } ] } } } grid_data['records']['rec'].append(row) return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(grid_data)), None) def gridMeta(context, main=None, add=None, filterinfo=None, session=None, elementId=None, sortColumnList=None): edu_organization = vw_edu_organizationCursor(context) # Заголовки _header = { 'uid': ['~~id'], 'name': [u'Наименование'], 'shortname': [u'Краткое наименование'], 'abbreviation': [u'Аббревиатура'], 'region_name': [u'Регион'], 'city_name': [u'Населенный пункт'], 'address': [u'Почтовый адрес'], 'org_type': [u'Тип организации'], 'subtypes': [u'Подтипы организации'], 'act_types': [u'Типы деятельности'], 'act_kind': [u'Виды деятельности'], 'phone': [u'Телефон'], 'email': [u'Эл.Почта'], 'subordinate_ministry': [u'Подчинена минздраву'], 'actual': [u'Актуальная'], 'properties': [u'properties'] } filter_string = '' if context.getData().get('eduOrganizationFilter',''): filter_string = ext_filter(context.getData()['eduOrganizationFilter'],edu_organization,context) grid_settings = {} grid_settings['gridsettings'] = { 'labels': { 'header': 'Образовательные организации
' + filter_string }, 'columns': { 'col': [] }, 'properties': { '@pagesize': 50, '@gridWidth': '100%', '@gridHeight': getGridHeight(session, numberOfGrids=1, gridHeaderHeight=55, delta=59), '@totalCount': edu_organization.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['abbreviation'][0]}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['region_name'][0]}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['city_name'][0]}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['address'][0]}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['org_type'][0]}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['subtypes'][0]}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['act_types'][0]}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['act_kind'][0]}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['phone'][0]}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['email'][0]}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['subordinate_ministry'][0], '@type': 'IMAGE', '@width': '50px'}) grid_settings['gridsettings']['columns']['col'].append({'@id': _header['actual'][0], '@type': 'IMAGE', '@width': '50px'}) 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' # добавление ФЛ if userHasPermission(context, session_json['sid'], 'addEduOrganization'): add_style = string_bool(False) else: add_style = string_bool(True) # редактирование ФЛ if userHasPermission(context, session_json['sid'], 'editEduOrganization'): edit_style = (string_bool(False) if 'currentRecordId' in grid_context else string_bool(True)) else: edit_style = string_bool(True) # удаление ФЛ if userHasPermission(context, session_json['sid'], 'delEduOrganization'): delete_style = edit_style else: delete_style = string_bool(True) grid_toolbar = { 'gridtoolbar': { '#sorted': [ filter_button("eduOrganizationFilter",270,630), filter_reset_button("eduOrganizationGrid","eduOrganizationFilter"), # { # 'item': { # "@img":'gridToolBar/filter.ico', # '@text': u'Фильтр', # '@hint': u'Открыть фильтр', # '@disable': "false", # 'action': { # '@show_in': 'MODAL_WINDOW', # '#sorted': [ # { # 'main_context': 'current' # }, # { # 'modalwindow': { # '@caption': u'Редактировать запись об образовательной организации', # '@height': '500', # '@width': '650' # } # }, # { # 'datapanel': { # '@type': 'current', # '@tab': 'current', # 'element': { # '@id': 'eduOrganizationFilter', # 'add_context': 'edit' # } # } # } # ] # } # } # }, { 'item': { '@text': u'Добавить', '@hint': u'Добавить данные об обр. организации', '@disable': add_style, 'action': { '@show_in': 'MODAL_WINDOW', '#sorted': [ { 'main_context': 'current' }, { 'modalwindow': { '@caption': u'Добавить запись об образовательной организации', '@height': '770', '@width': '680' } }, { 'datapanel': { '@type': 'current', '@tab': 'current', 'element': { '@id': 'eduOrganizationCard', 'add_context': 'add' } } } ] } } }, { 'item': { '@text': u'Редактировать', '@hint': u'Редактировать данные об обр. организации', '@disable': edit_style, 'action': { '@show_in': 'MODAL_WINDOW', '#sorted': [ { 'main_context': 'current' }, { 'modalwindow': { '@caption': u'Редактировать запись об образовательной организации', '@height': '770', '@width': '680' } }, { 'datapanel': { '@type': 'current', '@tab': 'current', 'element': { '@id': 'eduOrganizationCard', 'add_context': 'edit' } } } ] } } }, { 'item': { '@text': u'Удалить', '@hint': u'Удалить данные об обр. организации', '@disable': delete_style, 'action': { '@show_in': 'MODAL_WINDOW', '#sorted': [ { 'main_context': 'current' }, { 'modalwindow': { '@caption': 'Удалить данные об образовательной организации', '@height': '150', '@width': '400' } }, { 'datapanel': { '@type': 'current', '@tab': 'current', 'element': { '@id': 'eduOrganizationDeleteCard', 'add_context': '' } } } ] } } } ] } } return XMLJSONConverter.jsonToXml(json.dumps(grid_toolbar)) def ext_filter(session,edu_organization,context): filter_string = u"Фильтр: " filter_list = [] whereclause = '1 = 1' def str2bool(str): if str == 'true': return True else: return False def bool2YesOrNo(str): if str == 'true': return 'Да' else: return 'Нет' if True:#'formData' in session['related']['xformsContext']: # data = session['related']['xformsContext']['formData']['schema']['record'] data = session['schema']['record'] name = data['name'] subordinate_ministry = data['subordinate_ministry'] actual = data['actual'] if name: filter_list.append(u'название содержит: %s'%(name)) # edu_organization.setFilter('name',"@%%'%s'%%"%(name)) tmpName = "%"+name+"%" whereclause += " and name like '%s'" %(tmpName) whereclause += " or shortname like '%s'"%(tmpName) whereclause += " or abbreviation like '%s'"%(tmpName) if subordinate_ministry != '-': filter_list.append(u'подчинена минздраву: %s'%(bool2YesOrNo(subordinate_ministry))) edu_organization.setRange('subordinate_ministry',str2bool(subordinate_ministry)) if actual != '-': filter_list.append(u'актуальна: %s'%(bool2YesOrNo(actual))) edu_organization.setRange('actual',str2bool(actual)) edu_organization.setComplexFilter(whereclause) filter_string = '' + filter_string + ','.join(filter_list) +'' return filter_string