jobcheck.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import requests
  2. import datetime
  3. from dateutil import parser
  4. import gspread
  5. from oauth2client.service_account import ServiceAccountCredentials
  6. import time
  7. import smtplib
  8. from userdata import *
  9. from email.message import EmailMessage
  10. # drop this at PUBLIC2
  11. # TASK LIST HERE
  12. # https://docs.google.com/spreadsheets/d/153w046qHhpnZTYU7FJ-S2xyGIH_BXbycLYfLI2fFsZc/edit#gid=0
  13. scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
  14. creds = ServiceAccountCredentials.from_json_keyfile_name('choozmointernal-2e314f3d4e12.json', scope)
  15. client = gspread.authorize(creds)
  16. message = "提醒近期預定執行的作業如下:\n\n"
  17. message2 = "提醒近期需完成的作業如下:\n\n"
  18. def notify_group(msg):
  19. gid='WekCRfnAirSiSxALiD6gcm0B56EejsoK89zFbIaiZQD'
  20. headers = {"Authorization": "Bearer " + gid,"Content-Type": "application/x-www-form-urlencoded"}
  21. r = requests.post("https://notify-api.line.me/api/notify",headers=headers, params={"message": msg})
  22. def send_line(messages):
  23. for message in messages:
  24. msg = [message[i:i+1000] for i in range(0, len(message), 1000)]
  25. for m in msg:
  26. notify_group(m)
  27. print(m)
  28. def send_email(emails, content, has_overdue):
  29. server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
  30. server.ehlo()
  31. server.login(gmail_username, gmail_password)
  32. for name in content:
  33. msg = EmailMessage()
  34. msg['Subject'] = '執行表單過期作業通知' + str(datetime.date.today())
  35. msg['From'] = "service@choozmo.com"
  36. msg['To'] = emails[name]
  37. if has_overdue[name] == 1:
  38. msg.set_content(content[name])
  39. else:
  40. msg.set_content(name + "您好,\n\n您目前沒有過期的作業。\n更新執行表單請至 https://cmm.ai/pm ,謝謝您。\n\n")
  41. print ('Sending email to' + msg['To'])
  42. #server.send_message(msg)
  43. print ('Email sent to' + msg['To'])
  44. server.close()
  45. sheet = client.open('ChoozMo 專案執行表單_20220720')
  46. sheet_instance = sheet.get_worksheet(0)
  47. records_data = sheet_instance.get_all_records()
  48. #print(records_data[0])
  49. emails = {"Jared": "jared@choozmo.com", "Morrison": "morrison@choozmo.com", "Ginia": "ginia@choozmo.com", "Doris": "doris@choozmo.com"}
  50. overdue_email_content = {}
  51. has_overdue = {}
  52. for e in emails.keys():
  53. overdue_email_content[e] = e + "您好,\n\n提醒已過期的作業如下,請務必提醒相關同仁完成作業。\n更新執行表單請至 https://cmm.ai/pm ,謝謝您。\n\n過期作業如下:\n\n"
  54. has_overdue[e] = 0
  55. for data in records_data:
  56. try:
  57. print(parser.parse(data["起始日"]), parser.parse(data["完成日"]))
  58. deltastart = (parser.parse(data["起始日"]).date()-datetime.date.today()).days
  59. deltaend = (parser.parse(data["完成日"]).date()-datetime.date.today()).days
  60. print(deltastart, deltaend)
  61. info = ""
  62. if(deltastart <= 7 and data["完成度"] == "預定執行"):
  63. info += "專案:" + data["專案"] + " / " + data["專案項目"] + "\n"
  64. info += "作業:" + data["執行項目"] + "\n"
  65. info += "執行人員:" + data["指派對象"] + "\n"
  66. info += "PM:" + data["PM"] + "\n"
  67. info += "執行期間:" + data["起始日"] + "-" + data["完成日"]
  68. if(deltastart>0):
  69. info += " (尚有"+ str(deltastart) + "天)\n\n"
  70. elif(deltastart==0):
  71. info += " (當天開始執行)\n\n"
  72. else:
  73. info += " (過期"+ str(deltastart).replace('-','') + "天)\n\n"
  74. overdue_email_content[data["PM"]] += info
  75. has_overdue[data["PM"]] = 1
  76. if data["PM"] != "Jared": #sometimes Jared is the PM
  77. overdue_email_content["Jared"] += info
  78. has_overdue["Jared"] = 1
  79. message += info
  80. elif(deltaend <= 7 and data["完成度"] == "執行中"):
  81. info += "專案:" + data["專案"] + " / " + data["專案項目"] + "\n"
  82. info += "作業:" + data["執行項目"] + "\n"
  83. info += "執行人員:" + data["指派對象"] + "\n"
  84. info += "PM:" + data["PM"] + "\n"
  85. info += "完成日:" + data["完成日"]
  86. if(deltaend>0):
  87. info += " (尚有"+ str(deltaend) + "天)\n\n"
  88. elif(deltaend==0):
  89. info += " (當天完成)\n\n"
  90. else:
  91. info += " (過期"+ str(deltaend).replace('-','') + "天)\n\n"
  92. overdue_email_content[data["PM"]] += info
  93. if data["PM"] != "Jared": #sometimes Jared is the PM
  94. overdue_email_content["Jared"] += info
  95. message2 += info
  96. except:
  97. print("PASS")
  98. message += "更新執行表單請至 https://cmm.ai/pm"
  99. message2 += "更新執行表單請至 https://cmm.ai/pm"
  100. messages = []
  101. messages.append(message)
  102. messages.append(message2)
  103. print(has_overdue)
  104. #send_line(messages) #annotated to prevent unintentional trigger
  105. #send_email(emails, overdue_email_content, has_overdue)
  106. '''notify_group(message)
  107. time.sleep(5)
  108. notify_group(message2)'''