· 2 years ago · Feb 04, 2023, 06:50 PM
1from queue import PriorityQueue
2import time
3import sys
4from tokenize import group
5import requests
6from selenium import webdriver
7from selenium.webdriver.firefox.options import Options
8from datetime import datetime as dt
9from selenium.webdriver.common.by import By
10from selenium.webdriver.support import expected_conditions as EC
11from selenium.webdriver.support.ui import WebDriverWait
12from selenium.webdriver.common.proxy import Proxy, ProxyType
13from selenium.webdriver.common.action_chains import ActionChains
14from selenium.webdriver.support.ui import Select
15import traceback
16import os
17import urllib3
18urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
19from datetime import datetime
20import time
21
22class Broadcast:
23 def __init__(self, desired_dpi=4.0):
24 prox = Proxy()
25 prox.proxy_type = ProxyType.MANUAL
26 options = Options()
27 options.add_argument('--headless')
28 firefox_profile = webdriver.FirefoxProfile()
29 firefox_profile.accept_untrusted_certs = True
30 # firefox_profile.set_preference("network.proxy.type", 2)
31 # firefox_profile.set_preference("network.proxy.autoconfig_url", "http://wpad.telkomsel.co.id/wpad.dat")
32 firefox_profile.set_preference("layout.css.devPixelsPerPx", str(desired_dpi))
33 self._driver = webdriver.Firefox(options=options)
34 # firefox_profile = webdriver.FirefoxProfile()
35 # firefox_profile.accept_untrusted_certs = True
36 # firefox_profile.set_preference("layout.css.devPixelsPerPx", str(desired_dpi))
37 # self._driver = webdriver.Firefox(options=options, firefox_profile=firefox_profile)
38
39 def keitaRequests(self, url, methods='get', data={}, headers={}):
40 try:
41 methods = methods.strip().lower()
42 req = False
43 if methods == 'get':
44 req = requests.get(url, verify=False, headers=headers)
45 elif methods == 'post':
46 req = requests.post(url, verify=False, data=data)
47 if req != False and req is not None:
48 result = req.json()
49 else:
50 result = False
51 return result
52 except:
53 print("Error while making request to {}".format(url))
54 return False
55
56 def keitaCapture(self):
57 secret_key = 'm5GbFsy4G0umsf4='
58 url_login = 'https://10.35.105.96/resources/api_keita/api_login.php'
59 methods = 'post'
60 parameters = {
61 'username': '22190825',
62 'password': 'M4h1ruch4n23'
63 }
64 login = self.keitaRequests(url_login, methods=methods, data=parameters, headers={
65 'secretkey': secret_key
66 })
67 if login != False:
68 token = login['token']
69 url_project_board = 'https://10.35.105.96/resources/api_keita/project_board.php'
70 methods = 'post'
71 parameters = {
72 'action': 'get',
73 'id_regional': 6,
74 'id_sub_dept': 1
75 }
76 project_board = self.keitaRequests(url_project_board, methods=methods, data=parameters, headers={
77 'token': token,
78 'secretkey': secret_key
79 })
80 if project_board != False:
81 data_project = []
82 current_month = datetime.datetime.now().month
83 for project in project_board:
84 developers = []
85 data_project.append({
86 'pName': project['name'],
87 'pID': project['id'],
88 'pParent': 0,
89 "pGroup": 1,
90 "pRes": "",
91 "pComp": None
92 })
93 url_gantt = 'https://10.35.105.96/resources/api_keita/gantt_chart_project.php'
94 methods = 'post'
95 headers = {
96 'token': token,
97 'secretkey': secret_key
98 }
99 parameters = {
100 'id_project': project['id']
101 }
102 last_task_tms = 0
103 last_task_month = 0
104 gantt = self.keitaRequests(url_gantt, methods=methods, data=parameters, headers=headers)
105 if gantt != False:
106 # card_tmp = []
107 now = datetime.now()
108 # tms_now = now.timetuple()
109 total_sub_task = 0
110 sub_task_done = 0
111 for sub_index, sub in enumerate(gantt['sub_activity']):
112 t = time.mktime(datetime.datetime.strptime(sub['date'], '%Y-%m-%d').timetuple())
113 # Get all developers in card
114 if sub['developer'] not in developers:
115 developers.append(sub['developer'])
116 if t > last_task_tms:
117 if sub['progress'] == 100:
118 sub_task_done += 1
119 total_sub_task += 1
120 last_task_tms = t
121 last_task_month = datetime.datetime.strptime(sub['date'], '%Y-%m-%d').month
122 if last_task_month >= current_month:
123 completion_class = 'gtaskgreen' if sub_task_done == total_sub_task else 'gtaskred'
124 status_completion = 'DONE' if sub_task_done == total_sub_task else 'DOING'
125 data_project.append({
126 'pName': sub['activity_name'],
127 'pID': sub['id_activity'],
128 'pParent': project['id'],
129 "pGroup": 0,
130 "pRes": ", ".join(developers),
131 "pComp": (sub_task_done / total_sub_task) * 100,
132 "pClass": completion_class,
133 'pStart': project['start_date'],
134 'pEnd': project['end_date'],
135 'status': status_completion
136 })
137 print(data_project)
138 return True
139 print("Failed to make gantt chart")
140
141 def exit(self):
142 self._driver.close()
143 self._driver.quit()
144
145brd = Broadcast()
146brd.keitaCapture()
147# brd.exit()