def post(self, request, format=None): """ Creates a new service """ if request.user.is_admin: serializer = self.serializer_class(data=request.data) if serializer.is_valid(): # Getting serialized data request_data = serializer.data if not Service.objects.filter(name=request_data['name']): try: with transaction.atomic(): # Creating service service = Service() service.name = request_data['name'] service.category = Category.objects.get( pk=request_data['category']) service.cost_price = request_data['cost_price'] service.sale_price = request_data['sale_price'] if 'description' in request_data and request_data[ 'description']: service.description = request_data[ 'description'] service.save() return Response({"id": service.id}, status=status.HTTP_201_CREATED) except Exception as e: return Response( { "type": "internal_server_error", "detail": str(e) }, status=status.HTTP_500_INTERNAL_SERVER_ERROR) else: return Response({"type": "service_already_exist"}, status=status.HTTP_409_CONFLICT) else: return Response( { "type": "validation_error", "errors": serializer.errors }, status=status.HTTP_400_BAD_REQUEST) else: return Response({"type": "unauthorized"}, status=status.HTTP_401_UNAUTHORIZED)
def save(request): # Update service fields try: service_id = request.POST.get("id") if service_id != '0': service = Service.objects.get(id=service_id) else: service = Service() except Service.DoesNotExist: service = Service() service.name = request.POST['name'] service.escalate_after = request.POST['escalate_after'] service.retry = request.POST['retry'] service.notifications_disabled = request.POST.get("disable_notification", "off") == "on" service.send_resolve_enabled = request.POST.get( "send_resolve_notification", "off") == "on" if (request.POST['policy']): pol = SchedulePolicy.objects.get(id=request.POST['policy']) else: pol = None service.policy = pol # Save service try: service.save() except IntegrityError: messages.error(request, 'Service validation failed') if len(request.POST['id']) > 0: return HttpResponseRedirect( reverse('openduty.services.edit', None, [str(request.POST['id'])])) else: return HttpResponseRedirect(reverse('openduty.services.new')) return HttpResponseRedirect('/services/')