depts.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. from flask import jsonify, request
  2. from flask_login import current_user
  3. from flask_restful import Resource # type: ignore
  4. from werkzeug.exceptions import NotFound
  5. from controllers.console import api
  6. from controllers.console.wraps import (
  7. account_initialization_required,
  8. setup_required,
  9. )
  10. from libs.login import login_required
  11. from services.dept_service import DeptService
  12. class DeptAccountListApi(Resource):
  13. @setup_required
  14. @login_required
  15. @account_initialization_required
  16. def get(self):
  17. edit = request.args.get("edit", type=str)
  18. if edit is None or edit == "":
  19. type = 0
  20. dept_account_list = DeptService.get_dept_account_list(type)
  21. else:
  22. type = 1
  23. dept_account_list = DeptService.get_dept_account_list(type)
  24. response = {
  25. "result": "success",
  26. "data": dept_account_list,
  27. }
  28. return response, 200
  29. @setup_required
  30. @login_required
  31. @account_initialization_required
  32. def post(self):
  33. data = request.get_json()
  34. if not data:
  35. raise NotFound("Invalid JSON")
  36. dept_account_list = data.get("account_ids")
  37. dept_id = data.get("dept_id")
  38. DeptService.save_dept_account_list(dept_id, dept_account_list)
  39. response = {
  40. "result": "success",
  41. }
  42. return response, 200
  43. @setup_required
  44. @login_required
  45. @account_initialization_required
  46. def delete(self):
  47. data = request.get_json()
  48. if not data:
  49. raise NotFound("Invalid JSON")
  50. dept_account_list = data.get("account_ids")
  51. dept_id = data.get("dept_id")
  52. DeptService.delete_dept_account_list(dept_id, dept_account_list)
  53. response = {
  54. "result": "success",
  55. }
  56. return response, 200
  57. class DeptAccountApi(Resource):
  58. @setup_required
  59. @login_required
  60. @account_initialization_required
  61. def get(self, dept_id):
  62. dept_account = DeptService.get_dept_account(dept_id)
  63. response = {
  64. "result": "success",
  65. "data": dept_account,
  66. }
  67. return response, 200
  68. class DeptListApi(Resource):
  69. @setup_required
  70. @login_required
  71. @account_initialization_required
  72. def get(self):
  73. dept_list = DeptService.get_dept_list()
  74. response = {
  75. "result": "success",
  76. "data": dept_list,
  77. }
  78. return response, 200
  79. @setup_required
  80. @login_required
  81. @account_initialization_required
  82. def post(self):
  83. data = request.get_json()
  84. if not data:
  85. return jsonify({"error": "Invalid JSON"}), 400
  86. if not data:
  87. raise NotFound("Invalid JSON")
  88. dept_name = data.get("dept_name")
  89. dept_id = data.get("dept_id")
  90. parent_dept_id = data.get("parent_dept_id")
  91. dept_by_name = DeptService.get_dept_by_name(dept_name)
  92. if dept_id not in {None, ""}:
  93. dept_by_id = DeptService.get_dept_by_id(dept_id)
  94. if dept_by_id != None:
  95. if dept_by_id.dept_name != dept_name or dept_by_id.parent_dept_id != parent_dept_id:
  96. # 修改
  97. if dept_by_name != None:
  98. if dept_by_name.dept_id == dept_by_id.dept_id and dept_by_id.parent_dept_id != parent_dept_id:
  99. DeptService.update_dept(dept_id, dept_name, current_user, parent_dept_id)
  100. else:
  101. DeptService.update_dept(dept_id, dept_name, current_user, parent_dept_id)
  102. else:
  103. raise NotFound("Dept not found.")
  104. else:
  105. if dept_by_name != None:
  106. raise ValueError("dept_name cannot repeat.")
  107. else:
  108. DeptService.save_dept(dept_name, current_user, parent_dept_id)
  109. return {"result": "success"}, 204
  110. class DeptApi(Resource):
  111. @setup_required
  112. @login_required
  113. @account_initialization_required
  114. def get(self, dept_id):
  115. dept_id = str(dept_id)
  116. dept = DeptService.get_dept_by_id(dept_id)
  117. response = {
  118. "result": "success",
  119. "data": dept,
  120. }
  121. return response, 200
  122. @setup_required
  123. @login_required
  124. @account_initialization_required
  125. def delete(self, dept_id):
  126. dept_id = str(dept_id)
  127. dept = DeptService.get_dept_by_id(dept_id)
  128. if dept is None:
  129. raise NotFound("Dept not found.")
  130. DeptService.delete_dept(dept)
  131. return {"result": "success"}, 204
  132. api.add_resource(DeptAccountListApi, "/dept/dept-accounts")
  133. api.add_resource(DeptAccountApi, "/dept/dept-accounts/<uuid:dept_id>")
  134. api.add_resource(DeptListApi, "/depts")
  135. api.add_resource(DeptApi, "/depts/<uuid:dept_id>")