Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

113 rindas
3.9KB

  1. import web
  2. import models.project
  3. from views.utils import get_nav_bar, csrf_protected
  4. from views.forms import project_form
  5. import os
  6. from time import sleep
  7. # Get html templates
  8. render = web.template.render('templates/')
  9. class Project:
  10. def GET(self):
  11. """
  12. Show info about a single project
  13. :return: Project info page
  14. """
  15. # Get session
  16. session = web.ctx.session
  17. # Get navbar
  18. nav = get_nav_bar(session)
  19. data = web.input(projectid=0)
  20. try:
  21. permissions = models.project.get_user_permissions(str(session.userid), data.projectid)
  22. except:
  23. permissions = [0,0,0]
  24. categories = models.project.get_categories()
  25. if data.projectid:
  26. project = models.project.get_project_by_id(data.projectid)
  27. tasks = models.project.get_tasks_by_project_id(data.projectid)
  28. else:
  29. project = [[]]
  30. tasks = [[]]
  31. render = web.template.render('templates/', globals={'get_task_files':models.project.get_task_files, 'session':session})
  32. return render.project(nav, project_form, project, tasks,permissions, categories)
  33. @csrf_protected
  34. def POST(self):
  35. # Get session
  36. session = web.ctx.session
  37. data = web.input(myfile={}, deliver=None, accepted=None, declined=None, projectid=0)
  38. fileitem = data['myfile']
  39. permissions = models.project.get_user_permissions(str(session.userid), data.projectid)
  40. categories = models.project.get_categories()
  41. tasks = models.project.get_tasks_by_project_id(data.projectid)
  42. # Upload file (if present)
  43. try:
  44. if fileitem.filename:
  45. # Check if user has write permission
  46. if not permissions[1]:
  47. raise web.seeother(('/project?projectid=' + data.projectid))
  48. fn = fileitem.filename
  49. # Create the project directory if it doesnt exist
  50. path = 'static/project' + data.projectid
  51. if not os.path.isdir(path):
  52. command = 'mkdir ' + path
  53. os.popen(command)
  54. sleep(0.2)
  55. path = path + '/task' + data.taskid
  56. if not os.path.isdir(path):
  57. command = 'mkdir ' + path
  58. os.popen(command)
  59. sleep(0.2)
  60. open(path + '/' + fn, 'wb').write(fileitem.file.read())
  61. models.project.set_task_file(data.taskid, (path + "/" + fn))
  62. except:
  63. # Throws exception if no file present
  64. pass
  65. # Determine status of the targeted task
  66. all_tasks_accepted = True
  67. task_waiting = False
  68. task_delivered = False
  69. for task in tasks:
  70. if task[0] == int(data.taskid):
  71. if(task[5] == "waiting for delivery" or task[5] == "declined"):
  72. task_waiting = True
  73. if(task[5] == 'accepted'):
  74. task_delivered = True
  75. # Deliver task
  76. if data.deliver and not task_delivered:
  77. models.project.update_task_status(data.taskid, "delivered")
  78. # Accept task delivery
  79. elif data.accepted:
  80. models.project.update_task_status(data.taskid, "accepted")
  81. # If all tasks are accepted then update project status to finished
  82. all_tasks_accepted = True
  83. tasks = models.project.get_tasks_by_project_id(data.projectid)
  84. for task in tasks:
  85. if task[5] != "accepted":
  86. all_tasks_accepted = False
  87. if all_tasks_accepted:
  88. models.project.update_project_status(str(data.projectid), "finished")
  89. # Decline task delivery
  90. elif data.declined:
  91. models.project.update_task_status(data.taskid, "declined")
  92. raise web.seeother(('/project?projectid=' + data.projectid))