Esempio n. 1
0
    def _build_tree_nodes(self):
        # Applications
        # The draft status is excluded from the officer status list
        url = reverse_lazy('wl_dashboard:tables_applications_officer')
        result = []
        statuses = base.get_processing_statuses_but_draft()
        all_applications = Application.objects.filter(processing_status__in=[s[0] for s in statuses])
        all_applications_node = self._create_node('All applications', href=url,
                                                  count=all_applications.count())
        all_applications_node['state']['expanded'] = False
        for s_value, s_title in statuses:
            applications = all_applications.filter(processing_status=s_value)
            if applications.count() > 0:
                query = {
                    'application_status': s_value,
                }
                href = base.build_url(url, query)
                node = self._create_node(s_title, href=href, count=applications.count())
                self._add_node(all_applications_node, node)

        assigned_applications = all_applications.filter(assigned_officer=self.request.user)
        query = {
            'application_assignee': self.request.user.pk
        }
        assigned_applications_node = self._create_node('My assigned applications',
                                                       href=base.build_url(url, query),
                                                       count=assigned_applications.count())
        assigned_applications_node['state']['expanded'] = True
        for s_value, s_title in statuses:
            applications = assigned_applications.filter(processing_status=s_value)
            if applications.count() > 0:
                query.update({
                    'application_status': s_value
                })
                href = base.build_url(url, query)
                node = self._create_node(s_title, href=href, count=applications.count())
                self._add_node(assigned_applications_node, node)
        result.append(assigned_applications_node)

        on_behalf_pending_applications_count = \
            DataTableApplicationsOfficerOnBehalfView._get_proxy_applications(self.request.user).filter(
                DataTableApplicationsOfficerOnBehalfView.filter_status(
                    TableApplicationsOfficerView.STATUS_PENDING)).count()

        on_behalf_overdue_returns_count = DataTableReturnsOfficerOnBehalfView._get_proxy_returns(
            self.request.user).filter(
            DataTableReturnsOfficerOnBehalfView.filter_status(TableReturnsOfficerView.OVERDUE_FILTER)).count()

        total_on_behalf = on_behalf_pending_applications_count + on_behalf_overdue_returns_count
        if total_on_behalf > 0:
            url = reverse_lazy('wl_dashboard:tables_officer_onbehalf')
            on_behalf_node = self._create_node('My proxy page', href=url, count=total_on_behalf)
            query = {
                'show': 'applications',
                'application_status': 'pending'
            }
            href = base.build_url(url, query)
            on_behalf_applications_node = self._create_node('Pending Applications',
                                                            href=href,
                                                            count=on_behalf_pending_applications_count)

            query = {
                'show': 'returns',
            }
            href = base.build_url(url, query)
            on_behalf_returns_node = self._create_node('Overdue Returns',
                                                       href=href,
                                                       count=on_behalf_overdue_returns_count)
            self._add_node(on_behalf_node, on_behalf_applications_node)
            self._add_node(on_behalf_node, on_behalf_returns_node)
            on_behalf_node['state']['expanded'] = False
            result.append(on_behalf_node)

        result.append(all_applications_node)

        # Licences
        url = reverse_lazy('wl_dashboard:tables_licences_officer')
        all_licences_node = self._create_node('All licences', href=url, count=WildlifeLicence.objects.count())
        result.append(all_licences_node)

        # Returns
        url = reverse_lazy('wl_dashboard:tables_returns_officer')
        all_returns_node = self._create_node('All returns', href=url,
                                             count=Return.objects.exclude(status__in=['draft', 'future']).count())
        result.append(all_returns_node)

        return result
Esempio n. 2
0
    def _build_tree_nodes(self):
        # Applications
        # The draft status is excluded from the officer status list
        url = reverse_lazy('wl_dashboard:tables_applications_officer')
        result = []
        statuses = base.get_processing_statuses_but_draft()
        all_applications = Application.objects.filter(
            processing_status__in=[s[0] for s in statuses])
        # the next query param is necessary to avoid loading parameters from the session.
        query = {'show': 'applications'}
        all_applications_node = self._create_node(
            'All applications',
            href=base.build_url(url, query),
            count=all_applications.count())
        all_applications_node['state']['expanded'] = False
        for s_value, s_title in statuses:
            applications = all_applications.filter(processing_status=s_value)
            if applications.count() > 0:
                query = {
                    'application_status': s_value,
                }
                href = base.build_url(url, query)
                node = self._create_node(s_title,
                                         href=href,
                                         count=applications.count())
                self._add_node(all_applications_node, node)

        assigned_applications = all_applications.filter(
            assigned_officer=self.request.user)
        query = {'application_assignee': self.request.user.pk}
        assigned_applications_node = self._create_node(
            'My assigned applications',
            href=base.build_url(url, query),
            count=assigned_applications.count())
        assigned_applications_node['state']['expanded'] = True
        for s_value, s_title in statuses:
            applications = assigned_applications.filter(
                processing_status=s_value)
            if applications.count() > 0:
                query.update({'application_status': s_value})
                href = base.build_url(url, query)
                node = self._create_node(s_title,
                                         href=href,
                                         count=applications.count())
                self._add_node(assigned_applications_node, node)
        result.append(assigned_applications_node)

        on_behalf_pending_applications_count = \
            DataTableApplicationsOfficerOnBehalfView._get_proxy_applications(self.request.user).filter(
                DataTableApplicationsOfficerOnBehalfView.filter_status(
                    TablesApplicationsOfficerView.STATUS_PENDING)).count()

        on_behalf_overdue_returns_count = DataTableReturnsOfficerOnBehalfView._get_proxy_returns(
            self.request.user).filter(
                DataTableReturnsOfficerOnBehalfView.filter_status(
                    TablesReturnsOfficerView.OVERDUE_FILTER)).count()

        total_on_behalf = on_behalf_pending_applications_count + on_behalf_overdue_returns_count
        if total_on_behalf > 0:
            url = reverse_lazy('wl_dashboard:tables_officer_onbehalf')
            # to disable session data we pass a query parameter
            query = {'session': False}
            url = base.build_url(url, query)
            on_behalf_node = self._create_node('My proxy page',
                                               href=url,
                                               count=total_on_behalf)
            query = {'show': 'applications', 'application_status': 'pending'}
            href = base.build_url(url, query)
            on_behalf_applications_node = self._create_node(
                'Pending Applications',
                href=href,
                count=on_behalf_pending_applications_count)

            query = {
                'show': 'returns',
            }
            href = base.build_url(url, query)
            on_behalf_returns_node = self._create_node(
                'Overdue Returns',
                href=href,
                count=on_behalf_overdue_returns_count)
            self._add_node(on_behalf_node, on_behalf_applications_node)
            self._add_node(on_behalf_node, on_behalf_returns_node)
            on_behalf_node['state']['expanded'] = False
            result.append(on_behalf_node)

        result.append(all_applications_node)

        # Licences
        url = reverse_lazy('wl_dashboard:tables_licences_officer')
        query = {'show': 'licences'}
        url = base.build_url(url, query)
        all_licences_node = self._create_node(
            'All licences', href=url, count=WildlifeLicence.objects.count())
        result.append(all_licences_node)

        # Returns
        url = reverse_lazy('wl_dashboard:tables_returns_officer')
        query = {'show': 'returns'}
        url = base.build_url(url, query)
        all_returns_node = self._create_node(
            'All returns',
            href=url,
            count=Return.objects.exclude(
                status__in=['draft', 'future']).count())
        result.append(all_returns_node)

        return result