function inserisci_prenotazione($inizioperiodo, $fineperiodo, $lista_app, $tipotariffa, $numpersone, $prenota_vicine, $idclienti, $conferma, $pagato, $caparra, $met_paga_caparra, $commissioni, $origine_prenota, $sconto, $giorno_stima_checkin, $ora_stima_checkin, $min_stima_checkin, $commento, &$stato, $anno, $PHPR_TAB_PRE, $ins_passato = "", $id_utente_imp = "", $id_prenota_imp = "", $tariffe_sett_imp = "", $ins_costi_agg = "")
{
    global $id_utente, $HOSTNAME;
    $PHPR_TAB_PRE = aggslashdb($PHPR_TAB_PRE);
    $anno = aggslashdb($anno);
    $tableprenota = $PHPR_TAB_PRE . "prenota" . $anno;
    $tablecostiprenota = $PHPR_TAB_PRE . "costiprenota" . $anno;
    $tableperiodi = $PHPR_TAB_PRE . "periodi" . $anno;
    $tableregole = $PHPR_TAB_PRE . "regole" . $anno;
    $tableappartamenti = $PHPR_TAB_PRE . "appartamenti";
    $tablepersonalizza = $PHPR_TAB_PRE . "personalizza";
    $tableclienti = $PHPR_TAB_PRE . "clienti";
    $tablenometariffe = $PHPR_TAB_PRE . "ntariffe" . $anno;
    if (!function_exists('tab_a_var')) {
        include "./includes/liberasettimane.php";
    }
    if (!function_exists('dati_tariffe')) {
        include "./includes/funzioni_tariffe.php";
    }
    include "./includes/sett_gio.php";
    $Euro = nome_valuta();
    $stile_soldi = stile_soldi();
    $stile_data = stile_data();
    $num_tipologie = count($inizioperiodo);
    $appartamenti = esegui_query("select * from {$tableappartamenti} ");
    $numappartamenti = numlin_query($appartamenti);
    $id_app_richiesti = 0;
    $dati_tariffe = dati_tariffe($tablenometariffe, "", "", $tableregole);
    if ($ins_costi_agg) {
        if (!function_exists('dati_costi_agg_ntariffe')) {
            include "./includes/funzioni_costi_agg.php";
        }
        $dati_ca = dati_costi_agg_ntariffe($tablenometariffe, $dati_tariffe['num'], "NO", "", $tableappartamenti);
    }
    # fine if ($ins_costi_agg)
    for ($n_t = 1; $n_t <= $num_tipologie; $n_t++) {
        $inizioperiodo_orig[$n_t] = $inizioperiodo[$n_t];
        $fineperiodo_orig[$n_t] = $fineperiodo[$n_t];
        $idinizioperiodo = esegui_query("select idperiodi from {$tableperiodi} where datainizio = '" . aggslashdb($inizioperiodo[$n_t]) . "' ");
        $num_idinizioperiodo = numlin_query($idinizioperiodo);
        if ($num_idinizioperiodo == 0) {
            $idinizioperiodo = 10000;
        } else {
            $idinizioperiodo = risul_query($idinizioperiodo, 0, 'idperiodi');
        }
        $inizioperiodo[$n_t] = $idinizioperiodo;
        if (!$idinizioperiodo_tot or $idinizioperiodo < $idinizioperiodo_tot) {
            $idinizioperiodo_tot = $idinizioperiodo;
        }
        $idfineperiodo = esegui_query("select idperiodi from {$tableperiodi} where datafine = '" . aggslashdb($fineperiodo[$n_t]) . "' ");
        $num_idfineperiodo = numlin_query($idfineperiodo);
        if ($num_idfineperiodo == 0) {
            $idfineperiodo = -1;
        } else {
            $idfineperiodo = risul_query($idfineperiodo, 0, 'idperiodi');
        }
        $fineperiodo[$n_t] = $idfineperiodo;
        if (!$idfineperiodo_tot or $idfineperiodo > $idfineperiodo_tot) {
            $idfineperiodo_tot = $idfineperiodo;
        }
        $id_periodo_corrente = calcola_id_periodo_corrente($anno);
        if ($id_periodo_corrente > $idinizioperiodo and !$ins_passato) {
            $data_sbagliata = "SI";
        }
        if ($idfineperiodo < $idinizioperiodo or $data_sbagliata == "SI") {
            $inserire = "NO";
            $mess_errore .= mex("Le date sono sbagliate", "clienti.php");
            if ($num_tipologie > 1) {
                $mess_errore .= " (" . mex("tipologia", "clienti.php") . " {$n_t})";
            }
            $mess_errore .= ".<br>";
        }
        # fine if ($idfineperiodo < $idinizioperiodo or...
        if (substr($tipotariffa[$n_t], 0, 7) != "tariffa" or controlla_num_pos(substr($tipotariffa[$n_t], 7)) == "NO") {
            $tariffa_sbagliata = "SI";
        } else {
            $tar_sett_imp = $tariffe_sett_imp[$n_t];
            for ($num1 = $inizioperiodo[$n_t]; $num1 <= $fineperiodo[$n_t]; $num1++) {
                $rigasettimana = esegui_query("select * from {$tableperiodi} where idperiodi = '{$num1}' ");
                $esistetariffa = risul_query($rigasettimana, 0, $tipotariffa[$n_t]);
                $esistetariffap = risul_query($rigasettimana, 0, $tipotariffa[$n_t] . "p");
                if ((!strcmp($esistetariffa, "") or $esistetariffa < 0) and (!strcmp($esistetariffap, "") or $esistetariffap < 0) and !strcmp($tar_sett_imp[$num1], "")) {
                    $tariffa_sbagliata = "SI";
                }
                if ($dati_tariffe[$tipotariffa[$n_t]]['chiusa'][$num1] and !strcmp($tar_sett_imp[$num1], "")) {
                    $tariffa_sbagliata = "SI";
                }
            }
            # fine for $num1
        }
        # fine else if (substr($tipotariffa[$n_t],0,7) != "tariffa" or...
        if ($tariffa_sbagliata == "SI") {
            $inserire = "NO";
            $mess_errore .= mex("Si deve inserire il tipo di tariffa", "clienti.php");
            if ($num_tipologie > 1) {
                $mess_errore .= "(" . mex("tipologia", "clienti.php") . " {$n_t})";
            }
            $mess_errore .= ".<br>";
        } else {
            # se vi è una regola 2 per la tariffa
            unset($app_regola2_predef);
            if (!$lista_app[$n_t]) {
                $lista_app[$n_t] = trova_app_regola2($tipotariffa[$n_t], $regole2, $num_regole2, $app_regola2_predef, $id_periodo_corrente, $idinizioperiodo, $idfineperiodo, $tipo_periodi, $anno, $tableregole);
            }
            # fine if (!$lista_app[$n_t])
            $id_utente_ins = "";
            # se vi è una regola 3 per la tariffa
            if ($id_utente == 1) {
                $regole3 = esegui_query("select * from {$tableregole} where tariffa_per_utente = '" . aggslashdb($tipotariffa[$n_t]) . "'");
                if (numlin_query($regole3) == 1) {
                    $id_utente_ins = risul_query($regole3, 0, 'iddatainizio');
                }
            }
            # fine if ($id_utente == 1)
            if (!$id_utente_ins and $id_utente_imp) {
                $id_utente_ins = $id_utente_imp;
            }
            if (!$id_utente_ins and $id_utente) {
                $id_utente_ins = $id_utente;
            }
            if (!$id_utente_ins) {
                $id_utente_ins = 1;
            }
            # se vi è una regola 4 per la tariffa
            if (!$numpersone[$n_t]) {
                $regole4 = esegui_query("select * from {$tableregole} where tariffa_per_persone = '" . aggslashdb($tipotariffa[$n_t]) . "'");
                if (numlin_query($regole4) == 1) {
                    $numpersone[$n_t] = risul_query($regole4, 0, 'iddatainizio');
                }
            }
            # fine if (!$numpersone[$n_t])
            if (!$numpersone) {
                if ($dati_tariffe[$tipotariffa[$n_t]]['moltiplica'] == "p") {
                    $inserire = "NO";
                    $mess_errore .= mex("Si deve inserire il numero delle persone per questa tariffa", "clienti.php");
                    if ($num_tipologie > 1) {
                        $mess_errore .= "(" . mex("tipologia", "clienti.php") . " {$n_t})";
                    }
                    $mess_errore .= ".<br>";
                }
                # fine if ($dati_tariffe[$tipotariffa[$n_t]]['moltiplica'] == "p")
            }
            # fine if (!$numpersone)
        }
        # fine else if ($tariffa_sbagliata == "SI")
        if (controlla_num_pos($idclienti[$n_t]) == "NO") {
            $inserire = "NO";
        } else {
            $cliente_esistente = esegui_query("select cognome from {$tableclienti} where idclienti = '" . $idclienti[$n_t] . "' ");
            if (numlin_query($cliente_esistente) != 1) {
                $inserire = "NO";
            } else {
                $cognome = risul_query($cliente_esistente, 0, "cognome");
            }
        }
        # fine else if (controlla_num_pos($idclienti[$n_t]) == "NO")
        $app_richiesti_id[$n_t] = "";
        $assegnazioneapp[$n_t] = "v";
        if ($lista_app[$n_t]) {
            $assegnazioneapp[$n_t] = "c";
            $vett_app = explode(",", $lista_app[$n_t]);
            $num_app = count($vett_app);
            if ($num_app == 1) {
                $assegnazioneapp[$n_t] = "k";
            }
            for ($num1 = 0; $num1 < $num_app; $num1++) {
                $appo = aggslashdb($vett_app[$num1]);
                $app_richiesti_id[$n_t][$appo] = "SI";
                $appartamento_esistente = esegui_query("select idappartamenti from {$tableappartamenti} where idappartamenti = '{$appo}' ");
                if (numlin_query($appartamento_esistente) != 1) {
                    $inserire = "NO";
                    $mess_errore .= mex("L'appartamento", 'unit.php') . " <div style=\"display: inline; color: red;\">{$appo}</div> " . mex("contenuto nella lista non esiste", "clienti.php");
                    if ($num_tipologie > 1) {
                        $mess_errore .= " (" . mex("tipologia", "clienti.php") . " {$n_t})";
                    }
                    $mess_errore .= ".<br>";
                }
                # fine if (numlin_query($appartamento_esistente) != 1)
            }
            # fine for $num1
        }
        # fine if ($lista_app[$n_t])
        if ($numpersone[$n_t]) {
            if (controlla_num_pos($numpersone[$n_t]) == "NO") {
                $inserire = "NO";
                $mess_errore .= mex("Il numero di persone è sbagliato", "clienti.php");
                if ($num_tipologie > 1) {
                    $mess_errore .= " (" . mex("tipologia", "clienti.php") . " {$n_t})";
                }
                $mess_errore .= ".<br>";
            }
            # fine if (controlla_num_pos($numpersone[$n_t]) == "NO")
            $app_richiesti_copia = $app_richiesti_id[$n_t];
            $posti = 0;
            if ($app_regola2_predef) {
                $app_regola2_predef = ",{$app_regola2_predef},";
                $posto_reg2_orig = 0;
            }
            # fine if ($app_regola2_predef)
            for ($num1 = 0; $num1 < $numappartamenti; $num1++) {
                $idapp = risul_query($appartamenti, $num1, 'idappartamenti');
                $maxoccupanti = risul_query($appartamenti, $num1, 'maxoccupanti');
                if (!$app_richiesti_copia or $app_richiesti_copia[$idapp] == "SI") {
                    if ($maxoccupanti and $maxoccupanti < $numpersone[$n_t]) {
                        $app_richiesti_id[$n_t][$idapp] = "NO";
                    } else {
                        $app_richiesti_id[$n_t][$idapp] = "SI";
                        $posti++;
                    }
                    # fine else if ($maxoccupanti and $maxoccupanti < $numpersone[$n_t])
                }
                # fine if (!$app_richiesti_copia or $app_richiesti_copia[$idapp] == "SI")
                if ($app_regola2_predef) {
                    if (str_replace(",{$idapp},", "", $app_regola2_predef) != $app_regola2_predef) {
                        if (!$maxoccupanti or $maxoccupanti >= $numpersone[$n_t]) {
                            $posto_reg2_orig = 1;
                        }
                    }
                    # fine if (str_replace(",$idapp,","",$app_regola2_predef) != $app_regola2_predef)
                }
                # fine if ($app_regola2_predef)
            }
            # fine for $num1
            if ($posti == 0 or $app_regola2_predef and !$posto_reg2_orig) {
                $mess_errore .= mex("Non c'è nessun appartamento tra quelli richiesti che possa ospitare", 'unit.php') . " " . $numpersone[$n_t] . " " . mex("persone", "clienti.php");
                if ($num_tipologie > 1) {
                    $mess_errore .= " (" . mex("tipologia", "clienti.php") . " {$n_t})";
                }
                $mess_errore .= ".<br>";
                $inserire = "NO";
            }
            # fine if ($posti == 0 or...
        }
        # fine if ($numpersone[$n_t])
        unset($lista_app_richiesti);
        if (!$app_richiesti_id[$n_t]) {
            $lista_app_richiesti = ",tutti,,";
        } else {
            while (list($key, $val) = each($app_richiesti_id[$n_t])) {
                if ($val == "SI") {
                    $lista_app_richiesti .= $key . ",";
                }
            }
        }
        $lista_app_richiesti = substr($lista_app_richiesti, 0, -1);
        $id_app_richiesti++;
        $app_richiesti[$id_app_richiesti] = $lista_app_richiesti;
        $idinizioperiodo_vett[$id_app_richiesti] = $idinizioperiodo;
        $idfineperiodo_vett[$id_app_richiesti] = $idfineperiodo;
        $app_richiesti[",numero,"] = $id_app_richiesti;
        if ($num_tipologie > 1 and $prenota_vicine == "SI") {
            $app_richiesti[",vicini,"] = "SI";
        }
        if ($id_prenota_imp) {
            if (controlla_num_pos($id_prenota_imp[$n_t]) == "SI") {
                $id_esistente = esegui_query("select idprenota from {$tableprenota} where idprenota = '" . $id_prenota_imp[$n_t] . "' ");
                if (numlin_query($id_esistente)) {
                    unset($id_prenota_imp);
                }
            } else {
                unset($id_prenota_imp);
            }
        }
        # fine if ($id_prenota_imp)
    }
    # fine for $n_t
    if ($inserire != "NO") {
        $app_agenzia = esegui_query("select * from {$tableregole} where app_agenzia != ''{$condizioni_regole1_non_sel}");
        $num_app_agenzia = numlin_query($app_agenzia);
        $minuti_durata_insprenota = esegui_query("select valpersonalizza_num from {$tablepersonalizza} where idpersonalizza = 'minuti_durata_insprenota' and idutente = '1'");
        $minuti_durata_insprenota = risul_query($minuti_durata_insprenota, 0, 'valpersonalizza_num');
        $lim_prenota_temp = aggslashdb(date("Y-m-d H:i:s", time() + C_DIFF_ORE * 3600 - $minuti_durata_insprenota * 60));
        esegui_query("delete from {$tableprenota} where idclienti = '0' and datainserimento < '" . $lim_prenota_temp . "' ");
        #Se ci sono regole per $app_agenzia inserisco false prenotazioni fisse in $app_prenota_id2
        if ($num_app_agenzia != 0) {
            unset($limiti_var);
            unset($app_prenota_id);
            unset($app_orig_prenota_id);
            unset($inizio_prenota_id);
            unset($fine_prenota_id);
            unset($app_assegnabili_id);
            unset($prenota_in_app_sett);
            unset($dati_app);
            unset($profondita);
            $limiti_var['n_ini'] = $idinizioperiodo_tot;
            $limiti_var['n_fine'] = $idfineperiodo_tot;
            $limiti_var['lim_prenota_temp'] = $lim_prenota_temp;
            $profondita['iniziale'] = "";
            $profondita['attuale'] = 1;
            $max_prenota = esegui_query("select max(idprenota) from {$tableprenota}");
            if (numlin_query($max_prenota) != 0) {
                $tot_prenota = risul_query($max_prenota, 0, 0);
            } else {
                $tot_prenota = 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, $PHPR_TAB_PRE . "prenota");
            unset($info_periodi_ag);
            $info_periodi_ag['numero'] = 0;
            for ($num1 = 0; $num1 < $num_app_agenzia; $num1++) {
                $mot2 = risul_query($app_agenzia, $num1, 'motivazione2');
                if ($mot2 == "x") {
                    $info_periodi_ag['app'][$info_periodi_ag['numero']] = risul_query($app_agenzia, $num1, 'app_agenzia');
                    $info_periodi_ag['ini'][$info_periodi_ag['numero']] = risul_query($app_agenzia, $num1, 'iddatainizio');
                    $info_periodi_ag['fine'][$info_periodi_ag['numero']] = risul_query($app_agenzia, $num1, 'iddatafine');
                    $info_periodi_ag['numero']++;
                }
                # fine if ($mot2 == "x")
            }
            # fine for $num1
            if ($info_periodi_ag['numero']) {
                inserisci_prenota_fittizie($info_periodi_ag, $profondita, $app_prenota_id, $inizio_prenota_id, $fine_prenota_id, $prenota_in_app_sett, $app_assegnabili_id);
            }
            $limiti_var2 = $limiti_var;
            $profondita2 = $profondita;
            $prenota_in_app_sett2 = $prenota_in_app_sett;
            $inizio_prenota_id2 = $inizio_prenota_id;
            $fine_prenota_id2 = $fine_prenota_id;
            $app_prenota_id2 = $app_prenota_id;
            $app_assegnabili_id2 = $app_assegnabili_id;
            unset($info_periodi_ag);
            $info_periodi_ag['numero'] = 0;
            for ($num1 = 0; $num1 < $num_app_agenzia; $num1++) {
                $mot2 = risul_query($app_agenzia, $num1, 'motivazione2');
                if ($mot2 != "x") {
                    $info_periodi_ag['app'][$info_periodi_ag['numero']] = risul_query($app_agenzia, $num1, 'app_agenzia');
                    $info_periodi_ag['ini'][$info_periodi_ag['numero']] = risul_query($app_agenzia, $num1, 'iddatainizio');
                    $info_periodi_ag['fine'][$info_periodi_ag['numero']] = risul_query($app_agenzia, $num1, 'iddatafine');
                    $info_periodi_ag['numero']++;
                }
                # fine if ($mot2 != "x")
            }
            # fine for $num1
            if ($info_periodi_ag['numero']) {
                inserisci_prenota_fittizie($info_periodi_ag, $profondita2, $app_prenota_id2, $inizio_prenota_id2, $fine_prenota_id2, $prenota_in_app_sett2, $app_assegnabili_id2);
            }
            $occupare_app_agenzia_sempre = "NO";
            for ($num1 = $idinizioperiodo_tot; $num1 <= $idfineperiodo_tot; $num1++) {
                $numprenotazioni = 0;
                for ($num2 = 0; $num2 < $dati_app['totapp']; $num2++) {
                    if ($prenota_in_app_sett2[$dati_app['posizione'][$num2]][$num1]) {
                        $numprenotazioni++;
                    }
                }
                if ($numprenotazioni >= $numappartamenti) {
                    $occupare_app_agenzia_sempre = "SI";
                }
            }
            # fine for $num1
            if ($occupare_app_agenzia_sempre != "SI") {
                $app_orig_prenota_id = $app_prenota_id2;
                liberasettimane($idinizioperiodo_vett, $idfineperiodo_vett, $limiti_var2, $anno, $fatto_libera, $app_liberato, $profondita2, $app_richiesti, $app_prenota_id2, $app_orig_prenota_id, $inizio_prenota_id2, $fine_prenota_id2, $app_assegnabili_id2, $prenota_in_app_sett2, $dati_app, $PHPR_TAB_PRE . "prenota");
            } else {
                $fatto_libera = "NO";
            }
            if ($fatto_libera == "SI") {
                $risul_agg = aggiorna_tableprenota($app_prenota_id2, $app_orig_prenota_id, $tableprenota);
                if (!$risul_agg) {
                    $fatto_libera = "NO";
                } else {
                    $occupare_app_agenzia = "NO";
                    $appartamento = $app_liberato;
                }
                # fine else if (!$risul_agg)
            } else {
                $occupare_app_agenzia = "SI";
                $limiti_var['t_limite'] = time() + $sec_limite_libsett;
                $app_liberato = "";
                $app_orig_prenota_id = $app_prenota_id;
                liberasettimane($idinizioperiodo_vett, $idfineperiodo_vett, $limiti_var, $anno, $fatto_libera2, $app_liberato, $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, $PHPR_TAB_PRE . "prenota");
                if ($fatto_libera2 != "NO") {
                    $risul_agg = aggiorna_tableprenota($app_prenota_id, $app_orig_prenota_id, $tableprenota);
                    if (!$risul_agg) {
                        $fatto_libera2 = "NO";
                    }
                }
                # fine if ($fatto_libera2 != "NO")
                if ($fatto_libera2 == "NO") {
                    $inserire = "NO";
                    $mess_errore .= mex("Nel periodo selezionato non è possibile ospitare il cliente negli appartamenti richiesti", 'unit.php') . ".<br>";
                    for ($n_t = 1; $n_t <= $num_tipologie; $n_t++) {
                        $mess_prenota .= mex("Prenotazione", "prenota.php") . mex("dal", "prenota.php") . " <b>" . formatta_data($inizioperiodo_orig[$n_t], $stile_data) . "</b> " . mex("al", "prenota.php") . " <b>" . formatta_data($fineperiodo_orig[$n_t], $stile_data) . "</b>";
                        $mess_prenota .= " " . mex("a nome di", "prenota.php") . " <b>{$cognome}</b> ";
                        if ($numpersone[$n_t]) {
                            $mess_prenota .= " " . mex("per", "prenota.php") . " <b>" . $numpersone[$n_t] . "</b> " . mex("persone", "prenota.php") . "";
                        }
                        if ($dati_tariffe[$tipotariffa[$n_t]]['nome']) {
                            $nometariffa_vedi = $dati_tariffe[$tipotariffa[$n_t]]['nome'];
                        } else {
                            $nometariffa_vedi = mex("tariffa", "prenota.php") . substr($tipotariffa[$n_t], 7);
                        }
                        $mess_prenota .= ", " . mex("tariffa", "prenota.php") . " \"{$nometariffa_vedi}\".<br><br>";
                    }
                    # fine for $n_t
                } else {
                    $appartamento = $app_liberato;
                    $mess_regola1 .= mex("Sono stati fatti i seguenti spostamenti nei periodi della <div style=\"display: inline; color: blue;\">regola di assegnazione 1</div>", "clienti.php") . ":<br>";
                    for ($num1 = 0; $num1 < $num_app_agenzia; $num1++) {
                        $mot2 = risul_query($app_agenzia, $num1, 'motivazione2');
                        if ($mot2 != "x") {
                            $id_app_agenzia = risul_query($app_agenzia, $num1, 'app_agenzia');
                            $idinizio_app_agenzia = risul_query($app_agenzia, $num1, 'iddatainizio');
                            $idfine_app_agenzia = risul_query($app_agenzia, $num1, 'iddatafine');
                            $motivazione_app_agenzia = risul_query($app_agenzia, $num1, 'motivazione');
                            $idprenota_cambiate_da_ag = esegui_query("select idprenota from {$tableprenota} where idappartamenti = '{$id_app_agenzia}' and iddatainizio <= '{$idfine_app_agenzia}' and iddatafine >= '{$idinizio_app_agenzia}'");
                            $num_idprenota_cambiate_da_ag = numlin_query($idprenota_cambiate_da_ag);
                            for ($num2 = 0; $num2 < $num_idprenota_cambiate_da_ag; $num2 = $num2 + 1) {
                                $idprenota_cambiata = risul_query($idprenota_cambiate_da_ag, $num2, 'idprenota');
                                if ($app_prenota_id[$idprenota_cambiata] and $app_prenota_id[$idprenota_cambiata] != $id_app_agenzia) {
                                    $idapp_camb = $app_prenota_id[$idprenota_cambiata];
                                    $dati_cambiati = esegui_query("select * from {$tableprenota} where idprenota = '{$idprenota_cambiata}'");
                                    $idclienti_camb = risul_query($dati_cambiati, 0, 'idclienti');
                                    $cliente_camb = esegui_query("select cognome from {$tableclienti} where idclienti = '{$idclienti_camb}'");
                                    if ($idclienti_camb) {
                                        $cliente_camb = risul_query($cliente_camb, 0, 'cognome');
                                    } else {
                                        $cliente_camb = "?";
                                    }
                                    $iddatainizio_camb = $inizio_prenota_id[$idprenota_cambiata];
                                    $datainizio_camb = esegui_query("select datainizio from {$tableperiodi} where idperiodi = '{$iddatainizio_camb}'");
                                    $datainizio_camb = risul_query($datainizio_camb, 0, 'datainizio');
                                    $datainizio_camb_f = formatta_data($datainizio_camb, $stile_data);
                                    $iddatafine_camb = $fine_prenota_id[$idprenota_cambiata];
                                    $datafine_camb = esegui_query("select datafine from {$tableperiodi} where idperiodi = '{$iddatafine_camb}'");
                                    $datafine_camb = risul_query($datafine_camb, 0, 'datafine');
                                    $datafine_camb_f = formatta_data($datafine_camb, $stile_data);
                                    $mess_regola1 .= mex("La prenotazione dal", "clienti.php") . " {$datainizio_camb_f} " . mex("al", "clienti.php") . " {$datafine_camb_f} " . mex("a nome di", "clienti.php") . " {$cliente_camb} " . mex("verrà spostata dall'appartamento", 'unit.php') . " <div style=\"display: inline; color: blue;\"><b>{$id_app_agenzia}</b></div> (<b>{$motivazione_app_agenzia}</b>) " . mex("al", "clienti.php") . " {$idapp_camb}.<br>";
                                }
                                # fine if ($app_prenota_id[$idprenota_cambiata] and $app_prenota_id[$idprenota_cambiata] != $id_app_agenzia)
                            }
                            # fine for $num2
                            $idprenota_cambiate_a_ag = prenota_in_app_e_periodo($id_app_agenzia, $idinizio_app_agenzia, $idfine_app_agenzia, $prenota_in_app_sett, $fine_prenota_id, $num_pca);
                            for ($num2 = 1; $num2 <= $num_pca; $num2++) {
                                $idprenota_cambiata = $idprenota_cambiate_a_ag[$num2];
                                if ($app_orig_prenota_id[$idprenota_cambiata] and $app_prenota_id[$idprenota_cambiata] != $app_orig_prenota_id[$idprenota_cambiata]) {
                                    $dati_cambiati = esegui_query("select * from {$tableprenota} where idprenota = {$idprenota_cambiata}");
                                    $idapp_camb = $app_orig_prenota_id[$idprenota_cambiata];
                                    $idclienti_camb = risul_query($dati_cambiati, 0, 'idclienti');
                                    $cliente_camb = esegui_query("select cognome from {$tableclienti} where idclienti = {$idclienti_camb}");
                                    if ($idclienti_camb) {
                                        $cliente_camb = risul_query($cliente_camb, 0, 'cognome');
                                    } else {
                                        $cliente_camb = "?";
                                    }
                                    $iddatainizio_camb = $inizio_prenota_id[$idprenota_cambiata];
                                    $datainizio_camb = esegui_query("select datainizio from {$tableperiodi} where idperiodi = {$iddatainizio_camb}");
                                    $datainizio_camb = risul_query($datainizio_camb, 0, 'datainizio');
                                    $datainizio_camb_f = formatta_data($datainizio_camb, $stile_data);
                                    $iddatafine_camb = $fine_prenota_id[$idprenota_cambiata];
                                    $datafine_camb = esegui_query("select datafine from {$tableperiodi} where idperiodi = {$iddatafine_camb}");
                                    $datafine_camb = risul_query($datafine_camb, 0, 'datafine');
                                    $datafine_camb_f = formatta_data($datafine_camb, $stile_data);
                                    $mess_regola1 .= mex("La prenotazione dal", "clienti.php") . " {$datainizio_camb_f} " . mex("al", "clienti.php") . " {$datafine_camb_f} " . mex("a nome di", "clienti.php") . " {$cliente_camb} " . mex("verrà spostata dall'appartamento", 'unit.php') . " {$idapp_camb} " . mex("al", "clienti.php") . " <div style=\"display: inline; color: blue;\"><b>{$id_app_agenzia}</b></div> (<b>{$motivazione_app_agenzia}</b>).<br>";
                                }
                                # fine if ($app_orig_prenota_id[$idprenota_cambiata] and...
                            }
                            # fine for $num2
                            for ($num2 = 1; $num2 <= $id_app_richiesti; $num2++) {
                                if ($id_app_richiesti > 1) {
                                    $appartamento_controlla = $appartamento[$num2];
                                } else {
                                    $appartamento_controlla = $appartamento;
                                }
                                if ($id_app_agenzia == $appartamento_controlla and $idinizio_app_agenzia <= $idfineperiodo and $idfine_app_agenzia >= $idinizioperiodo) {
                                    $mess_regola1 .= mex("La nuova prenotazione verrà inserita nell'appartamento", 'unit.php') . " <div style=\"display: inline; color: blue;\"><b>{$id_app_agenzia}</b></div> (<b>{$motivazione_app_agenzia}</b>).<br>";
                                }
                                # fine if ($id_app_agenzia == $appartamento_controlla and ...
                            }
                            # fine for $num2
                        }
                        # fine if ($mot2 != "x")
                    }
                    # fine for $num1
                }
                # fine else if ($fatto_libera2 == "NO")
            }
            # fine else if ($fatto_libera == "SI")
        } else {
            # se non ci sono app_agenzia della regola di assegnazione 1
            unset($limiti_var);
            unset($profondita_);
            unset($app_prenota_id_);
            unset($app_orig_prenota_id_);
            unset($inizio_prenota_id_);
            unset($fine_prenota_id_);
            unset($app_assegnabili_id_);
            unset($prenota_in_app_sett_);
            unset($dati_app_);
            unset($app_liberato);
            $limiti_var["lim_prenota_temp"] = $lim_prenota_temp;
            liberasettimane($idinizioperiodo_vett, $idfineperiodo_vett, $limiti_var, $anno, $fatto_libera, $app_liberato, $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_, $PHPR_TAB_PRE . "prenota");
            if ($fatto_libera == "NO") {
                $inserire = "NO";
                $mess_errore .= mex("Nel periodo selezionato non è possibile ospitare il cliente in un appartamento tra quelli richiesti", 'unit.php') . ".<br>";
                for ($n_t = 1; $n_t <= $num_tipologie; $n_t++) {
                    $mess_prenota .= mex("Prenotazione", "prenota.php") . mex("dal", "prenota.php") . " <b>" . formatta_data($inizioperiodo_orig[$n_t], $stile_data) . "</b> " . mex("al", "prenota.php") . " <b>" . formatta_data($fineperiodo_orig[$n_t], $stile_data) . "</b>";
                    $mess_prenota .= " " . mex("a nome di", "prenota.php") . " <b>{$cognome}</b> ";
                    if ($numpersone[$n_t]) {
                        $mess_prenota .= " " . mex("per", "prenota.php") . " <b>" . $numpersone[$n_t] . "</b> " . mex("persone", "prenota.php") . "";
                    }
                    if ($dati_tariffe[$tipotariffa[$n_t]]['nome']) {
                        $nometariffa_vedi = $dati_tariffe[$tipotariffa[$n_t]]['nome'];
                    } else {
                        $nometariffa_vedi = mex("tariffa", "prenota.php") . substr($tipotariffa[$n_t], 7);
                    }
                    $mess_prenota .= ", " . mex("tariffa", "prenota.php") . " \"{$nometariffa_vedi}\".<br><br>";
                }
                # fine for $n_t
            } else {
                $appartamento = $app_liberato;
            }
        }
        # fine else if ($num_app_agenzia != 0)
    }
    # fine if ($inserire != "NO")
    if ($inserire != "NO") {
        $metodi_pagamento = esegui_query("select valpersonalizza from {$tablepersonalizza} where idpersonalizza = 'metodi_pagamento' and idutente = '{$id_utente}'");
        $metodi_pagamento = risul_query($metodi_pagamento, 0, 'valpersonalizza');
        if ($metodi_pagamento) {
            $metodi_pagamento = explode(",", $metodi_pagamento);
        }
        $origini_prenota = esegui_query("select valpersonalizza from {$tablepersonalizza} where idpersonalizza = 'origini_prenota' and idutente = '{$id_utente}'");
        $origini_prenota = risul_query($origini_prenota, 0, 'valpersonalizza');
        if ($origini_prenota) {
            $origini_prenota = explode(",", $origini_prenota);
        }
        for ($n_t = 1; $n_t <= $num_tipologie; $n_t++) {
            $lunghezza_periodo = $fineperiodo[$n_t] - $inizioperiodo[$n_t] + 1;
            $max_idprenota = esegui_query("select numlimite from {$tablecostiprenota} where idcostiprenota = '1'");
            $max_idprenota = risul_query($max_idprenota, 0, 'numlimite');
            if ($id_prenota_imp[$n_t]) {
                $idprenota = $id_prenota_imp[$n_t];
            } else {
                $idprenota = $max_idprenota;
            }
            if ($idprenota >= $max_idprenota) {
                esegui_query("update {$tablecostiprenota} set numlimite = '" . ($idprenota + 1) . "' where idcostiprenota = '1'");
            }
            $mess_prenota .= mex("Prenotazione", "prenota.php") . " {$idprenota} " . mex("dal", "prenota.php") . " <b>" . formatta_data($inizioperiodo_orig[$n_t], $stile_data) . "</b> " . mex("al", "prenota.php") . " <b>" . formatta_data($fineperiodo_orig[$n_t], $stile_data) . "</b> ({$lunghezza_periodo} " . mex("{$parola_settiman}", "prenota.php");
            if ($lunghezza_periodo == 1) {
                $mess_prenota .= mex("{$lettera_a}", "prenota.php");
            } else {
                $mess_prenota .= mex("{$lettera_e}", "prenota.php");
            }
            $mess_prenota .= ") " . mex("a nome di", "prenota.php") . " <b>{$cognome}</b> ";
            if ($numpersone[$n_t]) {
                $mess_prenota .= mex("per", 'prenota.php') . " <b>" . $numpersone[$n_t] . "</b> " . mex("persone", 'prenota.php') . " ";
            }
            $mess_prenota .= mex("nell'appartamento", 'unit.php') . " <b>" . $appartamento[$n_t] . "</b>";
            if ($assegnazioneapp[$n_t] == "k") {
                $mess_prenota .= " (" . mex("fisso", "unit.php") . ")";
            } else {
                $mess_prenota .= " (" . mex("mobile", "prenota.php");
                if ($lista_app[$n_t]) {
                    $mess_prenota .= " " . mex("in", "prenota.php") . " " . str_replace(",", ", ", $lista_app[$n_t]);
                }
                $mess_prenota .= ")";
            }
            # fine else if ($assegnazioneapp[$n_t] == "k")
            $mess_prenota .= ":<br><br>";
            $costo_tariffa_tot = (double) 0;
            unset($lista_tariffe_sett);
            unset($lista_tariffep_sett);
            $tar_sett_imp = $tariffe_sett_imp[$n_t];
            for ($num2 = $inizioperiodo[$n_t]; $num2 <= $fineperiodo[$n_t]; $num2++) {
                $riga_tariffa = esegui_query("select * from  {$tableperiodi} where idperiodi = {$num2}");
                if (strcmp($tar_sett_imp[$num2], "")) {
                    $costo_tariffa = $tar_sett_imp[$num2];
                } else {
                    $costo_tariffa = risul_query($riga_tariffa, 0, $tipotariffa[$n_t]);
                }
                if ($dati_tariffe[$tipotariffa[$n_t]]['moltiplica'] == "p") {
                    if (!strcmp($costo_tariffa, "")) {
                        $costo_tariffa = 0;
                    }
                    if (strcmp($tar_sett_imp[$num2], "")) {
                        $costo_tariffap = 0;
                    } else {
                        $costo_tariffap = risul_query($riga_tariffa, 0, $tipotariffa[$n_t] . "p");
                    }
                    if (!strcmp($costo_tariffap, "")) {
                        $costo_tariffap = 0;
                    }
                    $costo_tariffap = (double) $costo_tariffap * (double) $numpersone[$n_t];
                    $lista_tariffep_sett .= "," . $costo_tariffap;
                    $costo_tariffa = (double) $costo_tariffa + $costo_tariffap;
                }
                # fine if ($dati_tariffe[$tipotariffa[$n_t]]['moltiplica'] == "p")
                $costo_tariffa_tot = (double) $costo_tariffa_tot + (double) $costo_tariffa;
                $lista_tariffe_sett .= "," . $costo_tariffa;
            }
            # fine for $num2
            $lista_tariffe_sett = substr($lista_tariffe_sett, 1);
            if ($lista_tariffep_sett) {
                $lista_tariffep_sett = substr($lista_tariffep_sett, 1);
                $lista_tariffe_sett .= ";{$lista_tariffep_sett}";
            }
            # fine if ($lista_tariffep_sett)
            $costo_tariffa = $costo_tariffa_tot;
            $nometariffa = $dati_tariffe[$tipotariffa[$n_t]]['nome'];
            if ($nometariffa == "") {
                $nometariffa = $tipotariffa[$n_t];
                $nometariffa_vedi = mex("tariffa", "prenota.php") . substr($tipotariffa[$n_t], 7);
            } else {
                $nometariffa_vedi = $nometariffa;
            }
            $nometariffa = aggslashdb($nometariffa);
            $tariffa = $nometariffa . "#@&" . $costo_tariffa_tot;
            if ($dati_tariffe[$tipotariffa[$n_t]]['moltiplica'] == "p") {
                $tariffa .= "#@&p";
            }
            $costo_tariffa_tot_p = punti_in_num($costo_tariffa_tot, $stile_soldi);
            $mess_prenota .= "{$costo_tariffa_tot_p} {$Euro} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " . mex("tariffa", "prenota.php") . " \"{$nometariffa_vedi}\"<br>";
            $valori = "abcdefghijkmnpqrstuvwxz";
            srand((double) microtime() * 1000000);
            unset($cod_prenota);
            for ($num2 = 0; $num2 < 4; $num2++) {
                $cod_prenota .= substr($valori, rand(0, 22), 1);
            }
            if ($conferma[$n_t] == "SI") {
                $conf = "S";
            } else {
                $conf = "N";
            }
            if ($pagato[$n_t] > 0) {
                $conf = "S";
            }
            $datainserimento = date("Y-m-d H:i:s", time() + C_DIFF_ORE * 3600);
            esegui_query("insert into {$tableprenota} (idprenota,idclienti,idappartamenti,iddatainizio,iddatafine,tariffa,tariffesettimanali,codice,conferma,datainserimento,hostinserimento,utente_inserimento) values ('{$idprenota}','" . $idclienti[$n_t] . "','" . aggslashdb($appartamento[$n_t]) . "','" . $inizioperiodo[$n_t] . "','" . $fineperiodo[$n_t] . "','{$tariffa}','{$lista_tariffe_sett}','{$cod_prenota}','{$conf}','{$datainserimento}','{$HOSTNAME}','{$id_utente_ins}')");
            if ($numpersone[$n_t]) {
                esegui_query("update {$tableprenota} set num_persone = '" . $numpersone[$n_t] . "' where idprenota = '{$idprenota}' ");
            }
            # fine if ($numpersone[$n_t])
            if ($dati_tariffe[$tipotariffa[$n_t]]['tasse_percent']) {
                esegui_query("update {$tableprenota} set tasseperc = '" . $dati_tariffe[$tipotariffa[$n_t]]['tasse_percent'] . "' where idprenota = '{$idprenota}' ");
            }
            # fine if ($dati_tariffe[$tipotariffa[$n_t]]['tasse_percent'])
            $caparra[$n_t] = formatta_soldi($caparra[$n_t]);
            if (controlla_soldi($caparra[$n_t], "pos") == "NO") {
                $caparra[$n_t] = "";
            }
            if (!$caparra[$n_t]) {
                $caparra[$n_t] = calcola_caparra($dati_tariffe, $tipotariffa[$n_t], $inizioperiodo[$n_t], $fineperiodo[$n_t], $costo_tariffa_tot, $lista_tariffe_sett);
            }
            $sconto[$n_t] = (double) formatta_soldi($sconto[$n_t]);
            if ($sconto[$n_t] and controlla_soldi($sconto[$n_t]) == "SI") {
                if ($sconto[$n_t] > $costo_tariffa_tot) {
                    $sconto[$n_t] = $costo_tariffa_tot;
                }
                esegui_query("update {$tableprenota} set sconto = '" . $sconto[$n_t] . "' where idprenota = '{$idprenota}' ");
                $sconto_p = punti_in_num($sconto[$n_t], $stile_soldi);
                if (substr($sconto_p, 0, 1) == "-") {
                    $sconto_p = substr($sconto_p, 1);
                } else {
                    $mess_prenota .= "-";
                }
                $mess_prenota .= "{$sconto_p} {$Euro} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " . mex("Sconto", "prenota.php") . "<br>";
                $costo_tariffa_tot = (double) $costo_tariffa_tot - (double) $sconto[$n_t];
            }
            # fine if ($sconto[$n_t] and...
            $commissioni[$n_t] = formatta_soldi($commissioni[$n_t]);
            if (controlla_soldi($commissioni[$n_t], "pos") == "NO") {
                $commissioni[$n_t] = "";
            }
            if (!$commissioni[$n_t]) {
                $commissioni[$n_t] = calcola_commissioni($dati_tariffe, $tipotariffa[$n_t], $inizioperiodo[$n_t], $fineperiodo[$n_t], $lista_tariffe_sett, $sconto[$n_t], 0);
            }
            esegui_query("update {$tableprenota} set tariffa_tot = '{$costo_tariffa_tot}' where idprenota = '{$idprenota}' ");
            $costo_tariffa_tot_p = punti_in_num($costo_tariffa_tot, $stile_soldi);
            $mess_prenota .= "<b>{$costo_tariffa_tot_p} {$Euro} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " . mex("TOTALE", "prenota.php") . "</b><br>";
            if ($lista_app[$n_t]) {
                esegui_query("update {$tableprenota} set app_assegnabili = '" . $lista_app[$n_t] . "' where idprenota = '{$idprenota}' ");
            }
            # fine if ($lista_app[$n_t])
            if ($assegnazioneapp[$n_t]) {
                esegui_query("update {$tableprenota} set assegnazioneapp = '" . $assegnazioneapp[$n_t] . "' where idprenota = '{$idprenota}' ");
            }
            # fine if ($assegnazioneapp[$n_t])
            if ($caparra[$n_t]) {
                if ($caparra[$n_t] > $costo_tariffa_tot) {
                    $caparra[$n_t] = $costo_tariffa_tot;
                }
                esegui_query("update {$tableprenota} set caparra = '" . $caparra[$n_t] . "' where idprenota = '{$idprenota}' ");
                $da_pagare = $costo_tariffa_tot - $caparra[$n_t];
                $caparra_p = punti_in_num($caparra[$n_t], $stile_soldi);
                $da_pagare_p = punti_in_num($da_pagare, $stile_soldi);
                $mess_prenota .= "<br>" . mex("Caparra", "prenota.php") . ": <b>{$caparra_p}</b> {$Euro} (" . mex("resto da pagare", "prenota.php") . ": {$da_pagare_p} {$Euro}).<br>";
            }
            # fine if ($caparra[$n_t])
            $met_trovato = "NO";
            if ($met_paga_caparra[$n_t] and $metodi_pagamento) {
                for ($num2 = 0; $num2 < count($metodi_pagamento); $num2++) {
                    if ($met_paga_caparra[$n_t] == $metodi_pagamento[$num2]) {
                        $met_trovato = "SI";
                    }
                }
                # fine for $num2
                if ($met_trovato == "SI") {
                    esegui_query("update {$tableprenota} set metodo_pagamento = '" . aggslashdb($met_paga_caparra[$n_t]) . "' where idprenota = '{$idprenota}' ");
                    if (!$caparra) {
                        $mess_prenota .= "<br>";
                    }
                    $mess_prenota .= mex("Metodo pagamento caparra", "prenota.php") . ": <b>" . $met_paga_caparra[$n_t] . "</b>.<br>";
                }
                # fine if ($met_trovato == "SI")
            }
            # fine if ($met_paga_caparra[$n_t] and $metodi_pagamento)
            if ($commissioni[$n_t]) {
                esegui_query("update {$tableprenota} set commissioni = '" . $commissioni[$n_t] . "' where idprenota = '{$idprenota}' ");
                $resto_comm = $costo_tariffa_tot - $commissioni[$n_t];
                $commissioni_p = punti_in_num($commissioni[$n_t], $stile_soldi);
                $resto_comm_p = punti_in_num($resto_comm, $stile_soldi);
                if (!$caparra[$n_t] and $met_trovato == "NO") {
                    $mess_prenota .= "<br>";
                }
                $mess_prenota .= mex("Commissioni", "prenota.php") . ": <b>{$commissioni_p}</b> {$Euro} (" . mex("resto commissioni", "prenota.php") . ": {$resto_comm_p} {$Euro}).<br>";
            }
            # fine if ($commissioni[$n_t])
            # calcolo costi nulli, non letto e senza inventario da associare alla tariffa, tutti come se fossero "se possibile"
            if ($ins_costi_agg == "costi_nulli") {
                unset($num_letti_agg);
                unset($num_costi_presenti);
                $oggi_costo = date("Ymd", time() + C_DIFF_ORE * 3600);
                for ($num_costo = 0; $num_costo < $dati_ca['num']; $num_costo++) {
                    if (!$dati_ca[$num_costo]['valore'] and !$dati_ca[$num_costo]['valore_perc'] and $dati_ca[$num_costo]['letto'] != "s" and !$dati_ca[$num_costo]['tipo_beniinv']) {
                        $associa_costo = "NO";
                        $associa_costo_tariffa = associa_costo_a_tariffa($dati_ca, $num_costo, $tipotariffa[$n_t], $fineperiodo[$n_t] - $inizioperiodo[$n_t] + 1);
                        if ($associa_costo_tariffa == "SI") {
                            $associa_costo = "SI";
                        }
                        if ($associa_costo_tariffa != "SI" and !$dati_ca[$num_costo]["incomp_" . $tipotariffa[$n_t]]) {
                            if ($dati_ca[$num_costo]['assegna_con_num_prenota'] and count($inizioperiodo) >= $dati_ca[$num_costo]['assegna_con_num_prenota']) {
                                $associa_costo = "SI";
                            }
                            if ($dati_ca[$num_costo]['assegna_da_ini_prenota']) {
                                $giorni_lim = substr($dati_ca[$num_costo]['assegna_da_ini_prenota'], 1);
                                $limite = date("Ymd", mktime(0, 0, 0, substr($inizioperiodo_orig[$n_t], 5, 2), substr($inizioperiodo_orig[$n_t], 8, 2) - $giorni_lim, substr($inizioperiodo_orig[$n_t], 0, 4)));
                                if (substr($dati_ca[$num_costo]['assegna_da_ini_prenota'], 0, 1) == ">" and $oggi_costo < $limite) {
                                    $associa_costo = "SI";
                                }
                                if (substr($dati_ca[$num_costo]['assegna_da_ini_prenota'], 0, 1) == "<" and $oggi_costo > $limite) {
                                    $associa_costo = "SI";
                                }
                            }
                            # fine if ($dati_ca[$num_costo][assegna_da_ini_prenota])
                        }
                        # fine if ($associa_costo_tariffa != "SI" and...
                        if ($associa_costo == "SI") {
                            #if ($dati_ca[$num_costo][tipo_val] == "q" and $costo_totale_presente = "SI") $associa_costo = "NO";
                            $settimane_costo = calcola_settimane_costo($tableperiodi, $dati_ca, $num_costo, $inizioperiodo[$n_t], $fineperiodo[$n_t], "", "");
                            calcola_moltiplica_costo($dati_ca, $num_costo, $moltiplica, $inizioperiodo[$n_t], $fineperiodo[$n_t], $settimane_costo, "", $numpersone[$n_t], $num_letti_agg);
                            $num_costi_presenti_copia = $num_costi_presenti;
                            $periodo_costo_trovato = trova_periodo_permesso_costo($dati_ca, $num_costo, $inizioperiodo[$n_t], $fineperiodo[$n_t], $settimane_costo);
                            if ($periodo_costo_trovato == "NO") {
                                $associa_costo = "NO";
                            } else {
                                if (controlla_num_limite_costo($tablecostiprenota, $tableprenota, $dati_ca, $num_costo, $num_costi_presenti_copia, $inizioperiodo[$n_t], $fineperiodo[$n_t], $settimane_costo, $moltiplica) == "NO") {
                                    $associa_costo = "NO";
                                }
                            }
                            if ($associa_costo == "SI") {
                                $num_costi_presenti = $num_costi_presenti_copia;
                                $idcostiprenota = esegui_query("select max(idcostiprenota) from {$tablecostiprenota}");
                                $idcostiprenota = risul_query($idcostiprenota, 0, 0) + 1;
                                $tipo_ca = $dati_ca[$num_costo]['tipo'] . $dati_ca[$num_costo]['tipo_val'];
                                $valore_ca = $dati_ca[$num_costo]['valore'];
                                $valore_perc_ca = $dati_ca[$num_costo]['valore_perc'];
                                $associasett_ca = $dati_ca[$num_costo]['associasett'];
                                if ($dati_ca[$num_costo]['var_percentuale'] != "s" and $dati_ca[$num_costo]['tipo_val'] != "f") {
                                    $tipo_ca = $dati_ca[$num_costo]['tipo'] . "f";
                                    $moltiplica = 1;
                                    if ($dati_ca[$num_costo]['tipo'] == "s") {
                                        $settimane_costo = 1;
                                        $associasett_ca = "n";
                                    }
                                    # fine if ($dati_ca[$num_costo][tipo] == "s")
                                }
                                # fine if ($dati_ca[$num_costo][var_percentuale] != "s" and...
                                if ($dati_ca[$num_costo]['var_moltiplica'] == "s") {
                                    $varmoltiplica_ca = $dati_ca[$num_costo]['moltiplica'] . $dati_ca[$num_costo]['molt_max'] . $dati_ca[$num_costo]['molt_agg'] . "," . $dati_ca[$num_costo]['molt_max_num'];
                                } else {
                                    $varmoltiplica_ca = "cx0,";
                                }
                                if ($dati_ca[$num_costo]['var_numsett'] == "s") {
                                    $varnumsett_ca = $dati_ca[$num_costo]['numsett_orig'];
                                } else {
                                    $varnumsett_ca = "c";
                                }
                                if ($dati_ca[$num_costo]['var_periodip'] == "s") {
                                    $varperiodipermessi_ca = $dati_ca[$num_costo]['periodipermessi_orig'];
                                } else {
                                    $varperiodipermessi_ca = "";
                                }
                                $varbeniinv_ca = "";
                                $varappincompatibili_ca = "";
                                if ($dati_ca[$num_costo]['var_tariffea'] == "s") {
                                    $vartariffeassociate_ca = "p" . $dati_ca[$num_costo][$tipotariffa[$n_t]];
                                } else {
                                    $vartariffeassociate_ca = "";
                                }
                                $vartariffeincomp_ca = "";
                                if ($dati_ca[$num_costo]['var_tariffei'] == "s") {
                                    for ($numtariffa = 1; $numtariffa <= $dati_tariffe['num']; $numtariffa++) {
                                        if ($dati_ca[$num_costo]["incomp_tariffa" . $numtariffa] == "i") {
                                            $vartariffeincomp_ca .= "," . $numtariffa;
                                        }
                                    }
                                    # fine for $numtariffa
                                    if ($vartariffeincomp_ca) {
                                        $vartariffeincomp_ca = substr($vartariffeincomp_ca, 1);
                                    }
                                }
                                # fine if ($dati_ca[$num_costo][var_tariffei] == "s")
                                if ($dati_ca[$num_costo]['var_comb'] == "s") {
                                    $variazione_ca = $dati_ca[$num_costo]['combina'];
                                } else {
                                    $variazione_ca = "n";
                                }
                                $variazione_ca .= $dati_ca[$num_costo]['escludi_tot_perc'];
                                esegui_query("insert into {$tablecostiprenota} (idcostiprenota,idprenota,tipo,nome,valore,associasett,settimane,moltiplica,letto,idntariffe,variazione,varmoltiplica,varnumsett,varperiodipermessi,varbeniinv,varappincompatibili,vartariffeassociate,vartariffeincomp,datainserimento,hostinserimento,utente_inserimento) values ('{$idcostiprenota}','{$idprenota}','{$tipo_ca}','" . aggslashdb($dati_ca[$num_costo]['nome']) . "','{$valore_ca}','{$associasett_ca}','{$settimane_costo}','{$moltiplica}','" . $dati_ca[$num_costo]['letto'] . "','" . $dati_ca[$num_costo]['id'] . "','{$variazione_ca}','{$varmoltiplica_ca}','{$varnumsett_ca}','{$varperiodipermessi_ca}','{$varbeniinv_ca}','{$varappincompatibili_ca}','{$vartariffeassociate_ca}','{$vartariffeincomp_ca}','{$datainserimento}','{$HOSTNAME}','{$id_utente_ins}')");
                                if (substr($tipo_ca, 1, 1) != "f") {
                                    esegui_query("update {$tablecostiprenota} set valore_perc = '{$valore_perc_ca}', arrotonda = '" . $dati_ca[$num_costo]['arrotonda'] . "' where idcostiprenota = '{$idcostiprenota}'");
                                }
                                if ($dati_ca[$num_costo]['tasseperc']) {
                                    esegui_query("update {$tablecostiprenota} set tasseperc = '" . $dati_ca[$num_costo]['tasseperc'] . "' where idcostiprenota = '{$idcostiprenota}'");
                                }
                                if (strcmp($dati_ca[$num_costo]['categoria'], "")) {
                                    esegui_query("update {$tablecostiprenota} set categoria = '" . $dati_ca[$num_costo]['categoria'] . "' where idcostiprenota = '{$idcostiprenota}'");
                                }
                            }
                            # fine if ($associa_costo == "SI")
                        }
                        # fine if ($associa_costo == "SI")
                    }
                    # fine if (!$dati_ca[$num_costo]['valore'] and !$dati_ca[$num_costo]['valore_perc'] and...
                }
                # fine for $num_costo
            }
            # fine if ($ins_costi_agg == "costi_nulli")
            if ($origine_prenota[$n_t] and $origini_prenota) {
                $orig_trovata = "NO";
                for ($num2 = 0; $num2 < count($origini_prenota); $num2++) {
                    if ($origine_prenota[$n_t] == $origini_prenota[$num2]) {
                        $orig_trovata = "SI";
                    }
                }
                # fine for $num2
                if ($orig_trovata == "SI") {
                    $origine_prenota[$n_t] = aggslashdb($origine_prenota[$n_t]);
                    esegui_query("update {$tableprenota} set origine = '" . $origine_prenota[$n_t] . "' where idprenota = '{$idprenota}' ");
                    if (!$caparra[$n_t] and $met_trovato == "NO" and !$commissioni[$n_t]) {
                        $mess_prenota .= "<br>";
                    }
                    $mess_prenota .= mex("Origine", "prenota.php") . ": <b>" . stripslashes($origine_prenota[$n_t]) . "</b>.<br>";
                }
                # fine if ($orig_trovata == "SI")
            }
            # fine if ($origine_prenota[$n_t] and $origini_prenota)
            if ($giorno_stima_checkin[$n_t] and $ora_stima_checkin[$n_t] and $min_stima_checkin[$n_t]) {
                if ($tipo_periodi == "g") {
                    $giorni_periodo = $lunghezza_periodo;
                } else {
                    $giorni_periodo = $lunghezza_periodo * 7;
                }
                if (controlla_num_pos($giorno_stima_checkin[$n_t]) == "SI" and $giorno_stima_checkin[$n_t] >= 1 and $giorno_stima_checkin[$n_t] <= 7 and $giorno_stima_checkin[$n_t] <= $giorni_periodo + 1) {
                    $data_stima_checkin = esegui_query("select datainizio from {$tableperiodi} where idperiodi = '" . $inizioperiodo[$n_t] . "'");
                    $data_stima_checkin = risul_query($data_stima_checkin, 0, 'datainizio');
                    $data_ini_prenota_f = formatta_data($data_stima_checkin, $stile_data);
                    $anno_dts = substr($data_stima_checkin, 0, 4);
                    $mese_dts = substr($data_stima_checkin, 5, 2);
                    $giorno_dts = substr($data_stima_checkin, 8, 2);
                    $data_stima_checkin = date("Y-m-d", mktime(0, 0, 0, $mese_dts, $giorno_dts + $giorno_stima_checkin[$n_t] - 1, $anno_dts));
                    $stima_checkin = $data_stima_checkin . " " . $ora_stima_checkin[$n_t] . ":" . $min_stima_checkin[$n_t] . ":00";
                    if (preg_match("/[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:00/", $stima_checkin)) {
                        esegui_query("update {$tableprenota} set checkout = '{$stima_checkin}' where idprenota = '{$idprenota}' ");
                        $mess_prenota .= "<br>" . mex("Orario stimato di entrata", "prenota.php") . ": <b>" . substr(str_replace($data_ini_prenota_f, "", formatta_data($stima_checkin, $stile_data)), 0, -3) . "</b>.<br>";
                    }
                    # fine if (preg_match("/[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:00/",$stima_checkin))
                }
                # fine if (controlla_num_pos($giorno_stima_checkin) == "SI" and...
            }
            # fine if ($giorno_stima_checkin[$n_t] and $ora_stima_checkin[$n_t] and $min_stima_checkin[$n_t])
            if ($commento[$n_t]) {
                $commento[$n_t] = htmlspecialchars($commento[$n_t]);
                $mess_prenota .= "<br>" . mex("Commento", "prenota.php") . ": " . $commento[$n_t] . "<br>";
                $commento[$n_t] = aggslashdb($commento[$n_t]);
                esegui_query("update {$tableprenota} set commento = '" . $commento[$n_t] . "' where idprenota = '{$idprenota}' ");
            }
            # fine if ($commento[$n_t])
            $mess_prenota .= "<br>" . mex("Prenotazione", "prenota.php") . " {$idprenota} " . mex("inserita", "prenota.php") . "!<br>";
            if ($n_t != $num_tipologie) {
                $mess_prenota .= "<hr style=\"width: 95%\">";
            }
            $lista_idprenota .= ",{$idprenota}";
            $lista_idini .= "," . $inizioperiodo[$n_t];
            $lista_idfine .= "," . $fineperiodo[$n_t];
            #$costo_tot_mess = (double) $costo_tot_mess + (double) $costo_tariffa_tot;
            #$caparra_mess = (double) $caparra_mess + (double) $caparra;
        }
        # fine for $n_t
        $lista_idprenota = substr($lista_idprenota, 1);
        $lista_idini = substr($lista_idini, 1);
        $lista_idfine = substr($lista_idfine, 1);
        if ($prenota_vicine == "SI") {
            $lista_idprenota_vett = explode(",", $lista_idprenota);
            for ($num1 = 0; $num1 < count($lista_idprenota_vett); $num1++) {
                $idprenota = $lista_idprenota_vett[$num1];
                $idprenota_vicine = substr(str_replace("," . $idprenota . ",", ",", "," . $lista_idprenota . ","), 1, -1);
                esegui_query("update {$tableprenota} set idprenota_compagna = '{$idprenota_vicine}' where idprenota = '{$idprenota}' ");
            }
            # fine for $num1
        }
        # fine if ($prenota_vicine == "SI")
        $stato['inserita'] = "SI";
    }
    # fine if ($inserire != "NO")
    if (!@is_array($stato) or $stato['inserita'] != "SI") {
        $stato['inserita'] = "NO";
    }
    $stato['mess_errore'] = $mess_errore;
    $stato['mess_regola1'] = $mess_regola1;
    $stato['mess_prenota'] = $mess_prenota;
    $stato['lista_idprenota'] = $lista_idprenota;
    $stato['idinizioperiodo'] = $lista_idini;
    $stato['idfineperiodo'] = $lista_idfine;
    return $lista_idprenota;
}
Exemplo n.º 2
0
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 "&nbsp;&nbsp;";
                                }
                                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 "&nbsp;&nbsp;";
                                }
                                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 "&nbsp;&nbsp;";
                                    }
                                    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 "&nbsp;&nbsp;";
                                }
                                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 "&nbsp;&nbsp;";
                                }
                                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 "&nbsp;&nbsp;";
                }
                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")
}
Exemplo n.º 3
0
$idclienti_camb = risul_query($dati_cambiati,0,'idclienti');
$cliente_camb = esegui_query("select cognome from $tableclienti where idclienti = '$idclienti_camb'");
if ($idclienti_camb) $cliente_camb = risul_query($cliente_camb,0,'cognome');
else $cliente_camb = "?";
$iddatainizio_camb = $inizio_prenota_id[$idprenota_cambiata];
$datainizio_camb = esegui_query("select datainizio from $tableperiodi where idperiodi = '$iddatainizio_camb'");
$datainizio_camb = risul_query($datainizio_camb,0,'datainizio');
$datainizio_camb_f = formatta_data($datainizio_camb,$stile_data);
$iddatafine_camb = $fine_prenota_id[$idprenota_cambiata];
$datafine_camb = esegui_query("select datafine from $tableperiodi where idperiodi = '$iddatafine_camb'");
$datafine_camb = risul_query($datafine_camb,0,'datafine');
$datafine_camb_f = formatta_data($datafine_camb,$stile_data);
echo mex("La prenotazione dal",$pag)." $datainizio_camb_f ".mex("al",$pag)." $datafine_camb_f ".mex("a nome di",$pag)." $cliente_camb ".mex("verrà spostata dall'appartamento",'unit.php')." <div style=\"display: inline; color: blue;\"><b>$id_app_agenzia</b></div> (<b>$motivazione_app_agenzia</b>) ".mex("al",'unit.php')." $idapp_camb.<br>";
} # fine if ($app_prenota_id[$idprenota_cambiata] and $app_prenota_id[$idprenota_cambiata] != $id_app_agenzia)
} # fine for $num2
$idprenota_cambiate_a_ag = prenota_in_app_e_periodo($id_app_agenzia,$idinizio_app_agenzia,$idfine_app_agenzia,$prenota_in_app_sett,$fine_prenota_id,$num_pca);
for ($num2 = 1 ; $num2 <= $num_pca ; $num2++) {
$idprenota_cambiata = $idprenota_cambiate_a_ag[$num2];
if ($app_orig_prenota_id[$idprenota_cambiata] and $app_prenota_id[$idprenota_cambiata] != $app_orig_prenota_id[$idprenota_cambiata]) {
$dati_cambiati = esegui_query("select * from $tableprenota where idprenota = $idprenota_cambiata");
$idapp_camb = $app_orig_prenota_id[$idprenota_cambiata];
$idclienti_camb = risul_query($dati_cambiati,0,'idclienti');
$cliente_camb = esegui_query("select cognome from $tableclienti where idclienti = $idclienti_camb");
if ($idclienti_camb) $cliente_camb = risul_query($cliente_camb,0,'cognome');
else $cliente_camb = "?";
$iddatainizio_camb = $inizio_prenota_id[$idprenota_cambiata];
$datainizio_camb = esegui_query("select datainizio from $tableperiodi where idperiodi = $iddatainizio_camb");
$datainizio_camb = risul_query($datainizio_camb,0,'datainizio');
$datainizio_camb_f = formatta_data($datainizio_camb,$stile_data);
$iddatafine_camb = $fine_prenota_id[$idprenota_cambiata];
$datafine_camb = esegui_query("select datafine from $tableperiodi where idperiodi = $iddatafine_camb");
Exemplo n.º 4
0
function spezzaprenota ($idinizio,$idfine,$anno,&$limiti_var,$profondita,&$n_tronchi,&$vet_appartamenti,&$vett_idinizio,&$vett_idfine,$num_persone,&$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;

$limiti_var['n_ini'] = $idinizio;
$limiti_var['n_fine'] = $idfine;
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 (!$n_tronchi) $n_tronchi = 0;

# ciclo da ripetere per ogni appartamento che non inizia con una
# prenotazione fissa, non spostabile o con $maxoccupanti troppo basso
$numsettimane = $idfine - $idinizio + 1;
$n_tronchi3 = -1;
if ($limiti_var['tutti_fissi'] != "SI" and $limiti_var['t_limite'] >= time()) {

for ($num1 = 0 ; $num1 < $dati_app['totapp'] ; $num1++) {
$numapp = $dati_app['posizione'][$num1];
if ($dati_app['maxocc'][$numapp] >= $num_persone) {
$prima_prenota = prenota_in_app_e_periodo($numapp,$idinizio,$idinizio,$prenota_in_app_sett,$fine_prenota_id,$num_pp);
if ($num_pp != 0) $idprima_prenota = $prima_prenota[1];
else $idprima_prenota = "";
if (!$idprima_prenota or $app_assegnabili_id[$idprima_prenota]) {
$limiti_var_orig = $limiti_var;
$nuova_profondita = $profondita;
$nuova_profondita['attuale'] = $profondita['attuale'] + 1;
$app_prenota_id2 = $app_prenota_id;
$prenota_in_app_sett2 = $prenota_in_app_sett;
$ap_ric = "";
$ap_ric[$numapp] = "SI";
$n_tronchi2 = $n_tronchi;
$vet_appartamenti2 = $vet_appartamenti;
$vett_idinizio2 = $vett_idinizio;
$vett_idfine2 = $vett_idfine;

for ($num2 = 0 ; $num2 < $numsettimane ; $num2 = $num2 + 1) {
$id_settimana = $idinizio + $num2;
$fatto_libera = "";
if ($debug == "on") {
for ($i = 0 ; $i < $profondita['attuale'] ; $i++) echo "&nbsp;&nbsp;";
echo "<b>".$profondita['attuale']."</b> <em>".date("H:i:s")."</em> spezz_libera  da $id_settimana a $id_settimana negli app ".implode(",",array_keys($ap_ric))."<br>";
} # fine if ($debug == "on")
liberasettimane($id_settimana,$id_settimana,$limiti_var,$anno,$fatto_libera,$app_liber,$nuova_profondita,$ap_ric,$app_prenota_id2,$app_orig_prenota_id,$inizio_prenota_id,$fine_prenota_id,$app_assegnabili_id,$prenota_in_app_sett2,$dati_app,$nome_tab_prenota);
if ($debug == "on") {
for ($i = 0 ; $i < $profondita['attuale'] ; $i++) echo "&nbsp;&nbsp;";
echo "<b>".$profondita['attuale']."</b> finito <em>".date("H:i:s")."</em> spezz_lib $fatto_libera $app_liber<br>";
} # fine if ($debug == "on")
if ($fatto_libera == "SI") {
$nuova_profondita['tot_prenota_attuale']++;
$app_prenota_id2[$nuova_profondita['tot_prenota_attuale']] = $numapp;
$inizio_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $id_settimana;
$fine_prenota_id[$nuova_profondita['tot_prenota_attuale']] = $id_settimana;
$prenota_in_app_sett2[$numapp][$id_settimana] = $nuova_profondita['tot_prenota_attuale'];
} # fine if ($fatto_libera == "SI")
else break;
} # fine for $num2

if ($fatto_libera == "SI" or $id_settimana != $idinizio) {

$n_tronchi2 = $n_tronchi2 + 1;
$vet_appartamenti2[$n_tronchi2] = $numapp;
$vett_idinizio2[$n_tronchi2] = $idinizio;
$vett_idfine2[$n_tronchi2] = $idfine;
if ($fatto_libera != "SI") {
$idfine2 = $id_settimana - 1;
$vett_idfine2[$n_tronchi2] = $idfine2;
if ($debug == "on") {
for ($i = 0 ; $i < $profondita['attuale'] ; $i++) echo "&nbsp;&nbsp;";
echo "<b>".$profondita['attuale']."</b> <em>".date("H:i:s")."</em> spezza  da $id_settimana a $idfine<br>";
} # fine if ($debug == "on")
spezzaprenota($id_settimana,$idfine,$anno,$limiti_var,$nuova_profondita,$n_tronchi2,$vet_appartamenti2,$vett_idinizio2,$vett_idfine2,$num_persone,$app_prenota_id2,$app_orig_prenota_id,$inizio_prenota_id,$fine_prenota_id,$app_assegnabili_id,$prenota_in_app_sett2,$dati_app,$nome_tab_prenota);
if ($debug == "on") {
for ($i = 0 ; $i < $profondita['attuale'] ; $i++) echo "&nbsp;&nbsp;";
echo "<b>".$profondita['attuale']."</b> finito <em>".date("H:i:s")."</em> spezza $fatto_libera $app_liber<br>";
} # fine if ($debug == "on")
if ($n_tronchi2 == -1) { break; }
} # fine if ($fatto_libera != "SI")

if ($n_tronchi3 == -1 or $n_tronchi2 < $n_tronchi3) {
$n_tronchi3 = $n_tronchi2;
$vet_appartamenti3 = $vet_appartamenti2;
$vett_idinizio3 = $vett_idinizio2;
$vett_idfine3 = $vett_idfine2;
for ($num2 = ($profondita['tot_prenota_attuale'] + 1) ; $num2 <= $nuova_profondita['tot_prenota_attuale'] ; $num2++) {
$app_prenota_id2[$num2] = "";
for ($num3 = $inizio_prenota_id[$num2] ; $num3 <= $fine_prenota_id[$num2] ; $num3++) {
$prenota_in_app_sett2[$numapp][$num3] = "";
} # fine for $num3
} # fine for $num2
$app_prenota_id_mod = $app_prenota_id2;
$prenota_in_app_sett_mod = $prenota_in_app_sett2;
} # fine if (!$n_tronchi3 or $n_tronchi2 < $n_tronchi3)

if ($n_tronchi3 == 1) break;

} # fine if ($fatto_libera == "SI" or $idsettimana != $idinizio)

for ($num2 = ($profondita['tot_prenota_attuale'] + 1) ; $num2 <= $nuova_profondita['tot_prenota_attuale'] ; $num2++) {
$inizio_prenota_id[$num2] = "";
$fine_prenota_id[$num2] = "";
} # fine for $num2
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 (!$idprima_prenota or $app_assegnabili_id[$idprima_prenota])
} # fine if ($dati_app['maxocc'][$numapp] >= $num_persone)
} # fine for $num1

} # fine if ($limiti_var['tutti_fissi'] != "SI" and...

$n_tronchi = $n_tronchi3;
if ($n_tronchi != -1) {
$vet_appartamenti = $vet_appartamenti3;
$vett_idinizio = $vett_idinizio3;
$vett_idfine = $vett_idfine3;
$app_prenota_id = $app_prenota_id_mod;
$prenota_in_app_sett = $prenota_in_app_sett_mod;
if ($primo_ciclo == "SI") {
$risul_agg = aggiorna_tableprenota($app_prenota_id,$app_orig_prenota_id,$tableprenota);
if (!$risul_agg) $n_tronchi = -1;
} # fine if ($primo_ciclo == "SI")
} # fine if ($n_tronchi != -1)

} # fine function spezzaprenota