# coding: utf-8
'''
Created on 11.02.2016
Карточка создания ФЛ и аккаунта из заявки на ИЦА
@author: v.popov
'''
from java.text import SimpleDateFormat
import json
import re

from com.jayway.jsonpath import JsonPath
from common.numbersseries.getNextNo import getNextNoOfSeries
from nci._nci_orm import personCursor
from ru.curs.celesta.showcase.utils import XMLJSONConverter
from edu._edu_orm import accred_cycle_requestCursor
from nci.functions.persons import createAccount

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 cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None):
    u'''Карточка ФЛ'''
    
    #person = personCursor(context)
    accred_cycle_request = accred_cycle_requestCursor(context)
    record_id = JsonPath.read(session, "$.sessioncontext.related.gridContext.currentRecordId")
    accred_cycle_request.get(record_id)


    xformsdata = {"schema":
                      {"@xmlns":"",
                        "record":
                            {"uid": ""
                            , "request_id": record_id
                           , "surname": accred_cycle_request.surname
                           , "name": accred_cycle_request.name
                           , "birthDate": ""
                           , "patronymic": accred_cycle_request.patronymic
                           , "email": ""
                           , "phone": ""
                           , "phoneExtra": ""
                           , "snils": accred_cycle_request.snils
                           , "sex": ""
                           , "personal_data_agree": "true"
                           , "readonly": "false"
                            }
                        }
                      }

    xformssettings = {"properties":{"event":[{"@name":"single_click",
                                              "@linkId": "1",
                                              "action":{"@keep_user_settings": "true",
                                                '#sorted': [
                                                    {"main_context": "current"},
                                                    {"datapanel": {"@type": "current",
                                                                      "@tab": "current",
                                                                      "element": {"@id":"accredCycleRequestsGrid",
                                                                                  "add_context": ""
                                                                                  }
                                                                      }}]
                                                        }
                                              }]
                                    }
                      }

    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'''Сохранение данных о ФЛ. '''

    person = personCursor(context)
    accred_cycle_request = accred_cycle_requestCursor(context)

    data_dict = json.loads(xformsdata)["schema"]["record"]
    
    # добавляем ФЛ
    person.surname = data_dict["surname"]
    person.name = data_dict["name"]
    person.patronymic = data_dict["patronymic"]
    person.snils = data_dict["snils"]
    person.sex = data_dict["sex"]
    person.email = data_dict["email"]
    person.phone = data_dict["phone"]
    person.phoneExtra = data_dict["phoneExtra"]
    person.birthDate = SimpleDateFormat("yyyy-MM-dd").parse(data_dict["birthDate"]) if data_dict["birthDate"] else None
    person.personal_data_agree = data_dict["personal_data_agree"] == "true"
    person.fullname = u'%s %s %s' % (person.surname or '',
                                     person.name or '',
                                     person.patronymic or '')
    person.uid = getNextNoOfSeries(context, 'persons')
    person.insert()
    # обновляем заявку
    accred_cycle_request.get(data_dict["request_id"])
    accred_cycle_request.person_id = person.uid
    accred_cycle_request.update()
    # создаем аккаунт    
    createAccount(context, person.uid, password=None, roles=['medstaff', 'address'])