# 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