示例#1
0
    def profile(self, request):
        if self.request.user:
            if request.user.aerosimple_user.airport is None:
                request.user.aerosimple_user.airport = request.user.aerosimple_user.authorized_airports.first(
                )
                request.user.aerosimple_user.save()
            airport = request.user.aerosimple_user.airport
            if airport:
                DynamoDbModuleUtility.fetch_module_permissions(airport.code)
            return Response(
                {
                    'items':
                    AerosimpleMobileProfileSerializer(
                        self.request.user.aerosimple_user).data,
                    'status': {
                        'code': status.HTTP_200_OK,
                        'message': 'success'
                    }
                },
                status=status.HTTP_200_OK)

        return Response(status={
            'code': status.HTTP_401_UNAUTHORIZED,
            'message': 'Unauthorized'
        })
示例#2
0
    def profile(self, request):
        if self.request.user:
            if request.user.aerosimple_user.airport is None:
                request.user.aerosimple_user.airport = request.user.aerosimple_user.authorized_airports.first(
                )
                request.user.aerosimple_user.save()
            airport = request.user.aerosimple_user.airport
            if airport:
                DynamoDbModuleUtility.fetch_module_permissions(airport.code)
            return Response(AerosimpleUserSerializer(
                self.request.user.aerosimple_user).data,
                            status=status.HTTP_200_OK)

        return Response(status=status.HTTP_401_UNAUTHORIZED)
示例#3
0
    def create(self, request):
        inspection_data = request.data
        task_data = inspection_data.pop('task', None)

        # While creating new parent inspection check if limit has reached...
        inspection_count = InspectionParent.objects.filter(
            airport=request.user.aerosimple_user.airport).count()
        max_allowed_count = DynamoDbModuleUtility.return_module_attribute(
            request.user.aerosimple_user.airport.code, 'inspections',
            'max_inspections')
        if not settings.AIRPORT_PLAN_ENABLE:
            max_allowed_count = 100
        if not max_allowed_count:
            return Response(
                {'error': 'Configuration for airport not set'},
                status=status.HTTP_400_BAD_REQUEST,
            )
        if int(max_allowed_count) <= inspection_count:
            return Response(
                {'error': 'Inspection count limit reached'},
                status=status.HTTP_400_BAD_REQUEST,
            )

        try:
            with transaction.atomic():
                if task_data is not None:
                    task_data['name'] = inspection_data['title']
                    task_data['label'] = 'inspections'
                    task_data['due_date'] = timezone.now().strftime(
                        "%Y-%m-%d%z")
                    task_data['end_recurring_period'] = task_data.get(
                        'rule', {}).get('endPeriod', None)
                    task = create_task(task_data, request.user)
                    inspection_data['task'] = task.id
                serializer = self.get_serializer(data=inspection_data)
                serializer.is_valid(raise_exception=True)
                self.perform_create(serializer)
                headers = self.get_success_headers(serializer.data)
                return Response(serializer.data,
                                status=status.HTTP_201_CREATED,
                                headers=headers)
        except Exception:
            # Any exception should be handled by DRF, like a normal action
            raise
示例#4
0
    def partial_update(self, request, pk=None):
        inspection = self.get_object()

        task_data = request.data.pop('task', None)

        st = request.data.pop('status', None)

        data = request.data
        # IF INSPECTION IS FROM A TEMPLATE WE MUST BUILD THE
        # MERGED SCHEMA WITH AIRPORT CHANGES AND TEMPLATE FIELDS
        if inspection.template:
            data['schema'] = build_schema(request.data['airport_changes'],
                                          inspection.template)

        serializer = InspectionEditSerializer(inspection,
                                              data=request.data,
                                              context={'request': request})
        title = request.data.pop('title', None)
        additionalInfo = request.data.pop('additionalInfo', None)
        icon = request.data.pop('icon', None)

        shouldUpdateInspectionParent = False
        if serializer.is_valid():
            serializer.save()
            v = serializer.instance.versions.latest('id')
            if st == DRAFT:
                shouldUpdateInspectionParent = not serializer.instance.versions.filter(
                    status=PUBLISHED).exists()
                if v.status == DRAFT:
                    v.schema = data['schema']
                    v.title = title
                    v.icon = icon
                    v.additionalInfo = additionalInfo
                    v.save()
                else:
                    newv = Inspection()
                    newv.schema = data['schema']
                    newv.form = inspection
                    newv.title = title
                    newv.icon = icon
                    newv.additionalInfo = additionalInfo
                    newv.save()
            else:
                # check for max
                inspection_count = InspectionParent.objects.filter(
                    airport=request.user.aerosimple_user.airport).count()
                max_allowed_count = DynamoDbModuleUtility.return_module_attribute(
                    request.user.aerosimple_user.airport.code, 'inspections',
                    'max_inspections')
                if not settings.AIRPORT_PLAN_ENABLE:
                    max_allowed_count = 100
                if not max_allowed_count:
                    return Response(
                        {'error': 'Configuration for airport not set'},
                        status=status.HTTP_400_BAD_REQUEST,
                    )
                if int(max_allowed_count) <= inspection_count:
                    return Response(
                        {'error': 'Inspection count limit reached'},
                        status=status.HTTP_400_BAD_REQUEST,
                    )
                shouldUpdateInspectionParent = True
                if v.status == DRAFT:
                    v.schema = data['schema']
                    v.status = PUBLISHED
                    v.title = title
                    v.icon = icon
                    v.additionalInfo = additionalInfo
                    v.save()
                else:
                    newv = Inspection()
                    newv.schema = data['schema']
                    newv.form = inspection
                    newv.status = PUBLISHED
                    newv.title = title
                    newv.icon = icon
                    newv.additionalInfo = additionalInfo
                    newv.save()

            if shouldUpdateInspectionParent:
                inspection.title = title
                inspection.icon = icon
                inspection.additionalInfo = additionalInfo
                if 'airport_changes' in data:
                    inspection.airport_changes = data['airport_changes']

                # If the parent is updated, then the task has to be updated
                # as well
                if task_data is not None:
                    task_data['name'] = title
                    task_data['label'] = 'inspections'
                    task_data['due_date'] = timezone.now().strftime(
                        "%Y-%m-%d%z")
                    task_data['end_recurring_period'] = task_data.get(
                        'rule', {}).get('endPeriod', None)

                    task = create_task(task_data, request.user)
                    if inspection.task is not None:
                        inspection.task.delete()
                    inspection.task = task

                inspection.save()

            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 def check(code):
     return DynamoDbModuleUtility.has_sources_permissions(code, 'notams')
 def has_permission(self, request, view):
     if request.user and request.user.aerosimple_user and request.user.aerosimple_user.airport:
         return DynamoDbModuleUtility.has_module_permissions(
             request.user.aerosimple_user.airport.code, 'assets')
     return False
 def get_airport_permissions(self, obj):
     return DynamoDbModuleUtility.get_plan_data(obj.airport.code)