tworzę znajomemu system rezerwacji wizyt w warsztacie.
Wszsytko szło mi dobrze aż do momenu w którym sprawdzam czy wybrany przez użytkownika termin jest wolny.
Nie bardzo potrafie sobie z tym poradzić.
Raz działa raz nie - tzn w zależności ile czasu trwa wizyta przed/po wybranej przez nas nowej wizycie
Jak robie:
Wywołanie metody sprawdzania:
$_POST['start'] = '3-2-2012 14:0'; $_POST['end'] = '3-2-2012 17:0'; $_GET['i'] = 30; //interwał czasowy $booking = new Booking(); $booking->id = $_POST['id']; if($booking->isAvailable($start,$end,$_GET['i'])){ } else { }
Metoda sprawdzająca:
public function isAvailable($start,$end,$i=30){ return false; } $sql = 'SELECT id_booking FROM '.$this->prefix.$this->table.' WHERE id_objects='.$this->id.' AND (booking_from LIKE "'.substr($start,0,10).'%" AND booking_to LIKE "'.substr($end,0,10).'%") AND ((start_time>='.$start_time.' AND end_time<='.$end_time.') OR (start_time<=('.($end_time+($i)).'*(CEIL(end_time-start_time)/3600)) AND end_time>=('.($start_time+($i*30)).'))*(CEIL(end_time-start_time)/3600)) AND status != 9'; $sql2 = $sql = 'SELECT id_booking_blocked FROM '.$this->prefix.$this->table.'_blocked WHERE id_objects='.$this->id.' AND (booking_from LIKE "'.substr($start,0,10).'%" AND booking_to LIKE "'.substr($end,0,10).'%") AND ((start_time>='.$start_time.' AND end_time<='.$end_time.') OR (start_time<=('.($end_time+($i)).'*(CEIL(end_time-start_time)/3600)) AND end_time>=('.($start_time+($i*30)).'))*(CEIL(end_time-start_time)/3600))'; if($this->db->count($sql) || $this->db->count($sql2)){ return false; } else { return true; } }
$sql = zapytanie do sprawdzania czy już ktoś umówił się w tym dniu
$sql2 = zapytanie do sprawdzenia czy ten termin nie jest wyłączony z rezerwacji
Moge liczyć na jakieś wskazówki?
Pozdrawiam