# 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