示例#1
0
 def move_team(self, request, *args, **kwargs):
     user_id = request.data.get('user_id')
     current_team_id = Utils.convert_to_int(
         request.data.get('current_team_id'))
     new_team_id = Utils.convert_to_int(request.data.get('new_team_id'))
     TeamService.move_team(user_id, current_team_id, new_team_id)
     return Response({'Success': True})
示例#2
0
 def to_representation(self, instance):
     ret = super().to_representation(instance)
     profile_id = ret.get('profile')
     profile = Profile.objects.get(id=profile_id)
     ret.update(
         name=profile.name,
         leave_day_left=DateService.get_leave_day_statistic(profile_id).get('leave_day_left'),
         team='No team'
     )
     if profile.teams:
         team = Team.objects.filter(id=int(profile.teams.split(',')[0])).first()
         if team:
             ret.update(team=team.team_name)
     start_hour = Workday.DEFAULT_START_HOUR
     end_hour = Workday.DEFAULT_END_HOUR
     if ret.get('start_hour') and ret.get('end_hour'):
         start_hour_json = Utils.safe_jsonloads(ret.get('start_hour'))
         end_hour_json = Utils.safe_jsonloads(ret.get('end_hour'))
         if start_hour_json and end_hour_json:
             start_hour = f"{start_hour_json.get('hour')}:{start_hour_json.get('min')}"
             end_hour = f"{end_hour_json.get('hour')}:{end_hour_json.get('min')}"
     ret.update(
         start_hour=start_hour,
         end_hour=end_hour
     )
     return ret
示例#3
0
文件: date.py 项目: ptran068/hr_api
    def get_leave_day_statistic(cls, profile_id):
        now = datetime.datetime.now()
        user_profile = Profile.objects.get(id=profile_id)

        last_year_queryset = Date.objects.filter(date__year=now.year - 1)
        last_remote, last_half_leave, last_full_leave = cls.get_leave_remote(
            last_year_queryset, profile_id)
        last_total_leave = last_full_leave + last_half_leave * 0.5

        first_half_queryset = Date.objects.filter(date__year=now.year,
                                                  date__month__lt=7)
        first_half_remote, first_half_half_leave, first_half_full_leave = cls.get_leave_remote(
            first_half_queryset, profile_id)
        first_half_total_leave = first_half_full_leave + first_half_half_leave * 0.5

        last_leave_day_left = cls.get_leave_day_in_year(
            last_total_leave, user_profile.join_date)
        if user_profile.join_date.month < 7:
            last_leave_day_left -= 1

        if now.month < 7:
            if last_leave_day_left > 0:
                current_leave_day_left = cls.get_leave_day_in_year(
                    first_half_total_leave, user_profile.join_date)
                leave_day_left = f"{last_leave_day_left} days last year, {current_leave_day_left} days this year"
            else:
                current_leave_day_left = cls.get_leave_day_in_year(
                    first_half_total_leave,
                    user_profile.join_date) + last_leave_day_left
                leave_day_left = f"{current_leave_day_left} days"
            total_leave = Utils.convert_to_int(first_half_total_leave)
            total_remote = first_half_remote
        else:
            second_half_queryset = Date.objects.filter(date__year=now.year,
                                                       date__month__gte=7)
            second_half_remote, second_half_half_leave, second_half_full_leave = cls.get_leave_remote(
                second_half_queryset, profile_id)
            second_half_total_leave = second_half_full_leave + second_half_half_leave * 0.5
            if last_leave_day_left > 0:

                current_leave_day_left = cls.get_leave_day_in_year(
                    second_half_total_leave, user_profile.join_date)
            else:
                current_leave_day_left = cls.get_leave_day_in_year(
                    second_half_total_leave,
                    user_profile.join_date) + last_leave_day_left
            leave_day_left = f"{current_leave_day_left} days"
            total_leave = Utils.convert_to_int(first_half_total_leave +
                                               second_half_total_leave)
            total_remote = first_half_remote + second_half_remote
        return {
            'id': profile_id,
            'name': user_profile.name,
            'leave_day_number': f'{total_leave} leave, {total_remote} remote',
            'leave_day_left': leave_day_left
        }
示例#4
0
 def create_lunch_current_month(self, request, *args, **kwargs):
     current_month, current_year = Utils.get_current_date()
     LunchService.create_lunch_days(
         current_month,
         current_year,
         lunch_users=Profile.objects.filter(lunch=True))
     return Response({'success': True})
示例#5
0
文件: lunch.py 项目: ptran068/hr_api
 def get_list(cls):
     response = []
     now = datetime.datetime.now()
     next_year, next_month = Utils.nextmonth(year=now.year, month=now.month)
     for date in Lunchdate.objects.filter(
             date__month__in=[now.month, next_month]):
         queryset = Lunch.objects.filter(date=date.id).annotate(
             name=F('profile__name')).values('profile', 'name')
         profiles = Profile.objects.filter(user__active=True).exclude(
             id__in=[data.get('profile')
                     for data in queryset]).values('id', 'name')
         response.extend(({
             'start': date.date,
             'end': date.date,
             'title': 'Eat',
             'class': 'eat',
             'content': str(queryset.count()),
             'reason': queryset
         }, {
             'start': date.date,
             'end': date.date,
             'title': 'No eat',
             'class': 'no',
             'content': str(profiles.count()),
             'reason': profiles
         }))
     return response
示例#6
0
 def retrieve(self, request, *args, **kwargs):
     profile_id = Utils.convert_to_int(kwargs.get('pk'))
     queryset = ProposeLeave.objects.filter(
         start__gte=datetime.datetime.now(), profile_id=profile_id)
     if request.query_params.get('history'):
         queryset = ProposeLeave.objects.filter(
             start__lt=datetime.datetime.now(), profile_id=profile_id)
     data = self.get_data(queryset, request.query_params.get('history'))
     return Response(data)
示例#7
0
    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)

        profile_id = Utils.convert_to_int(request.data.get('profile'))
        start_date = request.data.get('start')
        end_date = request.data.get('end')
        ProposeLeaveService.approve_finalize(profile_id, start_date, end_date)
        return Response(serializer.data)
示例#8
0
文件: lunch.py 项目: ptran068/hr_api
 def update_lunch(cls, profile):
     now = datetime.datetime.now()
     Lunch.objects.filter(profile_id=profile.id,
                          date__date__gt=datetime.datetime.now()).delete()
     cls.create_lunch_days(year=now.year,
                           month=now.month,
                           lunch_users=[profile])
     year, next_month = Utils.nextmonth(year=now.year, month=now.month)
     cls.create_lunch_days(year=year,
                           month=next_month,
                           lunch_users=[profile])
示例#9
0
文件: user.py 项目: ptran068/hr_api
 def list(self, request, *args, **kwargs):
     query_name = self.request.query_params.get('name', None)
     if query_name:
         queryset = self.queryset.filter(
             profile__name__istartswith=query_name)
     else:
         queryset = self.filter_queryset(self.get_queryset())
         active = self.request.query_params.get('active')
         if active:
             queryset = queryset.filter(
                 Q(active=1 and Utils.convert_to_int(active)))
     page = self.paginate_queryset(queryset)
     data = self.get_serializer(page, many=True).data
     return self.get_paginated_response(data)
示例#10
0
def lunch_creation():
    current_month, current_year = Utils.get_current_date()
    year, next_month = Utils.nextmonth(year=current_year, month=current_month)
    LunchService.create_lunch_days(next_month, year, lunch_users=Profile.objects.filter(lunch=True))
示例#11
0
文件: date.py 项目: ptran068/hr_api
 def retrieve_date_statistic(self, request, *args, **kwargs):
     profile_id = Utils.convert_to_int(kwargs.get('pk'))
     return Response(DateService.get_leave_day_statistic(profile_id))
示例#12
0
文件: date.py 项目: ptran068/hr_api
 def get_leave_day_in_year(cls, total_leave, join_date):
     leave_day_left = Utils.convert_to_int(
         12 - total_leave +
         relativedelta(datetime.datetime.now(), join_date).years)
     return leave_day_left