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.
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.