示例#1
0
    def get(self, request, format=None):
        """
        Parameter details:
        ---
            agent_id:
                type: int
                required: No

        Sample Response:
        ---
            {
              [
                {
                    'point': {'lat': 23.1234, 'lng': 92.323},
                    'agent_id': 2,
                    'agent_name': 'name1',
                    'task_id': 12,
                    'task_title': 'title',
                    'event': 1,
                    'timestamp': '12-12-12 12:23:2323'
                },...
              ]
            }
        """
        is_manager(request)
        location_list = get_agent_locations(request)
        return Response(location_list, status=200)
示例#2
0
    def partial_update(self, request, pk, format=None):
        """
        Domain Choices:
        ---
            'Sales': 0,
            'Delivery Service': 1,
            'Installment/Maintenance/Repair': 2,
            'Rent-a-car/Ride sharing': 3,
            'Security': 4,
            'Others': 5

        Sample Submit:
        ---
            {
                'full_name': 'user1',
                'email': 'email',
                'phone': '+88017XXXXXXXX',
                'domain': 2,
            }
        """

        is_manager(request)
        if User.objects.filter(id=pk).exists():
            manager = User.objects.get(id=pk)
            serializer = AccountSerializerEmployee(data=request.data)
            if serializer.is_valid():
                manager = serializer.update_user(manager,
                                                 serializer.validated_data)
                data = get_profile_details(manager)
                return Response(data, status=200)
            return Response(serializer.errors, status=400)
        return Response({'msg': 'User not found!'}, status=400)
示例#3
0
文件: views.py 项目: ash018/FFTracker
    def put(self, request, pk, format=None):
        """
        Parameter details:
        ---
            group_name:
                type: str
                required: No
            member_list:
                type: json list
                example: [id1, id2,...]
        """
        is_manager(request)
        admin = request.user
        chat_group = Thread.objects.get(id=pk)
        group_name = request.data.get('group_name', False)
        member_list = request.data.get('member_list', False)
        if member_list:
            chat_group.members.clear()
            chat_group.members.add(admin)
            for mem_id in member_list:
                chat_group.members.add(User.objects.get(id=mem_id))
        if group_name:
            chat_group.name = group_name

        chat_group.save()
        text = 'Group ' + group_name + ' has been modified by ' + admin.full_name
        # TODO: set timestamp
        message = Message.objects.create(text=text,
                                         sender=admin,
                                         type=MSGD['Group'],
                                         timestamp=timezone.now(),
                                         group=chat_group)
        resp = send_group_message(message, chat_group)
        return Response(resp, status=200)
示例#4
0
文件: views.py 项目: ash018/FFTracker
 def post(self, request, pk, format=None):
     """
     Parameter details:
     ---
         status:
             type: int
             required: Yes
             choices:
                     (4, 'Cancelled'),
                     (5, 'Postponed'),
     """
     is_manager(request)
     if not check_subscription(request):
         return Response({'msg': 'Payment is due!'}, status=402)
     serializer = CTSManagerSerializer(data=request.data,
                                       context={'request': request})
     if serializer.is_valid():
         task_qs = Task.objects.filter(id=pk)
         if len(task_qs) < 1:
             return Response({'detail': 'Task not found!'}, status=400)
         task = task_qs[0]
         with transaction.atomic():
             serializer.cts_manager(task, serializer.validated_data)
         return Response({'msg': 'OK'}, status=200)
     return Response(serializer.errors, status=400)
示例#5
0
文件: views.py 项目: ash018/FFTracker
    def retrieve(self, request, pk, format=None):
        """
        Sample response:
        ---
            {
                'id': 11,
                'title': 'Title',
                'point': {'lat': 23.780926, 'lng': 90.422858},
                'status': 0,
                'start': datetime,
                'deadline': datetime,
                "images": ['url1..', 'url2..'],

                'task_type': 'Doctors visit',
                'agent_list': [50, 51],
                'manager': 'name',
                'custom_fields': [],
                'address': 'address'
            }

        """
        is_manager(request)
        task_qs = Task.objects.select_related('manager').prefetch_related(
            'agent_list').filter(id=pk)
        if len(task_qs) < 1:
            return Response({'detail': 'Task not found!'}, status=400)
        task = task_qs[0]
        self.check_object_permissions(request, task)
        task_data = get_task_details(task)
        # print(task_data)
        return Response(task_data, status=200)
示例#6
0
    def retrieve(self, request, pk, format=None):
        """
        Response:
        ---
            {
                'packages': PACKAGE_INFO,
                'oid': org.oid,
                'org_id': org.id,
                'org_name': org.org_name,
                'org_address': org.address,
                'package_info': {},

                'renew_needed': renew_needed,
                'day_start': str(org.day_start),
                'day_end': str(org.day_end),
                'location_interval': org.location_interval,
                'min_work_hour_p': org.min_work_hour_p,
                'weekend': org.weekend,
                'logo': org.logo,
                'tracking_enabled': org.tracking_enabled,
            }
        """
        is_manager(request)
        if Organization.objects.filter(id=pk).exists():
            org = Organization.objects.get(id=pk)
            organization_details = get_org_details(org)
            # print(organizer_details)
            return Response(organization_details, status=200)
        resp = {'detail': "organization not found."}
        return Response(resp, status=400)
示例#7
0
文件: views.py 项目: ash018/FFTracker
 def destroy(self, request, pk, format=None):
     is_manager(request)
     if TaskTemplate.objects.filter(id=pk):
         task_template = TaskTemplate.objects.get(id=pk)
         task_template.delete()
         return Response({'msg': 'OK'}, status=200)
     resp = {'detail': "Template not found."}
     return Response(resp, status=400)
示例#8
0
    def get(self, request, token, format=None):
        """
        Query parameters:
        ---
            token:
                type: str
                required: yes

        Sample Response:
        ---
            {
                'agents':
                [
                    {'id': 116, 'name': 'Member 44', 'image': None},
                    ...
                ],
                'tasks':
                [
                    {   'id': 25,
                        'title': 'Retailer 1',
                        'status': 0,
                        'deadline': datetime.datetime(2018, 8, 14, 8, 24, 34, 913268, tzinfo=<UTC>),
                        'task_type': 'Visit2',
                        'address': 'Link road, Badda, Gulshan.',
                        'agent_list': [{'id': 114, 'image': None}]
                    },
                    ....
                ]
            }
        """
        is_manager(request)
        manager = request.user
        qcommon_task_manager = Q(manager=manager)
        qname = Q(title__icontains=token)
        qaddress = Q(address__icontains=token)
        tasks = Task.objects.select_related('manager').filter(
            qcommon_task_manager & (qname | qaddress))

        agent_qs = User.objects.select_related('parent').filter(
            Q(parent=manager) & Q(full_name__icontains=token))

        data = {
            'agents': get_resource_list(agent_qs),
            'tasks': get_task_list(tasks)
        }

        return Response(data, status=200)
示例#9
0
文件: views.py 项目: ash018/FFTracker
    def create(self, request, format=None):
        """
        Sample Submit:
        ---
            {
                'user': user_id,
                'org': org_id,
                'task_type': 'my template',
                'task_fields': {},
            }
        """
        is_manager(request)

        serializer = TaskTemplateSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({'msg': 'OK'}, status=201)
        return Response(serializer.errors, status=400)
示例#10
0
文件: views.py 项目: ash018/FFTracker
    def partial_update(self, request, pk, format=None):
        """
        Sample Submit:
        ---
            {
                'user': user_id,
                'org': org_id,
                'task_type': 'my template',
                'task_fields': {},
            }
        """
        is_manager(request)
        template = TaskTemplate.objects.get(id=pk)

        serializer = TaskTemplateSerializer(template, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({'msg': 'OK'}, status=200)
        return Response(serializer.errors, status=400)
示例#11
0
文件: views.py 项目: ash018/FFTracker
    def partial_update(self, request, pk, format=None):
        """
        Sample submit:
        ---
            {
                task_type: 'Doctor visit',
                start: "2019-03-11T07:07:24.000000+00:00",
                deadline: "2019-03-11T07:07:24.000000+00:00",
                "images": ['url1..', 'url2..'],
                point: {'lat': 23.780926, 'lng': 90.422858},
                address: 'Dhaka, Bangladesh',
                image_required: false,
                attachment_required: true,
                org: 111,
                manager: 10,
                agent_list: [1, 2, 3,..]
                custom_fields: {},
                instances: 1,
            }


        Sample response:
        ---
            {
                'id': 2
            }
        """
        is_manager(request)
        serializer = TaskSerializer(data=request.data)
        if serializer.is_valid():
            task_qs = Task.objects.filter(id=pk)
            if len(task_qs) < 1:
                return Response({'detail': 'Task not found!'}, status=400)
            task = task_qs[0]
            self.check_object_permissions(request, task)
            with transaction.atomic():
                task = serializer.update_task(serializer.validated_data, task)
                task.delayed = False
                task.save()
            data = {'id': task.id}
            return Response(data, status=200)
        return Response(serializer.errors, status=400)
示例#12
0
文件: views.py 项目: ash018/FFTracker
 def post(self, request, format=None):
     """
     Parameter details:
     ---
         group_name:
             type: str
             required: No
         member_list:
             type: json list
             example: [id1, id2,...]
     """
     is_manager(request)
     manager = request.user
     group_name = request.data.get(
         'group_name', manager.full_name + '_' + get_rand_str(8))
     member_list = request.data.get('member_list', False)
     if not member_list:
         return Response({'message': 'No member provided!'}, status=406)
     # print(member_list)
     chat_group = Thread(name=group_name,
                         admin=manager,
                         org=manager.org,
                         type=MSGD['Group'])
     chat_group.save()
     chat_group.members.add(manager)
     for mem_id in member_list:
         chat_group.members.add(User.objects.get(id=mem_id))
     chat_group.save()
     text = 'You joined the group ' + group_name + ' created by ' + manager.full_name
     # TODO: set timestamp
     message = Message.objects.create(text=text,
                                      sender=manager,
                                      type=MSGD['Group'],
                                      timestamp=timezone.now(),
                                      group=chat_group)
     resp = send_group_message(message, chat_group)
     return Response(resp, status=201)
示例#13
0
    def get(self, request, format=None):
        """
        Sample response:
        ---
            {
                'total_task': 12,
                'unassigned_task': 33,
                'delayed_task': 5,
                'remaining_task': 2,
                'complete_task': 3,
                'cancelled_task': 4,
                'inprogress_task': 5,
                'current_task': [
                    {
                        'title': 'title',
                        'status': 0,
                        'start': 'datetime',
                        'duration': 4,
                        'task_type': 'string',
                        'address': 'string',
                        'id': 2,
                    },....
                ],

                'total_agent': 100,
                'offline_agent': 3,
                'online_agent': 4,
                'working_agent': 3,
                'free_agent': 4,
                'unreachable_agent': 5,
                'is_trial': true,
                'due_days': 19,

            }
        """
        is_manager(request)
        adjust_subscription(request)
        if not check_subscription(request):
            return Response({'msg': 'Payment is due!'}, status=402)
        manager = request.user
        task_qf_manager = Q(manager=manager) | Q(agent_list=manager)
        task_qs = Task.objects.filter(task_qf_manager)
        total_task = task_qs.count()
        unassigned_task = task_qs.filter(
            Q(status=TSTATE['Unassigned'])).count()
        remaining_task = task_qs.filter(Q(status=TSTATE['Remaining'])).count()
        delayed_task = task_qs.filter(
            Q(delayed=True) & ~Q(status=TSTATE['Cancelled'])
            & ~Q(status=TSTATE['Postponed'])
            & ~Q(status=TSTATE['Complete'])).count()
        complete_task = task_qs.filter(Q(status=TSTATE['Complete'])).count()
        cancelled_task = task_qs.filter(Q(status=TSTATE['Cancelled'])).count()
        inprogress_task = task_qs.filter(
            Q(status=TSTATE['In progress'])).count()

        current_task = get_current_task(manager)

        resource_qs = User.objects.filter(Q(parent=manager))
        total_agent = resource_qs.count()
        online_agent = resource_qs.filter(Q(is_present=True)).count()
        offline_agent = resource_qs.filter(Q(is_present=False)).count()

        working_agent = resource_qs.filter(
            Q(is_present=True) & Q(is_working=True)
            & Q(is_awol=False)).count()
        free_agent = resource_qs.filter(
            Q(is_present=True) & Q(is_working=False)
            & Q(is_awol=False)).count()
        unreachable_agent = resource_qs.filter(
            Q(is_present=True) & Q(is_awol=True)).count()

        unchecked = get_unchecked_count(request)

        data = {
            'total_task':
            total_task,
            'unassigned_task':
            unassigned_task,
            'delayed_task':
            delayed_task,
            'remaining_task':
            remaining_task,
            'complete_task':
            complete_task,
            'cancelled_task':
            cancelled_task,
            'inprogress_task':
            inprogress_task,
            'current_task':
            current_task,
            'total_agent':
            total_agent,
            'offline_agent':
            offline_agent,
            'online_agent':
            online_agent,
            'working_agent':
            working_agent,
            'free_agent':
            free_agent,
            'unreachable_agent':
            unreachable_agent,
            'is_trial':
            manager.org.subscription._is_trial,
            'due_days': (manager.org.subscription.current_usage.exp_date -
                         timezone.now()).days,
            'unchecked_ntf':
            unchecked,
        }

        return Response(data, status=200)
示例#14
0
文件: views.py 项目: ash018/FFTracker
    def list(self, request, format=None):
        """
        Query parameters:
        ---
            status:
                type: int
                required: No
                choices:
                    (0, 'Unassigned'),
                    (1, 'Remaining'),
                    (2, 'In progress'),
                    (3, 'Complete'),
                    (4, 'Cancelled'),
                    (5, 'Postponed'),
            delayed:
                type: bool
                required: no
            task_type:
                type: string
                required: No
            deadline:
                type: timestamp
                required: No
            agent_id:
                type: int
                required: No
            manager_id:
                type: int
                required: No
            token:
                type: str
                required: No

        Sample response:
        ---
            [
                {
                    'id': task.id,
                    'title': task.title,
                    'status': task.status,
                    'deadline': str(task.deadline),
                    'task_type': task.task_type,
                    'agent_list': [],
                    'manager': 'Manager',
                    'manager_id': 12,
                    'delayed': false,
                    'address': task.address,
                    'point': {},
                },...
            ]

        """
        is_manager(request)
        task_manager_qf = task_filter(request)
        # paginator = LimitOffsetPagination
        offset = 0
        limit = DEF_LIMIT

        task_obj_list = task_list_qs(task_manager_qf)[offset:offset + limit]
        task_list = get_task_list(task_obj_list)

        return Response(task_list, status=200)