Advertisement
Guest User

beep boop

a guest
Apr 21st, 2017
745
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.52 KB | None | 0 0
  1. from tkinter import *
  2. from tkinter import messagebox
  3. import tkinter, tkinter.ttk as ttk
  4. import tkinter.scrolledtext as stxt
  5. import wckToolTips as tt
  6. import smtplib
  7. from email.mime.text import MIMEText
  8. from email.mime.multipart import MIMEMultipart
  9. import os, sys, re, copy, time, getpass, pymssql, _mssql, decimal
  10.  
  11. def resource_path(relative_path):
  12. """ Get absolute path to resource, works for dev and for PyInstaller """
  13. try:
  14. # PyInstaller creates a temp folder and stores path in _MEIPASS
  15. base_path = sys._MEIPASS
  16. except Exception:
  17. base_path = os.path.abspath(".")
  18.  
  19. return os.path.join(base_path, relative_path)
  20.  
  21. class Ticketing():
  22. # mail config
  23. mailConf = {'server': "192.168.100.254", 'sender': "alerts@excon.be", 'receiver': "helpdesk@excon.be"}
  24.  
  25. # database config
  26. dbConf = {'server': "192.168.0.4", 'user': "kaseyasupport", 'password': "Kas123eya", 'database': "ksubscribers"}
  27.  
  28. # message variables
  29. ticketVar = {}
  30.  
  31. #3CX supplied variables
  32. try:
  33. ticketVar['callnr'] = sys.argv[1]
  34. internalnrReg = re.compile(r'7\d{2}')
  35. if internalnrReg.search(ticketVar['callnr']) and len(ticketVar['callnr'])==3:
  36. print("Detected internal number, quitting.")
  37. sys.exit()
  38. except IndexError:
  39. ticketVar['callnr'] = ""
  40. try:
  41. ticketVar['callname'] = sys.argv[2]
  42. except IndexError:
  43. ticketVar['callname'] = ""
  44.  
  45.  
  46. ticketVar['assignee'] = str(os.environ['userdnsdomain']).lower() + '\\' + getpass.getuser()
  47.  
  48. def sendTicket():
  49. global mailConf
  50.  
  51. message = """
  52. %(description)s
  53.  
  54. <span style="display:none;">
  55.  
  56. ---------------AutoGeneratedFields---------------<br>
  57. ~organization='%(org)s'<br>
  58. assignee='%(assignee)s'<br>
  59. ~username='%(username)s'<br>
  60. ~useremail='%(useremail)s'<br>
  61. ~machineid=ā€™%(machineid)sā€™<br>
  62. ~machinegroup=ā€™%(machinegr)sā€™<br>
  63. Caller Name: %(callname)s<br>
  64. Caller Number: %(callnr)s<br>
  65. ---------------------------------------------------------------<br>
  66. Generated by SMAC Aide.</span>
  67. """ % Ticketing.ticketVar
  68. print(message)
  69.  
  70. try:
  71. ticketMail = MIMEMultipart()
  72. ticketMail['Subject'] = Ticketing.ticketVar['subject']
  73. ticketMail['From'] = Ticketing.mailConf['sender']
  74. ticketMail['To'] = Ticketing.mailConf['receiver']
  75. body = MIMEText(message, 'html')
  76. ticketMail.attach(body)
  77.  
  78. smtpObj = smtplib.SMTP(Ticketing.mailConf['server'], timeout=5)
  79. smtpObj.sendmail(Ticketing.mailConf['sender'], Ticketing.mailConf['receiver'], ticketMail.as_string())
  80. print ("Successfully sent email")
  81. messagebox.showinfo("Mail Sent", "Mail was successfully sent.")
  82. time.sleep(2)
  83. sys.exit(0)
  84. except:
  85. print ("Error: unable to send email")
  86. messagebox.showerror("Error", "Mail error: Couldn't send out mail.")
  87.  
  88. def getAllOrg():
  89. try:
  90. conn = pymssql.connect(host='192.168.0.4', user='kaseyasupport', password='Kas123eya',
  91. database='ksubscribers', login_timeout=5)
  92. cursor = conn.cursor()
  93. cursor.execute("""SELECT REF
  94. FROM kasadmin.vbo_Organizations_List
  95. WHERE REF <> 'unnamed' AND REF <> 'excon' AND REF <> 'excon-be' AND REF <> 'kserver' AND REF <> 'excon-fr' AND REF <> 'prosense-be' AND REF <> 'prosense-fr' AND REF <> 'kaseyatestaa' AND REF <> 'kaseyatestdd'
  96. ORDER BY REF""")
  97. Ticketing.ticketVar['eORG'] = [item[0] for item in cursor.fetchall()]
  98. except:
  99. print("Couldn't connect to DB.")
  100. Ticketing.ticketVar['eORG'] = ""
  101. messagebox.showerror("Error", "Database error: Couldn't connect to database1.")
  102.  
  103. def getInitialSetup():
  104. try:
  105. if any(word in Ticketing.ticketVar['callname'] for word in ("HISALG", "ZNAPAT")):
  106. Ticketing.ticketVar['eORG'] = "excon.be-" + Ticketing.ticketVar['callname'].split('.')[0].lower()
  107. else:
  108. Ticketing.getAllOrg()
  109. #attempt a connection
  110. conn = pymssql.connect(host='192.168.0.4', user='kaseyasupport', password='Kas123eya',
  111. database='ksubscribers', login_timeout=5)
  112. cursor = conn.cursor()
  113. cursor.execute("SELECT @@VERSION")
  114. except:
  115. print("Couldn't connect to DB.")
  116. Ticketing.ticketVar['eORG'] = ""
  117. Ticketing.ticketVar['RC'] = ""
  118. messagebox.showerror("Error", "Database error: Couldn't connect to database2.\nCheck your connection.")
  119. Ticketing.getAllOrg()
  120. Ticketing.getRC()
  121.  
  122. def getRC():
  123. try:
  124. conn = pymssql.connect(host='192.168.0.4', user='kaseyasupport', password='Kas123eya',
  125. database='ksubscribers', login_timeout=5)
  126. cursor = conn.cursor()
  127. cursor.execute("""SELECT DISTINCT(Machine_GroupID) as machine
  128. FROM KaseyaRemoteControl.Log
  129. join dbo.DenormalizedOrgToMach on KaseyaRemoteControl.Log.agentGuid = dbo.DenormalizedOrgToMach.AgentGuid
  130. join vAgentLabel st on st.agentGuid = KaseyaRemoteControl.Log.agentGuid
  131. WHERE startTime > DATEADD(mi,-120,getdate()) and datediff(mi,startTime,lastActiveTime) > 0 AND adminName LIKE %s
  132. """, str(Ticketing.ticketVar['assignee']).replace("\\", "_"))
  133. Ticketing.ticketVar['RC'] = [item[0] for item in cursor.fetchall()]
  134. except:
  135. print("Couldn't connect to DB.")
  136. messagebox.showerror("Error", "Database error: Couldn't connect to database3.")
  137.  
  138. def getSubmitter():
  139. if Ticketing.ticketVar['useremail']:
  140. try:
  141. conn = pymssql.connect(host='192.168.0.4', user='kaseyasupport', password='Kas123eya',
  142. database='ksubscribers', login_timeout=5)
  143. cursor = conn.cursor()
  144. cursor.execute("""SELECT staffName
  145. FROM dbo.vSystemOrgStaff
  146. WHERE staffEmail LIKE %s""", '%' + str(Ticketing.ticketVar['useremail']) + '%')
  147. Ticketing.ticketVar['username'] = [item[0] for item in cursor.fetchall()]
  148. except:
  149. print("Couldn't connect to DB.")
  150. messagebox.showerror("Error", "Database error: Couldn't connect to database.")
  151. else: messagebox.showinfo("Warning", "No value found for submitter mail.")
  152.  
  153. def getSubmitterMail():
  154. try:
  155. conn = pymssql.connect(host='192.168.0.4', user='kaseyasupport', password='Kas123eya', database='ksubscribers', login_timeout=5)
  156. cursor = conn.cursor()
  157. cursor.execute("""SELECT staffName
  158. FROM dbo.vSystemOrgStaff
  159. WHERE staffEmail LIKE %s""", '%' + str(Ticketing.ticketVar['username']) + '%')
  160. #Ticketing.ticketVar['useremail'] = [item[0] for item in cursor.fetchall()]
  161. return [item[0] for item in cursor.fetchall()]
  162. except:
  163. print("Couldn't connect to DB.")
  164. messagebox.showerror("Error", "Database error: Couldn't connect to database.")
  165.  
  166. # GUI part
  167. class AideWindow(Frame):
  168. def setTicketVar(self):
  169. Ticketing.ticketVar['username'] = self.eSubmitter_val.get()
  170. Ticketing.ticketVar['useremail'] = self.eSubmail_val.get()
  171. Ticketing.ticketVar['org'] = self.eORG_val.get()
  172. Ticketing.ticketVar['subject'] = self.eSubject_val.get()
  173. try: Ticketing.ticketVar['description'] = self.eDesc.get("1.0", END)
  174. except: Ticketing.ticketVar['description'] = ""
  175. Ticketing.ticketVar['machineid'] = self.eRC_val.get().split('.')[0]
  176. try: Ticketing.ticketVar['machinegr'] = self.eRC_val.get().split('.', 1)[1]
  177. except: Ticketing.ticketVar['machinegr'] = ""
  178. Ticketing.ticketVar['callname'] = self.eCallN_val.get()
  179. Ticketing.ticketVar['callnr'] = self.eCallNr_val.get()
  180.  
  181. def resetTicketVar(self):
  182. Ticketing.ticketVar.clear()
  183. #clear all entries
  184.  
  185. def getSubmitterInfo(self, watisdit):
  186. print(watisdit)
  187. #if not (self.eSubmail_val.get()): Ticketing.ticketVar['useremail'] = Ticketing.getSubmitterMail()
  188. Ticketing.ticketVar['useremail'] = Ticketing.getSubmitterMail()
  189. print(Ticketing.ticketVar['useremail'])
  190. #elif not (self.eSubmitter_val.get()): Ticketing.getSubmmitterMail()
  191. #else: messagebox.showinfo("Warning", "Not enough submitter information.\nplease supply either Name or Email.")
  192.  
  193. def setRC(self):
  194. self.setTicketVar()
  195. Ticketing.getRC()
  196.  
  197. def Submit(self):
  198. self.setTicketVar()
  199. Ticketing.sendTicket()
  200.  
  201. def __init__(self, parent=None):
  202. Frame.__init__(self, parent)
  203. # default config
  204. Frame.grid(self)
  205. root.geometry("340x360")
  206. root.resizable(width=False, height=False)
  207. root.wm_title("SMAC Aide")
  208. root.iconbitmap(r'images/smacaide256.ico')
  209. self.grid(padx=5, pady=5)
  210. self.columnconfigure(0, weight=1)
  211. self.rowconfigure(0, weight=1)
  212. # menu config
  213. menubar = Menu(root)
  214. root.config(menu=menubar)
  215.  
  216. if any(word in Ticketing.ticketVar['callname'] for word in ("HISALG", "ZNAPAT")):
  217. Ticketing.ticketVar['eORG'] = "excon.be-" + Ticketing.ticketVar['callname'].split('.')[0].lower()
  218. else:
  219. Ticketing.getAllOrg()
  220. Ticketing.getRC()
  221.  
  222. #some initial variables
  223. #Ticketing.getInitialSetup()
  224.  
  225. # Create a menu button labeled "File" that brings up a menu
  226. filemenu = Menu(menubar, tearoff=0)
  227. menubar.add_cascade(label='Menu', menu=filemenu)
  228. filemenu.add_command(label='Settings', command='')
  229. filemenu.add_command(label='Reset', command=self.resetTicketVar)
  230. filemenu.add_separator()
  231. filemenu.add_command(label='Quit', command=root.destroy)
  232.  
  233. # labels
  234. Label(self, text='Submitter Name: ').grid(row=1, pady=1, sticky=W)
  235. Label(self, text='Submitter Email: ').grid(row=2, pady=1, sticky=W)
  236. Label(self, text='Organisation: ').grid(row=3, pady=1, sticky=W)
  237. Label(self, text='Subject: ').grid(row=4, pady=1, sticky=W)
  238. Label(self, text='Description: ').grid(row=5, pady=1, sticky=W)
  239. Label(self, text='Assignee: ').grid(row=7, pady=1, sticky=W)
  240. Label(self, text='Asset: ').grid(row=8, pady=1, sticky=W)
  241. Label(self, text='Caller Display Name: ').grid(row=9, pady=1, sticky=W)
  242. Label(self, text='Caller Number: ').grid(row=10, pady=1, sticky=W)
  243.  
  244. #icons
  245. self.refresh = PhotoImage(file=resource_path("images/refresh.png"))
  246. self.get = PhotoImage(file=resource_path("images/get.png"))
  247. self.mail = PhotoImage(file=resource_path("images/mail.png"))
  248. self.exit = PhotoImage(file=resource_path("images/exit.png"))
  249.  
  250. # filled in entries variables
  251. self.eSubmitter_val = StringVar(root)
  252. self.eSubmail_val = StringVar(root)
  253. self.eSubject_val = StringVar(root)
  254. self.eORG_val = StringVar(root)
  255. self.eAssignee_val = StringVar(root)
  256. self.eAssignee_val.set(Ticketing.ticketVar['assignee'])
  257. self.eRC_val = StringVar(root)
  258. self.eCallN_val = StringVar(root)
  259. self.eCallN_val.set(Ticketing.ticketVar['callname'])
  260. self.eCallNr_val = StringVar(root)
  261. self.eCallNr_val.set(Ticketing.ticketVar['callnr'])
  262. self.setTicketVar()
  263.  
  264. # entry boxes
  265. #submitter
  266. eSubmitter = ttk.Combobox(self, width=27, textvariable=self.eSubmitter_val, height=4)
  267. eSubmitter.bind("<<ComboboxSelected>>", self.setTicketVar)
  268. eSubmitter.bind("<Return>", self.getSubmitterInfo)
  269. eSubmitter['values'] = Ticketing.ticketVar['username']
  270. eSubmitter.grid(row=1, column=1)
  271. bSubmitter = Button(self, width=16, image=self.get, relief=GROOVE, takefocus=0, command=self.getSubmitterInfo)
  272. bSubmitter.grid(row=1, pady=1, padx=2, column=2)
  273. tt.register(bSubmitter, "Get submitter information")
  274.  
  275. #Submit mail
  276. eSubmail = ttk.Combobox(self, width=27, textvariable=self.eSubmail_val, height=4)
  277. eSubmail.bind("<<ComboboxSelected>>", self.setTicketVar)
  278. eSubmail['values'] = Ticketing.ticketVar['useremail']
  279. eSubmail.grid(row=2, column=1)
  280.  
  281. # organization
  282. eORG = ttk.Combobox(self, width=27, textvariable=self.eORG_val, height=4)
  283. eORG.bind("<<ComboboxSelected>>", self.setTicketVar)
  284. eORG['values'] = Ticketing.ticketVar['eORG']
  285. eORG.grid(row=3, column=1)
  286.  
  287. #subject and description
  288. eSubject = Entry(self, textvariable=self.eSubject_val, width=30).grid(row=4, column=1, sticky='we')
  289. self.eDesc = stxt.ScrolledText(self, wrap=tkinter.WORD, width=25, height=5)
  290. self.eDesc.grid(row=6, columnspan=2, sticky='we')
  291. self.eDesc.bind("Tab", self.tk_focusNext())
  292.  
  293. #assignee and rc
  294. eAssignee = Entry(self, width=30, textvariable=self.eAssignee_val, state=DISABLED).grid(row=7, column=1)
  295. eRC = ttk.Combobox(self, width=27, textvariable=self.eRC_val, height=4)
  296. eRC['values'] = Ticketing.ticketVar['RC']
  297. eRC.grid(row=8, column=1)
  298. bRC = Button(self, width=16, image=self.refresh, relief=GROOVE, takefocus=0, command=self.setRC)
  299. bRC.grid(row=8, pady=1, column=2)
  300. tt.register(bRC, "Refresh recent remote controls")
  301.  
  302. #caller name en number
  303. eCallerName = Entry(self, textvariable=self.eCallN_val, width=30).grid(row=9, column=1)
  304. eCaller = Entry(self, textvariable=self.eCallNr_val, width=30).grid(row=10, column=1)
  305.  
  306. #submit and exit buttons
  307. bSubmit = Button(self, width=100, height=20, image=self.mail, compound="left", text="Submit", command=self.Submit)
  308. bSubmit.grid(row=11, sticky='ws', pady=10)
  309. tt.register(bSubmit, "Send mail to the service desk")
  310. bExit = Button(self, width=100, height=20, image=self.exit, compound="left", text="Exit", command=root.destroy)
  311. bExit.grid(row=11, column=1, columnspan=2, sticky='es', pady=10)
  312. tt.register(bExit, "Exit SMAC Aide")
  313.  
  314. if __name__ == '__main__':
  315. root = Tk()
  316. AideWindow(root)
  317. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement