/** * Ritorna l'elenco di appartenenze passibili al pagamento di una quota in un dato anno * Se il volontario e' dimesso o non passibile al pagamento della quota, ritorna array vuoto * * @param int $anno (Opzionale) Anno di riferimento. Default = Anno attuale * @return array(Appartenenza) Lista di appartenenze. Se non passibile, lista vuota. */ public function appartenenzePassibiliQuota($anno = false) { global $conf; $anno = $anno ? (int) $anno : (int) date('Y'); $minimo = DT::createFromFormat('d/m/Y H:i', "1/1/{$anno} 00:00"); $massimo = DT::createFromFormat('d/m/Y H:i', "31/12/{$anno} 23:59"); $r = []; // Applica algoritmo pubblicato su // https://github.com/CroceRossaCatania/gaia/issues/1218#issuecomment-69459905 foreach ($this->storico() as $appartenenza) { // Se appartenenza fuori contesto temporale, termina esecuzione if (!$appartenenza->validoTra($minimo, $massimo)) { continue; } // Se non appartenenza valida, ignora if (in_array($appartenenza->stato, $conf['membro_invalido'])) { continue; } // Se non appartenenza valida scopo quota, ignora if (in_array($appartenenza->stato, $conf['membro_nonquota'])) { continue; } // Se appartenenza terminata con dimissione, termina esecuzione if (in_array($appartenenza->stato, $conf['membro_dimesso'])) { continue; } // In tutti gli altri casi, appartenenza legittima, passibile a pagamento quota per l'A.A. $r[] = $appartenenza; // Se ho registrato una quota per questa appartenenza, le appartenenze // precedenti non sono passibili di quota. if (Quota::conta([['appartenenza', $appartenenza->id], ['anno', $anno], ['pAnnullata', false, OP_NULL]])) { break; } } return $r; }