Пример #1
0
    def get_queryset(self):
        user_id = self.request.GET.get('user_id')
        tag_id = self.request.GET.get('tag_id')
        if self.request.user.is_authenticated:
            if user_id:
                if not can_be_integer(user_id):
                    return []
                if tag_id:
                    if not can_be_integer(tag_id):
                        return []

                    try:
                        profile = Profile.objects.get(user__id=user_id,
                                                      removed=False)
                        member = DepartmentMember.objects.get(
                            department_member=profile, removed=False)
                        tag = Tag.objects.get(id=tag_id,
                                              user=member,
                                              removed=False)
                        return Task.objects.filter(
                            user=member, tag=tag,
                            removed=False).order_by('-created_at')

                    except (Profile.DoesNotExist,
                            DepartmentMember.DoesNotExist, Tag.DoesNotExist):
                        return []
        return []
Пример #2
0
    def get_queryset(self):
        profile_id = self.kwargs['profile_id']
        year_request = self.kwargs['year_request']
        month_request = self.kwargs['month_request']
        if month_request and year_request:
            if not can_be_integer(month_request):
                return []

            if not can_be_integer(year_request):
                return []

            if int(month_request) < 1 or int(month_request) > 12:
                return []

            if int(year_request) < 1990 or int(
                    year_request) > arrow.now().year:
                return []

            try:
                start = arrow.now(). \
                    replace(month=int(month_request), year=int(year_request)). \
                    to(settings.TIME_ZONE).floor('month').datetime
                end = arrow.now(). \
                    replace(month=int(month_request), year=int(year_request)). \
                    to(settings.TIME_ZONE).ceil('month').datetime

                my_profile = Profile.objects.get(user__id=self.request.user.id)
                profile = Profile.objects.get(id=profile_id, removed=False)
                member = DepartmentMember.objects.get(
                    department_member=profile)
                if my_profile.get_role() == 'Director':
                    tag = Tag.objects.filter(
                        user=member,
                        created_at__range=(start, end),
                        removed=False).order_by('-updated_at')
                    return tag
                elif my_profile.get_role() == 'Manager':
                    me = DepartmentMember.objects.get(
                        department_member=my_profile, removed=False)
                    if int(me.department.id) == int(member.department.id):
                        tag = Tag.objects.filter(
                            user=member,
                            created_at__range=(start, end),
                            removed=False).order_by('-updated_at')
                        return tag
                    else:
                        return []
                else:
                    return []
            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist,
                    Tag.DoesNotExist):
                return []

        else:
            return []
Пример #3
0
    def get_queryset(self):
        user_id = self.request.user.id
        month_request = self.request.GET.get('month_request')
        year_request = self.request.GET.get('year_request')
        if self.request.user.is_authenticated:
            if user_id:
                if not can_be_integer(user_id):
                    return []

                if month_request and year_request:
                    if not can_be_integer(month_request):
                        return []

                    if not can_be_integer(year_request):
                        return []

                    if int(month_request) < 1 or int(month_request) > 12:
                        return []

                    if int(year_request) < 1990 or int(year_request) > arrow.now().year:
                        return []

                    try:
                        start = arrow.now().\
                            replace(month=int(month_request), year=int(year_request)).\
                            to(settings.TIME_ZONE).floor('month').datetime
                        end = arrow.now().\
                            replace(month=int(month_request), year=int(year_request)).\
                            to(settings.TIME_ZONE).ceil('month').datetime
                        profile = Profile.objects.get(user__id=user_id, removed=False)
                        member = DepartmentMember.objects.get(department_member=profile, removed=False)
                        return WorkTime.objects.filter(user=member, date__range=(start, end), removed=False)

                    except (Profile.DoesNotExist, DepartmentMember.DoesNotExist):
                        return []

                else:
                    try:
                        profile = Profile.objects.get(user__id=user_id, removed=False)
                        member = DepartmentMember.objects.get(department_member=profile, removed=False)
                        return WorkTime.objects.filter(user=member, removed=False)

                    except (Profile.DoesNotExist, DepartmentMember.DoesNotExist, WorkTime.DoesNotExist):
                        return []
        return []
Пример #4
0
def add_comment_for_my_task_api_view(request):
    """
    API thêm bình luận vào task của tôi
    :param request:
    :return:
    """
    user_id = request.user.id
    task_id = request.data.get('task_id')
    cmt_content = request.data.get('cmt_content')

    if request.user.is_authenticated:
        if not task_id:
            return Response({
                'ok': False,
                'msg': 'Không tồn tại Task!',
            })

        if not can_be_integer(task_id):
            return Response({
                'ok': False,
                'msg': 'Không tìm thấy Task của bạn!',
            })

        if not cmt_content:
            return Response({
                'ok': False,
                'msg': 'Bạn chưa nhập gì cả!',
            })

        try:
            p = Profile.objects.get(user__id=user_id, removed=False)
            dpm = DepartmentMember.objects.get(department_member=p,
                                               removed=False)
            task = Task.objects.get(id=task_id, user=dpm, removed=False)

            comment = Comment(task=task, user=p, content=cmt_content)
            comment.save()

            return Response({
                'ok': True,
                'msg': 'Gửi bình luận thành công!',
            })

        except (Profile.DoesNotExist, DepartmentMember.DoesNotExist,
                Task.DoesNotExist):
            return Response({
                'ok': False,
                'msg': 'Lỗi dữ liệu!',
            })

    return Response({
        'ok': False,
        'msg': 'Bạn chưa đăng nhập!',
    })
Пример #5
0
def get_one_tag_of_member_detail_api_view(request):
    """
    API lấy thông tin chi tiết của một tag của một nhân viên
    :param request: user_id, tag_id
    :return:
    """
    user_id = request.GET.get('user_id')
    tag_id = request.GET.get('tag_id')
    if request.user.is_authenticated:
        if user_id and tag_id:
            if not can_be_integer(user_id):
                return Response({})
            if not can_be_integer(tag_id):
                return Response({})

            try:
                profile = Profile.objects.get(user__id=user_id, removed=False)
                member = DepartmentMember.objects.get(department_member=profile, removed=False)
                my_profile = Profile.objects.get(user__id=request.user.id, removed=False)

                if my_profile.get_role() == 'Director':
                    tag = Tag.objects.get(id=tag_id, user=member, removed=False)
                    serializer = serializer_api.GetTagOfMemberSerializer(tag)
                    return Response(serializer.data)
                elif my_profile.get_role() == 'Manager':
                    me = DepartmentMember.objects.get(department_member=my_profile, removed=False)

                    if int(me.department.id) == int(member.department.id):
                        tag = Tag.objects.get(id=tag_id, user=member, removed=False)
                        serializer = serializer_api.GetTagOfMemberSerializer(tag)
                        return Response(serializer.data)
                    else:
                        return Response({})
                else:
                    return Response({})

            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist, Tag.DoesNotExist):
                return Response({})

    return Response({})
Пример #6
0
    def get_queryset(self):
        user_id = self.request.user.id
        year_request = self.kwargs['year_request']
        month_request = self.kwargs['month_request']
        if month_request and year_request:
            if not can_be_integer(month_request):
                return []

            if not can_be_integer(year_request):
                return []

            if int(month_request) < 1 or int(month_request) > 12:
                return []

            if int(year_request) < 1990 or int(
                    year_request) > arrow.now().year:
                return []

            try:
                start = arrow.now(). \
                    replace(month=int(month_request), year=int(year_request)). \
                    to(settings.TIME_ZONE).floor('month').datetime
                end = arrow.now(). \
                    replace(month=int(month_request), year=int(year_request)). \
                    to(settings.TIME_ZONE).ceil('month').datetime

                profile = Profile.objects.get(user__id=user_id)
                dpm = DepartmentMember.objects.get(department_member=profile)
                tag = Tag.objects.filter(user=dpm,
                                         created_at__range=(start, end),
                                         removed=False).order_by('-updated_at')
                return tag
            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist,
                    Tag.DoesNotExist):
                return []
        else:
            return []
Пример #7
0
    def get_queryset(self):
        task_id = self.request.GET.get('task_id')
        if self.request.user.is_authenticated:
            if task_id:
                if not can_be_integer(task_id):
                    return []

                try:
                    task = Task.objects.get(id=task_id, removed=False)
                    return Comment.objects.filter(
                        task=task, removed=False).order_by('-created_at')

                except Task.DoesNotExist:
                    return []
        return []
Пример #8
0
    def get_queryset(self):
        if self.request.user.is_authenticated:
            department_id = self.request.GET.get('department_id')
            try:
                my_profile = Profile.objects.get(user__id=self.request.user.id,
                                                 removed=False)
                if not department_id:
                    if my_profile.get_role() == 'Director':
                        return DepartmentMember.objects.filter(removed=False)
                    elif my_profile.get_role() == 'Manager':
                        me = DepartmentMember.objects.get(
                            department_member=my_profile, removed=False)
                        d_id = me.department.id
                        department = Department.objects.get(pk=d_id)
                        return DepartmentMember.objects.filter(
                            department=department, removed=False)
                    else:
                        return []
                if department_id:
                    if not can_be_integer(department_id):
                        return []

                    if my_profile.get_role() == 'Director':
                        department = Department.objects.get(pk=department_id)
                        return DepartmentMember.objects.filter(
                            department=department, removed=False)
                    elif my_profile.get_role() == 'Manager':
                        me = DepartmentMember.objects.get(
                            department_member=my_profile, removed=False)
                        d_id = me.department.id
                        if int(d_id) == int(department_id):
                            department = Department.objects.get(
                                pk=department_id)
                            return DepartmentMember.objects.filter(
                                department=department, removed=False)
                        else:
                            return []
                    else:
                        return []
            except (Profile.DoesNotExist, Department.DoesNotExist,
                    Department.DoesNotExist):
                return []
        return []
Пример #9
0
def get_one_tag_detail_of_me_api_view(request):
    """
    API lấy thông tin chi tiết của một tag của tôi
    :param request: tag_id
    :return:
    """
    if request.user.is_authenticated:
        user_id = request.user.id
        tag_id = request.GET.get('tag_id')
        if tag_id:
            if not can_be_integer(tag_id):
                return Response({})

            try:
                profile = Profile.objects.get(user__id=user_id, removed=False)
                member = DepartmentMember.objects.get(department_member=profile, removed=False)
                tag = Tag.objects.get(id=tag_id, user=member, removed=False)
                serializer = serializer_api.GetTagOfMemberSerializer(tag)
                return Response(serializer.data)

            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist, Tag.DoesNotExist):
                return Response({})

    return Response({})
Пример #10
0
def my_tag_computation_api_view(request):
    """
    API cộng tất cả kết quả đạt được của Task rồi cập nhật cho Tag của tôi
    :param request: profile_id, tag_id
    :return: tạo mới một tag
    """
    user_id = request.user.id
    profile_id = request.data.get('profile_id')
    tag_id = request.data.get('tag_id')

    if request.user.is_authenticated:
        if profile_id:
            if not can_be_integer(profile_id):
                return Response({
                    'ok': False,
                    'msg': 'Nhân viên không tồn tại!',
                })

            if not tag_id:
                return Response({
                    'ok': False,
                    'msg': 'Không tìm thấy KPI!',
                })

            if not can_be_integer(tag_id):
                return Response({
                    'ok': False,
                    'msg': 'Không tồn tại KPI!',
                })

            try:
                tp = Profile.objects.get(user__id=user_id, id=profile_id, removed=False)
                dpm = DepartmentMember.objects.get(department_member=tp, removed=False)
                tag = Tag.objects.get(id=tag_id, user=dpm, removed=False)
                task = Task.objects.filter(tag=tag, removed=False)

                count = 0

                for item in task:
                    if item.state == 'CO':
                        count += int(item.result_value)

                tag.finished = count

                percent = float(count) / float(tag.quantity) * 100.0
                percent = round(percent, 2)

                tag.progress = percent

                tag.save()
                return Response({
                    'ok': True,
                    'msg': 'Đồng bộ dữ liệu thành công!',
                })
            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist, Tag.DoesNotExist, Task.DoesNotExist):
                return Response({
                    'ok': False,
                    'msg': 'Lỗi dữ liệu!',
                })
        return Response({
            'ok': False,
            'msg': 'Chỉnh sửa KPI thất bại!',
        })
    return Response({
        'ok': False,
        'msg': 'Bạn chưa đăng nhập!',
    })
Пример #11
0
def get_profile_list_no_pagination_api_view(request):
    """
    API lấy danh sách tag của tôi và không phân trang
    :param request: department_id
    :return:
    """
    if request.user.is_authenticated:
        pern = request.user.profile.get_role()
        department_id = request.GET.get('department_id')
        data = []
        if not department_id:
            if pern != 'Director' and pern != 'Manager':
                return Response([])
            try:
                if pern == 'Director':
                    profile = Profile.objects.filter(removed=False)
                    for item in profile:
                        data.append({
                            'userId': item.user.id,
                            'profileId': item.id,
                            'fullName': item.full_name,
                        })

                    return Response(data)
                if pern == 'Manager':
                    dpm = DepartmentMember.objects.get(
                        department_member=request.user.profile, removed=False)
                    profile = DepartmentMember.objects.filter(
                        department__id=dpm.department.id, removed=False)
                    for item in profile:
                        data.append({
                            'userId':
                            item.department_member.user.id,
                            'profileId':
                            item.department_member.id,
                            'fullName':
                            item.department_member.full_name,
                        })

                    return Response(data)
            except (Profile.DoesNotExist, ):
                return Response([])
        elif department_id:
            if not can_be_integer(department_id):
                return Response([])
            if pern != 'Director' and pern != 'Manager':
                return Response([])
            dpm = DepartmentMember.objects.get(
                department_member=request.user.profile, removed=False)
            if pern != 'Director' and dpm.department.id != int(department_id):
                return Response([])
            try:
                profile = DepartmentMember.objects.filter(
                    department__id=department_id, removed=False)
                for item in profile:
                    data.append({
                        'userId': item.department_member.user.id,
                        'profileId': item.department_member.id,
                        'fullName': item.department_member.full_name,
                    })

                return Response(data)

            except (DepartmentMember.DoesNotExist, ):
                return Response([])

    return Response([])
Пример #12
0
    def get_queryset(self):
        user_id = self.request.GET.get('user_id')
        query = self.request.GET.get('query')
        if self.request.user.is_authenticated:
            if user_id:
                if not can_be_integer(user_id):
                    return []

                try:
                    profile = Profile.objects.get(user__id=user_id, removed=False)
                    my_profile = Profile.objects.get(user__id=self.request.user.id, removed=False)
                    if my_profile.get_role() == 'Director':
                        member = DepartmentMember.objects.get(department_member=profile, removed=False)
                        if not query:
                            # lấy theo query=current
                            return Tag.objects.filter(user=member,
                                                      period_end__gt=arrow.now().to(settings.TIME_ZONE).datetime,
                                                      removed=False).order_by('-created_at')
                        elif query == 'all':
                            return Tag.objects.filter(user=member,
                                                      removed=False).order_by('-created_at')
                        elif query == 'current':
                            # kpi chưa hết hạn
                            return Tag.objects.filter(user=member,
                                                      period_end__gt=arrow.now().to(settings.TIME_ZONE).datetime,
                                                      removed=False).order_by('-created_at')
                        elif query == 'tmonth':
                            # kpi được tạo trong tháng này, bắt đầu trong tháng này, kết thúc sau hôm nay
                            start = arrow.now().to(settings.TIME_ZONE).floor('month').datetime
                            end = arrow.now().to(settings.TIME_ZONE).ceil('month').datetime
                            return Tag.objects.filter(user=member,
                                                      period_start__range=(start, end),
                                                      period_end__gt=arrow.now().to(settings.TIME_ZONE).datetime,
                                                      created_at__range=(start, end),
                                                      removed=False).order_by('-created_at')
                        elif query == 'outdated':
                            return Tag.objects.filter(user=member,
                                                      period_end__lt=arrow.now().to(settings.TIME_ZONE).datetime,
                                                      removed=False).order_by('-created_at')
                        else:
                            return []

                    elif my_profile.get_role() == 'Manager':
                        member = DepartmentMember.objects.get(department_member=profile, removed=False)
                        me = DepartmentMember.objects.get(department_member=my_profile, removed=False)
                        d_id = me.department.id
                        if not query:
                            return Tag.objects.filter(user=member,
                                                      user__department__id=d_id,
                                                      period_end__gt=arrow.now().to(settings.TIME_ZONE).datetime,
                                                      removed=False).order_by('-created_at')
                        elif query == 'all':
                            return Tag.objects.filter(user=member,
                                                      user__department__id=d_id,
                                                      removed=False).order_by('-created_at')
                        elif query == 'current':
                            # kpi chưa hết hạn
                            return Tag.objects.filter(user=member,
                                                      user__department__id=d_id,
                                                      period_end__gt=arrow.now().to(settings.TIME_ZONE).datetime,
                                                      removed=False).order_by('-created_at')
                        elif query == 'tmonth':
                            # kpi được tạo trong tháng này, bắt đầu trong tháng này, kết thúc sau hôm nay
                            start = arrow.now().to(settings.TIME_ZONE).floor('month').datetime
                            end = arrow.now().to(settings.TIME_ZONE).ceil('month').datetime
                            return Tag.objects.filter(user=member,
                                                      user__department__id=d_id,
                                                      period_start__range=(start, end),
                                                      period_end__gt=arrow.now().to(settings.TIME_ZONE).datetime,
                                                      created_at__range=(start, end),
                                                      removed=False).order_by('-created_at')
                        elif query == 'outdated':
                            return Tag.objects.filter(user=member,
                                                      user__department__id=d_id,
                                                      period_end__lt=arrow.now().to(settings.TIME_ZONE).datetime,
                                                      removed=False).order_by('-created_at')
                    else:
                        return []

                except (Profile.DoesNotExist, DepartmentMember.DoesNotExist, Tag.DoesNotExist):
                    return []

        return []
Пример #13
0
def get_member_tag_statistics_api_view(request):
    """
    API lấy số liệu thông kê của Tag của một nhân viên
    :param request:
    :return:
    """
    if request.user.is_authenticated:
        user_id = request.GET.get('user_id')
        if not user_id:
            return Response({})

        if not can_be_integer(user_id):
            return Response({})
        try:
            my_profile = Profile.objects.get(user__id=request.user.id, removed=False)
            profile = Profile.objects.get(user__id=user_id, removed=False)
            if my_profile.get_role() == 'Director':
                member = DepartmentMember.objects.get(department_member=profile, removed=False)
                start = arrow.now().to(settings.TIME_ZONE).floor('month').datetime
                end = arrow.now().to(settings.TIME_ZONE).ceil('month').datetime
                wt = WorkTime.objects.filter(user=member, removed=False,
                                             date__range=(start,
                                                          end)).aggregate(totalTime=Sum('time_total'))['totalTime']
                tag = Tag.objects.filter(user=member, removed=False, created_at__range=(start, end))
                total = 0
                count_finished = 0
                count_progress = 0
                count_un_finished = 0
                for item in tag:
                    total += 1
                    if item.state == 'CO':
                        count_finished += 1
                    elif item.state == 'PR':
                        count_progress += 1
                    elif item.state == 'NF':
                        count_un_finished += 1
                return Response({
                  'total_time': wt,
                  'total_tag': total,
                  'count_finished': count_finished,
                  'count_progress': count_progress,
                  'count_un_finished': count_un_finished,
                })
            elif my_profile.get_role() == 'Manager':
                me = DepartmentMember.objects.get(department_member=my_profile, removed=False)
                dpm = DepartmentMember.objects.get(department_member=profile, removed=False)
                if int(me.department.id) == int(dpm.department.id):
                    member = DepartmentMember.objects.get(department_member=profile, removed=False)
                    start = arrow.now().to(settings.TIME_ZONE).floor('month').datetime
                    end = arrow.now().to(settings.TIME_ZONE).ceil('month').datetime
                    wt = WorkTime.objects.filter(user=member, removed=False,
                                                 date__range=(start,
                                                              end)).aggregate(totalTime=Sum('time_total'))['totalTime']
                    tag = Tag.objects.filter(user=member, removed=False, created_at__range=(start, end))
                    total = 0
                    count_finished = 0
                    count_progress = 0
                    count_un_finished = 0
                    for item in tag:
                        total += 1
                        if item.state == 'CO':
                            count_finished += 1
                        elif item.state == 'PR':
                            count_progress += 1
                        elif item.state == 'NF':
                            count_un_finished += 1
                    return Response({
                        'total_time': wt,
                        'total_tag': total,
                        'count_finished': count_finished,
                        'count_progress': count_progress,
                        'count_un_finished': count_un_finished,
                    })
                else:
                    return Response({})
            else:
                return Response({})

        except (Profile.DoesNotExist, DepartmentMember.DoesNotExist, Tag.DoesNotExist):
            return Response({})

    return Response({})
Пример #14
0
def edit_my_work_time_api_view(request):
    """
    API chỉnh sửa hoặc xóa giờ làm việc của tôi
    :param request:
    :return:
    """
    user_id = request.user.id
    work_time_id = request.data.get('work_time_id')
    work_date = request.data.get('date')
    start_in_day = request.data.get('start_in_day')
    end_in_day = request.data.get('end_in_day')
    rest_time = request.data.get('rest_time')
    work_time_request = request.data.get('work_time_request')

    if request.user.is_authenticated:
        if not work_time_id:
            return Response({
                'ok': False,
                'msg': 'Không tồn tại giờ làm việc này!',
            })

        if not can_be_integer(work_time_id):
            return Response({
                'ok': False,
                'msg': 'Không tìm thấy giờ làm việc của bạn!',
            })

        if not work_time_request:
            return Response({
                'ok': False,
                'msg': 'Không xác định được yêu cầu!',
            })

        if work_time_request != 'edit' and work_time_request != 'remove':
            return Response({
                'ok': False,
                'msg': 'Yêu cầu không hợp lệ!',
            })

        if work_time_request == 'remove':
            try:
                profile = Profile.objects.get(user__id=user_id, removed=False)
                dpm = DepartmentMember.objects.get(department_member=profile, removed=False)
                wt = WorkTime.objects.get(id=work_time_id, user=dpm, removed=False)

                wt.removed = True
                wt.save()

                return Response({
                    'ok': True,
                    'msg': 'Xoá thành công!',
                })

            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist, WorkTime.DoesNotExist):
                return Response({
                    'ok': False,
                    'msg': 'Lỗi dữ liệu!',
                })

        if work_time_request == 'edit':
            if not work_date:
                return Response({
                    'ok': False,
                    'msg': 'Ngày làm việc không được để trống!',
                })

            if not start_in_day:
                return Response({
                    'ok': False,
                    'msg': 'Thời gian bắt đầu không được để trống!',
                })

            if work_date:
                work_date = arrow.get(work_date).to(settings.TIME_ZONE).date()

            if start_in_day:
                start_in_day = arrow.get(start_in_day).to(settings.TIME_ZONE).time()

            if end_in_day:
                end_in_day = arrow.get(end_in_day).to(settings.TIME_ZONE).time()

            if start_in_day and end_in_day and end_in_day < start_in_day:
                return Response({
                    'ok': False,
                    'msg': 'Thời gian kết thúc không được trước thời gian bắt đầu!',
                })

            try:
                profile = Profile.objects.get(user__id=user_id, removed=False)
                dpm = DepartmentMember.objects.get(department_member=profile, removed=False)
                wt = WorkTime.objects.get(id=work_time_id, user=dpm, removed=False)

                total = 0
                if start_in_day and end_in_day:
                    start = datetime.combine(date.today(), start_in_day)
                    end = datetime.combine(date.today(), end_in_day)
                    total = end - start
                    total = total.total_seconds()
                    total = float(total) / 3600.0

                    if rest_time:
                        total = float(total) - float(rest_time)

                wt.date = work_date
                wt.start_in_day = start_in_day
                wt.end_in_day = end_in_day
                wt.rest_time = rest_time
                wt.time_total = total
                wt.save()

                return Response({
                    'ok': True,
                    'msg': 'Cập nhật thành công!',
                })
            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist, WorkTime.DoesNotExist):
                return Response({
                    'ok': False,
                    'msg': 'Lỗi dữ liệu!',
                })

    return Response({
        'ok': False,
        'msg': 'Bạn chưa đăng nhập!',
    })
Пример #15
0
def get_one_task_detail_of_me_api_view(request):
    """
    API lấy thông tin chi tiết một task của tôi
    :param request: task_id
    :return:
    """
    if request.user.is_authenticated:
        user_id = request.user.id
        task_id = request.GET.get('task_id')
        if task_id:
            if not can_be_integer(task_id):
                return Response({})

            try:
                profile = Profile.objects.get(user__id=user_id, removed=False)
                member = DepartmentMember.objects.get(
                    department_member=profile, removed=False)
                task = Task.objects.get(id=task_id, user=member, removed=False)
                # taskDesc = markdown2.markdown(task.task_description,
                #                               extras=["tables",
                #                                       "fenced-code-blocks",
                #                                       'code-friendly']) if task.task_description else None
                return Response({
                    'userId':
                    task.user.department_member.user.id,
                    'fullName':
                    task.user.department_member.full_name,
                    'avatarUrl':
                    build_absolute_url(
                        task.user.department_member.get_avatar_url()),
                    'sex':
                    task.user.department_member.get_sex(),
                    'position':
                    task.user.position,
                    'department':
                    task.user.department.department_name,
                    'tagId':
                    task.tag.id,
                    'taskId':
                    task.pk,
                    'taskName':
                    task.task_name,
                    'taskDescription':
                    task.task_description,
                    # 'taskDescEdit': task.task_description,
                    'periodStart':
                    task.period_start,
                    'periodEnd':
                    task.period_end,
                    'unitOfMeasure':
                    task.unit_of_measure,
                    'targetValue':
                    task.target_value,
                    'resultValue':
                    task.result_value,
                    'progress':
                    task.progress,
                    'weight':
                    task.weight,
                    'taskState':
                    task.get_state(),
                    'isFinished':
                    task.is_finished,
                    'createdAt':
                    task.created_at,
                    'updatedAt':
                    task.updated_at,
                })

            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist,
                    Task.DoesNotExist):
                return Response({})

        return Response({})
Пример #16
0
def add_new_tag_api_view(request):
    """
    API tạo một kpi mới
    :param request: profile_id, tag_name, tag_description, period_start, period_end, quantity, weight
    :return: tạo mới một tag
    """
    user_id = request.user.id
    profile_id = request.data.get('profile_id')
    tag_name = request.data.get('tag_name')
    tag_description = request.data.get('tag_description')
    period_start = request.data.get('period_start')
    period_end = request.data.get('period_end')
    quantity = request.data.get('quantity')
    weight = request.data.get('weight')

    if request.user.is_authenticated:
        try:
            my_profile = Profile.objects.get(user__id=user_id, removed=False)
            if my_profile.get_role() != 'Director' and my_profile.get_role() != 'Manager':
                return Response({
                    'ok': False,
                    'msg': 'Bạn không có quyền tạo KPI!',
                })

        except (Profile.DoesNotExist,):
            return Response({
                'ok': False,
                'msg': 'Lỗi dữ liệu!',
            })

        if not profile_id:
            return Response({
                'ok': False,
                'msg': 'Không tìm thấy nhân viên!',
            })

        if not can_be_integer(profile_id):
            return Response({
                'ok': False,
                'msg': 'Không tìm thấy nhân viên này!',
            })

        if not tag_name:
            return Response({
                'ok': False,
                'msg': 'Tiêu đề không được để trống!',
            })

        if not tag_description:
            tag_description = None

        if not quantity:
            return Response({
                'ok': False,
                'msg': 'Chỉ tiêu không được để trống!',
            })

        if not can_be_integer(quantity):
            return Response({
                'ok': False,
                'msg': 'Chỉ tiêu phải nhập số!',
            })

        if not weight:
            weight = 1

        if not can_be_integer(weight):
            return Response({
                'ok': False,
                'msg': 'Trọng số phải nhập số!',
            })

        if int(weight) < 1 or int(weight) > 10:
            return Response({
                'ok': False,
                'msg': 'Trọng số phải có giá trị từ 1 đến 10!',
            })

        if not period_start:
            return Response({
                'ok': False,
                'msg': 'Thời gian bắt đầu không được để trống!'
            })

        if not period_end:
            return Response({
                'ok': False,
                'msg': 'Thời gian kết thúc không được để trống!'
            })

        period_start = arrow.get(period_start).to(settings.TIME_ZONE).datetime
        period_end = arrow.get(period_end).to(settings.TIME_ZONE).datetime

        if period_end < period_start:
            return Response({
                'ok': False,
                'msg': 'Thời gian kết thúc không được trước thời gian bắt đầu!'
            })

        if my_profile.get_role() == 'Director':
            try:
                fp = Profile.objects.get(user__id=user_id, removed=False)
                tp = Profile.objects.get(id=profile_id, removed=False)
                dpm = DepartmentMember.objects.get(department_member=tp, removed=False)

                tag = Tag(
                    user=dpm,
                    tag_name=tag_name,
                    tag_description=tag_description,
                    period_start=period_start,
                    period_end=period_end,
                    weight=weight,
                    quantity=quantity,
                    finished=0,
                    progress=0,
                    state='PR',
                    created_by=fp,
                )
                tag.save()
                return Response({
                    'ok': True,
                    'msg': 'Tạo KPI thành công!',
                })
            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist):
                return Response({
                    'ok': False,
                    'msg': 'Không tồn tại nhân viên này!',
                })

        if my_profile.get_role() == 'Manager':
            try:
                me = DepartmentMember.objects.get(department_member=my_profile, removed=False)
                tp = Profile.objects.get(id=profile_id, removed=False)
                dpm = DepartmentMember.objects.get(department_member=tp, removed=False)
                if int(me.department.id) != int(dpm.department.id):
                    return Response({
                        'ok': False,
                        'msg': 'Nhân viên này không thuộc phòng ban của bạn!',
                    })
                else:
                    tag = Tag(
                        user=dpm,
                        tag_name=tag_name,
                        tag_description=tag_description,
                        period_start=period_start,
                        period_end=period_end,
                        weight=weight,
                        quantity=quantity,
                        finished=0,
                        progress=0,
                        state='PR',
                        created_by=my_profile,
                    )
                    tag.save()
                    return Response({
                        'ok': True,
                        'msg': 'Tạo KPI thành công!',
                    })
            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist):
                return Response({
                    'ok': False,
                    'msg': 'Không tồn tại nhân viên này!',
                })
    return Response({
        'ok': False,
        'msg': 'Bạn chưa đăng nhập!',
    })
Пример #17
0
def add_new_task_api_view(request):
    """
    API tạo một task mới
    :param request:
    :return:
    """
    user_id = request.user.id
    tag_id = request.data.get('tag_id')
    task_name = request.data.get('task_name')
    task_description = request.data.get('task_description')
    period_start = request.data.get('period_start')
    period_end = request.data.get('period_end')
    unit_of_measure = request.data.get('unit_of_measure')
    target_value = request.data.get('target_value')
    weight = request.data.get('weight')

    if request.user.is_authenticated:
        if not tag_id:
            return Response({
                'ok': False,
                'msg': 'Không tồn tại KPI!',
            })

        if not can_be_integer(tag_id):
            return Response({
                'ok': False,
                'msg': 'Không tìm thấy KPI bạn lựa chọn!',
            })

        if not task_name:
            return Response({
                'ok': False,
                'msg': 'Tiêu đề không được để trống!',
            })

        if not task_description:
            task_description = None

        if not target_value:
            return Response({
                'ok': False,
                'msg': 'Chỉ tiêu không được để trống!',
            })

        if not unit_of_measure:
            unit_of_measure = None

        if not can_be_integer(target_value):
            return Response({
                'ok': False,
                'msg': 'Chỉ tiêu phải nhập số!',
            })

        if not weight:
            weight = 1

        if not can_be_integer(weight):
            return Response({
                'ok': False,
                'msg': 'Trọng số phải nhập số!',
            })

        if int(weight) < 1 or int(weight) > 10:
            return Response({
                'ok': False,
                'msg': 'Trọng số phải có giá trị từ 1 đến 10!',
            })

        if period_start:
            period_start = arrow.get(period_start).to(
                settings.TIME_ZONE).datetime

        if period_end:
            period_end = arrow.get(period_end).to(settings.TIME_ZONE).datetime

        if period_start and period_end and period_end < period_start:
            return Response({
                'ok':
                False,
                'msg':
                'Thời gian kết thúc không được trước thời gian bắt đầu!',
            })

        if period_start and not period_end:
            return Response({
                'ok': False,
                'msg': 'Thời gian kết thúc không được để trống!',
            })

        if not period_start and period_end:
            return Response({
                'ok': False,
                'msg': 'Thời gian bắt đầu không được để trống!',
            })

        if not period_start:
            period_start = None

        if not period_end:
            period_end = None

        try:
            p = Profile.objects.get(user__id=user_id, removed=False)
            dpm = DepartmentMember.objects.get(department_member=p,
                                               removed=False)
            t = Tag.objects.get(id=tag_id)
            if dpm.department_member.user.id != t.user.department_member.user.id:
                return Response({
                    'ok': False,
                    'msg': 'Không tồn tại KPI này!',
                })

            if t.state == 'CO':
                return Response({
                    'ok':
                    False,
                    'msg':
                    'KPI này đã hoàn thành nên không thể tạo Task!',
                })

            task = Task(
                user=dpm,
                task_name=task_name,
                task_description=task_description,
                period_start=period_start,
                period_end=period_end,
                unit_of_measure=unit_of_measure,
                target_value=target_value,
                progress=0,
                weight=weight,
                state='PR',
                tag=t,
            )
            task.save()
            return Response({
                'ok': True,
                'msg': 'Tạo Task thành công!',
            })
        except (Profile.DoesNotExist, DepartmentMember.DoesNotExist,
                Tag.DoesNotExist):
            return Response({
                'ok': False,
                'msg': 'Không tồn tại nhân viên hoặc KPI!',
            })
    return Response({
        'ok': False,
        'msg': 'Bạn chưa đăng nhập!',
    })
Пример #18
0
def edit_tag_member_api_view(request):
    """
    API chỉnh sửa một Tag
    :param request: user_id, tag_id, tag_name, tag_description, period_start, period_end, quantity, weight
    :return: tạo mới một tag
    """
    profile_id = request.data.get('profile_id')
    tag_id = request.data.get('tag_id')
    tag_request = request.data.get('tag_request')
    tag_name = request.data.get('tag_name')
    tag_description = request.data.get('tag_description')
    period_start = request.data.get('period_start')
    period_end = request.data.get('period_end')
    quantity = request.data.get('quantity')
    weight = request.data.get('weight')

    if request.user.is_authenticated:
        if not profile_id:
            return Response({
                'ok': False,
                'msg': 'Không tìm thấy nhân viên!',
            })

        if not can_be_integer(profile_id):
            return Response({
                'ok': False,
                'msg': 'Không tồn tại nhân viên!',
            })

        if not tag_id:
            return Response({
                'ok': False,
                'msg': 'Không tìm thấy KPI!',
            })

        if not can_be_integer(tag_id):
            return Response({
                'ok': False,
                'msg': 'Không tồn tại KPI!',
            })

        if not tag_request:
            return Response({
                'ok': False,
                'msg': 'Không xác định được yêu cầu!',
            })

        if tag_request != 'edit' and tag_request != 'remove':
            return Response({
                'ok': False,
                'msg': 'Yêu cầu không hợp lệ!',
            })

        if tag_request == 'remove':
            try:
                my_profile = Profile.objects.get(user__id=request.user.id, removed=False)

                if my_profile.get_role() == 'Director':
                    tp = Profile.objects.get(id=profile_id, removed=False)
                    dpm = DepartmentMember.objects.get(department_member=tp, removed=False)
                    tag = Tag.objects.get(id=tag_id, user=dpm, removed=False)

                    tag.removed = True

                    tag.save()

                    return Response({
                        'ok': True,
                        'msg': 'Xóa KPI Thành Công!',
                    })

                elif my_profile.get_role() == 'Manager':
                    me = DepartmentMember.objects.get(department_member=my_profile, removed=False)

                    tp = Profile.objects.get(id=profile_id, removed=False)
                    dpm = DepartmentMember.objects.get(department_member=tp, removed=False)

                    if int(me.department.id) == int(dpm.department.id):
                        tag = Tag.objects.get(id=tag_id, user=dpm, removed=False)

                        tag.removed = True
                        tag.save()

                        return Response({
                            'ok': True,
                            'msg': 'Xóa KPI Thành Công!',
                        })
                    else:
                        return Response({
                            'ok': False,
                            'msg': 'Bạn không có quyền xóa KPI này!',
                        })

                else:
                    return Response({
                        'ok': False,
                        'msg': 'Bạn không có quyền xóa KPI này!',
                    })
            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist, Tag.DoesNotExist):
                return Response({
                    'ok': False,
                    'msg': 'Lỗi dữ liệu!',
                })

        if tag_request == 'edit':

            if not tag_name:
                return Response({
                    'ok': False,
                    'msg': 'Tiêu đề không được để trống!',
                })

            if not tag_description:
                tag_description = None

            if not quantity:
                return Response({
                    'ok': False,
                    'msg': 'Chỉ tiêu không được để trống!',
                })

            if not can_be_integer(quantity):
                return Response({
                    'ok': False,
                    'msg': 'Chỉ tiêu phải nhập số!',
                })

            if not weight:
                weight = 1

            if not can_be_integer(weight):
                return Response({
                    'ok': False,
                    'msg': 'Trọng số phải nhập số!',
                })

            if int(weight) < 1 or int(weight) > 10:
                return Response({
                    'ok': False,
                    'msg': 'Trọng số phải có giá trị từ 1 đến 10!',
                })

            if not period_start:
                return Response({
                    'ok': False,
                    'msg': 'Thời gian bắt đầu không được để trống!'
                })

            if not period_end:
                return Response({
                    'ok': False,
                    'msg': 'Thời gian kết thúc không được để trống!'
                })

            period_start = arrow.get(period_start).to(settings.TIME_ZONE).datetime
            period_end = arrow.get(period_end).to(settings.TIME_ZONE).datetime

            if period_end < period_start:
                return Response({
                    'ok': False,
                    'msg': 'Thời gian kết thúc không được trước thời gian bắt đầu!'
                })

            try:
                fp = Profile.objects.get(user__id=request.user.id, removed=False)
                tp = Profile.objects.get(id=profile_id, removed=False)
                me = DepartmentMember.objects.get(department_member=fp, removed=False)
                dpm = DepartmentMember.objects.get(department_member=tp, removed=False)

                if fp.get_role() == 'Director':
                    tag = Tag.objects.get(id=tag_id, user=dpm, removed=False)

                    tag.tag_name = tag_name
                    tag.tag_description = tag_description
                    tag.period_start = period_start
                    tag.period_end = period_end
                    tag.weight = weight
                    tag.quantity = quantity
                    tag.created_by = fp

                    percent = float(tag.finished) / float(quantity) * 100.0
                    percent = round(percent, 2)

                    tag.progress = percent

                    tag.save()

                    return Response({
                        'ok': True,
                        'msg': 'Cập nhật KPI thành công!',
                    })

                elif fp.get_role() == 'Manager':
                    if int(me.department.id) == int(dpm.department.id):
                        tag = Tag.objects.get(id=tag_id, user=dpm, removed=False)

                        tag.tag_name = tag_name
                        tag.tag_description = tag_description
                        tag.period_start = period_start
                        tag.period_end = period_end
                        tag.weight = weight
                        tag.quantity = quantity
                        tag.created_by = fp

                        percent = float(tag.finished) / float(quantity) * 100.0
                        percent = round(percent, 2)

                        tag.progress = percent

                        tag.save()

                        return Response({
                            'ok': True,
                            'msg': 'Cập nhật KPI thành công!',
                        })
                    else:
                        return Response({
                            'ok': False,
                            'msg': 'Bạn không có quyền chỉnh sửa KPI này!',
                        })
                else:
                    return Response({
                        'ok': False,
                        'msg': 'Bạn không có quyền chỉnh sửa KPI này!',
                    })
            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist, Tag.DoesNotExist):
                return Response({
                    'ok': False,
                    'msg': 'Lỗi dữ liệu!',
                })

    return Response({
        'ok': False,
        'msg': 'Bạn chưa đăng nhập!',
    })
Пример #19
0
def edit_my_task_api_view(request):
    """
    API chỉnh sửa task của tôi
    :param request:
    :return:
    """
    user_id = request.user.id
    tag_id = request.data.get('tag_id')
    task_id = request.data.get('task_id')
    edit_task = request.data.get('edit_task')
    task_name = request.data.get('task_name')
    task_description = request.data.get('task_description')
    period_start = request.data.get('period_start')
    period_end = request.data.get('period_end')
    unit_of_measure = request.data.get('unit_of_measure')
    result_value = request.data.get('result_value')
    weight = request.data.get('weight')
    task_state = request.data.get('task_state')

    if request.user.is_authenticated:
        if not task_id:
            return Response({
                'ok': False,
                'msg': 'Không tồn tại Task!',
            })

        if not can_be_integer(task_id):
            return Response({
                'ok': False,
                'msg': 'Không tìm thấy Task của bạn!',
            })

        if not edit_task:
            return Response({
                'ok':
                False,
                'msg':
                'Không xác định được yêu cầu chỉnh sửa task!',
            })

        if not tag_id:
            return Response({
                'ok': False,
                'msg': 'Không tìm thấy KPI!',
            })

        if not can_be_integer(tag_id):
            return Response({
                'ok': False,
                'msg': 'Không tồn tại KPI!',
            })

        if edit_task == 'remove':
            try:
                p = Profile.objects.get(user__id=user_id, removed=False)
                dpm = DepartmentMember.objects.get(department_member=p,
                                                   removed=False)
                task = Task.objects.get(id=task_id, user=dpm, removed=False)

                task.removed = True

                task.save()

                if task.state == 'CO':
                    tag = Tag.objects.get(id=tag_id, user=dpm, removed=False)
                    task_list = Task.objects.filter(tag=tag, removed=False)
                    count = 0

                    for item in task_list:
                        if item.state == 'CO':
                            count += int(item.result_value)

                    tag.finished = count
                    tag.save()

                return Response({
                    'ok': True,
                    'msg': 'Xóa Task thành công!',
                })

            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist,
                    Task.DoesNotExist):
                return Response({
                    'ok': False,
                    'msg': 'Lỗi dữ liệu!',
                })

        if edit_task == 'title':
            if not task_name:
                return Response({
                    'ok': False,
                    'msg': 'Tiêu đề không được để trống!',
                })

            if not task_description:
                task_description = None

            try:
                p = Profile.objects.get(user__id=user_id, removed=False)
                dpm = DepartmentMember.objects.get(department_member=p,
                                                   removed=False)
                task = Task.objects.get(id=task_id, user=dpm, removed=False)

                task.task_name = task_name
                task.task_description = task_description

                task.save()

                return Response({
                    'ok': True,
                    'msg': 'Cập nhật Task thành công!',
                })
            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist,
                    Task.DoesNotExist):
                return Response({
                    'ok': False,
                    'msg': 'Lỗi dữ liệu!',
                })

        if edit_task == 'compact':
            if not result_value:
                return Response({
                    'ok': False,
                    'msg': 'Chỉ tiêu đã đạt không được để trống!',
                })

            if not can_be_integer(result_value):
                return Response({
                    'ok': False,
                    'msg': 'Chỉ tiêu phải nhập số!',
                })

            if not task_state:
                return Response({
                    'ok': False,
                    'msg': 'Trạng thái task không được để trống!',
                })

            if task_state != 'Chưa Hoàn Thành' and task_state != 'Đang Thực Hiện' and task_state != 'Hoàn Thành':
                return Response({
                    'ok': False,
                    'msg': 'Trạng thái task không hợp lệ!',
                })

            if task_state == 'Chưa Hoàn Thành':
                task_state = 'NF'

            if task_state == 'Đang Thực Hiện':
                task_state = 'PR'

            if task_state == 'Hoàn Thành':
                task_state = 'CO'

            try:
                p = Profile.objects.get(user__id=user_id, removed=False)
                dpm = DepartmentMember.objects.get(department_member=p,
                                                   removed=False)
                task = Task.objects.get(id=task_id, user=dpm, removed=False)

                if task.is_finished:
                    return Response({
                        'ok':
                        False,
                        'msg':
                        'Task này đã hoàn thành nên không thể chỉnh sửa!',
                    })

                task.result_value = result_value
                task.state = task_state

                percent = float(result_value) / float(
                    task.target_value) * 100.0
                percent = round(percent, 2)

                task.progress = percent

                if task_state == 'CO':
                    task.is_finished = True

                task.save()

                if task.state == 'CO':
                    tag = Tag.objects.get(id=tag_id, user=dpm, removed=False)
                    task_list = Task.objects.filter(tag=tag, removed=False)
                    count = 0

                    for item in task_list:
                        if item.state == 'CO':
                            count += int(item.result_value)

                    tag.finished = count
                    tag.save()

                return Response({
                    'ok': True,
                    'msg': 'Cập nhật Task thành công!',
                })
            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist,
                    Task.DoesNotExist, Tag.DoesNotExist):
                return Response({
                    'ok': False,
                    'msg': 'Lỗi dữ liệu!',
                })

        if edit_task == 'total':
            if not result_value:
                return Response({
                    'ok': False,
                    'msg': 'Chỉ tiêu đã đạt không được để trống!',
                })

            if not unit_of_measure:
                unit_of_measure = None

            if not can_be_integer(result_value):
                return Response({
                    'ok': False,
                    'msg': 'Chỉ tiêu đã đạt phải nhập số!',
                })

            if not weight:
                weight = 1

            if not can_be_integer(weight):
                return Response({
                    'ok': False,
                    'msg': 'Trọng số phải nhập số!',
                })

            if int(weight) < 1 or int(weight) > 10:
                return Response({
                    'ok': False,
                    'msg': 'Trọng số phải có giá trị từ 1 đến 10!',
                })

            if not task_state:
                return Response({
                    'ok': False,
                    'msg': 'Trạng thái task không được để trống!',
                })

            if task_state != 'Chưa Hoàn Thành' and task_state != 'Đang Thực Hiện' and task_state != 'Hoàn Thành':
                return Response({
                    'ok': False,
                    'msg': 'Trạng thái task không hợp lệ!',
                })

            if task_state == 'Chưa Hoàn Thành':
                task_state = 'NF'

            if task_state == 'Đang Thực Hiện':
                task_state = 'PR'

            if task_state == 'Hoàn Thành':
                task_state = 'CO'

            if period_start:
                period_start = arrow.get(period_start).to(
                    settings.TIME_ZONE).datetime

            if period_end:
                period_end = arrow.get(period_end).to(
                    settings.TIME_ZONE).datetime

            if period_start and period_end and period_end < period_start:
                return Response({
                    'ok':
                    False,
                    'msg':
                    'Thời gian kết thúc không được trước thời gian bắt đầu!',
                })

            if period_start and not period_end:
                return Response({
                    'ok':
                    False,
                    'msg':
                    'Thời gian kết thúc không được để trống!',
                })

            if not period_start and period_end:
                return Response({
                    'ok':
                    False,
                    'msg':
                    'Thời gian bắt đầu không được để trống!',
                })

            if not period_start:
                period_start = None

            if not period_end:
                period_end = None

            try:
                p = Profile.objects.get(user__id=user_id, removed=False)
                dpm = DepartmentMember.objects.get(department_member=p,
                                                   removed=False)
                task = Task.objects.get(id=task_id, user=dpm, removed=False)

                if task.is_finished:
                    return Response({
                        'ok':
                        False,
                        'msg':
                        'Task này đã hoàn thành nên không thể chỉnh sửa!',
                    })

                task.period_start = period_start
                task.period_end = period_end
                task.unit_of_measure = unit_of_measure
                task.result_value = result_value

                percent = float(result_value) / float(
                    task.target_value) * 100.0
                percent = round(percent, 2)

                task.progress = percent
                task.weight = weight
                task.state = task_state

                if task_state == 'CO':
                    task.is_finished = True

                task.save()

                if task.state == 'CO':
                    tag = Tag.objects.get(id=tag_id, user=dpm, removed=False)
                    task_list = Task.objects.filter(tag=tag, removed=False)
                    count = 0

                    for item in task_list:
                        if item.state == 'CO':
                            count += int(item.result_value)

                    tag.finished = count
                    tag.save()

                return Response({
                    'ok': True,
                    'msg': 'Cập nhật Task thành công!',
                })
            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist,
                    Task.DoesNotExist, Tag.DoesNotExist):
                return Response({
                    'ok': False,
                    'msg': 'Lỗi dữ liệu!',
                })
        return Response({
            'ok': False,
            'msg': 'Chỉnh sửa task thất bại!',
        })
    return Response({
        'ok': False,
        'msg': 'Bạn chưa đăng nhập!',
    })
Пример #20
0
def edit_my_tag_api_view(request):
    """
    API cập nhật KPI của tôi
    :param request: profile_id, tag_id, finished, tag_state
    :return: tạo mới một tag
    """
    user_id = request.user.id
    profile_id = request.data.get('profile_id')
    tag_id = request.data.get('tag_id')
    finished = request.data.get('finished')
    tag_state = request.data.get('tag_state')

    if request.user.is_authenticated:
        if profile_id:
            if not can_be_integer(profile_id):
                return Response({
                    'ok': False,
                    'msg': 'Nhân viên không tồn tại!',
                })

            if not tag_id:
                return Response({
                    'ok': False,
                    'msg': 'Không tìm thấy KPI!',
                })

            if not can_be_integer(tag_id):
                return Response({
                    'ok': False,
                    'msg': 'Không tồn tại KPI!',
                })

            if not tag_state:
                return Response({
                    'ok': False,
                    'msg': 'Trạng thái KPI không được để trống!',
                })

            if tag_state != 'Chưa Hoàn Thành' and tag_state != 'Đang Thực Hiện' and tag_state != 'Hoàn Thành':
                return Response({
                    'ok': False,
                    'msg': 'Trạng thái KPI không hợp lệ!',
                })

            if tag_state == 'Chưa Hoàn Thành':
                tag_state = 'NF'

            if tag_state == 'Đang Thực Hiện':
                tag_state = 'PR'

            if tag_state == 'Hoàn Thành':
                tag_state = 'CO'

            if not finished:
                return Response({
                    'ok': False,
                    'msg': 'Kết quả đạt được không được để trống!',
                })

            if not can_be_integer(finished):
                return Response({
                    'ok': False,
                    'msg': 'Kết quả đạt được phải nhập số!',
                })

            try:
                tp = Profile.objects.get(user__id=user_id, id=profile_id, removed=False)
                dpm = DepartmentMember.objects.get(department_member=tp, removed=False)
                tag = Tag.objects.get(id=tag_id, user=dpm)

                if tag.state == 'CO':
                    return Response({
                        'ok': False,
                        'msg': 'KPI này đã hoàn thành nên không thể chỉnh sửa!',
                    })

                percent = float(finished) / float(tag.quantity) * 100.0
                percent = round(percent, 2)

                tag.finished = finished
                tag.progress = percent
                tag.state = tag_state

                tag.save()
                return Response({
                    'ok': True,
                    'msg': 'Cập nhật KPI thành công!',
                })
            except (Profile.DoesNotExist, DepartmentMember.DoesNotExist, Tag.DoesNotExist):
                return Response({
                    'ok': False,
                    'msg': 'Lỗi dữ liệu!',
                })
        return Response({
            'ok': False,
            'msg': 'Chỉnh sửa KPI thất bại!',
        })
    return Response({
        'ok': False,
        'msg': 'Bạn chưa đăng nhập!',
    })
Пример #21
0
def edit_comment_for_my_task_api_view(request):
    """
    API chỉnh sửa hoặc xóa bình luận trong task của tôi
    :param request:
    :return:
    """
    comment_id = request.data.get('comment_id')
    cmt_content = request.data.get('cmt_content')
    cmt_request = request.data.get('cmt_request')

    if request.user.is_authenticated:
        if not comment_id:
            return Response({
                'ok': False,
                'msg': 'Không tồn tại bình luận!',
            })

        if not can_be_integer(comment_id):
            return Response({
                'ok': False,
                'msg': 'Không tìm thấy bình luận của bạn!',
            })

        if not cmt_request:
            return Response({
                'ok': False,
                'msg': 'Không xác định được yêu cầu của bạn!',
            })

        if cmt_request != 'edit' and cmt_request != 'remove':
            return Response({
                'ok': False,
                'msg': 'Yêu cầu không hợp lệ!',
            })

        if cmt_request == 'remove':
            try:
                comment = Comment.objects.get(id=comment_id,
                                              user=request.user.profile,
                                              removed=False)
                comment.removed = True
                comment.save()

                return Response({
                    'ok': True,
                    'msg': 'Xóa bình luận thành công!',
                })
            except (Comment.DoesNotExist, ):
                return Response({
                    'ok': True,
                    'msg': 'Lỗi dữ liệu!',
                })

        if cmt_request == 'edit':
            if not cmt_content:
                return Response({
                    'ok': False,
                    'msg': 'Bạn chưa nhập gì cả!',
                })

            try:
                comment = Comment.objects.get(id=comment_id,
                                              user=request.user.profile,
                                              removed=False)
                comment.content = cmt_content

                comment.save()

                return Response({
                    'ok': True,
                    'msg': 'Cập nhật bình luận thành công!',
                })

            except (Comment.DoesNotExist, ):
                return Response({
                    'ok': False,
                    'msg': 'Lỗi dữ liệu!',
                })

    return Response({
        'ok': False,
        'msg': 'Bạn chưa đăng nhập!',
    })
Пример #22
0
def get_profile_info_specific_in_department(request):
    """
    API lấy thông tin cơ bản của một nhân viên
    :param request:
    :return:
    """
    if request.user.is_authenticated:
        pern = request.user.profile.get_role()
        user_id = request.GET.get('user_id')
        if not user_id:
            return Response({})
        if not can_be_integer(user_id):
            return Response({})
        try:
            if pern == 'Director':
                profile = Profile.objects.get(user__id=user_id, removed=False)
                member = DepartmentMember.objects.get(
                    department_member=profile, removed=False)
                return Response({
                    'userId':
                    member.department_member.user.id,
                    'profileId':
                    member.department_member.id,
                    'fullName':
                    member.department_member.full_name,
                    'sex':
                    member.department_member.get_sex(),
                    'avatarUrl':
                    build_absolute_url(
                        member.department_member.get_avatar_url()),
                    'position':
                    member.position,
                    'departmentId':
                    member.department.id,
                    'department':
                    member.department.department_name,
                })
            elif pern == 'Manager':
                profile = Profile.objects.get(user__id=user_id, removed=False)
                my_profile = Profile.objects.get(user__id=request.user.id,
                                                 removed=False)

                me = DepartmentMember.objects.get(department_member=my_profile,
                                                  removed=False)
                member = DepartmentMember.objects.get(
                    department_member=profile, removed=False)
                if int(me.department.id) == int(member.department.id):
                    return Response({
                        'userId':
                        member.department_member.user.id,
                        'profileId':
                        member.department_member.id,
                        'fullName':
                        member.department_member.full_name,
                        'sex':
                        member.department_member.get_sex(),
                        'avatarUrl':
                        build_absolute_url(
                            member.department_member.get_avatar_url()),
                        'position':
                        member.position,
                        'departmentId':
                        member.department.id,
                        'department':
                        member.department.department_name,
                    })
                else:
                    return Response({})
            else:
                return Response({})

        except (Profile.DoesNotExist, DepartmentMember.DoesNotExist):
            return Response({})
    return Response({})