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

@author: v.popov

'''
import json
from java.util import ArrayList
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



from ru.curs.celesta import CelestaException
from ru.curs.celesta.showcase.utils import XMLJSONConverter
# from dirusing.commonfunctions import relatedTableCursorImport
from kurs._kurs_orm import employeesCursor, workingTimeCursor, projectsCursor

def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None):
    u'''Функция данных для карточки редактирования содержимого таблицы типоа разрешений. '''
    
    #raise Exception(session)
    
    employees = employeesCursor(context)    

    if add == 'add':
        
        sid = json.loads(session)['sessioncontext']['sid']
        employees.get(sid)
        xformsdata = {"schema":{"context":{"@nameId":sid,
                                           "@name":employees.fio,
                                           "@date":"",
                                           "@projectId":"",
                                           "@project":"",
                                           "@start":"",
                                           "@finish":"",
                                           "@time":"",
                                           "@place":"",
                                           "@typeTime":""}
                                }
                      }
    elif add == 'edit' or add == 'clone':
        workingTime = workingTimeCursor(context)
        projects = projectsCursor(context)
        currId = json.loads(session)['sessioncontext']['related']['gridContext']['currentRecordId']
        workingTime.get(currId)
        employees.get(workingTime.employeeId)
        projects.get(workingTime.projectId)
        xformsdata = {"schema":{"context":{"@nameId":workingTime.employeeId,
                                           "@name":employees.fio,
                                           "@date":workingTime.date,
                                           "@projectId":workingTime.projectId,
                                           "@project":projects.name,
                                           "@start":workingTime.start,
                                           "@finish":workingTime.finish,
                                           "@time":workingTime.time,
                                           "@place":workingTime.place,
                                           "@typeTime":""}
                                }
                      }
    xformssettings = {"properties":{"event":{"@name":"single_click",
                                             "@linkId": "1",
                                             "action":{"#sorted":[{"main_context": "current"},
                                                                   {"datapanel": {"@type": "current",
                                                                                 "@tab": "current",
                                                                                 "element": {"@id":"time_grid",
                                                                                             "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):
    workingTime = workingTimeCursor(context)
    content = json.loads(xformsdata)["schema"]["context"]
    workingTime.employeeId = content['@nameId']
    workingTime.date = content['@date']
    workingTime.projectId = content['@projectId']
    workingTime.start = content['@start']
    workingTime.finish = content['@finish']
    workingTime.time = content['@time']
    workingTime.place = content['@place']

    if add in ['add', 'clone'] and workingTime.canInsert() and workingTime.canModify():
        if not workingTime.tryInsert():
            workingTime.update()
    elif add in ['add', 'clone'] and workingTime.canInsert():
        workingTime.insert()
    elif add == 'edit' and workingTime.canModify():        
        currId = json.loads(session)['sessioncontext']['related']['gridContext']['currentRecordId']        
        workingTime.uid = currId
        workingTime.update()                
    else:
        raise CelestaException(u"Недостаточно прав для данной операции!")
    
    
def employeesCount(context, main=None, add=None, filterinfo=None, session=None, params=None,
                curvalue=None, startswith=None):

    employees = employeesCursor(context)
    
    employees.setFilter('fio', """@%s'%s'%%""" % ("%"*(not startswith), curvalue.replace("'","''")))
    count = employees.count()
    return ResultSelectorData(None, count)

def employeesList(context, main=None, add=None, filterinfo=None, session=None, params=None,
                curvalue=None, startswith=None, firstrecord=None, recordcount=None):
    
    employees = employeesCursor(context)
    employees.setFilter('fio', """@%s'%s'%%""" % ("%"*(not startswith), curvalue.replace("'","''")))
    employees.orderBy('fio')
    employees.limit(firstrecord, recordcount)

    recordList = ArrayList()
    for employees in employees.iterate():
        rec = DataRecord()
        rec.setId(unicode(employees.uid))
        rec.setName(employees.fio)
        recordList.add(rec)
    return ResultSelectorData(recordList, 0)

def projectsCount(context, main=None, add=None, filterinfo=None, session=None, params=None,
                curvalue=None, startswith=None):

    projects = projectsCursor(context)
    
    projects.setFilter('name', """@%s'%s'%%""" % ("%"*(not startswith), curvalue.replace("'","''")))
    count = projects.count()
    return ResultSelectorData(None, count)

def projectsList(context, main=None, add=None, filterinfo=None, session=None, params=None,
                curvalue=None, startswith=None, firstrecord=None, recordcount=None):
    
    projects = projectsCursor(context)
    projects.setFilter('name', """@%s'%s'%%""" % ("%"*(not startswith), curvalue.replace("'","''")))
    projects.orderBy('name')
    projects.limit(firstrecord, recordcount)
    recordList = ArrayList()
    for projects in projects.iterate():
        rec = DataRecord()
        rec.setId(unicode(projects.uid))
        rec.setName(projects.name)
        recordList.add(rec)
    return ResultSelectorData(recordList, 0)