예제 #1
0
    def test_create_disaster(self):
        attributes = dict(name=self.disaster_type, locations=[self.district], description="Big Flood",
                          date="2014-12-01", status="Assessment")
        Disaster(**attributes).save()
        disasters = Disaster.objects(name=self.disaster_type, date="2014-12-01", status="Assessment")

        self.assertEqual(1, disasters.count())
예제 #2
0
class DisasterListCreateView(ListCreateAPIView):
    model = Disaster
    serializer_class = DisasterSerializer
    queryset = Disaster.objects()
    permission_classes = [
        Or(build_permission_class('dms.can_manage_disasters'), IsGetRequest)
    ]

    def get_queryset(self):
        query_params = Disaster.map_kwargs_to_db_params(
            self.request.GET.dict())

        location_queried = self.request.GET.get('location', None)
        if not location_queried:
            if self.request.user.has_perm('dms.can_view_disasters'):
                user_profile = UserProfile.objects(
                    user=self.request.user).first()
                user_group = self.request.user.group.name
                if user_profile and user_group in getattr(
                        settings, 'DISTRICT_GROUPS', []):
                    user_locations = get_user_district_locations(
                        self.request.user)
                    query_params.update({'locations__in': user_locations})
                else:
                    if not self.request.user.has_perm(
                            'dms.can_manage_disasters'):
                        user_location = user_profile.location.id
                        query_params.update({'locations__in': [user_location]})

        return Disaster.objects(**query_params)
예제 #3
0
 def _filter_disaster_type(cls, _queryset, kwargs):
     if kwargs.get('disaster_type', None):
         from dms.models.disaster import Disaster
         disasters = Disaster.objects(name=kwargs['disaster_type'])
         if disasters:
             return _queryset.filter(disaster__in=disasters)
         return _queryset.none()
     return _queryset
예제 #4
0
class DisasterView(MongoRetrieveUpdateView):
    model = Disaster
    serializer_class = DisasterSerializer
    queryset = Disaster.objects()
    permission_classes = [
        Or(build_permission_class('dms.can_manage_disasters'))
    ]

    def post(self, request, *args, **kwargs):
        return self.patch(request, *args, **kwargs)
예제 #5
0
    def test_create_disaster(self):
        attributes = dict(name=self.disaster_type,
                          locations=[self.district],
                          description="Big Flood",
                          date="2014-12-01",
                          status="Assessment")
        Disaster(**attributes).save()
        disasters = Disaster.objects(name=self.disaster_type,
                                     date="2014-12-01",
                                     status="Assessment")

        self.assertEqual(1, disasters.count())
예제 #6
0
    def get_queryset(self):
        query_params = Disaster.map_kwargs_to_db_params(self.request.GET.dict())

        location_queried = self.request.GET.get("location", None)
        if not location_queried:
            if self.request.user.has_perm("dms.can_view_disasters"):
                user_profile = UserProfile.objects(user=self.request.user).first()
                user_group = self.request.user.group.name
                if user_profile and user_group in getattr(settings, "DISTRICT_GROUPS", []):
                    user_locations = get_user_district_locations(self.request.user)
                    query_params.update({"locations__in": user_locations})
                else:
                    if not self.request.user.has_perm("dms.can_manage_disasters"):
                        user_location = user_profile.location.id
                        query_params.update({"locations__in": [user_location]})

        return Disaster.objects(**query_params)
예제 #7
0
    def get_queryset(self):
        query_params = Disaster.map_kwargs_to_db_params(
            self.request.GET.dict())

        location_queried = self.request.GET.get('location', None)
        if not location_queried:
            if self.request.user.has_perm('dms.can_view_disasters'):
                user_profile = UserProfile.objects(
                    user=self.request.user).first()
                user_group = self.request.user.group.name
                if user_profile and user_group in getattr(
                        settings, 'DISTRICT_GROUPS', []):
                    user_locations = get_user_district_locations(
                        self.request.user)
                    query_params.update({'locations__in': user_locations})
                else:
                    if not self.request.user.has_perm(
                            'dms.can_manage_disasters'):
                        user_location = user_profile.location.id
                        query_params.update({'locations__in': [user_location]})

        return Disaster.objects(**query_params)
예제 #8
0
class CSVDisasterView(ListCreateAPIView):
    model = Disaster
    serializer_class = CSVDisasterSerializer
    queryset = Disaster.objects()
    permission_classes = [
        Or(build_permission_class('dms.can_manage_disasters'), IsGetRequest)
    ]
    renderer_classes = [
        CSVRenderer,
    ] + api_settings.DEFAULT_RENDERER_CLASSES

    def get_queryset(self):
        params = self._filter_params(self.request)
        queryset = Disaster.objects.filter(**params)
        return queryset.order_by('-created_at')

    def _filter_params(self, req):
        start_date = req.GET.get('from')
        end_date = req.GET.get('to')
        status = req.GET.get('status')
        params = {}

        if start_date:
            if not self._undefined(start_date):
                params.update({'date__gte': start_date})

        if end_date:
            if not self._undefined(end_date):
                params.update({'date__lte': end_date})

        if status:
            if not self._undefined(status):
                params.update({'status': status})

        return params

    def _undefined(self, strValue):
        return strValue == u'undefined'