Esempio n. 1
0
 /**
  * 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;
 }