diff --git a/application/third_party/trainsystem/config/config.php b/application/third_party/trainsystem/config/config.php index 1d87da49..3b7e5327 100644 --- a/application/third_party/trainsystem/config/config.php +++ b/application/third_party/trainsystem/config/config.php @@ -47,9 +47,10 @@ $config["train_order_status_msg"]=array( "4"=>"出票成功", "5"=>"出票失败", "6"=>"线上退票处理中", - "7"=>"有乘客退票(改签)成功", + "7"=>"(改签)退票成功", "8"=>"乘客退票失败", - "e"=>"数据错误,提交失败" + "e"=>"数据错误,提交失败", + "9"=>"改签成功" ); //座次配对 diff --git a/application/third_party/trainsystem/controllers/api.php b/application/third_party/trainsystem/controllers/api.php index 045d9f3b..94765fb8 100644 --- a/application/third_party/trainsystem/controllers/api.php +++ b/application/third_party/trainsystem/controllers/api.php @@ -342,16 +342,4 @@ class api extends CI_Controller{ //print_r($add_data); } } - - public function update_order(){ - $juhe_orders = $this->train_system_model->getallorders(); - foreach ($juhe_orders as $tickets_info){ - $ordernumber = $tickets_info->JOL_JuheOrder; - $subtime = $tickets_info->JOL_SubTime; - $price = $tickets_info->JOL_Price; - $this->train_system_model->update_juheorder($ordernumber,$subtime,$price); - } - - } - } \ No newline at end of file diff --git a/application/third_party/trainsystem/controllers/callback.php b/application/third_party/trainsystem/controllers/callback.php index 9c82ba8b..498f67c9 100644 --- a/application/third_party/trainsystem/controllers/callback.php +++ b/application/third_party/trainsystem/controllers/callback.php @@ -169,7 +169,7 @@ class callback extends CI_Controller{ public function ctripcallback(){ $back_json = file_get_contents('php://input'); log_message('error','携程回调信息:'.$back_json); - //$back_json = '{"@attributes":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance"},"Authentication":{"TimeStamp":"2019-08-05 14:02:42","ServiceName":"web.order.notifyTicket","MessageIdentity":"90D9B095D5E08277BBA115D1F2E99CC8","PartnerName":"tieyou"},"TrainOrderService":{"OrderInfo":{"OrderNumber":"guilintravel1564984816236","ElectronicOrderNumber":"EH75665590","OrderType":"\u7535\u5b50","OrderTotleFee":"2940.00","TicketInfo":{"OrderTicketFromStation":"\u5317\u4eac\u897f","OrderTicketToStation":"\u5357\u5b81","OrderTicketYMD":"20190815","OrderTicketTime":"16:09","OrderTicketCheci":"Z5","OrderTicketPrice":"735.00","OrderAcceptSeat":{"0":"\n "},"OrderTicketSeat":"\u8f6f\u5367","SeatNumber":"06\u8f66\u53a201\u53f7\u4e0b\u94fa,06\u8f66\u53a203\u53f7\u4e0b\u94fa,06\u8f66\u53a202\u53f7\u4e0a\u94fa,06\u8f66\u53a204\u53f7\u4e0a\u94fa","railwayTip":{"0":"\n "},"AuditTicketCount":"4","ChildTicketCount":"0","Passengers":{"Passenger":[{"RealName":"MATILDE SOARES SAMPAIO","IdentityType":"\u62a4\u7167","NumberID":"N755614","TicketType":"\u6210\u4eba\u7968","Birth":{"0":"\n "},"InsuranceCount":"0"},{"RealName":"NUNO BERNARDO NOBRE SOARES","IdentityType":"\u62a4\u7167","NumberID":"P668714","TicketType":"\u6210\u4eba\u7968","Birth":{"0":"\n "},"InsuranceCount":"0"},{"RealName":"NUNO BERNARDO NOBRE SOARES","IdentityType":"\u62a4\u7167","NumberID":"P668715","TicketType":"\u6210\u4eba\u7968","Birth":{"0":"\n "},"InsuranceCount":"0"},{"RealName":"ANA SOFIA ROCIO CRESPO NOBRE","IdentityType":"\u62a4\u7167","NumberID":"N751936","TicketType":"\u6210\u4eba\u7968","Birth":{"0":"\n "},"InsuranceCount":"0"}]}},"TicketInfoFinal":{"OrderTicketFromStation":"\u5317\u4eac\u897f","OrderTicketToStation":"\u5357\u5b81","ChildBillid":{"0":"\n "},"ElectronicOrderNumber":"EH75665590","Result":"2","NoTicketReasons":{"0":"\n "},"OrderTicketYMD":"20190815","OrderTicketTime":"16:09","OrderTicketCheci":"Z5","OrderTicketPrice":"735.00","SeatNumber":"06\u8f66\u53a201\u53f7\u4e0b\u94fa","railwayTip":{"0":"\n "},"TicketCheck":{"0":"\n "},"IsUserAcount":"0","ReturnFlag":"0","RescheduleFlag":"0","Tickets":{"Ticket":[{"OrderTicketSeat":"\u8f6f\u5367","TicketType":"\u6210\u4eba\u7968","OrderTicketPrice":"751.50","TicketCount":"2","DetailInfos":{"DetailInfo":[{"PassengerName":"MATILDE SOARES SAMPAIO","IdentityType":"\u62a4\u7167","NumberID":"N755614","SeatNo":"06\u8f66\u53a201\u53f7\u4e0b\u94fa"},{"PassengerName":"NUNO BERNARDO NOBRE SOARES","IdentityType":"\u62a4\u7167","NumberID":"P668714","SeatNo":"06\u8f66\u53a203\u53f7\u4e0b\u94fa"}]}},{"OrderTicketSeat":"\u8f6f\u5367","TicketType":"\u6210\u4eba\u7968","OrderTicketPrice":"718.50","TicketCount":"2","DetailInfos":{"DetailInfo":[{"PassengerName":"NUNO BERNARDO NOBRE SOARES","IdentityType":"\u62a4\u7167","NumberID":"P668715","SeatNo":"06\u8f66\u53a202\u53f7\u4e0a\u94fa"},{"PassengerName":"ANA SOFIA ROCIO CRESPO NOBRE","IdentityType":"\u62a4\u7167","NumberID":"N751936","SeatNo":"06\u8f66\u53a204\u53f7\u4e0a\u94fa"}]}}]}}}}}'; + //$back_json = '{"@attributes":{"xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance"},"Authentication":{"TimeStamp":"2019-11-13 10:31:00","ServiceName":"web.order.rescheduleResult","MessageIdentity":"31C01C2EC57C9B1D45C0727918B493AE","PartnerName":"tieyou"},"TrainOrderService":{"OrderInfo":{"OrderNumber":"guilintravel1573543590265","contactName":{},"contactMobile":{},"RescheduleTicketInfo":{"SubOrderId":"0","EOrderNumber":"EG59266341","ResFromStation":"\u6842\u6797","ResToStation":"\u6842\u6797\u5317","ResDepartTime":"2019-12-03 13:50:00","ResArriveTime":"2019-12-03 14:01:00","ResTrainNumber":"D2986","RescheduleTickets":{"RescheduleTicket":{"childBillId":{},"ResCarriageNo":"08","ResSeatNumber":"13F\u53f7","ResSeatName":"\u4e8c\u7b49\u5ea7","ResRealTicketPrice":"5.5","RescheduleLongTrainNum":"EG59266341208013F","eOrderType":"1","passport":"450302199208131039","passportName":"\u9648\u5b87\u8d85","realName":"\u9648\u5b87\u8d85","status":"1","ResFailReasons":{}}}}}}}'; $ctrip_backdata = json_decode($back_json); //print_r($ctrip_backdata); @@ -345,6 +345,19 @@ class callback extends CI_Controller{ $passpager_info->realname = $ctrip_backdata->TrainOrderService->refundTicket->realName; $passpager_info->numberid = $ctrip_backdata->TrainOrderService->refundTicket->passport; $this->train_system_model->update_passpager_info($passpager_info); + }elseif($update_data->ServiceName == 'web.order.returnRescheduleResult'){ + $update_data->ordernumber = $ctrip_backdata->TrainOrderService->OrderNumber; + $update_data->OrderStatus = '7'; + $update_data->ErrorMsg = $ctrip_backdata->TrainOrderService->refundRescheduleTicket->reason; + $update_data->returncallback = $back_json; + + $passpager_info = new stdClass(); + $passpager_info->returncallback = $back_json; + $passpager_info->status = '7'; + $passpager_info->ordernumber = $ctrip_backdata->TrainOrderService->OrderNumber; + $passpager_info->realname = $ctrip_backdata->TrainOrderService->refundRescheduleTicket->realName; + $passpager_info->numberid = $ctrip_backdata->TrainOrderService->refundRescheduleTicket->passport; + $this->train_system_model->update_passpager_info($passpager_info); }else if($update_data->ServiceName == 'web.order.requestRefund'){ $return_order = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber; $return_money = $ctrip_backdata->TrainOrderService->TotalRefundAmount; @@ -363,8 +376,26 @@ class callback extends CI_Controller{ //print_r($add_train_payment_data);die(); $this->BIZ_train_model->add_train_payment($add_train_payment_data); return false; + }else if ($update_data->ServiceName == 'web.order.rescheduleResult'){ + $update_data->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber; + $reschedule_status = $ctrip_backdata->TrainOrderService->OrderInfo->RescheduleTicketInfo->RescheduleTickets->RescheduleTicket->status; + if($reschedule_status){ + $update_data->OrderStatus = '9'; + $update_data->ErrorMsg = '改签成功'; + + $passpager_info = new stdClass(); + $passpager_info->returncallback = $back_json; + $passpager_info->status = '9'; + $passpager_info->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber; + $passpager_info->realname = $ctrip_backdata->TrainOrderService->OrderInfo->RescheduleTicketInfo->RescheduleTickets->RescheduleTicket->passportName; + $passpager_info->numberid = $ctrip_backdata->TrainOrderService->OrderInfo->RescheduleTicketInfo->RescheduleTickets->RescheduleTicket->passport; + $this->train_system_model->update_passpager_info($passpager_info); + }else{ + $update_data->OrderStatus = '5'; + $update_data->ErrorMsg = '改签失败'; + } + $update_data->reschedulecallback = $back_json; } - //更新订单信息(出票系统) $this->train_system_model->update_orders($update_data); } diff --git a/application/third_party/trainsystem/controllers/pages.php b/application/third_party/trainsystem/controllers/pages.php index 2c0494e5..5792dc4d 100644 --- a/application/third_party/trainsystem/controllers/pages.php +++ b/application/third_party/trainsystem/controllers/pages.php @@ -13,6 +13,7 @@ class pages extends CI_Controller{ $this->order_status_msg = $this->config->item('train_order_status_msg'); } + //首页 public function index($coli_id = null){ if(get_cookie('dingname') == '' && get_cookie('dingunionid') == ''){ redirect('/apps/dinglogin/login/?returnurl=/apps/trainsystem/pages/'); @@ -123,7 +124,7 @@ class pages extends CI_Controller{ //根据订单号查询订单信息 $data = array(); - $train_infos = $this->train_system_model->get_train_infos($ordernumber); + $train_infos = $this->train_system_model->get_order_info($ordernumber); $passpager_detail = $this->train_system_model->get_passager_details($ordernumber); //构造详情数组 @@ -172,7 +173,7 @@ class pages extends CI_Controller{ //根据订单号查询订单信息 $data = array(); - $train_infos = $this->train_system_model->get_train_infos($ordernumber); + $train_infos = $this->train_system_model->get_order_info($ordernumber); $passpager_detail = $this->train_system_model->get_passager_details($ordernumber); //构造详情数组 @@ -199,6 +200,26 @@ class pages extends CI_Controller{ } + //改签页面 + public function reschedule(){ + if(get_cookie('dingname') == '' && get_cookie('dingunionid') == ''){ + redirect('/apps/dinglogin/login/?returnurl=/apps/trainsystem/pages/'); + } + $order = $this->input->get_post('order'); + $data = array(); + $data['order'] = $order; + if(!empty($order)){ + $orderDetail = $this->train_system_model->ctripOrderDetail($order); + $data['detail'] = $orderDetail; + } + //print_r($data); + + $this->load->view('header'); + $this->load->view('reschedule',$data); + $this->load->view('footer'); + } + + //账单导出页面 public function export(){ if(get_cookie('dingname') == '' && get_cookie('dingunionid') == ''){ redirect('/apps/dinglogin/login/?returnurl=/apps/trainsystem/pages/'); diff --git a/application/third_party/trainsystem/controllers/reschedule.php b/application/third_party/trainsystem/controllers/reschedule.php new file mode 100644 index 00000000..57bc376a --- /dev/null +++ b/application/third_party/trainsystem/controllers/reschedule.php @@ -0,0 +1,84 @@ +load->helper('train'); + $this->load->model("train_system_model"); + } + + public function index(){ + echo 'reschrdule'; + } + + //携程改签模块 + public function ctripModel(){ + $orderNumber = $this->input->get_post('orderNumber'); + $orderNumber = 'guilintravel1573543590265'; + if(empty($orderNumber)){ + exit('orderNumber error'); + }else{ + //接收改签的火车参数 + $RescheduleTrainNumber = $this->input->get_post('RescheduleTrainNumber'); + $DepartStationName = $this->input->get_post('DepartStationName'); + $ArriveStationName = $this->input->get_post('ArriveStationName'); + $RescheduleDepartTime = $this->input->get_post('RescheduleDepartTime'); + $RescheduleArriveTime = $this->input->get_post('RescheduleArriveTime'); + $RescheduleTicketPrice = $this->input->get_post('RescheduleTicketPrice'); + $RescheduleSeatName = $this->input->get_post('RescheduleSeatName'); + $RescheduleAcceptSeatName = $this->input->get_post('RescheduleAcceptSeatName'); + $PassagerName = $this->input->get_post('PassagerName'); + $Ticketype = $this->input->get_post('Ticketype'); + $IdentityType = $this->input->get_post('IdentityType'); + $PassagerId = $this->input->get_post('PassagerId'); + $Coach = $this->input->get_post('Coach'); + $Seat = $this->input->get_post('Seat'); + + //开始改签流 + $postData = array(); + $time = date('Y-m-d H:i:s',time()); + $postData['Authentication'] = new stdClass(); + $postData['Authentication']->TimeStamp = $time; + $postData['Authentication']->ServiceName = 'order.partnerreschedule'; + $postData['Authentication']->PartnerName = 'Ctrip.Corp'; + $MessageIdentity = md5($time.'order.partnerreschedule'.ORDERKEY); + $postData['Authentication']->MessageIdentity = $MessageIdentity; + + $postData['TrainOrderService'] = new stdClass(); + $postData['TrainOrderService']->OrderNumber = $orderNumber; + $postData['TrainOrderService']->Operator = 'guilintravel'; + $postData['TrainOrderService']->RescheduleTrainNumber = $RescheduleTrainNumber; + $postData['TrainOrderService']->DepartStationName = $DepartStationName; + $postData['TrainOrderService']->ArriveStationName = $ArriveStationName; + $postData['TrainOrderService']->RescheduleDepartTime = $RescheduleDepartTime; + $postData['TrainOrderService']->RescheduleArriveTime = $RescheduleArriveTime; + $postData['TrainOrderService']->RescheduleTicketPrice = $RescheduleTicketPrice; + $postData['TrainOrderService']->RescheduleSeatName = $RescheduleSeatName['0']; + //$postData['TrainOrderService']->RescheduleAcceptSeatName = '无座'; + + $postData['TrainOrderService']->RescheduleTicketPassengerInfos = array(); + + foreach ($PassagerName as $key=>$name){ + $postData['TrainOrderService']->RescheduleTicketPassengerInfos[$key] = new stdClass(); + $postData['TrainOrderService']->RescheduleTicketPassengerInfos[$key]->eOrderNumber = ''; + if($Ticketype[$key] == '儿童票'){ + $postData['TrainOrderService']->RescheduleTicketPassengerInfos[$key]->eOrderType = 2; + }else{ + $postData['TrainOrderService']->RescheduleTicketPassengerInfos[$key]->eOrderType = 1; + } + $postData['TrainOrderService']->RescheduleTicketPassengerInfos[$key]->realName = $name; + $postData['TrainOrderService']->RescheduleTicketPassengerInfos[$key]->CarriageNo = $Coach[$key]; + $postData['TrainOrderService']->RescheduleTicketPassengerInfos[$key]->seatNumber = $Seat[$key]; + $postData['TrainOrderService']->RescheduleTicketPassengerInfos[$key]->passportName = $name; + $postData['TrainOrderService']->RescheduleTicketPassengerInfos[$key]->passport = $PassagerId[$key]; + } + + //print_r(json_encode($postData));die(); + $url = 'http://m.ctrip.com/restapi/soa2/11009/json/PartnerReschedule'; + $responseJson = GetPost_http($url,json_encode($postData),'json'); + print_r($responseJson); + } + } +} \ No newline at end of file diff --git a/application/third_party/trainsystem/controllers/returnorders.php b/application/third_party/trainsystem/controllers/returnorders.php index 86478387..d470d81d 100644 --- a/application/third_party/trainsystem/controllers/returnorders.php +++ b/application/third_party/trainsystem/controllers/returnorders.php @@ -185,5 +185,53 @@ class returnorders extends CI_Controller{ } } + //改签退票 + public function returnreschedule(){ + //接收数据 + $orderNumber = $this->input->get_post('orderNumber'); + $username = $this->input->get_post('username'); + $userid = $this->input->get_post('userid'); + + //判断数据是否完全 + if(empty($orderNumber) || empty($username) || empty($userid)){ + exit('参数错误'); + } + $postData = array(); + $time = date('Y-m-d H:i:s',time()); + $postData['Authentication'] = new stdClass(); + $postData['Authentication']->TimeStamp = $time; + $postData['Authentication']->ServiceName = 'order.partnerreturnreschedule'; + $postData['Authentication']->PartnerName = 'Ctrip.Corp'; + $MessageIdentity = md5($time.'order.partnerreschedule'.ORDERKEY); + $postData['Authentication']->MessageIdentity = $MessageIdentity; + + $postData['TrainOrderService'] = new stdClass(); + $postData['TrainOrderService']->Operator = 'guilintravel'; + $postData['TrainOrderService']->OrderNumber = $orderNumber; + $postData['TrainOrderService']->PartnerName = 'Ctrip.Corp'; + $postData['TrainOrderService']->ReturnReschedulePassengerInfos = array(); + + //获取乘客信息 + $passagerinfo = $this->train_system_model->get_passenger_info($orderNumber,$username,$userid); + $postData['TrainOrderService']->ReturnReschedulePassengerInfos = array(); + $postData['TrainOrderService']->ReturnReschedulePassengerInfos['0'] = new stdClass(); + $postData['TrainOrderService']->ReturnReschedulePassengerInfos['0']->eOrderNumber = $passagerinfo->ts_elecnumber; + if($passagerinfo->ts_elecnumber == '儿童票'){ + $postData['TrainOrderService']->ReturnReschedulePassengerInfos['0']->eOrderType = 2; + }else{ + $postData['TrainOrderService']->ReturnReschedulePassengerInfos['0']->eOrderType = 1; + } + $rescheduledetail = json_decode($passagerinfo->ts_reschedulecallback); + $postData['TrainOrderService']->ReturnReschedulePassengerInfos['0']->realName = $passagerinfo->tst_realname; + $postData['TrainOrderService']->ReturnReschedulePassengerInfos['0']->CarriageNo = $rescheduledetail->TrainOrderService->OrderInfo->RescheduleTicketInfo->RescheduleTickets->RescheduleTicket->ResCarriageNo; + $postData['TrainOrderService']->ReturnReschedulePassengerInfos['0']->seatNumber = $rescheduledetail->TrainOrderService->OrderInfo->RescheduleTicketInfo->RescheduleTickets->RescheduleTicket->ResSeatNumber; + $postData['TrainOrderService']->ReturnReschedulePassengerInfos['0']->passportName = $passagerinfo->tst_realname; + $postData['TrainOrderService']->ReturnReschedulePassengerInfos['0']->passport = $passagerinfo->tst_numberid; + + $url = 'http://m.ctrip.com/restapi/soa2/11009/json/PartnerReturnRescheduleService'; + $responseJson = GetPost_http($url,json_encode($postData),'json'); + print_r($responseJson); + } + } \ No newline at end of file diff --git a/application/third_party/trainsystem/models/train_system_model.php b/application/third_party/trainsystem/models/train_system_model.php index 945e66cd..dbf149dd 100644 --- a/application/third_party/trainsystem/models/train_system_model.php +++ b/application/third_party/trainsystem/models/train_system_model.php @@ -9,6 +9,7 @@ class train_system_model extends CI_Model { $this->INFO = $this->load->database('INFO', TRUE); } + //获取订单(用于订单列表) public function get_order($pagesize=2,$page=0,$where="1=1"){ $data=new StdClass(); //获取总条数 @@ -74,18 +75,6 @@ class train_system_model extends CI_Model { return $query->result(); } - //获取火车信息 - public function get_train_infos($ordernumber){ - $sql = "select * from trainsystem where ts_ordernumber = '{$ordernumber}'"; - $query = $this->INFO->query($sql); - return $query->row(); - } - - public function update_passpager_status($status,$passagerid){ - $sql = "update trainsystem_tickets set tst_status = '{$status}' where tst_id = '{$passagerid}'"; - $query = $this->INFO->query($sql); - } - //添加订单 function add_orders($data){ $sql=" @@ -144,6 +133,7 @@ class train_system_model extends CI_Model { return $query->row(); } + //新增乘客 function add_passagers($data){ $sql = "IF EXISTS (select * from trainsystem_tickets where tst_ordernumber = '{$data->ordernumber}' and tst_numberid = '{$data->numberid}' and tst_realname = '{$data->realname}') update @@ -188,6 +178,7 @@ class train_system_model extends CI_Model { $query =$this->INFO->query($sql); } + //更新订单信息 public function update_orders($data){ $where = ''; if(!empty($data->bookcallback)){ @@ -236,6 +227,7 @@ class train_system_model extends CI_Model { $query = $this->INFO->query($sql); } + //获取订单出票状态 public function get_tickets_info($cold_sn){ $sql = "select ts_cold_sn,ts_ordernumber,tst_realname,tst_numberid,tst_status from trainsystem left join trainsystem_tickets on ts_ordernumber = tst_ordernumber where ts_cold_sn = ? and ts_status = '4'"; $query = $this->INFO->query($sql,array($cold_sn)); @@ -244,32 +236,31 @@ class train_system_model extends CI_Model { return $query->result(); } + //获取所有订单 public function getallorders(){ $sql = "select * from Tourmanager.dbo.BIZ_JuheOrderList where JOL_SubTime > '2019-03-01' and (JOL_Status = '4' or JOL_Status = '7')"; $query = $this->HT->query($sql); return $query->result(); } - public function update_juheorder($ordernumber,$subtime,$price){ - $sql = "update trainsystem set ts_subtime = ? , ts_orderamount = ? where ts_ordernumber = ?"; - $query = $this->INFO->query($sql,array($subtime,$price,$ordernumber)); - } - - //根据cold_sn 获取出票情况 + //根据cold_sn 获取出票情况(仅限出票成功) public function get_ticketinfos($cold_sn){ $sql = "select * from trainsystem where ts_cold_sn = ? and ts_status = '4'"; $query = $this->INFO->query($sql,array($cold_sn)); return $query->row(); } + //获取订单信息 根据第三方订单号查询 public function get_order_info($ordernumber){ - $sql = "select * from trainsystem where ts_ordernumber = '$ordernumber'"; - $query = $this->INFO->query($sql); + $sql = "select * from trainsystem where ts_ordernumber = ?"; + $query = $this->INFO->query($sql,array($ordernumber)); return $query->row(); } - public function test(){ - $sql = "delete from trainsystem where ts_id in ('13111','13081')"; - $query = $this->INFO->query($sql); + //获取携程出票成功的订单详情 + public function ctripOrderDetail($ordernumber){ + $sql = "select * from trainsystem left join trainsystem_tickets on ts_ordernumber = tst_ordernumber where ts_ordernumber = ? and ts_channel = 'ctrip' and ts_status = 4"; + $query = $this->INFO->query($sql,array($ordernumber)); + return $query->result(); } } \ No newline at end of file diff --git a/application/third_party/trainsystem/views/homepage.php b/application/third_party/trainsystem/views/homepage.php index 88321104..49127619 100644 --- a/application/third_party/trainsystem/views/homepage.php +++ b/application/third_party/trainsystem/views/homepage.php @@ -77,7 +77,7 @@ function selseat(seat){