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_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_departments_managers_list(request, dept_no): try: dept = Department.objects.get(pk=dept_no) _page = request.GET.get('_page', 0) _limit = request.GET.get('_limit', 10) from_date__before = request.GET.get('from_date__before') from_date__after = request.GET.get('from_date__after') to_date__before = request.GET.get('to_date__before') to_date__after = request.GET.get('to_date__after') emp_no = request.GET.get('emp_no') emp_name = request.GET.get('emp_name') form = DepartmentManagersListParams( dict(_page=_page, _limit=_limit, from_date__before=from_date__before, from_date__after=from_date__after, to_date__before=to_date__before, to_date__after=to_date__after, emp_no=emp_no, emp_name=emp_name)) if form.is_valid(): data = form.cleaned_data _page = data.get('_page') _limit = data.get('_limit') from_date__before = data.get('from_date__before') from_date__after = data.get('from_date__after') to_date__before = data.get('to_date__before') to_date__after = data.get('to_date__after') emp_no = data.get('emp_no') emp_name = data.get('emp_name') qs = DeptManager.objects.filter(department=dept) if emp_no: qs = qs.filter(employee__emp_no__icontains=emp_no) if emp_name: qs = qs.filter( Q(employee__first_name__icontains=emp_name) | Q(employee__last_name__icontains=emp_name)) if from_date__before: qs = qs.filter(from_date__lte=from_date__before) if from_date__after: qs = qs.filter(from_date__gte=from_date__after) if to_date__before: qs = qs.filter(to_date__lte=to_date__before) if to_date__after: qs = qs.filter(to_date__gte=to_date__after) count = qs.all().count() start = _page * _limit end = start + _limit emp_list = qs.all()[start:end] return JsonResponse(serialize_queryset(emp_list), safe=False, headers={'X-TOTAL-COUNT': count}) else: return JsonResponse(errors.ValidateError, status=400) except DeptManager.DoesNotExist: return JsonResponse(errors.NotFoundError, status=404)
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)