public function process() { global $cookie; if ($_POST["booking"] != 'confirm' && $_POST["booking"] != 'calculate' && $_REQUEST['booking'] != 'view' && $_POST['booking'] != 'payment' && $_POST["booking"] != 'finish' && $_POST["booking"] != 'save') { Tools::redirect('index.php'); } if ($_REQUEST['booking'] == 'view') { // view page if ($_REQUEST['vouch_info'] == 1 || $_REQUEST['savepdf'] == 1) { $orderId = $_GET['oid']; //获取订单编号 if ($_REQUEST['savepdf'] == 1) { $booking_info = Booking::getBookingInfo($_GET['oid'], "en"); } else { $booking_info = Booking::getBookingInfo($_GET['oid']); } $booking_info['agent_info'] = new Member($booking_info['OrderUserId']); // make string of "Total No or rooms" $_rooms = array(); foreach ($booking_info['booked_roomplan_list'] as $roomplan) { if ($_rooms[$roomplan[RoomPlanId]]) { $_rooms[$roomplan[RoomPlanId]]['count']++; } else { $_rooms[$roomplan[RoomPlanId]]['count'] = 1; $_rooms[$roomplan[RoomPlanId]]['name'] = $roomplan[RoomPlanName]; } } $_roomsString = ""; foreach ($_rooms as $_room) { if ($_roomsString != "") { $_roomsString .= "& "; } $_roomsString .= $_room['count'] . " " . $_room['name']; } $booking_info['roomString'] = $_roomsString; if ($_REQUEST['savepdf'] == 1) { $this->printPDF($booking_info); exit; } else { self::$smarty->assign("booking_info", $booking_info); } } // move the engine to preprocess function /* $booking_info = Booking::getBookingInfo ( $_GET ['oid'] ); if (! $booking_info) Tools::redirect ( 'index.php' ); if ($_REQUEST ['payment']) self::$smarty->assign ( "payment", $_REQUEST ['payment'] ); self::$smarty->assign ( "method", 'view' ); */ } else { // other(build booking info from post variable for edit, confirm, finish) $booking_info = Booking::buildBookingInfoFromPost(self::$cookie->CompanyID); self::$smarty->assign("method", 'order'); self::$smarty->assign("booking_info", $booking_info); foreach ($booking_info['booked_roomplan_list'] as $bi) { //echo $bi['Check_0']; if ($bi['Check_0'] == '0') { $error['message'] = "満室のためご希望の日程には変更できません"; self::$smarty->assign("error", $error); self::$smarty->display(_TAS_THEME_DIR_ . 'error_redirect.tpl'); exit; } } //p($booking_info['booked_roomplan_list']); } if ($_POST["booking"] == 'calculate') { $checkin = $_POST['checkin']; //获取checkin的值 $checkout = $_POST['checkout']; //获取checkout的值 //获取roomPlanId $ids = $_POST['ids']; $rpid_list = array(); foreach ($ids as $id) { $rpid_list[] = $_POST['roomplan_ids_' . $id]; } //计算房间数量是否满足条件,如果有一条不满足则发出错误报告 $roomplan_list = RoomPlan::getRoomPlanListForBooking($rpid_list, $checkin, $checkout); $plan_list = array(); foreach ($roomplan_list as $record) { $plan_list[$record['RoomPlanId']] = $record; } //查看是否有房间不满足条件 $isOk = true; foreach ($rpid_list as $rpid) { if (empty($plan_list[$rpid])) { $isOk = false; break; } } if (!$isOk) { $error['message'] = "There is not any room as requested"; self::$smarty->assign("error", $error); self::$smarty->display(_TAS_THEME_DIR_ . 'error_redirect.tpl'); exit; } self::$smarty->assign("countries", Tools::getCountries()); self::$smarty->assign("method", 'edit'); } //添加修改的情况 if ($_POST["booking"] == 'save') { if ($booking_info['order_id'] == 0) { //如果订单ID没有,则报错 $error['message'] = "订单编号不存在"; self::$smarty->assign("error", $error); self::$smarty->display(_TAS_THEME_DIR_ . 'error_redirect.tpl'); exit; } $checkin = $_POST['checkin']; //获取checkin的值 $checkout = $_POST['checkout']; //获取checkout的值 //获取roomPlanId $ids = $_POST['ids']; $rpid_list = array(); foreach ($ids as $id) { $rpid_list[] = $_POST['roomplan_ids_' . $id]; } //计算房间数量是否满足条件,如果有一条不满足则发出错误报告 $roomplan_list = RoomPlan::getRoomPlanListForBooking($rpid_list, $checkin, $checkout); $plan_list = array(); foreach ($roomplan_list as $record) { $plan_list[$record['RoomPlanId']] = $record; } //查看是否有房间不满足条件 $isOk = true; foreach ($rpid_list as $rpid) { if (empty($plan_list[$rpid])) { $isOk = false; break; } } if (!$isOk) { $error['message'] = "There is not any room as requested"; self::$smarty->assign("error", $error); self::$smarty->display(_TAS_THEME_DIR_ . 'error_redirect.tpl'); exit; } $booking_info['paymentMethod'] = Member::getPaymentMethod(self::$cookie->CompanyID); //获取支付方式,是前支付还是后支付 $order_id = Booking::modifyBooking($booking_info); if (empty($order_id)) { $error['message'] = "修改失败, 您修订的房间信息不存在。"; self::$smarty->assign("error", $error); self::$smarty->display(_TAS_THEME_DIR_ . 'error_redirect.tpl'); } else { //下订单成功,此时需要发送邮件 Tools::ordermail($order_id); Tools::emailHotel($order_id, 11); Tools::redirect('booking_list.php'); } exit; } if ($_POST["booking"] == 'finish') { // $_POST ["booking"] == 'save' if ($booking_info['order_id'] == 0) { $booking_info['OrderUserId'] = self::$cookie->UserID; } //获取用户ID $booking_info['paymentMethod'] = Member::getPaymentMethod(self::$cookie->CompanyID); $order_id = Booking::insertNewBooking($booking_info); if ($order_id) { $booking_info = Booking::getBookingInfo($order_id); //下订单成功,此时需要发送邮件 Tools::ordermail($order_id); Tools::emailHotel($order_id, 10); } else { $error['message'] = "Booking has time out!"; self::$smarty->assign("error", $error); self::$smarty->display(_TAS_THEME_DIR_ . 'error_redirect.tpl'); exit; } //$booking_info = Booking::getBookingInfo ( $order_id ); self::$smarty->assign("booking_info", $booking_info); //if ($_POST ["booking"] == 'save') // Tools::redirect ( 'booking_list.php' ); } if ($_POST['booking'] == 'payment') { //支付接口调用 $url = "http://localhost/payment.php"; //支付站点网址 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_exec($ch); //$content = $response = curl_getinfo($ch); curl_close($ch); if ($response['http_code'] == 200) { //判断是否支付成功,此处只是模拟使用 Booking::changeBookingStatus($booking_info['order_id'], 4); Booking::changePayStatus($booking_info['order_id'], 2); Booking::payment($booking_info['order_id'], $_POST['money']); //下订单成功,此时需要发送邮件 Tools::ordermail($order_id); } else { //模拟支付失败的情况 $error = array(); $error['message'] = 'sorroy charge fail'; self::$smarty->assign("error", $error); self::$smarty->display(_TAS_THEME_DIR_ . 'error_redirect.tpl'); exit; } } parent::process(); }
public static function buildBookingInfoFromPost($companyId) { //从Post表单中建立预定信息 $booking_info = array(); $booking_info = Tools::element_copy($_POST, 'order_id', 'hotel_id', 'checkin', 'checkout', 'contact_name', 'contact_email', 'contact_tel', 'contact_hp'); $booking_info['order_id'] = Tools::get_default_val(@$_POST['order_id'], 0); //获取订单编号,没有则认为是0 $nights = (strtotime($booking_info['checkout']) - strtotime($booking_info['checkin'])) / (24 * 60 * 60); // diff day $booking_info['nights'] = $nights; //计算预定几个晚上 $booking_info['hotel_info'] = HotelDetail::getHotelDescription($_POST['hotel_id']); //获取酒店信息 //OrderRoom表中会用到 $ids = $_POST['ids']; $orid_list = array(); $rpid_list = array(); foreach ($ids as $id) { $orid_list[] = $_POST['or_ids_' . $id]; $rpid_list[] = $_POST['roomplan_ids_' . $id]; } //获取房间列表 $roomplan_list = RoomPlan::getRoomPlanListForBooking($rpid_list, $booking_info['checkin'], $booking_info['checkout']); $total_price = 0.0; //计算总价格 $org_total_price = 0.0; //计算不含手数料总价格 $booked_roomplan_list = array(); foreach ($roomplan_list as $key => $booked_roomplan) { $id = $ids[$key]; $orid = $orid_list[$id]; $booked_roomplan['OrderRoomId'] = $orid; $booked_roomplan['req_nonsmoking'] = Tools::get_default_val($_POST['req_nonsmoking_' . $id], 0); $booked_roomplan['req_smoking'] = Tools::get_default_val($_POST['req_smoking_' . $id], 0); $booked_roomplan['req_adjoin'] = Tools::get_default_val($_POST['req_adjoin_' . $id], 0); $booked_roomplan['req_remark'] = Tools::get_default_val($_POST['req_remark_' . $id], ''); $customer_info_list = array(); if (array_key_exists('customer_fnames_' . $id, $_POST)) { foreach ($_POST['customer_fnames_' . $id] as $i => $val) { if ($_POST['customer_fnames_' . $id][$i] != '' || $_POST['customer_gnames_' . $id][$i] != '') { $customer_info = array(); $customer_info['customer_fnames'] = $_POST['customer_fnames_' . $id][$i]; $customer_info['customer_gnames'] = $_POST['customer_gnames_' . $id][$i]; $customer_info['customer_sex'] = Tools::get_default_val($_POST['customer_sex_' . $id . "_{$i}"], 0); $customer_info['customer_country'] = $_POST['customer_country_' . $id][$i]; $customer_info['customer_country_name'] = Tools::getCountryName($customer_info['customer_country']); $customer_info_list[] = $customer_info; } } } else { // empty customers info for ($i = 0; $i < $booked_roomplan['RoomMaxPersons']; $i++) { // default value $customer_info['customer_fnames'] = ''; $customer_info['customer_gnames'] = ''; $customer_info['customer_sex'] = 1; // male $customer_info['customer_country'] = 109; // japan $customer_info_list[] = $customer_info; } } $booked_roomplan['customer_info_list'] = $customer_info_list; $price_result = Booking::calculation_roomplan_price($booked_roomplan['RoomPlanId'], $booking_info['checkin'], $booking_info['checkout'], $companyId); $booked_roomplan['Price'] = $price_result['Price']; $booked_roomplan['PriceString'] = $price_result['PriceString']; $total_price += $booked_roomplan['Price']; $booked_roomplan['Check_0'] = $price_result['check_0']; $booked_roomplan['OrgPrice'] = $price_result['OrgPrice']; $org_total_price += $booked_roomplan['OrgPrice']; $booked_roomplan_list[] = $booked_roomplan; } $booking_info['TotalPrice'] = $total_price; $booking_info['TotalPriceString'] = Tools::money($total_price); $booking_info['booked_roomplan_list'] = $booked_roomplan_list; $booking_info['OrgTotalPrice'] = $org_total_price; //由于此处只有初次下订单时才经过,所以otherPrice必定为0 $booking_info['otherPrice'] = 0; $booking_info['PaidIn'] = Tools::money($booking_info['otherPrice']); $booking_info['money'] = $booking_info['TotalPrice'] - $booking_info['otherPrice']; $booking_info['UnPaid'] = Tools::money($booking_info['money']); $booking_info['org_money'] = $booking_info['OrgTotalPrice'] - $booking_info['otherPrice']; return $booking_info; }