Caso de uso

Al técnico no se le debe permitir cambiar el estado de la solicitud a En espera de compra a menos que la solicitud esté aprobada.
 

A continuación se muestra la lista de paquetes utilizados en el script

 

import sys, requests

import json,os

import datetime

 

################ Inicio de la definición de métodos #############


# ------------------ Función para analizar la entrada del archivo JSON de la solicitud ----------------------


def read_file(file_Path, key=None):

    with open(file_Path) as data_file:

        data = json.load(data_file)

    if key==None:

        return data

    else:

        dataObj = data[key]

        return dataObj



#----------- Función para obtener el valor anterior del JSON diff PARA el formato V3 -------------------

# Devolverá el valor anterior presente en el JSON diff


def getValueFromDiffJSON_V3(diffJSON,key):


    try:

        if key in diffJSON['old']:

            if(isinstance(diffJSON['old'][key],dict)):

                return diffJSON['old'][key]['name']

            else:

                return diffJSON['old'][key]

        else:

                print("No hay ningún valor presente en el JSON diff")

    except:

        print("Error inesperado al analizar el JSON diff"+diffJSON)


#------------ Construcción del objeto JSON para actualizar la solicitud. ---------


# data es el JSON que tendrá el nombre/valor del campo que debe actualizarse en la solicitud

# data = {"LEVEL":"TIER 1","PRIORITY":"High","IMPACT":"High"}

# Es necesario pasar los datos a actionPlugin_constructReqJSON para obtener el JSON completo

# UPDATE y Negate son compatibles con V3.


def actionPlugin_UpdateRequest(data,OperationName="EDIT_REQUEST",module=None,additionalParams=""):

     if module is not None:

         temp={}

         temp[module]=json.loads(data)

         tempString=json.dumps(temp)

         data=tempString

     json_data = '''{

         "INPUT_DATA": [''' + data +    '''],

         "OPERATIONNAME": "''' + OperationName + '''",

        ''' + additionalParams + '''

     },'''

     return json_data


#------------ Construcción del JSON para la funcionalidad de retorno predeterminada. ---------


# Utilice una combinación de las dos funciones anteriores para construir el parámetro data

# data = actionPlugin_AddNote("El ticket se ha creado en JIRA y la información se ha completado en SDP")


def actionPlugin_constructReqJSON(data, message="Solicitud actualizada correctamente"):

     json_data = '''{

              "message":"''' +message + '''",

              "result":"success",

              "operation":[''' + data + ''']

              }''' 

     return json_data



################ Fin de la definición de métodos #############



# El archivo que contiene los detalles de la solicitud se almacenará como un objeto JSON y la ruta del archivo se pasará como argumento al script reemplazando el argumento $COMPLETE_JSON_FILE

file_Path = sys.argv[1]

# Cargar el contenido JSON que contiene los detalles de la solicitud (modificados)

requestObj = read_file(file_Path,'request')

diffObj = read_file(file_Path,'diff')

status=requestObj['status']['name']

appr_status=requestObj['approval_status']['name']



if  appr_status!=None and appr_status!="Approved" and status=="Waiting For Purchase":

        

     #Construcción del objeto JSON para actualizar la solicitud.

    

    #A continuación se muestra un ejemplo de la estructura JSON para actualizar una solicitud.

     '''{

         "result": "success",

         "operation": [

         {

              "OPERATIONNAME": "NEGATE",

             "REASON": "Motivo de rechazo"

              }

         ]

         }'''


     message = "No se puede cambiar el estado de la solicitud a "+status+" a menos que la solicitud esté aprobada"

     #Creación del JSON que tendrá el nombre/valor del campo que debe actualizarse en la solicitud

     updatejson = actionPlugin_UpdateRequest("","NEGATE",additionalParams='''"REASON":"'''+message+'''"''')

     returnJson = actionPlugin_constructReqJSON(updatejson,message)

     #Retorno del objeto JSON construido

     print(returnJson)


elif  appr_status!=None and appr_status=="Pending Approval":


    #A continuación se muestra un ejemplo de la estructura JSON para actualizar una solicitud.


     '''{

       "result": "success",

       "message": "Script de Python de ejemplo",

       "operation": [

         {

           "OPERATIONNAME": "UPDATE",

           "INPUT_DATA": [

             {

               "request": {

                 "urgency": {

                   "name": "High"

                 },

                 "group": {

                   "name": "Network"

                 },

                 "priority": {

                   "name": "High"

                 }

               }

             }

           ]

         }

       ]

     }'''


     message = "Establecer la prioridad en Alta cuando el estado de aprobación sea Aprobación pendiente"

     #Creación del JSON que tendrá el nombre/valor del campo que debe actualizarse en la solicitud.

     updatejson = actionPlugin_UpdateRequest('''{"priority":{"name":"High"}}''',"UPDATE","request")

     returnJson = actionPlugin_constructReqJSON(updatejson,message)

     #Retorno del objeto JSON construido.

     print(returnJson)


else :

     print("No se encontraron cambios") # Este mensaje se imprimirá en el historial si no se cumple ninguna de las condiciones del script.

 

 

Con la confianza de las mejores organizaciones del mundo

Brindemos un mejor soporte juntos, más rápido y más fácil