Olá,Estou com dificuldade de arrumar um bug de um sistema de reservas online de hotel
O sistema ta a aceitando vender um quarto mesmo quando a disponibilidade(Allotment) está em zero.
Devo adicionar uma linha de codigo para filtrar a disponibilidade caso allotment seja = 0 nas datas pesquisadas.
Pra mim esta é a linha que está dando erro: (linha 11)
$sql .= "AND pms_allotment.allotment >= '$rooms' \n";
DEVERIA SER ALGO TIPO:
$sql .= "AND pms_allotment.allotment > 0 \n"; Mas mesmo com essa variação falta algo,porque o bug ainda persiste....
-A variável '$rooms' é sempre = 1
-este php é o que faz as contas finais para dizer no site se um quarto está disponivel e quanto custa
-Front end desse sistema: http://yogaquantico.com.br/t9/
-O problema só aparece quando tenho mais de 2 ou mais quartos cadastrados,caso eu tenha só 1 quarto cadastrado a disponibilidade funciona bem quando chega a zero.
- E quando tenho mais de 2 quartos cadstrados e por exemplo quero ficar na suite X por 5 dias,mas ela so tem disponibilidade para 3 dias,
o site mostra que ela está disponivel e acaba vendendo-a com preços misturados de outras suites disponiveis na mesma data.
<?
$sql = "SELECT * \n";
$sql .= "FROM pms_ratecode_rate, pms_allotment \n";
$sql .= "WHERE pms_ratecode_rate.ratecode_id = '$rs[ratecode_id]' \n";
$sql .= "AND pms_allotment.allotmaster_id = '$allotmaster_id' \n";
$sql .= "AND pms_allotment.roomtype_id = '$rs[roomtype_id]' \n";
$sql .= "AND pms_ratecode_rate.ratedate = pms_allotment.allotdate \n";
$sql .= "AND pms_ratecode_rate.ratedate >= '$checkin' \n";
$sql .= "AND pms_ratecode_rate.ratedate < '$checkout' \n";
$sql .= "AND pms_ratecode_rate.ratedate = pms_allotment.allotdate \n";
$sql .= "AND pms_allotment.allotment >= '$rooms' \n";
$stmt1 = $db->prepare($sql);
$stmt1->execute()or die("<pre>$sql</pre>".print_r($stmt1->errorInfo()));
if($stmt1->rowCount()){
while($rs1 = $stmt1->fetch(PDO::FETCH_ASSOC)){
list($rate_yy,$rate_mm,$rate_dd) = explode("-",$rs1[ratedate]);
$ratestamp = mktime(0,0,0,$rate_mm,$rate_dd,$rate_yy);
$rate[$rs1[ratedate]] = $rs1;
}
$n = 0;
$notavai = false;
while($n < $nights){
$dailycheck_stamp = date("Y-m-d", mktime(0,0,0,$mm1,$dd1+$n,$yy1));
if(is_array($rate[$dailycheck_stamp]) == false){
$notavai = true;
}
if(is_array($promo) == false){
$ratetotal[$rs[ratecode_id]][] = ($rate[$dailycheck_stamp]["rate_$adults"] + ($rate[$dailycheck_stamp]["rate_child"] * $child)) * $rooms;
}else{
$rate_promo = ($ratepromo[$dailycheck_stamp]["rate_$adults"] + ($ratepromo[$dailycheck_stamp]["rate_child"] * $child)) * $rooms;
$rate_cross[$rs[ratecode_id]][] = ($cross_rate[$dailycheck_stamp]["rate_$adults"] + ($cross_rate[$dailycheck_stamp]["rate_child"] * $child)) * $rooms;
$ratetotal[$rs[ratecode_id]][] = $rate_promo;
$ratetotal_cross[$rs[ratecode_id]][] = $rate_promo;
}
$n++;
}
if($property[taxtype] == "inclusive"){
$tax = 0;
$total = array_sum($ratetotal[$rs[ratecode_id]]);
$total_notax = $total;
}else{
$total_notax = array_sum($ratetotal[$rs[ratecode_id]]);
$tax = $total_notax * ($property[taxamount]/100);
$total = $total_notax + $tax;
}
$sql = "INSERT INTO pms_rateavai \n";
$sql .= "SET \n";
$sql .= "agent_id = '$agent_id', \n";
$sql .= "session_id = '$session_id', \n";
$sql .= "property_id = '$property[property_id]', \n";
$sql .= "ratemaster_id = '$ratemaster_id', \n";
$sql .= "allotmaster_id = '$allotmaster_id', \n";
$sql .= "ratecode_id = '$rs[ratecode_id]', \n";
$sql .= "roomtype_id = '$rs[roomtype_id]', \n";
$sql .= "checkin = '$checkin', \n";
$sql .= "checkout = '$checkout', \n";
$sql .= "nights = '$nights', \n";
$sql .= "rooms = '$rooms', \n";
$sql .= "adults = '$adults', \n";
$sql .= "child = '$child', \n";
$sql .= "inclusion = '$rs[ratecode_inclusion]', \n";
$sql .= "policy_id = '$rs[policy_id]', \n";
$sql .= "taxtype = '$property[taxtype]', \n";
$sql .= "tax = '$tax', \n";
$sql .= "room_total = '$total_notax', \n";
$sql .= "total_notax = '$total_notax', \n";
$sql .= "total = '$total', \n";
$sql .= "currency = '$rs[ratecode_currency]' \n";
$stmtInsert = $db->prepare($sql);
$stmtInsert->execute()or die("<pre>$sql</pre>".print_r($stmtInsert->errorInfo()));
$rateavai_id = $db->lastInsertId();
$uri = "?action=bookingcart&rateavai_id=".($rateavai_id);
$ratecode_total_summary = array_sum($ratetotal[$rs[ratecode_id]]);
if($notavai == false){
$n = 0;
if($weeks == 1){
if($nights == 1){
include("inc.rateavai.query.night.php");
}else{
include("inc.rateavai.query.nights.php");
}
}else{
include("inc.rateavai.query.weeks.php");
}
$available = true;
$ratecode_id_count[] = $rs[ratecode_i];
$roomtype_name = json_decode($rs[roomtype_name],true);
$data_rate_filter[] = crc($ratecode_total_summary,$rs[ratecode_currency],$currency);
if($data_roomtype_name_filter[$rs[roomtype_id]] == false){
if($roomtype_name[$locale] == false){
$roomtype_name[$locale] = $roomtype_name[en_US];
}
$data_roomtype_name_filter[$rs[roomtype_id]] = $roomtype_name[$locale];
}
unset($stamp_checkpromo_start);
unset($stamp_checkpromo_end);
unset($cross_rate);
unset($rate_cross);
unset($promo);
unset($ratepromo);
unset($ratetotal_cross);
unset($rate);
}
}
?>