def api_department_detail(request, dept_no): try: department = Department.objects.get(dept_no=dept_no) if request.method == 'GET': return JsonResponse( serialize_model(department, exclude=['employees'])) elif request.method == 'PUT': try: query = json.loads(request.body.decode()) dept_name = query.get('dept_name') dept = dict(dept_name=dept_name) form = DepartmentUpdateForm(dept) if form.is_valid(): department.dept_name = dept['dept_name'] department.save() return JsonResponse( serialize_model(department, exclude=['employees'])) else: return JsonResponse({'error': 'validate error'}, status=400) except json.decoder.JSONDecodeError: return JsonResponse({'error': 'json decode error'}, status=400) elif request.method == 'DELETE': department.delete() return JsonResponse({'msg': 'delete success'}, status=200) except Department.DoesNotExist: return JsonResponse({'error': 'not found'}, status=404)
def api_employees_salaries_update(request, emp_no, salary_id): try: emp = Employee.objects.get(pk=emp_no) salary = Salary.objects.get(pk=salary_id) if request.method == 'PATCH': try: data = json.loads(request.body.decode()) form = SalaryForm(data) if form.is_valid(): try: data = form.cleaned_data for key, value in data.items(): if value: setattr(salary, key, value) salary.save(force_update=True) return JsonResponse(serialize_model(salary)) except IntegrityError: return JsonResponse(errors.IntegrityError, status=400) else: return JsonResponse(errors.ValidateError, status=400) except json.decoder.JSONDecodeError: return JsonResponse(errors.JsonDecodeError, status=400) elif request.method == 'DELETE': salary.delete() return HttpResponse() except (Employee.DoesNotExist, Salary.DoesNotExist): return JsonResponse(errors.NotFoundError, status=404)
def post(self, request): form = DepartmentForm(request.POST) if form.is_valid(): try: cleaned_data = form.cleaned_data dept = Department(**cleaned_data) dept.save(force_insert=True) return JsonResponse(serialize_model(dept)) except db.IntegrityError: return errors.IntegrityError() else: return errors.ValidateError(form.errors.as_json())
def api_employees_salaries_list(request, emp_no): try: emp = Employee.objects.get(pk=emp_no) if request.method == 'POST': form = SalaryForm(request.POST) if form.is_valid(): data = form.cleaned_data try: salary = Salary.objects.create( employee=emp, salary=data.get('salary'), from_date=data.get('from_date'), to_date=data.get('to_date'), ) return JsonResponse(serialize_model(salary), status=200) except IntegrityError: return JsonResponse(errors.IntegrityError, status=400) else: return JsonResponse(errors.ValidateError, status=400) elif request.method == 'GET': form = SalaryListPramsForm(request.GET) if form.is_valid(): data = form.cleaned_data qs = Salary.objects.filter(employee=emp)\ _sort = data.get('_sort') _order = data.get('_order') if _sort and _order: if _order == 'asc': qs = qs.order_by(f'{_sort}') else: qs = qs.order_by(f'-{_sort}') return JsonResponse(serialize_queryset(qs.all()), status=200, safe=False) else: return JsonResponse(errors.ValidateError, status=400) except Employee.DoesNotExist: return JsonResponse(errors.NotFoundError, status=404)
def api_employees_titles_update(request, emp_no, title_id): try: emp = Employee.objects.get(pk=emp_no) title = Title.objects.get(pk=title_id) if request.method == 'PATCH': data = json.loads(request.body.decode()) form = TitleUpdateForm(data) if form.is_valid(): for key, value in data.items(): setattr(title, key, value) title.save(force_update=True) return JsonResponse(serialize_model(title), status=200) else: return JsonResponse(errors.ValidateError, status=400) elif request.method == 'DELETE': title.delete() return HttpResponse(status=200) except (Employee.DoesNotExist, Title.DoesNotExist): return JsonResponse(errors.NotFoundError, status=404)
def api_employee_detail(request, emp_no): try: emp = Employee.objects.get(pk=emp_no) if request.method == 'DELETE': emp.delete() return HttpResponse(status=200) elif request.method == 'PATCH': try: data = json.loads(request.body.decode()) form = EmployeeUpdateForm(data) if form.is_valid(): for key, value in form.cleaned_data.items(): if value: setattr(emp, key, value) emp.save() return JsonResponse( serialize_model(emp, exclude=['departments'])) else: return JsonResponse(errors.ValidateError, status=400) except json.decoder.JSONDecodeError: return JsonResponse(errors.JsonDecodeError, status=400) except Employee.DoesNotExist: return JsonResponse(errors.NotFoundError, status=404)
def get(self, request, dept_no): try: dept = Department.objects.get(pk=dept_no) return JsonResponse(serialize_model(dept)) except Department.DoesNotExist: return errors.NotFoundError()
def api_department_list(request): if request.method == 'GET': _page = request.GET.get('_page', 0) _limit = request.GET.get('_limit', 10) _sort = request.GET.get('_sort') _order = request.GET.get('_order') dept_no__contains = request.GET.get('dept_no__contains') dept_name__contains = request.GET.get('dept_name__contains') form = DepartmentListParamsForm( dict(_page=_page, _limit=_limit, _order=_order, _sort=_sort, dept_no__contains=dept_no__contains, dept_name__contains=dept_name__contains)) if form.is_valid(): params = form.cleaned_data _page = params.get('_page') _limit = params.get('_limit') _sort = params.get('_sort') _order = params.get('_order') dept_no__contains = params.get('dept_no__contains') dept_name__contains = params.get('dept_name__contains') offset = _page * _limit end = offset + _limit qs = QuerySet(Department) if dept_no__contains: qs = qs.filter(dept_no__contains=dept_no__contains) if dept_name__contains: qs = qs.filter(dept_name__contains=dept_name__contains) count = qs.all().count() if _sort and _order: if _order == 'asc': qs = qs.order_by(f'{_sort}') else: qs = qs.order_by(f'-{_sort}') departments = qs.all()[offset:end] return JsonResponse(serialize_queryset(departments, exclude=['employees']), safe=False, headers={'X-TOTAL-COUNT': count}) else: return JsonResponse({'error': 'validate error'}, status=400) elif request.method == 'POST': dept_no = request.POST.get('dept_no') dept_name = request.POST.get('dept_name') dept = dict(dept_no=dept_no, dept_name=dept_name) form = DepartmentForm(dept) if form.is_valid(): try: dept = Department.objects.create(dept_no=dept_no, dept_name=dept_name) return JsonResponse( serialize_model(dept, exclude=['employees'])) except IntegrityError: return JsonResponse({'error': 'integrity error'}, status=400) else: return JsonResponse({'error': 'validate error'}, status=400)
def api_employee_list(requset): if requset.method == 'POST': form = EmployeeForm(requset.POST) if form.is_valid(): data = form.cleaned_data try: res = Employee.objects.aggregate(max_emp_no=Max('emp_no')) emp = Employee() if not res['max_emp_no']: emp.emp_no = 10001 else: emp.emp_no = res['max_emp_no'] + 1 emp.birth_date = data.get('birth_date') emp.first_name = data.get('first_name') emp.last_name = data.get('last_name') emp.hire_date = data.get('hire_date') emp.gender = data.get('gender') emp.save(force_insert=True) return JsonResponse(serialize_model(emp, exclude=['departments']), status=200) except IntegrityError: return JsonResponse(errors.IntegrityError, status=400) else: return JsonResponse(errors.ValidateError, status=400) elif requset.method == 'GET': _page = requset.GET.get('_page', 0) _limit = requset.GET.get('_limit', 10) _sort = requset.GET.get('_sort') _order = requset.GET.get('_order') first_name__contains = requset.GET.get('first_name__contains') last_name__contains = requset.GET.get('last_name__contains') birth_date__before = requset.GET.get('birth_date__before') birth_date__after = requset.GET.get('birth_date__after') emp_no__contains = requset.GET.get('emp_no__contains') hire_date__before = requset.GET.get('hire_date__before') hire_date__after = requset.GET.get('hire_date__after') form = EmployeeListParamsForm( dict( _page=_page, _limit=_limit, _sort=_sort, _order=_order, first_name__contains=first_name__contains, last_name__contains=last_name__contains, birth_date__before=birth_date__before, birth_date__after=birth_date__after, emp_no__contains=emp_no__contains, hire_date__before=hire_date__before, hire_date__after=hire_date__after, )) if form.is_valid(): data = form.cleaned_data _page = data.get('_page', 0) _limit = data.get('_limit', 10) _sort = data.get('_sort') _order = data.get('_order') first_name__contains = data.get('first_name__contains') last_name__contains = data.get('last_name__contains') birth_date__before = data.get('birth_date__before') birth_date__after = data.get('birth_date__after') emp_no__contains = data.get('emp_no__contains') hire_date__before = data.get('hire_date__before') hire_date__after = data.get('hire_date__after') offset = _page * _limit end = offset + _limit qs = Employee.objects if emp_no__contains: qs = qs.filter(emp_no__contains=emp_no__contains) if first_name__contains: qs = qs.filter(first_name__icontains=first_name__contains) if last_name__contains: qs = qs.filter(last_name__icontains=last_name__contains) if birth_date__before: qs = qs.filter(birth_date__lte=birth_date__before) if birth_date__after: qs = qs.filter(birth_date__gte=birth_date__after) if hire_date__before: qs = qs.filter(hire_date__lte=hire_date__before) if hire_date__after: qs = qs.filter(hire_date__gte=hire_date__after) count = qs.all().count() if _sort and _order: if _order == 'asc': direction = '+' else: direction = '-' qs = qs.order_by(f'{direction}{_sort}') emp_list = qs.all()[offset:end] return JsonResponse(serialize_queryset(emp_list, exclude=['departments']), headers={'X-TOTAL-COUNT': count}, safe=False) else: return JsonResponse(errors.ValidateError, status=400)