Non puoi selezionare più di 25 argomenti
Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
158 righe
5.8 KiB
158 righe
5.8 KiB
<? |
|
|
|
if (isset($this) && is_a($this,"gara") && isset($settings)) { |
|
$partecipanti = $this->getPartecipantiForAnomalia(); |
|
usort($partecipanti,"sortPartecipantiTotale"); |
|
if (!empty($partecipanti)) { |
|
$numero_partecipanti = count($partecipanti); |
|
$numSoglia = ceil($numero_partecipanti * 10 /100); |
|
$taglioAli = []; |
|
$i = 0; |
|
$contatore = 0; |
|
$punteggioAttuale = ""; |
|
while($i < $numSoglia) { |
|
$partecipante = $partecipanti[$contatore]; |
|
$taglioAli[] = $partecipante["codice"]; |
|
if ($punteggioAttuale != $partecipante["totale"]) { |
|
$punteggioAttuale = $partecipante["totale"]; |
|
$i++; |
|
} |
|
$contatore++; |
|
} |
|
if (isset($partecipanti[$contatore]) && $partecipanti[$contatore]["totale"] === $punteggioAttuale) { |
|
while($partecipanti[$contatore]["totale"] === $punteggioAttuale) { |
|
$partecipante = $partecipanti[$contatore]; |
|
$taglioAli[] = $partecipante["codice"]; |
|
$contatore++; |
|
} |
|
} |
|
$i = 0; |
|
$contatore = $numero_partecipanti -1; |
|
$punteggioAttuale = ""; |
|
while($i < $numSoglia) { |
|
$partecipante = $partecipanti[$contatore]; |
|
$taglioAli[] = $partecipante["codice"]; |
|
if ($punteggioAttuale != $partecipante["totale"]) { |
|
$punteggioAttuale = $partecipante["totale"]; |
|
$i++; |
|
} |
|
$contatore--; |
|
} |
|
if (isset($partecipanti[$contatore]) && $partecipanti[$contatore]["totale"] === $punteggioAttuale) { |
|
while($partecipanti[$contatore]["totale"] === $punteggioAttuale) { |
|
$partecipante = $partecipanti[$contatore]; |
|
$taglioAli[] = $partecipante["codice"]; |
|
$contatore--; |
|
} |
|
} |
|
reset($partecipanti); |
|
|
|
$somma = 0; |
|
$contatore = 0; |
|
foreach($partecipanti AS $partecipante) { |
|
if (in_array($partecipante["codice"],$taglioAli) === false) { |
|
$somma += $partecipante["totale"]; |
|
$contatore++; |
|
} |
|
} |
|
|
|
$media = $somma / $contatore; |
|
if (!$soloSoglia) { |
|
if ($arrotondamento) { |
|
$somma = number_format($somma,$decimali); |
|
$media = number_format($media,$decimali); |
|
} else { |
|
$somma = truncate($somma,$decimali); |
|
$media = truncate($media,$decimali); |
|
} |
|
} |
|
|
|
reset($partecipanti); |
|
|
|
$contatore = 0; |
|
$sommaSuperiore = 0; |
|
foreach($partecipanti AS $partecipante) { |
|
if (in_array($partecipante["codice"],$taglioAli) === false && $partecipante["totale"] > $media) { |
|
$sommaSuperiore += $partecipante["totale"]; |
|
$contatore++; |
|
} |
|
} |
|
$scarto_medio = ($sommaSuperiore - ($media * $contatore)) / $contatore; |
|
|
|
if (!$soloSoglia) { |
|
if ($arrotondamento) { |
|
$scarto_medio = number_format($scarto_medio,$decimali); |
|
} else { |
|
$scarto_medio = truncate($scarto_medio,$decimali); |
|
} |
|
} |
|
|
|
$somma = strval($somma); |
|
$perDecSomma = 0; |
|
if (strpos($somma,".")!==false) { |
|
$decimali_somma = explode(".",$somma); |
|
$decimali_somma = $decimali_somma[1]; |
|
$first = (int)substr($decimali_somma,0,1); |
|
$second = (int)substr($decimali_somma,1,1); |
|
$perDecSomma = $first * $second; |
|
} |
|
$soglia_anomalia = ($media + $scarto_medio); |
|
|
|
$ribasso_soglia = $scarto_medio * $perDecSomma / 100; |
|
if (!$soloSoglia) { |
|
if ($arrotondamento) { |
|
$ribasso_soglia = number_format($ribasso_soglia,$decimali); |
|
} else { |
|
$ribasso_soglia = truncate($ribasso_soglia,$decimali); |
|
} |
|
} |
|
|
|
if (empty($settings["interpretazione"]) || $settings["interpretazione"] == "M") { |
|
$soglia_anomalia -= $ribasso_soglia; |
|
} else if ($settings["interpretazione"] == "T") { |
|
$soglia_anomalia = $soglia_anomalia - (($soglia_anomalia * $ribasso_soglia) / 100); |
|
} |
|
|
|
if ($arrotondamento) { |
|
$soglia_anomalia = number_format($soglia_anomalia,$decimali); |
|
} else { |
|
$soglia_anomalia = truncate($soglia_anomalia,$decimali); |
|
} |
|
|
|
$esclusione_automatica = $this->getSogliaGara() == "sottosoglia"; |
|
|
|
$infoAnomalia = []; |
|
$infoAnomalia["somma"] = $somma; |
|
$infoAnomalia["media"] = $media; |
|
$infoAnomalia["scarto_medio"] = $scarto_medio; |
|
$infoAnomalia["decremento"] = $ribasso_soglia; |
|
$infoAnomalia["soglia"] = $soglia_anomalia; |
|
$infoAnomalia["esclusione_automatica"] = $esclusione_automatica; |
|
$infoAnomalia["riepilogo"] = "Anomalia calcolata ai sensi dell'allegato II.2 del D.Lgs 36/2023 - Metodo A c. 1 - Sommatoria: {$somma} - Media: {$media} - Scarto medio: {$scarto_medio} - Decremento: {$ribasso_soglia} - Soglia individuata: {$soglia_anomalia}"; |
|
$extraInfo = ["set-anomalia-{$this->round["codice"]}"=>json_encode($settings,JSON_PRETTY_PRINT),"info-anomalia-{$this->round["codice"]}"=>json_encode($infoAnomalia,JSON_PRETTY_PRINT)]; |
|
reset($partecipanti); |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "r_partecipanti_gare"; |
|
$salva->operazione = "UPDATE"; |
|
foreach($partecipanti AS $partecipante) { |
|
if ($partecipante["totale"] >= $soglia_anomalia) { |
|
$partecipante["anomalia"] = "S"; |
|
$partecipante["a_facoltativa"] = "N"; |
|
$partecipante["motivazione_anomalia"] = "Calcolo automatico"; |
|
if ($esclusione_automatica) { |
|
$partecipante["escluso"] = "S"; |
|
$partecipante["esclusione_automatica"] = "S"; |
|
$partecipante["motivazione"] = "Calcolo automatico anomalia"; |
|
} |
|
$salva->oggetto = $partecipante; |
|
$salva->save(); |
|
} |
|
} |
|
$errors = ""; |
|
} else { |
|
$errors = __("Nessun partecipante ammesso"); |
|
} |
|
} |
|
?>
|