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

@author: i.lopatin

'''
import json

from common._common_orm import linesOfNumbersSeriesCursor
from common._common_orm import numbersSeriesCursor
from common.numbersseries import getNextNo
from ru.curs.celesta.showcase.utils import XMLJSONConverter
from author._author_orm import serviceCatalogCursor
from java.text import SimpleDateFormat
from java.util import Date

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
except:
    from ru.curs.celesta.showcase import JythonDTO, DataRecord, ResultSelectorData

def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None):
   
    u'''Процедура для отрисовки данных карточки. '''
    
    service = serviceCatalogCursor(context)

    u"""Получение набора всего набора полей из данной таблицы"""
    gridContext = json.loads(session)['sessioncontext']['related']['gridContext']
        
    if 'currentRecordId' in gridContext:
        currRecordId = gridContext["currentRecordId"]
        
    u"""Выбор карточки 'Редактировать' или 'Удалить'"""
    if add == 'edit' or add == "delete":
        if currRecordId:
            service.get(int(currRecordId))  
    
    u"""Данные для полей на карточке"""    
    xformsdata = {"schema":{"catalogData": {"@add":add,
                                            "@testSystemAddress": service.testSystemAddress,
                                            "@link": service.link,
                                           }
                            }
                  }
    
    xformssettings = {"properties":{"event":{"@name":"single_click",
                                             "@linkId": "1",
                                             "action":{
                                                  "#sorted": [
                                                      {"main_context": "current"},
                                                      {"datapanel": {"@type": "current",
                                                                     "@tab": "current",
                                                                     "element": {"@id":"webServiceCatalogGrid",
                                                                                 "add_context": ""}
                                                                     }
                                                      }]}
                                             },
                                    
                                    }
                      }
    
    return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(xformsdata)),
                     XMLJSONConverter.jsonToXml(json.dumps(xformssettings))
                     )


def cardDataSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None):    
    u'''Процедура сохранения'''  

    u"""Получение набора полей, в которых будут проводиться изменения"""  
    content = json.loads(xformsdata)["schema"]["catalogData"]

    u"""Получение набора всего набора полей из данной таблицы"""
    idContent = json.loads(session)['sessioncontext']['related']['gridContext']
   
    u"""Создание интсрументов для работы с датой"""  
    dateFormat = SimpleDateFormat("yyyy-MM-dd")
    date = dateFormat.format(Date())  # Сегодняшняя дата
    
    u"""Создание курсоров для таблиц serviceCatalog, numbersSeries и linesOfNumbersSeries"""
    service = serviceCatalogCursor(context)
    numberSeries = numbersSeriesCursor(context)
    linesOfNumbersSeries = linesOfNumbersSeriesCursor(context)
    

    u""" Проверка выбранной карточки"""
    if add == "add":  
        u"""Значение для поля id в таблице numbersSeries"""
        defaultNumberId = "serviceCatalog"  
            
        u"""Если данная запись присутсвует в таблице"""
        if not numberSeries.tryGet(defaultNumberId):
            u"""Создаем запись в таблице numbersSeries"""
            numberSeries.id = defaultNumberId
            numberSeries.description = "Таблица %s" % (defaultNumberId) 
            
            u"""Создаем запись в таблице linesOfNumbersSeries"""
            linesOfNumbersSeries.seriesId = defaultNumberId
            linesOfNumbersSeries.numberOfLine = 1
            linesOfNumbersSeries.startingDate = dateFormat.parse(date)
            linesOfNumbersSeries.startingNumber = 1
            linesOfNumbersSeries.endingNumber = 100
            linesOfNumbersSeries.incrimentByNumber = 1
            
            u"""Добавляем записи в таблицы numbersSeries и linesOfNumbersSeries""" 
            numberSeries.insert()
            linesOfNumbersSeries.insert()
            
            u"""Закрываем курсоры numbersSeries и linesOfNumbersSeries"""
            numberSeries.close()
            linesOfNumbersSeries.close()
        
        u"""Записываем в поле catalogId сгенерированный id"""
        service.catalogId = getNextNo.getNextNoOfSeries(context, defaultNumberId) 
                        
  
    elif add == "edit":
        currRecordId = idContent['currentRecordId']
        service.get(int(currRecordId))
    
    u"""Проверка на запрещенные символы"""
    illegalInputSigns = checkIllegalSigns(content, context)
    
    if  not illegalInputSigns:
        u""" Внесение изменений в данные"""
        service.testSystemAddress = content["@testSystemAddress"]
        service.link = content["@link"]
            
        u""" Обновление, удаление, и редактирование для соответсвующей карточки"""
        if add == "add":
            service.insert()
        elif add == "edit":
            service.update()

        context.message(u"Данные сохранены")

def checkIllegalSigns(content, context):
    result = False
    
    u"""Список запрещенных символов"""
    illegalSigns = ["{", "}"]
    
    u"""Словарь соотвествия названия поля ввода и столбца в таблице"""
    inputFieldsDict = {"@testSystemAddress": "Адрес системы тестирования",
                       "@link": "Ссылка"
                       }
    u"""Поиск запрещенных символов в введенных строках"""    
    for sign in illegalSigns:
        for key, value in content.items():
            if sign in value:
                context.error(u"Ошибка в поле \"%s\", символ %s запрещен. Список запрещенных символов: %s" % (inputFieldsDict[key], sign, illegalSigns))
         
    return result
