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();
 }
Beispiel #2
0
 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;
 }