Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
 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())
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
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)
Beispiel #7
0
 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()
Beispiel #8
0
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)
Beispiel #9
0
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)