Hello, I'm trying to run this scripted field:
/* Calcula a multa assumida para tarefas cumpridas fora do prazo, considerando os dias se passaram desde o vencimento e a periodicidade da multa*/
if (doc['obrigacao_prazo_cumprimento'].size() <= 0){ // Se não houver prazo, retorna null
return 0;
}
if (doc['status_tarefa.keyword'].size() > 0 && doc['status_tarefa.keyword'].value == 'CONFIRMADO'){ // Faz o cálculo se a tarefa estiver pendente
def valor = 0;
def teto = 0;
def prazo = 0;
def confirmacao = 0;
if(doc['obrigacao_valor_da_multa'].size() > 0){
valor = doc['obrigacao_valor_da_multa'].value;
}
if(doc['obrigacao_teto_multa'].size() > 0){
teto = doc['obrigacao_teto_multa'].value;
}
if(doc['data_confirmado_tarefa'].size() > 0){
confirmacao = doc['data_confirmado_tarefa'].value.getMillis();// Data de confirmação
}
prazo = doc['obrigacao_prazo_cumprimento'].value.getMillis(); // Prazo da tarefa
ZoneId timeZone = ZoneId.of(ZoneId.SHORT_IDS.get('BET'));
LocalDate dataConfirmacao = LocalDateTime.ofInstant(Instant.ofEpochMilli(confirmacao),timeZone).toLocalDate();
LocalDate dataPrazo = LocalDateTime.ofInstant(Instant.ofEpochMilli(prazo),timeZone).toLocalDate();
def diff = ChronoUnit.DAYS.between(dataPrazo, dataConfirmacao); // diferença em dias
if (diff < 0) {return 0;} //Se não tiver passado do prazo, retorna 0
if (doc['obrigacao_periodicidade_multa.keyword'].size() > 0 && doc['obrigacao_periodicidade_multa.keyword'].value == 'DIÁRIA'){ // Periodicidade diária
LocalDate dia = LocalDateTime.ofInstant(Instant.ofEpochMilli(prazo),timeZone).toLocalDate();
def diaSemana;
def diasUteis = 0;
for(int i = 1; i <= diff; i++){ // Loop for que calcula quantidade de dias úteis passados
dia.plusDays(1); // Incrementa 1 dia
diaSemana = dia.getDayOfWeek().ordinal(); // Retorna numero que representa dia da semana
if(diaSemana != 1 && diaSemana != 7){ // 1 é domingo e 7 é sábado
diasUteis++;
}
}
valor = diasUteis * valor;
if(valor > teto){
valor = teto;
}
return valor;
}
if (doc['obrigacao_periodicidade_multa.keyword'].size() > 0 && doc['obrigacao_periodicidade_multa.keyword'].value == 'MENSAL'){ //Periodicidade mensal
diff = ChronoUnit.MONTHS.between(dataPrazo, dataConfirmacao);
return (valor * diff) + valor;
}
if (doc['obrigacao_periodicidade_multa.keyword'].size() > 0 && doc['obrigacao_periodicidade_multa.keyword'].value == 'SEMANAL'){ //Periodicidade semanal
diff = ChronoUnit.WEEKS.between(dataPrazo, dataConfirmacao);
return (valor * diff) + valor;
}
return valor;
}
return null
But it's giving this error when I choose to show 5 years or more.
{"type":"painless_error","reason":"The maximum number of statements that can be executed in a loop has been reached."}}}]},"status":400}
How can I fix?
Thanks