Sto cercando di implementare un sistema di calendario con la possibilità di pianificare altre persone per gli appuntamenti. Il sistema deve essere in grado di impedire la pianificazione di una persona durante un altro appuntamento o durante il tempo non disponibile.django calendar free/busy/availabilitty
Ho esaminato tutti i progetti di calendario di django che ho trovato su Internet e nessuno di loro sembra averli incorporati (se l'ho perso in qualche modo, fatemelo sapere).
Forse sto diventando troppo stanco, ma l'unico modo in cui posso pensare di farlo sembra un po 'confuso. Qui va in pseudo-codice:
- quando un utente tenta di creare un nuovo appuntamento, afferrare start_time della nuova nomina e END_TIME
- per ogni appuntamento in quello stesso giorno, controllare se
- existing_start_time < new_start_time AND existing_end_time> new_start_time (è l'ora di inizio dei nuovi appuntamenti tra qualsiasi ora di inizio e di fine di un appuntamento esistente)
- time_start_time < new_end_time AND existing_end_time> new_end_time (è i nuovi appuntamenti it tempo d tra inizio e fine di ogni appuntamento esistente)
- se non sono stati trovati oggetti, poi andare avanti e aggiungere il nuovo appuntamento
Considerando Django non ha alcun filtraggio in base al tempo, tutto questo deve essere fatto usando .extra() sul queryset.
Quindi, sto chiedendo se c'è un modo migliore. Un trucco o un modulo pitonico o qualsiasi cosa che possa semplificare questo. O un progetto esistente che ha ciò di cui ho bisogno o che può guidarmi nella giusta direzione.
Grazie.
+1 Impressionante! Non avevo visto il test dell'intervallo è stato incorporato nell'API QuerySet di Django. –
Grazie per l'ottimo consiglio. Mancavano eventi che erano iniziati prima e terminati dopo il nuovo appuntamento. Ad esempio: se un cliente ha un appuntamento da 1 a 5, ciò non impedirebbe a qualcuno di prenotare da 2 a 3. Ho aggiunto quanto segue per includere tali situazioni: durante_conflict = Appointment.objects.filter (start_date__lte = appuntamento.start_time, end_date__gte = appuntamento.end_time) if (start_conflict o end_conflict o during_conflict): – mhost
Eccellente. Sono contento che questo sia stato utile. Ho intenzione di aggiungere il tuo caso in modo che la risposta sia più completa. –