Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- import datetime
- import traceback
- import json
- import logging
- log = logging.getLogger(__name__)
- import sys
- import os
- os.environ["NLS_LANG"] = "AMERICAN_AMERICA.UTF8"
- sys.path.append(os.path.join(os.path.expanduser("~"), "bm/config/TimeMonitoring/calendar_views"))
- from rbs_db.connection import ConnectionManager
- ###############
- from user_skud_configs import exec_request
- ###############
- ##########
- try:
- _app_glbls = app_globals
- except NameError as e:
- _app_glbls = None
- ConMgr = ConnectionManager()
- CONNECTION_STRING = "itron/itron@itron.t48.ru:1521/XE"
- ##########
- #ConMgr = ConnectionManager(None, _app_glbls)
- #CONNECTION_STRING = None
- #Rabus.ajax.getJson("LK_TIMETABLE1", "TIMETABLE1", Ext.encode({'timeout': 1}))
- params_d = {
- "action": "read",
- "sorters": [{
- "property":None,
- "direction":None,
- "sort": None}],
- "page": 1,
- "start": 0,
- "limit": 36,
- "addRecords": False,
- "sort": None,
- "dir": None,
- "MAX_COL": "100",
- "WORK_FD": "10:00",
- "WORK_TD": "19:00",
- "VIEW_FD": "08:00",
- "VIEW_TD": "21:00",
- "TRUNCATE_MIN": "15",
- "SHOW_SUMS": "True",
- "ONLY_RESULTS": "False",
- "NEED_DELIMETER": "False",
- "MAIN_LAYOUT": "left_vertical",
- "CHILDREN_LAYOUT": "default",
- "PRINT_PARAMETERS": "False",
- "PRINT_CALENDARS": "False",
- "COL_OFFSET": None,
- "CALENDAR_TYPE": [
- "1"
- "10",
- "2",
- "3",
- "4",
- "6",
- "8",
- "7"],
- "CALENDAR_TYPE_DISPLAY": [
- u"Рабочее время",
- u"Отгул (в счет отпуска)",
- u"Отпуск",
- u"Болезнь",
- u"За свой счет",
- u"Прогул",
- u"Командировка",
- u"Вып. задач"],
- "SUM_CALENDAR_TYPE": [
- "1",
- "10"
- "2",
- "3",
- "4",
- "6",
- "8"
- ],
- "SUM_CALENDAR_TYPE_DISPLAY": [
- u"Рабочее время",
- u"Отгул (в счет отпуска)",
- u"Отпуск",
- u"Болезнь",
- u"За свой счет",
- u"Прогул",
- u"Командировка"
- ],
- "USERS_PER_SHEET": 0}
- def mainFunc(params):
- conn = ConMgr.get_connection(CONNECTION_STRING)
- # print conn
- cur = conn.cursor()
- login = getLogin()
- user_id = getUserId(login, cur)
- calend_id = getSetting(cur, login)
- dic1 = calcTime(cur, user_id, calend_id, params)
- cur.close()
- ConMgr.release_connection()
- return dic1
- def getLogin():
- '''получение логина пользователя'''
- try:
- from pylons import session
- login = session.get("user")
- return login
- except TypeError:
- if __name__ == "__main__":
- return "AA"
- return "DPETROVA"
- def getUserId(login, cur):
- '''получаем id пользователя'''
- print "login=", login
- res1 = cur.execute("SELECT ID, NAME FROM OBJ WHERE ID=(SELECT OBJ_ID FROM ATTR WHERE VAL=:LOGIN)", {"LOGIN": str(login.upper())})
- for i in res1:
- user_id = i[0]
- print "user_id= ", user_id
- return user_id
- def getSetting(cur, login):
- '''получаем список календарей'''
- calend_id = []
- try:
- res = cur.execute("SELECT VALUE FROM USER_SETTING WHERE USER_NAME =:LOGIN AND KEY_NAME = 'LK_TIMETABLE' ", {"LOGIN": login})
- for i in res:
- mass = i[0]
- elements = mass.split()
- for i in elements:
- a = int(i)
- calend_id.append(a)
- except UnboundLocalError:
- res = cur.execute("SELECT VALUE FROM USER_SETTING WHERE USER_NAME = 'SYSTEM' AND KEY_NAME = 'LK_TIMETABLE' ")
- for i in res:
- mass = i[0]
- elements = mass.split()
- for i in elements:
- a = int(i)
- calend_id.append(a)
- print calend_id
- return calend_id
- def calcTime(cur, user_id, calend_id, params):
- user_id_t = type(user_id)
- if user_id_t is str or user_id_t is int or user_id_t is unicode:
- user_id = [user_id]
- s_user_id = []
- for i in user_id:
- s_user_id.append(str(i))
- s_calend_id = []
- for i in calend_id:
- s_calend_id.append(str(i))
- dic1 = {}
- dic2 = {}
- dic3 = {}
- list2 = []
- a = 0
- print "a =", a
- dt = datetime.datetime.today().replace(hour=0,minute=0,second=0, microsecond=0)
- print dt
- ic = dt.timetuple() # ic[0]-year, ic[1]-month, ic[2]-day, ic[6]-weekday
- if params.get('timeout') == 3: # период = год
- fd = datetime.datetime(ic[0], 1, 1)
- td = datetime.datetime(ic[0], 12, 31)
- time_x = [u"Янв", u"Фев", u"Мар", u"Апр", u"Май", u"Июн", u"Июл", u"Авг", u"Сент", u"Окт", u"Ноя", u"Дек"]
- elif params.get('timeout') == 2: # период = месяц
- fd = datetime.datetime(ic[0], ic[1], 1)
- if ic[1] == 12:
- td = datetime.datetime(ic[0] + 1, 1, 1) - datetime.timedelta(seconds=1)
- else:
- td = datetime.datetime(ic[0], ic[1] + 1, 1) - datetime.timedelta(seconds=1)
- time_x = [u"1нед", u"2нед", u"3нед", u"4нед", u"5нед", u"6нед"]
- else: # период = неделя
- fd = dt - datetime.timedelta(days=(ic[6]))
- td = dt + datetime.timedelta(days=(6 - ic[6]),hours=23,minutes=59,seconds=59)
- time_x = [u"Пн", u"Вт", u"Ср", u"Чт", u"Пт", u"Сб", u"Вс"]
- #цикл по элементам массива time_x
- for l in time_x:
- if params.get('timeout') == 3: # если период-год, получаем инфо по каждому месяцу
- if a == 11: # 12ый месяц
- fd1 = datetime.datetime(ic[0], a + 1, 1)
- td1 = datetime.datetime(ic[0] + 1, 1, 1) - datetime.timedelta(seconds=1)
- else:
- fd1 = datetime.datetime(ic[0], a + 1, 1)
- td1 = datetime.datetime(ic[0], a + 2, 1) - datetime.timedelta(seconds=1)
- elif params.get('timeout') == 2: # если период-месяц, получаем инфо по каждой неделе
- fd1 = fd + datetime.timedelta(days=a * 7)
- td1 = fd1 + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59)
- else: # если период-неделя, то получаем инфо по каждому дню
- fd1 = fd + datetime.timedelta(days=a)
- td1 = fd + datetime.timedelta(days=a, hours=23, minutes=59, seconds=59)
- #селект для получения соответствия между {"имя календаря" : цвет}
- res = cur.execute("""
- SELECT D.name, D.color FROM CALENDAR C, dic_data D
- WHERE (DIC_ID = 57 AND D.CODE IN (%s)) and
- C.OBJ_ID = (%s) GROUP BY D.name, D.color""" %
- (','.join(s_calend_id), ','.join(s_user_id)))
- dic2 = {} # обнуляем словарь dic2
- dic2['name'] = l # добавляем элемент списка time_x первым элементом dic2
- dic2['num'] = a
- #цикл для получения результатов селекта и записи их в словари
- for r in res:
- calend_name = r[0]
- color = r[1]
- dic3[calend_name] = color # не чистим
- dic1['1'] = dic3
- #вызов и разбор результата полученного от ф-ии exec_request
- params_d["USER_ID"] = user_id
- params_d["FD"] = fd1.strftime("%d.%m.%Y %H:%M:%S")
- params_d["TD"] = td1.strftime("%d.%m.%Y %H:%M:%S")
- print "params_d = ", params_d
- #summ_h = exec_request("GET_CALENDAR_DATA", "USER_SKUD", params_d, CONNECTION_STRING)
- summ_h = exec_request("GET_CALENDAR_DATA", "USER_SKUD", params_d)
- print "summ_h = ", summ_h
- # for elem in summ_h:
- # arr = elem
- # dic2[arr[1]] = arr[3]
- list2.append(dic2, summ_h)
- # list2.append(dic2)
- dic1['0'] = list2
- a += 1
- return dic1
- def is_exec():
- try:
- a = p1
- return True
- except NameError:
- return False
- try:
- if __name__ == "__main__":
- os.environ["NLS_LANG"] = "AMERICAN_AMERICA.UTF8"
- CONNECTION_STRING = "itron/itron@itron.t48.ru:1521/XE"
- defaultParams = {}
- mainFunc(defaultParams)
- elif is_exec():
- (call_name, call_type, call_params) = (p1, p2, p3)
- if call_name != "LK_TIMETABLE1":
- raise Exception(u"Недопустимый тип вызова %s " % (call_name))
- if call_type == "TIMETABLE1":
- call_params = json.loads(p3)
- retval = mainFunc(call_params)
- else:
- raise Exception(u"Не поддерживаемая операция %s " % (call_type))
- except Exception as e:
- ConMgr.release_connection()
- traceback.print_exc()
- retval = {'retval': 'error', 'msg': traceback.format_exc(e)}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement