# coding: utf-8
'''
Created on 05.05.2014

@author: Victor B.
'''

import datetime
import json
import uuid

from flute._flute_orm import tasksCursor
from nci._nci_orm import person_edu_organizationCursor, edu_organizationCursor
from nci.functions.persons import getPersonIdBySid
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.core.selector import ResultSelectorData
    from ru.beta2.extra.gwt.ui.selector.api import DataRecord
    from ru.curs.celesta.showcase import UserMessage
    from ru.curs.celesta.showcase import MessageType
except:
    from ru.curs.celesta.showcase import JythonDTO



def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None):
    u'''Данные для карточки.'''


    session = json.loads(session)['sessioncontext']
    sid = session['sid']
    person_id = getPersonIdBySid(context, sid)
    
    # Структура данных
    xformsdata = {"schema":
                  {"@xmlns":"",
                    "data":
                        {
                         "edu_org_id":'',
                         "edu_org_name":'',
                         "edu_organization":[],
                         "date_to":'',
                         "date_from":'',
                         "method": "false",
                         "report":''
                         }

                    }
                  }
    
    if userHasPermission(context, sid, 'allEduOrgCourse'):
        xformsdata['schema']['data']['method'] = 'true'
    else:
        person_org = person_edu_organizationCursor(context)
        edu_organization = edu_organizationCursor(context)
        person_org.setRange("person_id", person_id)

        person_org.setRange('role', 'staff')
        for person_org in person_org.iterate():
            edu_organization.get(person_org.edu_organization_id)
            xformsdata['schema']['data']['edu_organization'].append({
                '@label': edu_organization.shortname if edu_organization.shortname else edu_organization.name,
                '@value': person_org.edu_organization_id})
        xformsdata['schema']['data']['edu_organization_id'] = \
            xformsdata['schema']['data']['edu_organization'][0]['@value']
    # виды отчетов
    xformsdata['schema']['data']['reports'] = []

 

    xformsdata['schema']['data']['reports'].append({'@label': u'Отчёт по реализации возможности обучения по специальностям с использованием образовательного сертификата',
                                                     '@value': 'specialityReport'}
                                                   )
    xformsdata['schema']['data']['reports'].append({'@label': u'Сводный отчёт по реализации возможности обучения по специальностям с использованием образовательного сертификата',
                                                     '@value': 'consolidateSpecialityReport'}
                                                   )
    xformsdata['schema']['data']['reports'].append({'@label': u'Отчёт по формированию организациями, осуществляющими образовательную деятельность, реестра образовательных программ подготовки медицинских работников  с применением',
                                                     '@value': 'programReport'}
                                                   )
    xformsdata['schema']['data']['reports'].append({'@label': u'Сводный отчёт по формированию организациями, осуществляющими образовательную деятельность, реестра образовательных программ подготовки медицинских работников  с применением',
                                                     '@value': 'consolidatedProgramReport'}
                                                   )
    xformsdata['schema']['data']['reports'].append({'@label': u'Справка по обучению  специалистов по образовательным сертификатам организацией, осуществляющей образовательную деятельность',
                                                     '@value': 'studentReport'}
                                                   )


    # если кафедра, то заполняем cath_id и cath_name


    # Первоначальная xformssettings
    xformssettings = {"properties":{"event":[{"@name":"single_click",
                                             "@linkId": "1",
                                             "action":{
                                                '#sorted': [
                                                    {"main_context": "current"},
                                                    {"datapanel": {"@type": "current",
                                                                     "@tab": "current",
                                                                     "element": {"@id":'reportsGrid',
                                                                                 "add_context": ""
                                                                                 }
                                                                     }}]
                                                       }
                                             },
                                             {"@name":"single_click",
                                             "@linkId": "2",
                                             "action":{
                                                '#sorted': [
                                                    {"main_context": "current"},
                                                    {"datapanel": {"@type": "current",
                                                                     "@tab": "current"
                                                                                        ,
                                                                     "element": {"@id":elementId,
                                                                                 "add_context": "hide"
                                                                                 }
                                                                     }}]
                                                       }
                                             }]
                                    }
                      }


    return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(xformsdata)),
                      XMLJSONConverter.jsonToXml(json.dumps(xformssettings)))


def cardSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None):
    u'''Сохранение карточки. '''

    sid = json.loads(session)['sessioncontext']['sid']
    personid = getPersonIdBySid(context, sid)
    data_dict = json.loads(xformsdata)
    if data_dict['schema']['data']['edu_org_id']:
        edu_org_id = data_dict['schema']['data']['edu_org_id']
    else:
        edu_org_id = None
    method = True if data_dict['schema']['data']['method'] == 'true' else False
    arg_dict = {}
    arg_dict['request_id'] = uuid.uuid4()
    if data_dict['schema']['data']['report'] == 'specialityReport':
        arg_dict['script'] = 'edu.reports.specialityReport.printToFlute'
        arg_dict['params'] = {u'edu_org_id': edu_org_id,
                               u'method': method}

    elif data_dict['schema']['data']['report'] == 'consolidateSpecialityReport':
        arg_dict['script'] = 'edu.reports.specialityReport.printConsolidateToFlute'
        arg_dict['params'] = {u'edu_org_id': edu_org_id,
                               u'method': method}
    elif data_dict['schema']['data']['report'] == 'programReport':
        arg_dict['script'] = 'edu.reports.programReport.printToFlute'
        arg_dict['params'] = {u'edu_org_id': edu_org_id,
                               u'method': method}
    elif data_dict['schema']['data']['report'] == 'consolidatedProgramReport':
        arg_dict['script'] = 'edu.reports.programReport.printConsolidateToFlute'
        arg_dict['params'] = {u'edu_org_id': edu_org_id,
                               u'method': method}
    elif data_dict['schema']['data']['report'] == 'studentReport':
        arg_dict['script'] = 'edu.reports.studentReport.printToFlute'
        arg_dict['params'] = {u'edu_org_id': edu_org_id,
                               u'method': method,
                               'date_from': data_dict['schema']['data']['date_from'],
                               'date_to':data_dict['schema']['data']['date_to']}
    
    
    # добавляем в таблицу флейты
    xlreports = tasksCursor(context)
    xlreports.script = arg_dict['script']
    if 'params' in arg_dict:
        xlreports.parameters = json.dumps(arg_dict['params'])
    xlreports.request_id = arg_dict['request_id']
    xlreports.user = personid
    xlreports.status = 0
    xlreports.datecreated = datetime.datetime.now()
    xlreports.insert()