O técnico não deve ter permissão para alterar o status da solicitação para Aguardando Compra a menos que a solicitação esteja aprovada.
import sys, requests
import json,os
import datetime
################ Início da Definição do Método #############
# ------------------ Função para analisar a entrada do arquivo JSON da solicitação ----------------------
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
#----------- Função para obter o valor antigo do json diff PARA o formato V3 -------------------
# Retornará o valor antigo presente no 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("Nenhum valor presente no JSON Diff")
except:
print("Erro inesperado ao analisar o json diff"+diffJSON)
#------------ Construindo o objeto Json para atualizar a solicitação.---------
# data é o Json que terá o Nome/Valor do Campo que precisa ser atualizado na solicitação
# data = {"LEVEL":"TIER 1","PRIORITY":"High","IMPACT":"High"}
# É necessário passar os dados para actionPlugin_constructReqJSON para obter o json completo
# UPDATE, Negate são compatíveis com 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
#------------ Construindo o Json para a funcionalidade de retorno padrão.---------
# Use uma combinação das duas funções acima para construir o parâmetro data
# data = actionPlugin_AddNote("O ticket foi criado no JIRA e as informações foram preenchidas no SDP")
def actionPlugin_constructReqJSON(data, message="Solicitação atualizada com sucesso"):
json_data = '''{
"message":"''' +message + '''",
"result":"success",
"operation":[''' + data + ''']
}'''
return json_data
################ Fim da Definição do Método #############
# O arquivo que contém os detalhes da solicitação será armazenado como objeto json e o caminho do arquivo será passado como argumento para o script, substituindo o argumento $COMPLETE_JSON_FILE
file_Path = sys.argv[1]
# Carrega o conteúdo json que contém os detalhes da solicitação (Alterado)
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":
#Construindo o objeto Json para atualizar a solicitação.
#A seguir está um exemplo da estrutura JSON para atualizar uma solicitação.
'''{
"result": "success",
"operation": [
{
"OPERATIONNAME": "NEGATE",
"REASON": "Motivo da negação"
}
]
}'''
message = "Não é possível alterar o status da solicitação para "+status+" a menos que a solicitação esteja aprovada"
#Criando o Json que terá o Nome/Valor do Campo que precisa ser atualizado na solicitação
updatejson = actionPlugin_UpdateRequest("","NEGATE",additionalParams='''"REASON":"'''+message+'''"''')
returnJson = actionPlugin_constructReqJSON(updatejson,message)
#Retornando o objeto Json construído
print(returnJson)
elif appr_status!=None and appr_status=="Pending Approval":
#A seguir está um exemplo da estrutura JSON para atualizar uma solicitação.
'''{
"result": "success",
"message": "Script Python de exemplo",
"operation": [
{
"OPERATIONNAME": "UPDATE",
"INPUT_DATA": [
{
"request": {
"urgency": {
"name": "High"
},
"group": {
"name": "Network"
},
"priority": {
"name": "High"
}
}
}
]
}
]
}'''
message = "Defina a prioridade como Alta quando o status de aprovação estiver como Aprovação Pendente"
#Criando o Json que terá o Nome/Valor do Campo que precisa ser atualizado na solicitação.
updatejson = actionPlugin_UpdateRequest('''{"priority":{"name":"High"}}''',"UPDATE","request")
returnJson = actionPlugin_constructReqJSON(updatejson,message)
#Retornando o objeto Json construído.
print(returnJson)
else :
print("Nenhuma alteração encontrada") # Esta mensagem será exibida no Histórico se nenhuma das condições no script for atendida.









