Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dove impostare le date disponibili per "Prenota appuntamento"? #300

Open
2 tasks done
Cam-al opened this issue Jul 5, 2023 · 15 comments
Open
2 tasks done

Dove impostare le date disponibili per "Prenota appuntamento"? #300

Cam-al opened this issue Jul 5, 2023 · 15 comments
Labels
question Further information is requested

Comments

@Cam-al
Copy link

Cam-al commented Jul 5, 2023

Prerequisiti

Descrivi il problema

Compilando tutti campi nella pagina di "Prenotazione appuntamento" si arriva a una pagina "data e orario" che permette di prenotare anche date già passate.
Da dove si possono impostare le date disponibili?

Includi link o screenshot

No response

Su quale sisitema operativo stai riscontrando il problema?

Windows

Su quale browser stai riscontrando il problema?

Qualsiasi

Che versione del tema stai utilizzando?

1.7.1

@Cam-al Cam-al added the bug Something isn't working label Jul 5, 2023
@michmeno
Copy link

michmeno commented Jul 5, 2023

Non tutte le funzionalità del tema sono attive per varie ragioni.
Le date e gli orari sono nel file calendar.json
Il procedimento va implementato con la programmazione o plugin esterni (che devono però passare la verifica dell'App di valutazione).

@Cam-al
Copy link
Author

Cam-al commented Jul 5, 2023

Ciao, grazie, tu hai trovato qualche plugin che può andare bene?
ma questa sezione è obbligatoria ? va messa cosi o può essere anche un semplice contatto email come per "segnalazione disservizio"

@michmeno
Copy link

michmeno commented Jul 5, 2023

Ciao, questa sezione è obbligatoria e non basta la semplice e-mail; è stata lasciata così perché ogni comune possa personalizzarla secondo le proprie esigenze.
Prova a cercare il plugin Amelia.
Guarda anche #200

@Cam-al
Copy link
Author

Cam-al commented Jul 6, 2023

Ciao, grazie, lo proverò! ma la versione gratuita è sufficiente per fare delle prove o è necessaria la versione a pagamento?
Anche se sarebbe meglio avere questa funzione già integrata nel tema, dato che viene fornito il template da usare e che consente già di salvare gli appuntamenti, magari con la possibilità di aggiungere anche le date di servizi esterni oltre a quelle già prenotate del sito.

@michmeno
Copy link

michmeno commented Jul 6, 2023

A vedere il plugin ci vuole la versione a pagamento

@Cam-al
Copy link
Author

Cam-al commented Jul 6, 2023

Ho trovato la versione gratuita nel elenco di plug-in Wordpress, la sto provando, ma è limitata non posso aggiungere tutti i campi richiesti nel modello.

@abmcr
Copy link
Contributor

abmcr commented Jul 10, 2023

IO ho fatto da zero: nel senso che con un plugin di terze parti è poi un casino gestire la comunicazioen all'ente...

@Cam-al
Copy link
Author

Cam-al commented Jul 10, 2023

@abmcr
quindi utilizzi direttamente il tema per salvare gli appuntamenti o li invia solo al sistema di appuntamenti dell'ente e nel tema non rimane nulla ?
Potresti spiegarci come l'hai realizzato ?

@abmcr
Copy link
Contributor

abmcr commented Jul 10, 2023 via email

@Cam-al
Copy link
Author

Cam-al commented Jul 11, 2023

Ok, io non ho ancora ben chiaro come farlo, ma tu non utilizzi il post type appuntamenti, ma uno fatto da te?
oppure salvi le date nel post type del tema e utilizzi il tuo plugin solo per passare le date libere al form e al sistema di gestione appuntamenti dell'ente?

@abmcr
Copy link
Contributor

abmcr commented Jul 11, 2023

Si uso quello di default...L'ente NON ha alcun sistema se non quello implementato dal mio plugin

@zetareticoli zetareticoli added question Further information is requested and removed bug Something isn't working labels Sep 11, 2023
@cristina-pontarolo
Copy link

Ciao @abmcr . potresti dirmi quanto tempo ci vuole per creare il plugin che hai creato tu?
Inoltre è necessario per forza dare un data e un orario preciso, o possiamo modificare il testo dicendo che verranno contattati per scgleire giorno e orario??? grazie.

@abmcr
Copy link
Contributor

abmcr commented Sep 15, 2023

Ciao @abmcr . potresti dirmi quanto tempo ci vuole per creare il plugin che hai creato tu? Inoltre è necessario per forza dare un data e un orario preciso, o possiamo modificare il testo dicendo che verranno contattati per scgleire giorno e orario??? grazie.

il tempo che impieghi non so quantificarlo perché dipende da mille variabili che solo tu conosci.
Io ho capito che serve fornire uno slot la cui gestione però potrebbe essere libera...

@lucafranco74
Copy link

lucafranco74 commented May 21, 2024

Ciao, questa sezione è obbligatoria e non basta la semplice e-mail; è stata lasciata così perché ogni comune possa personalizzarla secondo le proprie esigenze. Prova a cercare il plugin Amelia. Guarda anche #200

Buongiorno, il plugin Amelia è accettato dalle specifiche AGID? Oppure si deve usare quella tipologia di prenotazione con la select a tendina? Sono bene accette tutte le risposte e sarebbe graditissima una indicazione da parte degli sviluppatori per capire se AGID ammette plugin commerciali e sapere quali sono.

@cellicom
Copy link

Se può tornare utile, io ho fatto così.
ho modificato il file calendar.json (che è statico) in calendar.php con il seguente codice:
modificate anche l'import nel codice su prenota-appuntamento.php
Restituisce tutte le possibili date dell'anno con slot di mezz'ora, dall'apertura alla chiusura.
Non è ottimale, ma momentaneamente può funzionare.

<?php
$cf_startTime = '08:30'; //Apertura
$cf_endTime = '13:30'; //Chiusura
$cf_slotTime = '+30 minutes'; //durata appuntamento

function getItalianHolidays($year) {
    // Italian public holidays
    $holidays = [
        sprintf('%04d-01-01', $year), // Capodanno
        sprintf('%04d-01-06', $year), // Epifania
        date('Y-m-d', easter_date($year)), // Pasqua
        date('Y-m-d', strtotime('+1 day', easter_date($year))), // Lunedì dell'Angelo - Pasquetta
        sprintf('%04d-04-25', $year), // Festa della Liberazione
        sprintf('%04d-05-01', $year), // Festa dei Lavoratori
        sprintf('%04d-06-02', $year), // Festa della Repubblica
        sprintf('%04d-08-15', $year), // Ferragosto
        sprintf('%04d-11-01', $year), // Tutti i Santi
        sprintf('%04d-12-08', $year), // Immacolata Concezione
        sprintf('%04d-12-25', $year), // Natale
        sprintf('%04d-12-26', $year)  // Santo Stefano
    ];

    return $holidays;
}

function getWorkingDays($startDate, $endDate) {
    $workingDays = [];
    $holidays = getItalianHolidays((int)$startDate->format('Y'));
    $holidays = array_merge($holidays, getItalianHolidays((int)$endDate->format('Y')));

    $currentDate = clone $startDate;
    while ($currentDate <= $endDate) {
        $month = (int)$currentDate->format('m');
        $dateString = $currentDate->format('Y-m-d');

        // Check if the day is a weekday (Monday to Friday) and not a holiday
        if ($currentDate->format('N') < 6 && !in_array($dateString, $holidays)) {
            $workingDays[$month][] = $dateString;
        }
        $currentDate->modify('+1 day');
    }

    return $workingDays;
}

function addTimeSlots($workingDays) {
    global $cf_startTime, $cf_endTime, $cf_slotTime;
    $timeSlots = [];

    foreach ($workingDays as $month => $days) {
        $timeSlots[$month] = [];
        foreach ($days as $day) {
            $startTime = new DateTime($day . ' ' .$cf_startTime);
            $endTime = new DateTime($day . ' '. $cf_endTime);

            while ($startTime < $endTime) {
                $slot = [
                    'startDate' => str_replace(" ", "T", $startTime->format('Y-m-d H:i')),
                    'endDate' => str_replace(" ", "T", $startTime->modify($cf_slotTime)->format('Y-m-d H:i'))
                ];
                $timeSlots[$month][] = $slot;
            }
        }
    }

    return $timeSlots;
}

// Usage
$startDate = new DateTime();
$endDate = (clone $startDate)->modify('+1 year')->modify('-1 month')->modify('last day of this month');
$startDate = new DateTime('tomorrow');
$workingDays = getWorkingDays($startDate, $endDate);
$timeSlots = addTimeSlots($workingDays);

header('Content-Type: application/json; charset=utf-8');
echo json_encode($timeSlots);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

7 participants