dept_service.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import datetime
  2. from sqlalchemy import or_
  3. from extensions.ext_database import db
  4. from models.account import Account
  5. from models.dept import Dept
  6. from services.account_service import AccountService
  7. class DeptService:
  8. @staticmethod
  9. def get_dept_account_list():
  10. dept_list = []
  11. account_list = []
  12. dept_results = db.session.query(Dept.dept_id, Dept.dept_name).filter(Dept.status == "active").all()
  13. account_results = (
  14. db.session.query(Account.dept_id, Account.id, Account.email).filter(Account.status == "active").all()
  15. )
  16. for dept_row in dept_results:
  17. for account_row in account_results:
  18. if account_row.dept_id == dept_row.dept_id:
  19. account_list.append({"account_id": account_row.id, "email": account_row.email})
  20. dept_list.append({"dept_id": dept_row.dept_id, "dept_name": dept_row.dept_name, "accounts": account_list})
  21. return dept_list
  22. @staticmethod
  23. def get_dept_account(dept_id):
  24. dept_account = []
  25. account_results = (
  26. db.session.query(Account.dept_id, Account.id, Account.email)
  27. .filter(Account.status == "active", Account.dept_id == str(dept_id))
  28. .all()
  29. )
  30. for row in account_results:
  31. dept_account.append({"account_id": row.id, "email": row.email})
  32. return dept_account
  33. @staticmethod
  34. def get_dept_list():
  35. dept_list = []
  36. condition = or_(Dept.parent_dept_id == None, Dept.parent_dept_id == "")
  37. dept_results = db.session.query(Dept).filter(Dept.status == "active", condition).all()
  38. print(str(dept_results))
  39. for dept_row in dept_results:
  40. children_dept_list = []
  41. children_depts = (
  42. db.session.query(Dept)
  43. .filter(Dept.status == "active", Dept.parent_dept_id == dept_row.dept_id)
  44. .all()
  45. )
  46. for children_dept in children_depts:
  47. children_dept_list.append(
  48. {
  49. "dept_id": children_dept.dept_id,
  50. "dept_name": children_dept.dept_name,
  51. "parent_dept_id": children_dept.parent_dept_id,
  52. }
  53. )
  54. dept_list.append(
  55. {
  56. "parent_dept_id": "",
  57. "dept_id": dept_row.dept_id,
  58. "dept_name": dept_row.dept_name,
  59. "children": children_dept_list,
  60. }
  61. )
  62. return dept_list
  63. @staticmethod
  64. def get_dept_by_name(dept_name):
  65. dept = db.session.query(Dept).filter(Dept.status == "active", Dept.dept_name == dept_name).first()
  66. return dept
  67. @staticmethod
  68. def get_dept_by_id_name(dept_id, dept_name):
  69. dept = (
  70. db.session.query(Dept)
  71. .filter(Dept.status == "active", Dept.dept_name == dept_name, Dept.dept_id == dept_id)
  72. .first()
  73. )
  74. return dept
  75. @staticmethod
  76. def get_dept_by_id(dept_id):
  77. dept = db.session.query(Dept).filter(Dept.status == "active", Dept.dept_id == dept_id).first()
  78. return dept
  79. @staticmethod
  80. def save_dept(dept_name, current_user, parent_dept_id):
  81. dept = Dept(
  82. dept_name=dept_name,
  83. status="active",
  84. created_at=datetime.datetime.now(),
  85. created_by=current_user.id,
  86. parent_dept_id=parent_dept_id,
  87. )
  88. db.session.add(dept)
  89. db.session.flush()
  90. db.session.commit()
  91. @staticmethod
  92. def update_dept(dept_id, dept_name, current_user, parent_dept_id):
  93. sql = (
  94. db.session.query(Dept)
  95. .filter(Dept.dept_id == dept_id)
  96. .update(
  97. {
  98. "updated_by": current_user.id,
  99. "updated_at": datetime.datetime.now(),
  100. "dept_name": dept_name,
  101. "parent_dept_id": parent_dept_id,
  102. }
  103. )
  104. )
  105. print(str(sql))
  106. db.session.commit()
  107. @staticmethod
  108. def delete_dept(dept):
  109. AccountService.delete_account_dept(dept)
  110. db.session.delete(dept)
  111. db.session.commit()
  112. @staticmethod
  113. def save_dept_account_list(dept_id, dept_account_list):
  114. for dept_account in dept_account_list:
  115. account_id = dept_account.get("account_id")
  116. AccountService.update_account_dept(dept_id, account_id)
  117. @staticmethod
  118. def delete_dept_account_list(dept_id, dept_account_list):
  119. for dept_account in dept_account_list:
  120. account_id = dept_account.get("account_id")
  121. AccountService.update_account_dept("", account_id)