mirror of https://github.com/veops/cmdb.git
112 lines
3.5 KiB
Python
112 lines
3.5 KiB
Python
# -*- coding:utf-8 -*-
|
|
from flask import abort
|
|
from flask import request
|
|
from werkzeug.datastructures import MultiDict
|
|
|
|
from api.lib.common_setting.department import DepartmentCRUD
|
|
from api.lib.common_setting.department import DepartmentTree, DepartmentForm
|
|
from api.lib.common_setting.employee import EmployeeCRUD
|
|
from api.lib.common_setting.resp_format import ErrFormat
|
|
from api.resource import APIView
|
|
|
|
prefix = '/department'
|
|
|
|
|
|
class DepartmentAllView(APIView):
|
|
url_prefix = (f'{prefix}/all',)
|
|
|
|
def get(self):
|
|
is_tree = int(request.args.get('is_tree', 1))
|
|
|
|
res = DepartmentTree().get_all_departments(is_tree)
|
|
return self.jsonify(res)
|
|
|
|
|
|
class DepartmentAllViewWithEmployee(APIView):
|
|
url_prefix = (f'{prefix}/all_with_employee',)
|
|
|
|
def get(self):
|
|
block = int(request.args.get('block', -1))
|
|
try:
|
|
res = DepartmentCRUD.get_all_departments_with_employee(block)
|
|
return self.jsonify(res)
|
|
except Exception as e:
|
|
abort(500, str(e))
|
|
|
|
|
|
class DepartmentView(APIView):
|
|
url_prefix = (f'{prefix}',)
|
|
|
|
def get(self):
|
|
department_parent_id = request.args.get('department_parent_id', 0)
|
|
block = int(request.args.get('block', 0))
|
|
|
|
departments, department_id_list = DepartmentCRUD.get_departments_and_ids(
|
|
department_parent_id, block)
|
|
employees = EmployeeCRUD.get_employees_by_department_id(
|
|
department_parent_id, block)
|
|
|
|
return self.jsonify(departments=departments, employees=employees)
|
|
|
|
def post(self):
|
|
form = DepartmentForm(MultiDict(request.json))
|
|
if not form.validate():
|
|
abort(400, ','.join(['{}: {}'.format(filed, ','.join(msg))
|
|
for filed, msg in form.errors.items()]))
|
|
|
|
data = DepartmentCRUD.add(**form.data)
|
|
|
|
return self.jsonify(data.to_dict())
|
|
|
|
|
|
class DepartmentIDView(APIView):
|
|
url_prefix = (f'{prefix}/<int:_id>',)
|
|
|
|
def get(self, _id):
|
|
form = DepartmentForm(MultiDict(request.json))
|
|
if not form.validate():
|
|
abort(400, ','.join(['{}: {}'.format(filed, ','.join(msg))
|
|
for filed, msg in form.errors.items()]))
|
|
|
|
department_parent_id = form.data.get('department_parent_id')
|
|
if int(_id) == int(department_parent_id):
|
|
abort(400, ErrFormat.parent_department_is_not_self)
|
|
|
|
data = DepartmentCRUD.edit(_id, **form.data)
|
|
return self.jsonify(data.to_dict())
|
|
|
|
def delete(self, _id):
|
|
if _id in [-1, 0]:
|
|
abort(400, ErrFormat.delete_reserved_department_name)
|
|
DepartmentCRUD.delete(_id)
|
|
return self.jsonify(status='success')
|
|
|
|
|
|
class DepartmentParentView(APIView):
|
|
url_prefix = (f'{prefix}/allow_parent',)
|
|
|
|
def get(self):
|
|
department_id = request.args.get('department_id', None)
|
|
if department_id is None:
|
|
abort(400, ErrFormat.department_id_is_required)
|
|
|
|
p_department_list = DepartmentCRUD.get_allow_parent_d_id_by(
|
|
int(department_id))
|
|
return self.jsonify(p_department_list)
|
|
|
|
|
|
class DepartmentSortView(APIView):
|
|
url_prefix = (f'{prefix}/update_sort',)
|
|
|
|
def put(self):
|
|
"""
|
|
only can sort in the same parent
|
|
"""
|
|
department_list = request.json.get('department_list', None)
|
|
if department_list is None:
|
|
abort(400, ErrFormat.department_list_is_required)
|
|
|
|
result = DepartmentCRUD.update_department_sort(department_list)
|
|
|
|
return self.jsonify(result)
|