Advertisement
Guest User

lk

a guest
Jan 29th, 2015
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.07 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(days=1)
  196. td = datetime.datetime(ic[0] + 1, 1, 1) - datetime.timedelta(seconds=1)
  197. else:
  198. # td = datetime.datetime(ic[0], ic[1] + 1, 1) - datetime.timedelta(days=1)
  199. td = datetime.datetime(ic[0], ic[1] + 1, 1) - datetime.timedelta(seconds=1)
  200. time_x = [u"1нед", u"2нед", u"3нед", u"4нед", u"5нед", u"6нед"]
  201. else: # период = неделя
  202. fd = dt - datetime.timedelta(days=(ic[6]))
  203. # td = dt + datetime.timedelta(days=(6 - ic[6]))
  204. td = dt + datetime.timedelta(days=(6 - ic[6]),hours=23,minutes=59,seconds=59)
  205. time_x = [u"Пн", u"Вт", u"Ср", u"Чт", u"Пт", u"Сб", u"Вс"]
  206.  
  207.  
  208.  
  209. #цикл по элементам массива time_x
  210. for l in time_x:
  211. if params.get('timeout') == 3: # если период-год, получаем инфо по каждому месяцу
  212. if a == 11: # 12ый месяц
  213. fd1 = datetime.datetime(ic[0], a + 1, 1)
  214. td1 = datetime.datetime(ic[0] + 1, 1, 1) - datetime.timedelta(seconds=1)
  215. else:
  216. fd1 = datetime.datetime(ic[0], a + 1, 1)
  217. td1 = datetime.datetime(ic[0], a + 2, 1) - datetime.timedelta(seconds=1)
  218.  
  219. elif params.get('timeout') == 2: # если период-месяц, получаем инфо по каждой неделе
  220. fd1 = fd + datetime.timedelta(days=a * 7)
  221. td1 = fd1 + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59)
  222.  
  223. else: # если период-неделя, то получаем инфо по каждому дню
  224. fd1 = fd + datetime.timedelta(days=a)
  225. td1 = fd + datetime.timedelta(days=a, hours=23, minutes=59, seconds=59)
  226.  
  227.  
  228.  
  229. #селект для получения соответствия между {"имя календаря" : цвет}
  230. res = cur.execute("""
  231. SELECT D.name, D.color FROM CALENDAR C, dic_data D
  232. WHERE (DIC_ID = 57 AND D.CODE IN (%s)) and
  233. C.OBJ_ID = (%s) GROUP BY D.name, D.color""" %
  234. (','.join(s_calend_id), ','.join(s_user_id)))
  235. dic2 = {} # обнуляем словарь dic2
  236. dic2['name'] = l # добавляем элемент списка time_x первым элементом dic2
  237. dic2['num'] = a
  238.  
  239.  
  240. #цикл для получения результатов селекта и записи их в словари
  241. for r in res:
  242. calend_name = r[0]
  243. color = r[1]
  244. dic3[calend_name] = color # не чистим
  245. dic1['1'] = dic3
  246.  
  247. #вызов и разбор результата полученного от ф-ии exec_request
  248.  
  249. params_d["USER_ID"] = user_id
  250. params_d["FD"] = fd1.strftime("%d.%m.%Y %H:%M:%S")
  251. params_d["TD"] = td1.strftime("%d.%m.%Y %H:%M:%S")
  252. print "params_d = ", params_d
  253. summ_h = exec_request("GET_CALENDAR_DATA", "USER_SKUD", params_d, CONNECTION_STRING)
  254. print "summ_h = ", summ_h
  255. for elem in summ_h:
  256. arr = elem
  257. dic2[arr[1]] = arr[3]
  258.  
  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