Konsep Paket berbeda dengan booking biasa, dimana perbedaannya adalah, untuk Paket:
– valid pada periode tertentu, jadi jika user memilih tanggal check-in diluar periode, maka akan otomatis ditolak
– user cukup memilih tanggal check-in, check-out akan langsung muncul sesuai dg paket yang dipilih (misal paket menginap 3 hari 2 malam)
– harga kamar tidak mengikuti harga biasa, melainkan sudah menjadi satu kesatuan
– untuk cancelation, kemungkinan akan ada policy yang berbeda

Pertama2 kita harus siapkan tabel paket, yang berisi paket2 yang akan dijual

CREATE TABLE `paket` (
`idpaket` int(11) NOT NULL auto_increment,
`namapaket` varchar(50) NOT NULL,
`idhotel` varchar(8) NOT NULL,
`roomtype` varchar(50) NOT NULL,
`periodeawal` date NOT NULL,
`periodeakhir` date NOT NULL,
`minstay` int(11) NOT NULL,
`harga` int(11) NOT NULL,
`gambar` varchar(50) NOT NULL,
`remarks` varchar(255) NOT NULL,
`valid` varchar(1) NOT NULL,
PRIMARY KEY (`idpaket`),
UNIQUE KEY `idpaket` (`idpaket`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Kemudian kita perlu memberikan filter di booking biasa, agar pada periode tertentu, agent tidak akan bisa booking kalau tidak memilih menu paket. Berikut adalah programnya:

//check on paket
$max=(strtotime($_GET[‘tglcheckout’])/86400)-(strtotime($_GET[‘tglcheckin’])/86400);

//this looping is needed for different room type
for($i=0;$i<=$max-1;$i++) { $sql="SELECT * FROM paket WHERE idhotel='". $_GET['idhotel'] ."' AND roomtype='". $_GET['tipekamar'.$i] . "' AND valid='1'"; $result=mysql_query($sql); //if paket available if (mysql_num_rows($result)!=0) { //read ALL paket available while($data=mysql_fetch_array($result)) { $periodeawal=$data[periodeawal]; $periodeakhir=$data[periodeakhir]; $minstay=$data[minstay]; if ( ( (strtotime($_GET['tglcheckin'])/86400) >= (strtotime($periodeawal)/86400) ) &&
( (strtotime($_GET[‘tglcheckin’])/86400) <= (strtotime($periodeakhir)/86400) ) ) { if ($max<$minstay) { if ($error!=1) { echo "

Periode yang anda pilih menerapkan Minimum Stay Policy. Mohon cek Paket Mandira.

“;
$error=1;
}
}
}
}
}

}

Algoritmanya kurang lebih adalah sebagai berikut:
1. Hitung jumlah malam untuk persiapan looping, yang diperoleh dari pengurangan tanggal check-out dengan tanggal check-in
2. Buat looping sejumlah jumlah malam yang dibooking
3. Cari data di tabel paket dengan filter idhotel, roomtype dan apakah masih valid (valid=1)
4. Jika ketemu datanya,
5. Buat looping membaca data paket (catatan: data paket mungkin saja lebih dari satu macam untuk hotel, tipe kamar dan periode yang sama)
6. Simpan data periode awal dan akhir paket serta minimum stay ke dalam variabel untuk perbandingan
7. Cek, apakah tanggal check in ada di dalam range periode awal dan akhir paket
8. Jika jumlah nites yang dibooking melebihi nilai minimum stay, maka bookingan akan direject, nilai variabel error diisi dengan 1