# coding: utf-8
from suds.client import Client
from common.grainssettings import SettingsManager
from author._author_orm import subscribedServiceCatalogCursor
from java.text import SimpleDateFormat
import json

def subSysPostInsert(package):
    u"""Триггер срабатывающий после вставки записи в таблицу"""
    callClientService(package, "Insert")
    
def subSysPostEdit(package):
    u"""Триггер срабатывающий после редактирования записи в таблице"""
    callClientService(package, "Edit")
    
def subSysPostDelete(package):
    u"""Триггер срабатывающий после удаления записи из таблицы"""
    callClientService(package, "Delete")

def callClientService(package, action):
    u"""Функция вызова клиентского сервиса
    Передает информацию о совершенном дейсвтии(вставка, редактирование, удаление
    в веб сервис другой системы"""
    print '-------------', action, '++++++++++++++'
    context = package.callContext()
    subscribedSystem = subscribedServiceCatalogCursor(context)
    
    packageId = package.PackageID
    packageName = package.PackageName
    packageStatus = package.Status
    simpleFormat = SimpleDateFormat()
    dateCreated = simpleFormat.format(package.DateCreated)
    u"""Параметры для передачи в клиент сервис"""
    request = {'params':{},
               'info': {}}
    
    u"""Создание менеджера для получения служебных параметров"""
    settings_manager = SettingsManager()
    u"""Получение pin и address"""
    pin = settings_manager.getGrainSettings('parameter[@name="pin"]/@value', 'author')[0]
    address = settings_manager.getGrainSettings('parameter[@name="address"]/@value', 'author')[0]
    
    request["params"]["pin"] = pin
    request["params"]["address"] = address
    request["info"]["packageId"] = packageId
    request["info"]["packageName"] = packageName
    request["info"]["packageStatus"] = packageStatus
    request["info"]["dateCreated"] = dateCreated
    request["info"]["action"] = action
    request["info"]["sid"] = package.EditorID

    
    u"""Вызов клиент сервиса всех подписанных систем"""
    for system in subscribedSystem.iterate():
        client = Client(system.link)
#         print '++++++++', system.link
        try:
            ans = client.service.handle(request=json.dumps(request), procName="elc.webservices.subscribedSysChangeWebService.performChanges.celesta")
#             print '***********', ans
        except Exception as e:
            print e
    
