Advertisement
Guest User

lk

a guest
Jan 29th, 2015
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.96 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import datetime
  3. import traceback
  4. import json
  5.  
  6. import logging
  7. log = logging.getLogger(__name__)
  8. import sys
  9. import os
  10. os.environ["NLS_LANG"] = "AMERICAN_AMERICA.UTF8"
  11. sys.path.append(os.path.join(os.path.expanduser("~"), "bm/config/TimeMonitoring/calendar_views"))
  12.  
  13. from rbs_db.connection import ConnectionManager
  14.  
  15. ###############
  16. from user_skud_configs import exec_request
  17. ###############
  18.  
  19. ##########
  20. try:
  21.     _app_glbls = app_globals
  22. except NameError as e:
  23.     _app_glbls = None
  24.  
  25. ConMgr = ConnectionManager()
  26. CONNECTION_STRING = "itron/itron@itron.t48.ru:1521/XE"
  27. ##########
  28.  
  29.  
  30. #ConMgr = ConnectionManager(None, _app_glbls)
  31. #CONNECTION_STRING = None
  32.  
  33.  
  34. #Rabus.ajax.getJson("LK_TIMETABLE1", "TIMETABLE1", Ext.encode({'timeout': 1}))
  35.  
  36. params_d = {
  37.     "action": "read",
  38.     "sorters": [{
  39.         "property":None,
  40.         "direction":None,
  41.         "sort": None}],
  42.  "page": 1,
  43.  "start": 0,
  44.  "limit": 36,
  45.  "addRecords": False,
  46.  "sort": None,
  47.  "dir": None,
  48.  "MAX_COL": "100",
  49.  "WORK_FD": "10:00",
  50.  "WORK_TD": "19:00",
  51.  "VIEW_FD": "08:00",
  52.  "VIEW_TD": "21:00",
  53.  "TRUNCATE_MIN": "15",
  54.  
  55.  "SHOW_SUMS": "True",
  56.  "ONLY_RESULTS": "False",
  57.  "NEED_DELIMETER": "False",
  58.  "MAIN_LAYOUT": "left_vertical",
  59.  
  60.  "CHILDREN_LAYOUT": "default",
  61.  "PRINT_PARAMETERS": "False",
  62.  "PRINT_CALENDARS": "False",
  63.  "COL_OFFSET": None,
  64.  "CALENDAR_TYPE": [
  65. "1"
  66. "10",
  67. "2",
  68. "3",
  69. "4",
  70. "6",
  71. "8",
  72. "7"],
  73.  
  74. "CALENDAR_TYPE_DISPLAY": [
  75.      u"Рабочее время",
  76.      u"Отгул (в счет отпуска)",
  77.      u"Отпуск",
  78.      u"Болезнь",
  79.      u"За свой счет",
  80.      u"Прогул",
  81.      u"Командировка",
  82.      u"Вып. задач"],
  83. "SUM_CALENDAR_TYPE": [
  84.     "1",
  85.     "10"
  86.     "2",
  87.     "3",
  88.     "4",
  89.     "6",
  90.     "8"
  91.     ],
  92. "SUM_CALENDAR_TYPE_DISPLAY": [
  93.     u"Рабочее время",
  94.      u"Отгул (в счет отпуска)",
  95.      u"Отпуск",
  96.      u"Болезнь",
  97.      u"За свой счет",
  98.      u"Прогул",
  99.      u"Командировка"
  100.     ],
  101. "USERS_PER_SHEET": 0}
  102.  
  103.  
  104. def mainFunc(params):
  105.     conn = ConMgr.get_connection(CONNECTION_STRING)
  106. #    print conn
  107.     cur = conn.cursor()
  108.     login = getLogin()
  109.     user_id = getUserId(login, cur)
  110.     calend_id = getSetting(cur, login)
  111.     dic1 = calcTime(cur, user_id, calend_id, params)
  112.     cur.close()
  113.     ConMgr.release_connection()
  114.     return dic1
  115.  
  116.  
  117. def getLogin():
  118.  
  119.     '''получение логина пользователя'''
  120.  
  121.     try:
  122.         from pylons import session
  123.         login = session.get("user")
  124.         return login
  125.     except TypeError:
  126.         if __name__ == "__main__":
  127.             return "AA"
  128.             return "DPETROVA"
  129.  
  130.  
  131. def getUserId(login, cur):
  132.  
  133.     '''получаем id пользователя'''
  134.     print "login=", login
  135.     res1 = cur.execute("SELECT ID, NAME FROM OBJ WHERE ID=(SELECT OBJ_ID FROM ATTR WHERE VAL=:LOGIN)", {"LOGIN": str(login.upper())})
  136.     for i in res1:
  137.         user_id = i[0]
  138.     print "user_id= ", user_id
  139.     return user_id
  140.  
  141.  
  142. def getSetting(cur, login):
  143.  
  144.     '''получаем список календарей'''
  145.  
  146.     calend_id = []
  147.     try:
  148.         res = cur.execute("SELECT VALUE FROM USER_SETTING WHERE USER_NAME =:LOGIN AND KEY_NAME = 'LK_TIMETABLE' ", {"LOGIN": login})
  149.         for i in res:
  150.             mass = i[0]
  151.         elements = mass.split()
  152.         for i in elements:
  153.             a = int(i)
  154.             calend_id.append(a)
  155.     except UnboundLocalError:
  156.         res = cur.execute("SELECT VALUE FROM USER_SETTING WHERE USER_NAME = 'SYSTEM' AND KEY_NAME = 'LK_TIMETABLE' ")
  157.         for i in res:
  158.             mass = i[0]
  159.         elements = mass.split()
  160.         for i in elements:
  161.             a = int(i)
  162.             calend_id.append(a)
  163.     print calend_id
  164.     return calend_id
  165.  
  166.  
  167. def calcTime(cur, user_id, calend_id, params):
  168.     user_id_t = type(user_id)
  169.     if user_id_t is str or user_id_t is int or user_id_t is unicode:
  170.         user_id = [user_id]
  171.     s_user_id = []
  172.     for i in user_id:
  173.         s_user_id.append(str(i))
  174.     s_calend_id = []
  175.     for i in calend_id:
  176.         s_calend_id.append(str(i))
  177.  
  178.     dic1 = {}
  179.     dic2 = {}
  180.     dic3 = {}
  181.     list2 = []
  182.     a = 0
  183.  
  184.     print "a =", a
  185.     dt = datetime.datetime.today().replace(hour=0,minute=0,second=0, microsecond=0)
  186.     print dt
  187.     ic = dt.timetuple()  # ic[0]-year, ic[1]-month, ic[2]-day, ic[6]-weekday
  188.     if params.get('timeout') == 3:  # период = год
  189.         fd = datetime.datetime(ic[0], 1, 1)
  190.         td = datetime.datetime(ic[0], 12, 31)
  191.         time_x = [u"Янв", u"Фев", u"Мар", u"Апр", u"Май", u"Июн", u"Июл", u"Авг", u"Сент", u"Окт", u"Ноя", u"Дек"]
  192.     elif params.get('timeout') == 2:  # период = месяц
  193.         fd = datetime.datetime(ic[0], ic[1], 1)
  194.         if ic[1] == 12:
  195.             td = datetime.datetime(ic[0] + 1, 1, 1) - datetime.timedelta(seconds=1)
  196.         else:
  197.             td = datetime.datetime(ic[0], ic[1] + 1, 1) - datetime.timedelta(seconds=1)
  198.         time_x = [u"1нед", u"2нед", u"3нед", u"4нед", u"5нед", u"6нед"]
  199.     else:  # период = неделя
  200.         fd = dt - datetime.timedelta(days=(ic[6]))
  201.         td = dt + datetime.timedelta(days=(6 - ic[6]),hours=23,minutes=59,seconds=59)
  202.         time_x = [u"Пн", u"Вт", u"Ср", u"Чт", u"Пт", u"Сб", u"Вс"]
  203.  
  204.  
  205.  
  206. #цикл по элементам массива time_x
  207.     for l in time_x:
  208.         if params.get('timeout') == 3:  # если период-год, получаем инфо по каждому месяцу
  209.             if a == 11:  # 12ый месяц
  210.                 fd1 = datetime.datetime(ic[0], a + 1, 1)
  211.                 td1 = datetime.datetime(ic[0] + 1, 1, 1) - datetime.timedelta(seconds=1)
  212.             else:
  213.                 fd1 = datetime.datetime(ic[0], a + 1, 1)
  214.                 td1 = datetime.datetime(ic[0], a + 2, 1) - datetime.timedelta(seconds=1)
  215.  
  216.         elif params.get('timeout') == 2:  # если период-месяц, получаем инфо по каждой неделе
  217.             fd1 = fd + datetime.timedelta(days=a * 7)
  218.             td1 = fd1 + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59)
  219.  
  220.         else:  # если период-неделя, то получаем инфо по каждому дню
  221.             fd1 = fd + datetime.timedelta(days=a)
  222.             td1 = fd + datetime.timedelta(days=a, hours=23, minutes=59, seconds=59)
  223.  
  224.  
  225.  
  226. #селект для получения соответствия между {"имя календаря" : цвет}
  227.         res = cur.execute("""
  228.        SELECT D.name, D.color FROM CALENDAR C, dic_data D
  229.        WHERE (DIC_ID = 57 AND D.CODE IN (%s)) and
  230.        C.OBJ_ID = (%s) GROUP BY D.name, D.color""" %
  231.         (','.join(s_calend_id), ','.join(s_user_id)))
  232.         dic2 = {}  # обнуляем словарь dic2
  233.         dic2['name'] = l  # добавляем элемент списка time_x первым элементом dic2
  234.         dic2['num'] = a
  235.  
  236.  
  237. #цикл для получения результатов селекта и записи их в словари
  238.         for r in res:
  239.             calend_name = r[0]
  240.             color = r[1]
  241.             dic3[calend_name] = color  # не чистим
  242.         dic1['1'] = dic3
  243.  
  244. #вызов и разбор результата полученного от ф-ии exec_request
  245.  
  246.         params_d["USER_ID"] = user_id
  247.         params_d["FD"] = fd1.strftime("%d.%m.%Y %H:%M:%S")
  248.         params_d["TD"] = td1.strftime("%d.%m.%Y %H:%M:%S")
  249.         print "params_d = ", params_d
  250.  
  251.  
  252.         #summ_h = exec_request("GET_CALENDAR_DATA", "USER_SKUD", params_d, CONNECTION_STRING)
  253.         summ_h = exec_request("GET_CALENDAR_DATA", "USER_SKUD", params_d)
  254.         print "summ_h = ", summ_h
  255. #        for elem in summ_h:
  256. #            arr = elem
  257. #            dic2[arr[1]] = arr[3]
  258.         list2.append(dic2, summ_h)
  259. #        list2.append(dic2)
  260.         dic1['0'] = list2
  261.  
  262.         a += 1
  263.     return dic1
  264.  
  265.  
  266. def is_exec():
  267.     try:
  268.         a = p1
  269.         return True
  270.     except NameError:
  271.         return False
  272.  
  273.  
  274. try:
  275.     if __name__ == "__main__":
  276.         os.environ["NLS_LANG"] = "AMERICAN_AMERICA.UTF8"
  277.         CONNECTION_STRING = "itron/itron@itron.t48.ru:1521/XE"
  278.         defaultParams = {}
  279.         mainFunc(defaultParams)
  280.     elif is_exec():
  281.         (call_name, call_type, call_params) = (p1, p2, p3)
  282.         if call_name != "LK_TIMETABLE1":
  283.             raise Exception(u"Недопустимый тип вызова %s " % (call_name))
  284.  
  285.         if call_type == "TIMETABLE1":
  286.             call_params = json.loads(p3)
  287.             retval = mainFunc(call_params)
  288.         else:
  289.             raise Exception(u"Не поддерживаемая операция %s " % (call_type))
  290. except Exception as e:
  291.     ConMgr.release_connection()
  292.     traceback.print_exc()
  293.     retval = {'retval': 'error', 'msg': traceback.format_exc(e)}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement