function crea_quadro_disp($id_data_inizio_tab_disp, $num_colonne_tab_disp, $mostra_quadro_disp, $mostra_num_liberi, $app_consentito, $app_consentito_sett, $app_regola2_orig, $tipo_periodi, $numero_tariffe, $nome_tariffa, $dati_app, $prenota_in_app_sett, $app_orig_prenota_id, $tableperiodi, $allinea_disp = "", $dati_tariffe = "") { global $c_sfondo_tab_disp, $c_inisett_tab_disp, $c_libero_tab_disp, $c_occupato_tab_disp, $aper_font_tab_disp, $chiu_font_tab_disp, $fr_persone, $fr_persona, $nome_mese, $colonna_destra_tab_disp, $tablepersonalizza, $id_utente, $anno; if ($tipo_periodi == "s") { $colspan = 14; } else { $colspan = 2; } $num_raggr = 0; unset($nome_raggr); unset($app_ric_raggr); unset($tipotariffa); unset($num_app_ric_raggr); if ($mostra_quadro_disp == "app") { $mostra_num_liberi = "NO"; ksort($dati_app['maxocc']); reset($dati_app['maxocc']); while (list($key, $val) = each($dati_app['maxocc'])) { if ($app_consentito[$key] == "SI") { $app_ric_raggr[$num_raggr] = $key; $nome_raggr[$num_raggr] = $key; $num_raggr++; } # fine if ($app_consentito[$numapp] == "SI") } # fine while (list($key, $val) = each($dati_app['maxocc'])) } # fine if ($mostra_quadro_disp == "app") if ($mostra_quadro_disp == "reg2") { for ($numtariffa = 1; $numtariffa <= $numero_tariffe; $numtariffa++) { if ($app_regola2_orig[$numtariffa]) { $app_regola2 = explode(",", $app_regola2_orig[$numtariffa]); for ($num1 = 0; $num1 < count($app_regola2); $num1++) { if ($app_consentito[$app_regola2[$num1]] == "SI") { $app_ric_raggr[$num_raggr] .= "{$app_regola2[$num1]},"; } } if ($app_ric_raggr[$num_raggr]) { $app_ric_raggr[$num_raggr] = substr($app_ric_raggr[$num_raggr], 0, -1); $nome_raggr[$num_raggr] = str_replace(" ", " ", $nome_tariffa[$numtariffa]); $tipotariffa[$num_raggr] = "tariffa{$numtariffa}"; $num_raggr++; } # fine if ($app_ric_raggr[$num_raggr]) } # fine if ($app_regola2_orig[$numtariffa]) } # fine for $numtariffa } # fine if ($mostra_quadro_disp == "reg2") if ($mostra_quadro_disp == "pers") { asort($dati_app['maxocc']); reset($dati_app['maxocc']); $ultime_persone_casa = "vuoto"; while (list($key, $val) = each($dati_app['maxocc'])) { $persone_casa = $val; if ($persone_casa != $ultime_persone_casa) { if ($app_ric_raggr[$num_raggr]) { $app_ric_raggr[$num_raggr] = substr($app_ric_raggr[$num_raggr], 0, -1); if ($ultime_persone_casa) { if ($ultime_persone_casa == 1) { $nome_raggr[$num_raggr] = $ultime_persone_casa . " " . $fr_persona; } else { $nome_raggr[$num_raggr] = $ultime_persone_casa . " " . $fr_persone; } } else { $nome_raggr[$num_raggr] = "? {$fr_persone}"; } $num_raggr++; } # fine if ($app_ric_raggr[$num_raggr]) $ultime_persone_casa = $persone_casa; } # fine if ($persone_casa != $ultimepersone_casa) if ($app_consentito[$key] == "SI") { $app_ric_raggr[$num_raggr] .= "{$key},"; } } # fine while (list($key, $val) = each($dati_app[maxocc])) if ($app_ric_raggr[$num_raggr]) { $app_ric_raggr[$num_raggr] = substr($app_ric_raggr[$num_raggr], 0, -1); if ($ultime_persone_casa) { if ($ultime_persone_casa == 1) { $nome_raggr[$num_raggr] = $ultime_persone_casa . " " . $fr_persona; } else { $nome_raggr[$num_raggr] = $ultime_persone_casa . " " . $fr_persone; } } else { $nome_raggr[$num_raggr] = "? {$fr_persone}"; } $num_raggr++; } # fine if ($app_ric_raggr[$num_raggr]) } # fine if ($mostra_quadro_disp == "pers") $righe_tab_disp = ""; for ($num1 = 0; $num1 < $num_raggr; $num1++) { if ($app_ric_raggr[$num1]) { $righe_tab_disp .= "<tr><td style=\"text-align: right;\">{$aper_font_tab_disp}" . $nome_raggr[$num1] . "{$chiu_font_tab_disp}</td>"; $max_app_liberi = explode(",", $app_ric_raggr[$num1]); $max_app_liberi = count($max_app_liberi); $app_ric_colonna = "," . $app_ric_raggr[$num1] . ","; for ($num2 = 0; $num2 < $num_colonne_tab_disp; $num2++) { $id_periodo = $id_data_inizio_tab_disp + $num2; $num_app_liberi = $max_app_liberi; if ($app_consentito_sett[",attivo,"] == "SI") { if ($num2 == 0) { $app_ric_col_vett = explode(",", $app_ric_raggr[$num1]); $num_app_ric_col = count($app_ric_col_vett); } # fine if ($num2 == 0) $app_ric_colonna = "," . $app_ric_raggr[$num1] . ","; for ($num3 = 0; $num3 < $num_app_ric_col; $num3++) { if ($app_consentito_sett[$app_ric_col_vett[$num3]][$id_periodo] != "SI") { $app_ric_colonna = str_replace("," . $app_ric_col_vett[$num3] . ",", ",", $app_ric_colonna); $num_app_liberi--; } # fine if ($app_consentito_sett[$app_ric_col_vett[$num3]][$id_periodo] != "SI") } # fine for $num3 } # fine if ($app_consentito_sett[",attivo,"] == "SI") $pren_pres_in_lista = ""; $lista_prenota_periodo = ""; $num_lista_pren_per = 0; lista_prenota_periodo($id_periodo, $id_periodo, $dati_app, $prenota_in_app_sett, $pren_pres_in_lista, $lista_prenota_periodo, $num_lista_pren_per); for ($num3 = 0; $num3 < $num_lista_pren_per; $num3++) { if (str_replace("," . $app_orig_prenota_id[$lista_prenota_periodo[$num3]] . ",", "", $app_ric_colonna) != $app_ric_colonna) { $num_app_liberi--; } } # fine for $num3 if ($mostra_quadro_disp == "reg2" and $dati_tariffe and $dati_tariffe[$tipotariffa[$num1]]['chiusa'][$id_periodo]) { $num_app_liberi = 0; } if ($num_app_liberi > 0) { $color = $c_libero_tab_disp; } else { $color = $c_occupato_tab_disp; } if ($num_app_liberi > 0 and $mostra_num_liberi == "SI") { $val_liberi = $num_app_liberi; } else { $val_liberi = " "; } if ($num2 == 0 and $allinea_disp == "SI") { $colspan_v = $colspan / 2; } else { $colspan_v = $colspan; } $righe_tab_disp .= "<td style=\"background-color: {$color};\" colspan=\"{$colspan_v}\">{$aper_font_tab_disp}{$val_liberi}{$chiu_font_tab_disp}</td>"; } # fine for $num2 if ($colonna_destra_tab_disp != "NO") { $righe_tab_disp .= "<td>{$aper_font_tab_disp}" . $nome_raggr[$num1] . "{$chiu_font_tab_disp}</td></tr>"; } else { $righe_tab_disp .= "</tr>"; } } # fine if ($app_ric_raggr[$num1]) } # fine for $num1 if ($righe_tab_disp) { if ($tipo_periodi == "s") { $ripeti_giorni = 7; } else { $ripeti_giorni = 1; if (!$id_utente) { $id_utente_gio = 1; } else { $id_utente_gio = $id_utente; } $giorno_vedi_ini_sett = esegui_query("select valpersonalizza_num from {$tablepersonalizza} where idpersonalizza = 'giorno_vedi_ini_sett{$anno}' and idutente = '{$id_utente_gio}'"); if (numlin_query($giorno_vedi_ini_sett) == 1) { $giorno_vedi_ini_sett = risul_query($giorno_vedi_ini_sett, 0, 'valpersonalizza_num'); } else { $giorno_vedi_ini_sett = 0; } } # fine else if ($tipo_periodi == "s") $ultimo_mese = ""; $num_col_mese = 0; $riga_mese = "<tr><td rowspan=\"2\">{$aper_font_tab_disp} {$chiu_font_tab_disp}</td>"; $riga_giorni = "<tr>"; for ($num1 = 0; $num1 < $num_colonne_tab_disp + 1; $num1++) { if ($allinea_disp != "SI" or $num1 != $num_colonne_tab_disp) { if ($num1 != $num_colonne_tab_disp) { $id_periodo = $id_data_inizio_tab_disp + $num1; } else { $id_periodo = $id_data_inizio_tab_disp + $num1 - 1; } $riga_periodo = esegui_query("select * from {$tableperiodi} where idperiodi = '{$id_periodo}'"); if ($num1 != $num_colonne_tab_disp) { $inizio_periodo = risul_query($riga_periodo, 0, 'datainizio'); } else { $inizio_periodo = risul_query($riga_periodo, 0, 'datafine'); } $inizio_periodo = explode("-", $inizio_periodo); $g_inizio_periodo = $inizio_periodo[2]; $m_inizio_periodo = $inizio_periodo[1]; $a_inizio_periodo = $inizio_periodo[0]; if ($num1 == $num_colonne_tab_disp) { $ripeti_giorni = 1; } for ($num2 = 0; $num2 < $ripeti_giorni; $num2++) { $timestamp_periodo = mktime(0, 0, 0, $m_inizio_periodo, $g_inizio_periodo + $num2, $a_inizio_periodo); $g_mostra = date("d", $timestamp_periodo); $m_mostra = date("m", $timestamp_periodo); if ($ultimo_mese != $m_mostra) { if ($ultimo_mese) { $a_mostra = date("Y", mktime(0, 0, 0, $m_inizio_periodo, $g_inizio_periodo + $num2 - 1, $a_inizio_periodo)); $riga_mese .= "<td colspan=\"{$num_col_mese}\">{$aper_font_tab_disp}"; if ($num_col_mese > 7) { $riga_mese .= $nome_mese[$ultimo_mese] . " {$a_mostra}"; } else { $riga_mese .= " "; } $riga_mese .= "{$chiu_font_tab_disp}</td>"; $num_col_mese = 0; } # fine if ($ultimo_mese) $ultimo_mese = $m_mostra; } # fine if ($ultimo_mese != $m_mostra) if (($num1 != 0 or $num2 != 0) and $num1 != $num_colonne_tab_disp) { $num_col_mese = $num_col_mese + 2; } else { $num_col_mese++; } $bgcolor = ""; if ($tipo_periodi != "s") { $giorno_sett_corr = date("w", $timestamp_periodo); if ($giorno_sett_corr == $giorno_vedi_ini_sett) { $bgcolor = "{$c_inisett_tab_disp}"; } } else { if ($num2 == 0) { $bgcolor = "{$c_inisett_tab_disp}"; } } $riga_giorni .= "<td"; if ($bgcolor) { $riga_giorni .= " style=\"background-color: {$bgcolor};\""; } if (($num1 != 0 or $num2 != 0) and $num1 != $num_colonne_tab_disp) { $riga_giorni .= " colspan=2"; } $riga_giorni .= ">{$aper_font_tab_disp}{$g_mostra}{$chiu_font_tab_disp}</td>"; } # fine for $num2 } # fine if ($allinea_disp != "SI" or $num1 != $num_colonne_tab_disp) } # fine for $num1 $a_mostra = date("Y", mktime(0, 0, 0, $m_inizio_periodo, $g_inizio_periodo + $num2 - 1, $a_inizio_periodo)); $riga_mese .= "<td colspan=\"{$num_col_mese}\">{$aper_font_tab_disp}"; if ($num_col_mese > 6) { $riga_mese .= $nome_mese[$ultimo_mese] . " {$a_mostra}"; } else { $riga_mese .= " "; } if ($colonna_destra_tab_disp != "NO") { $riga_mese .= "{$chiu_font_tab_disp}</td><td rowspan=\"2\">{$aper_font_tab_disp} {$chiu_font_tab_disp}</td></tr>"; } else { $riga_mese .= "{$chiu_font_tab_disp}</td></tr>"; } $riga_giorni .= "</tr>"; $righe_tab_disp = "{$riga_mese}\n{$riga_giorni}\n{$righe_tab_disp}"; } # fine if ($righe_tab_disp) return $righe_tab_disp; }
function liberasettimane($idinizio, $idfine, &$limiti_var, $anno, &$fatto, &$appartamento, $profondita, $app_richiesti, &$app_prenota_id, &$app_orig_prenota_id, &$inizio_prenota_id, &$fine_prenota_id, &$app_assegnabili_id, &$prenota_in_app_sett, &$dati_app, $nome_tab_prenota = "prenota") { global $debug; if (@is_array($app_richiesti) and $app_richiesti[',numero,']) { $app_richiesti_vett = $app_richiesti; $idinizio_vett = $idinizio; $idfine_vett = $idfine; if (@is_array($appartamento)) { $appartamento_vett = $appartamento; } if (!$app_richiesti_vett['id']) { $app_richiesti_vett['id'] = 1; $limiti_var['n_ini'] = ""; $limiti_var['n_fine'] = ""; for ($num1 = 1; $num1 <= $app_richiesti_vett[',numero,']; $num1++) { if (!$limiti_var['n_ini'] or $limiti_var['n_ini'] > $idinizio_vett[$num1]) { $limiti_var['n_ini'] = $idinizio_vett[$num1]; } if (!$limiti_var['n_fine'] or $limiti_var['n_fine'] < $idfine_vett[$num1]) { $limiti_var['n_fine'] = $idfine_vett[$num1]; } } # fine for $num1 } else { $app_richiesti_vett['id']++; $limiti_var['n_ini'] = $idinizio_vett[$app_richiesti_vett['id']]; $limiti_var['n_fine'] = $idfine_vett[$app_richiesti_vett['id']]; } # fine else if (!$app_richiesti_vett['id']) unset($app_richiesti); if ($app_richiesti_vett[$app_richiesti_vett['id']] != ",tutti,") { $vett_app = explode(",", $app_richiesti_vett[$app_richiesti_vett['id']]); $n_vett_app = count($vett_app); for ($num1 = 0; $num1 < $n_vett_app; $num1++) { $app_richiesti[$vett_app[$num1]] = "SI"; } } # fine if ($app_richiesti_vett[$app_richiesti_vett[id]] != ",tutti,") $idinizio = $idinizio_vett[$app_richiesti_vett['id']]; $idfine = $idfine_vett[$app_richiesti_vett['id']]; $appartamento = ""; } else { $limiti_var['n_ini'] = $idinizio; $limiti_var['n_fine'] = $idfine; } # fine else if (@is_array($app_richiesti) and $app_richiesti[',numero,']) if (!@is_array($profondita)) { $primo_ciclo = "SI"; $prof_copia = $profondita; $profondita = ""; $profondita['iniziale'] = $prof_copia; $profondita['attuale'] = $prof_copia; $tableprenota = $nome_tab_prenota . $anno . $profondita['iniziale']; $max_prenota = esegui_query("select max(idprenota) from {$tableprenota}"); $tot_prenota = risul_query($max_prenota, 0, 0); $profondita['tot_prenota_ini'] = $tot_prenota; $profondita['tot_prenota_attuale'] = $tot_prenota; tab_a_var($limiti_var, $app_prenota_id, $app_orig_prenota_id, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $prenota_in_app_sett, $anno, $dati_app, $profondita, $nome_tab_prenota); } # fine if (!@is_array($profondita)) if ($profondita['controllato_tutti_occupati'] != "SI") { $tutti_occupati = controlla_tutti_occupati($idinizio, $idfine, $app_richiesti, $prenota_in_app_sett, $app_prenota_id, $app_assegnabili_id, $dati_app, $fine_prenota_id); $profondita['controllato_tutti_occupati'] = "SI"; } # fine if ($profondita[controllato_tutti_occupati] != "SI") if ($tutti_occupati == "SI") { $fatto = "SI"; } else { $fatto = "NO"; } $num_da_liberare = 1; $num_da_liberare2 = 1; # cicli da ripetere per ogni appartamento fino a che $fatto = SI # primo ciclo che controlla se c'é già un appartamento libero if ($fatto != "SI") { for ($num1 = 0; $num1 < $dati_app['totapp']; $num1++) { $numapp = $dati_app['posizione'][$num1]; if (!$app_richiesti or $app_richiesti[$numapp] == "SI") { if ($app_richiesti_vett[',vicini,'] != "SI" or $dati_app['vicini'][$numapp] != $numapp) { $prenotainperiodo = prenota_in_app_e_periodo($numapp, $idinizio, $idfine, $prenota_in_app_sett, $fine_prenota_id, $num_pp); if (!$num_pp) { $appartamento = $numapp; $fatto = "SI"; if ($debug == "on") { echo "LIBERATO1 {$appartamento}<br>"; } break; } # fine if (!$num_pp) } # fine if ($app_richiesti_vett[',vicini,'] != "SI" or $dati_app['vicini'][$numapp] != $numapp) } # fine if (!$app_richiesti or $app_richiesti[$numapp] == "SI") } # fine for $num1 } # fine if ($fatto != "SI") if ($fatto != "SI") { # allargo il periodo passato dalla tabella alle variabili se necessario $lista_prenota_periodo = ""; $pren_pres_in_lista = ""; $num_lista_pren_per = 0; if (!$limiti_var[s_ini]) { lista_prenota_periodo($idinizio, $idfine, $dati_app, $prenota_in_app_sett, $pren_pres_in_lista, $lista_prenota_periodo, $num_lista_pren_per); $limiti_var[s_ini] = $idinizio; $limiti_var[s_fine] = $idfine; } # fine if (!$limiti_var[s_ini]) if ($limiti_var['s_ini'] > $idinizio) { lista_prenota_periodo($idinizio, $limiti_var['s_ini'] - 1, $dati_app, $prenota_in_app_sett, $pren_pres_in_lista, $lista_prenota_periodo, $num_lista_pren_per); $limiti_var['s_ini'] = $idinizio; } # fine if ($limiti_var['s_ini'] > $idinizio) if ($limiti_var['s_fine'] < $idfine) { lista_prenota_periodo($limiti_var['s_fine'] + 1, $idfine, $dati_app, $prenota_in_app_sett, $pren_pres_in_lista, $lista_prenota_periodo, $num_lista_pren_per); $limiti_var['s_fine'] = $idfine; } # fine if ($limiti_var['s_ini'] > $idinizio) for ($num1 = 0; $num1 < $num_lista_pren_per; $num1++) { if ($inizio_prenota_id[$lista_prenota_periodo[$num1]] < $limiti_var['n_ini']) { $limiti_var['n_ini'] = $inizio_prenota_id[$lista_prenota_periodo[$num1]]; } if ($fine_prenota_id[$lista_prenota_periodo[$num1]] > $limiti_var['n_fine']) { $limiti_var['n_fine'] = $fine_prenota_id[$lista_prenota_periodo[$num1]]; } } # fine for $num1 if ($limiti_var['n_ini'] < $limiti_var['ini'] or $limiti_var['n_fine'] > $limiti_var['fine']) { tab_a_var($limiti_var, $app_prenota_id, $app_orig_prenota_id, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $prenota_in_app_sett, $anno, $dati_app, $profondita, $nome_tab_prenota); } # fine if ($limiti_var['n_ini'] < $limiti_var['ini'] or $limiti_var['n_fine'] > $limiti_var['fine']) # ciclo che prova a spostare le prime prenotazioni ed eventualmente le # mette in $da_liberare o $da_scambiare for ($num1 = 0; $num1 < $dati_app['totapp']; $num1++) { $numapp = $dati_app['posizione'][$num1]; if (!$app_richiesti or $app_richiesti[$numapp] == "SI") { $prenotainperiodo = prenota_in_app_e_periodo($numapp, $idinizio, $idfine, $prenota_in_app_sett, $fine_prenota_id, $num_pp); $idiniziop = ""; $idfinep = ""; unset($app_assegnabili); $mobile = "SI"; $tutti_liberabili = "SI"; # Trovo le prenotazioni del periodo per l'appartamento $numapp, controllo # che si posssano muovere e trovo le settimane iniziale e finale, e i # vincoli sull'appartamento di destinazione ($num_min_persome, $numcasa e # $num_piano). for ($num2 = 1; $num2 <= $num_pp; $num2++) { $idprenotainperiodo = $prenotainperiodo[$num2]; if ($app_assegnabili_id[$idprenotainperiodo] and $app_assegnabili_id[$idprenotainperiodo] != "v") { $vett_assegnabili = explode(",", $app_assegnabili_id[$idprenotainperiodo]); $num_assegnabili = count($vett_assegnabili); for ($num3 = 0; $num3 < $num_assegnabili; $num3++) { $app_ = $vett_assegnabili[$num3]; $app_assegnabili[$idprenotainperiodo][$app_] = "SI"; } # fine for $num3 } # fine if ($app_assegnabili_id[$idprenotainperiodo] and $app_assegnabili_id[$idprenotainperiodo] != "v") if ($app_assegnabili_id[$idprenotainperiodo]) { if (!$idiniziop or $idiniziop > $inizio_prenota_id[$idprenotainperiodo]) { $idiniziop = $inizio_prenota_id[$idprenotainperiodo]; } # fine if (!$idiniziop or $idiniziop > $inizio_prenota_id[$idprenotainperiodo]) if (!$idfinep or $idfinep < $fine_prenota_id[$idprenotainperiodo]) { $idfinep = $fine_prenota_id[$idprenotainperiodo]; } # fine if (!$idfinep or $idfinep < $fine_prenota_id[$idprenotainperiodo]) } else { $mobile = "NO"; } if ($app_richiesti_vett[',vicini,'] == "SI" and !$dati_app['vicini'][$numapp] == $numapp) { $mobile = "NO"; } } # fine for $num2 if ($mobile == "SI") { # Provo a spostare le prenotazioni dell'appartamento $numapp. $mobile2 = "SI"; $prenota_comp_presente = "NO"; #$liberabile = ""; #$scambiabile = ""; #$da_scambiare = ""; for ($num2 = 1; $num2 <= $num_pp; $num2++) { $idprenotainperiodo = $prenotainperiodo[$num2]; for ($num3 = 0; $num3 < $dati_app['totapp']; $num3++) { if ($num3 != $num1) { $numapp2 = $dati_app[posizione][$num3]; if ($app_assegnabili_id[$idprenotainperiodo] == "v" or $app_assegnabili[$idprenotainperiodo][$numapp2] == "SI") { $prenotainperiodo2 = prenota_in_app_e_periodo($numapp2, $inizio_prenota_id[$idprenotainperiodo], $fine_prenota_id[$idprenotainperiodo], $prenota_in_app_sett, $fine_prenota_id, $num_pp2); if (!$num_pp2 and !$app_assegnabili_id[0][$idprenotainperiodo]) { $nuovo_app[$idprenotainperiodo] = $numapp2; $liberabile[$idprenotainperiodo] = "SI"; $scambiabile[$idprenotainperiodo] = "NO"; break; } else { # Se non si possono spostare vedere se sono da scambiare if ($app_assegnabili_id[0][$idprenotainperiodo]) { $prenota_comp_presente = "SI"; } $prenota_fissa_presente = "NO"; for ($num4 = 1; $num4 <= $num_pp2; $num4++) { $idprenotainperiodo2 = $prenotainperiodo2[$num4]; if (!$app_assegnabili_id[$idprenotainperiodo2]) { $prenota_fissa_presente = "SI"; } else { # se $idprenotainperiodo è uguale o minore di $idprenotainperiodo2 e ne contiene gli app. assegnabili è inutile fare lo scambio if ($inizio_prenota_id[$idprenotainperiodo2] <= $inizio_prenota_id[$idprenotainperiodo] and $fine_prenota_id[$idprenotainperiodo2] >= $fine_prenota_id[$idprenotainperiodo]) { if ($app_assegnabili_id[$idprenotainperiodo] == "v") { $prenota_fissa_presente = "SI"; } else { if ($app_assegnabili_id[$idprenotainperiodo2] != "v" and !$app_assegnabili_id[0][$idprenotainperiodo]) { $vett_assegnabili = explode(",", $app_assegnabili_id[$idprenotainperiodo2]); $num_assegnabili = count($vett_assegnabili); $lista_app_contenuta = "SI"; for ($num5 = 0; $num5 < $num_assegnabili; $num5++) { if ($app_assegnabili[$idprenotainperiodo][$vett_assegnabili[$num5]] != "SI") { $lista_app_contenuta = "NO"; break; } } # fine for $num5 if ($lista_app_contenuta == "SI") { $prenota_fissa_presente = "SI"; } } # fine if ($app_assegnabili_id[$idprenotainperiodo2] != "v" and !$app_assegnabili_id[0][$idprenotainperiodo]) } # fine else if ($app_assegnabili_id[$idprenotainperiodo] == "v") } # fine if ($inizio_prenota_id[$idprenotainperiodo2] <= $inizio_prenota_id[$idprenotainperiodo] and... } # fine else if (!$app_assegnabili_id[$idprenotainperiodo2]) } # fine fine for $num4 if ($prenota_fissa_presente == "NO") { $scambiabile[$idprenotainperiodo] = "SI"; $da_scambiare[$idprenotainperiodo][$numapp2] = "SI"; } # fine if ($prenota_fissa_presente == "NO") } # fine else if (!$num_pp2) } # fine if ($app_assegnabili_id[$idprenotainperiodo] == "v" or ... } # fine if ($num3 != $num1) } # fine for $num3 if ($liberabile[$idprenotainperiodo] != "SI") { $tutti_liberabili = "NO"; } if ($liberabile[$idprenotainperiodo] != "SI" and $scambiabile[$idprenotainperiodo] != "SI") { $mobile2 = "NO"; } } # fine for $num2 # Applico gli eventuali spostamenti, altrimenti metto i data in $da_liberare if ($tutti_liberabili != "NO") { for ($num2 = 1; $num2 <= $num_pp; $num2++) { $idprenotainperiodo = $prenotainperiodo[$num2]; $n_app = $nuovo_app[$idprenotainperiodo]; for ($num3 = $inizio_prenota_id[$idprenotainperiodo]; $num3 <= $fine_prenota_id[$idprenotainperiodo]; $num3++) { $prenota_in_app_sett[$numapp][$num3] = ""; $prenota_in_app_sett[$n_app][$num3] = $idprenotainperiodo; } # fine for $num3 $app_prenota_id[$idprenotainperiodo] = $n_app; } # fine for $num2 $appartamento = $numapp; $fatto = "SI"; if ($debug == "on") { echo "LIBERATO2 {$appartamento}<br>"; } break; } # fine if ($tutti_liberabili != "NO") if ($mobile2 == "SI") { if ($prenota_comp_presente == "NO") { $idinizio_da_liberare[$num_da_liberare] = $idiniziop; $idfine_da_liberare[$num_da_liberare] = $idfinep; $app_da_liberare[$num_da_liberare] = $numapp; $prenotainperiodo_da_liberare[$num_da_liberare] = $prenotainperiodo; $num_pp_da_liberare[$num_da_liberare] = $num_pp; $num_da_liberare++; } else { $idinizio_da_liberare2[$num_da_liberare2] = $idiniziop; $idfine_da_liberare2[$num_da_liberare2] = $idfinep; $app_da_liberare2[$num_da_liberare2] = $numapp; $prenotainperiodo_da_liberare2[$num_da_liberare2] = $prenotainperiodo; $num_pp_da_liberare2[$num_da_liberare2] = $num_pp; $num_da_liberare2++; } # fine else if ($prenota_comp_presente == "NO") } else { $riprova_app[$numapp] = "NO"; } if ($fatto == "SI") { break; } } else { $riprova_app[$numapp] = "NO"; } } # fine if (!$app_richiesti or $app_richiesti[$numapp] == "SI") } # fine for $num1 } # fine if ($fatto != "SI") # Se non è ancora $fatto chiamo ricorsivamente liberasettimane con i data # in $da_liberare e $da_scambiare, operando su una variabile temporanea. if ($fatto == "NO" and $limiti_var['t_limite'] >= time()) { $nuova_profondita = $profondita; $nuova_profondita['attuale'] = $profondita['attuale'] + 1; $num_da_lib_no_comp = $num_da_liberare; for ($num1 = 1; $num1 < $num_da_liberare2; $num1++) { $idinizio_da_liberare[$num_da_liberare] = $idinizio_da_liberare2[$num1]; $idfine_da_liberare[$num_da_liberare] = $idfine_da_liberare2[$num1]; $app_da_liberare[$num_da_liberare] = $app_da_liberare2[$num1]; $prenotainperiodo_da_liberare[$num_da_liberare] = $prenotainperiodo_da_liberare2[$num1]; $num_pp_da_liberare[$num_da_liberare] = $num_pp_da_liberare2[$num1]; $num_da_liberare++; } # fine for $num1 for ($num1 = 1; $num1 < $num_da_liberare; $num1++) { if ($app_da_liberare[$num1] != ",,NO") { $n_app_prenota_id = $app_prenota_id; $n_prenota_in_app_sett = $prenota_in_app_sett; $nuova_profondita['tot_prenota_attuale'] = $profondita['tot_prenota_attuale']; $idiniziop = $idinizio_da_liberare[$num1]; $idfinep = $idfine_da_liberare[$num1]; $numapp = $app_da_liberare[$num1]; $prenotainperiodo = $prenotainperiodo_da_liberare[$num1]; $num_pp = $num_pp_da_liberare[$num1]; # Muovo le prenotazioni liberabili for ($num2 = 1; $num2 <= $num_pp; $num2++) { $idprenotainperiodo = $prenotainperiodo[$num2]; if ($liberabile[$idprenotainperiodo] == "SI") { $n_app = $nuovo_app[$idprenotainperiodo]; for ($num3 = $inizio_prenota_id[$idprenotainperiodo]; $num3 <= $fine_prenota_id[$idprenotainperiodo]; $num3++) { $n_prenota_in_app_sett[$numapp][$num3] = ""; $n_prenota_in_app_sett[$n_app][$num3] = $idprenotainperiodo; } # fine for $num3 $n_app_prenota_id[$idprenotainperiodo] = $n_app; } # fine if ($liberabile[$idpenotainperiodo] == "SI") } # fine for $num2 # Riempio gli spazi vuoti con prenotazioni kostanti. $idinizio_prenota_falsa = $idinizio; $prenota_falsa_da_inserire = "NO"; for ($num2 = $idinizio; $num2 <= $idfine + 1; $num2++) { if ($n_prenota_in_app_sett[$numapp][$num2] or $num2 == $idfine + 1) { if ($prenota_falsa_da_inserire == "SI") { $nuova_profondita['tot_prenota_attuale']++; $n_app_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $numapp; $inizio_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $idinizio_prenota_falsa; $fine_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $idfine_prenota_falsa; for ($num3 = $idinizio_prenota_falsa; $num3 <= $idfine_prenota_falsa; $num3++) { $n_prenota_in_app_sett[$numapp][$num3] = $nuova_profondita['tot_prenota_attuale']; } # fine for $num3 } # fine if ($prenota_falsa_da_inserire == "SI") $prenota_falsa_da_inserire = "NO"; $idinizio_prenota_falsa = $num2 + 1; } else { $prenota_falsa_da_inserire = "SI"; $idfine_prenota_falsa = $num2; } # fine else if ($n_prenota_in_app_sett[$numapp][$num2] or $num2 == ($idfine+1)) } # fine for $num2 #chiamo ricorsivamente liberasettimane con gli app. $da_scambiare $fatto3 = "SI"; $limiti_var_orig = $limiti_var; $num_pp_s = $num_pp; $prenotainperiodo_s = $prenotainperiodo; $scambiabile_s = $scambiabile; unset($prenotainperiodo_agg); for ($num2 = 1; $num2 <= $num_pp_s; $num2++) { $idprenotainperiodo = $prenotainperiodo_s[$num2]; if ($scambiabile_s[$idprenotainperiodo] == "SI") { $idinizioprenota2 = $inizio_prenota_id[$idprenotainperiodo]; $idfineprenota2 = $fine_prenota_id[$idprenotainperiodo]; if ($idinizioprenota2 > $idinizio) { $idinizio_rimpicciolito = $idinizioprenota2; } else { $idinizio_rimpicciolito = $idinizio; } if ($idfineprenota2 < $idfine) { $idfine_rimpicciolito = $idfineprenota2; } else { $idfine_rimpicciolito = $idfine; } # Se la prenotazione scambiabile che c'era prima è stata spostata in un altro appartamento # riempio gli spazi vuoti ed aggiungo eventuali nuove prenotazioni a $prenotainperiodo_s if ($numapp != $n_app_prenota_id[$idprenotainperiodo]) { $idinizio_prenota_falsa = $idinizio_rimpicciolito; $prenota_falsa_da_inserire = "NO"; for ($num3 = $idinizio_rimpicciolito; $num3 <= $idfine_rimpicciolito + 1; $num3++) { if ($n_prenota_in_app_sett[$numapp][$num3] and !$prenotainperiodo_agg[$n_prenota_in_app_sett[$numapp][$num3]] and $num3 != $idfine_rimpicciolito + 1) { $prenotainperiodo_agg[$n_prenota_in_app_sett[$numapp][$num3]] = 1; $num_pp_s++; $prenotainperiodo_s[$num_pp_s] = $n_prenota_in_app_sett[$numapp][$num3]; $scambiabile_s[$n_prenota_in_app_sett[$numapp][$num3]] = "SI"; } # fine ($n_prenota_in_app_sett[$numapp][$num3] and !$prenotainperiodo_agg[$n_prenota_in_app_sett[$numapp][$num3]] and... if ($n_prenota_in_app_sett[$numapp][$num3] or $num3 == $idfine_rimpicciolito + 1) { if ($prenota_falsa_da_inserire == "SI") { $nuova_profondita['tot_prenota_attuale']++; $n_app_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $numapp; $inizio_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $idinizio_prenota_falsa; $fine_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $idfine_prenota_falsa; for ($num4 = $idinizio_prenota_falsa; $num4 <= $idfine_prenota_falsa; $num4++) { $n_prenota_in_app_sett[$numapp][$num4] = $nuova_profondita['tot_prenota_attuale']; } # fine for $num4 } # fine if ($prenota_falsa_da_inserire == "SI") $prenota_falsa_da_inserire = "NO"; $idinizio_prenota_falsa = $num3 + 1; } else { $prenota_falsa_da_inserire = "SI"; $idfine_prenota_falsa = $num3; } # fine else if ($n_prenota_in_app_sett[$numapp][$num2] or $num2 == ($idfine+1)) } # fine for $num3 } else { $inizio_prenota_id[$idprenotainperiodo] = $idinizio_rimpicciolito; $fine_prenota_id[$idprenotainperiodo] = $idfine_rimpicciolito; for ($num3 = $idinizioprenota2; $num3 < $idinizio_rimpicciolito; $num3++) { $n_prenota_in_app_sett[$numapp][$num3] = ""; } # fine for $num3 for ($num3 = $idfine_rimpicciolito + 1; $num3 <= $idfineprenota2; $num3++) { $n_prenota_in_app_sett[$numapp][$num3] = ""; } # fine for $num3 $app_assegnabili_id2 = $app_assegnabili_id[$idprenotainperiodo]; $app_assegnabili_id[$idprenotainperiodo] = ""; $ap_ric = ""; for ($num3 = 0; $num3 < $dati_app['totapp']; $num3++) { $numapp2 = $dati_app['posizione'][$num3]; if ($da_scambiare[$idprenotainperiodo][$numapp2] == "SI") { $ap_ric[$numapp2] = "SI"; } # fine if ($da_scambiare[$idprenotainperiodo][$numapp2] == "SI") } # fine for $num3 # Se la prenotazione da scambiare ne ha altre compagne if ($app_assegnabili_id[0][$idprenotainperiodo]) { $idprenota_comp = explode(",", $app_assegnabili_id[0][$idprenotainperiodo]); $num_idprenota_comp = count($idprenota_comp); cancella_prenota_compagne($idprenota_comp, $num_idprenota_comp, $idinizioprenota2, $idfineprenota2, $ap_ric, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $n_app_prenota_id, $n_prenota_in_app_sett); } # fine if ($app_assegnabili_id[0][$idprenotainperiodo]) $appartamento2 = ""; $fatto2 = ""; if ($debug == "on") { global $passo; $passo++; echo $passo; for ($i = 0; $i < $profondita['attuale']; $i++) { echo " "; } if ($ap_ric[',numero,']) { $ap_ric_ved = $ap_ric[1] . " (pren {$idprenotainperiodo} + " . $app_assegnabili_id[0][$idprenotainperiodo] . ")"; $idinizioprenota2_ved = $idinizioprenota2[1]; $idfineprenota2_ved = $idfineprenota2[1]; } else { $ap_ric_ved = implode(",", array_keys($ap_ric)) . " (pren {$idprenotainperiodo})"; $idinizioprenota2_ved = $idinizioprenota2; $idfineprenota2_ved = $idfineprenota2; } # fine else if ($ap_ric[',numero,']) echo "<b>" . $profondita['attuale'] . "</b> <em>" . date("H:i:s") . "</em> libera il {$numapp} da {$idinizioprenota2_ved} a {$idfineprenota2_ved} negli app {$ap_ric_ved}<br>"; } # fine if ($debug == "on") liberasettimane($idinizioprenota2, $idfineprenota2, $limiti_var, $anno, $fatto2, $appartamento2, $nuova_profondita, $ap_ric, $n_app_prenota_id, $app_orig_prenota_id, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $n_prenota_in_app_sett, $dati_app, $nome_tab_prenota); if ($debug == "on") { echo $passo; for ($i = 0; $i < $profondita['attuale']; $i++) { echo " "; } echo "<b>" . $profondita['attuale'] . "</b> finito <em>" . date("H:i:s") . "</em> {$fatto2} (app {$appartamento2})<br>"; } # fine if ($debug == "on") if ($app_assegnabili_id[0][$idprenotainperiodo]) { $inizio_prenota_id[$idprenotainperiodo] = $idinizioprenota2[1]; $fine_prenota_id[$idprenotainperiodo] = $idfineprenota2[1]; if ($fatto2 == "SI") { ripristina_prenota_compagne($idprenota_comp, $num_idprenota_comp, $idinizioprenota2, $idfineprenota2, $appartamento2, $n_app_prenota_id, $n_prenota_in_app_sett, $fine_prenota_id, $profondita); } } else { $inizio_prenota_id[$idprenotainperiodo] = $idinizioprenota2; $fine_prenota_id[$idprenotainperiodo] = $idfineprenota2; } # fine else if ($app_assegnabili_id[0][$idprenotainperiodo]) $app_assegnabili_id[$idprenotainperiodo] = $app_assegnabili_id2; if ($fatto2 == "SI") { for ($num3 = $idinizio_rimpicciolito; $num3 <= $idfine_rimpicciolito; $num3++) { $n_prenota_in_app_sett[$numapp][$num3] = ""; } # fine for $num3 for ($num3 = $idinizioprenota2; $num3 <= $idfineprenota2; $num3++) { $n_prenota_in_app_sett[$appartamento2][$num3] = $idprenotainperiodo; } # fine for $num3 $n_app_prenota_id[$idprenotainperiodo] = $appartamento2; if ($debug == "on") { echo $passo; for ($i = 0; $i < $profondita['attuale']; $i++) { echo " "; } echo "<b>" . $profondita['attuale'] . "</b> spostata pren {$idprenotainperiodo} in " . $appartamento2 . "<br>"; } # fine if ($debug == "on") $nuova_profondita['tot_prenota_attuale']++; $n_app_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $numapp; $inizio_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $idinizio_rimpicciolito; $fine_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $idfine_rimpicciolito; for ($num3 = $idinizio_rimpicciolito; $num3 <= $idfine_rimpicciolito; $num3++) { $n_prenota_in_app_sett[$numapp][$num3] = $nuova_profondita['tot_prenota_attuale']; } # fine for $num3 } else { $fatto3 = "NO"; aggiorna_app_aggiunti($limiti_var, $limiti_var_orig, $app_orig_prenota_id, $app_prenota_id, $inizio_prenota_id, $fine_prenota_id, $prenota_in_app_sett); break; } # fine else if ($fatto2 == "SI") } # fine else if ($numapp != $n_app_prenota_id[$idprenotainperiodo]) } # fine if ($scambiabile_s[$idprenotainperiodo] == "SI") } # fine for $num2 # cancello le prenotazioni kostanti for ($num2 = $profondita['tot_prenota_attuale'] + 1; $num2 <= $nuova_profondita['tot_prenota_attuale']; $num2++) { for ($num3 = $inizio_prenota_id[$num2]; $num3 <= $fine_prenota_id[$num2]; $num3++) { $n_prenota_in_app_sett[$numapp][$num3] = ""; } # fine for $num3 $n_app_prenota_id[$num2] = ""; $inizio_prenota_id[$num2] = ""; $fine_prenota_id[$num2] = ""; } # fine for $num2 if ($fatto3 == "SI") { $app_prenota_id = $n_app_prenota_id; $prenota_in_app_sett = $n_prenota_in_app_sett; $fatto = "SI"; $appartamento = $numapp; break; } else { $riprova_app[$numapp] = "NO"; } # Elimino gli appartamenti successivi che si possono scambiare con questo if ($num1 != $num_da_liberare - 1 and $num1 < $num_da_lib_no_comp) { $lista_app_assegnabili = ""; for ($num2 = 1; $num2 <= $num_pp; $num2++) { $idprenotainperiodo = $prenotainperiodo[$num2]; if (!$lista_app_assegnabili or $lista_app_assegnabili == "v") { $lista_app_assegnabili = $app_assegnabili_id[$idprenotainperiodo]; } else { $app_ass_num2 = $app_assegnabili_id[$idprenotainperiodo]; if ($app_ass_num2 != "v" and $app_ass_num2 != $lista_app_assegnabili) { $app_ass_num2 = explode(",", $app_ass_num2); $num_app_ass_num2 = count($app_ass_num2) - 1; $n_lista_app_assegnabili = ""; for ($num3 = 1; $num3 < $num_app_ass_num2; $num3++) { if (str_replace("," . $app_ass_num2[$num3] . ",", "", $lista_app_assegnabili) != $lista_app_assegnabili) { $n_lista_app_assegnabili .= "," . $app_ass_num2[$num3]; } } # fine for $num3 $lista_app_assegnabili = $n_lista_app_assegnabili; if (!$lista_app_assegnabili) { break; } else { $lista_app_assegnabili .= ","; } } # fine if ($app_ass_num2 != "v" and $app_ass_num2 != $lista_app_assegnabili) } # fine else if (!$lista_app_assegnabili or... } # fine for $num2 if ($lista_app_assegnabili) { for ($num2 = $num1 + 1; $num2 < $num_da_liberare; $num2++) { $numapp2 = $app_da_liberare[$num2]; if (($lista_app_assegnabili == "v" or str_replace(",{$numapp2},", "", $lista_app_assegnabili) != $lista_app_assegnabili) and $numapp2 != ",,NO") { if ($prenota_in_app_sett[$numapp2][$idiniziop]) { $ini_blocco2 = $inizio_prenota_id[$prenota_in_app_sett[$numapp2][$idiniziop]]; } else { $ini_blocco2 = $idiniziop; } if ($prenota_in_app_sett[$numapp2][$idfinep]) { $fine_blocco2 = $fine_prenota_id[$prenota_in_app_sett[$numapp2][$idfinep]]; } else { $fine_blocco2 = $idfinep; } if ($ini_blocco2 == $idiniziop and $fine_blocco2 == $idfinep) { $scambiabili = "SI"; for ($num3 = $idiniziop; $num3 <= $idfinep; $num3++) { if ($prenota_in_app_sett[$numapp2][$num3]) { $app_ass_num3 = $app_assegnabili_id[$prenota_in_app_sett[$numapp2][$num3]]; if ($app_ass_num3 != "v" and str_replace(",{$numapp},", "", $app_ass_num3) == $app_ass_num3) { $scambiabili = "NO"; break; } # fine if ($app_ass_num5 != "v" and... $num3 = $fine_prenota_id[$prenota_in_app_sett[$numapp2][$num3]]; } # fine if ($prenota_in_app_sett[$numapp3][$num3]) } # fine for $num3 if ($scambiabili == "SI") { $app_da_liberare[$num2] = ",,NO"; $riprova_app[$numapp2] = "NO"; } # fine if ($scambiabili == "SI") } # fine if ($ini_blocco2 == $ini_blocco1 and... } # fine if (($lista_app_assegnabili == "v" or... } # fine for $num2 } # fine if ($lista_app_assegnabili) } # fine if ($num1 != ($num_da_liberare - 1) and... } # fine if ($app_da_liberare[$num1] != ",,NO") } # fine for $num1 } # fine if ($fatto == "NO") if ($tutti_occupati == "SI") { $fatto = "NO"; } # Se bisogna liberare altri appartamenti oltre a quello appena liberato if ($fatto == "SI" and $app_richiesti_vett[',numero,']) { if ($app_richiesti_vett[',numero,'] > $app_richiesti_vett['id']) { $nuova_profondita = $profondita; $nuova_profondita['attuale']++; $nuova_profondita['controllato_tutti_occupati'] = "NO"; $n_app_prenota_id = $app_prenota_id; $n_prenota_in_app_sett = $prenota_in_app_sett; $nuova_profondita['tot_prenota_attuale']++; $id_prenota_lib = $nuova_profondita['tot_prenota_attuale']; if ($debug == "on") { echo "inserita " . $nuova_profondita['tot_prenota_attuale'] . " in {$appartamento} da {$idinizio} a {$idfine}<br>"; } $n_app_prenota_id[$id_prenota_lib] = $appartamento; $inizio_prenota_id[$id_prenota_lib] = $idinizio; $fine_prenota_id[$id_prenota_lib] = $idfine; for ($num1 = $idinizio; $num1 <= $idfine; $num1++) { $n_prenota_in_app_sett[$appartamento][$num1] = $id_prenota_lib; } # fine for $num1 # Se gli app devono essere vicini mantengo l'app liberato fisso e provo i restanti da liberare if ($app_richiesti_vett[',vicini,'] == "SI") { $fatto = "NO"; $lim_for = $app_richiesti_vett[',numero,']; if ($lim_for != $app_richiesti_vett['id'] + 1 and $limiti_var['t_limite'] < time()) { $lim_for = $app_richiesti_vett['id'] + 1; if ($debug == "on") { echo "timeout<br>"; } } # fine if ($limiti_var['t_limite'] < time()) for ($num1 = $app_richiesti_vett['id'] + 1; $num1 <= $lim_for; $num1++) { if ($provato[$idinizio_vett[$num1]][$idfine_vett[$num1]][$app_richiesti_vett[$num1]] != "SI") { $provato[$idinizio_vett[$num1]][$idfine_vett[$num1]][$app_richiesti_vett[$num1]] = "SI"; $n_app_prenota_id2 = $n_app_prenota_id; $n_prenota_in_app_sett2 = $n_prenota_in_app_sett; $n_app_richiesti_vett = $app_richiesti_vett; if ((string) $n_app_richiesti_vett[',app_vicini,'] == "") { $n_app_richiesti_vett[',app_vicini,'] = $dati_app['vicini'][$appartamento]; } else { $app_vicini = explode(",", $dati_app['vicini'][$appartamento]); $num_app_vicini = count($app_vicini); for ($num2 = 0; $num2 < $num_app_vicini; $num2++) { if (str_replace("," . $app_vicini[$num2] . ",", "", "," . $n_app_richiesti_vett[',app_vicini,'] . ",") == "," . $n_app_richiesti_vett[',app_vicini,'] . ",") { $n_app_richiesti_vett[',app_vicini,'] .= "," . $app_vicini[$num2]; } } # fine for $num2 } # fine else if ((string) $app_richiesti_vett[',app_vicini,'] == "") $n_app_richiesti_vett[$num1] = incrocia_app_richiesti($n_app_richiesti_vett[$num1], $n_app_richiesti_vett[',app_vicini,']); if ((string) $n_app_richiesti_vett[$num1] != "") { $n_idinizio_vett = $idinizio_vett; $n_idfine_vett = $idfine_vett; $val = $n_app_richiesti_vett[$app_richiesti_vett['id'] + 1]; $n_app_richiesti_vett[$app_richiesti_vett['id'] + 1] = $n_app_richiesti_vett[$num1]; $n_app_richiesti_vett[$num1] = $val; $n_idinizio_vett[$app_richiesti_vett['id'] + 1] = $idinizio_vett[$num1]; $n_idinizio_vett[$num1] = $idinizio_vett[$app_richiesti_vett['id'] + 1]; $n_idfine_vett[$app_richiesti_vett['id'] + 1] = $idfine_vett[$num1]; $n_idfine_vett[$num1] = $idfine_vett[$app_richiesti_vett['id'] + 1]; if ($debug == "on") { global $passo; echo $passo; for ($i = 0; $i < $profondita['attuale']; $i++) { echo " "; } echo "<b>" . $profondita['attuale'] . "</b> libera vicini a {$appartamento} da " . $n_idinizio_vett[$app_richiesti_vett['id'] + 1] . " a " . $n_idfine_vett[$app_richiesti_vett['id'] + 1] . " in " . $n_app_richiesti_vett[$app_richiesti_vett['id'] + 1] . "<br>"; } # fine if ($debug == "on") liberasettimane($n_idinizio_vett, $n_idfine_vett, $limiti_var, $anno, $fatto, $appartamento_vett, $nuova_profondita, $n_app_richiesti_vett, $n_app_prenota_id2, $app_orig_prenota_id, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $n_prenota_in_app_sett2, $dati_app, $nome_tab_prenota); if ($debug == "on") { echo $passo; for ($i = 0; $i < $profondita['attuale']; $i++) { echo " "; } echo "<b>" . $profondita['attuale'] . "</b> fatto libera vicini a {$appartamento} {$fatto}<br>"; } # fine if ($debug == "on") if ($fatto == "SI") { $n_app_prenota_id = $n_app_prenota_id2; $n_prenota_in_app_sett = $n_prenota_in_app_sett2; $val = $appartamento_vett[$app_richiesti_vett['id'] + 1]; $appartamento_vett[$app_richiesti_vett['id'] + 1] = $appartamento_vett[$num1]; $appartamento_vett[$num1] = $val; break; } # fine if ($fatto == "SI") } # fine if ((string) $n_app_richiesti_vett[$num1] != "") } # fine if ($provato[$idinizio_vett[$num1]][$idfine_vett[$num1]][$app_richiesti_vett[$num1]] != "SI") } # fine for $num1 if ($fatto != "SI") { $riprova_senza_app_liberato = $appartamento; } } else { if ($app_richiesti_vett[$app_richiesti_vett['id']] == ",tutti,") { $app_assegnabili_id[$id_prenota_lib] = "v"; } else { if (str_replace(",", "", $app_richiesti_vett[$app_richiesti_vett['id']]) != $app_richiesti_vett[$app_richiesti_vett['id']]) { $app_assegnabili_id[$id_prenota_lib] = $app_richiesti_vett[$app_richiesti_vett['id']]; } } liberasettimane($idinizio_vett, $idfine_vett, $limiti_var, $anno, $fatto, $appartamento_vett, $nuova_profondita, $app_richiesti_vett, $n_app_prenota_id, $app_orig_prenota_id, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $n_prenota_in_app_sett, $dati_app, $nome_tab_prenota); } # fine elseif ($app_richiesti[',vicini,'] == "SI") if ($fatto == "SI") { $app_prenota_id = $n_app_prenota_id; $prenota_in_app_sett = $n_prenota_in_app_sett; for ($num1 = $idinizio; $num1 <= $idfine; $num1++) { $prenota_in_app_sett[$app_prenota_id[$id_prenota_lib]][$num1] = ""; } # fine for $num1 $appartamento_vett[$app_richiesti_vett['id']] = $app_prenota_id[$id_prenota_lib]; $app_prenota_id[$id_prenota_lib] = ""; } else { $appartamento_vett[$app_richiesti_vett['id']] = ""; aggiorna_app_aggiunti($limiti_var, $limiti_var_orig, $app_orig_prenota_id, $app_prenota_id, $inizio_prenota_id, $fine_prenota_id, $prenota_in_app_sett); } # fine else if ($fatto == "SI") $inizio_prenota_id[$id_prenota_lib] = ""; $fine_prenota_id[$id_prenota_lib] = ""; $app_assegnabili_id[$id_prenota_lib] = ""; } else { $appartamento_vett[$app_richiesti_vett['id']] = $appartamento; } $appartamento = $appartamento_vett; } # fine if ($fatto == "SI" and $app_richiesti_vett[',numero,']) # Se si era liberato un appartamento ma non se ne sono trovati altri vicini riprovo if ($riprova_senza_app_liberato) { $n_lista_app_ric = ""; for ($num1 = 0; $num1 < $dati_app['totapp']; $num1++) { $numapp = $dati_app['posizione'][$num1]; if ($numapp != $riprova_senza_app_liberato and $riprova_app[$numapp] != "NO") { $n_lista_app_ric .= $numapp . ","; } } # fine for $num1 $n_lista_app_ric = substr($n_lista_app_ric, 0, -1); $app_richiesti_vett[$app_richiesti_vett['id']] = incrocia_app_richiesti($app_richiesti_vett[$app_richiesti_vett['id']], $n_lista_app_ric); if ((string) $app_richiesti_vett[$app_richiesti_vett['id']] != "") { $nuova_profondita = $profondita; $nuova_profondita['attuale']++; $nuova_profondita['controllato_tutti_occupati'] = "NO"; $n_app_prenota_id = $app_prenota_id; $n_prenota_in_app_sett = $prenota_in_app_sett; if ($debug == "on") { global $passo; echo $passo; for ($i = 0; $i < $profondita['attuale']; $i++) { echo " "; } echo "<b>" . $profondita['attuale'] . "</b> <em>" . date("H:i:s") . "</em> riprova " . $app_richiesti_vett['id'] . " negli app " . $app_richiesti_vett[$app_richiesti_vett['id']] . "<br>"; } # fine if ($debug == "on") $app_richiesti_vett['id'] = $app_richiesti_vett['id'] - 1; liberasettimane($idinizio_vett, $idfine_vett, $limiti_var, $anno, $fatto, $appartamento_vett, $nuova_profondita, $app_richiesti_vett, $n_app_prenota_id, $app_orig_prenota_id, $inizio_prenota_id, $fine_prenota_id, $app_assegnabili_id, $n_prenota_in_app_sett, $dati_app, $nome_tab_prenota); if ($fatto == "SI") { $app_prenota_id = $n_app_prenota_id; $prenota_in_app_sett = $n_prenota_in_app_sett; $appartamento = $appartamento_vett; } else { aggiorna_app_aggiunti($limiti_var, $limiti_var_orig, $app_orig_prenota_id, $app_prenota_id, $inizio_prenota_id, $fine_prenota_id, $prenota_in_app_sett); } } # fine if ((string) $app_richiesti_vett[$app_richiesti_vett['id']] != "") } # fine if ($riprova_senza_app_liberato) if ($primo_ciclo == "SI" and $fatto == "SI") { $risul_agg = aggiorna_tableprenota($app_prenota_id, $app_orig_prenota_id, $tableprenota); if (!$risul_agg) { $fatto = "NO"; } } # fine if ($primo_ciclo == "SI" and $fatto == "SI") }