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' })
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)
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
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)