| @@ -0,0 +1,200 @@ | |||
| <?php | |||
| /** | |||
| * 結算: 收費回傳物件 key | |||
| */ | |||
| abstract class BillResultKey | |||
| { | |||
| const days = "d"; // 結算: 日 | |||
| const hours = "h"; // 結算: 時 | |||
| const mins = "i"; // 結算: 分 | |||
| const price = "p"; // 結算: 費用 | |||
| const price_detail = "p_detail"; // 結算: 明細 | |||
| const price_plan = "p_plan"; // 結算: 費率 | |||
| const price_plan_date = "p_plan_d"; // 結算: 費率日期 | |||
| } | |||
| /** | |||
| * 收費規則 key | |||
| */ | |||
| abstract class PricePlanKey | |||
| { | |||
| const price_plan = "price_plan"; // 費率 | |||
| } | |||
| /** | |||
| * 收費規則 value | |||
| */ | |||
| abstract class PricePlanValue | |||
| { | |||
| const TYPE_0 = 0; // 臨停 | |||
| } | |||
| /** | |||
| * 日期規則 key | |||
| */ | |||
| abstract class DatePlanKey | |||
| { | |||
| const p_type = "p_type"; // 收費類型 (0:平日, 1:假日, etc..) | |||
| const p_date = "p_date"; // 日期 | |||
| } | |||
| /** | |||
| * 日期規則 value | |||
| */ | |||
| abstract class DatePlanValue | |||
| { | |||
| const TYPE_0 = 0; // 平日 | |||
| const TYPE_1 = 1; // 假日 | |||
| } | |||
| /** | |||
| * Altob 金流抽象介面 | |||
| * | |||
| * @version 1.0 | |||
| * @author mip | |||
| */ | |||
| abstract class AltobPaymentAbstractClass | |||
| { | |||
| public $ServiceURL = "ServiceURL"; | |||
| protected $Price = "Price"; // 結算價錢 | |||
| protected $PriceDetail = "PriceDetail"; // 結算明細 | |||
| protected $PricePlan = "PricePlan"; // 費率設定 | |||
| protected $PricePlanDate = "PricePlanDate"; // 特殊日期 | |||
| abstract public function getBill($inTime, $balanceTime, $station); // 拿帳單 (實作這一段) | |||
| /** | |||
| * 產生帳單回傳結果 (最上層的資料結構) | |||
| */ | |||
| protected function genBillResult($interval) | |||
| { | |||
| $data = array(); | |||
| $data[BillResultKey::days] = $interval->d; | |||
| $data[BillResultKey::hours] = $interval->h; | |||
| $data[BillResultKey::mins] = $interval->i; | |||
| $data[BillResultKey::price] = $this->Price; | |||
| $data[BillResultKey::price_detail] = $this->PriceDetail; | |||
| $data[BillResultKey::price_plan] = $this->PricePlan; | |||
| $data[BillResultKey::price_plan_date] = $this->PricePlanDate; | |||
| return $data; | |||
| } | |||
| /** | |||
| * 取得費率資訊 | |||
| */ | |||
| protected function getPricePlan($stationNo, $txType=PricePlanValue::TYPE_0) | |||
| { | |||
| $plan = array(); | |||
| // 從 DB 取得費率設定 | |||
| $result = $this->ServerPost("{$this->ServiceURL}/get_price_plan/{$stationNo}/{$txType}"); | |||
| $decode_result = json_decode($result, true); | |||
| if(! empty($decode_result[0])){ | |||
| $plan = json_decode($decode_result[0][PricePlanKey::price_plan], true); | |||
| } | |||
| return $plan; | |||
| } | |||
| /** | |||
| * 取得特殊日期陣列 | |||
| */ | |||
| protected function getPricePlanDate($inTime, $balanceTime) | |||
| { | |||
| $result = array(); | |||
| $date_plan = $this->getDatePlan($inTime, $balanceTime); // 取得特殊日期 | |||
| foreach ($date_plan as $val){ | |||
| $day = new DateTime($val[DatePlanKey::p_date]); | |||
| $day_key = $this->genLv1Key($day); | |||
| $result[$day_key] = $val; | |||
| } | |||
| return $result; | |||
| } | |||
| // 取得特殊日期 | |||
| private function getDatePlan($inTime, $balanceTime) | |||
| { | |||
| $result = array(); | |||
| $inTimestamp = strtotime($inTime); | |||
| $balanceTimestamp = strtotime($balanceTime); | |||
| // 算出週六日 | |||
| $weekdays = $this->get_weekdays($inTimestamp, $balanceTimestamp); | |||
| foreach ($weekdays as $val){ | |||
| $weekday = array(); | |||
| $weekday[DatePlanKey::p_type] = DatePlanValue::TYPE_1; | |||
| $weekday[DatePlanKey::p_date] = date('Y-m-d H:i:s', $val); | |||
| array_push($result, $weekday); | |||
| } | |||
| // 從 DB 取得其它假日 | |||
| $db_result = $this->ServerPost("{$this->ServiceURL}/get_date_plan/{$inTimestamp}/{$balanceTimestamp}"); | |||
| $decode_db_result = json_decode($db_result, true); | |||
| if(! empty($decode_db_result)){ | |||
| foreach ($decode_db_result as $val){ | |||
| $holiday = array(); | |||
| $holiday[DatePlanKey::p_type] = $val[DatePlanKey::p_type]; | |||
| $holiday[DatePlanKey::p_date] = $val[DatePlanKey::p_date]; //date('Y-m-d H:i:s', ); | |||
| array_push($result, $holiday); | |||
| } | |||
| } | |||
| return $result; | |||
| } | |||
| // 取得指定期間週末 (timestamp) | |||
| private function get_weekdays($from, $to=false) | |||
| { | |||
| if ($to == false) | |||
| $to = $this->last_day_of_month($from); | |||
| $days = array(); | |||
| for ($x = $from; $x < $to; $x+=86400 ) { // 60*60*24 一天的秒數 | |||
| //if (date('w', $x) > 0 && date('w', $x) < 6) | |||
| if (date('w', $x) == 0 || date('w', $x) == 6) | |||
| $days[] = $x; | |||
| } | |||
| return $days; | |||
| } | |||
| // 取得當月最後一天 (timestamp) | |||
| private function last_day_of_month($ts=false) | |||
| { | |||
| $m = date('m', $ts); | |||
| $y = date('y', $ts); | |||
| return mktime(23, 59, 59, ($m+1), 0, $y); | |||
| } | |||
| // 呼叫其它服務 | |||
| private function ServerPost($url, $parameters=array()) | |||
| { | |||
| $ch = curl_init(); | |||
| curl_setopt($ch, CURLOPT_URL, $url); | |||
| curl_setopt($ch, CURLOPT_HEADER, FALSE); | |||
| curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); | |||
| curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); | |||
| curl_setopt($ch, CURLOPT_POST, TRUE); | |||
| curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters)); | |||
| $rs = curl_exec($ch); | |||
| curl_close($ch); | |||
| return $rs; | |||
| } | |||
| // 產生日期當 lv1 key | |||
| protected function genLv1Key($date) | |||
| { | |||
| return $date->format('Y-m-d'); | |||
| } | |||
| // 產生時間當 lv2 key | |||
| protected function genLv2Key($date) | |||
| { | |||
| return $date->format('H:i:s'); | |||
| } | |||
| } | |||
| @@ -0,0 +1,261 @@ | |||
| <?php | |||
| require_once 'Altob.Payment.Core.php'; | |||
| abstract class PricePlanValueKey | |||
| { | |||
| const p0 = "p0"; // 費用 0 | |||
| const limit0 = "limit0"; // 上限 0 | |||
| const limit0_start_time = "limit0_start_time"; // 上限 0 開始時間 | |||
| const limit0_end_time = "limit0_end_time"; // 上限 0 結束時間 | |||
| const free0_min = "free0_min"; // 免費時間 (分) | |||
| } | |||
| /** | |||
| * 明細拆算: 費用明細 key | |||
| */ | |||
| abstract class PriceDeatilStatusValue | |||
| { | |||
| const TYPE_0 = 0; // 一般 | |||
| const TYPE_1 = 1; // 達上限 | |||
| } | |||
| /** | |||
| * 明細拆算: 費用明細 key | |||
| */ | |||
| abstract class PriceDeatilKey | |||
| { | |||
| const r_no = "r_no"; // 明細拆算: 序號 | |||
| const day = "day"; // 明細拆算: 日期 | |||
| const hours = "h"; // 明細拆算: 時 | |||
| const mins = "i"; // 明細拆算: 分 | |||
| const price = "p"; // 明細拆算: 費用 | |||
| const meta = "meta"; // 明細拆算: 費用說明 | |||
| const status = "status"; // 明細拆算: 狀態 | |||
| const p0 = "p0"; // 費用 0 | |||
| const limit0 = "limit0"; // 上限 0 | |||
| const limit0_start_time = "limit0_start_time"; // 上限 0 開始時間 | |||
| const limit0_end_time = "limit0_end_time"; // 上限 0 結束時間 | |||
| const free0_min = "free0_min"; // 免費時間 (分) | |||
| } | |||
| /** | |||
| * 適用: 臨停 | |||
| * | |||
| * @version 1.0 | |||
| * @author mip | |||
| */ | |||
| class AltobPayment extends AltobPaymentAbstractClass | |||
| { | |||
| // 取得帳單與明細 | |||
| public function getBill($inTime, $balanceTime, $stationNo) | |||
| { | |||
| $dateBegin = new DateTime($inTime); | |||
| $dateEnd = new DateTime($balanceTime); | |||
| $interval = $dateBegin->diff($dateEnd); // y, m, d, h, i, s | |||
| // A. 取得費率設定 | |||
| $this->PricePlan = $this->getPricePlan($stationNo); // get price plan | |||
| /* | |||
| 規則: | |||
| 1. 每小時20元,每日最高150元,前30分鐘免費 | |||
| 2. 另外停車1小時候未滿30分以10元計,超過30分以20元計 | |||
| ex. 15日18:00進場~16日20:30出場:15日金額120元 + 16日金額150元 =270 | |||
| ex. 15日12:00進場~15日16:25出場:80元+10元 | |||
| */ | |||
| $p0 = $this->PricePlan[PricePlanValueKey::p0]; // 費用 0 (10元 /半小時) | |||
| $limit0 = $this->PricePlan[PricePlanValueKey::limit0]; // 上限 0 (150元 /D) | |||
| $limit0_start_time = $this->PricePlan[PricePlanValueKey::limit0_start_time]; // 上限 0 開始時間 (00:00:00) | |||
| $limit0_end_time = $this->PricePlan[PricePlanValueKey::limit0_end_time]; // 上限 0 結束時間 (23:59:59) | |||
| $free0_min = $this->PricePlan[PricePlanValueKey::free0_min]; // 免費 0 (前 30 分) | |||
| // B. 取得特殊日期 | |||
| //$this->PricePlanDate = $this->getPricePlanDate($inTime, $balanceTime); | |||
| // C. 開始建立帳單明細 $this->PriceDetail | |||
| $this->PriceDetail = array(); | |||
| // D. 取得帳單結算價錢 | |||
| // D.1 前 30 分鐘免費 | |||
| if($interval->y == 0 && $interval->m == 0 && $interval->d == 0 && $interval->h == 0 && $interval->i < $free0_min){ | |||
| $this->Price = 0; | |||
| return $this->genBillResult($interval); | |||
| } | |||
| // D.2 依照費率將時間切割, 暫存 $day_array | |||
| $day_array = array(); | |||
| $dateFront = $dateBegin; | |||
| $dateTail = $dateEnd; | |||
| $period_of_basic_repeat = new DatePeriod($dateFront, DateInterval::createFromDateString('30 minutes'), $dateTail); | |||
| foreach ($period_of_basic_repeat as $basic_part){ | |||
| $today_key = $this->genLv1Key($basic_part); | |||
| if(!array_key_exists($today_key, $this->PriceDetail)){ | |||
| $today_data = array(); | |||
| $today_data[PriceDeatilKey::p0] = $p0; | |||
| $today_data[PriceDeatilKey::limit0] = $limit0; | |||
| $today_data[PriceDeatilKey::limit0_start_time] = $limit0_start_time; | |||
| $today_data[PriceDeatilKey::limit0_end_time] = $limit0_end_time; | |||
| $today_data[PriceDeatilKey::free0_min] = $free0_min; | |||
| $this->PriceDetail[$today_key] = $today_data; | |||
| } | |||
| $this->genLv2Value(0, $today_key, $basic_part, 0, "init"); | |||
| array_push($day_array, $basic_part); | |||
| } | |||
| $this->PriceDetail["day_array"] = $day_array; | |||
| //return $this->genBillResult($interval); | |||
| // 解析 $day_array 建立帳單明細於 $this->PriceDetail | |||
| $total_price = 0; | |||
| $today_limit0_amt = 0; | |||
| $count_period = count($day_array); | |||
| for($i = 0 ; $i < $count_period ; $i+=1){ | |||
| $price_this = 0; | |||
| $day_this = $day_array[$i]; | |||
| $today_key = $this->genLv1Key($day_this); | |||
| $today_lv2_key = $this->genLv2Key($day_this); | |||
| $today_p0 = $this->PriceDetail[$today_key][PriceDeatilKey::p0]; | |||
| $today_limit0 = $this->PriceDetail[$today_key][PriceDeatilKey::limit0]; | |||
| $today_limit0_start_time = $this->PriceDetail[$today_key][PriceDeatilKey::limit0_start_time]; | |||
| $today_limit0_end_time = $this->PriceDetail[$today_key][PriceDeatilKey::limit0_end_time]; | |||
| $today_free0_min = $this->PriceDetail[$today_key][PriceDeatilKey::free0_min]; | |||
| // 重置每日收費上限 | |||
| $current_h = $day_this->format('H'); | |||
| if($current_h == substr($today_limit0_start_time, 0, 2)){ | |||
| $today_limit0_amt = 0; | |||
| } | |||
| // 記算金額 | |||
| $status = PriceDeatilStatusValue::TYPE_0; | |||
| if($today_limit0_amt >= $today_limit0){ | |||
| // 已達上限值, 免費 | |||
| $price_this = 0; | |||
| $memo = "B.4 ..FREE.."; | |||
| $status = PriceDeatilStatusValue::TYPE_1; | |||
| }else{ | |||
| // 未達上限值, 取得時段費用 | |||
| $price_this = $this->getPrice($today_p0); | |||
| if(array_key_exists($i - 1, $day_array)){ | |||
| if(array_key_exists($i + 1, $day_array)){ | |||
| if($today_limit0_amt + $price_this >= $today_limit0){ | |||
| // 未達上限值, 有上一筆, 有下一筆, 本次達上限 | |||
| $price_this = $today_limit0 - $today_limit0_amt; | |||
| $today_limit0_amt = $today_limit0; | |||
| $memo = "B.3 ..today limit : {$today_limit0}.."; | |||
| $status = PriceDeatilStatusValue::TYPE_1; | |||
| }else{ | |||
| // 未達上限值, 有上一筆, 有下一筆, 本次未達上限 | |||
| $today_limit0_amt += $price_this; | |||
| $memo = "B.2 ..next.."; | |||
| } | |||
| }else{ | |||
| // 未達上限值, 有上一筆, 最後一筆 | |||
| if($today_limit0_amt + $price_this >= $today_limit0){ | |||
| // 未達上限值, 有上一筆, 最後一筆, 本次達上限 | |||
| $price_this = $today_limit0 - $today_limit0_amt; | |||
| $today_limit0_amt = $today_limit0; | |||
| $memo = "D.2 ..today limit : {$today_limit0}.."; | |||
| $status = PriceDeatilStatusValue::TYPE_1; | |||
| }else{ | |||
| // 未達上限值, 有上一筆, 最後一筆, 本次未達上限 | |||
| $today_limit0_amt += $price_this; | |||
| $memo = "D.1 ..next.."; | |||
| } | |||
| } | |||
| }else{ | |||
| if(array_key_exists($i + 1, $day_array)){ | |||
| // 未達上限值, 第一筆, 有下一筆 | |||
| $today_limit0_amt += $price_this; | |||
| $memo = "B.1 ..START..a"; | |||
| }else{ | |||
| // 未達上限值, 第一筆, 最後一筆 | |||
| $memo = "C ..done.."; | |||
| } | |||
| } | |||
| } | |||
| // 建立明細資料 | |||
| if(array_key_exists($i - 1, $day_array)){ | |||
| if(array_key_exists($i + 1, $day_array)){ | |||
| // 有上一筆, 有下一筆 | |||
| $this->setLv2Value($i, $today_key, $today_lv2_key, $price_this, $memo, $status); | |||
| }else{ | |||
| // 有上一筆, 最後一筆 | |||
| $this->setLv2Value($i, $today_key, $today_lv2_key, $price_this, $memo, $status); | |||
| $price_end = 0; | |||
| $status = PriceDeatilStatusValue::TYPE_0; | |||
| /* | |||
| if($day_this->diff($dateEnd)->i < $today_free0_min){ | |||
| // 未滿 30 分, 不計 | |||
| $memo = "E.3 ..end.."; | |||
| }else{ | |||
| */ | |||
| $price_end = $this->getPrice($today_p0);; | |||
| if($today_limit0_amt + $price_end >= $today_limit0){ | |||
| // 達上限 | |||
| $price_end = $today_limit0 - $today_limit0_amt; | |||
| $memo = "E.2 ..today limit : {$today_limit0}.."; | |||
| $status = PriceDeatilStatusValue::TYPE_1; | |||
| }else{ | |||
| $memo = "E.1 ..end.."; | |||
| } | |||
| $this->genLv2Value($i + 1, $today_key, $dateEnd, $price_end, $memo, $status); | |||
| } | |||
| }else{ | |||
| if(array_key_exists($i + 1, $day_array)){ | |||
| // 第一筆, 有下一筆 | |||
| // do nothing | |||
| }else{ | |||
| // 第一筆, 最後一筆 | |||
| $this->genLv2Value($i + 1, $today_key, $dateEnd, $price_this, $memo, $status); | |||
| } | |||
| } | |||
| // 總結算 | |||
| $total_price += $price_this; | |||
| } | |||
| $this->Price = $total_price; | |||
| return $this->genBillResult($interval); | |||
| } | |||
| // 取得目前時段價格 | |||
| private function getPrice($today_p0) | |||
| { | |||
| return $today_p0; | |||
| } | |||
| // 建立 lv2 | |||
| private function genLv2Info($r_no, $today_lv1_key, $today_lv2_key, $price, $price_type, $meta) | |||
| { | |||
| $lv1Key = $today_lv1_key; | |||
| $lv2Key = $today_lv2_key; | |||
| $this->PriceDetail[$lv1Key][$lv2Key][PriceDeatilKey::r_no] = $r_no; | |||
| $this->PriceDetail[$lv1Key][$lv2Key][PriceDeatilKey::price] = $price; | |||
| $this->PriceDetail[$lv1Key][$lv2Key][PriceDeatilKey::p_type] = $price_type; | |||
| $this->PriceDetail[$lv1Key][$lv2Key][PriceDeatilKey::meta] = $meta; | |||
| } | |||
| // 建立 lv2 value | |||
| private function genLv2Value($r_no, $lv1Key, $day, $price, $meta, $status=PriceDeatilStatusValue::TYPE_0) | |||
| { | |||
| $lv2Key = $this->genLv2Key($day); | |||
| $this->PriceDetail[$lv1Key][$lv2Key][PriceDeatilKey::day] = $day->format('Y-m-d H:i:s'); | |||
| $this->setLv2Value($r_no, $lv1Key, $lv2Key, $price, $meta, $status); | |||
| } | |||
| // 設定 lv2 value | |||
| private function setLv2Value($r_no, $lv1Key, $lv2Key, $price, $meta, $status=PriceDeatilStatusValue::TYPE_0) | |||
| { | |||
| $this->PriceDetail[$lv1Key][$lv2Key][PriceDeatilKey::r_no] = $r_no; | |||
| $this->PriceDetail[$lv1Key][$lv2Key][PriceDeatilKey::price] = $price; | |||
| $this->PriceDetail[$lv1Key][$lv2Key][PriceDeatilKey::meta] = $meta; | |||
| $this->PriceDetail[$lv1Key][$lv2Key][PriceDeatilKey::status] = $status; | |||
| } | |||
| } | |||
| @@ -0,0 +1,279 @@ | |||
| <?php | |||
| /** | |||
| * Altob 資料同步 | |||
| * | |||
| * @version 1.0 | |||
| * @author mip | |||
| */ | |||
| class AltobSyncAgent | |||
| { | |||
| const SYNC_PKS_URL = 'http://61.219.172.12/parkings/cars.html/'; // 在席記錄 | |||
| const SYNC_CARS_URL = 'http://61.219.172.12/parkings/cars.html/'; // 進出記錄 | |||
| const SYNC_ST_URL = 'http://61.219.172.11:60123/admins_station.html/'; // 場站記錄 | |||
| const API_URL = 'http://parks.altob.com.tw:60123/parkingquery.html/'; // 場站 API | |||
| public $io = ''; | |||
| public $etag = ''; | |||
| public $pic_name = ''; | |||
| public $ivsno = 0; | |||
| public $member_no = 0; | |||
| public $finished = 0; | |||
| public $in_time = ''; | |||
| public $cario_no = 0; | |||
| private $post_parms; | |||
| /** | |||
| * 初始化 | |||
| */ | |||
| public function init($station_no, $time='') | |||
| { | |||
| $this->post_parms = array(); | |||
| $this->post_parms['station_no'] = $station_no; | |||
| $this->post_parms['io_time'] = $time; | |||
| } | |||
| // 檢查基本欄位 | |||
| function check_init_parms() | |||
| { | |||
| if(empty($this->post_parms['station_no'])) | |||
| return 'station_no not set'; // 場站編號 | |||
| if(empty($this->post_parms['io_time'])) | |||
| return 'io_time not set'; // 進出時間 (若為繳費帶進場時間) | |||
| return false; | |||
| } | |||
| // =============================================== | |||
| // st_io | |||
| // =============================================== | |||
| // 傳送進場記錄 | |||
| public function sync_st_in($parms) | |||
| { | |||
| $error_parms_msg = $this->check_init_parms(); | |||
| if(!empty($error_parms_msg)) { return $error_parms_msg; } | |||
| if(empty($this->cario_no)) | |||
| return 'cario_no not found'; | |||
| if(empty($parms['lpr'])) | |||
| return 'lpr not found'; | |||
| if(empty($parms['io'])) | |||
| return 'io not found'; | |||
| $this->post_parms['cario_no'] = $this->cario_no; // 需設定 | |||
| $this->post_parms['member_no'] = $this->member_no; // 預設為 0 | |||
| $this->post_parms['lpr'] = $parms['lpr']; | |||
| $this->post_parms['io'] = $parms['io']; | |||
| $this->post_parms['etag'] = $parms['etag'] == 'NONE' ? '' : $parms['etag']; | |||
| $this->post_parms['pic_name'] = empty($parms['pic_name']) ? '' : $parms['pic_name']; | |||
| $this->post_parms['ivsno'] = $parms['ivsno']; | |||
| $this->post_parms['out_before_time'] = $this->post_parms['io_time']; | |||
| // 初始化網路服務物件。 | |||
| $oService = new AltobSyncService(); | |||
| $oService->ServiceURL = AltobSyncAgent::SYNC_CARS_URL; | |||
| $oService->ServiceCMD = 'st_in'; | |||
| // 傳遞參數至遠端。 | |||
| return $oService->ServerPost($this->post_parms); | |||
| } | |||
| // 傳送離場記錄 | |||
| public function sync_st_out($parms) | |||
| { | |||
| $error_parms_msg = $this->check_init_parms(); | |||
| if(!empty($error_parms_msg)) { return $error_parms_msg; } | |||
| // 有入場記錄時 | |||
| if($this->cario_no > 0) | |||
| { | |||
| $this->post_parms['cario_no'] = $this->cario_no; | |||
| if(empty($this->in_time)) | |||
| return 'in_time not found'; // 需設定 | |||
| $this->post_parms['in_time'] = $this->in_time; | |||
| $this->post_parms['minutes'] = floor((strtotime($this->post_parms['io_time']) - strtotime($this->in_time)) / 60); // 停車時數 (分鐘) | |||
| } | |||
| if(empty($parms['lpr'])) | |||
| return 'lpr not found'; | |||
| if(empty($parms['io'])) | |||
| return 'io not found'; | |||
| $this->post_parms['member_no'] = $this->member_no; // 預設為 0 | |||
| $this->post_parms['finished'] = $this->finished; // 預設為 0 | |||
| $this->post_parms['lpr'] = $parms['lpr']; | |||
| $this->post_parms['io'] = $parms['io']; | |||
| $this->post_parms['etag'] = $parms['etag'] == 'NONE' ? '' : $parms['etag']; | |||
| $this->post_parms['pic_name'] = empty($parms['pic_name']) ? '' : $parms['pic_name']; | |||
| $this->post_parms['ivsno'] = $parms['ivsno']; | |||
| // 初始化網路服務物件。 | |||
| $oService = new AltobSyncService(); | |||
| $oService->ServiceURL = AltobSyncAgent::SYNC_CARS_URL; | |||
| $oService->ServiceCMD = 'st_out'; | |||
| // 傳遞參數至遠端。 | |||
| return $oService->ServerPost($this->post_parms); | |||
| } | |||
| // 傳送付費更新記錄 | |||
| public function sync_st_pay($lpr, $pay_time, $pay_type=0, $out_before_time='') | |||
| { | |||
| $error_parms_msg = $this->check_init_parms(); | |||
| if(!empty($error_parms_msg)) { return $error_parms_msg; } | |||
| if(empty($this->cario_no)) | |||
| return 'cario_no not found'; | |||
| if(empty($lpr)) | |||
| return 'lpr not found'; | |||
| if(empty($pay_time)) | |||
| return 'pay_time not found'; | |||
| $this->post_parms['cario_no'] = $this->cario_no; // 需設定 | |||
| $this->post_parms['lpr'] = $lpr; | |||
| $this->post_parms['pay_time'] = $pay_time; | |||
| $this->post_parms['pay_type'] = $pay_type; | |||
| $this->post_parms['out_before_time'] = empty($out_before_time) ? date('Y-m-d H:i:s', strtotime("{$pay_time} + 15 minutes")) : $out_before_time; | |||
| // 初始化網路服務物件。 | |||
| $oService = new AltobSyncService(); | |||
| $oService->ServiceURL = AltobSyncAgent::SYNC_CARS_URL; | |||
| $oService->ServiceCMD = 'st_pay'; | |||
| // 傳遞參數至遠端。 | |||
| return $oService->ServerPost($this->post_parms); | |||
| } | |||
| // =============================================== | |||
| // members | |||
| // =============================================== | |||
| // 取得場站會員 | |||
| public function get_st_members() | |||
| { | |||
| if(empty($this->post_parms['station_no'])) | |||
| return 'station_no not set'; // 場站編號 | |||
| // 初始化網路服務物件。 | |||
| $oService = new AltobSyncService(); | |||
| $oService->ServiceURL = AltobSyncAgent::SYNC_ST_URL; | |||
| $oService->ServiceCMD = 'member_query_all'; | |||
| // 傳遞參數至遠端。 | |||
| return $oService->ServerPost($this->post_parms); | |||
| } | |||
| // 同步會員鎖車 (0: 解鎖, 1: 上鎖, 2: 查詢) | |||
| public function sync_security_action($lpr, $pswd, $action) | |||
| { | |||
| if(empty($this->post_parms['station_no'])) | |||
| return 'station_no not set'; // 場站編號 | |||
| $station_no = $this->post_parms['station_no']; | |||
| $ck = md5($lpr.'i'.$pswd.'iii'.$action); | |||
| // 初始化網路服務物件。 | |||
| $oService = new AltobSyncService(); | |||
| $oService->ServiceURL = AltobSyncAgent::API_URL; | |||
| $oService->ServiceCMD = "sync_security_action/{$lpr}/{$pswd}/{$action}/{$ck}/{$station_no}"; | |||
| // 傳遞參數至遠端。 | |||
| return $oService->ServerPost($this->post_parms); | |||
| } | |||
| // 同步會員改密碼 | |||
| public function sync_change_pwd($lpr, $pswd, $new_pwd) | |||
| { | |||
| if(empty($this->post_parms['station_no'])) | |||
| return 'station_no not set'; // 場站編號 | |||
| $station_no = $this->post_parms['station_no']; | |||
| $ck = md5($lpr.'i'.$pswd.'iii'.$new_pwd); | |||
| // 初始化網路服務物件。 | |||
| $oService = new AltobSyncService(); | |||
| $oService->ServiceURL = AltobSyncAgent::API_URL; | |||
| $oService->ServiceCMD = "sync_change_pwd/{$lpr}/{$pswd}/{$new_pwd}/{$ck}/{$station_no}"; | |||
| // 傳遞參數至遠端。 | |||
| return $oService->ServerPost($this->post_parms); | |||
| } | |||
| // =============================================== | |||
| // pks | |||
| // =============================================== | |||
| // 在席 | |||
| public function upd_pks_groups($data) | |||
| { | |||
| if(empty($this->post_parms['station_no'])) | |||
| return 'station_no not set'; // 場站編號 | |||
| $this->post_parms['data'] = $data; | |||
| // 初始化網路服務物件。 | |||
| $oService = new AltobSyncService(); | |||
| $oService->ServiceURL = AltobSyncAgent::SYNC_PKS_URL; | |||
| $oService->ServiceCMD = 'upd_pks_groups'; | |||
| // 傳遞參數至遠端。 | |||
| return $oService->ServerPost($this->post_parms); | |||
| } | |||
| } | |||
| /** | |||
| * 呼叫網路服務的類別。 | |||
| */ | |||
| class AltobSyncService { | |||
| /** | |||
| * 網路服務類別呼叫的位址。 | |||
| */ | |||
| public $ServiceURL = 'ServiceURL'; | |||
| public $ServiceCMD = 'ServiceCMD'; | |||
| /** | |||
| * 網路服務類別的建構式。 | |||
| */ | |||
| function __construct() {$this->AltobSyncService();} | |||
| /** | |||
| * 網路服務類別的實體。 | |||
| */ | |||
| function AltobSyncService() {} | |||
| /** | |||
| * 提供伺服器端呼叫遠端伺服器 Web API 的方法。 | |||
| */ | |||
| function ServerPost($parameters) { | |||
| $ch = curl_init(); | |||
| curl_setopt($ch, CURLOPT_URL, $this->ServiceURL . $this->ServiceCMD); | |||
| curl_setopt($ch, CURLOPT_HEADER, FALSE); | |||
| curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); | |||
| curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); | |||
| curl_setopt($ch, CURLOPT_POST, TRUE); | |||
| curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,5); | |||
| curl_setopt($ch, CURLOPT_TIMEOUT, 5); //timeout in seconds | |||
| curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters)); | |||
| $rs = curl_exec($ch); | |||
| curl_close($ch); | |||
| return $rs; | |||
| } | |||
| } | |||
| @@ -0,0 +1,499 @@ | |||
| <?php | |||
| /** | |||
| * API 代碼 | |||
| */ | |||
| abstract class TWGC_API_NO | |||
| { | |||
| const BalanceInquiry = 1; // 1: 查詢 BarCode | |||
| const Register = 2; // 2: 卡片記名 | |||
| const VirtualCardActivation = 3;// 3: 虛擬卡開卡 | |||
| const Refund = 4; // 4: 退款 | |||
| const CheckResult = 5; // 5: 確認交易結果 | |||
| const BalanceMaintenance3 = 6; // 6: 會員綁定卡片消費 | |||
| const UnRegister = 7; // 7: 取消卡片記名 | |||
| const Reload2 = 8; // 8: 卡片儲值 | |||
| const GetOTPin2 = 9; // 9: 拿PIN碼 | |||
| const Suspend = 10; // 10: 停用 | |||
| } | |||
| /** | |||
| * 取得APP TOKEN服務的類別。 | |||
| */ | |||
| class TWGCAgent { | |||
| public $issuerIdentity = "issuerIdentity"; | |||
| public $IssuerID = "IssuerID"; | |||
| public $StoreID = "StoreID"; | |||
| public $POSID = "POSID"; | |||
| public $ServiceURL = "ServiceURL"; | |||
| /** | |||
| * 取得TWGC 服務的建構式。 | |||
| */ | |||
| function __construct() { | |||
| $this->TWGCAgent(); | |||
| } | |||
| /** | |||
| * 取得TWGC 服務的實體。 | |||
| */ | |||
| function TWGCAgent() { | |||
| } | |||
| /** | |||
| * API 1: 查詢 BarCode | |||
| * | |||
| * 說明: 查詢 BarCode 狀態、餘額及紅利點數 | |||
| * | |||
| * [data] | |||
| * *BarCode:卡號 | |||
| */ | |||
| public function BalanceInquiry($data) { | |||
| extract($data); | |||
| if (empty($POSTime)) { | |||
| $POSTime = date('Y/m/d H:i:s', time()); | |||
| } | |||
| if (empty($MbrPhone)) { $MbrPhone = ""; } | |||
| $BarCode_str = ''; | |||
| if (isset($BarCode)) { | |||
| $BarCode_str = '<BarCode>'. $BarCode .'</BarCode>'; | |||
| } | |||
| $Card_str = $BarCode_str; | |||
| $xml = | |||
| '<DPReq> | |||
| <IssuerID>'. $this->IssuerID .'</IssuerID> | |||
| <StoreID>'. $this->StoreID .'</StoreID> | |||
| <POSID>'. $this->POSID .'</POSID> | |||
| <CustTrxNo>'. $CustTrxNo .'</CustTrxNo> | |||
| <Detail> | |||
| <Card>'. $Card_str .'</Card> | |||
| </Detail> | |||
| <MbrPhone>'. $MbrPhone .'</MbrPhone> | |||
| <POSTime>'. $POSTime .'</POSTime> | |||
| </DPReq>'; | |||
| return $this->getResultXml(__FUNCTION__, $xml); | |||
| } | |||
| /** | |||
| * API 2: 卡片記名 | |||
| * | |||
| * 說明: 將 BarCode 綁定 UserID | |||
| * | |||
| * [data] | |||
| * *UserID:會員編號 (最多 20 字元) | |||
| * UserName:會員姓名 | |||
| * UserSex:會員性別 (M/F/空字串 ) | |||
| * Birthday:會員生日 (YYYY/MM/DD) | |||
| * Addr:會員地址 | |||
| * Email:會員電子郵件 | |||
| * TelHZone:會員市內電話區碼 | |||
| * TelH:會員市內電話 | |||
| * MbrPhone:手機號碼 | |||
| * Memo:備註 | |||
| * *BarCode:記名卡號 | |||
| */ | |||
| public function Register($data) { | |||
| extract($data); | |||
| if (empty($POSTime)) { | |||
| $POSTime = date('Y/m/d H:i:s', time()); | |||
| } | |||
| if (empty($Birthday)) { | |||
| $Birthday = $POSTime; | |||
| } | |||
| if (empty($UserName)) { $UserName = ""; } | |||
| if (empty($UserSex)) { $UserSex = ""; } | |||
| if (empty($Addr)) { $Addr = ""; } | |||
| if (empty($Email)) { $Email = ""; } | |||
| if (empty($TelHZone)) { $TelHZone = ""; } | |||
| if (empty($TelH)) { $TelH = ""; } | |||
| if (empty($MbrPhone)) { $MbrPhone = ""; } | |||
| if (empty($Memo)) { $Memo = ""; } | |||
| if (empty($StaffID)) { $StaffID = ""; } | |||
| $xml = | |||
| '<DPReq> | |||
| <IssuerID>'. $this->IssuerID .'</IssuerID> | |||
| <StoreID>'. $this->StoreID .'</StoreID> | |||
| <POSID>'. $this->POSID .'</POSID> | |||
| <CustTrxNo>'. $CustTrxNo .'</CustTrxNo> | |||
| <UserID>'. $UserID .'</UserID> | |||
| <MbrPhone>'. $MbrPhone .'</MbrPhone> | |||
| <BarCode>'. $BarCode .'</BarCode> | |||
| <POSTime>'. $POSTime .'</POSTime> | |||
| <StaffID>'. $StaffID .'</StaffID> | |||
| </DPReq>'; | |||
| /* | |||
| $xml = | |||
| '<DPReq> | |||
| <IssuerID>'. $this->IssuerID .'</IssuerID> | |||
| <StoreID>'. $this->StoreID .'</StoreID> | |||
| <POSID>'. $this->POSID .'</POSID> | |||
| <CustTrxNo>'. $CustTrxNo .'</CustTrxNo> | |||
| <UserID>'. $UserID .'</UserID> | |||
| <UserName>'. $UserName .'</UserName> | |||
| <UserSex>'. $UserSex .'</UserSex> | |||
| <Birthday>'. $Birthday .'</Birthday> | |||
| <Addr>'. $Addr .'</Addr> | |||
| <Email>'. $Email .'</Email> | |||
| <TelHZone>'. $TelHZone .'</TelHZone> | |||
| <TelH>'. $TelH .'</TelH> | |||
| <MbrPhone>'. $MbrPhone .'</MbrPhone> | |||
| <Memo>'. $Memo .'</Memo> | |||
| <BarCode>'. $BarCode .'</BarCode> | |||
| <POSTime>'. $POSTime .'</POSTime> | |||
| <StaffID>'. $StaffID .'</StaffID> | |||
| </DPReq>'; | |||
| */ | |||
| return $this->getResultXml(__FUNCTION__, $xml); | |||
| } | |||
| /** | |||
| * API 3: 虛擬卡開卡 | |||
| * | |||
| * 說明: 用 EAN 去建立任意面額的 BarCode, 剛建立好的 BarCode 未綁定 UserID | |||
| * | |||
| * [data] | |||
| * *EAN:卡號前 13碼 | |||
| * *Amount:卡片面額 | |||
| * Timeout:未收到開卡結果的Timeout時間,0~999 | |||
| */ | |||
| public function VirtualCardActivation($data) { | |||
| extract($data); | |||
| if (empty($TransTime)) { | |||
| $TransTime = date('Y/m/d H:i:s', time()); | |||
| } | |||
| if (empty($Timeout)) { $Timeout = 100; } // 未收到開卡結果的Timeout時間,0~999 | |||
| $EAN_str = ''; | |||
| if (isset($EAN)) { | |||
| $EAN_str = '<EAN>'. $EAN .'</EAN>'; | |||
| } | |||
| $Amount_str = ''; | |||
| if (isset($Amount)) { | |||
| $Amount_str = '<Amount>'. $Amount .'</Amount>'; | |||
| } | |||
| $Card_str = $EAN_str.$Amount_str; | |||
| $xml = | |||
| '<DPReq> | |||
| <IssuerID>'. $this->IssuerID .'</IssuerID> | |||
| <StoreID>'. $this->StoreID .'</StoreID> | |||
| <POSID>'. $this->POSID .'</POSID> | |||
| <CustTrxNo>'. $CustTrxNo .'</CustTrxNo> | |||
| <TransTime>'. $TransTime .'</TransTime> | |||
| <Timeout>'. $Timeout .'</Timeout> | |||
| <Detail> | |||
| <Card>'. $Card_str .'</Card> | |||
| </Detail> | |||
| </DPReq>'; | |||
| return $this->getResultXml(__FUNCTION__, $xml); | |||
| } | |||
| /** | |||
| * API 4: 退款 | |||
| * | |||
| * 說明: 退款作業 (取消消費交易) | |||
| * | |||
| * [data] | |||
| * *CustTrxNo:原交易序號 | |||
| * *AuthCode:原交易授權碼 | |||
| */ | |||
| public function Refund($data) { | |||
| extract($data); | |||
| if (empty($POSTime)) { | |||
| $POSTime = date('Y/m/d H:i:s', time()); | |||
| } | |||
| if (empty($MbrPhone)) { $MbrPhone = ""; } | |||
| if (empty($StaffID)) { $StaffID = ""; } | |||
| $xml = | |||
| '<DPReq> | |||
| <IssuerID>'. $this->IssuerID .'</IssuerID> | |||
| <StoreID>'. $this->StoreID .'</StoreID> | |||
| <POSID>'. $this->POSID .'</POSID> | |||
| <CustTrxNo>'. $CustTrxNo .'</CustTrxNo> | |||
| <AuthCode>'. $AuthCode .'</AuthCode> | |||
| <MbrPhone>'. $MbrPhone .'</MbrPhone> | |||
| <POSTime>'. $POSTime .'</POSTime> | |||
| <StaffID>'. $StaffID .'</StaffID> | |||
| </DPReq>'; | |||
| return $this->getResultXml(__FUNCTION__, $xml); | |||
| } | |||
| /** | |||
| * API 5: 確認交易結果 | |||
| * | |||
| * 說明: 確認交易結果 | |||
| * | |||
| * [data] | |||
| * *CustTrxNo:原交易序號 | |||
| */ | |||
| public function CheckResult($data) { | |||
| extract($data); | |||
| if (empty($POSTime)) { | |||
| $POSTime = date('Y/m/d H:i:s', time()); | |||
| } | |||
| if (empty($MbrPhone)) { $MbrPhone = ""; } | |||
| $xml = | |||
| '<DPReq> | |||
| <IssuerID>'. $this->IssuerID .'</IssuerID> | |||
| <StoreID>'. $this->StoreID .'</StoreID> | |||
| <POSID>'. $this->POSID .'</POSID> | |||
| <CustTrxNo>'. $CustTrxNo .'</CustTrxNo> | |||
| <MbrPhone>'. $MbrPhone .'</MbrPhone> | |||
| <POSTime>'. $POSTime .'</POSTime> | |||
| </DPReq>'; | |||
| return $this->getResultXml(__FUNCTION__, $xml); | |||
| } | |||
| /** | |||
| * API 6: 會員綁定卡片消費 | |||
| * | |||
| * 說明: 使用 已綁定 MemberID 的 BarCode 消費 | |||
| * | |||
| * [data] | |||
| * *MemberID:會員編號 (ex. 車號) | |||
| * *BarCode:卡號 | |||
| * ReqAmount:總交易金額 總交易金額 (包含非 卡片交易金額 ) | |||
| * *Amount:卡片 交易金額 (包含使 用紅利點數金額 ) | |||
| * ProductID:商品代號 | |||
| * ReedemPointsForCash:使用紅利點數折抵功能,會以紅利可折抵的最大金額扣除紅利,並優先扣除 , 使用請填 “Y”,不使用則不填 | |||
| */ | |||
| public function BalanceMaintenance3($data, $redeem) { | |||
| extract($data); | |||
| if (empty($POSTime)) { | |||
| $POSTime = date('Y/m/d H:i:s', time()); | |||
| } | |||
| $RedeemPointsForCash = ""; | |||
| if ($redeem) { | |||
| $RedeemPointsForCash = "Y"; // 紅利點數折抵 | |||
| } | |||
| if (empty($ReqAmount)) { $ReqAmount = ""; } | |||
| if (empty($MbrPhone)) { $MbrPhone = ""; } | |||
| if (empty($StaffID)) { $StaffID = ""; } | |||
| if (empty($ProductID)) { $ProductID = ""; } | |||
| $xml = | |||
| '<DPReq> | |||
| <IssuerID>'. $this->IssuerID .'</IssuerID> | |||
| <StoreID>'. $this->StoreID .'</StoreID> | |||
| <POSID>'. $this->POSID .'</POSID> | |||
| <MemberID>'. $MemberID .'</MemberID> | |||
| <BarCode>'. $BarCode .'</BarCode> | |||
| <ReqAmount>'. $ReqAmount .'</ReqAmount> | |||
| <Amount>'. $Amount .'</Amount> | |||
| <CustTrxNo>'. $CustTrxNo .'</CustTrxNo> | |||
| <MbrPhone>'. $MbrPhone .'</MbrPhone> | |||
| <POSTime>'. $POSTime .'</POSTime> | |||
| <StaffID>'. $StaffID .'</StaffID> | |||
| <ProductID>'. $ProductID .'</ProductID> | |||
| <RedeemPointsForCash>'. $RedeemPointsForCash .'</RedeemPointsForCash> | |||
| </DPReq>'; | |||
| return $this->getResultXml(__FUNCTION__, $xml); | |||
| } | |||
| /** | |||
| * API 7: 取消卡片記名 | |||
| * | |||
| * 說明: 取消卡片記名 | |||
| * | |||
| * [data] | |||
| * *UserID:要取消記名的會員編號 | |||
| * *MbrPhone:要取消記名的會員電話 | |||
| * *BarCode:要取消記名的卡號 | |||
| */ | |||
| public function UnRegister($data) { | |||
| extract($data); | |||
| if (empty($POSTime)) { $POSTime = date('Y/m/d H:i:s', time()); } | |||
| if (empty($MbrPhone)) { $MbrPhone = ""; } | |||
| if (empty($StaffID)) { $StaffID = ""; } | |||
| $xml = | |||
| '<DPReq> | |||
| <IssuerID>'. $this->IssuerID .'</IssuerID> | |||
| <StoreID>'. $this->StoreID .'</StoreID> | |||
| <POSID>'. $this->POSID .'</POSID> | |||
| <CustTrxNo>'. $CustTrxNo .'</CustTrxNo> | |||
| <UserID>'. $UserID .'</UserID> | |||
| <MbrPhone>'. $MbrPhone .'</MbrPhone> | |||
| <BarCode>'. $BarCode .'</BarCode> | |||
| <POSTime>'. $POSTime .'</POSTime> | |||
| <StaffID>'. $StaffID .'</StaffID> | |||
| </DPReq>'; | |||
| return $this->getResultXml(__FUNCTION__, $xml); | |||
| } | |||
| /** | |||
| * API 8: 卡片儲值 | |||
| * | |||
| * 說明: | |||
| * 1. 實體卡: 括開銀漆後會有 PIN 碼, 輸入 PIN 即可代表該卡片 | |||
| * 2. 虛擬卡: 要先向 TWGC 取得一個一次性的密碼作為 PIN 碼, 進行儲值交易 (GetOTPin2) | |||
| * | |||
| * [data] | |||
| * *Amount:儲值金額最大共10碼數字,單位為元 | |||
| * PromotionID:促銷活動代號 (填空字串即可) | |||
| * PIN:儲值碼 | |||
| * | |||
| */ | |||
| public function Reload2($data) { | |||
| extract($data); | |||
| if (empty($POSTime)) { $POSTime = date('Y/m/d H:i:s', time()); } | |||
| if (empty($PIN)) { $PIN = ""; } | |||
| if (empty($MbrPhone)) { $MbrPhone = ""; } | |||
| if (empty($StaffID)) { $StaffID = ""; } | |||
| if (empty($PromotionID)) { $PromotionID = ""; } | |||
| $xml = | |||
| '<DPReq> | |||
| <IssuerID>'. $this->IssuerID .'</IssuerID> | |||
| <StoreID>'. $this->StoreID .'</StoreID> | |||
| <POSID>'. $this->POSID .'</POSID> | |||
| <CustTrxNo>'. $CustTrxNo .'</CustTrxNo> | |||
| <PIN>'. $PIN .'</PIN> | |||
| <Amount>'. $Amount .'</Amount> | |||
| <MbrPhone>'. $MbrPhone .'</MbrPhone> | |||
| <POSTime>'. $POSTime .'</POSTime> | |||
| <StaffID>'. $StaffID .'</StaffID> | |||
| <PromotionID>'. $PromotionID .'</PromotionID> | |||
| </DPReq>'; | |||
| return $this->getResultXml(__FUNCTION__, $xml); | |||
| } | |||
| /** | |||
| * API 9: 取得卡片儲值 PIN 碼 | |||
| * | |||
| * 說明: | |||
| * GetOTPin2 會回傳一個圖檔 (以 base64 解碼還原為圖檔), 圖檔裡有 PIN 碼 | |||
| * | |||
| * [data] | |||
| * *RequestTime:本機時間 | |||
| * *PasswordType:固定填寫 ‘TWGCAPP’ | |||
| * *Size:回傳圖檔大小 (L/M/S) | |||
| */ | |||
| public function GetOTPin2($data) { | |||
| extract($data); | |||
| if (empty($RequestTime)) { $RequestTime = date('Y/m/d H:i:s', time()); } | |||
| if (empty($PasswordType)) { $PasswordType = "TWGCAPP"; } | |||
| if (empty($Size)) { $Size = "S"; } | |||
| $xml = | |||
| '<DPReq> | |||
| <RequestTime>'. $RequestTime .'</RequestTime> | |||
| <PasswordType>'. $PasswordType .'</PasswordType> | |||
| <BarCode>'. $BarCode .'</BarCode> | |||
| <Size>'. $Size .'</Size> | |||
| </DPReq>'; | |||
| return $this->getResultXml(__FUNCTION__, $xml); | |||
| } | |||
| /** | |||
| * API 10: 停用 | |||
| * | |||
| * 說明: 停用 Barcode | |||
| * | |||
| * [data] | |||
| * *BarCode:要停用的卡號 | |||
| * *Reason: 停用原因 (1.遺失, 2.損壞, 3.更換新卡而停用本卡, 4.單純停用) | |||
| */ | |||
| public function Suspend($data) { | |||
| extract($data); | |||
| if (empty($PIN)) { $PIN = ""; } | |||
| if (empty($MbrPhone)) { $MbrPhone = ""; } | |||
| if (empty($TransTime)) { $TransTime = date('Y-m-d H:i:s', time()); } | |||
| if (empty($Reason)) { $Reason = "4"; } // 4.單純停用 | |||
| $xml = | |||
| '<DPReq> | |||
| <IssuerID>'. $this->IssuerID .'</IssuerID> | |||
| <StoreID>'. $this->StoreID .'</StoreID> | |||
| <POSID>'. $this->POSID .'</POSID> | |||
| <CustTrxNo>'. $CustTrxNo .'</CustTrxNo> | |||
| <BarCode>'. $BarCode .'</BarCode> | |||
| <PIN>'. $PIN .'</PIN> | |||
| <MbrPhone>'. $MbrPhone .'</MbrPhone> | |||
| <TransTime>'. $TransTime .'</TransTime> | |||
| <Reason>'. $Reason .'</Reason> | |||
| </DPReq>'; | |||
| return $this->getResultXml(__FUNCTION__, $xml); | |||
| } | |||
| /** | |||
| * 取得 TWGC 回傳 XML | |||
| */ | |||
| private function getResultXml($function, $xml) { | |||
| $url = $this->ServiceURL.'/'.$function; | |||
| $parameters = | |||
| array( | |||
| 'issuerIdentity' => $this->issuerIdentity, | |||
| 'xml' => base64_encode($xml) | |||
| ); | |||
| $spResult = $this->ServerPost($url, $parameters); | |||
| // parse result | |||
| $result_decode = base64_decode(substr(simplexml_load_string($spResult), 5)); | |||
| //echo json_encode(simplexml_load_string($result_decode)); | |||
| return simplexml_load_string($result_decode); | |||
| } | |||
| private function ServerPost($url, $parameters=array()) { | |||
| $ch = curl_init(); | |||
| curl_setopt($ch, CURLOPT_URL, $url); | |||
| curl_setopt($ch, CURLOPT_HEADER, FALSE); | |||
| curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); | |||
| curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); | |||
| curl_setopt($ch, CURLOPT_POST, TRUE); | |||
| curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters)); | |||
| $rs = curl_exec($ch); | |||
| curl_close($ch); | |||
| return $rs; | |||
| } | |||
| } | |||
| @@ -0,0 +1,251 @@ | |||
| <?php | |||
| require_once 'auth_mpi_mac.php'; // 24 位元 | |||
| //require_once 'auth_mpi_mac8.php'; // 8 位元 | |||
| /** | |||
| * 中國信託金流介接 | |||
| */ | |||
| class CTBCAgent { | |||
| public $SSLAuthUI = "SSLAuthUI"; // URL授權介面 | |||
| public $MerchantID = "MerchantID"; // 銀行所授與的特店代號,純數字,固定 13 碼。 | |||
| public $TerminalID = "TerminalID"; // 銀行所授與的終端機代號,純數字,固定 8 碼。 | |||
| public $Option = "Option"; // 純數字欄位,依交易方式不同填入不同的資料,說明如下: | |||
| /* | |||
| 一般交易請填「1」。 | |||
| 分期交易請填一到兩碼的分期期數。 | |||
| 紅利交易請填固定兩碼的產品代碼。 | |||
| 紅利分期交易請填第一至二碼固定為產品代碼,第三碼或三至四碼為分期期數。 | |||
| */ | |||
| public $Key = "Key"; // 此為貴特店在URL 帳務管理後台登錄的壓碼字串。 | |||
| public $MerchantName = "MerchantName"; // 特店所要顯示的商店名稱,中文請填BIG5 碼。 | |||
| public $OrderDetail = "OrderDetail"; // 訂單描述,中文請填BIG5 碼。 | |||
| public $AutoCap = "AutoCap"; // 是否自動請款 (0–不自動請款, 1–自動請款) | |||
| public $AuthResURL = "AuthResURL"; // 從收單行端取得授權碼後,要導回的網址,請勿填入特殊字元@、#、%、?、&等。 | |||
| public $Customize = "Customize"; // 設定刷卡頁顯示特定語系或客制化頁面。(1–繁體中文, 2–簡體中文, 3–英文, 5–客制化頁面) | |||
| function __construct() { | |||
| $this->CTBCAgent(); | |||
| } | |||
| function CTBCAgent() { | |||
| } | |||
| /** | |||
| * 1. CTBC 結帳 | |||
| * | |||
| * [data] | |||
| * *merID : 特店網站專用代號 | |||
| * *URLEnc: 交易訊息的密文(URLEnc) | |||
| */ | |||
| public function CheckOut($data) { | |||
| extract($data); | |||
| // 取得url enc | |||
| $urlEnc = $this->URLEnc($data); | |||
| // 轉址 | |||
| $szHtml = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'; | |||
| $szHtml .= '<div style="text-align:center;" ><form id="__ctbcForm" method="post" target="' . $target . '" action="' . $this->SSLAuthUI . '">'; | |||
| $szHtml .="<input type='hidden' name='URLEnc' value='$urlEnc' />"; | |||
| $szHtml .="<input type='hidden' name='merID' value='$merID' />"; | |||
| $szHtml .= '<script type="text/javascript">document.getElementById("__ctbcForm").submit();</script>'; | |||
| $szHtml .= '</form></div>'; | |||
| echo $szHtml; | |||
| } | |||
| /** | |||
| * 2. 解密URL 交易訊息的密文(URLDec) | |||
| * | |||
| * [data] | |||
| * *encRes= : 密文 | |||
| * debug: 預設(進行交易時)請填0,偵錯時請填1。 | |||
| */ | |||
| public function Decrypt($data) { | |||
| extract($data); | |||
| if (empty($debug)) { $debug = "0"; } | |||
| return gendecrypt( | |||
| $encRes, | |||
| $this->Key, | |||
| $debug); | |||
| } | |||
| /** | |||
| * 3. 取得 checkmac | |||
| */ | |||
| public function CheckMac($data) { | |||
| extract($data); | |||
| if (empty($debug)) { $debug = "0"; } | |||
| if (!empty($prodcode)) { | |||
| $option = $prodcode; // option: 紅利交易 | |||
| }else{ | |||
| $option = $numberofpay; // option: 一般交易, 分期交易 | |||
| } | |||
| return auth_out_mac( | |||
| $status, $errcode, $authcode, $authamt, $lidm, $offsetamt, $originalamt, $utilizedpoint, | |||
| $option, | |||
| $last4digitpan, | |||
| $this->Key, | |||
| $debug); | |||
| } | |||
| /** | |||
| * 解密URL 交易訊息的密文(URLDec) | |||
| * | |||
| * [data] | |||
| * *encRes= : 密文 | |||
| * debug: 預設(進行交易時)請填0,偵錯時請填1。 | |||
| */ | |||
| function URLDec($data) { | |||
| extract($data); | |||
| if (empty($debug)) { $debug = "0"; } | |||
| $EncArray = gendecrypt( | |||
| $encRes, | |||
| $this->Key, | |||
| $debug); | |||
| $MACString = ''; | |||
| $URLEnc = ''; | |||
| //echo "<BR>\n"; | |||
| foreach($EncArray AS $name => $val){ | |||
| echo $name ."=>". urlencode(trim($val,"\x00..\x08")) ."\n"; | |||
| } | |||
| if(isset($EncArray['status'])){ | |||
| $status = isset($EncArray['status']) ? $EncArray['status'] : ""; | |||
| $errCode = isset($EncArray['errcode']) ? $EncArray['errcode'] : ""; | |||
| $authCode = isset($EncArray['authcode']) ? $EncArray['authcode'] : ""; | |||
| $authAmt = isset($EncArray['authamt']) ? $EncArray['authamt'] : ""; | |||
| $lidm = isset($EncArray['lidm']) ? $EncArray['lidm'] : ""; | |||
| $OffsetAmt = isset($EncArray['offsetamt']) ? $EncArray['offsetamt'] : ""; | |||
| $OriginalAmt = isset($EncArray['originalamt']) ? $EncArray['originalamt'] : ""; | |||
| $UtilizedPoint = isset($EncArray['utilizedpoint']) ? $EncArray['utilizedpoint'] : ""; | |||
| $Option = isset($EncArray['numberofpay']) ? $EncArray[' numberofpay'] : ""; | |||
| //紅利交易時請帶入prodcode | |||
| //$Option = isset($EncArray['prodcode']) ? $EncArray['prodcode'] : ""; | |||
| $Last4digitPAN = isset($EncArray['last4digitpan']) ? $EncArray['last4digitpan'] : ""; | |||
| $pidResult= isset($EncArray['pidResult']) ? $EncArray['pidResult'] : ""; | |||
| $CardNumber = isset($EncArray['CardNumber']) ? $EncArray['CardNumber'] : ""; | |||
| $MACString = auth_out_mac( | |||
| $status, $errCode, $authCode, $authAmt, $lidm, $OffsetAmt, $OriginalAmt, $UtilizedPoint, | |||
| $Option, | |||
| //$this->Option, | |||
| $Last4digitPAN, | |||
| $this->Key, | |||
| $debug); | |||
| echo "MACString=$MACString\n"; | |||
| $outmac = isset($EncArray['outmac']) ? $EncArray['outmac'] : ""; | |||
| echo "outmac=$outmac\n"; | |||
| }else{ | |||
| // do nothing | |||
| foreach ($EncArray as $key => $value){ | |||
| switch ($key){ | |||
| /* 支付後的回傳的基本參數 */ | |||
| case "status": $status = $value; break; | |||
| case "errcode": $errcode = $value; break; | |||
| case "authcode": $authcode = $value; break; | |||
| case "authamt": $authamt = $value; break; | |||
| case "lidm": $lidm = $value; break; | |||
| case "offsetamt": $offsetamt = $value; break; | |||
| case "originalamt": $originalamt = $value; break; | |||
| case "utilizedpoint": $utilizedpoint = $value; break; | |||
| case "numberofpay": $numberofpay = $value; break; | |||
| case "last4digitpan": $last4digitpan = $value; break; | |||
| case "pidResult": $pid_result = $value; break; | |||
| case "CardNumber": $card_number = $value; break; | |||
| default: break; | |||
| } | |||
| } | |||
| // 一律記錄log。 | |||
| $data = array( | |||
| 'status' => $status, | |||
| 'errcode' => $errcode, | |||
| 'authcode' => $authcode, | |||
| 'authamt' => $authamt, | |||
| 'lidm' => $lidm, | |||
| 'offsetamt' => $offsetamt, | |||
| 'originalamt' => $originalamt, | |||
| 'utilizedpoint' => $utilizedpoint, | |||
| 'numberofpay' => $numberofpay, | |||
| 'last4digitpan' => $last4digitpan, | |||
| 'pid_result' => $pid_result, | |||
| 'card_number' => $card_number | |||
| ); | |||
| echo json_encode($data); | |||
| } | |||
| } | |||
| /** | |||
| * 產生URL 交易訊息的密文(URLEnc) | |||
| * | |||
| * [data] | |||
| * *lidm : 訂單編號 | |||
| * *purchAmt: 總金額 | |||
| * txType: 交易方式,長度為一碼數字。(一般交易:0, 分期交易:1, 紅利折抵一般交易:2, 紅利折抵分期交易:4) | |||
| * debug: 預設(進行交易時)請填0,偵錯時請填1。 | |||
| */ | |||
| function URLEnc($data) { | |||
| extract($data); | |||
| if (empty($txType)) { $txType = "0"; } // 預設 0 | |||
| if (empty($debug)) { $debug = "0"; } // 預設 0 | |||
| $MACString = auth_in_mac( | |||
| $this->MerchantID, | |||
| $this->TerminalID, | |||
| $lidm, | |||
| /* 為電子商場的應用程式所給予此筆交易的訂單編號, | |||
| 資料型態為最長19 個字元的文字串。 | |||
| 訂單編號字串之字元僅接受一般英文字母、數字及底線’_’的組合, | |||
| 不可出現其餘符號字元 | |||
| */ | |||
| $purchAmt,// 為消費者此筆交易所購買商品欲授權總金額,正整數格式的字串。 | |||
| $txType, // 交易方式 | |||
| $this->Option, | |||
| $this->Key, | |||
| $this->MerchantName, | |||
| $this->AuthResURL, | |||
| $this->OrderDetail, | |||
| $this->AutoCap, | |||
| $this->Customize, | |||
| $debug); | |||
| //echo "InMac=$MACString\n"; | |||
| $URLEnc = get_auth_urlenc( | |||
| $this->MerchantID, | |||
| $this->TerminalID, | |||
| $lidm, | |||
| $purchAmt, | |||
| $txType, | |||
| $this->Option, | |||
| $this->Key, | |||
| $this->MerchantName, | |||
| $this->AuthResURL, | |||
| $this->OrderDetail, | |||
| $this->AutoCap, | |||
| $this->Customize, | |||
| $MACString, | |||
| $debug); | |||
| //echo "UrlEnc=$URLEnc\n"; | |||
| return $URLEnc; | |||
| } | |||
| } | |||
| @@ -0,0 +1,412 @@ | |||
| <?php | |||
| /* | |||
| phpMQTT | |||
| A simple php class to connect/publish/subscribe to an MQTT broker | |||
| */ | |||
| /* | |||
| Licence | |||
| Copyright (c) 2010 Blue Rhinos Consulting | Andrew Milsted | |||
| andrew@bluerhinos.co.uk | http://www.bluerhinos.co.uk | |||
| Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| of this software and associated documentation files (the "Software"), to deal | |||
| in the Software without restriction, including without limitation the rights | |||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
| copies of the Software, and to permit persons to whom the Software is | |||
| furnished to do so, subject to the following conditions: | |||
| The above copyright notice and this permission notice shall be included in | |||
| all copies or substantial portions of the Software. | |||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||
| THE SOFTWARE. | |||
| */ | |||
| /* phpMQTT */ | |||
| class phpMQTT { | |||
| private $socket; /* holds the socket */ | |||
| private $msgid = 1; /* counter for message id */ | |||
| public $keepalive = 10; /* default keepalive timmer */ | |||
| public $timesinceping; /* host unix time, used to detect disconects */ | |||
| public $topics = array(); /* used to store currently subscribed topics */ | |||
| public $debug = false; /* should output debug messages */ | |||
| public $address; /* broker address */ | |||
| public $port; /* broker port */ | |||
| public $clientid; /* client id sent to brocker */ | |||
| public $will; /* stores the will of the client */ | |||
| private $username; /* stores username */ | |||
| private $password; /* stores password */ | |||
| function __construct($address, $port, $clientid){ | |||
| $this->broker($address, $port, $clientid); | |||
| } | |||
| /* sets the broker details */ | |||
| function broker($address, $port, $clientid){ | |||
| $this->address = $address; | |||
| $this->port = $port; | |||
| $this->clientid = $clientid; | |||
| } | |||
| function connect_auto($clean = true, $will = NULL, $username = NULL, $password = NULL){ | |||
| while($this->connect($clean, $will, $username, $password)==false){ | |||
| sleep(10); | |||
| } | |||
| return true; | |||
| } | |||
| /* connects to the broker | |||
| inputs: $clean: should the client send a clean session flag */ | |||
| function connect($clean = true, $will = NULL, $username = NULL, $password = NULL){ | |||
| if($will) $this->will = $will; | |||
| if($username) $this->username = $username; | |||
| if($password) $this->password = $password; | |||
| $address = gethostbyname($this->address); | |||
| $this->socket = fsockopen($address, $this->port, $errno, $errstr, 60); | |||
| if (!$this->socket ) { | |||
| if($this->debug) error_log("fsockopen() $errno, $errstr \n"); | |||
| return false; | |||
| } | |||
| stream_set_timeout($this->socket, 5); | |||
| stream_set_blocking($this->socket, 0); | |||
| $i = 0; | |||
| $buffer = ""; | |||
| $buffer .= chr(0x00); $i++; | |||
| $buffer .= chr(0x06); $i++; | |||
| $buffer .= chr(0x4d); $i++; | |||
| $buffer .= chr(0x51); $i++; | |||
| $buffer .= chr(0x49); $i++; | |||
| $buffer .= chr(0x73); $i++; | |||
| $buffer .= chr(0x64); $i++; | |||
| $buffer .= chr(0x70); $i++; | |||
| $buffer .= chr(0x03); $i++; | |||
| //No Will | |||
| $var = 0; | |||
| if($clean) $var+=2; | |||
| //Add will info to header | |||
| if($this->will != NULL){ | |||
| $var += 4; // Set will flag | |||
| $var += ($this->will['qos'] << 3); //Set will qos | |||
| if($this->will['retain']) $var += 32; //Set will retain | |||
| } | |||
| if($this->username != NULL) $var += 128; //Add username to header | |||
| if($this->password != NULL) $var += 64; //Add password to header | |||
| $buffer .= chr($var); $i++; | |||
| //Keep alive | |||
| $buffer .= chr($this->keepalive >> 8); $i++; | |||
| $buffer .= chr($this->keepalive & 0xff); $i++; | |||
| $buffer .= $this->strwritestring($this->clientid,$i); | |||
| //Adding will to payload | |||
| if($this->will != NULL){ | |||
| $buffer .= $this->strwritestring($this->will['topic'],$i); | |||
| $buffer .= $this->strwritestring($this->will['content'],$i); | |||
| } | |||
| if($this->username) $buffer .= $this->strwritestring($this->username,$i); | |||
| if($this->password) $buffer .= $this->strwritestring($this->password,$i); | |||
| $head = " "; | |||
| $head{0} = chr(0x10); | |||
| $head{1} = chr($i); | |||
| fwrite($this->socket, $head, 2); | |||
| fwrite($this->socket, $buffer); | |||
| $string = $this->read(4); | |||
| if(ord($string{0})>>4 == 2 && $string{3} == chr(0)){ | |||
| if($this->debug) echo "Connected to Broker\n"; | |||
| }else{ | |||
| error_log(sprintf("Connection failed! (Error: 0x%02x 0x%02x)\n", | |||
| ord($string{0}),ord($string{3}))); | |||
| return false; | |||
| } | |||
| $this->timesinceping = time(); | |||
| return true; | |||
| } | |||
| /* read: reads in so many bytes */ | |||
| function read($int = 8192, $nb = false){ | |||
| // print_r(socket_get_status($this->socket)); | |||
| $string=""; | |||
| $togo = $int; | |||
| if($nb){ | |||
| return fread($this->socket, $togo); | |||
| } | |||
| while (!feof($this->socket) && $togo>0) { | |||
| $fread = fread($this->socket, $togo); | |||
| $string .= $fread; | |||
| $togo = $int - strlen($string); | |||
| } | |||
| return $string; | |||
| } | |||
| /* subscribe: subscribes to topics */ | |||
| function subscribe($topics, $qos = 0){ | |||
| $i = 0; | |||
| $buffer = ""; | |||
| $id = $this->msgid; | |||
| $buffer .= chr($id >> 8); $i++; | |||
| $buffer .= chr($id % 256); $i++; | |||
| foreach($topics as $key => $topic){ | |||
| $buffer .= $this->strwritestring($key,$i); | |||
| $buffer .= chr($topic["qos"]); $i++; | |||
| $this->topics[$key] = $topic; | |||
| } | |||
| $cmd = 0x80; | |||
| //$qos | |||
| $cmd += ($qos << 1); | |||
| $head = chr($cmd); | |||
| $head .= chr($i); | |||
| fwrite($this->socket, $head, 2); | |||
| fwrite($this->socket, $buffer, $i); | |||
| $string = $this->read(2); | |||
| $bytes = ord(substr($string,1,1)); | |||
| $string = $this->read($bytes); | |||
| } | |||
| /* ping: sends a keep alive ping */ | |||
| function ping(){ | |||
| $head = " "; | |||
| $head = chr(0xc0); | |||
| $head .= chr(0x00); | |||
| fwrite($this->socket, $head, 2); | |||
| if($this->debug) echo "ping sent\n"; | |||
| } | |||
| /* disconnect: sends a proper disconect cmd */ | |||
| function disconnect(){ | |||
| $head = " "; | |||
| $head{0} = chr(0xe0); | |||
| $head{1} = chr(0x00); | |||
| fwrite($this->socket, $head, 2); | |||
| } | |||
| /* close: sends a proper disconect, then closes the socket */ | |||
| function close(){ | |||
| $this->disconnect(); | |||
| fclose($this->socket); | |||
| } | |||
| /* publish: publishes $content on a $topic */ | |||
| function publish($topic, $content, $qos = 0, $retain = 0){ | |||
| $i = 0; | |||
| $buffer = ""; | |||
| $buffer .= $this->strwritestring($topic,$i); | |||
| //$buffer .= $this->strwritestring($content,$i); | |||
| if($qos){ | |||
| $id = $this->msgid++; | |||
| $buffer .= chr($id >> 8); $i++; | |||
| $buffer .= chr($id % 256); $i++; | |||
| } | |||
| $buffer .= $content; | |||
| $i+=strlen($content); | |||
| $head = " "; | |||
| $cmd = 0x30; | |||
| if($qos) $cmd += $qos << 1; | |||
| if($retain) $cmd += 1; | |||
| $head{0} = chr($cmd); | |||
| $head .= $this->setmsglength($i); | |||
| fwrite($this->socket, $head, strlen($head)); | |||
| fwrite($this->socket, $buffer, $i); | |||
| } | |||
| /* message: processes a recieved topic */ | |||
| function message($msg){ | |||
| $tlen = (ord($msg{0})<<8) + ord($msg{1}); | |||
| $topic = substr($msg,2,$tlen); | |||
| $msg = substr($msg,($tlen+2)); | |||
| $found = 0; | |||
| foreach($this->topics as $key=>$top){ | |||
| if( preg_match("/^".str_replace("#",".*", | |||
| str_replace("+","[^\/]*", | |||
| str_replace("/","\/", | |||
| str_replace("$",'\$', | |||
| $key))))."$/",$topic) ){ | |||
| if(is_callable($top['function'])){ | |||
| call_user_func($top['function'],$topic,$msg); | |||
| $found = 1; | |||
| } | |||
| } | |||
| } | |||
| if($this->debug && !$found) echo "msg recieved but no match in subscriptions\n"; | |||
| } | |||
| /* proc: the processing loop for an "allways on" client | |||
| set true when you are doing other stuff in the loop good for watching something else at the same time */ | |||
| function proc( $loop = true){ | |||
| if(1){ | |||
| $sockets = array($this->socket); | |||
| $w = $e = NULL; | |||
| $cmd = 0; | |||
| //$byte = fgetc($this->socket); | |||
| if(feof($this->socket)){ | |||
| if($this->debug) echo "eof receive going to reconnect for good measure\n"; | |||
| fclose($this->socket); | |||
| $this->connect_auto(false); | |||
| if(count($this->topics)) | |||
| $this->subscribe($this->topics); | |||
| } | |||
| $byte = $this->read(1, true); | |||
| if(!strlen($byte)){ | |||
| if($loop){ | |||
| usleep(100000); | |||
| } | |||
| }else{ | |||
| $cmd = (int)(ord($byte)/16); | |||
| if($this->debug) echo "Recevid: $cmd\n"; | |||
| $multiplier = 1; | |||
| $value = 0; | |||
| do{ | |||
| $digit = ord($this->read(1)); | |||
| $value += ($digit & 127) * $multiplier; | |||
| $multiplier *= 128; | |||
| }while (($digit & 128) != 0); | |||
| if($this->debug) echo "Fetching: $value\n"; | |||
| if($value) | |||
| $string = $this->read($value,"fetch"); | |||
| if($cmd){ | |||
| switch($cmd){ | |||
| case 3: | |||
| $this->message($string); | |||
| break; | |||
| } | |||
| $this->timesinceping = time(); | |||
| } | |||
| } | |||
| if($this->timesinceping < (time() - $this->keepalive )){ | |||
| if($this->debug) echo "not found something so ping\n"; | |||
| $this->ping(); | |||
| } | |||
| if($this->timesinceping<(time()-($this->keepalive*2))){ | |||
| if($this->debug) echo "not seen a package in a while, disconnecting\n"; | |||
| fclose($this->socket); | |||
| $this->connect_auto(false); | |||
| if(count($this->topics)) | |||
| $this->subscribe($this->topics); | |||
| } | |||
| } | |||
| return 1; | |||
| } | |||
| /* getmsglength: */ | |||
| function getmsglength(&$msg, &$i){ | |||
| $multiplier = 1; | |||
| $value = 0 ; | |||
| do{ | |||
| $digit = ord($msg{$i}); | |||
| $value += ($digit & 127) * $multiplier; | |||
| $multiplier *= 128; | |||
| $i++; | |||
| }while (($digit & 128) != 0); | |||
| return $value; | |||
| } | |||
| /* setmsglength: */ | |||
| function setmsglength($len){ | |||
| $string = ""; | |||
| do{ | |||
| $digit = $len % 128; | |||
| $len = $len >> 7; | |||
| // if there are more digits to encode, set the top bit of this digit | |||
| if ( $len > 0 ) | |||
| $digit = ($digit | 0x80); | |||
| $string .= chr($digit); | |||
| }while ( $len > 0 ); | |||
| return $string; | |||
| } | |||
| /* strwritestring: writes a string to a buffer */ | |||
| function strwritestring($str, &$i){ | |||
| $ret = " "; | |||
| $len = strlen($str); | |||
| $msb = $len >> 8; | |||
| $lsb = $len % 256; | |||
| $ret = chr($msb); | |||
| $ret .= chr($lsb); | |||
| $ret .= $str; | |||
| $i += ($len+2); | |||
| return $ret; | |||
| } | |||
| function printstr($string){ | |||
| $strlen = strlen($string); | |||
| for($j=0;$j<$strlen;$j++){ | |||
| $num = ord($string{$j}); | |||
| if($num > 31) | |||
| $chr = $string{$j}; else $chr = " "; | |||
| printf("%4d: %08b : 0x%02x : %s \n",$j,$num,$num,$chr); | |||
| } | |||
| } | |||
| } | |||
| ?> | |||
| @@ -0,0 +1,82 @@ | |||
| <!-- ----- 電子發票清帳作業 ----- --> | |||
| <div data-items="check_point" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading">關帳(手動)</div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div class="form-group"> | |||
| <label style="font-size:16px;">本次關帳時間</label> | |||
| <input id="check_point_time" type="datetime" class="form-control" style="font-size:20px;"/> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label style="font-size:16px;">備註(選填)</label> | |||
| <input id="check_point_remarks" type="text" class="form-control" style="font-size:20px;" placeholder="補充說明" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <button type="button" class="btn btn-large btn-success pull-left" onclick="set_check_point();">關帳</button> | |||
| </div> | |||
| </div><!-- end of col-lg-6 (nested) --> | |||
| </div><!-- end of row (nested) --> | |||
| </div><!-- end of panel-body --> | |||
| </div><!-- end of panel --> | |||
| </div><!-- end of col-lg-12 --> | |||
| </div><!-- data-items --> | |||
| <!-- ----- 電子發票清帳作業(結束) ----- --> | |||
| <script> | |||
| $("#check_point_time").val(moment(new Date()).format("YYYY-MM-DD HH:mm:ss")); | |||
| $("#check_point_time").prop("readonly",true); | |||
| // 列印電子發票清帳 | |||
| function set_check_point() | |||
| { | |||
| var station_no = $("#station_select").val(); | |||
| var check_point_time = $("#check_point_time").val(); | |||
| var remarks = $("#check_point_remarks").val(); | |||
| if (!confirm("確認關帳時間:"+check_point_time+" ?")) return false; | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"set_check_point", | |||
| dataType:"text", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "check_point_time": check_point_time, | |||
| "remarks": remarks | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata == "ok") | |||
| { | |||
| alertify_msg("完成!"); | |||
| //show_item('check_point', 'check_point'); | |||
| show_item('check_point_report', 'check_point_report'); | |||
| $("#check_point_form").submit(); | |||
| } | |||
| else if(jdata == "not_synced") | |||
| { | |||
| alertify_sync(station_no); | |||
| } | |||
| else if(jdata == "error_amt") | |||
| { | |||
| alertify_msg("金額異常,請確認關帳時間"); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg("操作失敗 !"); | |||
| } | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,312 @@ | |||
| <?php /* ----- 關帳查詢 ----- */?> | |||
| <div data-items="check_point_report" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 關帳查詢 | |||
| <form id="check_point_form" role="form"> | |||
| <label class="input-inline" for="check_point_search_time_from">開始</label> | |||
| <input type="text" class="date" id="check_point_search_time_from" name="check_point_search_time_from"> | |||
| <span class="input-inline" > ~ </span> | |||
| <label class="input-inline" for="check_point_search_time_to">結束</label> | |||
| <input type="text" class="date" id="check_point_search_time_to" name="check_point_search_time_to"> | |||
| <label class="input-inline"><input type="submit" value="查詢" /></label> | |||
| </form> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:center;">編號</th> | |||
| <th style="text-align:center;">上次關帳時間</th> | |||
| <th style="text-align:center;">本次關帳時間</th> | |||
| <th style="text-align:center;">總金額(不含押金)</th> | |||
| <th style="text-align:center;">總押金</th> | |||
| <th style="text-align:center;">操作種類</th> | |||
| <th style="text-align:center;">功能</th> | |||
| <th style="text-align:center;">建立時間</th> | |||
| <th style="text-align:center;">備註</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="check_point_list" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| <div id="check_point_list_detail_box" class="col-lg-12" style="display:none;"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 關帳明細(<span id='check_point_list_detail_time_str_1'></span> 開始 ~ 至 <span id='check_point_list_detail_time_str_2'></span> 關帳,期間所有交易) | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <th style="text-align:center;">入帳日</th> | |||
| <th style="text-align:left;">入帳車號</th> | |||
| <th style="text-align:left;">目前車號</th> | |||
| <th style="text-align:center;">會員開始日</th> | |||
| <th style="text-align:center;">上期繳期</th> | |||
| <th style="text-align:center;">上期結束日</th> | |||
| <th style="text-align:center;">上期租金</th> | |||
| <th style="text-align:center;">本期繳期</th> | |||
| <th style="text-align:center;">本期開始日</th> | |||
| <th style="text-align:center;">本期結束日</th> | |||
| <th style="text-align:center;">本期租金</th> | |||
| <th style="text-align:center;">押金</th> | |||
| <th style="text-align:center;">審核狀態</th> | |||
| <th style="text-align:center;">有效期限</th> | |||
| <th style="text-align:center;">備註</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="check_point_list_detail" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 關帳查詢(結束) ----- */?> | |||
| <script> | |||
| var initMinDate = moment("00:00", "HH:mm").subtract(1, 'days'); | |||
| var initMaxDate = moment("23:59", "HH:mm"); | |||
| var searchTimeFromPicker = $( "#check_point_search_time_from" ); | |||
| var searchTimeToPicker = $( "#check_point_search_time_to" ); | |||
| // 日期 | |||
| /* DatePicker 設定start */ | |||
| searchTimeFromPicker.datetimepicker({ | |||
| dateFormat: 'yy-mm-dd', | |||
| maxDate: '0', | |||
| changeMonth: true, | |||
| numberOfMonths: 1, | |||
| timeFormat: "HH:mm", | |||
| addSliderAccess: true, | |||
| sliderAccessArgs: { touchonly: false }, | |||
| onClose: function( selectedDate ) { | |||
| searchTimeToPicker.datetimepicker( "option", "minDate", selectedDate ); | |||
| console.log("search_time_from: " + selectedDate); | |||
| } | |||
| }); | |||
| searchTimeFromPicker.datetimepicker('setDate', initMinDate.toDate()); | |||
| searchTimeToPicker.datetimepicker({ | |||
| dateFormat: 'yy-mm-dd', | |||
| maxDate: '0', | |||
| changeMonth: true, | |||
| numberOfMonths: 1, | |||
| timeFormat: "HH:mm", | |||
| addSliderAccess: true, | |||
| sliderAccessArgs: { touchonly: false }, | |||
| onClose: function( selectedDate ) { | |||
| searchTimeFromPicker.datetimepicker( "option", "maxDate", selectedDate ); | |||
| console.log("search_time_to: " + selectedDate); | |||
| } | |||
| }); | |||
| searchTimeToPicker.datetimepicker('setDate', initMaxDate.toDate()); | |||
| /* DatePicker 設定end */ | |||
| $("#check_point_form").submit(function(event) | |||
| { | |||
| event.preventDefault(); | |||
| var station_no = $("#station_select").val(); | |||
| var check_point_time_from = $( "#check_point_search_time_from" ).val(); | |||
| var check_point_time_to = $( "#check_point_search_time_to" ).val(); | |||
| $("#check_point_list").html(""); | |||
| $("#check_point_list_detail").html(""); | |||
| $("#check_point_list_detail_box").hide(); | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"check_point_query", | |||
| dataType:"json", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "check_point_time_from": check_point_time_from, | |||
| "check_point_time_to": check_point_time_to | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| var check_point_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| check_no = jdata[idx]['check_no']; | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", check_no, "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td id='check_point_data_", check_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-check_no='", jdata[idx]['check_no'], | |||
| "' data-check_time='", jdata[idx]['check_time'], | |||
| "' data-check_time_no='", jdata[idx]['check_time_no'], | |||
| "' data-check_time_last='", jdata[idx]['check_time_last'], | |||
| "' data-check_time_last_no='", jdata[idx]['check_time_last_no'], | |||
| "' data-check_type='", jdata[idx]['check_type'], | |||
| "' data-check_amt='", jdata[idx]['check_amt'], | |||
| "' data-check_deposit='", jdata[idx]['check_deposit'], | |||
| "' data-remarks='", jdata[idx]['remarks'], | |||
| "' style='text-align:center;'>", jdata[idx]['check_time_last'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_time'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_amt'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_deposit'], "</td>"]); | |||
| if(jdata[idx]['check_type'] == 1) | |||
| { | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>手動關帳</td>"]); | |||
| } | |||
| else | |||
| { | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>未知</td>"]); | |||
| } | |||
| check_point_list = check_point_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='check_point_detail(", check_no + ");'>明細</button></td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['create_time'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:left;'>", jdata[idx]['remarks'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["</tr>"]); | |||
| } | |||
| $("#check_point_list").append(check_point_list.join('')); | |||
| } | |||
| }); | |||
| }); | |||
| // 關帳查詢(明細) | |||
| function check_point_detail(check_no) | |||
| { | |||
| $("#check_point_list_detail").html(""); // -- 清除原內容 -- | |||
| var station_no = $("#check_point_data_"+check_no).data("station_no"); | |||
| var check_time = $("#check_point_data_"+check_no).data("check_time"); | |||
| var check_time_no = $("#check_point_data_"+check_no).data("check_time_no"); | |||
| var check_time_last = $("#check_point_data_"+check_no).data("check_time_last"); | |||
| var check_time_last_no = $("#check_point_data_"+check_no).data("check_time_last_no"); | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>check_point_detail_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: { | |||
| "station_no": station_no, | |||
| "check_time_no": check_time_no, | |||
| "check_time_last_no": check_time_last_no | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| $("#check_point_list_detail_box").hide(); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| $("#check_point_list_detail_time_str_1").text(check_time_last); | |||
| $("#check_point_list_detail_time_str_2").text(check_time); | |||
| $("#check_point_list_detail_box").show(); | |||
| var member_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| tx_no = jdata[idx]['tx_no']; | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", tx_no, "</td>"]); | |||
| member_list = member_list.concat(["<td id='acc_date_", tx_no, "' style='text-align:center;'>", jdata[idx]['acc_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='check_point_list_detail_data_", tx_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-tx_no='", jdata[idx]['tx_no'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-amt='", jdata[idx]['amt'], | |||
| "' data-amt1='", jdata[idx]['amt1'], | |||
| "' data-deposit='", jdata[idx]['deposit'], | |||
| "' data-start_date_last='", jdata[idx]['start_date_last'], | |||
| "' data-end_date='", jdata[idx]['end_date'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-fee_period='", jdata[idx]['fee_period'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| if(jdata[idx]['current_lpr']) | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>", jdata[idx]['current_lpr'], "</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>已刪除</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td id='sdate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_last_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period_last']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='deposit_", tx_no, "' style='text-align:center;'>", jdata[idx]['deposit'], "</td>"]); | |||
| if(jdata[idx]['tx_state'] == 4) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已退租</td>"]); | |||
| } | |||
| else if(jdata[idx]['tx_state'] == 44) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>交易取消</td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='member_tx_check(", tx_no + ");'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;'>已審核</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check(", tx_no + ");'>未通過</button></td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;' id='valid_time_", tx_no, "'>", jdata[idx]['valid_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:left;' id='remarks_", tx_no, "'>", jdata[idx]['remarks'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#check_point_list_detail").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,73 @@ | |||
| <!-- ----- 電子發票作廢(限當日)作業 ----- --> | |||
| <div data-items="invoice_cancel" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading">電子發票作廢作業</div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div> | |||
| <label>統編 </label> | |||
| <label class="radio-inline"><input type="radio" name="invoice_cancel_company_no" value="<?=$company_no?>" checked />本場站</label> | |||
| <label class="radio-inline"><input type="radio" name="invoice_cancel_company_no" value="<?=$hq_company_no?>" />總公司</label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>發票號碼</label> | |||
| <input id="invoice_cancel_invoice_no" type="text" class="form-control text-uppercase" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <button type="button" class="btn btn-large btn-success pull-left" onclick="invoice_cancel();">作廢</button> | |||
| </div> | |||
| </div><!-- end of col-lg-6 (nested) --> | |||
| </div><!-- end of row (nested) --> | |||
| </div><!-- end of panel-body --> | |||
| </div><!-- end of panel --> | |||
| </div><!-- end of col-lg-12 --> | |||
| </div><!-- data-items --> | |||
| <!-- ----- 電子發票作廢作業(結束) ----- --> | |||
| <script> | |||
| // 列印電子發票清帳 | |||
| function invoice_cancel() | |||
| { | |||
| var invoice_no = $("#invoice_cancel_invoice_no").val().toUpperCase(); | |||
| if (invoice_no == "") | |||
| { | |||
| alert("發票號碼欄位必填 !"); | |||
| return false; | |||
| } | |||
| if (!confirm("確認作廢發票:"+invoice_no+" ?")) return false; | |||
| $.ajax | |||
| ({ | |||
| url:"http://localhost:60134/", | |||
| async:false, | |||
| timeout:1500, | |||
| type:"post", | |||
| dataType:"json", | |||
| data: | |||
| { | |||
| "cmd":"CancelInvoice", | |||
| "company_no":$("input:radio:checked[name='invoice_cancel_company_no']").val(), | |||
| "vINVOICE_NO":invoice_no | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata["Result"] == "000") | |||
| { | |||
| alert("作廢完成, 發票號碼: "+invoice_no); | |||
| } | |||
| else | |||
| { | |||
| alert("作廢失敗:["+jdata["Result"]+"]"+jdata["Message"]); | |||
| } | |||
| $("#invoice_cancel_invoice_no").val(""); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,84 @@ | |||
| <!-- ----- 電子發票清帳作業 ----- --> | |||
| <div data-items="invoice_close" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading">電子發票清帳作業</div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div> | |||
| <label>統編 </label> | |||
| <label class="radio-inline"><input type="radio" name="invoice_close_company_no" value="<?=$company_no?>" checked />本場站</label> | |||
| <label class="radio-inline"><input type="radio" name="invoice_close_company_no" value="<?=$hq_company_no?>" />總公司</label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>清帳日期</label> | |||
| <input id="invoice_close_date" type="datetime" class="form-control" /> | |||
| </div> | |||
| <div class="checkbox"> | |||
| <label><input id="invoice_print_summary" type="checkbox" />列印清帳條</label> | |||
| </div> | |||
| <div class="checkbox"> | |||
| <label><input id="invoice_resend" type="checkbox" />發票重傳</label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <button type="button" class="btn btn-large btn-success pull-left" onclick="invoice_close();">清帳</button> | |||
| </div> | |||
| </div><!-- end of col-lg-6 (nested) --> | |||
| </div><!-- end of row (nested) --> | |||
| </div><!-- end of panel-body --> | |||
| </div><!-- end of panel --> | |||
| </div><!-- end of col-lg-12 --> | |||
| </div><!-- data-items --> | |||
| <!-- ----- 電子發票清帳作業(結束) ----- --> | |||
| <script> | |||
| $("#invoice_close_date").datetimepicker({language:"zh-TW",autoclose:true,minView:2,format:"yyyymmdd"}); | |||
| // 列印電子發票清帳 | |||
| function invoice_close() | |||
| { | |||
| var invoice_close_date = $("#invoice_close_date").val(); | |||
| if (invoice_close_date == "") | |||
| { | |||
| alert("日期欄必填 !"); | |||
| return false; | |||
| } | |||
| if (!confirm("確認清帳日期:"+invoice_close_date+" ?")) return false; | |||
| $.ajax | |||
| ({ | |||
| url:"http://localhost:60134/", | |||
| async:false, | |||
| timeout:1500, | |||
| type:"post", | |||
| dataType:"json", | |||
| data: | |||
| { | |||
| "cmd":"setShift_Close", | |||
| "company_no":$("input:radio:checked[name='invoice_close_company_no']").val(), | |||
| "vTRN_DATE":invoice_close_date, | |||
| "vPRINT_SUMMARY":$("#invoice_print_summary").prop("checked") ? "N" : "Y", | |||
| "vRESEND_FLG":$("#invoice_resend").prop("checked") ? "N" : "Y" | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata["Result"] == "000") | |||
| { | |||
| alert("清帳完成, 日期: "+jdata["W_TODAY"]); | |||
| } | |||
| else | |||
| { | |||
| alert("清帳失敗:["+jdata["Result"]+"]"+jdata["W_TODAY"]+jdata["Message"]); | |||
| } | |||
| $("#invoice_close_date").val(""); | |||
| $("#invoice_print_summary").prop("checked", false); | |||
| $("#invoice_resend").prop("checked", false); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,74 @@ | |||
| <!-- ----- 電子發開帳作業 ----- --> | |||
| <div data-items="invoice_open" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading">電子發票開帳作業</div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div> | |||
| <label>統編 </label> | |||
| <label class="radio-inline"><input type="radio" name="invoice_open_company_no" value="<?=$company_no?>" checked />本場站</label> | |||
| <label class="radio-inline"><input type="radio" name="invoice_open_company_no" value="<?=$hq_company_no?>" />總公司</label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>開帳日期</label> | |||
| <input id="invoice_open_date" type="datetime" class="form-control" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <button type="button" class="btn btn-large btn-success pull-left" onclick="invoice_open();">開帳</button> | |||
| </div> | |||
| </div><!-- end of col-lg-6 (nested) --> | |||
| </div><!-- end of row (nested) --> | |||
| </div><!-- end of panel-body --> | |||
| </div><!-- end of panel --> | |||
| </div><!-- end of col-lg-12 --> | |||
| </div><!-- data-items --> | |||
| <!-- ----- 電子發票開帳作業(結束) ----- --> | |||
| <script> | |||
| $("#invoice_open_date").datetimepicker({language:"zh-TW",autoclose:true,minView:2,format:"yyyymmdd"}); | |||
| // 列印電子發票開帳 | |||
| function invoice_open() | |||
| { | |||
| var invoice_open_date = $("#invoice_open_date").val(); | |||
| if (invoice_open_date == "") | |||
| { | |||
| alert("日期欄必填 !"); | |||
| return false; | |||
| } | |||
| if (!confirm("確認開帳日期:"+invoice_open_date+" ?")) return false; | |||
| $.ajax | |||
| ({ | |||
| url:"http://localhost:60134/", | |||
| async:false, | |||
| timeout:1500, | |||
| type:"post", | |||
| dataType:"json", | |||
| data: | |||
| { | |||
| "cmd":"setShift_Open", | |||
| "company_no":$("input:radio:checked[name='invoice_open_company_no']").val(), | |||
| "vTRN_DATE":invoice_open_date | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata["Result"] == "000") | |||
| { | |||
| alert("開帳完成, 日期: "+jdata["W_TODAY"]); | |||
| } | |||
| else | |||
| { | |||
| alert("開帳失敗:["+jdata["Result"]+"]"+jdata["W_TODAY"]+jdata["Message"]); | |||
| } | |||
| $("#invoice_open_date").val(""); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,84 @@ | |||
| <!-- ----- 電子發票補印(限當日)作業 ----- --> | |||
| <div data-items="invoice_reprint" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading">電子發票補印作業</div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div> | |||
| <label>統編 </label> | |||
| <label class="radio-inline"><input type="radio" name="invoice_reprint_company_no" value="<?=$company_no?>" checked />本場站</label> | |||
| <label class="radio-inline"><input type="radio" name="invoice_reprint_company_no" value="<?=$hq_company_no?>" />總公司</label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>發票號碼</label> | |||
| <input id="invoice_reprint_invoice_no" type="text" class="form-control text-uppercase" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>下方訊息</label> | |||
| <input id="invoice_reprint_message" type="text" class="form-control" /> | |||
| </div> | |||
| <div class="checkbox"> | |||
| <label><input id="invoice_reprint_force" type="checkbox" />印出[補印]字樣</label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <button type="button" class="btn btn-large btn-success pull-left" onclick="invoice_reprint();">補印</button> | |||
| </div> | |||
| </div><!-- end of col-lg-6 (nested) --> | |||
| </div><!-- end of row (nested) --> | |||
| </div><!-- end of panel-body --> | |||
| </div><!-- end of panel --> | |||
| </div><!-- end of col-lg-12 --> | |||
| </div><!-- data-items --> | |||
| <!-- ----- 電子發票補印作業(結束) ----- --> | |||
| <script> | |||
| // 補印電子發票 | |||
| function invoice_reprint() | |||
| { | |||
| var invoice_reprint_invoice_no = $("#invoice_reprint_invoice_no").val().toUpperCase(); | |||
| if (invoice_reprint_invoice_no == "") | |||
| { | |||
| alert("發票號碼欄位必填 !"); | |||
| return false; | |||
| } | |||
| if (!confirm("確認補印電子發票:"+invoice_reprint_invoice_no+" ?")) return false; | |||
| $.ajax | |||
| ({ | |||
| url:"http://localhost:60134/", | |||
| async:false, | |||
| timeout:1500, | |||
| type:"post", | |||
| dataType:"json", | |||
| data: | |||
| { | |||
| "cmd":"rePrintInvoice", | |||
| "company_no":$("input:radio:checked[name='invoice_reprint_company_no']").val(), | |||
| "vINVOICE_NO":invoice_reprint_invoice_no, | |||
| "vTAIL_MESSAGE":$("#invoice_reprint_message").val(), | |||
| "vFORCE_FLG":$("#invoice_reprint_force").prop("checked") ? "N": "Y" | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata["Result"] == "000") | |||
| { | |||
| alert("補印完成, 日期: "+jdata["W_TODAY"]); | |||
| } | |||
| else | |||
| { | |||
| alert("補印失敗:["+jdata["Result"]+"]"+jdata["W_TODAY"]+jdata["Message"]); | |||
| } | |||
| $("#invoice_reprint_invoice_no").val(""); | |||
| $("#invoice_reprint_message").val(""); | |||
| $("#invoice_reprint_force").prop("checked", false); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,59 @@ | |||
| <!-- ----- 電子發票下載(限當日)作業 ----- --> | |||
| <div data-items="invoice_rows" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading">電子發票下載作業</div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div> | |||
| <label>統編 </label> | |||
| <label class="radio-inline"><input type="radio" name="invoice_rows_company_no" value="<?=$company_no?>" checked />本場站</label> | |||
| <label class="radio-inline"><input type="radio" name="invoice_rows_company_no" value="<?=$hq_company_no?>" />總公司</label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <button type="button" class="btn btn-large btn-success pull-left" onclick="invoice_rows();">下載</button> | |||
| </div> | |||
| </div><!-- end of col-lg-6 (nested) --> | |||
| </div><!-- end of row (nested) --> | |||
| </div><!-- end of panel-body --> | |||
| </div><!-- end of panel --> | |||
| </div><!-- end of col-lg-12 --> | |||
| </div><!-- data-items --> | |||
| <!-- ----- 電子發票下載作業(結束) ----- --> | |||
| <script> | |||
| // 電子發票下載 | |||
| function invoice_rows() | |||
| { | |||
| if (!confirm("確定電子發票下載 ?")) return false; | |||
| $.ajax | |||
| ({ | |||
| url:"http://localhost:60134/", | |||
| async:false, | |||
| timeout:1500, | |||
| type:"post", | |||
| dataType:"json", | |||
| data: | |||
| { | |||
| "cmd":"getInvoice_Rows", | |||
| "company_no":$("input:radio:checked[name='invoice_rows_company_no']").val() | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata["Result"] == "000") | |||
| { | |||
| alert("下載完成 !"); | |||
| } | |||
| else | |||
| { | |||
| alert("下載失敗:["+jdata["Result"]+"]"+jdata["W_TODAY"]+jdata["Message"]); | |||
| } | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,82 @@ | |||
| <!-- ----- 電子發票清帳作業 ----- --> | |||
| <div data-items="check_point" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading">關帳(手動)</div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div class="form-group"> | |||
| <label style="font-size:16px;">本次關帳時間</label> | |||
| <input id="check_point_time" type="datetime" class="form-control" style="font-size:20px;"/> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label style="font-size:16px;">備註(選填)</label> | |||
| <input id="check_point_remarks" type="text" class="form-control" style="font-size:20px;" placeholder="補充說明" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <button type="button" class="btn btn-large btn-success pull-left" onclick="set_check_point();">關帳</button> | |||
| </div> | |||
| </div><!-- end of col-lg-6 (nested) --> | |||
| </div><!-- end of row (nested) --> | |||
| </div><!-- end of panel-body --> | |||
| </div><!-- end of panel --> | |||
| </div><!-- end of col-lg-12 --> | |||
| </div><!-- data-items --> | |||
| <!-- ----- 電子發票清帳作業(結束) ----- --> | |||
| <script> | |||
| $("#check_point_time").val(moment(new Date()).format("YYYY-MM-DD HH:mm:ss")); | |||
| $("#check_point_time").prop("readonly",true); | |||
| // 列印電子發票清帳 | |||
| function set_check_point() | |||
| { | |||
| var station_no = $("#station_select").val(); | |||
| var check_point_time = $("#check_point_time").val(); | |||
| var remarks = $("#check_point_remarks").val(); | |||
| if (!confirm("確認關帳時間:"+check_point_time+" ?")) return false; | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"set_check_point", | |||
| dataType:"text", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "check_point_time": check_point_time, | |||
| "remarks": remarks | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata == "ok") | |||
| { | |||
| alertify_msg("完成!"); | |||
| //show_item('check_point', 'check_point'); | |||
| show_item('check_point_report', 'check_point_report'); | |||
| $("#check_point_form").submit(); | |||
| } | |||
| else if(jdata == "not_synced") | |||
| { | |||
| alertify_sync(station_no); | |||
| } | |||
| else if(jdata == "error_amt") | |||
| { | |||
| alertify_msg("金額異常,請確認關帳時間"); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg("操作失敗 !"); | |||
| } | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,312 @@ | |||
| <?php /* ----- 關帳查詢 ----- */?> | |||
| <div data-items="check_point_report" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 關帳查詢 | |||
| <form id="check_point_form" role="form"> | |||
| <label class="input-inline" for="check_point_search_time_from">開始</label> | |||
| <input type="text" class="date" id="check_point_search_time_from" name="check_point_search_time_from"> | |||
| <span class="input-inline" > ~ </span> | |||
| <label class="input-inline" for="check_point_search_time_to">結束</label> | |||
| <input type="text" class="date" id="check_point_search_time_to" name="check_point_search_time_to"> | |||
| <label class="input-inline"><input type="submit" value="查詢" /></label> | |||
| </form> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:center;">編號</th> | |||
| <th style="text-align:center;">上次關帳時間</th> | |||
| <th style="text-align:center;">本次關帳時間</th> | |||
| <th style="text-align:center;">總金額(不含押金)</th> | |||
| <th style="text-align:center;">總押金</th> | |||
| <th style="text-align:center;">操作種類</th> | |||
| <th style="text-align:center;">功能</th> | |||
| <th style="text-align:center;">建立時間</th> | |||
| <th style="text-align:center;">備註</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="check_point_list" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| <div id="check_point_list_detail_box" class="col-lg-12" style="display:none;"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 關帳明細(<span id='check_point_list_detail_time_str_1'></span> 開始 ~ 至 <span id='check_point_list_detail_time_str_2'></span> 關帳,期間所有交易) | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <th style="text-align:center;">入帳日</th> | |||
| <th style="text-align:left;">入帳車號</th> | |||
| <th style="text-align:left;">目前車號</th> | |||
| <th style="text-align:center;">會員開始日</th> | |||
| <th style="text-align:center;">上期繳期</th> | |||
| <th style="text-align:center;">上期結束日</th> | |||
| <th style="text-align:center;">上期租金</th> | |||
| <th style="text-align:center;">本期繳期</th> | |||
| <th style="text-align:center;">本期開始日</th> | |||
| <th style="text-align:center;">本期結束日</th> | |||
| <th style="text-align:center;">本期租金</th> | |||
| <th style="text-align:center;">押金</th> | |||
| <th style="text-align:center;">審核狀態</th> | |||
| <th style="text-align:center;">有效期限</th> | |||
| <th style="text-align:center;">備註</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="check_point_list_detail" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 關帳查詢(結束) ----- */?> | |||
| <script> | |||
| var initMinDate = moment("00:00", "HH:mm").subtract(1, 'days'); | |||
| var initMaxDate = moment("23:59", "HH:mm"); | |||
| var searchTimeFromPicker = $( "#check_point_search_time_from" ); | |||
| var searchTimeToPicker = $( "#check_point_search_time_to" ); | |||
| // 日期 | |||
| /* DatePicker 設定start */ | |||
| searchTimeFromPicker.datetimepicker({ | |||
| dateFormat: 'yy-mm-dd', | |||
| maxDate: '0', | |||
| changeMonth: true, | |||
| numberOfMonths: 1, | |||
| timeFormat: "HH:mm", | |||
| addSliderAccess: true, | |||
| sliderAccessArgs: { touchonly: false }, | |||
| onClose: function( selectedDate ) { | |||
| searchTimeToPicker.datetimepicker( "option", "minDate", selectedDate ); | |||
| console.log("search_time_from: " + selectedDate); | |||
| } | |||
| }); | |||
| searchTimeFromPicker.datetimepicker('setDate', initMinDate.toDate()); | |||
| searchTimeToPicker.datetimepicker({ | |||
| dateFormat: 'yy-mm-dd', | |||
| maxDate: '0', | |||
| changeMonth: true, | |||
| numberOfMonths: 1, | |||
| timeFormat: "HH:mm", | |||
| addSliderAccess: true, | |||
| sliderAccessArgs: { touchonly: false }, | |||
| onClose: function( selectedDate ) { | |||
| searchTimeFromPicker.datetimepicker( "option", "maxDate", selectedDate ); | |||
| console.log("search_time_to: " + selectedDate); | |||
| } | |||
| }); | |||
| searchTimeToPicker.datetimepicker('setDate', initMaxDate.toDate()); | |||
| /* DatePicker 設定end */ | |||
| $("#check_point_form").submit(function(event) | |||
| { | |||
| event.preventDefault(); | |||
| var station_no = $("#station_select").val(); | |||
| var check_point_time_from = $( "#check_point_search_time_from" ).val(); | |||
| var check_point_time_to = $( "#check_point_search_time_to" ).val(); | |||
| $("#check_point_list").html(""); | |||
| $("#check_point_list_detail").html(""); | |||
| $("#check_point_list_detail_box").hide(); | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"check_point_query", | |||
| dataType:"json", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "check_point_time_from": check_point_time_from, | |||
| "check_point_time_to": check_point_time_to | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| var check_point_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| check_no = jdata[idx]['check_no']; | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", check_no, "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td id='check_point_data_", check_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-check_no='", jdata[idx]['check_no'], | |||
| "' data-check_time='", jdata[idx]['check_time'], | |||
| "' data-check_time_no='", jdata[idx]['check_time_no'], | |||
| "' data-check_time_last='", jdata[idx]['check_time_last'], | |||
| "' data-check_time_last_no='", jdata[idx]['check_time_last_no'], | |||
| "' data-check_type='", jdata[idx]['check_type'], | |||
| "' data-check_amt='", jdata[idx]['check_amt'], | |||
| "' data-check_deposit='", jdata[idx]['check_deposit'], | |||
| "' data-remarks='", jdata[idx]['remarks'], | |||
| "' style='text-align:center;'>", jdata[idx]['check_time_last'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_time'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_amt'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_deposit'], "</td>"]); | |||
| if(jdata[idx]['check_type'] == 1) | |||
| { | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>手動關帳</td>"]); | |||
| } | |||
| else | |||
| { | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>未知</td>"]); | |||
| } | |||
| check_point_list = check_point_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='check_point_detail(", check_no + ");'>明細</button></td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['create_time'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:left;'>", jdata[idx]['remarks'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["</tr>"]); | |||
| } | |||
| $("#check_point_list").append(check_point_list.join('')); | |||
| } | |||
| }); | |||
| }); | |||
| // 關帳查詢(明細) | |||
| function check_point_detail(check_no) | |||
| { | |||
| $("#check_point_list_detail").html(""); // -- 清除原內容 -- | |||
| var station_no = $("#check_point_data_"+check_no).data("station_no"); | |||
| var check_time = $("#check_point_data_"+check_no).data("check_time"); | |||
| var check_time_no = $("#check_point_data_"+check_no).data("check_time_no"); | |||
| var check_time_last = $("#check_point_data_"+check_no).data("check_time_last"); | |||
| var check_time_last_no = $("#check_point_data_"+check_no).data("check_time_last_no"); | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>check_point_detail_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: { | |||
| "station_no": station_no, | |||
| "check_time_no": check_time_no, | |||
| "check_time_last_no": check_time_last_no | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| $("#check_point_list_detail_box").hide(); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| $("#check_point_list_detail_time_str_1").text(check_time_last); | |||
| $("#check_point_list_detail_time_str_2").text(check_time); | |||
| $("#check_point_list_detail_box").show(); | |||
| var member_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| tx_no = jdata[idx]['tx_no']; | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", tx_no, "</td>"]); | |||
| member_list = member_list.concat(["<td id='acc_date_", tx_no, "' style='text-align:center;'>", jdata[idx]['acc_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='check_point_list_detail_data_", tx_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-tx_no='", jdata[idx]['tx_no'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-amt='", jdata[idx]['amt'], | |||
| "' data-amt1='", jdata[idx]['amt1'], | |||
| "' data-deposit='", jdata[idx]['deposit'], | |||
| "' data-start_date_last='", jdata[idx]['start_date_last'], | |||
| "' data-end_date='", jdata[idx]['end_date'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-fee_period='", jdata[idx]['fee_period'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| if(jdata[idx]['current_lpr']) | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>", jdata[idx]['current_lpr'], "</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>已刪除</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td id='sdate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_last_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period_last']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='deposit_", tx_no, "' style='text-align:center;'>", jdata[idx]['deposit'], "</td>"]); | |||
| if(jdata[idx]['tx_state'] == 4) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已退租</td>"]); | |||
| } | |||
| else if(jdata[idx]['tx_state'] == 44) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>交易取消</td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='member_tx_check(", tx_no + ");'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;'>已審核</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check(", tx_no + ");'>未通過</button></td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;' id='valid_time_", tx_no, "'>", jdata[idx]['valid_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:left;' id='remarks_", tx_no, "'>", jdata[idx]['remarks'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#check_point_list_detail").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,442 @@ | |||
| <?php /* ----- 交易退款總覽 ----- */?> | |||
| <div data-items="member_tx_refund_query" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 退租查詢 | |||
| <form id="member_tx_refund_form" role="form"> | |||
| <div class="form-group"> | |||
| <label class="select-inline" for="station_refund_select"> | |||
| <select class="form-control" id="station_refund_select"> | |||
| </select> | |||
| </label> | |||
| <label class="radio-inline"><input type="radio" name="q_item" value="lpr" checked />車號</label> | |||
| <label class="input-inline"> <input type="text" id="q_refund_str" placeholder="關鍵字" /></label> | |||
| <label class="input-inline"><input type="submit" value="查詢" /></label> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:center;">代號</th> | |||
| <th style="text-align:center;">車號</th> | |||
| <th style="text-align:center;">金額</th> | |||
| <th style="text-align:center;">押金</th> | |||
| <th style="text-align:center;">總金額 (金額 + 押金)</th> | |||
| <th style="text-align:center;">退租時間</th> | |||
| <th style="text-align:center;">退租發票</th> | |||
| <th style="text-align:center;">退租狀態</th> | |||
| <th style="text-align:center;">建立時間</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_tx_refund" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| <div id="member_tx_refund_list_detail_box" class="col-lg-12" style="display:none;"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 交易記錄(車號:<span id='member_tx_refund_list_detail_lpr'></span>,退租時間:<span id='member_tx_refund_list_detail_refund_time'></span>) | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <th style="text-align:center;">入帳日</th> | |||
| <th style="text-align:left;">車號</th> | |||
| <th style="text-align:center;">會員開始日</th> | |||
| <th style="text-align:center;">上期繳期</th> | |||
| <th style="text-align:center;">上期結束日</th> | |||
| <th style="text-align:center;">上期租金</th> | |||
| <th style="text-align:center;">本期繳期</th> | |||
| <th style="text-align:center;">本期開始日</th> | |||
| <th style="text-align:center;">本期結束日</th> | |||
| <th style="text-align:center;">本期租金</th> | |||
| <th style="text-align:center;">發票時間</th> | |||
| <th style="text-align:center;">買方統編</th> | |||
| <th style="text-align:center;">賣方統編</th> | |||
| <th style="text-align:center;">發票金額</th> | |||
| <th style="text-align:center;">發票字軌</th> | |||
| <th style="text-align:center;">發票號碼</th> | |||
| <th style="text-align:center;">發票種類</th> | |||
| <th style="text-align:center;">狀態</th> | |||
| <th style="text-align:center;">待辦金額</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_tx_refund_list_detail" style="font-size:16px;"></tbody> | |||
| </table> | |||
| </div><!-- ----- end of dataTable_wrapper ----- --> | |||
| </div><!-- ----- end of panel-body ----- --> | |||
| </div><!-- ----- end of panel panel-default ----- --> | |||
| </div><!-- ----- end of col-lg-12 ----- --> | |||
| </div> | |||
| <?php /* ----- 交易退款總覽(結束) ----- */?> | |||
| <script> | |||
| // 設定場站資訊 | |||
| for(station_no in st) | |||
| { | |||
| $(new Option(st[station_no],station_no)).appendTo('#station_refund_select'); // 會員退租場站編號 | |||
| } | |||
| // 退租查詢 | |||
| $("#member_tx_refund_form").submit(function(e) | |||
| { | |||
| e.preventDefault(); | |||
| if ($("#q_refund_str").val() == "") | |||
| { | |||
| alertify_log("請填寫查詢關鍵字.."); | |||
| return false; | |||
| } | |||
| $("#member_tx_refund").html(""); // clean all | |||
| $("#member_tx_refund_list_detail").html(""); | |||
| $("#member_tx_refund_list_detail_box").hide(); | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>member_tx_refund_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data:{"station_no":$("#station_refund_select").val(), "q_item":$("input:radio:checked[name=q_item]").val(), "q_str":$("#q_refund_str").val()}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| var member_list = ['<tr>']; | |||
| for(idx in jdata) | |||
| { | |||
| member_refund_id = jdata[idx]['member_refund_id']; | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['member_refund_id'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='member_tx_refund_query_lpr_", member_refund_id, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-refund_amt='", jdata[idx]['refund_amt'], | |||
| "' data-refund_deposit='", jdata[idx]['refund_deposit'], | |||
| "' data-refund_tot_amt='", jdata[idx]['refund_tot_amt'], | |||
| "' data-refund_time='", jdata[idx]['refund_time'], | |||
| "' data-refund_state='", jdata[idx]['refund_state'], | |||
| "' data-create_time='", jdata[idx]['create_time'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| if(jdata[idx]['refund_amt'] >= 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['refund_amt'], " 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>需補繳 ", -jdata[idx]['refund_amt'], " 元</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['refund_deposit'], " 元</td>"]); | |||
| if(jdata[idx]['refund_tot_amt'] >= 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>共退還 ", jdata[idx]['refund_tot_amt'], " 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>總共需補繳 ", -jdata[idx]['refund_tot_amt'], " 元</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['refund_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='show_member_refund_detail(", member_refund_id ,");'>瀏覽</button></td>"]); | |||
| if(jdata[idx]['refund_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:center;'>待確認</td>"]); | |||
| } | |||
| else if(jdata[idx]['refund_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>待補開</td>"]); | |||
| } | |||
| else if(jdata[idx]['refund_state'] == 2) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>待折讓</td>"]); | |||
| } | |||
| else if(jdata[idx]['refund_state'] == 100) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已完成</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>未定義</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['create_time'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#member_tx_refund").append(member_list.join('')); | |||
| } | |||
| }); | |||
| }); | |||
| // 退租記錄 | |||
| function show_member_refund_detail(member_refund_id) | |||
| { | |||
| var refund_lpr = $("#member_tx_refund_query_lpr_"+member_refund_id).data("lpr"); | |||
| var refund_time = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_time"); | |||
| $("#member_tx_refund_list_detail_lpr").text(refund_lpr); | |||
| $("#member_tx_refund_list_detail_refund_time").text(refund_time); | |||
| show_member_tx_refund_bill(0, '', '', '4', 0, member_refund_id); | |||
| } | |||
| // 完成退租交易 | |||
| /* | |||
| function complete_member_refund(member_refund_id) | |||
| { | |||
| var refund_state = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_state"); | |||
| var refund_lpr = $("#member_tx_refund_query_lpr_"+member_refund_id).data("lpr"); | |||
| $("#member_tx_refund_list_detail_lpr").text(refund_lpr); | |||
| if(refund_state == 0) | |||
| { | |||
| // 待確認流程 | |||
| alertify_log("待確認流程"); | |||
| } | |||
| else if(refund_state == 1) | |||
| { | |||
| show_member_tx_refund_bill(0, '', '1', '4'); // 待補開 (已退租) | |||
| } | |||
| else if(refund_state == 2) | |||
| { | |||
| show_member_tx_refund_bill(0, '', '2', '4'); // 待折讓 (已退租, 已開立發票) | |||
| } | |||
| else | |||
| { | |||
| // 未定義 | |||
| alertify_log("未定義"); | |||
| } | |||
| return false; | |||
| } | |||
| */ | |||
| // 發票開立記錄 | |||
| function show_member_tx_refund_bill(tx_no=0, verify_state_str='', invoice_state_str='', tx_state_str='', tx_bill_no =0, member_refund_id=0) | |||
| { | |||
| $("#member_tx_refund_list_detail").html(""); // -- 清除原內容 -- | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"member_tx_bill_query", | |||
| type:"post", | |||
| dataType:"json", | |||
| data:{"station_no":station_no, "tx_no":tx_no, "verify_state_str":verify_state_str, | |||
| "invoice_state_str":invoice_state_str, "tx_state_str":tx_state_str, | |||
| "tx_bill_no":tx_bill_no, "member_refund_id":member_refund_id}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| $("#member_tx_refund_list_detail_box").hide(); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| $("#member_tx_refund_list_detail_box").show(); | |||
| var member_list = [["<tr>"]]; | |||
| for(idx in jdata) | |||
| { | |||
| //console.log(jdata.length + " : " + idx + " , " + jdata[idx]['invoice_amt'] + " : " + jdata[idx]['remain_amt']); | |||
| tx_no = jdata[idx]['tx_no']; | |||
| member_list = member_list.concat(["<td style='text-align:left;'>", jdata[idx]['tx_no'], "_", jdata[idx]['tx_bill_no'], "</td>"]); | |||
| //member_list = member_list.concat(["<td style='text-align:left;'>", st[jdata[idx]['station_no']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='acc_date_", tx_no, "' style='text-align:center;'>", jdata[idx]['acc_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='tx_bill_lpr_", jdata[idx]['tx_bill_no'], | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-tx_bill_no='", jdata[idx]['tx_bill_no'], | |||
| "' data-tx_no='", jdata[idx]['tx_no'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-invoice_amt='", jdata[idx]['invoice_amt'], | |||
| "' data-remain_amt='", jdata[idx]['remain_amt'], | |||
| "' data-period_3_amt='", jdata[idx]['period_3_amt'], | |||
| "' data-amt='", jdata[idx]['amt'], | |||
| "' data-amt1='", jdata[idx]['amt1'], | |||
| "' data-deposit='", jdata[idx]['deposit'], | |||
| "' data-start_date_last='", jdata[idx]['start_date_last'], | |||
| "' data-end_date='", jdata[idx]['end_date'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-fee_period='", jdata[idx]['fee_period'], | |||
| "' data-refund_amt='", jdata[idx]['refund_amt'], | |||
| "' data-invoice_state='", jdata[idx]['invoice_state'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_last_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period_last']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date'], "</td>"]); | |||
| if(jdata[idx]['invoice_state'] == 1) | |||
| { | |||
| // 待補開 | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>指定退租日<br/>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>補繳總金額<br/>", jdata[idx]['amt'], " 元</td>"]); | |||
| } | |||
| else if(jdata[idx]['invoice_state'] == 2) | |||
| { | |||
| // 待折讓 | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>指定退租日<br/>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>折讓總金額<br/>", jdata[idx]['amt'], " 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt'], " 元</td>"]); | |||
| } | |||
| // 是否已有發票 | |||
| if(jdata[idx]['invoice_no'] > 0) | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_time_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='member_company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['member_company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_track_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_track'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_no'], "</td>"]); | |||
| if(jdata[idx]['invoice_type'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'>電子發票</td>"]); | |||
| } | |||
| else if(jdata[idx]['invoice_type'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'>手開發票</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'>異常</td>"]); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_time_", tx_no, "' style='text-align:center;'>未開立</td>"]); | |||
| member_list = member_list.concat(["<td id='member_company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['member_company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_track_", tx_no, "' style='text-align:center;'></td>"]); | |||
| if(jdata[idx]['tx_state'] == 4 && jdata[idx]['invoice_state'] == 0) | |||
| { | |||
| // 已退租, 原先交易將不再開放開立 | |||
| member_list = member_list.concat(["<td id='invoice_no_", tx_no, "' style='text-align:center;'></td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_no_", tx_no, "' style='text-align:center;'><button class='btn btn-default' onclick='print_tx_invoice(", jdata[idx]['tx_bill_no'] ,");'>列印發票</button></td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'><button class='btn btn-default' onclick='hand_tx_invoice(", jdata[idx]['tx_bill_no'] ,");'>手開發票</button></td>"]); | |||
| } | |||
| } | |||
| //member_list = member_list.concat(["<td style='color:blue;text-align:center;' id='remarks_", jdata[idx]['tx_bill_no'], "'>", jdata[idx]['remarks'], "</td>"]); | |||
| if(jdata[idx]['tx_state'] == 4) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已退租</td>"]); | |||
| } | |||
| else if(jdata[idx]['tx_state'] == 44) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>交易取消</td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='member_tx_check(", tx_no + ");'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;'>已審核</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check(", tx_no + ");'>未通過</button></td>"]); | |||
| } | |||
| // 剩餘開立金額 | |||
| if(jdata[idx]['invoice_state'] == 1) | |||
| { | |||
| // 待開立 | |||
| if(jdata[idx]['remain_amt'] > 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='next_refund_bill(", jdata[idx]['tx_bill_no'] ,");'>尚餘 ", jdata[idx]['remain_amt'] ," 元</button></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>無</td>"]); | |||
| } | |||
| } | |||
| else if(jdata[idx]['invoice_state'] == 2) | |||
| { | |||
| // 待折讓 | |||
| if(jdata[idx]['refund_amt'] > 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='refund_invoice_allowance(", jdata[idx]['tx_bill_no'] ,");'>待折讓 ", jdata[idx]['refund_amt'] ," 元</button></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>異常</td>"]); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| // 待開立 | |||
| if(jdata[idx]['remain_amt'] > 0) | |||
| { | |||
| if(jdata[idx]['tx_state'] == 4 && jdata[idx]['invoice_state'] == 0) | |||
| { | |||
| // 已退租, 原先交易將不再開放開立 | |||
| member_list = member_list.concat(["<td style='text-align:center;'>尚餘 ", jdata[idx]['remain_amt'] ," 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='next_tx_bill(", jdata[idx]['tx_bill_no'] ,");'>尚餘 ", jdata[idx]['remain_amt'] ," 元</button></td>"]); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>無</td>"]); | |||
| } | |||
| } | |||
| member_list = member_list.concat(["</tr>"]);; | |||
| } | |||
| $("#member_tx_refund_list_detail").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,82 @@ | |||
| <!-- ----- 電子發票清帳作業 ----- --> | |||
| <div data-items="check_point" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading">關帳(手動)</div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div class="form-group"> | |||
| <label style="font-size:16px;">本次關帳時間</label> | |||
| <input id="check_point_time" type="datetime" class="form-control" style="font-size:20px;"/> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label style="font-size:16px;">備註(選填)</label> | |||
| <input id="check_point_remarks" type="text" class="form-control" style="font-size:20px;" placeholder="補充說明" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <button type="button" class="btn btn-large btn-success pull-left" onclick="set_check_point();">關帳</button> | |||
| </div> | |||
| </div><!-- end of col-lg-6 (nested) --> | |||
| </div><!-- end of row (nested) --> | |||
| </div><!-- end of panel-body --> | |||
| </div><!-- end of panel --> | |||
| </div><!-- end of col-lg-12 --> | |||
| </div><!-- data-items --> | |||
| <!-- ----- 電子發票清帳作業(結束) ----- --> | |||
| <script> | |||
| $("#check_point_time").val(moment(new Date()).format("YYYY-MM-DD HH:mm:ss")); | |||
| $("#check_point_time").prop("readonly",true); | |||
| // 列印電子發票清帳 | |||
| function set_check_point() | |||
| { | |||
| var station_no = $("#station_select").val(); | |||
| var check_point_time = $("#check_point_time").val(); | |||
| var remarks = $("#check_point_remarks").val(); | |||
| if (!confirm("確認關帳時間:"+check_point_time+" ?")) return false; | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"set_check_point", | |||
| dataType:"text", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "check_point_time": check_point_time, | |||
| "remarks": remarks | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata == "ok") | |||
| { | |||
| alertify_msg("完成!"); | |||
| //show_item('check_point', 'check_point'); | |||
| show_item('check_point_report', 'check_point_report'); | |||
| $("#check_point_form").submit(); | |||
| } | |||
| else if(jdata == "not_synced") | |||
| { | |||
| alertify_sync(station_no); | |||
| } | |||
| else if(jdata == "error_amt") | |||
| { | |||
| alertify_msg("金額異常,請確認關帳時間"); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg("操作失敗 !"); | |||
| } | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,316 @@ | |||
| <?php /* ----- 關帳查詢 ----- */?> | |||
| <div data-items="check_point_report" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 關帳查詢 | |||
| <form id="check_point_form" role="form"> | |||
| <label class="input-inline" for="check_point_search_time_from">開始</label> | |||
| <input type="text" class="date" id="check_point_search_time_from" name="check_point_search_time_from"> | |||
| <span class="input-inline" > ~ </span> | |||
| <label class="input-inline" for="check_point_search_time_to">結束</label> | |||
| <input type="text" class="date" id="check_point_search_time_to" name="check_point_search_time_to"> | |||
| <label class="input-inline"><input type="submit" value="查詢" /></label> | |||
| </form> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:center;">編號</th> | |||
| <th style="text-align:center;">上次關帳時間</th> | |||
| <th style="text-align:center;">本次關帳時間</th> | |||
| <th style="text-align:center;">上次最後交易代號</th> | |||
| <th style="text-align:center;">本次最後交易代號</th> | |||
| <th style="text-align:center;">總金額(不含押金)</th> | |||
| <th style="text-align:center;">總押金</th> | |||
| <th style="text-align:center;">操作種類</th> | |||
| <th style="text-align:center;">功能</th> | |||
| <th style="text-align:center;">建立時間</th> | |||
| <th style="text-align:center;">備註</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="check_point_list" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| <div id="check_point_list_detail_box" class="col-lg-12" style="display:none;"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 關帳明細(<span id='check_point_list_detail_time_str_1'></span> 開始 ~ 至 <span id='check_point_list_detail_time_str_2'></span> 關帳,期間所有交易) | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <th style="text-align:center;">入帳日</th> | |||
| <th style="text-align:left;">入帳車號</th> | |||
| <th style="text-align:left;">目前車號</th> | |||
| <th style="text-align:center;">會員開始日</th> | |||
| <th style="text-align:center;">上期繳期</th> | |||
| <th style="text-align:center;">上期結束日</th> | |||
| <th style="text-align:center;">上期租金</th> | |||
| <th style="text-align:center;">本期繳期</th> | |||
| <th style="text-align:center;">本期開始日</th> | |||
| <th style="text-align:center;">本期結束日</th> | |||
| <th style="text-align:center;">本期租金</th> | |||
| <th style="text-align:center;">押金</th> | |||
| <th style="text-align:center;">審核狀態</th> | |||
| <th style="text-align:center;">有效期限</th> | |||
| <th style="text-align:center;">備註</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="check_point_list_detail" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 關帳查詢(結束) ----- */?> | |||
| <script> | |||
| var initMinDate = moment("00:00", "HH:mm").subtract(1, 'days'); | |||
| var initMaxDate = moment("23:59", "HH:mm"); | |||
| var searchTimeFromPicker = $( "#check_point_search_time_from" ); | |||
| var searchTimeToPicker = $( "#check_point_search_time_to" ); | |||
| // 日期 | |||
| /* DatePicker 設定start */ | |||
| searchTimeFromPicker.datetimepicker({ | |||
| dateFormat: 'yy-mm-dd', | |||
| maxDate: '0', | |||
| changeMonth: true, | |||
| numberOfMonths: 1, | |||
| timeFormat: "HH:mm", | |||
| addSliderAccess: true, | |||
| sliderAccessArgs: { touchonly: false }, | |||
| onClose: function( selectedDate ) { | |||
| searchTimeToPicker.datetimepicker( "option", "minDate", selectedDate ); | |||
| console.log("search_time_from: " + selectedDate); | |||
| } | |||
| }); | |||
| searchTimeFromPicker.datetimepicker('setDate', initMinDate.toDate()); | |||
| searchTimeToPicker.datetimepicker({ | |||
| dateFormat: 'yy-mm-dd', | |||
| maxDate: '0', | |||
| changeMonth: true, | |||
| numberOfMonths: 1, | |||
| timeFormat: "HH:mm", | |||
| addSliderAccess: true, | |||
| sliderAccessArgs: { touchonly: false }, | |||
| onClose: function( selectedDate ) { | |||
| searchTimeFromPicker.datetimepicker( "option", "maxDate", selectedDate ); | |||
| console.log("search_time_to: " + selectedDate); | |||
| } | |||
| }); | |||
| searchTimeToPicker.datetimepicker('setDate', initMaxDate.toDate()); | |||
| /* DatePicker 設定end */ | |||
| $("#check_point_form").submit(function(event) | |||
| { | |||
| event.preventDefault(); | |||
| var station_no = $("#station_select").val(); | |||
| var check_point_time_from = $( "#check_point_search_time_from" ).val(); | |||
| var check_point_time_to = $( "#check_point_search_time_to" ).val(); | |||
| $("#check_point_list").html(""); | |||
| $("#check_point_list_detail").html(""); | |||
| $("#check_point_list_detail_box").hide(); | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"check_point_query", | |||
| dataType:"json", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "check_point_time_from": check_point_time_from, | |||
| "check_point_time_to": check_point_time_to | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| var check_point_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| check_no = jdata[idx]['check_no']; | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", check_no, "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td id='check_point_data_", check_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-check_no='", jdata[idx]['check_no'], | |||
| "' data-check_time='", jdata[idx]['check_time'], | |||
| "' data-check_time_no='", jdata[idx]['check_time_no'], | |||
| "' data-check_time_last='", jdata[idx]['check_time_last'], | |||
| "' data-check_time_last_no='", jdata[idx]['check_time_last_no'], | |||
| "' data-check_type='", jdata[idx]['check_type'], | |||
| "' data-check_amt='", jdata[idx]['check_amt'], | |||
| "' data-check_deposit='", jdata[idx]['check_deposit'], | |||
| "' data-remarks='", jdata[idx]['remarks'], | |||
| "' style='text-align:center;'>", jdata[idx]['check_time_last'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_time'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_time_last_no'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_time_no'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_amt'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_deposit'], "</td>"]); | |||
| if(jdata[idx]['check_type'] == 1) | |||
| { | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>手動關帳</td>"]); | |||
| } | |||
| else | |||
| { | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>未知</td>"]); | |||
| } | |||
| check_point_list = check_point_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='check_point_detail(", check_no + ");'>明細</button></td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['create_time'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:left;'>", jdata[idx]['remarks'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["</tr>"]); | |||
| } | |||
| $("#check_point_list").append(check_point_list.join('')); | |||
| } | |||
| }); | |||
| }); | |||
| // 關帳查詢(明細) | |||
| function check_point_detail(check_no) | |||
| { | |||
| $("#check_point_list_detail").html(""); // -- 清除原內容 -- | |||
| var station_no = $("#check_point_data_"+check_no).data("station_no"); | |||
| var check_time = $("#check_point_data_"+check_no).data("check_time"); | |||
| var check_time_no = $("#check_point_data_"+check_no).data("check_time_no"); | |||
| var check_time_last = $("#check_point_data_"+check_no).data("check_time_last"); | |||
| var check_time_last_no = $("#check_point_data_"+check_no).data("check_time_last_no"); | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>check_point_detail_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: { | |||
| "station_no": station_no, | |||
| "check_time_no": check_time_no, | |||
| "check_time_last_no": check_time_last_no | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| $("#check_point_list_detail_box").hide(); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| $("#check_point_list_detail_time_str_1").text(check_time_last); | |||
| $("#check_point_list_detail_time_str_2").text(check_time); | |||
| $("#check_point_list_detail_box").show(); | |||
| var member_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| tx_no = jdata[idx]['tx_no']; | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", tx_no, "</td>"]); | |||
| member_list = member_list.concat(["<td id='acc_date_", tx_no, "' style='text-align:center;'>", jdata[idx]['acc_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='check_point_list_detail_data_", tx_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-tx_no='", jdata[idx]['tx_no'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-amt='", jdata[idx]['amt'], | |||
| "' data-amt1='", jdata[idx]['amt1'], | |||
| "' data-deposit='", jdata[idx]['deposit'], | |||
| "' data-start_date_last='", jdata[idx]['start_date_last'], | |||
| "' data-end_date='", jdata[idx]['end_date'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-fee_period='", jdata[idx]['fee_period'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| if(jdata[idx]['current_lpr']) | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>", jdata[idx]['current_lpr'], "</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>已刪除</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td id='sdate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_last_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period_last']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='deposit_", tx_no, "' style='text-align:center;'>", jdata[idx]['deposit'], "</td>"]); | |||
| if(jdata[idx]['tx_state'] == 4) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已退租</td>"]); | |||
| } | |||
| else if(jdata[idx]['tx_state'] == 44) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>交易取消</td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='member_tx_check(", tx_no + ");'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;'>已審核</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check(", tx_no + ");'>未通過</button></td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;' id='valid_time_", tx_no, "'>", jdata[idx]['valid_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:left;' id='remarks_", tx_no, "'>", jdata[idx]['remarks'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#check_point_list_detail").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,442 @@ | |||
| <?php /* ----- 交易退款總覽 ----- */?> | |||
| <div data-items="member_tx_refund_query" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 退租查詢 | |||
| <form id="member_tx_refund_form" role="form"> | |||
| <div class="form-group"> | |||
| <label class="select-inline" for="station_refund_select"> | |||
| <select class="form-control" id="station_refund_select"> | |||
| </select> | |||
| </label> | |||
| <label class="radio-inline"><input type="radio" name="q_item" value="lpr" checked />車號</label> | |||
| <label class="input-inline"> <input type="text" id="q_refund_str" placeholder="關鍵字" /></label> | |||
| <label class="input-inline"><input type="submit" value="查詢" /></label> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:center;">代號</th> | |||
| <th style="text-align:center;">車號</th> | |||
| <th style="text-align:center;">金額</th> | |||
| <th style="text-align:center;">押金</th> | |||
| <th style="text-align:center;">總金額 (金額 + 押金)</th> | |||
| <th style="text-align:center;">租約結束時間</th> | |||
| <th style="text-align:center;">退租發票</th> | |||
| <th style="text-align:center;">退租狀態</th> | |||
| <th style="text-align:center;">建立時間</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_tx_refund" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| <div id="member_tx_refund_list_detail_box" class="col-lg-12" style="display:none;"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 交易記錄(車號:<span id='member_tx_refund_list_detail_lpr'></span>,退租時間:<span id='member_tx_refund_list_detail_refund_time'></span>) | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <th style="text-align:center;">入帳日</th> | |||
| <th style="text-align:left;">車號</th> | |||
| <th style="text-align:center;">會員開始日</th> | |||
| <th style="text-align:center;">上期繳期</th> | |||
| <th style="text-align:center;">上期結束日</th> | |||
| <th style="text-align:center;">上期租金</th> | |||
| <th style="text-align:center;">本期繳期</th> | |||
| <th style="text-align:center;">本期開始日</th> | |||
| <th style="text-align:center;">本期結束日</th> | |||
| <th style="text-align:center;">本期租金</th> | |||
| <th style="text-align:center;">發票時間</th> | |||
| <th style="text-align:center;">買方統編</th> | |||
| <th style="text-align:center;">賣方統編</th> | |||
| <th style="text-align:center;">發票金額</th> | |||
| <th style="text-align:center;">發票字軌</th> | |||
| <th style="text-align:center;">發票號碼</th> | |||
| <th style="text-align:center;">發票種類</th> | |||
| <th style="text-align:center;">狀態</th> | |||
| <th style="text-align:center;">待辦金額</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_tx_refund_list_detail" style="font-size:16px;"></tbody> | |||
| </table> | |||
| </div><!-- ----- end of dataTable_wrapper ----- --> | |||
| </div><!-- ----- end of panel-body ----- --> | |||
| </div><!-- ----- end of panel panel-default ----- --> | |||
| </div><!-- ----- end of col-lg-12 ----- --> | |||
| </div> | |||
| <?php /* ----- 交易退款總覽(結束) ----- */?> | |||
| <script> | |||
| // 設定場站資訊 | |||
| for(station_no in st) | |||
| { | |||
| $(new Option(st[station_no],station_no)).appendTo('#station_refund_select'); // 會員退租場站編號 | |||
| } | |||
| // 退租查詢 | |||
| $("#member_tx_refund_form").submit(function(e) | |||
| { | |||
| e.preventDefault(); | |||
| if ($("#q_refund_str").val() == "") | |||
| { | |||
| alertify_log("請填寫查詢關鍵字.."); | |||
| return false; | |||
| } | |||
| $("#member_tx_refund").html(""); // clean all | |||
| $("#member_tx_refund_list_detail").html(""); | |||
| $("#member_tx_refund_list_detail_box").hide(); | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>member_tx_refund_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data:{"station_no":$("#station_refund_select").val(), "q_item":$("input:radio:checked[name=q_item]").val(), "q_str":$("#q_refund_str").val()}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| var member_list = ['<tr>']; | |||
| for(idx in jdata) | |||
| { | |||
| member_refund_id = jdata[idx]['member_refund_id']; | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['member_refund_id'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='member_tx_refund_query_lpr_", member_refund_id, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-refund_amt='", jdata[idx]['refund_amt'], | |||
| "' data-refund_deposit='", jdata[idx]['refund_deposit'], | |||
| "' data-refund_tot_amt='", jdata[idx]['refund_tot_amt'], | |||
| "' data-refund_time='", jdata[idx]['refund_time'], | |||
| "' data-refund_state='", jdata[idx]['refund_state'], | |||
| "' data-create_time='", jdata[idx]['create_time'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| if(jdata[idx]['refund_amt'] >= 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['refund_amt'], " 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>需補繳 ", -jdata[idx]['refund_amt'], " 元</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['refund_deposit'], " 元</td>"]); | |||
| if(jdata[idx]['refund_tot_amt'] >= 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>共退還 ", jdata[idx]['refund_tot_amt'], " 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>總共需補繳 ", -jdata[idx]['refund_tot_amt'], " 元</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['refund_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='show_member_refund_detail(", member_refund_id ,");'>瀏覽</button></td>"]); | |||
| if(jdata[idx]['refund_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:center;'>待確認</td>"]); | |||
| } | |||
| else if(jdata[idx]['refund_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>待補開</td>"]); | |||
| } | |||
| else if(jdata[idx]['refund_state'] == 2) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>待折讓</td>"]); | |||
| } | |||
| else if(jdata[idx]['refund_state'] == 100) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已完成</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>未定義</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['create_time'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#member_tx_refund").append(member_list.join('')); | |||
| } | |||
| }); | |||
| }); | |||
| // 退租記錄 | |||
| function show_member_refund_detail(member_refund_id) | |||
| { | |||
| var refund_lpr = $("#member_tx_refund_query_lpr_"+member_refund_id).data("lpr"); | |||
| var refund_time = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_time"); | |||
| $("#member_tx_refund_list_detail_lpr").text(refund_lpr); | |||
| $("#member_tx_refund_list_detail_refund_time").text(refund_time); | |||
| show_member_tx_refund_bill(0, '', '', '4', 0, member_refund_id); | |||
| } | |||
| // 完成退租交易 | |||
| /* | |||
| function complete_member_refund(member_refund_id) | |||
| { | |||
| var refund_state = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_state"); | |||
| var refund_lpr = $("#member_tx_refund_query_lpr_"+member_refund_id).data("lpr"); | |||
| $("#member_tx_refund_list_detail_lpr").text(refund_lpr); | |||
| if(refund_state == 0) | |||
| { | |||
| // 待確認流程 | |||
| alertify_log("待確認流程"); | |||
| } | |||
| else if(refund_state == 1) | |||
| { | |||
| show_member_tx_refund_bill(0, '', '1', '4'); // 待補開 (已退租) | |||
| } | |||
| else if(refund_state == 2) | |||
| { | |||
| show_member_tx_refund_bill(0, '', '2', '4'); // 待折讓 (已退租, 已開立發票) | |||
| } | |||
| else | |||
| { | |||
| // 未定義 | |||
| alertify_log("未定義"); | |||
| } | |||
| return false; | |||
| } | |||
| */ | |||
| // 發票開立記錄 | |||
| function show_member_tx_refund_bill(tx_no=0, verify_state_str='', invoice_state_str='', tx_state_str='', tx_bill_no =0, member_refund_id=0) | |||
| { | |||
| $("#member_tx_refund_list_detail").html(""); // -- 清除原內容 -- | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"member_tx_bill_query", | |||
| type:"post", | |||
| dataType:"json", | |||
| data:{"station_no":station_no, "tx_no":tx_no, "verify_state_str":verify_state_str, | |||
| "invoice_state_str":invoice_state_str, "tx_state_str":tx_state_str, | |||
| "tx_bill_no":tx_bill_no, "member_refund_id":member_refund_id}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| $("#member_tx_refund_list_detail_box").hide(); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| $("#member_tx_refund_list_detail_box").show(); | |||
| var member_list = [["<tr>"]]; | |||
| for(idx in jdata) | |||
| { | |||
| //console.log(jdata.length + " : " + idx + " , " + jdata[idx]['invoice_amt'] + " : " + jdata[idx]['remain_amt']); | |||
| tx_no = jdata[idx]['tx_no']; | |||
| member_list = member_list.concat(["<td style='text-align:left;'>", jdata[idx]['tx_no'], "_", jdata[idx]['tx_bill_no'], "</td>"]); | |||
| //member_list = member_list.concat(["<td style='text-align:left;'>", st[jdata[idx]['station_no']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='acc_date_", tx_no, "' style='text-align:center;'>", jdata[idx]['acc_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='tx_bill_lpr_", jdata[idx]['tx_bill_no'], | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-tx_bill_no='", jdata[idx]['tx_bill_no'], | |||
| "' data-tx_no='", jdata[idx]['tx_no'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-invoice_amt='", jdata[idx]['invoice_amt'], | |||
| "' data-remain_amt='", jdata[idx]['remain_amt'], | |||
| "' data-period_3_amt='", jdata[idx]['period_3_amt'], | |||
| "' data-amt='", jdata[idx]['amt'], | |||
| "' data-amt1='", jdata[idx]['amt1'], | |||
| "' data-deposit='", jdata[idx]['deposit'], | |||
| "' data-start_date_last='", jdata[idx]['start_date_last'], | |||
| "' data-end_date='", jdata[idx]['end_date'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-fee_period='", jdata[idx]['fee_period'], | |||
| "' data-refund_amt='", jdata[idx]['refund_amt'], | |||
| "' data-invoice_state='", jdata[idx]['invoice_state'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_last_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period_last']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date'], "</td>"]); | |||
| if(jdata[idx]['invoice_state'] == 1) | |||
| { | |||
| // 待補開 | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>指定退租日<br/>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>補繳總金額<br/>", jdata[idx]['amt'], " 元</td>"]); | |||
| } | |||
| else if(jdata[idx]['invoice_state'] == 2) | |||
| { | |||
| // 待折讓 | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>指定退租日<br/>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>折讓總金額<br/>", jdata[idx]['amt'], " 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt'], " 元</td>"]); | |||
| } | |||
| // 是否已有發票 | |||
| if(jdata[idx]['invoice_no'] > 0) | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_time_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='member_company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['member_company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_track_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_track'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_no'], "</td>"]); | |||
| if(jdata[idx]['invoice_type'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'>電子發票</td>"]); | |||
| } | |||
| else if(jdata[idx]['invoice_type'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'>手開發票</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'>異常</td>"]); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_time_", tx_no, "' style='text-align:center;'>未開立</td>"]); | |||
| member_list = member_list.concat(["<td id='member_company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['member_company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_track_", tx_no, "' style='text-align:center;'></td>"]); | |||
| if(jdata[idx]['tx_state'] == 4 && jdata[idx]['invoice_state'] == 0) | |||
| { | |||
| // 已退租, 原先交易將不再開放開立 | |||
| member_list = member_list.concat(["<td id='invoice_no_", tx_no, "' style='text-align:center;'></td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_no_", tx_no, "' style='text-align:center;'><button class='btn btn-default' onclick='print_tx_invoice(", jdata[idx]['tx_bill_no'] ,");'>列印發票</button></td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'><button class='btn btn-default' onclick='hand_tx_invoice(", jdata[idx]['tx_bill_no'] ,");'>手開發票</button></td>"]); | |||
| } | |||
| } | |||
| //member_list = member_list.concat(["<td style='color:blue;text-align:center;' id='remarks_", jdata[idx]['tx_bill_no'], "'>", jdata[idx]['remarks'], "</td>"]); | |||
| if(jdata[idx]['tx_state'] == 4) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已退租</td>"]); | |||
| } | |||
| else if(jdata[idx]['tx_state'] == 44) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>交易取消</td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='member_tx_check(", tx_no + ");'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;'>已審核</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check(", tx_no + ");'>未通過</button></td>"]); | |||
| } | |||
| // 剩餘開立金額 | |||
| if(jdata[idx]['invoice_state'] == 1) | |||
| { | |||
| // 待開立 | |||
| if(jdata[idx]['remain_amt'] > 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='next_refund_bill(", jdata[idx]['tx_bill_no'] ,");'>尚餘 ", jdata[idx]['remain_amt'] ," 元</button></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>無</td>"]); | |||
| } | |||
| } | |||
| else if(jdata[idx]['invoice_state'] == 2) | |||
| { | |||
| // 待折讓 | |||
| if(jdata[idx]['refund_amt'] > 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='refund_invoice_allowance(", jdata[idx]['tx_bill_no'] ,");'>待折讓 ", jdata[idx]['refund_amt'] ," 元</button></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>異常</td>"]); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| // 待開立 | |||
| if(jdata[idx]['remain_amt'] > 0) | |||
| { | |||
| if(jdata[idx]['tx_state'] == 4 && jdata[idx]['invoice_state'] == 0) | |||
| { | |||
| // 已退租, 原先交易將不再開放開立 | |||
| member_list = member_list.concat(["<td style='text-align:center;'>尚餘 ", jdata[idx]['remain_amt'] ," 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='next_tx_bill(", jdata[idx]['tx_bill_no'] ,");'>尚餘 ", jdata[idx]['remain_amt'] ," 元</button></td>"]); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>無</td>"]); | |||
| } | |||
| } | |||
| member_list = member_list.concat(["</tr>"]);; | |||
| } | |||
| $("#member_tx_refund_list_detail").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,149 @@ | |||
| <?php /* ----- 費率清單 ----- */?> | |||
| <div data-items="price_plan_query_all" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 費率設定 <button class='btn btn-default' style='font-size:16px;' onclick='sync_price_plan();'>更新</button> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">場站</th> | |||
| <th style="text-align:left;">收費類型</th> | |||
| <th style="text-align:left;" width="35%">費率設定</th> | |||
| <th style="text-align:left;">註記事項</th> | |||
| <th style="text-align:center;">啟用時間</th> | |||
| <th style="text-align:center;">有效期限</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="price_plan_list" style="font-size:20px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 費率清單(結束) ----- */?> | |||
| <script> | |||
| reload_price_plan_query_all(); | |||
| // 載入 | |||
| function reload_price_plan_query_all() | |||
| { | |||
| $("#price_plan_list").html("");<?php /* 清除原內容 */ ?> | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>price_plan_query_all", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: {}, | |||
| success: function(jdata) | |||
| { | |||
| var member_list = []; | |||
| for(idx in jdata) | |||
| { | |||
| txid = jdata[idx]['txid']; | |||
| member_list = member_list.concat(["<tr><td style='text-align:left;'>", st[jdata[idx]['station_no']], "</td>"]); | |||
| var price_plan_content = []; | |||
| if(jdata[idx]['tx_type'] == 0) | |||
| { | |||
| price_plan_name = "臨停費率"; | |||
| //jdata[idx]['price_plan']; | |||
| } | |||
| else | |||
| { | |||
| price_plan_name = "月租費率"; | |||
| target = JSON.parse(jdata[idx]['price_plan']); | |||
| Object.keys(target) | |||
| .sort( | |||
| function(a,b){ | |||
| attr_a = a.split('_'); | |||
| attr_b = b.split('_'); | |||
| if(parseInt(attr_a[0], 10) > parseInt(attr_b[0], 10)) return 1; | |||
| if(parseInt(attr_a[0], 10) < parseInt(attr_b[0], 10)) return -1; | |||
| if(parseInt(attr_a[1], 10) > parseInt(attr_b[1], 10)) return 1; | |||
| if(parseInt(attr_a[1], 10) < parseInt(attr_b[1], 10)) return -1; | |||
| return 0; | |||
| } | |||
| ) | |||
| .forEach(function(k, i) | |||
| { | |||
| //console.log(k, target[k]); | |||
| period_idx = k.split("_")[0]; | |||
| mem_idx = k.split("_")[1]; | |||
| if(k == '0_0') | |||
| { | |||
| price_plan_content = price_plan_content.concat(['*月租押金:', target[k], ' 元']); | |||
| } | |||
| else if(mem_idx == '0') | |||
| { | |||
| idx_period_name = (period_name[period_idx] == undefined) ? '繳期 ' + period_idx : period_name[period_idx]; | |||
| price_plan_content = price_plan_content.concat(['<br/> * [ ', idx_period_name, ' : ', target[k], ' 天 ] ']); | |||
| } | |||
| else | |||
| { | |||
| idx_mem_attr = (mem_attr[mem_idx] == undefined) ? '?? (' + mem_idx + ')': mem_attr[mem_idx]; | |||
| price_plan_content = price_plan_content.concat([' > ', idx_mem_attr, ":", target[k], ' 元 ']); | |||
| } | |||
| price_plan_content = price_plan_content.concat(['<br/>']); | |||
| }); | |||
| } | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;' id='tx_type_", txid, "'>", price_plan_name ,"</td>"]); | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:left;' id='price_plan_", txid, "'>", price_plan_content.join('') , "</td>"]); | |||
| member_list = member_list.concat(["<td style='color:green;text-align:left;' id='remarks_", txid, "'>", jdata[idx]['remarks'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='start_time_", txid, "' style='text-align:center;'>", jdata[idx]['start_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='valid_time_", txid, "' style='text-align:center;'>", jdata[idx]['valid_time'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#price_plan_list").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| // 同步場站費率 | |||
| function sync_price_plan() | |||
| { | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL + "sync_price_plan", | |||
| dataType:"text", | |||
| type:"post", | |||
| data: {}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| alertify_msg(xhr.responseText); | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata == "ok") | |||
| { | |||
| alertify_msg("同步成功 ! "); | |||
| reload_price_plan_query_all(); | |||
| } | |||
| else if (jdata == "sync_fail") | |||
| { | |||
| alertify_msg("同步失敗"); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg("同步失敗 !"); | |||
| } | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,209 @@ | |||
| <?php /* ----- 臨停未結清單 ----- */?> | |||
| <div data-items="cario_temp_not_finished_query_all" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 臨停未結清單 (2017-02-01 00:00:00 進場 ~ 至 <span id='altob_current_time_str'></span>) | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <th style="text-align:left;">車牌號碼</th> | |||
| <th style="text-align:center;">進場時間</th> | |||
| <th style="text-align:center;">最後付款時間</th> | |||
| <th style="text-align:center;">限時離場時間</th> | |||
| <th style="text-align:center;">功能</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="cario_temp_not_finished_query_all" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 臨停未結清單(結束) ----- */?> | |||
| <!-- ----- 臨停未結確認小框 ----- --> | |||
| <div class="modal fade" id="cario_temp_check_dialog"> | |||
| <div class="modal-dialog modal-sm"> | |||
| <div class="modal-content"> | |||
| <div class="modal-header"><h3>臨停未結查核作業</h3></div> | |||
| <div class="modal-body"> | |||
| <form id="cario_temp_check_form" class="center-block"> | |||
| <div class="main"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover" style="font-size:12px;"> | |||
| <tbody id="cario_temp_check_list"> | |||
| <tr> | |||
| <td style="text-align:right;">進場車號</td> | |||
| <td style="text-align:left;" id="cario_temp_check_lpr"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;">進場時間</td> | |||
| <td style="text-align:left;" id="cario_temp_check_in_time"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;">限時離場時間</td> | |||
| <td style="text-align:left;" id="cario_temp_check_out_before_time"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;">最後付款時間</td> | |||
| <td style="text-align:left;" id="cario_temp_check_pay_time"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;vertical-align:middle">臨停未結說明</td> | |||
| <td style="text-align:left;"><input type="text" id="cario_temp_check_remarks" class="form-control" style="width:150px !important;" /></td> | |||
| </tr> | |||
| </tbody> | |||
| </table> | |||
| <button type="button" class="btn btn-large btn-success pull-left" onclick="do_cario_temp_check_ok();">確認完成</button> | |||
| | |||
| <button type="button" class="btn btn-large btn-cancel" onclick="$('#cario_temp_check_dialog').modal('hide');">取消</button> | |||
| </div><!-- ----- end of dataTable_wrapper ----- --> | |||
| </div><!-- ----- end of main ----- --> | |||
| </form> | |||
| </div><!-- end of modal-body --> | |||
| </div><!-- end of modal-content --> | |||
| </div><!-- end of modal-dialog --> | |||
| </div><!-- end of modal show --> | |||
| <!-- ----- 臨停未結確認小框 (結束) ----- --> | |||
| <script> | |||
| // 載入 | |||
| function reload_cario_temp_not_finished_query_all() | |||
| { | |||
| $("#altob_current_time_str").text(moment(new Date()).format("YYYY-MM-DD HH:mm:ss")); | |||
| $("#cario_temp_not_finished_query_all").html(""); // -- 清除原內容 -- | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>cario_temp_not_finished_query_all", | |||
| type: "post", | |||
| dataType:"json", | |||
| data:{"station_no":$("#station_select").val(), "q_item":'in_time', "q_str":'2017-02-01'}, | |||
| success:function(jdata) | |||
| { | |||
| var cario_temp_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| cario_no = jdata[idx]['cario_no']; | |||
| cario_temp_list = cario_temp_list.concat(["<td style='text-align:left;'>", cario_no, "</td>"]); | |||
| cario_temp_list = cario_temp_list.concat(["<td id='cario_temp_not_finished_query_all_lpr_", cario_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-cario_no='", jdata[idx]['cario_no'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-in_time='", jdata[idx]['in_time'], | |||
| "' data-out_before_time='", jdata[idx]['out_before_time'], | |||
| "' data-pay_time='", jdata[idx]['pay_time'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| cario_temp_list = cario_temp_list.concat(["<td style='text-align:center;'>", jdata[idx]['in_time'], "</td>"]); | |||
| cario_temp_list = cario_temp_list.concat(["<td style='text-align:center;'>", jdata[idx]['pay_time'], "</td>"]); | |||
| cario_temp_list = cario_temp_list.concat(["<td style='text-align:center;'>", jdata[idx]['out_before_time'], "</td>"]); | |||
| cario_temp_list = cario_temp_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='cario_temp_check(", cario_no + ");'>人工審核</button></td>"]); | |||
| cario_temp_list = cario_temp_list.concat(["</tr>"]); | |||
| } | |||
| $("#cario_temp_not_finished_query_all").append(cario_temp_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| // 臨停未結確認 | |||
| function cario_temp_check(cario_no) | |||
| { | |||
| var station_no = $("#cario_temp_not_finished_query_all_lpr_"+cario_no).data("station_no"); | |||
| var lpr = $("#cario_temp_not_finished_query_all_lpr_"+cario_no).data("lpr"); | |||
| var in_time = $("#cario_temp_not_finished_query_all_lpr_"+cario_no).data("in_time"); | |||
| var pay_time = $("#cario_temp_not_finished_query_all_lpr_"+cario_no).data("pay_time"); | |||
| var out_before_time = $("#cario_temp_not_finished_query_all_lpr_"+cario_no).data("out_before_time"); | |||
| // 發票資訊 | |||
| xvars["cario_temp_check"] = Array(); | |||
| xvars["cario_temp_check"]["cario_no"] = cario_no; | |||
| xvars["cario_temp_check"]["station_no"] = station_no; | |||
| xvars["cario_temp_check"]["in_time"] = in_time; | |||
| xvars["cario_temp_check"]["pay_time"] = (pay_time == "") ? '未付款': pay_time; | |||
| xvars["cario_temp_check"]["out_before_time"] = out_before_time; | |||
| $("#cario_temp_check_lpr").text("").text(lpr); | |||
| $("#cario_temp_check_in_time").text("").text(in_time); | |||
| $("#cario_temp_check_pay_time").text("").text(pay_time); | |||
| $("#cario_temp_check_out_before_time").text("").text(out_before_time); | |||
| $("#cario_temp_check_remarks").text(""); | |||
| $("#cario_temp_check_dialog").modal({backdrop:false,keyboard:false}); | |||
| } | |||
| // 臨停未結確認完成 | |||
| function do_cario_temp_check_ok() | |||
| { | |||
| if (!confirm("確認審核通過 ?")) return false; | |||
| var station_no = xvars["cario_temp_check"]["station_no"]; | |||
| var cario_no = xvars["cario_temp_check"]["cario_no"]; | |||
| var cario_temp_check_remarks = $("#cario_temp_check_remarks").val(); | |||
| if (cario_temp_check_remarks == "") | |||
| { | |||
| alertify_msg("請說明原因,謝謝"); | |||
| return false; | |||
| } | |||
| //alertify_msg("施工中..zzz"); | |||
| //return false; | |||
| // 新增審核資訊 | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"cario_temp_confirmed", | |||
| dataType:"text", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "cario_no": cario_no, | |||
| "remarks": cario_temp_check_remarks | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata == "ok") | |||
| { | |||
| alertify_msg("確認完成!"); | |||
| reload_cario_temp_not_finished_query_all(); | |||
| } | |||
| else if(jdata == "not_synced") | |||
| { | |||
| alertify_sync(station_no); | |||
| } | |||
| else if (jdata == "check_fail") | |||
| { | |||
| alertify_msg("操作失敗,已取消"); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg("操作失敗 !"); | |||
| } | |||
| } | |||
| }); | |||
| delete xvars["cario_temp_check"]; | |||
| $('#cario_temp_check_dialog').modal('hide'); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,88 @@ | |||
| <!-- ----- 電子發票清帳作業 ----- --> | |||
| <div data-items="check_point" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading">關帳(手動)</div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div class="form-group"> | |||
| <label style="font-size:16px;">本次關帳時間</label> | |||
| <input id="check_point_time" type="datetime" class="form-control" style="font-size:20px;"/> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label style="font-size:16px;">備註(選填)</label> | |||
| <input id="check_point_remarks" type="text" class="form-control" style="font-size:20px;" placeholder="補充說明" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <button type="button" class="btn btn-large btn-success pull-left" onclick="set_check_point();">關帳</button> | |||
| </div> | |||
| </div><!-- end of col-lg-6 (nested) --> | |||
| </div><!-- end of row (nested) --> | |||
| </div><!-- end of panel-body --> | |||
| </div><!-- end of panel --> | |||
| </div><!-- end of col-lg-12 --> | |||
| </div><!-- data-items --> | |||
| <!-- ----- 電子發票清帳作業(結束) ----- --> | |||
| <script> | |||
| // 載入 | |||
| function reload_check_point() | |||
| { | |||
| $("#check_point_time").val(moment(new Date()).format("YYYY-MM-DD HH:mm:ss")); | |||
| $("#check_point_time").prop("readonly",true); | |||
| $("#check_point_remarks").val(""); | |||
| } | |||
| // 列印電子發票清帳 | |||
| function set_check_point() | |||
| { | |||
| var station_no = $("#station_select").val(); | |||
| var check_point_time = $("#check_point_time").val(); | |||
| var remarks = $("#check_point_remarks").val(); | |||
| if (!confirm("確認關帳時間:"+check_point_time+" ?")) return false; | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"set_check_point", | |||
| dataType:"text", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "check_point_time": check_point_time, | |||
| "remarks": remarks | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata == "ok") | |||
| { | |||
| alertify_msg("完成!"); | |||
| //show_item('check_point', 'check_point'); | |||
| show_item('check_point_report', 'check_point_report'); | |||
| $("#check_point_form").submit(); | |||
| } | |||
| else if(jdata == "not_synced") | |||
| { | |||
| alertify_sync(station_no); | |||
| } | |||
| else if(jdata == "error_amt") | |||
| { | |||
| alertify_msg("金額異常,請確認關帳時間"); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg("操作失敗 !"); | |||
| } | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,316 @@ | |||
| <?php /* ----- 關帳查詢 ----- */?> | |||
| <div data-items="check_point_report" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 關帳查詢 | |||
| <form id="check_point_form" role="form"> | |||
| <label class="input-inline" for="check_point_search_time_from">開始</label> | |||
| <input type="text" class="date" id="check_point_search_time_from" name="check_point_search_time_from"> | |||
| <span class="input-inline" > ~ </span> | |||
| <label class="input-inline" for="check_point_search_time_to">結束</label> | |||
| <input type="text" class="date" id="check_point_search_time_to" name="check_point_search_time_to"> | |||
| <label class="input-inline"><input type="submit" value="查詢" /></label> | |||
| </form> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:center;">編號</th> | |||
| <th style="text-align:center;">上次關帳時間</th> | |||
| <th style="text-align:center;">本次關帳時間</th> | |||
| <th style="text-align:center;">上次最後交易代號</th> | |||
| <th style="text-align:center;">本次最後交易代號</th> | |||
| <th style="text-align:center;">總金額(不含押金)</th> | |||
| <th style="text-align:center;">總押金</th> | |||
| <th style="text-align:center;">操作種類</th> | |||
| <th style="text-align:center;">功能</th> | |||
| <th style="text-align:center;">建立時間</th> | |||
| <th style="text-align:center;">備註</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="check_point_list" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| <div id="check_point_list_detail_box" class="col-lg-12" style="display:none;"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 關帳明細(<span id='check_point_list_detail_time_str_1'></span> 開始 ~ 至 <span id='check_point_list_detail_time_str_2'></span> 關帳,期間所有交易) | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <th style="text-align:center;">入帳日</th> | |||
| <th style="text-align:left;">入帳車號</th> | |||
| <th style="text-align:left;">目前車號</th> | |||
| <th style="text-align:center;">會員開始日</th> | |||
| <th style="text-align:center;">上期繳期</th> | |||
| <th style="text-align:center;">上期結束日</th> | |||
| <th style="text-align:center;">上期租金</th> | |||
| <th style="text-align:center;">本期繳期</th> | |||
| <th style="text-align:center;">本期開始日</th> | |||
| <th style="text-align:center;">本期結束日</th> | |||
| <th style="text-align:center;">本期租金</th> | |||
| <th style="text-align:center;">押金</th> | |||
| <th style="text-align:center;">審核狀態</th> | |||
| <th style="text-align:center;">有效期限</th> | |||
| <th style="text-align:center;">備註</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="check_point_list_detail" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 關帳查詢(結束) ----- */?> | |||
| <script> | |||
| var initMinDate = moment("00:00", "HH:mm").subtract(5, 'days'); | |||
| var initMaxDate = moment("23:59", "HH:mm"); | |||
| var searchTimeFromPicker = $( "#check_point_search_time_from" ); | |||
| var searchTimeToPicker = $( "#check_point_search_time_to" ); | |||
| // 日期 | |||
| /* DatePicker 設定start */ | |||
| searchTimeFromPicker.datetimepicker({ | |||
| dateFormat: 'yy-mm-dd', | |||
| maxDate: '0', | |||
| changeMonth: true, | |||
| numberOfMonths: 1, | |||
| timeFormat: "HH:mm", | |||
| addSliderAccess: true, | |||
| sliderAccessArgs: { touchonly: false }, | |||
| onClose: function( selectedDate ) { | |||
| searchTimeToPicker.datetimepicker( "option", "minDate", selectedDate ); | |||
| console.log("search_time_from: " + selectedDate); | |||
| } | |||
| }); | |||
| searchTimeFromPicker.datetimepicker('setDate', initMinDate.toDate()); | |||
| searchTimeToPicker.datetimepicker({ | |||
| dateFormat: 'yy-mm-dd', | |||
| maxDate: '0', | |||
| changeMonth: true, | |||
| numberOfMonths: 1, | |||
| timeFormat: "HH:mm", | |||
| addSliderAccess: true, | |||
| sliderAccessArgs: { touchonly: false }, | |||
| onClose: function( selectedDate ) { | |||
| searchTimeFromPicker.datetimepicker( "option", "maxDate", selectedDate ); | |||
| console.log("search_time_to: " + selectedDate); | |||
| } | |||
| }); | |||
| searchTimeToPicker.datetimepicker('setDate', initMaxDate.toDate()); | |||
| /* DatePicker 設定end */ | |||
| $("#check_point_form").submit(function(event) | |||
| { | |||
| event.preventDefault(); | |||
| var station_no = $("#station_select").val(); | |||
| var check_point_time_from = $( "#check_point_search_time_from" ).val(); | |||
| var check_point_time_to = $( "#check_point_search_time_to" ).val(); | |||
| $("#check_point_list").html(""); | |||
| $("#check_point_list_detail").html(""); | |||
| $("#check_point_list_detail_box").hide(); | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"check_point_query", | |||
| dataType:"json", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "check_point_time_from": check_point_time_from, | |||
| "check_point_time_to": check_point_time_to | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| var check_point_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| check_no = jdata[idx]['check_no']; | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", check_no, "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td id='check_point_data_", check_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-check_no='", jdata[idx]['check_no'], | |||
| "' data-check_time='", jdata[idx]['check_time'], | |||
| "' data-check_time_no='", jdata[idx]['check_time_no'], | |||
| "' data-check_time_last='", jdata[idx]['check_time_last'], | |||
| "' data-check_time_last_no='", jdata[idx]['check_time_last_no'], | |||
| "' data-check_type='", jdata[idx]['check_type'], | |||
| "' data-check_amt='", jdata[idx]['check_amt'], | |||
| "' data-check_deposit='", jdata[idx]['check_deposit'], | |||
| "' data-remarks='", jdata[idx]['remarks'], | |||
| "' style='text-align:center;'>", jdata[idx]['check_time_last'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_time'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_time_last_no'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_time_no'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_amt'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_deposit'], "</td>"]); | |||
| if(jdata[idx]['check_type'] == 1) | |||
| { | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>手動關帳</td>"]); | |||
| } | |||
| else | |||
| { | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>未知</td>"]); | |||
| } | |||
| check_point_list = check_point_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='check_point_detail(", check_no + ");'>明細</button></td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['create_time'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:left;'>", jdata[idx]['remarks'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["</tr>"]); | |||
| } | |||
| $("#check_point_list").append(check_point_list.join('')); | |||
| } | |||
| }); | |||
| }); | |||
| // 關帳查詢(明細) | |||
| function check_point_detail(check_no) | |||
| { | |||
| $("#check_point_list_detail").html(""); // -- 清除原內容 -- | |||
| var station_no = $("#check_point_data_"+check_no).data("station_no"); | |||
| var check_time = $("#check_point_data_"+check_no).data("check_time"); | |||
| var check_time_no = $("#check_point_data_"+check_no).data("check_time_no"); | |||
| var check_time_last = $("#check_point_data_"+check_no).data("check_time_last"); | |||
| var check_time_last_no = $("#check_point_data_"+check_no).data("check_time_last_no"); | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>check_point_detail_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: { | |||
| "station_no": station_no, | |||
| "check_time_no": check_time_no, | |||
| "check_time_last_no": check_time_last_no | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| $("#check_point_list_detail_box").hide(); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| $("#check_point_list_detail_time_str_1").text(check_time_last); | |||
| $("#check_point_list_detail_time_str_2").text(check_time); | |||
| $("#check_point_list_detail_box").show(); | |||
| var member_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| tx_no = jdata[idx]['tx_no']; | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", tx_no, "</td>"]); | |||
| member_list = member_list.concat(["<td id='acc_date_", tx_no, "' style='text-align:center;'>", jdata[idx]['acc_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='check_point_list_detail_data_", tx_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-tx_no='", jdata[idx]['tx_no'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-amt='", jdata[idx]['amt'], | |||
| "' data-amt1='", jdata[idx]['amt1'], | |||
| "' data-deposit='", jdata[idx]['deposit'], | |||
| "' data-start_date_last='", jdata[idx]['start_date_last'], | |||
| "' data-end_date='", jdata[idx]['end_date'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-fee_period='", jdata[idx]['fee_period'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| if(jdata[idx]['current_lpr']) | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>", jdata[idx]['current_lpr'], "</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>已刪除</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td id='sdate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_last_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period_last']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='deposit_", tx_no, "' style='text-align:center;'>", jdata[idx]['deposit'], "</td>"]); | |||
| if(jdata[idx]['tx_state'] == 4) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已退租</td>"]); | |||
| } | |||
| else if(jdata[idx]['tx_state'] == 44) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>交易取消</td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='member_tx_check(", tx_no + ");'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;'>已審核</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check(", tx_no + ");'>未通過</button></td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;' id='valid_time_", tx_no, "'>", jdata[idx]['valid_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:left;' id='remarks_", tx_no, "'>", jdata[idx]['remarks'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#check_point_list_detail").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,419 @@ | |||
| <!-- ----- 會員加入填寫資料 ----- --> | |||
| <div data-items="member_add" class="row" style="display:none;"><!-- 會員加入填寫資料 --> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div id="member_data_type" class="panel-heading">新增會員資料</div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <!--form id="member_add" role="form" method="post" data-src="action::APP_URL::member_add"--> | |||
| <form id="member_add" role="form" method="post" data-src="/admins_station.html/member_add"> | |||
| <div class="form-group"> | |||
| <label>*場站</label> | |||
| <select class="form-control" id="station_no_modify" name="station_no"> | |||
| </select> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*車牌號碼</label> | |||
| <input id="ma_lpr" name="lpr" class="form-control" placeholder="限英數字碼" style="text-transform:uppercase" /> | |||
| <input id="ma_old_lpr" name="old_lpr" type="hidden" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>eTag</label> | |||
| <input id="ma_etag" name="etag" class="form-control" placeholder="限英數字碼" style="text-transform:uppercase"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*不足月開始日期(開始日)</label> | |||
| <input id="ma_demonth_start_date" type="datetime" name="demonth_start_date" class="form-control" onchange="calculate_rents_amt();"/> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*不足月結束日期</label> | |||
| <input id="ma_demonth_end_date" type="datetime" name="demonth_end_date" class="form-control" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*足月開始日期</label> | |||
| <input id="ma_start_date" type="datetime" name="start_date" class="form-control" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*足月結束日期(到期日)</label> | |||
| <input id="ma_end_date" type="datetime" name="end_date" class="form-control" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label class="select-inline"> | |||
| <button type="button" class="btn btn-default btn-xl btn-primary pull-left" onclick="member_park_time();">*進出場時段</button> | |||
| </label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label class="select-inline">*首期繳期 | |||
| <select class="form-control input-sm" id="fee_period1" name="fee_period1" onClick="calculate_rents_amt();"></select> | |||
| </label> | |||
| <label class="select-inline">*首期租金 (依使用天數拆分) | |||
| <input id="ma_amt1" name="amt1" class="form-control" value="0" onblur="re_amt();"> | |||
| </label> | |||
| <label class="select-inline" id="amt1_max_view"> | |||
| 說明: | |||
| 每日租金( <span id="amt1_max">0</span> 元 | |||
| / <span id="amt1_days_total">0</span> 天) | |||
| * 實際天數 <span id="amt1_days">0</span> 天 | |||
| </label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label class="select-inline">*例行繳期 | |||
| <select class="form-control input-sm" id="fee_period" name="fee_period" onClick="calculate_rents_amt();"></select> | |||
| </label> | |||
| <label class="select-inline">*例行租金 (依使用月數拆分) | |||
| <input id="ma_amt" name="amt" class="form-control" value="0" onblur="re_amt();"> | |||
| </label> | |||
| <!-- 第一版, 按日拆 | |||
| label class="select-inline" id="amt2_max_view"> | |||
| *說明: | |||
| 每日租金( <span id="amt2_max">0</span> 元 | |||
| / <span id="amt2_days_total">0</span> 天) | |||
| * 實際天數 <span id="amt2_days">0</span> 天 | |||
| </label--> | |||
| <label class="select-inline" id="amt2_max_view"> | |||
| 說明: | |||
| 每月租金( <span id="amt2_max">0</span> 元 | |||
| / <span id="amt2_months_total">0</span> 個月) | |||
| * 實際月數 <span id="amt2_months">0</span> 個月 | |||
| </label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label class="select-inline">*會員身份 | |||
| <select class="form-control input-sm" id="member_attr" name="member_attr" onClick="calculate_rents_amt();"></select> | |||
| </label> | |||
| <label class="select-inline">*押金(不列入發票金額) | |||
| <input id="ma_deposit" name="deposit" class="form-control" value="0" onblur="re_amt();"> | |||
| </label> | |||
| <label class="select-inline" id="amt_accrued_view"> | |||
| 應計金額 (原價):<span id="amt_accrued">0</span> | |||
| </label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label class="select-inline" style="color:blue;font-size:18px;" id="amt_tot_view"> | |||
| 租金:<span id="amt_tot">0</span> | |||
| </label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>合約號碼</label> | |||
| <input id="ma_contract_no" name="contract_no" class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*姓名/公司名稱</label> | |||
| <input id="ma_member_name" name="member_name" class="form-control" style="font-size:48px;height:56px;"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*手機</label> | |||
| <input id="ma_mobile_no" name='mobile_no' class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>身份證號</label> | |||
| <input id="ma_member_id" name="member_id" class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>會員統一編號</label> | |||
| <input id="ma_member_company_no" name="member_company_no" class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>電話(宅)</label> | |||
| <input id="ma_tel_h" name='tel_h' class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>電話(公)</label> | |||
| <input id="ma_tel_o" name='tel_o' class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>地址</label> | |||
| <input id="ma_addr" name='addr' class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <button type="submit" class="btn btn-large btn-success pull-left">存檔</button> | |||
| | |||
| <!--button type="reset" class="btn btn-large btn-cancel">重填</button--> | |||
| <input id="ma_member_no" type="hidden" name="member_no" value="0" /> | |||
| <input id="ma_company_no" type="hidden" name="company_no" /> | |||
| <input id="ma_park_time" type="hidden" name="park_time" /> | |||
| <input id="ma_amt_tot" type="hidden" name="amt_tot" /> | |||
| <input id="ma_amt_accrued" type="hidden" name="amt_accrued" /> | |||
| <input id="ma_demonth_start_date_done" type="hidden" name="demonth_start_date_done"/> | |||
| <input id="ma_demonth_end_date_done" type="hidden" name="demonth_end_date_done"/> | |||
| <input id="ma_start_date_done" type="hidden" name="start_date_done"/> | |||
| <input id="ma_end_date_done" type="hidden" name="end_date_done"/> | |||
| <!--input id="ma_fee_period1_done" type="hidden" name="fee_period1_done"/> | |||
| <input id="ma_fee_period_done" type="hidden" name="fee_period_done"/> | |||
| <input id="ma_member_attr_done" type="hidden" name="member_attr_done"/--> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| <!-- /.col-lg-6 (nested) --> | |||
| </div> | |||
| <!-- /.row (nested) --> | |||
| </div> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- ----- 會員加入填寫資料(結束) ----- --> | |||
| <script> | |||
| // 設定場站資訊 | |||
| for(station_no in st) | |||
| { | |||
| $(new Option(st[station_no],station_no)).appendTo('#station_no_modify'); // 會員修改場站編號 | |||
| } | |||
| // 會員身份類別 | |||
| for(idx in mem_attr) | |||
| { | |||
| $(new Option(mem_attr[idx],idx)).appendTo('#member_attr'); | |||
| } | |||
| // 繳期表(首期) | |||
| for(idx in period_name) | |||
| { | |||
| $(new Option(period_name[idx],idx)).appendTo('#fee_period1'); | |||
| } | |||
| // 繳期表(例行) | |||
| for(idx in period_name) | |||
| { | |||
| $(new Option(period_name[idx],idx)).appendTo('#fee_period'); | |||
| } | |||
| // 設定時段表 | |||
| str = ""; | |||
| for(pt_id in pt) | |||
| { | |||
| str += "<tr>"; | |||
| str += "<td style='text-align:center;'><input type='checkbox' id='pt_id_"+pt_id+"' class='pt_id_checkbox' value='"+pt_id+"' /></td>"; | |||
| str += "<td style='text-align:center;'>"+pt_id+"</td>"; | |||
| str += "<td style='text-align:left;'>"+pt[pt_id]['remarks']+"</td>"; | |||
| str += "</tr>"; | |||
| } | |||
| $("#pt_list").html(str); | |||
| $("#ma_demonth_start_date").datetimepicker({language:"zh-TW",autoclose:true,minView:2,format:"yyyy-mm-dd"}); | |||
| $("#ma_demonth_end_date").datetimepicker({language:"zh-TW",autoclose:true,minView:2,format:"yyyy-mm-dd"}); | |||
| $("#ma_start_date").datetimepicker({language:"zh-TW",autoclose:true,minView:2,format:"yyyy-mm-dd"}); | |||
| $("#ma_end_date").datetimepicker({language:"zh-TW",autoclose:true,minView:2,format:"yyyy-mm-dd"}); | |||
| $("#stop_rents_end_date").datetimepicker({language:"zh-TW",autoclose:true,minView:2,format:"yyyy-mm-dd"}); | |||
| // 會員新增修改 | |||
| $("#member_add").submit(function(event) | |||
| { | |||
| event.preventDefault(); | |||
| // 停車時段 | |||
| $("#ma_park_time").val($('input:checkbox:checked.pt_id_checkbox').map(function(){ return this.value; }).get().join(",")); | |||
| if ($("#ma_member_no").val() == "0") | |||
| { | |||
| $("#ma_old_lpr").val($("#ma_lpr").val()); | |||
| // 新增:檢查必填欄位 | |||
| if ($("#ma_lpr").val() == "" || | |||
| $("#ma_start_date").val() == "" || | |||
| $("#ma_end_date").val() == "" || | |||
| $("#ma_member_name").val() == "" || | |||
| $("#ma_mobile_no").val() == "" || | |||
| $("#ma_park_time").val() == "" | |||
| ) | |||
| { | |||
| alertify_msg("必填欄位不可空白"); | |||
| return false; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| // 修改:檢查必填欄位 | |||
| if ($("#ma_lpr").val() == "" || | |||
| //$("#ma_start_date").val() == "" || | |||
| $("#ma_end_date").val() == "" || | |||
| $("#ma_member_name").val() == "" || | |||
| $("#ma_mobile_no").val() == "" || | |||
| $("#ma_park_time").val() == "" | |||
| ) | |||
| { | |||
| alertify_msg("必填欄位不可空白"); | |||
| return false; | |||
| } | |||
| } | |||
| $("#ma_amt_tot").val($("#amt_tot").text()); | |||
| $("#ma_amt_accrued").val($("#amt_accrued").text()); | |||
| if($("#ma_member_company_no").val() == "") $("#ma_member_company_no").val(0); | |||
| // 禁止直接輸入,補值 | |||
| $("#ma_demonth_end_date_done").val($("#ma_demonth_end_date").val()); | |||
| $("#ma_start_date_done").val($("#ma_start_date").val()); | |||
| $("#ma_end_date_done").val($("#ma_end_date").val()); | |||
| $.ajax | |||
| ({ | |||
| url: APP_URL+"member_add", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: $(this).serialize(), | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| alertify_msg(xhr.responseText); | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success: function(jdata) | |||
| { | |||
| if(jdata == 'update_error') | |||
| { | |||
| alertify_msg("更新失敗, 請稍候再試"); | |||
| } | |||
| else if(jdata == 'trans_error') | |||
| { | |||
| alertify_msg("操作失敗, 請稍候再試"); | |||
| } | |||
| else if (jdata["member_no"] != "0") | |||
| { | |||
| if(jdata["action_code"] == "A") | |||
| { | |||
| // 新增會員資料, 印發票 | |||
| xvars["rents"] = Array(); | |||
| xvars["rents"]["tx_no"] = jdata["tx_no"]; | |||
| xvars["rents"]["station_no"] = station_no; | |||
| xvars["rents"]["member_no"] = jdata["member_no"]; | |||
| xvars["rents"]["member_company_no"] = $("#ma_member_company_no").val(); | |||
| xvars["rents"]["company_no"] = company_no; | |||
| xvars["rents"]["fee_period"] = $("#fee_period").val(); | |||
| xvars["rents"]["amt"] = parseInt($("#ma_amt").val()); | |||
| xvars["rents"]["amt1"] = parseInt($("#ma_amt1").val()); | |||
| xvars["rents"]["invoice_amt"] = jdata["invoice_amt"]; | |||
| xvars["rents"]["remain_amt"] = jdata["remain_amt"]; | |||
| xvars["rents"]["period_3_amt"] = jdata["period_3_amt"]; | |||
| $("#first_rents_name").text($("#ma_member_name").val()+" ("+ $("#ma_lpr").val() +")"); | |||
| $("#first_rents_station_name").text(st[xvars["rents"]["station_no"]]); | |||
| $("#first_rents_start_date").text($("#ma_demonth_start_date").val()); // 上期開始日 | |||
| $("#first_rents_end_date").text($("#ma_end_date").val()); // 本期結束日 | |||
| $("#first_rents_deposit").text($("#ma_deposit").val()); | |||
| $("#first_rents_period").text(period_name[xvars["rents"]["fee_period"]]); | |||
| $("#first_rents_amt").text(xvars["rents"]["amt"]); | |||
| $("#first_rents_amt1").text(xvars["rents"]["amt1"]); | |||
| $("#first_rents_invoice_amt").text(xvars["rents"]["invoice_amt"]); | |||
| $("#first_rents_remain_desc").html(get_invoice_desc(xvars["rents"]["amt"], xvars["rents"]["amt1"], xvars["rents"]["invoice_amt"], xvars["rents"]["remain_amt"], xvars["rents"]["period_3_amt"])); // 發票說明 | |||
| $("#first_rents_company_no").val(xvars["rents"]["company_no"]); // 賣方統編 | |||
| if(xvars["rents"]["member_company_no"] == 0 || xvars["rents"]["member_company_no"] == '') | |||
| { | |||
| $("#first_rents_member_company_no").val(""); | |||
| } | |||
| else | |||
| { | |||
| $("#first_rents_member_company_no").val(xvars["rents"]["member_company_no"]); // 買方統編 | |||
| } | |||
| $("#first_rents_dialog").modal({backdrop:false,keyboard:false}); | |||
| } | |||
| else if(jdata["action_code"] == "U") | |||
| { | |||
| // 更新會員資料 | |||
| alertify_msg("月租資料存檔完成 !"); | |||
| } | |||
| else | |||
| { | |||
| // 未知 | |||
| alertify_msg("未知的操作.."); | |||
| } | |||
| show_item('member_query', 'member_query'); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg(jdata["msg"]); | |||
| } | |||
| } | |||
| }); | |||
| }); | |||
| // 計算租金 | |||
| function calculate_rents_amt() | |||
| { | |||
| // 計算月租金額 | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"calculate_rents_amt", | |||
| dataType:"json", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "cmd":"calculate_rents_amt", | |||
| "station_no":station_no, | |||
| "demonth_start_date":$("#ma_demonth_start_date").val(), | |||
| "member_attr":$("#member_attr").val(), | |||
| "period_1":$("#fee_period1").val(), // 首期繳期 | |||
| "period_2":$("#fee_period").val() // 例行繳期 | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| $("#ma_demonth_start_date").val(jdata["demonth_start_date"]); | |||
| $("#ma_demonth_end_date").val(jdata["demonth_end_date"]).prop("disabled",true); | |||
| $("#ma_start_date").val(jdata["start_date"]).prop("disabled",true); | |||
| $("#ma_end_date").val(jdata["end_date"]).prop("disabled",true); | |||
| $("#amt1_max").text(jdata["demonth_amt"]); | |||
| $("#amt1_days").text(jdata["demonth_days"]); | |||
| $("#amt1_days_total").text(jdata["demonth_days_total"]); | |||
| $("#amt1_max_view").show(); | |||
| // 第一版: 依天數拆分 | |||
| /* | |||
| $("#amt2_max").text(jdata["amonth_amt"]); | |||
| $("#amt2_days").text(jdata["amonth_days"]); | |||
| $("#amt2_days_total").text(jdata["amonth_days_total"]); | |||
| $("#amt2_max_view").show(); | |||
| */ | |||
| // 第二版: 依月數拆分 2017-02-13 updated | |||
| $("#amt2_max").text(jdata["amonth_amt"]); | |||
| $("#amt2_months").text(jdata["amonth_months"]); | |||
| $("#amt2_months_total").text(jdata["amonth_months_total"]); | |||
| $("#amt2_max_view").show(); | |||
| $("#ma_amt1").val(jdata["rents_amt1"]); | |||
| $("#ma_amt").val(jdata["rents_amt2"]); | |||
| $("#ma_deposit").val(jdata["rents_deposit"]); | |||
| $("#amt_accrued").text(parseInt(jdata["rents_amt1"])+parseInt(jdata["rents_amt2"])+parseInt(jdata["rents_deposit"])); | |||
| $("#ma_amt_accrued").val($("#amt_accrued").text()); | |||
| re_amt(true); | |||
| } | |||
| }); | |||
| } | |||
| // 重新計算實際租金 | |||
| function re_amt(show_sccured_view=false) | |||
| { | |||
| if ($("#ma_amt1").val() == "") $("#ma_amt1").val(0); | |||
| if ($("#ma_amt").val() == "") $("#ma_amt").val(0); | |||
| if ($("#ma_deposit").val() == "") $("#ma_deposit").val(0); | |||
| $("#amt_tot").text(parseInt($("#ma_amt1").val())+parseInt($("#ma_amt").val())+parseInt($("#ma_deposit").val())); | |||
| //$("#amt_tot").text(parseInt($("#ma_amt1").val())+parseInt($("#ma_amt").val())); // 無押金 | |||
| $("#ma_amt_tot").val($("#amt_tot").text()); | |||
| $("#amt_tot_view").show(); | |||
| if(show_sccured_view) | |||
| { | |||
| $("#amt_accrued_view").show(); | |||
| } | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,118 @@ | |||
| <?php /* ----- 會員清單 ----- */?> | |||
| <div data-items="member_query_all" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 會員清單 | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">車號</th> | |||
| <th style="text-align:left;">姓名</th> | |||
| <th style="text-align:center;">手機</th> | |||
| <th style="text-align:center;">開始日</th> | |||
| <th style="text-align:center;">結束日</th> | |||
| <th style="text-align:center;">繳期</th> | |||
| <th style="text-align:center;">身份</th> | |||
| <!--th style="text-align:center;">租金</th--> | |||
| <th style="text-align:center;">停權</th> | |||
| <!--th style="text-align:center;">狀態</th--> | |||
| <th style="text-align:center;">有效期限</th> | |||
| <!--th style="text-align:center;">備註</th--> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_list_all" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 會員清單(結束) ----- */?> | |||
| <script> | |||
| // 載入 | |||
| function reload_member_query_all() | |||
| { | |||
| $("#member_list_all").html("");<?php /* 清除原內容 */ ?> | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>member_query_all", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: {}, | |||
| success: function(jdata) | |||
| { | |||
| var member_list = []; | |||
| for(idx in jdata) | |||
| { | |||
| mno = jdata[idx]['member_no']; | |||
| member_list = member_list.concat([ | |||
| "<tr><td id='member_query_all_lpr_", mno, "' style='text-align:left; '>", jdata[idx]['lpr'], "</td>", | |||
| "<td id='name_", mno, "' style='text-align:left; '>", jdata[idx]['member_name'], "</td>", | |||
| "<td id='mobile_", mno, "' style='text-align:center; '>", jdata[idx]['mobile_no'], "</td>", | |||
| "<td id='sdate_", mno, "' style='text-align:center; '>", jdata[idx]['start_date'], "</td>", | |||
| "<td id='edate_", mno, "' style='text-align:center; '>", jdata[idx]['end_date'], "</td>", | |||
| "<td id='fee_period_", mno, "' style='text-align:center; '>", period_name[jdata[idx]['fee_period']], "</td>", | |||
| "<td id='member_attr_", mno, "' style='text-align:center; '>", mem_attr[jdata[idx]['member_attr']], "</td>", | |||
| //"<td id='contract_", mno, "' style='text-align:center; '>", jdata[idx]['contract_no'], "</td>", | |||
| //"<td id='etag_", mno, "' style='text-align:center; '>", jdata[idx]['etag'], "</td>", | |||
| //"<td id='amt_", mno, "' style='text-align:center; '>", jdata[idx]['amt'], "</td>", | |||
| //"<td style='text-align:center, '><select id='sel_", mno, "' onChange='member_modify(", mno, "); '><option value='choice'>請選擇</option><option value='modify'>修改</option><option value='delete'>刪除</option></select></td>", | |||
| //"</tr>" | |||
| ]); | |||
| if(jdata[idx]['suspended'] == "1") | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><input type='checkbox' checked id='suspended_", mno, "' disabled/></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><input type='checkbox' id='suspended_", mno, "' disabled/></td>"]); | |||
| } | |||
| /* | |||
| if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;' id='verify_state_", mno, "'><button class='btn btn-default' onclick='member_tx_check(0);'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;' id='verify_state_", mno, "'>審核通過</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:center;' id='verify_state_", mno, "'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check(0);'>未通過</button></td>"]); | |||
| } | |||
| */ | |||
| if(jdata[idx]['valid_time'] < jdata[idx]['end_date']) | |||
| { | |||
| //member_list = member_list.concat(["<td style='color:red;text-align:left;' id='valid_time_", mno, "'>", jdata[idx]['valid_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;' id='valid_time_", mno, "'><button class='btn' style='color:red;' onclick='member_query_all_tx_check(0);'>將於 ", jdata[idx]['valid_time'], " 到期</button></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:left;' id='valid_time_", mno, "'>結束日 ", jdata[idx]['end_date'], " 到期</td>"]); | |||
| } | |||
| //member_list = member_list.concat(["<td style='color:blue;text-align:center;' id='remarks_", mno, "'>", jdata[idx]['remarks'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#member_list_all").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| // 查核作業 | |||
| function member_query_all_tx_check(tx_no) | |||
| { | |||
| alertify_msg("請通知總公司營管!<br/><br/>電話:02-27057716 分機 119<br/><br/>"); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,133 @@ | |||
| <?php /* ----- 交易查核總覽 ----- */?> | |||
| <div data-items="member_tx_check_query" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 待審核清單 | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <!--th style="text-align:left;">場站</th--> | |||
| <th style="text-align:center;">入帳日</th> | |||
| <th style="text-align:left;">入帳車號</th> | |||
| <th style="text-align:left;">目前車號</th> | |||
| <th style="text-align:center;">會員開始日</th> | |||
| <th style="text-align:center;">上期繳期</th> | |||
| <th style="text-align:center;">上期結束日</th> | |||
| <th style="text-align:center;">上期租金</th> | |||
| <th style="text-align:center;">本期繳期</th> | |||
| <th style="text-align:center;">本期開始日</th> | |||
| <th style="text-align:center;">本期結束日</th> | |||
| <th style="text-align:center;">本期租金</th> | |||
| <!--th style="text-align:center;">發票開立</th--> | |||
| <th style="text-align:center;">審核狀態</th> | |||
| <th style="text-align:center;">有效期限</th> | |||
| <th style="text-align:center;">備註</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_tx_check" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 交易查核總覽(結束) ----- */?> | |||
| <script> | |||
| // 載入 | |||
| function reload_member_tx_check_query() | |||
| { | |||
| $("#member_tx_check").html(""); // -- 清除原內容 -- | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>member_tx_check_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: {}, | |||
| success:function(jdata) | |||
| { | |||
| var member_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| tx_no = jdata[idx]['tx_no']; | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", tx_no, "</td>"]); | |||
| //member_list = member_list.concat(["<td style='text-align:center;'>", st[jdata[idx]['station_no']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='acc_date_", tx_no, "' style='text-align:center;'>", jdata[idx]['acc_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='member_tx_lpr_", tx_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-tx_no='", jdata[idx]['tx_no'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-amt='", jdata[idx]['amt'], | |||
| "' data-amt1='", jdata[idx]['amt1'], | |||
| "' data-deposit='", jdata[idx]['deposit'], | |||
| "' data-start_date_last='", jdata[idx]['start_date_last'], | |||
| "' data-end_date='", jdata[idx]['end_date'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-fee_period='", jdata[idx]['fee_period'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| if(jdata[idx]['current_lpr']) | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>", jdata[idx]['current_lpr'], "</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>已刪除</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td id='sdate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_last_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period_last']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt'], "</td>"]); | |||
| //member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='show_member_tx_bill(", tx_no ,");'>瀏覽</button></td>"]); | |||
| if(jdata[idx]['tx_state'] == 4) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已退租</td>"]); | |||
| } | |||
| else if(jdata[idx]['tx_state'] == 44) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>交易取消</td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='member_tx_check_query_tx_check(", tx_no + ");'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;'>已審核</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check_query_tx_check(", tx_no + ");'>未通過</button></td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;' id='valid_time_", tx_no, "'>", jdata[idx]['valid_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:left;' id='remarks_", tx_no, "'>", jdata[idx]['remarks'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#member_tx_check").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| // 查核作業 | |||
| function member_tx_check_query_tx_check(tx_no) | |||
| { | |||
| alertify_msg("請通知總公司營管!<br/><br/>電話:02-27057716 分機 119<br/><br/>"); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,442 @@ | |||
| <?php /* ----- 交易退款總覽 ----- */?> | |||
| <div data-items="member_tx_refund_query" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 退租查詢 | |||
| <form id="member_tx_refund_form" role="form"> | |||
| <div class="form-group"> | |||
| <label class="select-inline" for="station_refund_select"> | |||
| <select class="form-control" id="station_refund_select"> | |||
| </select> | |||
| </label> | |||
| <label class="radio-inline"><input type="radio" name="q_item" value="lpr" checked />車號</label> | |||
| <label class="input-inline"> <input type="text" id="q_refund_str" placeholder="關鍵字" /></label> | |||
| <label class="input-inline"><input type="submit" value="查詢" /></label> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:center;">代號</th> | |||
| <th style="text-align:center;">車號</th> | |||
| <th style="text-align:center;">金額</th> | |||
| <th style="text-align:center;">押金</th> | |||
| <th style="text-align:center;">總金額 (金額 + 押金)</th> | |||
| <th style="text-align:center;">租約結束時間</th> | |||
| <th style="text-align:center;">退租發票</th> | |||
| <th style="text-align:center;">退租狀態</th> | |||
| <th style="text-align:center;">建立時間</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_tx_refund" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| <div id="member_tx_refund_list_detail_box" class="col-lg-12" style="display:none;"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 交易記錄(車號:<span id='member_tx_refund_list_detail_lpr'></span>,退租時間:<span id='member_tx_refund_list_detail_refund_time'></span>) | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <th style="text-align:center;">入帳日</th> | |||
| <th style="text-align:left;">車號</th> | |||
| <th style="text-align:center;">會員開始日</th> | |||
| <th style="text-align:center;">上期繳期</th> | |||
| <th style="text-align:center;">上期結束日</th> | |||
| <th style="text-align:center;">上期租金</th> | |||
| <th style="text-align:center;">本期繳期</th> | |||
| <th style="text-align:center;">本期開始日</th> | |||
| <th style="text-align:center;">本期結束日</th> | |||
| <th style="text-align:center;">本期租金</th> | |||
| <th style="text-align:center;">發票時間</th> | |||
| <th style="text-align:center;">買方統編</th> | |||
| <th style="text-align:center;">賣方統編</th> | |||
| <th style="text-align:center;">發票金額</th> | |||
| <th style="text-align:center;">發票字軌</th> | |||
| <th style="text-align:center;">發票號碼</th> | |||
| <th style="text-align:center;">發票種類</th> | |||
| <th style="text-align:center;">狀態</th> | |||
| <th style="text-align:center;">待辦金額</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_tx_refund_list_detail" style="font-size:16px;"></tbody> | |||
| </table> | |||
| </div><!-- ----- end of dataTable_wrapper ----- --> | |||
| </div><!-- ----- end of panel-body ----- --> | |||
| </div><!-- ----- end of panel panel-default ----- --> | |||
| </div><!-- ----- end of col-lg-12 ----- --> | |||
| </div> | |||
| <?php /* ----- 交易退款總覽(結束) ----- */?> | |||
| <script> | |||
| // 設定場站資訊 | |||
| for(station_no in st) | |||
| { | |||
| $(new Option(st[station_no],station_no)).appendTo('#station_refund_select'); // 會員退租場站編號 | |||
| } | |||
| // 退租查詢 | |||
| $("#member_tx_refund_form").submit(function(e) | |||
| { | |||
| e.preventDefault(); | |||
| if ($("#q_refund_str").val() == "") | |||
| { | |||
| alertify_log("請填寫查詢關鍵字.."); | |||
| return false; | |||
| } | |||
| $("#member_tx_refund").html(""); // clean all | |||
| $("#member_tx_refund_list_detail").html(""); | |||
| $("#member_tx_refund_list_detail_box").hide(); | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>member_tx_refund_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data:{"station_no":$("#station_refund_select").val(), "q_item":$("input:radio:checked[name=q_item]").val(), "q_str":$("#q_refund_str").val()}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| var member_list = ['<tr>']; | |||
| for(idx in jdata) | |||
| { | |||
| member_refund_id = jdata[idx]['member_refund_id']; | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['member_refund_id'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='member_tx_refund_query_lpr_", member_refund_id, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-refund_amt='", jdata[idx]['refund_amt'], | |||
| "' data-refund_deposit='", jdata[idx]['refund_deposit'], | |||
| "' data-refund_tot_amt='", jdata[idx]['refund_tot_amt'], | |||
| "' data-refund_time='", jdata[idx]['refund_time'], | |||
| "' data-refund_state='", jdata[idx]['refund_state'], | |||
| "' data-create_time='", jdata[idx]['create_time'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| if(jdata[idx]['refund_amt'] >= 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['refund_amt'], " 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>需補繳 ", -jdata[idx]['refund_amt'], " 元</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['refund_deposit'], " 元</td>"]); | |||
| if(jdata[idx]['refund_tot_amt'] >= 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>共退還 ", jdata[idx]['refund_tot_amt'], " 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>總共需補繳 ", -jdata[idx]['refund_tot_amt'], " 元</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['refund_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='show_member_refund_detail(", member_refund_id ,");'>瀏覽</button></td>"]); | |||
| if(jdata[idx]['refund_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:center;'>待確認</td>"]); | |||
| } | |||
| else if(jdata[idx]['refund_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>待補開</td>"]); | |||
| } | |||
| else if(jdata[idx]['refund_state'] == 2) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>待折讓</td>"]); | |||
| } | |||
| else if(jdata[idx]['refund_state'] == 100) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已完成</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>未定義</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['create_time'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#member_tx_refund").append(member_list.join('')); | |||
| } | |||
| }); | |||
| }); | |||
| // 退租記錄 | |||
| function show_member_refund_detail(member_refund_id) | |||
| { | |||
| var refund_lpr = $("#member_tx_refund_query_lpr_"+member_refund_id).data("lpr"); | |||
| var refund_time = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_time"); | |||
| $("#member_tx_refund_list_detail_lpr").text(refund_lpr); | |||
| $("#member_tx_refund_list_detail_refund_time").text(refund_time); | |||
| show_member_tx_refund_bill(0, '', '', '4', 0, member_refund_id); | |||
| } | |||
| // 完成退租交易 | |||
| /* | |||
| function complete_member_refund(member_refund_id) | |||
| { | |||
| var refund_state = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_state"); | |||
| var refund_lpr = $("#member_tx_refund_query_lpr_"+member_refund_id).data("lpr"); | |||
| $("#member_tx_refund_list_detail_lpr").text(refund_lpr); | |||
| if(refund_state == 0) | |||
| { | |||
| // 待確認流程 | |||
| alertify_log("待確認流程"); | |||
| } | |||
| else if(refund_state == 1) | |||
| { | |||
| show_member_tx_refund_bill(0, '', '1', '4'); // 待補開 (已退租) | |||
| } | |||
| else if(refund_state == 2) | |||
| { | |||
| show_member_tx_refund_bill(0, '', '2', '4'); // 待折讓 (已退租, 已開立發票) | |||
| } | |||
| else | |||
| { | |||
| // 未定義 | |||
| alertify_log("未定義"); | |||
| } | |||
| return false; | |||
| } | |||
| */ | |||
| // 發票開立記錄 | |||
| function show_member_tx_refund_bill(tx_no=0, verify_state_str='', invoice_state_str='', tx_state_str='', tx_bill_no =0, member_refund_id=0) | |||
| { | |||
| $("#member_tx_refund_list_detail").html(""); // -- 清除原內容 -- | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"member_tx_bill_query", | |||
| type:"post", | |||
| dataType:"json", | |||
| data:{"station_no":station_no, "tx_no":tx_no, "verify_state_str":verify_state_str, | |||
| "invoice_state_str":invoice_state_str, "tx_state_str":tx_state_str, | |||
| "tx_bill_no":tx_bill_no, "member_refund_id":member_refund_id}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| $("#member_tx_refund_list_detail_box").hide(); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| $("#member_tx_refund_list_detail_box").show(); | |||
| var member_list = [["<tr>"]]; | |||
| for(idx in jdata) | |||
| { | |||
| //console.log(jdata.length + " : " + idx + " , " + jdata[idx]['invoice_amt'] + " : " + jdata[idx]['remain_amt']); | |||
| tx_no = jdata[idx]['tx_no']; | |||
| member_list = member_list.concat(["<td style='text-align:left;'>", jdata[idx]['tx_no'], "_", jdata[idx]['tx_bill_no'], "</td>"]); | |||
| //member_list = member_list.concat(["<td style='text-align:left;'>", st[jdata[idx]['station_no']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='acc_date_", tx_no, "' style='text-align:center;'>", jdata[idx]['acc_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='tx_bill_lpr_", jdata[idx]['tx_bill_no'], | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-tx_bill_no='", jdata[idx]['tx_bill_no'], | |||
| "' data-tx_no='", jdata[idx]['tx_no'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-invoice_amt='", jdata[idx]['invoice_amt'], | |||
| "' data-remain_amt='", jdata[idx]['remain_amt'], | |||
| "' data-period_3_amt='", jdata[idx]['period_3_amt'], | |||
| "' data-amt='", jdata[idx]['amt'], | |||
| "' data-amt1='", jdata[idx]['amt1'], | |||
| "' data-deposit='", jdata[idx]['deposit'], | |||
| "' data-start_date_last='", jdata[idx]['start_date_last'], | |||
| "' data-end_date='", jdata[idx]['end_date'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-fee_period='", jdata[idx]['fee_period'], | |||
| "' data-refund_amt='", jdata[idx]['refund_amt'], | |||
| "' data-invoice_state='", jdata[idx]['invoice_state'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_last_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period_last']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date'], "</td>"]); | |||
| if(jdata[idx]['invoice_state'] == 1) | |||
| { | |||
| // 待補開 | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>指定退租日<br/>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>補繳總金額<br/>", jdata[idx]['amt'], " 元</td>"]); | |||
| } | |||
| else if(jdata[idx]['invoice_state'] == 2) | |||
| { | |||
| // 待折讓 | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>指定退租日<br/>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>折讓總金額<br/>", jdata[idx]['amt'], " 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt'], " 元</td>"]); | |||
| } | |||
| // 是否已有發票 | |||
| if(jdata[idx]['invoice_no'] > 0) | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_time_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='member_company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['member_company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_track_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_track'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_no'], "</td>"]); | |||
| if(jdata[idx]['invoice_type'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'>電子發票</td>"]); | |||
| } | |||
| else if(jdata[idx]['invoice_type'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'>手開發票</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'>異常</td>"]); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_time_", tx_no, "' style='text-align:center;'>未開立</td>"]); | |||
| member_list = member_list.concat(["<td id='member_company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['member_company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_track_", tx_no, "' style='text-align:center;'></td>"]); | |||
| if(jdata[idx]['tx_state'] == 4 && jdata[idx]['invoice_state'] == 0) | |||
| { | |||
| // 已退租, 原先交易將不再開放開立 | |||
| member_list = member_list.concat(["<td id='invoice_no_", tx_no, "' style='text-align:center;'></td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_no_", tx_no, "' style='text-align:center;'><button class='btn btn-default' onclick='print_tx_invoice(", jdata[idx]['tx_bill_no'] ,");'>列印發票</button></td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'><button class='btn btn-default' onclick='hand_tx_invoice(", jdata[idx]['tx_bill_no'] ,");'>手開發票</button></td>"]); | |||
| } | |||
| } | |||
| //member_list = member_list.concat(["<td style='color:blue;text-align:center;' id='remarks_", jdata[idx]['tx_bill_no'], "'>", jdata[idx]['remarks'], "</td>"]); | |||
| if(jdata[idx]['tx_state'] == 4) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已退租</td>"]); | |||
| } | |||
| else if(jdata[idx]['tx_state'] == 44) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>交易取消</td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='member_tx_check(", tx_no + ");'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;'>已審核</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check(", tx_no + ");'>未通過</button></td>"]); | |||
| } | |||
| // 剩餘開立金額 | |||
| if(jdata[idx]['invoice_state'] == 1) | |||
| { | |||
| // 待開立 | |||
| if(jdata[idx]['remain_amt'] > 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='next_refund_bill(", jdata[idx]['tx_bill_no'] ,");'>尚餘 ", jdata[idx]['remain_amt'] ," 元</button></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>無</td>"]); | |||
| } | |||
| } | |||
| else if(jdata[idx]['invoice_state'] == 2) | |||
| { | |||
| // 待折讓 | |||
| if(jdata[idx]['refund_amt'] > 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='refund_invoice_allowance(", jdata[idx]['tx_bill_no'] ,");'>待折讓 ", jdata[idx]['refund_amt'] ," 元</button></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>異常</td>"]); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| // 待開立 | |||
| if(jdata[idx]['remain_amt'] > 0) | |||
| { | |||
| if(jdata[idx]['tx_state'] == 4 && jdata[idx]['invoice_state'] == 0) | |||
| { | |||
| // 已退租, 原先交易將不再開放開立 | |||
| member_list = member_list.concat(["<td style='text-align:center;'>尚餘 ", jdata[idx]['remain_amt'] ," 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='next_tx_bill(", jdata[idx]['tx_bill_no'] ,");'>尚餘 ", jdata[idx]['remain_amt'] ," 元</button></td>"]); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>無</td>"]); | |||
| } | |||
| } | |||
| member_list = member_list.concat(["</tr>"]);; | |||
| } | |||
| $("#member_tx_refund_list_detail").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,147 @@ | |||
| <?php /* ----- 費率清單 ----- */?> | |||
| <div data-items="price_plan_query_all" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 費率設定 <button class='btn btn-default' style='font-size:16px;' onclick='sync_price_plan();'>更新</button> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">場站</th> | |||
| <th style="text-align:left;">收費類型</th> | |||
| <th style="text-align:left;" width="35%">費率設定</th> | |||
| <th style="text-align:left;">註記事項</th> | |||
| <th style="text-align:center;">啟用時間</th> | |||
| <th style="text-align:center;">有效期限</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="price_plan_list" style="font-size:20px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 費率清單(結束) ----- */?> | |||
| <script> | |||
| // 載入 | |||
| function reload_price_plan_query_all() | |||
| { | |||
| $("#price_plan_list").html("");<?php /* 清除原內容 */ ?> | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>price_plan_query_all", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: {}, | |||
| success: function(jdata) | |||
| { | |||
| var member_list = []; | |||
| for(idx in jdata) | |||
| { | |||
| txid = jdata[idx]['txid']; | |||
| member_list = member_list.concat(["<tr><td style='text-align:left;'>", st[jdata[idx]['station_no']], "</td>"]); | |||
| var price_plan_content = []; | |||
| if(jdata[idx]['tx_type'] == 0) | |||
| { | |||
| price_plan_name = "臨停費率"; | |||
| //jdata[idx]['price_plan']; | |||
| } | |||
| else | |||
| { | |||
| price_plan_name = "月租費率"; | |||
| target = JSON.parse(jdata[idx]['price_plan']); | |||
| Object.keys(target) | |||
| .sort( | |||
| function(a,b){ | |||
| attr_a = a.split('_'); | |||
| attr_b = b.split('_'); | |||
| if(parseInt(attr_a[0], 10) > parseInt(attr_b[0], 10)) return 1; | |||
| if(parseInt(attr_a[0], 10) < parseInt(attr_b[0], 10)) return -1; | |||
| if(parseInt(attr_a[1], 10) > parseInt(attr_b[1], 10)) return 1; | |||
| if(parseInt(attr_a[1], 10) < parseInt(attr_b[1], 10)) return -1; | |||
| return 0; | |||
| } | |||
| ) | |||
| .forEach(function(k, i) | |||
| { | |||
| //console.log(k, target[k]); | |||
| period_idx = k.split("_")[0]; | |||
| mem_idx = k.split("_")[1]; | |||
| if(k == '0_0') | |||
| { | |||
| price_plan_content = price_plan_content.concat(['*月租押金:', target[k], ' 元']); | |||
| } | |||
| else if(mem_idx == '0') | |||
| { | |||
| idx_period_name = (period_name[period_idx] == undefined) ? '繳期 ' + period_idx : period_name[period_idx]; | |||
| price_plan_content = price_plan_content.concat(['<br/> * [ ', idx_period_name, ' : ', target[k], ' 天 ] ']); | |||
| } | |||
| else | |||
| { | |||
| idx_mem_attr = (mem_attr[mem_idx] == undefined) ? '?? (' + mem_idx + ')': mem_attr[mem_idx]; | |||
| price_plan_content = price_plan_content.concat([' > ', idx_mem_attr, ":", target[k], ' 元 ']); | |||
| } | |||
| price_plan_content = price_plan_content.concat(['<br/>']); | |||
| }); | |||
| } | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;' id='tx_type_", txid, "'>", price_plan_name ,"</td>"]); | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:left;' id='price_plan_", txid, "'>", price_plan_content.join('') , "</td>"]); | |||
| member_list = member_list.concat(["<td style='color:green;text-align:left;' id='remarks_", txid, "'>", jdata[idx]['remarks'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='start_time_", txid, "' style='text-align:center;'>", jdata[idx]['start_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='valid_time_", txid, "' style='text-align:center;'>", jdata[idx]['valid_time'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#price_plan_list").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| // 同步場站費率 | |||
| function sync_price_plan() | |||
| { | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL + "sync_price_plan", | |||
| dataType:"text", | |||
| type:"post", | |||
| data: {}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| alertify_msg(xhr.responseText); | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata == "ok") | |||
| { | |||
| alertify_msg("同步成功 ! "); | |||
| reload_price_plan_query_all(); | |||
| } | |||
| else if (jdata == "sync_fail") | |||
| { | |||
| alertify_msg("同步失敗"); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg("同步失敗 !"); | |||
| } | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,209 @@ | |||
| <?php /* ----- 臨停未結清單 ----- */?> | |||
| <div data-items="cario_temp_not_finished_query_all" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 臨停未結清單 (2017-02-01 00:00:00 進場 ~ 至 <span id='altob_current_time_str'></span>) | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <th style="text-align:left;">車牌號碼</th> | |||
| <th style="text-align:center;">進場時間</th> | |||
| <th style="text-align:center;">最後付款時間</th> | |||
| <th style="text-align:center;">限時離場時間</th> | |||
| <th style="text-align:center;">功能</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="cario_temp_not_finished_query_all" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 臨停未結清單(結束) ----- */?> | |||
| <!-- ----- 臨停未結確認小框 ----- --> | |||
| <div class="modal fade" id="cario_temp_check_dialog"> | |||
| <div class="modal-dialog modal-sm"> | |||
| <div class="modal-content"> | |||
| <div class="modal-header"><h3>臨停未結查核作業</h3></div> | |||
| <div class="modal-body"> | |||
| <form id="cario_temp_check_form" class="center-block"> | |||
| <div class="main"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover" style="font-size:12px;"> | |||
| <tbody id="cario_temp_check_list"> | |||
| <tr> | |||
| <td style="text-align:right;">進場車號</td> | |||
| <td style="text-align:left;" id="cario_temp_check_lpr"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;">進場時間</td> | |||
| <td style="text-align:left;" id="cario_temp_check_in_time"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;">限時離場時間</td> | |||
| <td style="text-align:left;" id="cario_temp_check_out_before_time"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;">最後付款時間</td> | |||
| <td style="text-align:left;" id="cario_temp_check_pay_time"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;vertical-align:middle">臨停未結說明</td> | |||
| <td style="text-align:left;"><input type="text" id="cario_temp_check_remarks" class="form-control" style="width:150px !important;" /></td> | |||
| </tr> | |||
| </tbody> | |||
| </table> | |||
| <button type="button" class="btn btn-large btn-success pull-left" onclick="do_cario_temp_check_ok();">確認完成</button> | |||
| | |||
| <button type="button" class="btn btn-large btn-cancel" onclick="$('#cario_temp_check_dialog').modal('hide');">取消</button> | |||
| </div><!-- ----- end of dataTable_wrapper ----- --> | |||
| </div><!-- ----- end of main ----- --> | |||
| </form> | |||
| </div><!-- end of modal-body --> | |||
| </div><!-- end of modal-content --> | |||
| </div><!-- end of modal-dialog --> | |||
| </div><!-- end of modal show --> | |||
| <!-- ----- 臨停未結確認小框 (結束) ----- --> | |||
| <script> | |||
| // 載入 | |||
| function reload_cario_temp_not_finished_query_all() | |||
| { | |||
| $("#altob_current_time_str").text(moment(new Date()).format("YYYY-MM-DD HH:mm:ss")); | |||
| $("#cario_temp_not_finished_query_all").html(""); // -- 清除原內容 -- | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>cario_temp_not_finished_query_all", | |||
| type: "post", | |||
| dataType:"json", | |||
| data:{"station_no":$("#station_select").val(), "q_item":'in_time', "q_str":'2017-02-01'}, | |||
| success:function(jdata) | |||
| { | |||
| var cario_temp_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| cario_no = jdata[idx]['cario_no']; | |||
| cario_temp_list = cario_temp_list.concat(["<td style='text-align:left;'>", cario_no, "</td>"]); | |||
| cario_temp_list = cario_temp_list.concat(["<td id='cario_temp_not_finished_query_all_lpr_", cario_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-cario_no='", jdata[idx]['cario_no'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-in_time='", jdata[idx]['in_time'], | |||
| "' data-out_before_time='", jdata[idx]['out_before_time'], | |||
| "' data-pay_time='", jdata[idx]['pay_time'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| cario_temp_list = cario_temp_list.concat(["<td style='text-align:center;'>", jdata[idx]['in_time'], "</td>"]); | |||
| cario_temp_list = cario_temp_list.concat(["<td style='text-align:center;'>", jdata[idx]['pay_time'], "</td>"]); | |||
| cario_temp_list = cario_temp_list.concat(["<td style='text-align:center;'>", jdata[idx]['out_before_time'], "</td>"]); | |||
| cario_temp_list = cario_temp_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='cario_temp_check(", cario_no + ");'>人工審核</button></td>"]); | |||
| cario_temp_list = cario_temp_list.concat(["</tr>"]); | |||
| } | |||
| $("#cario_temp_not_finished_query_all").append(cario_temp_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| // 臨停未結確認 | |||
| function cario_temp_check(cario_no) | |||
| { | |||
| var station_no = $("#cario_temp_not_finished_query_all_lpr_"+cario_no).data("station_no"); | |||
| var lpr = $("#cario_temp_not_finished_query_all_lpr_"+cario_no).data("lpr"); | |||
| var in_time = $("#cario_temp_not_finished_query_all_lpr_"+cario_no).data("in_time"); | |||
| var pay_time = $("#cario_temp_not_finished_query_all_lpr_"+cario_no).data("pay_time"); | |||
| var out_before_time = $("#cario_temp_not_finished_query_all_lpr_"+cario_no).data("out_before_time"); | |||
| // 發票資訊 | |||
| xvars["cario_temp_check"] = Array(); | |||
| xvars["cario_temp_check"]["cario_no"] = cario_no; | |||
| xvars["cario_temp_check"]["station_no"] = station_no; | |||
| xvars["cario_temp_check"]["in_time"] = in_time; | |||
| xvars["cario_temp_check"]["pay_time"] = (pay_time == "") ? '未付款': pay_time; | |||
| xvars["cario_temp_check"]["out_before_time"] = out_before_time; | |||
| $("#cario_temp_check_lpr").text("").text(lpr); | |||
| $("#cario_temp_check_in_time").text("").text(in_time); | |||
| $("#cario_temp_check_pay_time").text("").text(pay_time); | |||
| $("#cario_temp_check_out_before_time").text("").text(out_before_time); | |||
| $("#cario_temp_check_remarks").text(""); | |||
| $("#cario_temp_check_dialog").modal({backdrop:false,keyboard:false}); | |||
| } | |||
| // 臨停未結確認完成 | |||
| function do_cario_temp_check_ok() | |||
| { | |||
| if (!confirm("確認審核通過 ?")) return false; | |||
| var station_no = xvars["cario_temp_check"]["station_no"]; | |||
| var cario_no = xvars["cario_temp_check"]["cario_no"]; | |||
| var cario_temp_check_remarks = $("#cario_temp_check_remarks").val(); | |||
| if (cario_temp_check_remarks == "") | |||
| { | |||
| alertify_msg("請說明原因,謝謝"); | |||
| return false; | |||
| } | |||
| //alertify_msg("施工中..zzz"); | |||
| //return false; | |||
| // 新增審核資訊 | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"cario_temp_confirmed", | |||
| dataType:"text", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "cario_no": cario_no, | |||
| "remarks": cario_temp_check_remarks | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata == "ok") | |||
| { | |||
| alertify_msg("確認完成!"); | |||
| reload_cario_temp_not_finished_query_all(); | |||
| } | |||
| else if(jdata == "not_synced") | |||
| { | |||
| alertify_sync(station_no); | |||
| } | |||
| else if (jdata == "check_fail") | |||
| { | |||
| alertify_msg("操作失敗,已取消"); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg("操作失敗 !"); | |||
| } | |||
| } | |||
| }); | |||
| delete xvars["cario_temp_check"]; | |||
| $('#cario_temp_check_dialog').modal('hide'); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,87 @@ | |||
| <!-- ----- 電子發票清帳作業 ----- --> | |||
| <div data-items="check_point" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading">關帳(手動)</div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div class="form-group"> | |||
| <label style="font-size:16px;">本次關帳時間</label> | |||
| <input id="check_point_time" type="datetime" class="form-control" style="font-size:20px;"/> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label style="font-size:16px;">備註(選填)</label> | |||
| <input id="check_point_remarks" type="text" class="form-control" style="font-size:20px;" placeholder="補充說明" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <button type="button" class="btn btn-large btn-success pull-left" onclick="set_check_point();">關帳</button> | |||
| </div> | |||
| </div><!-- end of col-lg-6 (nested) --> | |||
| </div><!-- end of row (nested) --> | |||
| </div><!-- end of panel-body --> | |||
| </div><!-- end of panel --> | |||
| </div><!-- end of col-lg-12 --> | |||
| </div><!-- data-items --> | |||
| <!-- ----- 電子發票清帳作業(結束) ----- --> | |||
| <script> | |||
| // 載入 | |||
| function reload_check_point() | |||
| { | |||
| $("#check_point_time").val(moment(new Date()).format("YYYY-MM-DD HH:mm:ss")); | |||
| $("#check_point_time").prop("readonly",true); | |||
| $("#check_point_remarks").val(""); | |||
| } | |||
| // 列印電子發票清帳 | |||
| function set_check_point() | |||
| { | |||
| var station_no = $("#station_select").val(); | |||
| var check_point_time = $("#check_point_time").val(); | |||
| var remarks = $("#check_point_remarks").val(); | |||
| if (!confirm("確認關帳時間:"+check_point_time+" ?")) return false; | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"set_check_point", | |||
| dataType:"text", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "check_point_time": check_point_time, | |||
| "remarks": remarks | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata == "ok") | |||
| { | |||
| alertify_msg("完成!"); | |||
| //show_item('check_point', 'check_point'); | |||
| show_item('check_point_report', 'check_point_report'); | |||
| } | |||
| else if(jdata == "not_synced") | |||
| { | |||
| alertify_sync(station_no); | |||
| } | |||
| else if(jdata == "error_amt") | |||
| { | |||
| alertify_msg("金額異常,請確認關帳時間"); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg("操作失敗 !"); | |||
| } | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,327 @@ | |||
| <?php /* ----- 關帳查詢 ----- */?> | |||
| <div data-items="check_point_report" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| <form id="check_point_form" role="form"> | |||
| <label class="input-inline" for="check_point_search_station_no_modify">關帳查詢</label> | |||
| <select id="check_point_search_station_no_modify" name="check_point_search_station_no_modify"></select> | |||
| <span class="input-inline" >,</span> | |||
| <label class="input-inline" for="check_point_search_time_from">開始</label> | |||
| <input type="text" class="date" id="check_point_search_time_from" name="check_point_search_time_from"> | |||
| <span class="input-inline" > ~ </span> | |||
| <label class="input-inline" for="check_point_search_time_to">結束</label> | |||
| <input type="text" class="date" id="check_point_search_time_to" name="check_point_search_time_to"> | |||
| | |||
| <label class="input-inline"><input type="submit" value="查詢" /></label> | |||
| </form> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:center;">編號</th> | |||
| <th style="text-align:center;">上次關帳時間</th> | |||
| <th style="text-align:center;">本次關帳時間</th> | |||
| <th style="text-align:center;">上次最後交易代號</th> | |||
| <th style="text-align:center;">本次最後交易代號</th> | |||
| <th style="text-align:center;">總金額(不含押金)</th> | |||
| <th style="text-align:center;">總押金</th> | |||
| <th style="text-align:center;">操作種類</th> | |||
| <th style="text-align:center;">功能</th> | |||
| <th style="text-align:center;">建立時間</th> | |||
| <th style="text-align:center;">備註</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="check_point_list" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| <div id="check_point_list_detail_box" class="col-lg-12" style="display:none;"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 關帳明細(<span id='check_point_list_detail_time_str_1'></span> 開始 ~ 至 <span id='check_point_list_detail_time_str_2'></span> 關帳,期間所有交易) | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <th style="text-align:center;">入帳日</th> | |||
| <th style="text-align:left;">入帳車號</th> | |||
| <th style="text-align:left;">目前車號</th> | |||
| <th style="text-align:center;">會員開始日</th> | |||
| <th style="text-align:center;">上期繳期</th> | |||
| <th style="text-align:center;">上期結束日</th> | |||
| <th style="text-align:center;">上期租金</th> | |||
| <th style="text-align:center;">本期繳期</th> | |||
| <th style="text-align:center;">本期開始日</th> | |||
| <th style="text-align:center;">本期結束日</th> | |||
| <th style="text-align:center;">本期租金</th> | |||
| <th style="text-align:center;">押金</th> | |||
| <th style="text-align:center;">審核狀態</th> | |||
| <th style="text-align:center;">有效期限</th> | |||
| <th style="text-align:center;">備註</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="check_point_list_detail" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 關帳查詢(結束) ----- */?> | |||
| <script> | |||
| // 設定場站資訊 | |||
| for(station_no in st) | |||
| { | |||
| $(new Option(st[station_no],station_no)).appendTo('#check_point_search_station_no_modify'); // 場站 | |||
| } | |||
| var initMinDate = moment("00:00", "HH:mm").subtract(10, 'days'); | |||
| var initMaxDate = moment("23:59", "HH:mm"); | |||
| var searchTimeFromPicker = $( "#check_point_search_time_from" ); | |||
| var searchTimeToPicker = $( "#check_point_search_time_to" ); | |||
| // 日期 | |||
| /* DatePicker 設定start */ | |||
| searchTimeFromPicker.datetimepicker({ | |||
| dateFormat: 'yy-mm-dd', | |||
| maxDate: '0', | |||
| changeMonth: true, | |||
| numberOfMonths: 1, | |||
| timeFormat: "HH:mm", | |||
| addSliderAccess: true, | |||
| sliderAccessArgs: { touchonly: false }, | |||
| onClose: function( selectedDate ) { | |||
| searchTimeToPicker.datetimepicker( "option", "minDate", selectedDate ); | |||
| console.log("search_time_from: " + selectedDate); | |||
| } | |||
| }); | |||
| searchTimeFromPicker.datetimepicker('setDate', initMinDate.toDate()); | |||
| searchTimeToPicker.datetimepicker({ | |||
| dateFormat: 'yy-mm-dd', | |||
| maxDate: '0', | |||
| changeMonth: true, | |||
| numberOfMonths: 1, | |||
| timeFormat: "HH:mm", | |||
| addSliderAccess: true, | |||
| sliderAccessArgs: { touchonly: false }, | |||
| onClose: function( selectedDate ) { | |||
| searchTimeFromPicker.datetimepicker( "option", "maxDate", selectedDate ); | |||
| console.log("search_time_to: " + selectedDate); | |||
| } | |||
| }); | |||
| searchTimeToPicker.datetimepicker('setDate', initMaxDate.toDate()); | |||
| /* DatePicker 設定end */ | |||
| $("#check_point_form").submit(function(event) | |||
| { | |||
| event.preventDefault(); | |||
| var station_no = $("#check_point_search_station_no_modify").val(); | |||
| var check_point_time_from = $( "#check_point_search_time_from" ).val(); | |||
| var check_point_time_to = $( "#check_point_search_time_to" ).val(); | |||
| $("#check_point_list").html(""); | |||
| $("#check_point_list_detail").html(""); | |||
| $("#check_point_list_detail_box").hide(); | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"check_point_query", | |||
| dataType:"json", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "check_point_time_from": check_point_time_from, | |||
| "check_point_time_to": check_point_time_to | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| var check_point_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| check_no = jdata[idx]['check_no']; | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", check_no, "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td id='check_point_data_", check_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-check_no='", jdata[idx]['check_no'], | |||
| "' data-check_time='", jdata[idx]['check_time'], | |||
| "' data-check_time_no='", jdata[idx]['check_time_no'], | |||
| "' data-check_time_last='", jdata[idx]['check_time_last'], | |||
| "' data-check_time_last_no='", jdata[idx]['check_time_last_no'], | |||
| "' data-check_type='", jdata[idx]['check_type'], | |||
| "' data-check_amt='", jdata[idx]['check_amt'], | |||
| "' data-check_deposit='", jdata[idx]['check_deposit'], | |||
| "' data-remarks='", jdata[idx]['remarks'], | |||
| "' style='text-align:center;'>", jdata[idx]['check_time_last'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_time'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_time_last_no'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_time_no'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_amt'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['check_deposit'], "</td>"]); | |||
| if(jdata[idx]['check_type'] == 1) | |||
| { | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>手動關帳</td>"]); | |||
| } | |||
| else | |||
| { | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>未知</td>"]); | |||
| } | |||
| check_point_list = check_point_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='check_point_detail(", check_no + ");'>明細</button></td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:center;'>", jdata[idx]['create_time'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["<td style='text-align:left;'>", jdata[idx]['remarks'], "</td>"]); | |||
| check_point_list = check_point_list.concat(["</tr>"]); | |||
| } | |||
| $("#check_point_list").append(check_point_list.join('')); | |||
| } | |||
| }); | |||
| }); | |||
| // 關帳查詢(明細) | |||
| function check_point_detail(check_no) | |||
| { | |||
| $("#check_point_list_detail").html(""); // -- 清除原內容 -- | |||
| var station_no = $("#check_point_data_"+check_no).data("station_no"); | |||
| var check_time = $("#check_point_data_"+check_no).data("check_time"); | |||
| var check_time_no = $("#check_point_data_"+check_no).data("check_time_no"); | |||
| var check_time_last = $("#check_point_data_"+check_no).data("check_time_last"); | |||
| var check_time_last_no = $("#check_point_data_"+check_no).data("check_time_last_no"); | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>check_point_detail_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: { | |||
| "station_no": station_no, | |||
| "check_time_no": check_time_no, | |||
| "check_time_last_no": check_time_last_no | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| $("#check_point_list_detail_box").hide(); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| $("#check_point_list_detail_time_str_1").text(check_time_last); | |||
| $("#check_point_list_detail_time_str_2").text(check_time); | |||
| $("#check_point_list_detail_box").show(); | |||
| var member_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| tx_no = jdata[idx]['tx_no']; | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", tx_no, "</td>"]); | |||
| member_list = member_list.concat(["<td id='acc_date_", tx_no, "' style='text-align:center;'>", jdata[idx]['acc_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='check_point_list_detail_data_", tx_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-tx_no='", jdata[idx]['tx_no'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-amt='", jdata[idx]['amt'], | |||
| "' data-amt1='", jdata[idx]['amt1'], | |||
| "' data-deposit='", jdata[idx]['deposit'], | |||
| "' data-start_date_last='", jdata[idx]['start_date_last'], | |||
| "' data-end_date='", jdata[idx]['end_date'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-fee_period='", jdata[idx]['fee_period'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| if(jdata[idx]['current_lpr']) | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>", jdata[idx]['current_lpr'], "</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='color:black;text-align:center;'>無</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td id='sdate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_last_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period_last']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='deposit_", tx_no, "' style='text-align:center;'>", jdata[idx]['deposit'], "</td>"]); | |||
| if(jdata[idx]['tx_state'] == 4) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已退租</td>"]); | |||
| } | |||
| else if(jdata[idx]['tx_state'] == 44) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>交易取消</td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='member_tx_check(", tx_no + ");'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;'>已審核</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check(", tx_no + ");'>未通過</button></td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;' id='valid_time_", tx_no, "'>", jdata[idx]['valid_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:left;' id='remarks_", tx_no, "'>", jdata[idx]['remarks'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#check_point_list_detail").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,446 @@ | |||
| <!-- ----- 會員加入填寫資料 ----- --> | |||
| <div data-items="member_add" class="row" style="display:none;"><!-- 會員加入填寫資料 --> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div id="member_data_type" class="panel-heading">新增會員資料</div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <!--form id="member_add" role="form" method="post" data-src="action::APP_URL::member_add"--> | |||
| <form id="member_add" role="form" method="post" data-src="/admins_station.html/member_add"> | |||
| <div class="form-group"> | |||
| <label>*場站</label> | |||
| <select class="form-control" id="station_no_modify" name="station_no"> | |||
| </select> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*車牌號碼</label> | |||
| <input id="ma_lpr" name="lpr" class="form-control" placeholder="限英數字碼" style="text-transform:uppercase" /> | |||
| <input id="ma_old_lpr" name="old_lpr" type="hidden" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>eTag</label> | |||
| <input id="ma_etag" name="etag" class="form-control" placeholder="限英數字碼" style="text-transform:uppercase"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*不足月開始日期(開始日)</label> | |||
| <input id="ma_demonth_start_date" type="datetime" name="demonth_start_date" class="form-control" onchange="calculate_rents_amt();"/> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*不足月結束日期</label> | |||
| <input id="ma_demonth_end_date" type="datetime" name="demonth_end_date" class="form-control" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*足月開始日期</label> | |||
| <input id="ma_start_date" type="datetime" name="start_date" class="form-control" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*足月結束日期(到期日)</label> | |||
| <input id="ma_end_date" type="datetime" name="end_date" class="form-control" /> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label class="select-inline"> | |||
| <button type="button" class="btn btn-default btn-xl btn-primary pull-left" onclick="member_park_time();">*進出場時段</button> | |||
| </label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label class="select-inline">*首期繳期 | |||
| <select class="form-control input-sm" id="fee_period1" name="fee_period1" onClick="calculate_rents_amt();"></select> | |||
| </label> | |||
| <label class="select-inline">*首期租金 (依使用天數拆分) | |||
| <input id="ma_amt1" name="amt1" class="form-control" value="0" onblur="re_amt();"> | |||
| </label> | |||
| <label class="select-inline" id="amt1_max_view"> | |||
| 說明: | |||
| 每日租金( <span id="amt1_max">0</span> 元 | |||
| / <span id="amt1_days_total">0</span> 天) | |||
| * 實際天數 <span id="amt1_days">0</span> 天 | |||
| </label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label class="select-inline">*例行繳期 | |||
| <select class="form-control input-sm" id="fee_period" name="fee_period" onClick="calculate_rents_amt();"></select> | |||
| </label> | |||
| <label class="select-inline">*例行租金 (依使用月數拆分) | |||
| <input id="ma_amt" name="amt" class="form-control" value="0" onblur="re_amt();"> | |||
| </label> | |||
| <!-- 第一版, 按日拆 | |||
| label class="select-inline" id="amt2_max_view"> | |||
| *說明: | |||
| 每日租金( <span id="amt2_max">0</span> 元 | |||
| / <span id="amt2_days_total">0</span> 天) | |||
| * 實際天數 <span id="amt2_days">0</span> 天 | |||
| </label--> | |||
| <label class="select-inline" id="amt2_max_view"> | |||
| 說明: | |||
| 每月租金( <span id="amt2_max">0</span> 元 | |||
| / <span id="amt2_months_total">0</span> 個月) | |||
| * 實際月數 <span id="amt2_months">0</span> 個月 | |||
| </label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label class="select-inline">*會員身份 | |||
| <select class="form-control input-sm" id="member_attr" name="member_attr" onClick="calculate_rents_amt();"></select> | |||
| </label> | |||
| <label class="select-inline">*押金(不列入發票金額) | |||
| <input id="ma_deposit" name="deposit" class="form-control" value="0" onblur="re_amt();"> | |||
| </label> | |||
| <label class="select-inline" id="amt_accrued_view"> | |||
| 應計金額 (原價):<span id="amt_accrued">0</span> | |||
| </label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label class="select-inline" style="color:blue;font-size:18px;" id="amt_tot_view"> | |||
| 租金:<span id="amt_tot">0</span> | |||
| </label> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>合約號碼</label> | |||
| <input id="ma_contract_no" name="contract_no" class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*姓名/公司名稱</label> | |||
| <input id="ma_member_name" name="member_name" class="form-control" style="font-size:48px;height:56px;"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>*手機</label> | |||
| <input id="ma_mobile_no" name='mobile_no' class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>身份證號</label> | |||
| <input id="ma_member_id" name="member_id" class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>會員統一編號</label> | |||
| <input id="ma_member_company_no" name="member_company_no" class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>電話(宅)</label> | |||
| <input id="ma_tel_h" name='tel_h' class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>電話(公)</label> | |||
| <input id="ma_tel_o" name='tel_o' class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>地址</label> | |||
| <input id="ma_addr" name='addr' class="form-control"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <button type="submit" class="btn btn-large btn-success pull-left">存檔</button> | |||
| | |||
| <!--button type="reset" class="btn btn-large btn-cancel">重填</button--> | |||
| <input id="ma_member_no" type="hidden" name="member_no" value="0" /> | |||
| <input id="ma_company_no" type="hidden" name="company_no" value="<?=$company_no?>"/> | |||
| <input id="ma_park_time" type="hidden" name="park_time" /> | |||
| <input id="ma_amt_tot" type="hidden" name="amt_tot" /> | |||
| <input id="ma_amt_accrued" type="hidden" name="amt_accrued" /> | |||
| <input id="ma_demonth_start_date_done" type="hidden" name="demonth_start_date_done"/> | |||
| <input id="ma_demonth_end_date_done" type="hidden" name="demonth_end_date_done"/> | |||
| <input id="ma_start_date_done" type="hidden" name="start_date_done"/> | |||
| <input id="ma_end_date_done" type="hidden" name="end_date_done"/> | |||
| <!--input id="ma_fee_period1_done" type="hidden" name="fee_period1_done"/> | |||
| <input id="ma_fee_period_done" type="hidden" name="fee_period_done"/> | |||
| <input id="ma_member_attr_done" type="hidden" name="member_attr_done"/--> | |||
| <input id="ma_refund_transfer_id" type="hidden" name="refund_transfer_id" value="0" /> <!-- 轉租,來源退租編號 --> | |||
| <input id="ma_refund_transfer_discount" type="hidden" name="refund_transfer_discount" value="0" /> <!-- 退租,來源退租折扣金 --> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| <!-- /.col-lg-6 (nested) --> | |||
| </div> | |||
| <!-- /.row (nested) --> | |||
| </div> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- ----- 會員加入填寫資料(結束) ----- --> | |||
| <script> | |||
| // 設定場站資訊 | |||
| for(station_no in st) | |||
| { | |||
| $(new Option(st[station_no],station_no)).appendTo('#station_no_modify'); // 會員修改場站編號 | |||
| } | |||
| // 會員身份類別 | |||
| for(idx in mem_attr) | |||
| { | |||
| $(new Option(mem_attr[idx],idx)).appendTo('#member_attr'); | |||
| } | |||
| // 繳期表(首期) | |||
| for(idx in period_name) | |||
| { | |||
| $(new Option(period_name[idx],idx)).appendTo('#fee_period1'); | |||
| } | |||
| // 繳期表(例行) | |||
| for(idx in period_name) | |||
| { | |||
| $(new Option(period_name[idx],idx)).appendTo('#fee_period'); | |||
| } | |||
| // 設定時段表 | |||
| str = ""; | |||
| for(pt_id in pt) | |||
| { | |||
| str += "<tr>"; | |||
| str += "<td style='text-align:center;'><input type='checkbox' id='pt_id_"+pt_id+"' class='pt_id_checkbox' value='"+pt_id+"' /></td>"; | |||
| str += "<td style='text-align:center;'>"+pt_id+"</td>"; | |||
| str += "<td style='text-align:left;'>"+pt[pt_id]['remarks']+"</td>"; | |||
| str += "</tr>"; | |||
| } | |||
| $("#pt_list").html(str); | |||
| $("#ma_demonth_start_date").datetimepicker({language:"zh-TW",autoclose:true,minView:2,format:"yyyy-mm-dd"}); | |||
| $("#ma_demonth_end_date").datetimepicker({language:"zh-TW",autoclose:true,minView:2,format:"yyyy-mm-dd"}); | |||
| $("#ma_start_date").datetimepicker({language:"zh-TW",autoclose:true,minView:2,format:"yyyy-mm-dd"}); | |||
| $("#ma_end_date").datetimepicker({language:"zh-TW",autoclose:true,minView:2,format:"yyyy-mm-dd"}); | |||
| $("#stop_rents_end_date").datetimepicker({language:"zh-TW",autoclose:true,minView:2,format:"yyyy-mm-dd"}); | |||
| // 會員新增修改 | |||
| $("#member_add").submit(function(event) | |||
| { | |||
| event.preventDefault(); | |||
| // 停車時段 | |||
| $("#ma_park_time").val($('input:checkbox:checked.pt_id_checkbox').map(function(){ return this.value; }).get().join(",")); | |||
| if ($("#ma_member_no").val() == "0") | |||
| { | |||
| if($("#ma_refund_transfer_id").val() == "0") | |||
| { | |||
| $("#ma_old_lpr").val($("#ma_lpr").val()); | |||
| } | |||
| else | |||
| { | |||
| // 轉租 console.log('ma_refund_transfer_id: ' + $("#ma_refund_transfer_id").val()); | |||
| } | |||
| // 新增:檢查必填欄位 | |||
| if ($("#ma_lpr").val() == "" || | |||
| $("#ma_start_date").val() == "" || | |||
| $("#ma_end_date").val() == "" || | |||
| $("#ma_member_name").val() == "" || | |||
| $("#ma_mobile_no").val() == "" || | |||
| $("#ma_park_time").val() == "" | |||
| ) | |||
| { | |||
| alertify_msg("必填欄位不可空白"); | |||
| return false; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| // 修改:檢查必填欄位 | |||
| if ($("#ma_lpr").val() == "" || | |||
| //$("#ma_start_date").val() == "" || | |||
| $("#ma_end_date").val() == "" || | |||
| $("#ma_member_name").val() == "" || | |||
| $("#ma_mobile_no").val() == "" || | |||
| $("#ma_park_time").val() == "" | |||
| ) | |||
| { | |||
| alertify_msg("必填欄位不可空白"); | |||
| return false; | |||
| } | |||
| } | |||
| $("#ma_amt_tot").val($("#amt_tot").text()); | |||
| $("#ma_amt_accrued").val($("#amt_accrued").text()); | |||
| if($("#ma_member_company_no").val() == "") $("#ma_member_company_no").val(0); | |||
| // 禁止直接輸入,補值 | |||
| $("#ma_demonth_end_date_done").val($("#ma_demonth_end_date").val()); | |||
| $("#ma_start_date_done").val($("#ma_start_date").val()); | |||
| $("#ma_end_date_done").val($("#ma_end_date").val()); | |||
| $.ajax | |||
| ({ | |||
| url: APP_URL+"member_add", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: $(this).serialize(), | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| alertify_msg(xhr.responseText); | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| return false; | |||
| }, | |||
| success: function(jdata) | |||
| { | |||
| if(jdata == 'update_error') | |||
| { | |||
| alertify_msg("更新失敗, 請稍候再試"); | |||
| } | |||
| else if(jdata == 'trans_error') | |||
| { | |||
| alertify_msg("操作失敗, 請稍候再試"); | |||
| } | |||
| else if (jdata["member_no"] != "0") | |||
| { | |||
| if(jdata["action_code"] == "A") | |||
| { | |||
| // 新增會員資料, 印發票 | |||
| xvars["rents"] = Array(); | |||
| xvars["rents"]["tx_no"] = jdata["tx_no"]; | |||
| xvars["rents"]["tx_bill_no"] = jdata["tx_bill_no"]; | |||
| xvars["rents"]["station_no"] = station_no; | |||
| xvars["rents"]["member_no"] = jdata["member_no"]; | |||
| xvars["rents"]["member_company_no"] = $("#ma_member_company_no").val(); | |||
| xvars["rents"]["company_no"] = company_no; | |||
| xvars["rents"]["fee_period"] = $("#fee_period").val(); | |||
| xvars["rents"]["amt"] = parseInt($("#ma_amt").val()); | |||
| xvars["rents"]["amt1"] = parseInt($("#ma_amt1").val()); | |||
| xvars["rents"]["invoice_amt"] = jdata["invoice_amt"]; | |||
| xvars["rents"]["remain_amt"] = jdata["remain_amt"]; | |||
| xvars["rents"]["period_3_amt"] = jdata["period_3_amt"]; | |||
| xvars["rents"]["amt_discount"] = jdata["amt_discount"]; | |||
| $("#first_rents_name").text($("#ma_member_name").val()+" ("+ $("#ma_lpr").val() +")"); | |||
| $("#first_rents_station_name").text(st[xvars["rents"]["station_no"]]); | |||
| $("#first_rents_start_date").text($("#ma_demonth_start_date").val()); // 上期開始日 | |||
| $("#first_rents_end_date").text($("#ma_end_date").val()); // 本期結束日 | |||
| if(xvars["rents"]["amt_discount"] == $("#ma_deposit").val()) | |||
| { | |||
| $("#first_rents_deposit").text($("#ma_deposit").val() + "元 (押金由上期折扺)"); | |||
| } | |||
| else if(xvars["rents"]["amt_discount"] > 0) | |||
| { | |||
| $("#first_rents_deposit").text($("#ma_deposit").val() + "元 (可扣除" + xvars["rents"]["amt_discount"] + "元,多退少補)"); | |||
| } | |||
| else | |||
| { | |||
| $("#first_rents_deposit").text($("#ma_deposit").val() + "元"); | |||
| } | |||
| $("#first_rents_period").text(period_name[xvars["rents"]["fee_period"]]); | |||
| $("#first_rents_amt").text(xvars["rents"]["amt"] + "元"); | |||
| $("#first_rents_amt1").text(xvars["rents"]["amt1"] + "元"); | |||
| $("#first_rents_invoice_amt").text(xvars["rents"]["invoice_amt"] + "元"); | |||
| $("#first_rents_remain_desc").html(get_invoice_desc(xvars["rents"]["amt"], xvars["rents"]["amt1"], xvars["rents"]["invoice_amt"], xvars["rents"]["remain_amt"], xvars["rents"]["period_3_amt"])); // 發票說明 | |||
| $("#first_rents_company_no").val(xvars["rents"]["company_no"]); // 賣方統編 | |||
| if(xvars["rents"]["member_company_no"] == 0 || xvars["rents"]["member_company_no"] == '') | |||
| { | |||
| $("#first_rents_member_company_no").val(""); | |||
| } | |||
| else | |||
| { | |||
| $("#first_rents_member_company_no").val(xvars["rents"]["member_company_no"]); // 買方統編 | |||
| } | |||
| $("#first_rents_dialog").modal({backdrop:false,keyboard:false}); | |||
| } | |||
| else if(jdata["action_code"] == "U") | |||
| { | |||
| // 更新會員資料 | |||
| alertify_msg("月租資料存檔完成 !"); | |||
| } | |||
| else | |||
| { | |||
| // 未知 | |||
| alertify_msg("未知的操作.."); | |||
| } | |||
| show_item('member_query', 'member_query'); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg(jdata["msg"]); | |||
| } | |||
| } | |||
| }); | |||
| }); | |||
| // 計算租金 | |||
| function calculate_rents_amt() | |||
| { | |||
| // 計算月租金額 | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"calculate_rents_amt", | |||
| dataType:"json", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "cmd":"calculate_rents_amt", | |||
| "station_no":station_no, | |||
| "demonth_start_date":$("#ma_demonth_start_date").val(), | |||
| "member_attr":$("#member_attr").val(), | |||
| "period_1":$("#fee_period1").val(), // 首期繳期 | |||
| "period_2":$("#fee_period").val() // 例行繳期 | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| $("#ma_demonth_start_date").val(jdata["demonth_start_date"]); | |||
| $("#ma_demonth_end_date").val(jdata["demonth_end_date"]).prop("disabled",true); | |||
| $("#ma_start_date").val(jdata["start_date"]).prop("disabled",true); | |||
| $("#ma_end_date").val(jdata["end_date"]).prop("disabled",true); | |||
| $("#amt1_max").text(jdata["demonth_amt"]); | |||
| $("#amt1_days").text(jdata["demonth_days"]); | |||
| $("#amt1_days_total").text(jdata["demonth_days_total"]); | |||
| $("#amt1_max_view").show(); | |||
| // 第一版: 依天數拆分 | |||
| /* | |||
| $("#amt2_max").text(jdata["amonth_amt"]); | |||
| $("#amt2_days").text(jdata["amonth_days"]); | |||
| $("#amt2_days_total").text(jdata["amonth_days_total"]); | |||
| $("#amt2_max_view").show(); | |||
| */ | |||
| // 第二版: 依月數拆分 2017-02-13 updated | |||
| $("#amt2_max").text(jdata["amonth_amt"]); | |||
| $("#amt2_months").text(jdata["amonth_months"]); | |||
| $("#amt2_months_total").text(jdata["amonth_months_total"]); | |||
| $("#amt2_max_view").show(); | |||
| $("#ma_amt1").val(jdata["rents_amt1"]); | |||
| $("#ma_amt").val(jdata["rents_amt2"]); | |||
| $("#ma_deposit").val(jdata["rents_deposit"]); | |||
| $("#amt_accrued").text(parseInt(jdata["rents_amt1"])+parseInt(jdata["rents_amt2"])+parseInt(jdata["rents_deposit"])); | |||
| $("#ma_amt_accrued").val($("#amt_accrued").text()); | |||
| re_amt(true); | |||
| } | |||
| }); | |||
| } | |||
| // 重新計算實際租金 | |||
| function re_amt(show_sccured_view=false) | |||
| { | |||
| if ($("#ma_amt1").val() == "") $("#ma_amt1").val(0); | |||
| if ($("#ma_amt").val() == "") $("#ma_amt").val(0); | |||
| if ($("#ma_deposit").val() == "") $("#ma_deposit").val(0); | |||
| $("#amt_tot").text(parseInt($("#ma_amt1").val())+parseInt($("#ma_amt").val())+parseInt($("#ma_deposit").val())); | |||
| //$("#amt_tot").text(parseInt($("#ma_amt1").val())+parseInt($("#ma_amt").val())); // 無押金 | |||
| $("#ma_amt_tot").val($("#amt_tot").text()); | |||
| $("#amt_tot_view").show(); | |||
| if(show_sccured_view) | |||
| { | |||
| $("#amt_accrued_view").show(); | |||
| } | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,268 @@ | |||
| <?php /* ----- 電子發票查詢 ----- */?> | |||
| <div data-items="member_invoice_report" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| <form id="member_invoice_form" role="form"> | |||
| <label class="input-inline" for="member_invoice_search_station_no_modify">電子發票查詢</label> | |||
| <select id="member_invoice_search_station_no_modify" name="member_invoice_search_station_no_modify"></select> | |||
| <span class="input-inline" >,</span> | |||
| <label class="input-inline" for="member_invoice_search_time_from">開始</label> | |||
| <input type="text" class="date" id="member_invoice_search_time_from" name="member_invoice_search_time_from"> | |||
| <span class="input-inline" > ~ </span> | |||
| <label class="input-inline" for="member_invoice_search_time_to">結束</label> | |||
| <input type="text" class="date" id="member_invoice_search_time_to" name="member_invoice_search_time_to"> | |||
| | |||
| <label class="input-inline"><input type="submit" value="查詢" /></label> | |||
| </form> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">建立時間</th> | |||
| <th style="text-align:center;">車牌號碼</th> | |||
| <th style="text-align:center;">發票金額</th> | |||
| <th style="text-align:center;">發票號碼</th> | |||
| <th style="text-align:center;">發票統編</th> | |||
| <th style="text-align:center;">通知信箱</th> | |||
| <th style="text-align:center;">通知簡訊</th> | |||
| <th style="text-align:center;">備註</th> | |||
| <th style="text-align:center;">操作</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_invoice_list" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 關帳查詢(結束) ----- */?> | |||
| <script> | |||
| // 設定場站資訊 | |||
| for(station_no in st) | |||
| { | |||
| $(new Option(st[station_no],station_no)).appendTo('#member_invoice_search_station_no_modify'); // 場站 | |||
| } | |||
| var initMinDate = moment("00:00", "HH:mm").subtract(10, 'days'); | |||
| var initMaxDate = moment("23:59", "HH:mm"); | |||
| var searchTimeFromPicker = $( "#member_invoice_search_time_from" ); | |||
| var searchTimeToPicker = $( "#member_invoice_search_time_to" ); | |||
| // 日期 | |||
| /* DatePicker 設定start */ | |||
| searchTimeFromPicker.datetimepicker({ | |||
| dateFormat: 'yy-mm-dd', | |||
| maxDate: '0', | |||
| changeMonth: true, | |||
| numberOfMonths: 1, | |||
| timeFormat: "HH:mm", | |||
| addSliderAccess: true, | |||
| sliderAccessArgs: { touchonly: false }, | |||
| onClose: function( selectedDate ) { | |||
| searchTimeToPicker.datetimepicker( "option", "minDate", selectedDate ); | |||
| console.log("search_time_from: " + selectedDate); | |||
| } | |||
| }); | |||
| searchTimeFromPicker.datetimepicker('setDate', initMinDate.toDate()); | |||
| searchTimeToPicker.datetimepicker({ | |||
| dateFormat: 'yy-mm-dd', | |||
| maxDate: '0', | |||
| changeMonth: true, | |||
| numberOfMonths: 1, | |||
| timeFormat: "HH:mm", | |||
| addSliderAccess: true, | |||
| sliderAccessArgs: { touchonly: false }, | |||
| onClose: function( selectedDate ) { | |||
| searchTimeFromPicker.datetimepicker( "option", "maxDate", selectedDate ); | |||
| console.log("search_time_to: " + selectedDate); | |||
| } | |||
| }); | |||
| searchTimeToPicker.datetimepicker('setDate', initMaxDate.toDate()); | |||
| /* DatePicker 設定end */ | |||
| $("#member_invoice_form").submit(function(event) | |||
| { | |||
| event.preventDefault(); | |||
| var station_no = $("#member_invoice_search_station_no_modify").val(); | |||
| var member_invoice_time_from = $( "#member_invoice_search_time_from" ).val(); | |||
| var member_invoice_time_to = $( "#member_invoice_search_time_to" ).val(); | |||
| $("#member_invoice_list").html(""); | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"member_invoice_query", | |||
| dataType:"json", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no": station_no, | |||
| "member_invoice_time_from": member_invoice_time_from, | |||
| "member_invoice_time_to": member_invoice_time_to | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| var member_invoice_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| order_no = jdata[idx]['order_no']; | |||
| member_invoice_list = member_invoice_list.concat(["<td id='member_invoice_data_", idx, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-order_no='", jdata[idx]['order_no'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-tx_time='", jdata[idx]['tx_time'], | |||
| "' data-tx_type='", jdata[idx]['tx_type'], | |||
| "' data-invoice_no='", jdata[idx]['invoice_no'], | |||
| "' data-invoice_remark='", jdata[idx]['invoice_remark'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-amt='", jdata[idx]['amt'], | |||
| "' data-email='", jdata[idx]['email'], | |||
| "' data-mobile='", jdata[idx]['mobile'], | |||
| "' data-status='", jdata[idx]['status'], | |||
| "' style='text-align:left;'>", jdata[idx]['tx_time'], "</td>"]); | |||
| member_invoice_list = member_invoice_list.concat(["<td style='text-align:center;'>", jdata[idx]['lpr'], "</td>"]); | |||
| member_invoice_list = member_invoice_list.concat(["<td style='text-align:center;'>", jdata[idx]['amt'], "</td>"]); | |||
| member_invoice_list = member_invoice_list.concat(["<td style='text-align:center;'>", jdata[idx]['invoice_no'], "</td>"]); | |||
| member_invoice_list = member_invoice_list.concat(["<td style='text-align:center;'>", jdata[idx]['company_no'], "</td>"]); | |||
| member_invoice_list = member_invoice_list.concat(["<td style='text-align:left;'>", jdata[idx]['email'], "</td>"]); | |||
| member_invoice_list = member_invoice_list.concat(["<td style='text-align:left;'>", jdata[idx]['mobile'], "</td>"]); | |||
| if(jdata[idx]['status'] == 104) | |||
| { | |||
| member_invoice_list = member_invoice_list.concat(["<td style='text-align:left;color:red;'>已作廢</td>"]); | |||
| member_invoice_list = member_invoice_list.concat(["<td style='text-align:center;'></td>"]); | |||
| } | |||
| else if(jdata[idx]['status'] == 105) | |||
| { | |||
| member_invoice_list = member_invoice_list.concat(["<td style='text-align:left;'>已折讓</td>"]); | |||
| member_invoice_list = member_invoice_list.concat(["<td style='text-align:center;'></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_invoice_list = member_invoice_list.concat(["<td style='text-align:left;'></td>"]); | |||
| member_invoice_list = member_invoice_list.concat(["<td style='text-align:center;'><select id='member_invoice_sel_", idx,"' onclick='member_invoice_modify(", idx, "); '><option value='choice'>請選擇</option><option value='void'>作廢</option></select></td>"]); | |||
| } | |||
| member_invoice_list = member_invoice_list.concat(["</tr>"]); | |||
| } | |||
| $("#member_invoice_list").append(member_invoice_list.join('')); | |||
| } | |||
| }); | |||
| }); | |||
| // 電子發票選項 | |||
| function member_invoice_modify(idx) | |||
| { | |||
| select_item = $("#member_invoice_sel_" + idx).val(); | |||
| $("#member_invoice_sel_"+idx+" option[value='choice']").prop("selected", true); | |||
| // 已超過一天禁止操作 | |||
| if(moment().subtract(1, 'days').isAfter($("#member_invoice_data_"+idx).data("tx_time"))) | |||
| { | |||
| alertify_msg("已逾時,請通知營管處理。。"); | |||
| return false; | |||
| } | |||
| // 建立電子發票資訊 | |||
| xvars["invoice"] = Array(); | |||
| xvars["invoice"]["station_no"] = $("#member_invoice_data_"+idx).data("station_no"); | |||
| xvars["invoice"]["invoice_no"] = $("#member_invoice_data_"+idx).data("invoice_no"); | |||
| xvars["invoice"]["order_no"] = $("#member_invoice_data_"+idx).data("order_no"); | |||
| switch(select_item) | |||
| { | |||
| // 作廢發票 | |||
| case "void": | |||
| invoice_void(); | |||
| break; | |||
| // 折讓發票 | |||
| case "allowance": | |||
| alertify_log('開發中..'); | |||
| break; | |||
| default: // -- 其餘選擇(忽略不處理) -- | |||
| return false; | |||
| } | |||
| } | |||
| // 作廢發票 | |||
| function invoice_void() | |||
| { | |||
| var ok_msg = "作廢發票 " + xvars["invoice"]["invoice_no"]; | |||
| alertify.set({ | |||
| buttonFocus: "cancel", | |||
| labels: { | |||
| cancel : "取消", | |||
| ok : ok_msg | |||
| } | |||
| }); | |||
| alertify.confirm("確定 " + ok_msg + " 嗎?", function (e){ | |||
| if (e) { | |||
| // 執行作廢 | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"member_invoice_void", | |||
| dataType:"text", | |||
| type:"post", | |||
| data: | |||
| { | |||
| "station_no":xvars["invoice"]["station_no"], | |||
| "invoice_no":xvars["invoice"]["invoice_no"], | |||
| "order_no":xvars["invoice"]["order_no"], | |||
| }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| alertify_msg(xhr.responseText); | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata == "ok") | |||
| { | |||
| alertify_msg("發票作廢完成 ! "); | |||
| $("#member_invoice_form").submit(); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg("操作失敗。。" + jdata); | |||
| } | |||
| } | |||
| }); | |||
| delete xvars["invoice"]; | |||
| } else { | |||
| alertify_log('操作已取消'); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,126 @@ | |||
| <?php /* ----- 會員清單 ----- */?> | |||
| <div data-items="member_query_all" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 會員清單 <button class='btn btn-default' style='font-size:16px;' onclick='export_members();'>匯出 excel</button> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">車號</th> | |||
| <th style="text-align:left;">姓名</th> | |||
| <th style="text-align:center;">手機</th> | |||
| <th style="text-align:center;">開始日</th> | |||
| <th style="text-align:center;">結束日</th> | |||
| <th style="text-align:center;">繳期</th> | |||
| <th style="text-align:center;">身份</th> | |||
| <!--th style="text-align:center;">租金</th--> | |||
| <th style="text-align:center;">停權</th> | |||
| <!--th style="text-align:center;">狀態</th--> | |||
| <th style="text-align:center;">有效期限</th> | |||
| <!--th style="text-align:center;">備註</th--> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_list_all" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 會員清單(結束) ----- */?> | |||
| <script> | |||
| // 載入 | |||
| function reload_member_query_all() | |||
| { | |||
| $("#member_list_all").html("");<?php /* 清除原內容 */ ?> | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>member_query_all", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: {}, | |||
| success: function(jdata) | |||
| { | |||
| var member_list = []; | |||
| for(idx in jdata) | |||
| { | |||
| mno = jdata[idx]['member_no']; | |||
| member_list = member_list.concat([ | |||
| "<tr><td id='member_query_all_lpr_", mno, "' style='text-align:left; '>", jdata[idx]['lpr'], "</td>", | |||
| "<td id='name_", mno, "' style='text-align:left; '>", jdata[idx]['member_name'], "</td>", | |||
| "<td id='mobile_", mno, "' style='text-align:center; '>", jdata[idx]['mobile_no'], "</td>", | |||
| "<td id='sdate_", mno, "' style='text-align:center; '>", jdata[idx]['start_date'], "</td>", | |||
| "<td id='edate_", mno, "' style='text-align:center; '>", jdata[idx]['end_date'], "</td>", | |||
| "<td id='fee_period_", mno, "' style='text-align:center; '>", period_name[jdata[idx]['fee_period']], "</td>", | |||
| "<td id='member_attr_", mno, "' style='text-align:center; '>", mem_attr[jdata[idx]['member_attr']], "</td>", | |||
| //"<td id='contract_", mno, "' style='text-align:center; '>", jdata[idx]['contract_no'], "</td>", | |||
| //"<td id='etag_", mno, "' style='text-align:center; '>", jdata[idx]['etag'], "</td>", | |||
| //"<td id='amt_", mno, "' style='text-align:center; '>", jdata[idx]['amt'], "</td>", | |||
| //"<td style='text-align:center, '><select id='sel_", mno, "' onChange='member_modify(", mno, "); '><option value='choice'>請選擇</option><option value='modify'>修改</option><option value='delete'>刪除</option></select></td>", | |||
| //"</tr>" | |||
| ]); | |||
| if(jdata[idx]['suspended'] == "1") | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><input type='checkbox' checked id='suspended_", mno, "' disabled/></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><input type='checkbox' id='suspended_", mno, "' disabled/></td>"]); | |||
| } | |||
| /* | |||
| if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;' id='verify_state_", mno, "'><button class='btn btn-default' onclick='member_tx_check(0);'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;' id='verify_state_", mno, "'>審核通過</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:center;' id='verify_state_", mno, "'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check(0);'>未通過</button></td>"]); | |||
| } | |||
| */ | |||
| if(jdata[idx]['valid_time'] < jdata[idx]['end_date']) | |||
| { | |||
| //member_list = member_list.concat(["<td style='color:red;text-align:left;' id='valid_time_", mno, "'>", jdata[idx]['valid_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;' id='valid_time_", mno, "'><button class='btn' style='color:red;' onclick='member_query_all_tx_check(0);'>將於 ", jdata[idx]['valid_time'], " 到期</button></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:left;' id='valid_time_", mno, "'>結束日 ", jdata[idx]['end_date'], " 到期</td>"]); | |||
| } | |||
| //member_list = member_list.concat(["<td style='color:blue;text-align:center;' id='remarks_", mno, "'>", jdata[idx]['remarks'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#member_list_all").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| // 查核作業 | |||
| function member_query_all_tx_check(tx_no) | |||
| { | |||
| alertify_msg("請通知總公司營管!<br/><br/>電話:02-27057716 分機 119<br/><br/>"); | |||
| } | |||
| // 匯出報表 | |||
| function export_members() | |||
| { | |||
| var newWindow = window.open("404", '_blank'); | |||
| newWindow.location.href = APP_URL+"export_members"; | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,133 @@ | |||
| <?php /* ----- 交易查核總覽 ----- */?> | |||
| <div data-items="member_tx_check_query" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 待審核清單 | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <!--th style="text-align:left;">場站</th--> | |||
| <th style="text-align:center;">入帳日</th> | |||
| <th style="text-align:left;">入帳車號</th> | |||
| <th style="text-align:left;">目前車號</th> | |||
| <th style="text-align:center;">會員開始日</th> | |||
| <th style="text-align:center;">上期繳期</th> | |||
| <th style="text-align:center;">上期結束日</th> | |||
| <th style="text-align:center;">上期租金</th> | |||
| <th style="text-align:center;">本期繳期</th> | |||
| <th style="text-align:center;">本期開始日</th> | |||
| <th style="text-align:center;">本期結束日</th> | |||
| <th style="text-align:center;">本期租金</th> | |||
| <!--th style="text-align:center;">發票開立</th--> | |||
| <th style="text-align:center;">審核狀態</th> | |||
| <th style="text-align:center;">有效期限</th> | |||
| <th style="text-align:center;">備註</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_tx_check" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 交易查核總覽(結束) ----- */?> | |||
| <script> | |||
| // 載入 | |||
| function reload_member_tx_check_query() | |||
| { | |||
| $("#member_tx_check").html(""); // -- 清除原內容 -- | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>member_tx_check_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: {}, | |||
| success:function(jdata) | |||
| { | |||
| var member_list = ["<tr>"]; | |||
| for(idx in jdata) | |||
| { | |||
| tx_no = jdata[idx]['tx_no']; | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", tx_no, "</td>"]); | |||
| //member_list = member_list.concat(["<td style='text-align:center;'>", st[jdata[idx]['station_no']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='acc_date_", tx_no, "' style='text-align:center;'>", jdata[idx]['acc_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='member_tx_lpr_", tx_no, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-tx_no='", jdata[idx]['tx_no'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-amt='", jdata[idx]['amt'], | |||
| "' data-amt1='", jdata[idx]['amt1'], | |||
| "' data-deposit='", jdata[idx]['deposit'], | |||
| "' data-start_date_last='", jdata[idx]['start_date_last'], | |||
| "' data-end_date='", jdata[idx]['end_date'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-fee_period='", jdata[idx]['fee_period'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| if(jdata[idx]['current_lpr']) | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>", jdata[idx]['current_lpr'], "</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='current_lpr_", tx_no, "' style='text-align:center;'>已刪除</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td id='sdate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_last_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period_last']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt'], "</td>"]); | |||
| //member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='show_member_tx_bill(", tx_no ,");'>瀏覽</button></td>"]); | |||
| if(jdata[idx]['tx_state'] == 4) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已退租</td>"]); | |||
| } | |||
| else if(jdata[idx]['tx_state'] == 44) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>交易取消</td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='member_tx_check_query_tx_check(", tx_no + ");'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;'>已審核</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check_query_tx_check(", tx_no + ");'>未通過</button></td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;' id='valid_time_", tx_no, "'>", jdata[idx]['valid_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:left;' id='remarks_", tx_no, "'>", jdata[idx]['remarks'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#member_tx_check").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| // 查核作業 | |||
| function member_tx_check_query_tx_check(tx_no) | |||
| { | |||
| alertify_msg("請通知總公司營管!<br/><br/>電話:02-27057716 分機 119<br/><br/>"); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,772 @@ | |||
| <?php /* ----- 交易退款總覽 ----- */?> | |||
| <div data-items="member_tx_refund_query" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 退租查詢 | |||
| <form id="member_tx_refund_form" role="form"> | |||
| <div class="form-group"> | |||
| <label class="select-inline" for="station_refund_select"> | |||
| <select class="form-control" id="station_refund_select"> | |||
| </select> | |||
| </label> | |||
| <label class="radio-inline"><input type="radio" name="q_item" value="lpr" checked />車號</label> | |||
| <label class="input-inline"> <input type="text" id="q_refund_str" placeholder="關鍵字" /></label> | |||
| <label class="input-inline"><input type="submit" value="查詢" /></label> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:center;">代號</th> | |||
| <th style="text-align:center;">車號</th> | |||
| <th style="text-align:center;">總金額(不含押金)</th> | |||
| <th style="text-align:center;">押金</th> | |||
| <th style="text-align:center;">租約結束時間</th> | |||
| <th style="text-align:center;">結算金額</th> | |||
| <th style="text-align:center;">結算操作</th> | |||
| <th style="text-align:center;">轉租操作</th> | |||
| <th style="text-align:center;">操作狀態</th> | |||
| <th style="text-align:center;">退租發票</th> | |||
| <th style="text-align:center;">發票狀態</th> | |||
| <th style="text-align:center;">建立時間</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_tx_refund" style="font-size:18px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| <div id="member_tx_refund_list_detail_box" class="col-lg-12" style="display:none;"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 交易記錄(車號:<span id='member_tx_refund_list_detail_lpr'></span>,退租時間:<span id='member_tx_refund_list_detail_refund_time'></span>) | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">代號</th> | |||
| <th style="text-align:center;">入帳日</th> | |||
| <th style="text-align:left;">車號</th> | |||
| <th style="text-align:center;">會員開始日</th> | |||
| <th style="text-align:center;">上期繳期</th> | |||
| <th style="text-align:center;">上期結束日</th> | |||
| <th style="text-align:center;">上期租金</th> | |||
| <th style="text-align:center;">本期繳期</th> | |||
| <th style="text-align:center;">本期開始日</th> | |||
| <th style="text-align:center;">本期結束日</th> | |||
| <th style="text-align:center;">本期租金</th> | |||
| <th style="text-align:center;">發票時間</th> | |||
| <th style="text-align:center;">買方統編</th> | |||
| <th style="text-align:center;">賣方統編</th> | |||
| <th style="text-align:center;">發票金額</th> | |||
| <th style="text-align:center;">發票字軌</th> | |||
| <th style="text-align:center;">發票號碼</th> | |||
| <th style="text-align:center;">發票種類</th> | |||
| <th style="text-align:center;">狀態</th> | |||
| <th style="text-align:center;">待辦金額</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="member_tx_refund_list_detail" style="font-size:16px;"></tbody> | |||
| </table> | |||
| </div><!-- ----- end of dataTable_wrapper ----- --> | |||
| </div><!-- ----- end of panel-body ----- --> | |||
| </div><!-- ----- end of panel panel-default ----- --> | |||
| </div><!-- ----- end of col-lg-12 ----- --> | |||
| </div> | |||
| <?php /* ----- 交易退款總覽(結束) ----- */?> | |||
| <script> | |||
| // 設定場站資訊 | |||
| for(station_no in st) | |||
| { | |||
| $(new Option(st[station_no],station_no)).appendTo('#station_refund_select'); // 會員退租場站編號 | |||
| } | |||
| // 退租查詢 | |||
| $("#member_tx_refund_form").submit(function(e) | |||
| { | |||
| e.preventDefault(); | |||
| if ($("#q_refund_str").val() == "") | |||
| { | |||
| alertify_log("請填寫查詢關鍵字.."); | |||
| return false; | |||
| } | |||
| $("#member_tx_refund").html(""); // clean all | |||
| $("#member_tx_refund_list_detail").html(""); | |||
| $("#member_tx_refund_list_detail_box").hide(); | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>member_tx_refund_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data:{"station_no":$("#station_refund_select").val(), "q_item":$("input:radio:checked[name=q_item]").val(), "q_str":$("#q_refund_str").val()}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| var member_list = ['<tr>']; | |||
| for(idx in jdata) | |||
| { | |||
| var refund_tot_amt = parseInt(jdata[idx]['refund_tot_amt']); | |||
| var refund_deposit = parseInt(jdata[idx]['refund_deposit']); | |||
| var refund_amt = parseInt(jdata[idx]['refund_amt']); | |||
| member_refund_id = jdata[idx]['member_refund_id']; | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['member_refund_id'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='member_tx_refund_query_lpr_", member_refund_id, | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-refund_amt='", refund_amt, | |||
| "' data-refund_deposit='", refund_deposit, | |||
| "' data-refund_tot_amt='", refund_tot_amt, | |||
| "' data-refund_time='", jdata[idx]['refund_time'], | |||
| "' data-refund_state='", jdata[idx]['refund_state'], | |||
| "' data-dismiss_state='", jdata[idx]['dismiss_state'], | |||
| "' data-create_time='", jdata[idx]['create_time'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| if(refund_amt >= 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", refund_amt, " 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;color:red;'>補繳 ", -refund_amt, " 元</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", refund_deposit, " 元</td>"]); | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['refund_time'], "</td>"]); | |||
| // a.結算描述 | |||
| if(refund_tot_amt >= refund_deposit) | |||
| { | |||
| // a.1 總金額,超過押金 | |||
| member_list = member_list.concat(["<td style='text-align:left;color:green;'>", | |||
| "可轉移押金", refund_deposit, "元, 共可退", refund_tot_amt, " 元</td>"]); | |||
| } | |||
| else if(refund_tot_amt >= 0) | |||
| { | |||
| // a.2 總金額,未達押金 | |||
| member_list = member_list.concat(["<td style='text-align:left;color:blue;'>", | |||
| "扣除部份押金後,共可退", refund_tot_amt, " 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| // a.3 總金額需補繳 | |||
| member_list = member_list.concat(["<td style='color:red;text-align:left;color:red;'>", | |||
| "扣除所有押金後,需補繳 ", -refund_tot_amt, " 元</td>"]); | |||
| } | |||
| // b.結算描述操作 | |||
| if(jdata[idx]['dismiss_state'] == 0) | |||
| { | |||
| // b.1 剛退租 | |||
| member_list = member_list.concat(["<td style='text-align:left;'>"]); | |||
| if(refund_tot_amt >= refund_deposit) | |||
| { | |||
| // b.1.1 剛退租, 押金保留,退還剩餘金額 | |||
| member_list = member_list.concat(["<button class='btn btn-default' onclick='member_refund_keep_deposit(", member_refund_id ,");'>退還", refund_amt, "元,押金保留</button>"]); | |||
| } | |||
| else | |||
| { | |||
| // b.1.2 剛退租, 結清所有金額 | |||
| member_list = member_list.concat(["<button class='btn btn-default' onclick='member_refund_dismiss_all(", member_refund_id ,");'>結清所有金額</button>"]); | |||
| } | |||
| member_list = member_list.concat(["</td>"]); | |||
| member_list = member_list.concat(["<td style='text-align:left;'></td>"]); | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>未結清</td>"]); | |||
| } | |||
| else if(jdata[idx]['dismiss_state'] == 1) | |||
| { | |||
| // b.2 已轉租 | |||
| member_list = member_list.concat(["<td style='text-align:left;'></td>"]); | |||
| member_list = member_list.concat(["<td style='text-align:left;'></td>"]); | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;'>已轉租</td>"]); | |||
| } | |||
| else if(jdata[idx]['dismiss_state'] == 10) | |||
| { | |||
| // b.3 尚餘押金, 結清所有金額 或 轉租 | |||
| member_list = member_list.concat(["<td style='text-align:left;'>"]); | |||
| member_list = member_list.concat(["<button class='btn btn-default' onclick='member_refund_keep_deposit_dismiss_all(", member_refund_id ,");'>退還押金</button>"]); | |||
| member_list = member_list.concat(["</td>"]); | |||
| member_list = member_list.concat(["<td style='text-align:left;'><button class='btn btn-default' onclick='member_refund_transfer(", member_refund_id ,");'>轉租</button></td>"]); | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:center;'>待退押金</td>"]); | |||
| } | |||
| else if(jdata[idx]['dismiss_state'] == 100) | |||
| { | |||
| // b.4 已結清 | |||
| member_list = member_list.concat(["<td style='text-align:left;'></td>"]); | |||
| member_list = member_list.concat(["<td style='text-align:left;'></td>"]); | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已結清</td>"]); | |||
| } | |||
| else | |||
| { | |||
| // b.z 未知 | |||
| member_list = member_list.concat(["<td style='text-align:left;'></td>"]); | |||
| member_list = member_list.concat(["<td style='text-align:left;'></td>"]); | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>未定義</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='show_member_refund_detail(", member_refund_id ,");'>瀏覽</button></td>"]); | |||
| // c. 發票狀態 | |||
| if(jdata[idx]['refund_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:center;'>待確認</td>"]); | |||
| } | |||
| else if(jdata[idx]['refund_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>待補開</td>"]); | |||
| } | |||
| else if(jdata[idx]['refund_state'] == 2) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>待折讓</td>"]); | |||
| } | |||
| else if(jdata[idx]['refund_state'] == 100) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已完成</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'>未定義</td>"]); | |||
| } | |||
| member_list = member_list.concat(["<td style='text-align:center;'>", jdata[idx]['create_time'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#member_tx_refund").append(member_list.join('')); | |||
| } | |||
| }); | |||
| }); | |||
| // 押金保留,結清其它金額 | |||
| function member_refund_keep_deposit(member_refund_id) | |||
| { | |||
| var station_no = $("#member_tx_refund_query_lpr_"+member_refund_id).data("station_no"); | |||
| var refund_amt = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_amt"); | |||
| var refund_deposit = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_deposit"); | |||
| var meta_str_1 = "已退還金額 " + refund_amt + " 元"; | |||
| var meta_str_2 = "未退還金額 " + refund_deposit + " 元(押金)"; | |||
| var msg = "注意!!請先確認以下事項:<br/><br/>" + | |||
| "1. 此用戶," + meta_str_1 + "<br/>" + | |||
| "2. 此用戶," + meta_str_2 + "<br/>" + | |||
| "<br/>※ 此操作完成後,才能進行轉租操作!**"; | |||
| ajax_member_refund_dismiss('member_refund_keep_deposit', member_refund_id, msg); | |||
| } | |||
| // 押金保留,結清所有金額 | |||
| function member_refund_keep_deposit_dismiss_all(member_refund_id) | |||
| { | |||
| var station_no = $("#member_tx_refund_query_lpr_"+member_refund_id).data("station_no"); | |||
| var refund_tot_amt = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_tot_amt"); | |||
| var refund_deposit = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_deposit"); | |||
| var meta_str = "已退還押金 " + refund_deposit + " 元,合計金額共" + refund_tot_amt + '元,已全數退還完畢!' | |||
| var msg = "注意!!請先確認以下事項:<br/><br/>" + | |||
| "1. 此用戶," + meta_str + "<br/>" + | |||
| "2. 此用戶,與本場站互不相欠<br/>" + | |||
| "<br/>※ 以上兩點都必需確認完成,才結清!**" + | |||
| "<br/>※ 結清後,將無法進行任何轉租操作!**"; | |||
| ajax_member_refund_dismiss('member_refund_dismiss_all', member_refund_id, msg); | |||
| } | |||
| // 結清所有金額 | |||
| function member_refund_dismiss_all(member_refund_id) | |||
| { | |||
| var station_no = $("#member_tx_refund_query_lpr_"+member_refund_id).data("station_no"); | |||
| var refund_tot_amt = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_tot_amt"); | |||
| var meta_str = (refund_tot_amt > 0) ? ('總待退金額共:' + refund_tot_amt + '元,己全數退還!') : ('需補繳金額共:' + -refund_tot_amt + '元,已全數補繳!'); | |||
| var msg = "注意!!請先確認以下兩點事項:<br/><br/>" + | |||
| "1. 此用戶," + meta_str + "<br/>" + | |||
| "2. 此用戶,已無任何押金留在本場站<br/>" + | |||
| "<br/>※ 以上兩點都必需確認完成,才結清!**" + | |||
| "<br/>※ 結清後,將無法進行任何轉租操作!**"; | |||
| ajax_member_refund_dismiss('member_refund_dismiss_all', member_refund_id, msg); | |||
| } | |||
| // 結清 (ajax) | |||
| function ajax_member_refund_dismiss(cmd, member_refund_id, msg) | |||
| { | |||
| var station_no = $("#member_tx_refund_query_lpr_"+member_refund_id).data("station_no"); | |||
| alertify.set({ | |||
| buttonFocus: "cancel", | |||
| labels: { | |||
| ok : "確認完成", | |||
| cancel : "取消" | |||
| } | |||
| }); | |||
| alertify.confirm( | |||
| msg | |||
| , function (e){ | |||
| if (e) { | |||
| $.ajax | |||
| ({ | |||
| url: APP_URL + cmd, | |||
| dataType:"text", | |||
| type:"post", | |||
| data: {"station_no": station_no, "member_refund_id": member_refund_id}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(result) | |||
| { | |||
| if(result == 'ok') | |||
| { | |||
| alertify_log('操作完成!'); | |||
| $("#member_tx_refund_form").submit(); | |||
| } | |||
| else | |||
| { | |||
| alertify_error('操作失敗..'); | |||
| } | |||
| } | |||
| }); | |||
| } else { | |||
| alertify_log('請記得處理, 謝謝'); | |||
| } | |||
| }); | |||
| } | |||
| // 轉租 | |||
| function member_refund_transfer(member_refund_id) | |||
| { | |||
| var station_no = $("#member_tx_refund_query_lpr_"+member_refund_id).data("station_no"); | |||
| var member_no = $("#member_tx_refund_query_lpr_"+member_refund_id).data("member_no"); | |||
| // 取得退租資料 | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"member_refund_transfer_data_query", | |||
| type:"post", | |||
| dataType:"json", | |||
| data:{"station_no":station_no, "member_no":member_no, "member_refund_id":member_refund_id}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| alertify_msg(xhr.responseText); | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| return false; | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if(jdata['result_code'] == 'OK') | |||
| { | |||
| show_item('member_add', 'member_add'); | |||
| var member_id = jdata['result']['member_id']; | |||
| var member_no = jdata['result']['member_no']; | |||
| var member_name = jdata['result']['member_name']; | |||
| var member_nick_name = jdata['result']['member_nick_name']; | |||
| var member_attr = jdata['result']['member_attr']; | |||
| var fee_period = jdata['result']['fee_period']; | |||
| var contract_no = jdata['result']['contract_no']; | |||
| var lpr = jdata['result']['lpr']; | |||
| var etag = jdata['result']['etag']; | |||
| var member_company_no = jdata['result']['member_company_no']; | |||
| var mobile_no = jdata['result']['mobile_no']; | |||
| var tel_o = jdata['result']['tel_o']; | |||
| var tel_h = jdata['result']['tel_h']; | |||
| var addr = jdata['result']['addr']; | |||
| var park_time = jdata['result']['park_time']; | |||
| var refund_deposit = jdata['result']['refund_deposit']; | |||
| var refund_amt = jdata['result']['refund_amt']; | |||
| var refund_state = jdata['result']['refund_state']; | |||
| var dismiss_state = jdata['result']['dismiss_state']; | |||
| var refund_time = jdata['result']['refund_time']; | |||
| // 取得折扣金額 (目前就是押金) | |||
| var member_refund_discount = refund_deposit; | |||
| $("#station_no_modify").val(station_no); | |||
| $("#ma_station_no").val(station_no); | |||
| $("#ma_lpr").val(lpr); | |||
| $("#ma_old_lpr").val(lpr); | |||
| $("#ma_etag").val(etag); | |||
| $("#ma_member_id").val(member_id); | |||
| $("#ma_member_company_no").val(member_company_no); | |||
| $("#ma_tel_o").val(tel_o); | |||
| $("#ma_tel_h").val(tel_h); | |||
| $("#ma_addr").val(addr); | |||
| $("#ma_member_name").val(member_name); | |||
| $("#ma_mobile_no").val(mobile_no); | |||
| // 記錄本此轉租資訊 | |||
| $("#ma_refund_transfer_id").val(member_refund_id); | |||
| $("#ma_refund_transfer_discount").val(member_refund_discount); | |||
| // 留空 | |||
| //$("#ma_demonth_start_date").val(''); | |||
| //$("#ma_contract_no").val(''); | |||
| //$("#ma_deposit").val(''); | |||
| //$("#ma_amt1").val(''); | |||
| //$("#ma_amt").val(''); | |||
| $("#fee_period1 option[value='"+fee_period+"']").prop("selected", "selected"); | |||
| $("#fee_period option[value='"+fee_period+"']").prop("selected", "selected"); | |||
| $("#member_attr option[value='"+member_attr+"']").prop("selected", "selected"); | |||
| if(contract_no) | |||
| { | |||
| $("#member_data_type").html("轉租操作:上期合約編號 [" + contract_no + "] 未退押金" + refund_deposit + "元,可折扺本次交易押金(多退少補)</button>"); | |||
| } | |||
| else | |||
| { | |||
| $("#member_data_type").html("轉租操作:上期未退押金" + refund_deposit + "元,可折扺本次交易押金(多退少補)</button>"); | |||
| } | |||
| $("input[id^=pt_id_]").prop("checked",false); // 全部取消勾 | |||
| arr = park_time.split(","); | |||
| for(idx in arr) | |||
| { | |||
| $("#pt_id_"+arr[idx]).prop("checked",true); | |||
| } | |||
| } | |||
| else if(jdata['result_code'] == 'NOT_FOUND') | |||
| { | |||
| alertify_msg("資料異常,請通知總公司處理。。"); | |||
| } | |||
| else | |||
| { | |||
| alertify_error('操作失敗..'); | |||
| } | |||
| } | |||
| }); | |||
| } | |||
| // 折讓發票 | |||
| function member_refund_invoice_allowance(tx_bill_no) | |||
| { | |||
| if (!confirm("確定折讓發票 ?")) return false; | |||
| var station_no = $("#tx_bill_lpr_"+tx_bill_no).data("station_no"); | |||
| var member_no = $("#tx_bill_lpr_"+tx_bill_no).data("member_no"); | |||
| var refund_amt = $("#tx_bill_lpr_"+tx_bill_no).data("refund_amt"); | |||
| var tx_no = $("#tx_bill_lpr_"+tx_bill_no).data("tx_no"); | |||
| if(refund_amt > 0) | |||
| { | |||
| // 尚餘金額繼續開立 | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"refund_invoice_allowance", | |||
| type:"post", | |||
| dataType:"text", | |||
| data:{ "station_no":station_no, "tx_no":tx_no, | |||
| "tx_bill_no":tx_bill_no, "member_no":member_no, | |||
| "refund_amt":refund_amt}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata == "ok") | |||
| { | |||
| alertify_msg("折讓完成 ! "); | |||
| $("#member_tx_refund_form").submit(); | |||
| } | |||
| else if (jdata == "tx_error_not_found") | |||
| { | |||
| alertify_msg("異常:查無開立資訊"); | |||
| } | |||
| else if (jdata == "tx_error_not_ready") | |||
| { | |||
| alertify_msg("異常:查無發票資訊"); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg("異常:" + jdata); | |||
| } | |||
| } | |||
| }); | |||
| } | |||
| else | |||
| { | |||
| // 各期月租發票補印 | |||
| alertify_msg("流程異常:請通知總公司處理:" + tx_bill_no); | |||
| } | |||
| } | |||
| // 退租記錄 | |||
| function show_member_refund_detail(member_refund_id) | |||
| { | |||
| var refund_lpr = $("#member_tx_refund_query_lpr_"+member_refund_id).data("lpr"); | |||
| var refund_time = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_time"); | |||
| $("#member_tx_refund_list_detail_lpr").text(refund_lpr); | |||
| $("#member_tx_refund_list_detail_refund_time").text(refund_time); | |||
| show_member_tx_refund_bill(0, '', '', '4', 0, member_refund_id); | |||
| } | |||
| // 完成退租交易 | |||
| /* | |||
| function complete_member_refund(member_refund_id) | |||
| { | |||
| var refund_state = $("#member_tx_refund_query_lpr_"+member_refund_id).data("refund_state"); | |||
| var refund_lpr = $("#member_tx_refund_query_lpr_"+member_refund_id).data("lpr"); | |||
| $("#member_tx_refund_list_detail_lpr").text(refund_lpr); | |||
| if(refund_state == 0) | |||
| { | |||
| // 待確認流程 | |||
| alertify_log("待確認流程"); | |||
| } | |||
| else if(refund_state == 1) | |||
| { | |||
| show_member_tx_refund_bill(0, '', '1', '4'); // 待補開 (已退租) | |||
| } | |||
| else if(refund_state == 2) | |||
| { | |||
| show_member_tx_refund_bill(0, '', '2', '4'); // 待折讓 (已退租, 已開立發票) | |||
| } | |||
| else | |||
| { | |||
| // 未定義 | |||
| alertify_log("未定義"); | |||
| } | |||
| return false; | |||
| } | |||
| */ | |||
| // 發票開立記錄 | |||
| function show_member_tx_refund_bill(tx_no=0, verify_state_str='', invoice_state_str='', tx_state_str='', tx_bill_no =0, member_refund_id=0) | |||
| { | |||
| $("#member_tx_refund_list_detail").html(""); // -- 清除原內容 -- | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL+"member_refund_bill_query", | |||
| type:"post", | |||
| dataType:"json", | |||
| data:{"station_no":station_no, "tx_no":tx_no, "verify_state_str":verify_state_str, | |||
| "invoice_state_str":invoice_state_str, "tx_state_str":tx_state_str, | |||
| "tx_bill_no":tx_bill_no, "member_refund_id":member_refund_id}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| var error_msg = xhr.responseText ? xhr.responseText : "連線失敗, 請稍候再試"; | |||
| alertify_msg(error_msg); | |||
| console.log("error:"+error_msg+"|"+ajaxOptions+"|"+thrownError); | |||
| $("#member_tx_refund_list_detail_box").hide(); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| $("#member_tx_refund_list_detail_box").show(); | |||
| var member_list = [["<tr>"]]; | |||
| for(idx in jdata) | |||
| { | |||
| //console.log(jdata.length + " : " + idx + " , " + jdata[idx]['invoice_amt'] + " : " + jdata[idx]['remain_amt']); | |||
| tx_no = jdata[idx]['tx_no']; | |||
| member_list = member_list.concat(["<td style='text-align:left;'>", jdata[idx]['tx_no'], "_", jdata[idx]['tx_bill_no'], "</td>"]); | |||
| //member_list = member_list.concat(["<td style='text-align:left;'>", st[jdata[idx]['station_no']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='acc_date_", tx_no, "' style='text-align:center;'>", jdata[idx]['acc_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='tx_bill_lpr_", jdata[idx]['tx_bill_no'], | |||
| "' data-station_no='", jdata[idx]['station_no'], | |||
| "' data-member_no='", jdata[idx]['member_no'], | |||
| "' data-tx_bill_no='", jdata[idx]['tx_bill_no'], | |||
| "' data-tx_no='", jdata[idx]['tx_no'], | |||
| "' data-member_company_no='", jdata[idx]['member_company_no'], | |||
| "' data-company_no='", jdata[idx]['company_no'], | |||
| "' data-invoice_amt='", jdata[idx]['invoice_amt'], | |||
| "' data-remain_amt='", jdata[idx]['remain_amt'], | |||
| "' data-period_3_amt='", jdata[idx]['period_3_amt'], | |||
| "' data-amt='", jdata[idx]['amt'], | |||
| "' data-amt1='", jdata[idx]['amt1'], | |||
| "' data-deposit='", jdata[idx]['deposit'], | |||
| "' data-start_date_last='", jdata[idx]['start_date_last'], | |||
| "' data-end_date='", jdata[idx]['end_date'], | |||
| "' data-lpr='", jdata[idx]['lpr'], | |||
| "' data-fee_period='", jdata[idx]['fee_period'], | |||
| "' data-refund_amt='", jdata[idx]['refund_amt'], | |||
| "' data-invoice_state='", jdata[idx]['invoice_state'], | |||
| "' style='text-align:left;'>", jdata[idx]['lpr'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_last_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period_last']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='edate_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_last_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt_last'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='fee_period_", tx_no, "' style='text-align:center;'>", period_name[jdata[idx]['fee_period']], "</td>"]); | |||
| member_list = member_list.concat(["<td id='sdate_", tx_no, "' style='text-align:center;'>", jdata[idx]['start_date'], "</td>"]); | |||
| if(jdata[idx]['invoice_state'] == 1) | |||
| { | |||
| // 待補開 | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>指定退租日<br/>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>補繳總金額<br/>", jdata[idx]['amt'], " 元</td>"]); | |||
| } | |||
| else if(jdata[idx]['invoice_state'] == 2) | |||
| { | |||
| // 待折讓 | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>指定退租日<br/>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>折讓總金額<br/>", jdata[idx]['amt'], " 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='edate_", tx_no, "' style='text-align:center;'>", jdata[idx]['end_date'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['amt'], " 元</td>"]); | |||
| } | |||
| // 是否已有發票 | |||
| if(jdata[idx]['invoice_no'] > 0) | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_time_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='member_company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['member_company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_track_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_track'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_no'], "</td>"]); | |||
| if(jdata[idx]['invoice_type'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'>電子發票</td>"]); | |||
| } | |||
| else if(jdata[idx]['invoice_type'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'>手開發票</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'>異常</td>"]); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_time_", tx_no, "' style='text-align:center;'>未開立</td>"]); | |||
| member_list = member_list.concat(["<td id='member_company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['member_company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='company_no_", tx_no, "' style='text-align:center;'>", jdata[idx]['company_no'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_amt_", tx_no, "' style='text-align:center;'>", jdata[idx]['invoice_amt'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_track_", tx_no, "' style='text-align:center;'></td>"]); | |||
| if(jdata[idx]['tx_state'] == 4 && jdata[idx]['invoice_state'] == 0) | |||
| { | |||
| // 已退租, 原先交易將不再開放開立 | |||
| member_list = member_list.concat(["<td id='invoice_no_", tx_no, "' style='text-align:center;'></td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td id='invoice_no_", tx_no, "' style='text-align:center;'><button class='btn btn-default' onclick='print_tx_invoice(", jdata[idx]['tx_bill_no'] ,");'>列印發票</button></td>"]); | |||
| member_list = member_list.concat(["<td id='invoice_type_", tx_no, "' style='text-align:center;'><button class='btn btn-default' onclick='hand_tx_invoice(", jdata[idx]['tx_bill_no'] ,");'>手開發票</button></td>"]); | |||
| } | |||
| } | |||
| //member_list = member_list.concat(["<td style='color:blue;text-align:center;' id='remarks_", jdata[idx]['tx_bill_no'], "'>", jdata[idx]['remarks'], "</td>"]); | |||
| if(jdata[idx]['tx_state'] == 4) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>已退租</td>"]); | |||
| } | |||
| else if(jdata[idx]['tx_state'] == 44) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:black;text-align:center;'>交易取消</td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:red;' onclick='member_tx_check(", tx_no + ");'>待審核</button></td>"]); | |||
| } | |||
| else if(jdata[idx]['verify_state'] == 1) | |||
| { | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;'>已審核</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='color:red;text-align:center;'><button class='btn btn-default' style='color:blue;' onclick='member_tx_check(", tx_no + ");'>未通過</button></td>"]); | |||
| } | |||
| // 剩餘開立金額 | |||
| if(jdata[idx]['invoice_state'] == 1) | |||
| { | |||
| // 待開立 | |||
| if(jdata[idx]['remain_amt'] > 0) | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='next_refund_bill(", jdata[idx]['tx_bill_no'] ,");'>尚餘 ", jdata[idx]['remain_amt'] ," 元</button></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>無</td>"]); | |||
| } | |||
| } | |||
| else if(jdata[idx]['invoice_state'] == 2) | |||
| { | |||
| // 待折讓 | |||
| if(jdata[idx]['refund_amt'] > 0) | |||
| { | |||
| //member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='member_refund_invoice_allowance(", jdata[idx]['tx_bill_no'] ,");'>待折讓 ", jdata[idx]['refund_amt'] ," 元</button></td>"]); | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='member_tx_check(", jdata[idx]['tx_bill_no'] ,");'>待折讓 ", jdata[idx]['refund_amt'] ," 元</button></td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>異常</td>"]); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| // 待開立 | |||
| if(jdata[idx]['remain_amt'] > 0) | |||
| { | |||
| if(jdata[idx]['tx_state'] == 4 && jdata[idx]['invoice_state'] == 0) | |||
| { | |||
| // 已退租, 原先交易將不再開放開立 | |||
| member_list = member_list.concat(["<td style='text-align:center;'>尚餘 ", jdata[idx]['remain_amt'] ," 元</td>"]); | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'><button class='btn btn-default' onclick='next_tx_bill(", jdata[idx]['tx_bill_no'] ,");'>尚餘 ", jdata[idx]['remain_amt'] ," 元</button></td>"]); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| member_list = member_list.concat(["<td style='text-align:center;'>無</td>"]); | |||
| } | |||
| } | |||
| member_list = member_list.concat(["</tr>"]);; | |||
| } | |||
| $("#member_tx_refund_list_detail").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,147 @@ | |||
| <?php /* ----- 費率清單 ----- */?> | |||
| <div data-items="price_plan_query_all" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"> | |||
| 費率設定 <button class='btn btn-default' style='font-size:16px;' onclick='sync_price_plan();'>更新</button> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:left;">場站</th> | |||
| <th style="text-align:left;">收費類型</th> | |||
| <th style="text-align:left;" width="35%">費率設定</th> | |||
| <th style="text-align:left;">註記事項</th> | |||
| <th style="text-align:center;">啟用時間</th> | |||
| <th style="text-align:center;">有效期限</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="price_plan_list" style="font-size:20px;"></tbody> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| </div><?php /* ----- end of panel panel-default ----- */?> | |||
| </div><?php /* ----- end of col-lg-12 ----- */?> | |||
| </div> | |||
| <?php /* ----- 費率清單(結束) ----- */?> | |||
| <script> | |||
| // 載入 | |||
| function reload_price_plan_query_all() | |||
| { | |||
| $("#price_plan_list").html("");<?php /* 清除原內容 */ ?> | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>price_plan_query_all", | |||
| type: "post", | |||
| dataType:"json", | |||
| data: {}, | |||
| success: function(jdata) | |||
| { | |||
| var member_list = []; | |||
| for(idx in jdata) | |||
| { | |||
| txid = jdata[idx]['txid']; | |||
| member_list = member_list.concat(["<tr><td style='text-align:left;'>", st[jdata[idx]['station_no']], "</td>"]); | |||
| var price_plan_content = []; | |||
| if(jdata[idx]['tx_type'] == 0) | |||
| { | |||
| price_plan_name = "臨停費率"; | |||
| //jdata[idx]['price_plan']; | |||
| } | |||
| else | |||
| { | |||
| price_plan_name = "月租費率"; | |||
| target = JSON.parse(jdata[idx]['price_plan']); | |||
| Object.keys(target) | |||
| .sort( | |||
| function(a,b){ | |||
| attr_a = a.split('_'); | |||
| attr_b = b.split('_'); | |||
| if(parseInt(attr_a[0], 10) > parseInt(attr_b[0], 10)) return 1; | |||
| if(parseInt(attr_a[0], 10) < parseInt(attr_b[0], 10)) return -1; | |||
| if(parseInt(attr_a[1], 10) > parseInt(attr_b[1], 10)) return 1; | |||
| if(parseInt(attr_a[1], 10) < parseInt(attr_b[1], 10)) return -1; | |||
| return 0; | |||
| } | |||
| ) | |||
| .forEach(function(k, i) | |||
| { | |||
| //console.log(k, target[k]); | |||
| period_idx = k.split("_")[0]; | |||
| mem_idx = k.split("_")[1]; | |||
| if(k == '0_0') | |||
| { | |||
| price_plan_content = price_plan_content.concat(['*月租押金:', target[k], ' 元']); | |||
| } | |||
| else if(mem_idx == '0') | |||
| { | |||
| idx_period_name = (period_name[period_idx] == undefined) ? '繳期 ' + period_idx : period_name[period_idx]; | |||
| price_plan_content = price_plan_content.concat(['<br/> * [ ', idx_period_name, ' : ', target[k], ' 天 ] ']); | |||
| } | |||
| else | |||
| { | |||
| idx_mem_attr = (mem_attr[mem_idx] == undefined) ? '?? (' + mem_idx + ')': mem_attr[mem_idx]; | |||
| price_plan_content = price_plan_content.concat([' > ', idx_mem_attr, ":", target[k], ' 元 ']); | |||
| } | |||
| price_plan_content = price_plan_content.concat(['<br/>']); | |||
| }); | |||
| } | |||
| member_list = member_list.concat(["<td style='color:green;text-align:center;' id='tx_type_", txid, "'>", price_plan_name ,"</td>"]); | |||
| member_list = member_list.concat(["<td style='color:blue;text-align:left;' id='price_plan_", txid, "'>", price_plan_content.join('') , "</td>"]); | |||
| member_list = member_list.concat(["<td style='color:green;text-align:left;' id='remarks_", txid, "'>", jdata[idx]['remarks'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='start_time_", txid, "' style='text-align:center;'>", jdata[idx]['start_time'], "</td>"]); | |||
| member_list = member_list.concat(["<td id='valid_time_", txid, "' style='text-align:center;'>", jdata[idx]['valid_time'], "</td>"]); | |||
| member_list = member_list.concat(["</tr>"]); | |||
| } | |||
| $("#price_plan_list").append(member_list.join('')); | |||
| } | |||
| }); | |||
| } | |||
| // 同步場站費率 | |||
| function sync_price_plan() | |||
| { | |||
| $.ajax | |||
| ({ | |||
| url:APP_URL + "sync_price_plan", | |||
| dataType:"text", | |||
| type:"post", | |||
| data: {}, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| alertify_msg(xhr.responseText); | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata == "ok") | |||
| { | |||
| alertify_msg("同步成功 ! "); | |||
| reload_price_plan_query_all(); | |||
| } | |||
| else if (jdata == "sync_fail") | |||
| { | |||
| alertify_msg("同步失敗"); | |||
| } | |||
| else | |||
| { | |||
| alertify_msg("同步失敗 !"); | |||
| } | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,165 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh-TW"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <meta name="description" content=""> | |||
| <meta name="author" content=""> | |||
| <title>歐特儀管理系統 (<?=STATION_NAME?>)</title> | |||
| <!-- Bootstrap Core CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> | |||
| <!-- MetisMenu CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> | |||
| <!-- Timeline CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/timeline.css" rel="stylesheet"> | |||
| <!-- Custom CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/sb-admin-2.css" rel="stylesheet"> | |||
| <!-- Morris Charts CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.css" rel="stylesheet"> | |||
| <!-- Custom Fonts --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | |||
| </head> | |||
| <body style="font-family:Microsoft JhengHei;"> | |||
| <div id="wrapper"> | |||
| <!-- Navigation --> | |||
| <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> | |||
| <div class="navbar-header"> | |||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | |||
| <span class="sr-only">Toggle navigation</span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| </button> | |||
| <a class="navbar-brand" href="">歐特儀管理系統 (<?=STATION_NAME?>)</a> | |||
| </div> | |||
| <!-- /.navbar-static-side --> | |||
| </nav> | |||
| <div id="page-wrapper"> | |||
| <div class="row"> | |||
| <div class="col-lg-12"> | |||
| <h1 class="page-header">管理者登入</h1> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- /.row --> | |||
| <div data-items="user_login" class="row" > | |||
| <div class="col-lg-5"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-12"> | |||
| <form id="user_login" role="form" method="post"> | |||
| <div class="form-group"> | |||
| <label>帳號</label> | |||
| <input id="login_name" name="login_name" class="form-control" | |||
| data-validation="required" | |||
| data-validation-error-msg="請輸入帳號"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>密碼</label> | |||
| <input id="pswd" name='pswd' type="password" class="form-control" | |||
| data-validation="required" | |||
| data-validation-error-msg="請輸入密碼"> | |||
| </div> | |||
| <button type="submit" class="btn btn-default">登入</button> | |||
| </form> | |||
| </div> | |||
| <!-- /.col-lg-6 (nested) --> | |||
| </div> | |||
| <!-- /.row (nested) --> | |||
| </div> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-6 --> | |||
| </div> | |||
| </div> | |||
| <!-- /#page-wrapper --> | |||
| </div> | |||
| <!-- /#wrapper --> | |||
| <!-- jQuery --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script> | |||
| <!-- Bootstrap Core JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script> | |||
| <!-- Metis Menu Plugin JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script> | |||
| <!-- Morris Charts JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script> | |||
| <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script--> | |||
| <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script--> | |||
| <!-- Custom Theme JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script> | |||
| <!-- jQuery validate --> | |||
| <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script> | |||
| <!-- alertify --> | |||
| <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>js/alertify.min.js"></script> | |||
| </html> | |||
| <script> | |||
| <?php /* alertify function */ ?> | |||
| function alertify_log($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.log($msg); | |||
| } | |||
| function alertify_error($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.error($msg); | |||
| } | |||
| function alertify_success($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.success($msg); | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| <?php /* validate 設定start */ ?> | |||
| $.validate( | |||
| { | |||
| modules : 'security', | |||
| } | |||
| ); | |||
| <?php /* validate 設定end */ ?> | |||
| $("#user_login").submit(function(event) | |||
| { | |||
| event.preventDefault(); | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>user_login", | |||
| type: "post", | |||
| dataType:"text", | |||
| data: $(this).serialize(), | |||
| success: function(jdata) | |||
| { | |||
| if(jdata == 'ok') | |||
| { | |||
| location.reload(); | |||
| } | |||
| else if(jdata == '-1') | |||
| { | |||
| alertify_error("輸入資料有誤"); | |||
| } | |||
| else | |||
| { | |||
| alertify_error("登入資訊無效, 請通知管理員"); | |||
| } | |||
| } | |||
| }); | |||
| }); | |||
| }); | |||
| </script> | |||
| @@ -0,0 +1,181 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh-TW"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <meta name="description" content=""> | |||
| <meta name="author" content=""> | |||
| <title>管理室加值完成</title> | |||
| <!-- Bootstrap Core CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> | |||
| <!-- MetisMenu CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> | |||
| <!-- Timeline CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/timeline.css" rel="stylesheet"> | |||
| <!-- Custom CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/sb-admin-2.css" rel="stylesheet"> | |||
| <!-- Morris Charts CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.css" rel="stylesheet"> | |||
| <!-- Custom Fonts --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | |||
| </head> | |||
| <body style="font-family:Microsoft JhengHei;"> | |||
| <div id="wrapper"> | |||
| <!-- Navigation --> | |||
| <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> | |||
| <div class="navbar-header"> | |||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | |||
| <span class="sr-only">Toggle navigation</span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| </button> | |||
| <a class="navbar-brand" href="#" onclick="go_payment();">返回首頁</a> | |||
| </div> | |||
| <!-- /.navbar-top-links(左側選單) --> | |||
| <div class="navbar-default sidebar" role="navigation"> | |||
| <div class="sidebar-nav navbar-collapse"> | |||
| <ul class="nav" id="side-menu"> | |||
| <li> | |||
| <a href="#"><i class="fa fa-user fa-fw"></i>服務項目<span class="fa arrow"></span></a> | |||
| <ul class="nav nav-second-level"> | |||
| <li> | |||
| <a href="#" onclick="go_payment();">返回首頁</a> | |||
| </li> | |||
| </ul> | |||
| <!-- /.nav-second-level --> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <!-- /.sidebar-collapse --> | |||
| </div> | |||
| <!-- /.navbar-static-side --> | |||
| </nav> | |||
| <div id="page-wrapper"><?php /* 主要資料顯示區 */ ?> | |||
| <div class="row"> | |||
| <div class="col-lg-12"> | |||
| <h1 class="page-header">加值完成</h1><?php /* 右側小表頭 */ ?> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- /.row --> | |||
| <?php /* ----- 首頁 ----- */ ?> | |||
| <div data-items="homepage" class="row"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 首頁 | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="返回首頁" onclick="go_payment();" /></td> | |||
| </tr> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 首頁(結束) ----- */ ?> | |||
| <!-- /#page-wrapper --> | |||
| </div> | |||
| <!-- /#wrapper --> | |||
| <!-- jQuery --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script> | |||
| <!-- Bootstrap Core JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script> | |||
| <!-- Metis Menu Plugin JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script> | |||
| <!-- Morris Charts JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script> | |||
| <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script--> | |||
| <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script--> | |||
| <!-- virtual keyboard --> | |||
| <!--link href="<?=WEB_LIB?>virtual-keyboard/css/jquery-ui.min.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>virtual-keyboard/css/keyboard.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery-ui.min.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.extension-caret.js"></script--> | |||
| <!-- jQuery validate --> | |||
| <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script> | |||
| <!-- alertify --> | |||
| <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>js/alertify.min.js"></script> | |||
| <!-- Custom Theme JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script> | |||
| <div id="works" style="display:none;"></div><?php /* 作為浮動顯示區之用 */ ?> | |||
| </body> | |||
| </html> | |||
| <script> | |||
| <?php /* alertify function */ ?> | |||
| function alertify_log($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.log($msg); | |||
| } | |||
| function alertify_error($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.error($msg); | |||
| } | |||
| function alertify_success($msg) | |||
| { | |||
| alertify.set({delay : 3000}); | |||
| alertify.success($msg); | |||
| } | |||
| <?php /* 顯示指定項目 */ ?> | |||
| function show_item(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 顯示指定項目, 不修改資料 */ ?> | |||
| function show_item_without_change(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 返回付款首頁 */ ?> | |||
| function go_payment() | |||
| { | |||
| window.open("<?=APP_URL?>/admin", "_self"); | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| <?php /* validate 設定start */ ?> | |||
| $.validate( | |||
| { | |||
| modules : 'security', | |||
| } | |||
| ); | |||
| <?php /* validate 設定end */ ?> | |||
| alertify_success("加值成功<br/><br/>謝謝!!"); | |||
| }); | |||
| </script> | |||
| @@ -0,0 +1,181 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh-TW"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <meta name="description" content=""> | |||
| <meta name="author" content=""> | |||
| <title>交易失敗 (CTBC)</title> | |||
| <!-- Bootstrap Core CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> | |||
| <!-- MetisMenu CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> | |||
| <!-- Timeline CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/timeline.css" rel="stylesheet"> | |||
| <!-- Custom CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/sb-admin-2.css" rel="stylesheet"> | |||
| <!-- Morris Charts CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.css" rel="stylesheet"> | |||
| <!-- Custom Fonts --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | |||
| </head> | |||
| <body style="font-family:Microsoft JhengHei;"> | |||
| <div id="wrapper"> | |||
| <!-- Navigation --> | |||
| <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> | |||
| <div class="navbar-header"> | |||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | |||
| <span class="sr-only">Toggle navigation</span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| </button> | |||
| <a class="navbar-brand" href="#" onclick="go_payment();">返回首頁</a> | |||
| </div> | |||
| <!-- /.navbar-top-links(左側選單) --> | |||
| <div class="navbar-default sidebar" role="navigation"> | |||
| <div class="sidebar-nav navbar-collapse"> | |||
| <ul class="nav" id="side-menu"> | |||
| <li> | |||
| <a href="#"><i class="fa fa-user fa-fw"></i>服務項目<span class="fa arrow"></span></a> | |||
| <ul class="nav nav-second-level"> | |||
| <li> | |||
| <a href="#" onclick="go_payment();">返回首頁</a> | |||
| </li> | |||
| </ul> | |||
| <!-- /.nav-second-level --> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <!-- /.sidebar-collapse --> | |||
| </div> | |||
| <!-- /.navbar-static-side --> | |||
| </nav> | |||
| <div id="page-wrapper"><?php /* 主要資料顯示區 */ ?> | |||
| <div class="row"> | |||
| <div class="col-lg-12"> | |||
| <h1 class="page-header">交易失敗</h1><?php /* 右側小表頭 */ ?> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- /.row --> | |||
| <?php /* ----- 首頁 ----- */ ?> | |||
| <div data-items="homepage" class="row"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 首頁 | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="返回首頁" onclick="go_payment();" /></td> | |||
| </tr> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 首頁(結束) ----- */ ?> | |||
| <!-- /#page-wrapper --> | |||
| </div> | |||
| <!-- /#wrapper --> | |||
| <!-- jQuery --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script> | |||
| <!-- Bootstrap Core JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script> | |||
| <!-- Metis Menu Plugin JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script> | |||
| <!-- Morris Charts JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script> | |||
| <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script--> | |||
| <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script--> | |||
| <!-- virtual keyboard --> | |||
| <!--link href="<?=WEB_LIB?>virtual-keyboard/css/jquery-ui.min.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>virtual-keyboard/css/keyboard.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery-ui.min.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.extension-caret.js"></script--> | |||
| <!-- jQuery validate --> | |||
| <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script> | |||
| <!-- alertify --> | |||
| <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>js/alertify.min.js"></script> | |||
| <!-- Custom Theme JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script> | |||
| <div id="works" style="display:none;"></div><?php /* 作為浮動顯示區之用 */ ?> | |||
| </body> | |||
| </html> | |||
| <script> | |||
| <?php /* alertify function */ ?> | |||
| function alertify_log($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.log($msg); | |||
| } | |||
| function alertify_error($msg) | |||
| { | |||
| alertify.set({delay : 5000}); | |||
| alertify.error($msg); | |||
| } | |||
| function alertify_success($msg) | |||
| { | |||
| alertify.set({delay : 3000}); | |||
| alertify.success($msg); | |||
| } | |||
| <?php /* 顯示指定項目 */ ?> | |||
| function show_item(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 顯示指定項目, 不修改資料 */ ?> | |||
| function show_item_without_change(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 返回付款首頁 */ ?> | |||
| function go_payment() | |||
| { | |||
| window.open("<?=APP_URL?>", "_self"); | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| <?php /* validate 設定start */ ?> | |||
| $.validate( | |||
| { | |||
| modules : 'security', | |||
| } | |||
| ); | |||
| <?php /* validate 設定end */ ?> | |||
| alertify_error("交易失敗<br/><br/>請稍後再試.."); | |||
| }); | |||
| </script> | |||
| @@ -0,0 +1,181 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh-TW"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <meta name="description" content=""> | |||
| <meta name="author" content=""> | |||
| <title>付款完成 (CTBC)</title> | |||
| <!-- Bootstrap Core CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> | |||
| <!-- MetisMenu CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> | |||
| <!-- Timeline CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/timeline.css" rel="stylesheet"> | |||
| <!-- Custom CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/sb-admin-2.css" rel="stylesheet"> | |||
| <!-- Morris Charts CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.css" rel="stylesheet"> | |||
| <!-- Custom Fonts --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | |||
| </head> | |||
| <body style="font-family:Microsoft JhengHei;"> | |||
| <div id="wrapper"> | |||
| <!-- Navigation --> | |||
| <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> | |||
| <div class="navbar-header"> | |||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | |||
| <span class="sr-only">Toggle navigation</span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| </button> | |||
| <a class="navbar-brand" href="#" onclick="go_payment();">返回首頁</a> | |||
| </div> | |||
| <!-- /.navbar-top-links(左側選單) --> | |||
| <div class="navbar-default sidebar" role="navigation"> | |||
| <div class="sidebar-nav navbar-collapse"> | |||
| <ul class="nav" id="side-menu"> | |||
| <li> | |||
| <a href="#"><i class="fa fa-user fa-fw"></i>服務項目<span class="fa arrow"></span></a> | |||
| <ul class="nav nav-second-level"> | |||
| <li> | |||
| <a href="#" onclick="go_payment();">返回首頁</a> | |||
| </li> | |||
| </ul> | |||
| <!-- /.nav-second-level --> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <!-- /.sidebar-collapse --> | |||
| </div> | |||
| <!-- /.navbar-static-side --> | |||
| </nav> | |||
| <div id="page-wrapper"><?php /* 主要資料顯示區 */ ?> | |||
| <div class="row"> | |||
| <div class="col-lg-12"> | |||
| <h1 class="page-header">付款完成</h1><?php /* 右側小表頭 */ ?> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- /.row --> | |||
| <?php /* ----- 首頁 ----- */ ?> | |||
| <div data-items="homepage" class="row"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 首頁 | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="返回首頁" onclick="go_payment();" /></td> | |||
| </tr> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 首頁(結束) ----- */ ?> | |||
| <!-- /#page-wrapper --> | |||
| </div> | |||
| <!-- /#wrapper --> | |||
| <!-- jQuery --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script> | |||
| <!-- Bootstrap Core JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script> | |||
| <!-- Metis Menu Plugin JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script> | |||
| <!-- Morris Charts JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script> | |||
| <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script--> | |||
| <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script--> | |||
| <!-- virtual keyboard --> | |||
| <!--link href="<?=WEB_LIB?>virtual-keyboard/css/jquery-ui.min.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>virtual-keyboard/css/keyboard.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery-ui.min.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.extension-caret.js"></script--> | |||
| <!-- jQuery validate --> | |||
| <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script> | |||
| <!-- alertify --> | |||
| <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>js/alertify.min.js"></script> | |||
| <!-- Custom Theme JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script> | |||
| <div id="works" style="display:none;"></div><?php /* 作為浮動顯示區之用 */ ?> | |||
| </body> | |||
| </html> | |||
| <script> | |||
| <?php /* alertify function */ ?> | |||
| function alertify_log($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.log($msg); | |||
| } | |||
| function alertify_error($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.error($msg); | |||
| } | |||
| function alertify_success($msg) | |||
| { | |||
| alertify.set({delay : 3000}); | |||
| alertify.success($msg); | |||
| } | |||
| <?php /* 顯示指定項目 */ ?> | |||
| function show_item(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 顯示指定項目, 不修改資料 */ ?> | |||
| function show_item_without_change(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 返回付款首頁 */ ?> | |||
| function go_payment() | |||
| { | |||
| window.open("<?=APP_URL?>", "_self"); | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| <?php /* validate 設定start */ ?> | |||
| $.validate( | |||
| { | |||
| modules : 'security', | |||
| } | |||
| ); | |||
| <?php /* validate 設定end */ ?> | |||
| alertify_success("付款成功<br/><br/>謝謝!!"); | |||
| }); | |||
| </script> | |||
| @@ -0,0 +1,165 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh-TW"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <meta name="description" content=""> | |||
| <meta name="author" content=""> | |||
| <title>歐特儀管理系統</title> | |||
| <!-- Bootstrap Core CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> | |||
| <!-- MetisMenu CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> | |||
| <!-- Timeline CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/timeline.css" rel="stylesheet"> | |||
| <!-- Custom CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/sb-admin-2.css" rel="stylesheet"> | |||
| <!-- Morris Charts CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.css" rel="stylesheet"> | |||
| <!-- Custom Fonts --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | |||
| </head> | |||
| <body style="font-family:Microsoft JhengHei;"> | |||
| <div id="wrapper"> | |||
| <!-- Navigation --> | |||
| <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> | |||
| <div class="navbar-header"> | |||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | |||
| <span class="sr-only">Toggle navigation</span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| </button> | |||
| <a class="navbar-brand" href="">歐特儀管理系統</a> | |||
| </div> | |||
| <!-- /.navbar-static-side --> | |||
| </nav> | |||
| <div id="page-wrapper"> | |||
| <div class="row"> | |||
| <div class="col-lg-12"> | |||
| <h1 class="page-header">管理者登入</h1> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- /.row --> | |||
| <div data-items="user_login" class="row" > | |||
| <div class="col-lg-5"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-12"> | |||
| <form id="user_login" role="form" method="post"> | |||
| <div class="form-group"> | |||
| <label>帳號</label> | |||
| <input id="login_name" name="login_name" class="form-control" | |||
| data-validation="required" | |||
| data-validation-error-msg="請輸入帳號"> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label>密碼</label> | |||
| <input id="pswd" name='pswd' type="password" class="form-control" | |||
| data-validation="required" | |||
| data-validation-error-msg="請輸入密碼"> | |||
| </div> | |||
| <button type="submit" class="btn btn-default">登入</button> | |||
| </form> | |||
| </div> | |||
| <!-- /.col-lg-6 (nested) --> | |||
| </div> | |||
| <!-- /.row (nested) --> | |||
| </div> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-6 --> | |||
| </div> | |||
| </div> | |||
| <!-- /#page-wrapper --> | |||
| </div> | |||
| <!-- /#wrapper --> | |||
| <!-- jQuery --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script> | |||
| <!-- Bootstrap Core JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script> | |||
| <!-- Metis Menu Plugin JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script> | |||
| <!-- Morris Charts JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script> | |||
| <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script--> | |||
| <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script--> | |||
| <!-- Custom Theme JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script> | |||
| <!-- jQuery validate --> | |||
| <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script> | |||
| <!-- alertify --> | |||
| <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>js/alertify.min.js"></script> | |||
| </html> | |||
| <script> | |||
| <?php /* alertify function */ ?> | |||
| function alertify_log($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.log($msg); | |||
| } | |||
| function alertify_error($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.error($msg); | |||
| } | |||
| function alertify_success($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.success($msg); | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| <?php /* validate 設定start */ ?> | |||
| $.validate( | |||
| { | |||
| modules : 'security', | |||
| } | |||
| ); | |||
| <?php /* validate 設定end */ ?> | |||
| $("#user_login").submit(function(event) | |||
| { | |||
| event.preventDefault(); | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>user_login", | |||
| type: "post", | |||
| dataType:"text", | |||
| data: $(this).serialize(), | |||
| success: function(jdata) | |||
| { | |||
| if(jdata == 'ok') | |||
| { | |||
| location.reload(); | |||
| } | |||
| else if(jdata == '-1') | |||
| { | |||
| alertify_error("輸入資料有誤"); | |||
| } | |||
| else | |||
| { | |||
| alertify_error("登入資訊無效, 請通知管理員"); | |||
| } | |||
| } | |||
| }); | |||
| }); | |||
| }); | |||
| </script> | |||
| @@ -0,0 +1,115 @@ | |||
| <!-- ----- 場站設定 ----- --> | |||
| <div data-items="station_setting" class="row" style="display:none;"><!-- 場站設定 --> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div id="member_data_type" class="panel-heading"> | |||
| 目前場站設定 | |||
| <button id='reload_station_setting_btn' class="btn btn-large btn-success pull-right" style="font-size:20px;" onclick='reset_station_setting();'>重新載入</button> | |||
| </div><!-- 資料顯示區灰色小表頭 --> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <!--form id="station_setting" role="form" method="post" data-src="action::APP_URL::station_setting"--> | |||
| <form id="station_setting" role="form" method="post" data-src="/carpark.html/station_setting"> | |||
| <div class="form-group"> | |||
| <label style="font-size:22px">場站名稱</label> | |||
| <input id="ss_station_name" name="station_name" class="form-control" style="font-size:28px" readonly> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label style="font-size:22px">場站編號(若為多場站共用,以 ',' 隔開。)</label> | |||
| <input id="ss_station_no" name='station_no' class="form-control" style="font-size:28px" readonly> | |||
| </div> | |||
| <div class="form-group"> | |||
| <label style="font-size:22px">場站 IP</label> | |||
| <input id="ss_station_ip" name='station_ip' class="form-control" style="font-size:28px" readonly> | |||
| </div> | |||
| <!--button type="submit" class="btn btn-default">存檔</button> | |||
| <button type="reset" class="btn btn-default">重填</button--> | |||
| </form> | |||
| </div> | |||
| <!-- /.col-lg-6 (nested) --> | |||
| </div> | |||
| <!-- /.row (nested) --> | |||
| </div> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- ----- 場站設定(結束) ----- --> | |||
| <script> | |||
| // 重新載入 | |||
| function reset_station_setting() | |||
| { | |||
| event.preventDefault(); | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>station_setting_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data:{ 'reload': 1 }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| alertify_msg(xhr.responseText); | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| return false; | |||
| }, | |||
| success: function(jdata) | |||
| { | |||
| if(jdata == 'fail') | |||
| { | |||
| $("#ss_station_name").val('未設定'); | |||
| $("#ss_station_no").val(''); | |||
| $("#ss_station_ip").val(jdata['station_ip']); | |||
| alertify_error('載入失敗。。'); | |||
| return false; | |||
| } | |||
| $("#ss_station_name").val(jdata['station_name']); | |||
| $("#ss_station_no").val(jdata['station_no']); | |||
| $("#ss_station_ip").val(jdata['station_ip']); | |||
| alertify_success('完成。。'); | |||
| } | |||
| }); | |||
| } | |||
| // 載入目前設定 | |||
| function reload_station_setting(type) | |||
| { | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>station_setting_query", | |||
| type: "post", | |||
| dataType:"json", | |||
| data:{ 'reload': 0 }, | |||
| error:function(xhr, ajaxOptions, thrownError) | |||
| { | |||
| alertify_msg(xhr.responseText); | |||
| console.log("error:"+xhr.responseText+"|"+ajaxOptions+"|"+thrownError); | |||
| return false; | |||
| }, | |||
| success: function(jdata) | |||
| { | |||
| if(jdata == 'fail') | |||
| { | |||
| $("#ss_station_name").val('未設定'); | |||
| $("#ss_station_no").val(''); | |||
| $("#ss_station_ip").val(jdata['station_ip']); | |||
| alertify_error('載入失敗。。'); | |||
| return false; | |||
| } | |||
| $("#ss_station_name").val(jdata['station_name']); | |||
| $("#ss_station_no").val(jdata['station_no']); | |||
| $("#ss_station_ip").val(jdata['station_ip']); | |||
| alertify_success('完成。。'); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| @@ -0,0 +1,8 @@ | |||
| <?php | |||
| defined('BASEPATH') OR exit('No direct script access allowed'); | |||
| echo "\nERROR: ", | |||
| $heading, | |||
| "\n\n", | |||
| $message, | |||
| "\n\n"; | |||
| @@ -0,0 +1,8 @@ | |||
| <?php | |||
| defined('BASEPATH') OR exit('No direct script access allowed'); | |||
| echo "\nDatabase error: ", | |||
| $heading, | |||
| "\n\n", | |||
| $message, | |||
| "\n\n"; | |||
| @@ -0,0 +1,21 @@ | |||
| <?php defined('BASEPATH') OR exit('No direct script access allowed'); ?> | |||
| An uncaught Exception was encountered | |||
| Type: <?php echo get_class($exception), "\n"; ?> | |||
| Message: <?php echo $message, "\n"; ?> | |||
| Filename: <?php echo $exception->getFile(), "\n"; ?> | |||
| Line Number: <?php echo $exception->getLine(); ?> | |||
| <?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?> | |||
| Backtrace: | |||
| <?php foreach ($exception->getTrace() as $error): ?> | |||
| <?php if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?> | |||
| File: <?php echo $error['file'], "\n"; ?> | |||
| Line: <?php echo $error['line'], "\n"; ?> | |||
| Function: <?php echo $error['function'], "\n\n"; ?> | |||
| <?php endif ?> | |||
| <?php endforeach ?> | |||
| <?php endif ?> | |||
| @@ -0,0 +1,8 @@ | |||
| <?php | |||
| defined('BASEPATH') OR exit('No direct script access allowed'); | |||
| echo "\nERROR: ", | |||
| $heading, | |||
| "\n\n", | |||
| $message, | |||
| "\n\n"; | |||
| @@ -0,0 +1,21 @@ | |||
| <?php defined('BASEPATH') OR exit('No direct script access allowed'); ?> | |||
| A PHP Error was encountered | |||
| Severity: <?php echo $severity, "\n"; ?> | |||
| Message: <?php echo $message, "\n"; ?> | |||
| Filename: <?php echo $filepath, "\n"; ?> | |||
| Line Number: <?php echo $line; ?> | |||
| <?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?> | |||
| Backtrace: | |||
| <?php foreach (debug_backtrace() as $error): ?> | |||
| <?php if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?> | |||
| File: <?php echo $error['file'], "\n"; ?> | |||
| Line: <?php echo $error['line'], "\n"; ?> | |||
| Function: <?php echo $error['function'], "\n\n"; ?> | |||
| <?php endif ?> | |||
| <?php endforeach ?> | |||
| <?php endif ?> | |||
| @@ -0,0 +1,11 @@ | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <title>403 Forbidden</title> | |||
| </head> | |||
| <body> | |||
| <p>Directory access is forbidden.</p> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,64 @@ | |||
| <?php | |||
| defined('BASEPATH') OR exit('No direct script access allowed'); | |||
| ?><!DOCTYPE html> | |||
| <html lang="en"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <title>404 Page Not Found</title> | |||
| <style type="text/css"> | |||
| ::selection { background-color: #E13300; color: white; } | |||
| ::-moz-selection { background-color: #E13300; color: white; } | |||
| body { | |||
| background-color: #fff; | |||
| margin: 40px; | |||
| font: 13px/20px normal Helvetica, Arial, sans-serif; | |||
| color: #4F5155; | |||
| } | |||
| a { | |||
| color: #003399; | |||
| background-color: transparent; | |||
| font-weight: normal; | |||
| } | |||
| h1 { | |||
| color: #444; | |||
| background-color: transparent; | |||
| border-bottom: 1px solid #D0D0D0; | |||
| font-size: 19px; | |||
| font-weight: normal; | |||
| margin: 0 0 14px 0; | |||
| padding: 14px 15px 10px 15px; | |||
| } | |||
| code { | |||
| font-family: Consolas, Monaco, Courier New, Courier, monospace; | |||
| font-size: 12px; | |||
| background-color: #f9f9f9; | |||
| border: 1px solid #D0D0D0; | |||
| color: #002166; | |||
| display: block; | |||
| margin: 14px 0 14px 0; | |||
| padding: 12px 10px 12px 10px; | |||
| } | |||
| #container { | |||
| margin: 10px; | |||
| border: 1px solid #D0D0D0; | |||
| box-shadow: 0 0 8px #D0D0D0; | |||
| } | |||
| p { | |||
| margin: 12px 15px 12px 15px; | |||
| } | |||
| </style> | |||
| </head> | |||
| <body> | |||
| <div id="container"> | |||
| <h1><?php echo $heading; ?></h1> | |||
| <?php echo $message; ?> | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,64 @@ | |||
| <?php | |||
| defined('BASEPATH') OR exit('No direct script access allowed'); | |||
| ?><!DOCTYPE html> | |||
| <html lang="en"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <title>Database Error</title> | |||
| <style type="text/css"> | |||
| ::selection { background-color: #E13300; color: white; } | |||
| ::-moz-selection { background-color: #E13300; color: white; } | |||
| body { | |||
| background-color: #fff; | |||
| margin: 40px; | |||
| font: 13px/20px normal Helvetica, Arial, sans-serif; | |||
| color: #4F5155; | |||
| } | |||
| a { | |||
| color: #003399; | |||
| background-color: transparent; | |||
| font-weight: normal; | |||
| } | |||
| h1 { | |||
| color: #444; | |||
| background-color: transparent; | |||
| border-bottom: 1px solid #D0D0D0; | |||
| font-size: 19px; | |||
| font-weight: normal; | |||
| margin: 0 0 14px 0; | |||
| padding: 14px 15px 10px 15px; | |||
| } | |||
| code { | |||
| font-family: Consolas, Monaco, Courier New, Courier, monospace; | |||
| font-size: 12px; | |||
| background-color: #f9f9f9; | |||
| border: 1px solid #D0D0D0; | |||
| color: #002166; | |||
| display: block; | |||
| margin: 14px 0 14px 0; | |||
| padding: 12px 10px 12px 10px; | |||
| } | |||
| #container { | |||
| margin: 10px; | |||
| border: 1px solid #D0D0D0; | |||
| box-shadow: 0 0 8px #D0D0D0; | |||
| } | |||
| p { | |||
| margin: 12px 15px 12px 15px; | |||
| } | |||
| </style> | |||
| </head> | |||
| <body> | |||
| <div id="container"> | |||
| <h1><?php echo $heading; ?></h1> | |||
| <?php echo $message; ?> | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,32 @@ | |||
| <?php | |||
| defined('BASEPATH') OR exit('No direct script access allowed'); | |||
| ?> | |||
| <div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> | |||
| <h4>An uncaught Exception was encountered</h4> | |||
| <p>Type: <?php echo get_class($exception); ?></p> | |||
| <p>Message: <?php echo $message; ?></p> | |||
| <p>Filename: <?php echo $exception->getFile(); ?></p> | |||
| <p>Line Number: <?php echo $exception->getLine(); ?></p> | |||
| <?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?> | |||
| <p>Backtrace:</p> | |||
| <?php foreach ($exception->getTrace() as $error): ?> | |||
| <?php if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?> | |||
| <p style="margin-left:10px"> | |||
| File: <?php echo $error['file']; ?><br /> | |||
| Line: <?php echo $error['line']; ?><br /> | |||
| Function: <?php echo $error['function']; ?> | |||
| </p> | |||
| <?php endif ?> | |||
| <?php endforeach ?> | |||
| <?php endif ?> | |||
| </div> | |||
| @@ -0,0 +1,64 @@ | |||
| <?php | |||
| defined('BASEPATH') OR exit('No direct script access allowed'); | |||
| ?><!DOCTYPE html> | |||
| <html lang="en"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <title>Error</title> | |||
| <style type="text/css"> | |||
| ::selection { background-color: #E13300; color: white; } | |||
| ::-moz-selection { background-color: #E13300; color: white; } | |||
| body { | |||
| background-color: #fff; | |||
| margin: 40px; | |||
| font: 13px/20px normal Helvetica, Arial, sans-serif; | |||
| color: #4F5155; | |||
| } | |||
| a { | |||
| color: #003399; | |||
| background-color: transparent; | |||
| font-weight: normal; | |||
| } | |||
| h1 { | |||
| color: #444; | |||
| background-color: transparent; | |||
| border-bottom: 1px solid #D0D0D0; | |||
| font-size: 19px; | |||
| font-weight: normal; | |||
| margin: 0 0 14px 0; | |||
| padding: 14px 15px 10px 15px; | |||
| } | |||
| code { | |||
| font-family: Consolas, Monaco, Courier New, Courier, monospace; | |||
| font-size: 12px; | |||
| background-color: #f9f9f9; | |||
| border: 1px solid #D0D0D0; | |||
| color: #002166; | |||
| display: block; | |||
| margin: 14px 0 14px 0; | |||
| padding: 12px 10px 12px 10px; | |||
| } | |||
| #container { | |||
| margin: 10px; | |||
| border: 1px solid #D0D0D0; | |||
| box-shadow: 0 0 8px #D0D0D0; | |||
| } | |||
| p { | |||
| margin: 12px 15px 12px 15px; | |||
| } | |||
| </style> | |||
| </head> | |||
| <body> | |||
| <div id="container"> | |||
| <h1><?php echo $heading; ?></h1> | |||
| <?php echo $message; ?> | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,33 @@ | |||
| <?php | |||
| defined('BASEPATH') OR exit('No direct script access allowed'); | |||
| ?> | |||
| <div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> | |||
| <h4>A PHP Error was encountered</h4> | |||
| <p>Severity: <?php echo $severity; ?></p> | |||
| <p>Message: <?php echo $message; ?></p> | |||
| <p>Filename: <?php echo $filepath; ?></p> | |||
| <p>Line Number: <?php echo $line; ?></p> | |||
| <?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?> | |||
| <p>Backtrace:</p> | |||
| <?php foreach (debug_backtrace() as $error): ?> | |||
| <?php if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?> | |||
| <p style="margin-left:10px"> | |||
| File: <?php echo $error['file'] ?><br /> | |||
| Line: <?php echo $error['line'] ?><br /> | |||
| Function: <?php echo $error['function'] ?> | |||
| </p> | |||
| <?php endif ?> | |||
| <?php endforeach ?> | |||
| <?php endif ?> | |||
| </div> | |||
| @@ -0,0 +1,11 @@ | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <title>403 Forbidden</title> | |||
| </head> | |||
| <body> | |||
| <p>Directory access is forbidden.</p> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,11 @@ | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <title>403 Forbidden</title> | |||
| </head> | |||
| <body> | |||
| <p>Directory access is forbidden.</p> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,11 @@ | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <title>403 Forbidden</title> | |||
| </head> | |||
| <body> | |||
| <p>Directory access is forbidden.</p> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,436 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh-TW"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <meta name="description" content=""> | |||
| <meta name="author" content=""> | |||
| <title>警急求救地圖 (<?=STATION_NAME?>)</title> | |||
| <!-- Bootstrap Core CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> | |||
| <!-- MetisMenu CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> | |||
| <!-- Timeline CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/timeline.css" rel="stylesheet"> | |||
| <!-- Custom CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/sb-admin-2.css" rel="stylesheet"> | |||
| <!-- Morris Charts CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.css" rel="stylesheet"> | |||
| <!-- Custom Fonts --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | |||
| <script src="<?=WEB_LIB?>js/mqttws.min.js"></script> | |||
| </head> | |||
| <body style="font-family:Microsoft JhengHei;"> | |||
| <div id="wrapper"> | |||
| <!-- Navigation --> | |||
| <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> | |||
| <div class="navbar-header"> | |||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | |||
| <span class="sr-only">Toggle navigation</span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| </button> | |||
| <a class="navbar-brand" href="#">警急求救地圖 (<?=STATION_NAME?>)</a> | |||
| </div> | |||
| <!-- /.navbar-top-links(左側選單) --> | |||
| <div class="navbar-default sidebar" role="navigation"> | |||
| <div class="sidebar-nav navbar-collapse"> | |||
| <ul class="nav" id="side-menu"> | |||
| <li> | |||
| <a href="#"><i class="fa fa-user fa-fw"></i>服務項目<span class="fa arrow"></span></a> | |||
| <ul class="nav nav-second-level"> | |||
| <li> | |||
| <a href="#" onclick="show_item('homepage');">首頁</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('B1');">B1 樓層</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F1');">F1 樓層</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F2');">F2 樓層</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F3');">F3 樓層</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F4');">F4 樓層</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F5');">F5 樓層</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F6');">F6 樓層</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F7');">F7 樓層</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="AltobObject.SosMap.stopAlertSound();">[ 解除警報聲 ]</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="AltobObject.SosMap.cleanMapSOS();">[ 清除位置標示 ]</a> | |||
| </li> | |||
| <!--li> | |||
| <a href="#" onclick="test();">test</a> | |||
| </li--> | |||
| </ul> | |||
| <!-- /.nav-second-level --> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <!-- /.sidebar-collapse --> | |||
| </div> | |||
| <!-- /.navbar-static-side --> | |||
| </nav> | |||
| <div id="page-wrapper"><?php /* 主要資料顯示區 */ ?> | |||
| <div class="row"> | |||
| <div class="col-lg-12"> | |||
| <h1 class="page-header">警急求救地圖 (<?=STATION_NAME?>)</h1><?php /* 右側小表頭 */ ?> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- /.row --> | |||
| <?php /* ----- 首頁 ----- */ ?> | |||
| <div data-items="homepage" class="row"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 首頁 | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="B1 樓層" onclick="show_item('B1');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F1 樓層" onclick="show_item('F1');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F2 樓層" onclick="show_item('F2');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F3 樓層" onclick="show_item('F3');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F4 樓層" onclick="show_item('F4');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F5 樓層" onclick="show_item('F5');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F6 樓層" onclick="show_item('F6');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F7 樓層" onclick="show_item('F7');" /></td> | |||
| </tr> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 首頁(結束) ----- */ ?> | |||
| <?php /* ----- B1 樓層 ----- */ ?> | |||
| <div data-items="B1" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>B1 樓層 - 操作:</span> | |||
| <button id="zoom0b1canvas">還原</button> | |||
| <button id="zoomInb1canvas">放大</button> | |||
| <button id="zoomOutb1canvas">縮小</button> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="b1canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- B1 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F1 樓層 ----- */ ?> | |||
| <div data-items="F1" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F1 樓層 - 操作:</span> | |||
| <button id="zoom0f1canvas">還原</button> | |||
| <button id="zoomInf1canvas">放大</button> | |||
| <button id="zoomOutf1canvas">縮小</button> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f1canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F1 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F2 樓層 ----- */ ?> | |||
| <div data-items="F2" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F2 樓層 - 操作:</span> | |||
| <button id="zoom0f2canvas">還原</button> | |||
| <button id="zoomInf2canvas">放大</button> | |||
| <button id="zoomOutf2canvas">縮小</button> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f2canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F2 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F3 樓層 ----- */ ?> | |||
| <div data-items="F3" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F3 樓層 - 操作:</span> | |||
| <button id="zoom0f3canvas">還原</button> | |||
| <button id="zoomInf3canvas">放大</button> | |||
| <button id="zoomOutf3canvas">縮小</button> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f3canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F3 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F4 樓層 ----- */ ?> | |||
| <div data-items="F4" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F4 樓層 - 操作:</span> | |||
| <button id="zoom0f4canvas">還原</button> | |||
| <button id="zoomInf4canvas">放大</button> | |||
| <button id="zoomOutf4canvas">縮小</button> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f4canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F4 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F5 樓層 ----- */ ?> | |||
| <div data-items="F5" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F5 樓層 - 操作:</span> | |||
| <button id="zoom0f5canvas">還原</button> | |||
| <button id="zoomInf5canvas">放大</button> | |||
| <button id="zoomOutf5canvas">縮小</button> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f5canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F5 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F6 樓層 ----- */ ?> | |||
| <div data-items="F6" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F6 樓層 - 操作:</span> | |||
| <button id="zoom0f6canvas">還原</button> | |||
| <button id="zoomInf6canvas">放大</button> | |||
| <button id="zoomOutf6canvas">縮小</button> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f6canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F6 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F7 樓層 ----- */ ?> | |||
| <div data-items="F7" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F7 樓層 - 操作:</span> | |||
| <button id="zoom0f7canvas">還原</button> | |||
| <button id="zoomInf7canvas">放大</button> | |||
| <button id="zoomOutf7canvas">縮小</button> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f7canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F7 樓層(結束) ----- */ ?> | |||
| <!-- /#page-wrapper --> | |||
| </div> | |||
| <!-- /#wrapper --> | |||
| <!-- jQuery --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script> | |||
| <!-- Bootstrap Core JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script> | |||
| <!-- Metis Menu Plugin JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script> | |||
| <!-- Morris Charts JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script> | |||
| <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script--> | |||
| <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script--> | |||
| <!-- virtual keyboard --> | |||
| <!--link href="<?=WEB_LIB?>virtual-keyboard/css/jquery-ui.min.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>virtual-keyboard/css/keyboard.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery-ui.min.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.extension-caret.js"></script--> | |||
| <!-- jQuery validate --> | |||
| <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script> | |||
| <!-- alertify --> | |||
| <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>js/alertify.min.js"></script> | |||
| <!-- altob sos map --> | |||
| <script src="<?=WEB_LIB?>js/altob-sos-map.js"></script> | |||
| <!-- Custom Theme JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script> | |||
| <div id="works" style="display:none;"></div><?php /* 作為浮動顯示區之用 */ ?> | |||
| </body> | |||
| </html> | |||
| <script> | |||
| <?php /* 顯示指定項目 */ ?> | |||
| function show_item(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| <?php /* validate 設定start */ ?> | |||
| $.validate( | |||
| { | |||
| modules : 'security', | |||
| } | |||
| ); | |||
| <?php /* validate 設定end */ ?> | |||
| <?php /* 警急求救平面圖 */ ?> | |||
| AltobObject.SosMap({ | |||
| getSosUrl: "http://192.168.10.201/sos/get_sos.php", // 警急求救資料 API | |||
| dataReloadIntervalTimeMillis: 5000, // 資料, 自動更新週期 ( 5 sec ) | |||
| dataReloadErrorLimit: 5, // 資料, 連線容錯次數 | |||
| soundInfo: { | |||
| src: '<?=SERVER_URL?>sos/red_alert.wav' | |||
| }, | |||
| mapInfo: { | |||
| map1: { | |||
| floorName: 'B1', | |||
| canvasId: 'b1canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/b1_map.png' | |||
| }, | |||
| map2: { | |||
| floorName: 'F1', | |||
| canvasId: 'f1canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f1_map.png' | |||
| }, | |||
| map3: { | |||
| floorName: 'F2', | |||
| canvasId: 'f2canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f2_map.png' | |||
| }, | |||
| map4: { | |||
| floorName: 'F3', | |||
| canvasId: 'f3canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f3_map.png' | |||
| }, | |||
| map5: { | |||
| floorName: 'F4', | |||
| canvasId: 'f4canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f4_map.png' | |||
| }, | |||
| map6: { | |||
| floorName: 'F5', | |||
| canvasId: 'f5canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f5_map.png' | |||
| }, | |||
| map7: { | |||
| floorName: 'F6', | |||
| canvasId: 'f6canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f6_map.png' | |||
| }, | |||
| map8: { | |||
| floorName: 'F7', | |||
| canvasId: 'f7canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f7_map.png' | |||
| } | |||
| } | |||
| }); | |||
| }); | |||
| </script> | |||
| @@ -0,0 +1,182 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh-TW"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <meta name="description" content=""> | |||
| <meta name="author" content=""> | |||
| <title>處理完成</title> | |||
| <!-- Bootstrap Core CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> | |||
| <!-- MetisMenu CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> | |||
| <!-- Timeline CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/timeline.css" rel="stylesheet"> | |||
| <!-- Custom CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/sb-admin-2.css" rel="stylesheet"> | |||
| <!-- Morris Charts CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.css" rel="stylesheet"> | |||
| <!-- Custom Fonts --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | |||
| <script src="<?=WEB_LIB?>js/mqttws.min.js"></script> | |||
| </head> | |||
| <body style="font-family:Microsoft JhengHei;"> | |||
| <div id="wrapper"> | |||
| <!-- Navigation --> | |||
| <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> | |||
| <div class="navbar-header"> | |||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | |||
| <span class="sr-only">Toggle navigation</span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| </button> | |||
| <a class="navbar-brand" href="#" onclick="go_payment();">返回首頁</a> | |||
| </div> | |||
| <!-- /.navbar-top-links(左側選單) --> | |||
| <div class="navbar-default sidebar" role="navigation"> | |||
| <div class="sidebar-nav navbar-collapse"> | |||
| <ul class="nav" id="side-menu"> | |||
| <li> | |||
| <a href="#"><i class="fa fa-user fa-fw"></i>服務項目<span class="fa arrow"></span></a> | |||
| <ul class="nav nav-second-level"> | |||
| <li> | |||
| <a href="#" onclick="go_payment();">返回首頁</a> | |||
| </li> | |||
| </ul> | |||
| <!-- /.nav-second-level --> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <!-- /.sidebar-collapse --> | |||
| </div> | |||
| <!-- /.navbar-static-side --> | |||
| </nav> | |||
| <div id="page-wrapper"><?php /* 主要資料顯示區 */ ?> | |||
| <div class="row"> | |||
| <div class="col-lg-12"> | |||
| <h1 class="page-header">處理完成</h1><?php /* 右側小表頭 */ ?> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- /.row --> | |||
| <?php /* ----- 首頁 ----- */ ?> | |||
| <div data-items="homepage" class="row"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 首頁 | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="返回首頁" onclick="go_payment();" /></td> | |||
| </tr> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 首頁(結束) ----- */ ?> | |||
| <!-- /#page-wrapper --> | |||
| </div> | |||
| <!-- /#wrapper --> | |||
| <!-- jQuery --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script> | |||
| <!-- Bootstrap Core JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script> | |||
| <!-- Metis Menu Plugin JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script> | |||
| <!-- Morris Charts JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script> | |||
| <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script--> | |||
| <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script--> | |||
| <!-- virtual keyboard --> | |||
| <!--link href="<?=WEB_LIB?>virtual-keyboard/css/jquery-ui.min.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>virtual-keyboard/css/keyboard.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery-ui.min.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.extension-caret.js"></script--> | |||
| <!-- jQuery validate --> | |||
| <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script> | |||
| <!-- alertify --> | |||
| <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>js/alertify.min.js"></script> | |||
| <!-- Custom Theme JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script> | |||
| <div id="works" style="display:none;"></div><?php /* 作為浮動顯示區之用 */ ?> | |||
| </body> | |||
| </html> | |||
| <script> | |||
| <?php /* alertify function */ ?> | |||
| function alertify_log($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.log($msg); | |||
| } | |||
| function alertify_error($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.error($msg); | |||
| } | |||
| function alertify_success($msg) | |||
| { | |||
| alertify.set({delay : 3000}); | |||
| alertify.success($msg); | |||
| } | |||
| <?php /* 顯示指定項目 */ ?> | |||
| function show_item(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 顯示指定項目, 不修改資料 */ ?> | |||
| function show_item_without_change(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 返回首頁 */ ?> | |||
| function go_payment() | |||
| { | |||
| window.open("<?=APP_URL?>", "_self"); | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| <?php /* validate 設定start */ ?> | |||
| $.validate( | |||
| { | |||
| modules : 'security', | |||
| } | |||
| ); | |||
| <?php /* validate 設定end */ ?> | |||
| alertify_success("付款成功<br/><br/>謝謝!!"); | |||
| }); | |||
| </script> | |||
| @@ -0,0 +1,846 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh-TW"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <meta name="description" content=""> | |||
| <meta name="author" content=""> | |||
| <title><?=STATION_NAME?> - 歐特儀自動化服務機</title> | |||
| <!-- Bootstrap Core CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> | |||
| <!-- MetisMenu CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> | |||
| <!-- Timeline CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/timeline.css" rel="stylesheet"> | |||
| <!-- Custom CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/sb-admin-2.css" rel="stylesheet"> | |||
| <!-- Morris Charts CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.css" rel="stylesheet"> | |||
| <!-- Custom Fonts --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | |||
| </head> | |||
| <body style="font-family:Microsoft JhengHei;"> | |||
| <div id="wrapper"> | |||
| <!-- Navigation --> | |||
| <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> | |||
| <div class="navbar-header"> | |||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | |||
| <span class="sr-only">Toggle navigation</span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| </button> | |||
| <a class="navbar-brand" href=""><?=STATION_NAME?>停車場</a> | |||
| </div> | |||
| <!-- /.navbar-top-links(左側選單) --> | |||
| <div class="navbar-default sidebar" role="navigation"> | |||
| <div class="sidebar-nav navbar-collapse"> | |||
| <ul class="nav" id="side-menu"> | |||
| <li> | |||
| <a href="#"><i class="fa fa-user fa-fw"></i>服務項目<span class="fa arrow"></span></a> | |||
| <ul class="nav nav-second-level"> | |||
| <li> | |||
| <a href="#" onclick="show_item('payment');">繳月租</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('car_lock');">會員鎖車</a> | |||
| </li> | |||
| </ul> | |||
| <!-- /.nav-second-level --> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <!-- /.sidebar-collapse --> | |||
| </div> | |||
| <!-- /.navbar-static-side --> | |||
| </nav> | |||
| <div id="page-wrapper"><?php /* 主要資料顯示區 */ ?> | |||
| <div class="row"> | |||
| <div class="col-lg-12"> | |||
| <h1 class="page-header"><?=STATION_NAME?> - 歐特儀自動化服務機</h1><?php /* 右側小表頭 */ ?> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- /.row --> | |||
| <?php /* ----- 付款 ----- */ ?> | |||
| <div data-items="payment" class="row"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 繳月租 | |||
| </div> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <form id="payment_form" role="form" method="post"> | |||
| <div class="form-group"> | |||
| <label>車牌號碼</label> | |||
| <input type="text" id="payment_lpr" class="form-control" style="text-transform:uppercase" placeholder="限英數字" autofocus required pattern="[A-Za-z0-9]*" /> | |||
| </div> | |||
| <button type="submit" class="btn btn-default"onclick="do_payment(event);">確定</button> | |||
| <button type="reset" class="btn btn-default">重填</button> | |||
| </form> | |||
| </div> | |||
| <!-- /.col-lg-6 (nested) --> | |||
| </div> | |||
| </div> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 付款(結束) ----- */ ?> | |||
| <?php /* ----- 帳單明細顯示 ----- */ ?> | |||
| <div data-items="price_data" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 帳單明細 | |||
| </div> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-12"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <thead> | |||
| <tr> | |||
| <th style="text-align:center;"></th> | |||
| <th style="text-align:center;">說明</th> | |||
| <th style="text-align:center;">結算</th> | |||
| </tr> | |||
| <tr id="price_data_list" style="display:none;"> | |||
| <td data-tag="p_no" style="text-align:center;vertical-align: middle;"></td> | |||
| <td data-tag="p_meta" style="text-align:left;vertical-align: middle;"></td> | |||
| <td data-tag="p_result" style="text-align:left;vertical-align: middle;"></td> | |||
| </tr> | |||
| </thead> | |||
| <tbody id="price_data_tbody" style="font-size:10px;"></tbody> | |||
| <tr> | |||
| <td style="text-align:left;vertical-align: middle;"> | |||
| </td> | |||
| <td style="text-align:left;vertical-align: middle;"> | |||
| </td> | |||
| <td style="text-align:left;vertical-align: middle;"> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:left;vertical-align: middle;"> | |||
| </td> | |||
| <td style="text-align:center;vertical-align: middle;"> | |||
| </td> | |||
| <td style="text-align:center;vertical-align: middle;"> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:left;vertical-align: middle;"> | |||
| </td> | |||
| <td style="text-align:center;vertical-align: middle;"> | |||
| 時間加總 | |||
| </td> | |||
| <td style="text-align:center;vertical-align: middle;"> | |||
| 費用加總 | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:left;vertical-align: middle;"> | |||
| </td> | |||
| <td style="text-align:center;vertical-align: middle;"> | |||
| <span id="show_amt_detail_time"></span> | |||
| </td> | |||
| <td style="text-align:center;vertical-align: middle;"> | |||
| <span id="show_amt_detail_price"></span> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:left;vertical-align: middle;"> | |||
| </td> | |||
| <td style="text-align:center;vertical-align: middle;"> | |||
| </td> | |||
| <td style="text-align:center;vertical-align: middle;"> | |||
| <button type="button" class="btn btn-default" onclick="show_item_without_change('payment_data');">返回結帳畫面</button> | |||
| </td> | |||
| </tr> | |||
| </table> | |||
| </div> | |||
| </div> | |||
| <!-- /.col-lg-6 (nested) --> | |||
| </div> | |||
| <?php /* ----- 報表清單(結束) ----- */ ?> | |||
| </div> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 帳單明細顯示(結束) ----- */ ?> | |||
| <?php /* ----- 帳單查詢結果 ----- */ ?> | |||
| <!-- div data-items="rent_sync" class="row" style="display:none;"--> | |||
| <div data-items="payment_data" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 帳單查詢結果 | |||
| </div> | |||
| <div class="panel-body" style="margin: 0px auto;"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6" style="margin: 0px auto;"> | |||
| <form id="payment_data" role="form" method="post"> | |||
| <table class="table table-striped table-bordered table-hover""> | |||
| <tbody id="available_curr_tbody" style="font-size:14px;"> | |||
| <tr> | |||
| <td style="text-align:right;vertical-align: middle;" width="20%">會員姓名</td> | |||
| <td id="show_member_name" style="text-align:left;vertical-align:middle;text-transform:uppercase;"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;vertical-align: middle;" width="20%">車號</td> | |||
| <td id="show_payment_lpr" style="text-align:left;vertical-align:middle;text-transform:uppercase;"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;vertical-align: middle;">到期日</td> | |||
| <td id="show_end_date" style="text-align:left;vertical-align: middle;"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;vertical-align: middle;">次期起始日</td> | |||
| <td id="show_next_start" style="text-align:left;vertical-align: middle;"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;vertical-align: middle;">次期到期日</td> | |||
| <td id="show_next_end" style="text-align:left;vertical-align: middle;"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;vertical-align: middle;">金額 (NTD)</td> | |||
| <td id="show_amt" style="text-align:left;vertical-align: middle;"></td> | |||
| </tr> | |||
| <tr class="form-group"style="display:none;"> | |||
| <td style="text-align:right;vertical-align: middle;">發票載具 <br/>(手機條碼)</td> | |||
| <td style="text-align:left;vertical-align: middle;"> | |||
| <input type="text" id="invoice_receiver" class="form-control" placeholder="如不要發票請留空白" | |||
| data-validation="custom" | |||
| data-validation-regexp="^$|^(?=.{7}$)([A-Za-z0-9]+)$|^(?=.{8}$)\u002F([A-Za-z0-9]+)$" | |||
| data-validation-error-msg="請輸入正確載具<br/>格式: / + 7碼 <br/>(共8碼)" | |||
| /> | |||
| </td> | |||
| </tr> | |||
| <tr class="form-group" style="display:none;"> | |||
| <td style="text-align:right;vertical-align: middle;"></td> | |||
| <td style="text-align:left;vertical-align: middle; color: red;"> | |||
| 若發票載具留空白,發票將自動送個社福團體 | |||
| </td> | |||
| </tr> | |||
| <tr class="form-group"> | |||
| <td style="text-align:right;vertical-align: middle;">公司統編</td> | |||
| <td style="text-align:left;vertical-align: middle;"> | |||
| <input type="tel" id="company_no" class="form-control" placeholder="如不打統編請留空白" | |||
| data-validation="custom" | |||
| data-validation-optional="true" | |||
| data-validation-regexp="^(?=.{8}$)([0-9]+)$" | |||
| data-validation-error-msg="請輸入正確統編<br/>例如:80682490" | |||
| data-validation-error-msg-container="#company_no_error_msg" | |||
| /> | |||
| <span id="company_no_error_msg"></span> | |||
| </td> | |||
| </tr> | |||
| <tr class="form-group"> | |||
| <td style="text-align:right;vertical-align: middle;">電子信箱</td> | |||
| <td style="text-align:left;vertical-align: middle;"> | |||
| <input type="email" id="email" class="form-control" placeholder="發票將寄信通知" | |||
| data-validation="email" | |||
| data-validation-optional="true" | |||
| data-validation-error-msg="請輸入正確信箱<br/>例如:altob@gmail.com" | |||
| data-validation-error-msg-container="#email_error_msg" | |||
| /> | |||
| <span id="email_error_msg"></span> | |||
| </td> | |||
| </tr> | |||
| <tr class="form-group"> | |||
| <td style="text-align:right;vertical-align: middle;">手機號碼</td> | |||
| <td style="text-align:left;vertical-align: middle;"> | |||
| <input type="tel" id="mobile" class="form-control" placeholder="發票將寄簡訊通知" | |||
| data-validation="custom" | |||
| data-validation-optional="true" | |||
| data-validation-regexp="^(?=.{10}$)09([0-9]+)$" | |||
| data-validation-error-msg="請輸入正確手機號碼<br/>例如:0912345678" | |||
| data-validation-error-msg-container="#mobile_error_msg" | |||
| /> | |||
| <span id="mobile_error_msg"></span> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;vertical-align: middle;">訂單编號</td> | |||
| <td id="show_order_no" style="text-align:left;vertical-align: middle;"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;vertical-align: middle;">有效期限</td> | |||
| <td id="show_balance_time_limit_countdown" style="text-align:left;vertical-align: middle; color: red;"></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:right;vertical-align: middle;"> | |||
| <button type="button" class="btn btn-default" onclick="transfer_money(event);">開始付款</button> | |||
| </td> | |||
| <td style="text-align:left;vertical-align: middle;"> | |||
| <!--button type="button" class="btn btn-default" onclick="show_item('price_data');">查看明細</button--> | |||
| <button type="button" class="btn btn-default" onclick="show_item('payment');">取消</button> | |||
| </td> | |||
| </tr> | |||
| </tbody> | |||
| </table> | |||
| </form> | |||
| </div> | |||
| <!-- /.col-lg-6 (nested) --> | |||
| </div> | |||
| <!-- /.row (nested) --> | |||
| </div> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 帳單查詢結果(結束) ----- */ ?> | |||
| <?php /* ----- 鎖車作業 ----- */ ?> | |||
| <div data-items="car_lock" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 會員鎖車 | |||
| </div> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div class="form-group"> | |||
| <form id="form_lock" method="post"> | |||
| <label>請鍵入車牌號碼</label> | |||
| <input type="text" id="lpr_lock" class="form-control" style="text-transform:uppercase;" placeholder="限英數字" autofocus required pattern="[A-Za-z0-9]*" /><br /> | |||
| <label>密碼(第一次與車號相同)</label> | |||
| <input type="password" id="pswd_lock" class="form-control" style="text-transform:uppercase;" autofocus required pattern="[A-Za-z0-9]*" /><br /> | |||
| <button type="submit" id="qcar_lock" class="btn btn-default">查詢</button> | |||
| <button type="submit" id="change_pswd_lock" class="btn btn-default">更改密碼</button> | |||
| <button type="reset" class="btn btn-default">清除資料</button> | |||
| </form> | |||
| </div> | |||
| </div> | |||
| <!-- /.col-lg-6 (nested) --> | |||
| </div> | |||
| </div> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 鎖車(結束) ----- */ ?> | |||
| <?php /* ----- 更改鎖車密碼 ----- */ ?> | |||
| <div data-items="pswd_lock" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 更改鎖車密碼 | |||
| </div> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div class="form-group"> | |||
| <form id="form_new_pswd" method="post"> | |||
| <label>新密碼</label> | |||
| <input type="text" id="new_pswd1" class="form-control" style="text-transform:uppercase;" placeholder="限英數字" autofocus required pattern="[A-Za-z0-9]*" /><br /> | |||
| <label>再鍵一次密碼</label> | |||
| <input type="password" id="new_pswd2" class="form-control" style="text-transform:uppercase;" placeholder="限英數字" autofocus required pattern="[A-Za-z0-9]*" /><br /> | |||
| <button type="submit" class="btn btn-default">儲存</button> | |||
| <button type="button" class="btn btn-default">取消</button> | |||
| </form> | |||
| </div> | |||
| </div> | |||
| <!-- /.col-lg-6 (nested) --> | |||
| </div> | |||
| </div> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 更改密碼(結束) ----- */ ?> | |||
| <?php /* ----- 鎖車與解鎖 ----- */ ?> | |||
| <div data-items="status_lock" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 鎖車/解鎖 | |||
| </div> | |||
| <div class="panel-body"> | |||
| <div data-rows class="row"> | |||
| <div class="col-lg-6"> | |||
| <div class="form-group"> | |||
| <form id="form_active_lock" method="post"> | |||
| <label><span id="lpr_on_off"></span>: [<span id="lock_on_off">無</span>鎖車]</label><br /> | |||
| <input type="button" id="lock_unlock" class="btn btn-default" value="鎖車" /> | |||
| <input type="button" id="lock_back" class="btn btn-default" value="結束" /> | |||
| </form> | |||
| </div> | |||
| </div> | |||
| <!-- /.col-lg-6 (nested) --> | |||
| </div> | |||
| </div> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 鎖車與解鎖(結束) ----- */ ?> | |||
| <!-- /#page-wrapper --> | |||
| </div> | |||
| <!-- /#wrapper --> | |||
| <!-- jQuery --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script> | |||
| <!-- Bootstrap Core JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script> | |||
| <!-- Metis Menu Plugin JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script> | |||
| <!-- Morris Charts JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script> | |||
| <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script--> | |||
| <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script--> | |||
| <!-- virtual keyboard --> | |||
| <!--link href="<?=WEB_LIB?>virtual-keyboard/css/jquery-ui.min.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>virtual-keyboard/css/keyboard.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery-ui.min.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.extension-caret.js"></script--> | |||
| <!-- jQuery validate --> | |||
| <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script> | |||
| <!-- alertify --> | |||
| <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>js/alertify.min.js"></script> | |||
| <!-- alertify --> | |||
| <script src="<?=WEB_LIB?>js/moment.min.js"></script> | |||
| <!-- md5 --> | |||
| <script src="<?=WEB_LIB?>js/md5.min.js"></script> | |||
| <!-- Custom Theme JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script> | |||
| <div id="works" style="display:none;"></div><?php /* 作為浮動顯示區之用 */ ?> | |||
| </body> | |||
| </html> | |||
| <script> | |||
| <?php /* alertify function */ ?> | |||
| function alertify_log($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.log($msg); | |||
| } | |||
| function alertify_error($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.error($msg); | |||
| } | |||
| function alertify_success($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.success($msg); | |||
| } | |||
| var refreshIntervalId = 0; // timer id | |||
| <?php /* 顯示指定項目 */ ?> | |||
| function show_item(tags) | |||
| { | |||
| $("#payment_lpr").val("");<?php /* 清除車號欄位 */ ?> | |||
| $("#show_member_name").val(""); | |||
| $("#show_payment_lpr").val(""); | |||
| $("#show_end_date").val(""); | |||
| $("#show_next_start").val(""); | |||
| $("#show_next_end").val(""); | |||
| $("#show_amt").val(""); | |||
| $("#invoice_receiver").val(""); | |||
| $("#company_no").val(""); | |||
| $("#email").val(""); | |||
| $("#mobile").val(""); | |||
| $("#show_order_no").val(""); | |||
| $("#show_amt_detail").val(""); | |||
| $("#show_balance_time_limit_countdown").val(""); | |||
| if(tags.indexOf('payment_data') < 0 && tags.indexOf('price_data') < 0){ | |||
| clearInterval(refreshIntervalId); // 消除倒數計時timer | |||
| } | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 顯示指定項目, 不修改資料 */ ?> | |||
| function show_item_without_change(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| // 付款 | |||
| function do_payment(event) | |||
| { | |||
| event.preventDefault(); | |||
| if ($("#payment_lpr").val() == "") | |||
| { | |||
| alertify_error("請填寫車號"); | |||
| return false; | |||
| } | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>payment_lpr", | |||
| type: "post", | |||
| dataType:"text", | |||
| data:{ | |||
| "payment_lpr": $("#payment_lpr").val() | |||
| }, | |||
| success: function(result) | |||
| { | |||
| if (/^[\],:{}\s]*$/.test(result.replace(/\\["\\\/bfnrtu]/g, '@'). | |||
| replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). | |||
| replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { | |||
| //the json is ok | |||
| }else{ | |||
| //the json is not ok | |||
| alertify_error("查無資料,請鍵入正確資料 (回傳資料有誤)"); | |||
| return false; | |||
| } | |||
| var jdata = JSON.parse(result); | |||
| //console.log(jdata); | |||
| if(!jdata) | |||
| { | |||
| alertify_error("查無資料,請鍵入正確資料"); | |||
| return false; | |||
| } | |||
| if(jdata.member_no <= 0) | |||
| { | |||
| alertify_log("查無會員資料"); | |||
| return false; | |||
| } | |||
| if(jdata.amt <= 0) | |||
| { | |||
| alertify_log("目前無須繳款,謝謝"); | |||
| return false; | |||
| } | |||
| if(jdata.amt > 15000) | |||
| { | |||
| alertify_log("[ 代碼:001 ]<br/>請到管理室繳費, 謝謝"); | |||
| return false; | |||
| } | |||
| // variables for time units | |||
| var days, hours, minutes, seconds; | |||
| // get tag element | |||
| var countdown = $("#show_balance_time_limit_countdown"); | |||
| //var countdown_offset_ms = 60*5*1000; // 比資料庫早5分鐘timeout | |||
| var duration = moment.duration({minutes: 5}); // 比資料庫早5分鐘timeout | |||
| // set the date we're counting down to | |||
| var target_date = moment(jdata.balance_time_limit).subtract(duration); | |||
| //var target_date = new Date(jdata.balance_time_limit).getTime(); | |||
| //console.log(target_date.diff(moment(), 'seconds')); | |||
| // update the tag with id "countdown" every 1 second | |||
| refreshIntervalId = setInterval(function () { | |||
| // find the amount of "seconds" between now and target | |||
| var seconds_left = target_date.diff(moment(), 'seconds'); | |||
| //console.log(seconds_left); | |||
| //var current_date = new Date().getTime(); | |||
| //var seconds_left = (target_date - current_date - countdown_offset_ms) / 1000; | |||
| if(seconds_left <= 0){ | |||
| clearInterval(refreshIntervalId); | |||
| // reload page | |||
| location.reload(); | |||
| } | |||
| // do some time calculations | |||
| days = parseInt(seconds_left / 86400); | |||
| seconds_left = seconds_left % 86400; | |||
| hours = parseInt(seconds_left / 3600); | |||
| seconds_left = seconds_left % 3600; | |||
| minutes = parseInt(seconds_left / 60); | |||
| seconds = parseInt(seconds_left % 60); | |||
| if(minutes < 10){ | |||
| minutes = '0' + minutes; | |||
| } | |||
| if(seconds < 10){ | |||
| seconds = '0' + seconds; | |||
| } | |||
| // format countdown string + set tag value | |||
| countdown.text(['還剩 ', minutes, ' : ', seconds, ' 有效'].join('')); | |||
| }, 1000); | |||
| $("#show_payment_lpr").text(jdata.lpr); | |||
| $("#show_member_name").text(jdata.member_name); | |||
| $("#show_end_date").text(jdata.end_time); | |||
| $("#show_next_start").text(jdata.next_start_time); | |||
| $("#show_next_end").text(jdata.next_end_time); | |||
| $("#show_amt").text(jdata.amt); | |||
| $("#show_in_time").text(jdata.in_time); | |||
| $("#show_amt").text([jdata.amt, ' 元'].join('')); | |||
| $("#show_order_no").text(jdata.order_no); | |||
| show_item("payment_data"); | |||
| // parse price detail | |||
| $("#price_data_tbody").html(""); | |||
| } | |||
| }); | |||
| } | |||
| // 開啟轉帳畫面 | |||
| function transfer_money(event) | |||
| { | |||
| event.preventDefault(); | |||
| if(! $("#payment_data").isValid()) return false; | |||
| if($("#email").val() == '' && $("#mobile").val() == '') | |||
| { | |||
| alertify_error("請至少提供一項發票通知方式<br/>1. 電子信箱 <br/>2. 或 手機號碼<br/><br/>謝謝!!"); | |||
| return false; | |||
| } | |||
| if (! confirm("開始結帳嗎 ?")) return false; | |||
| // Create Base64 Object | |||
| var Base64 = {_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}} | |||
| var order_no = $("#show_order_no").text() == '' ? '0' : $("#show_order_no").text(); | |||
| var invoice_receiver = $("#invoice_receiver").val() == '' ? '0' : $("#invoice_receiver").val(); | |||
| var company_no = $("#company_no").val() == '' ? '0' : $("#company_no").val(); | |||
| var email = $("#email").val() == '' ? '0' : Base64.encode($("#email").val()).slice(0, -1); // remove base64 '=' for URI rule | |||
| var mobile = $("#mobile").val() == '' ? '0' : $("#mobile").val(); | |||
| webatm = window.open( | |||
| ["<?=APP_URL?>transfer_money/", | |||
| order_no, "/", | |||
| encodeURI(invoice_receiver), "/", | |||
| encodeURI(company_no), "/", | |||
| email, "/", | |||
| mobile, "/" | |||
| ].join('') | |||
| , "_self"); | |||
| // window.top.close(); // 關視窗 | |||
| // setTimeout(function(){ webatm.close(); }, 3000); | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| <?php /* validate 設定start */ ?> | |||
| $.validate( | |||
| { | |||
| modules : 'security', | |||
| } | |||
| ); | |||
| <?php /* validate 設定end */ ?> | |||
| // 定時自動更新頁面 | |||
| (function autoReloadPage(){ | |||
| var pageReloadTimeMillis = 600000; // 頁面, 自動重新載入週期 ( 10 min ) | |||
| var pageCheckReloadTimeMillis = 10000; // 頁面, 判斷重新載入週期 ( 10 sec ) | |||
| var aliveTime = moment(); | |||
| $(document.body).bind("mousemove keypress", function(e) { | |||
| aliveTime = moment(); | |||
| }); | |||
| function refresh() { | |||
| if(moment() - aliveTime >= pageReloadTimeMillis) // 如果頁面沒動作, 才更新 | |||
| window.location.reload(true); | |||
| else | |||
| setTimeout(refresh, pageCheckReloadTimeMillis); | |||
| } | |||
| setTimeout(refresh, pageCheckReloadTimeMillis); | |||
| })(); | |||
| // ----- 鎖車密碼更新 ----- | |||
| $("#form_new_pswd").submit(function(event) | |||
| { | |||
| event.preventDefault(); | |||
| $("#new_pswd1").val($("#new_pswd1").val().toUpperCase()); | |||
| $("#new_pswd2").val($("#new_pswd2").val().toUpperCase()); | |||
| if ($("#new_pswd1").val() != $("#new_pswd2").val() || $("#new_pswd1").val() == "" || $("#new_pswd2").val() == "") | |||
| { | |||
| alert("密碼不符規定, 請重新輸入 !"); | |||
| return false; | |||
| } | |||
| // 查詢目前有無鎖車狀況 | |||
| $.ajax | |||
| ({ | |||
| url:"<?=APP_URL?>change_pswd", | |||
| dataType:"text", | |||
| type:"post", | |||
| data: | |||
| { "lpr":$("#lpr_lock").val(), | |||
| "new_pswd":$("#new_pswd1").val() | |||
| }, | |||
| success:function(jdata) | |||
| { | |||
| alert("密碼更新完成 !"); | |||
| $("#pswd_lock").val(""); | |||
| show_item("car_lock"); | |||
| } | |||
| }); | |||
| }); | |||
| // ----- 鎖車 ----- | |||
| $("#form_lock").submit(function(event) | |||
| { | |||
| event.preventDefault(); | |||
| submit_id = $(document.activeElement).prop('id'); | |||
| if ($("#lpr_lock").val() == "" || $("#pswd_lock").val() == "") | |||
| { | |||
| alert("請填寫車號及密碼"); | |||
| return false; | |||
| } | |||
| $("#lpr_lock").val($("#lpr_lock").val().toUpperCase()); | |||
| $("#pswd_lock").val($("#pswd_lock").val().toUpperCase()); | |||
| // 查詢目前有無鎖車狀況 | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>security_action/"+$("#lpr_lock").val()+"/"+md5($("#pswd_lock").val().toUpperCase())+"/2", | |||
| dataType:"json", | |||
| type:"post", | |||
| data:{}, | |||
| success:function(jdata) | |||
| { | |||
| if (jdata["result_code"] == "FAIL") | |||
| { | |||
| alert("車號或密碼錯誤"); | |||
| return false; | |||
| } | |||
| // 更改密碼, 進入下一個畫面 | |||
| if (submit_id == "change_pswd_lock") | |||
| { | |||
| $("#new_pswd1").val(""); | |||
| $("#new_pswd2").val(""); | |||
| show_item("pswd_lock"); | |||
| return true; | |||
| } | |||
| $("#lpr_on_off").text($("#lpr_lock").val()); | |||
| lock_on_off = jdata["result"][0]["result"]; | |||
| if (lock_on_off == "ON") | |||
| { | |||
| $("#lock_on_off").text("已"); | |||
| $("#lock_unlock").val("解鎖"); | |||
| } | |||
| else | |||
| { | |||
| $("#lock_on_off").text("無"); | |||
| $("#lock_unlock").val("鎖車"); | |||
| } | |||
| show_item("status_lock"); | |||
| } | |||
| }); | |||
| return false; | |||
| }); | |||
| // ----- 鎖車或解鎖 ----- | |||
| $("#lock_unlock").click(function() | |||
| { | |||
| lock_str = $("#lock_unlock").val(); | |||
| if (!confirm("確定"+lock_str+"嗎 ?")) return false; | |||
| lock_val = lock_str == "解鎖" ? "0" : "1"; | |||
| // 查詢目前有無鎖車狀況 | |||
| $.ajax | |||
| ({ | |||
| url: "<?=APP_URL?>security_action/"+$("#lpr_lock").val()+"/"+md5($("#pswd_lock").val())+"/"+lock_val, | |||
| dataType:"json", | |||
| type:"post", | |||
| data:{}, | |||
| success:function(jdata) | |||
| { | |||
| if (lock_val == "1") | |||
| { | |||
| $("#lock_on_off").text("已"); | |||
| $("#lock_unlock").val("解鎖"); | |||
| } | |||
| else | |||
| { | |||
| $("#lock_on_off").text("無"); | |||
| $("#lock_unlock").val("鎖車"); | |||
| } | |||
| show_item("status_lock"); | |||
| } | |||
| }); | |||
| }); | |||
| // ----- 鎖車結東 ----- | |||
| $("#lock_back,#end_qcar").click(function() | |||
| { | |||
| window.location.reload(true); | |||
| }); | |||
| }); | |||
| </script> | |||
| @@ -0,0 +1,182 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh-TW"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <meta name="description" content=""> | |||
| <meta name="author" content=""> | |||
| <title>處理完成</title> | |||
| <!-- Bootstrap Core CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> | |||
| <!-- MetisMenu CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> | |||
| <!-- Timeline CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/timeline.css" rel="stylesheet"> | |||
| <!-- Custom CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/sb-admin-2.css" rel="stylesheet"> | |||
| <!-- Morris Charts CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.css" rel="stylesheet"> | |||
| <!-- Custom Fonts --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | |||
| <script src="<?=WEB_LIB?>js/mqttws.min.js"></script> | |||
| </head> | |||
| <body style="font-family:Microsoft JhengHei;"> | |||
| <div id="wrapper"> | |||
| <!-- Navigation --> | |||
| <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> | |||
| <div class="navbar-header"> | |||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | |||
| <span class="sr-only">Toggle navigation</span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| </button> | |||
| <a class="navbar-brand" href="#" onclick="go_payment();">返回首頁</a> | |||
| </div> | |||
| <!-- /.navbar-top-links(左側選單) --> | |||
| <div class="navbar-default sidebar" role="navigation"> | |||
| <div class="sidebar-nav navbar-collapse"> | |||
| <ul class="nav" id="side-menu"> | |||
| <li> | |||
| <a href="#"><i class="fa fa-user fa-fw"></i>服務項目<span class="fa arrow"></span></a> | |||
| <ul class="nav nav-second-level"> | |||
| <li> | |||
| <a href="#" onclick="go_payment();">返回首頁</a> | |||
| </li> | |||
| </ul> | |||
| <!-- /.nav-second-level --> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <!-- /.sidebar-collapse --> | |||
| </div> | |||
| <!-- /.navbar-static-side --> | |||
| </nav> | |||
| <div id="page-wrapper"><?php /* 主要資料顯示區 */ ?> | |||
| <div class="row"> | |||
| <div class="col-lg-12"> | |||
| <h1 class="page-header">處理完成</h1><?php /* 右側小表頭 */ ?> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- /.row --> | |||
| <?php /* ----- 首頁 ----- */ ?> | |||
| <div data-items="homepage" class="row"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 首頁 | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="返回首頁" onclick="go_payment();" /></td> | |||
| </tr> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 首頁(結束) ----- */ ?> | |||
| <!-- /#page-wrapper --> | |||
| </div> | |||
| <!-- /#wrapper --> | |||
| <!-- jQuery --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script> | |||
| <!-- Bootstrap Core JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script> | |||
| <!-- Metis Menu Plugin JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script> | |||
| <!-- Morris Charts JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script> | |||
| <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script--> | |||
| <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script--> | |||
| <!-- virtual keyboard --> | |||
| <!--link href="<?=WEB_LIB?>virtual-keyboard/css/jquery-ui.min.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>virtual-keyboard/css/keyboard.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery-ui.min.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.extension-caret.js"></script--> | |||
| <!-- jQuery validate --> | |||
| <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script> | |||
| <!-- alertify --> | |||
| <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>js/alertify.min.js"></script> | |||
| <!-- Custom Theme JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script> | |||
| <div id="works" style="display:none;"></div><?php /* 作為浮動顯示區之用 */ ?> | |||
| </body> | |||
| </html> | |||
| <script> | |||
| <?php /* alertify function */ ?> | |||
| function alertify_log($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.log($msg); | |||
| } | |||
| function alertify_error($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.error($msg); | |||
| } | |||
| function alertify_success($msg) | |||
| { | |||
| alertify.set({delay : 3000}); | |||
| alertify.success($msg); | |||
| } | |||
| <?php /* 顯示指定項目 */ ?> | |||
| function show_item(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 顯示指定項目, 不修改資料 */ ?> | |||
| function show_item_without_change(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 返回首頁 */ ?> | |||
| function go_payment() | |||
| { | |||
| window.open("<?=APP_URL?>", "_self"); | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| <?php /* validate 設定start */ ?> | |||
| $.validate( | |||
| { | |||
| modules : 'security', | |||
| } | |||
| ); | |||
| <?php /* validate 設定end */ ?> | |||
| alertify_success("付款成功<br/><br/>謝謝!!"); | |||
| }); | |||
| </script> | |||
| @@ -0,0 +1,45 @@ | |||
| <!DOCTYPE html> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | |||
| <style> | |||
| body{background-color:black;font-family:Microsoft JhengHei;} | |||
| table{width:100%;text-align:center;} | |||
| .availables /* 空車位數 */ | |||
| { | |||
| font-size:920px; | |||
| font-family:arial; | |||
| font-weight:bolder; | |||
| color:gold; | |||
| text-align:center; | |||
| } | |||
| </style> | |||
| <script src="http://code.jquery.com/jquery-2.1.4.js"></script> | |||
| <html> | |||
| <head> | |||
| <title>剩餘車位數</title> | |||
| </head> | |||
| <body> | |||
| <table style="border:0px;" cellpadding='0' bolder="0"> | |||
| <tr> | |||
| <td><!--marquee direction="up" scrollamount="50"--><div class="availables"><?=$init_value?></div><!--/marquee--></td> | |||
| </tr> | |||
| </table> | |||
| </body> | |||
| <script> | |||
| setInterval(function() | |||
| { | |||
| $.ajax | |||
| ({ | |||
| url: "http://192.168.51.15/get_group_num.php?group_id=<?=$group_id?>", | |||
| type: "post", | |||
| dataType:"text", | |||
| data: {}, | |||
| success: function(jdata) | |||
| { | |||
| $(".availables").text(jdata); | |||
| } | |||
| }); | |||
| }, 2000); | |||
| </script> | |||
| </html> | |||
| @@ -0,0 +1,462 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh-TW"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <meta name="description" content=""> | |||
| <meta name="author" content=""> | |||
| <title>停車場使用狀態 (<?=STATION_NAME?>)</title> | |||
| <!-- Bootstrap Core CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> | |||
| <!-- MetisMenu CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> | |||
| <!-- Timeline CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/timeline.css" rel="stylesheet"> | |||
| <!-- Custom CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/sb-admin-2.css" rel="stylesheet"> | |||
| <!-- Morris Charts CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.css" rel="stylesheet"> | |||
| <!-- Custom Fonts --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | |||
| </head> | |||
| <body style="font-family:Microsoft JhengHei;"> | |||
| <div id="wrapper"> | |||
| <!-- Navigation --> | |||
| <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> | |||
| <div class="navbar-header"> | |||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | |||
| <span class="sr-only">Toggle navigation</span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| </button> | |||
| <a class="navbar-brand" href="#">停車場使用狀態 (<?=STATION_NAME?>)</a> | |||
| </div> | |||
| <!-- /.navbar-top-links(左側選單) --> | |||
| <div class="navbar-default sidebar" role="navigation"> | |||
| <div class="sidebar-nav navbar-collapse"> | |||
| <ul class="nav" id="side-menu"> | |||
| <li> | |||
| <a href="#"><i class="fa fa-user fa-fw"></i>服務項目<span class="fa arrow"></span></a> | |||
| <ul class="nav nav-second-level"> | |||
| <li> | |||
| <a href="#" onclick="show_item('homepage');">首頁</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('B1');">B1 樓層 - 車位使用狀態</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F1');">F1 樓層 - 車位使用狀態</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F2');">F2 樓層 - 車位使用狀態</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F3');">F3 樓層 - 車位使用狀態</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F4');">F4 樓層 - 車位使用狀態</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F5');">F5 樓層 - 車位使用狀態</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F6');">F6 樓層 - 車位使用狀態</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="show_item('F7');">F7 樓層 - 車位使用狀態</a> | |||
| </li> | |||
| <!--li> | |||
| <a href="#" onclick="stopAlertSound();">[ 解除警報聲 ]</a> | |||
| </li> | |||
| <li> | |||
| <a href="#" onclick="cleanMapSOS();">[ 清除位置標示 ]</a> | |||
| </li--> | |||
| <!--li> | |||
| <a href="#" onclick="test();">test</a> | |||
| </li--> | |||
| </ul> | |||
| <!-- /.nav-second-level --> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <!-- /.sidebar-collapse --> | |||
| </div> | |||
| <!-- /.navbar-static-side --> | |||
| </nav> | |||
| <div id="page-wrapper"><?php /* 主要資料顯示區 */ ?> | |||
| <div class="row"> | |||
| <div class="col-lg-12"> | |||
| <h2 class="page-header">車位使用狀態</h2><?php /* 右側小表頭 */ ?> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- /.row --> | |||
| <?php /* ----- 首頁 ----- */ ?> | |||
| <div data-items="homepage" class="row"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 首頁 | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="B1 樓層 - 車位使用狀態" onclick="show_item('B1');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F1 樓層 - 車位使用狀態" onclick="show_item('F1');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F2 樓層 - 車位使用狀態" onclick="show_item('F2');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F3 樓層 - 車位使用狀態" onclick="show_item('F3');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F4 樓層 - 車位使用狀態" onclick="show_item('F4');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F5 樓層 - 車位使用狀態" onclick="show_item('F5');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F6 樓層 - 車位使用狀態" onclick="show_item('F6');" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td style="text-align:center;"><input type="button" value="F7 樓層 - 車位使用狀態" onclick="show_item('F7');" /></td> | |||
| </tr> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 首頁(結束) ----- */ ?> | |||
| <?php /* ----- B1 樓層 ----- */ ?> | |||
| <div data-items="B1" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>B1 車位使用狀態 - 操作:</span> | |||
| <button id="zoom0b1canvas">還原</button> | |||
| <button id="zoomInb1canvas">放大</button> | |||
| <button id="zoomOutb1canvas">縮小</button> | |||
| <span> ( 點撃車位圖示, 取得更多訊息 )</span> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="b1canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- B1 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F1 樓層 ----- */ ?> | |||
| <div data-items="F1" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F1 車位使用狀態 - 操作:</span> | |||
| <button id="zoom0f1canvas">還原</button> | |||
| <button id="zoomInf1canvas">放大</button> | |||
| <button id="zoomOutf1canvas">縮小</button> | |||
| <span> ( 點撃車位圖示, 取得更多訊息 )</span> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f1canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F1 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F2 樓層 ----- */ ?> | |||
| <div data-items="F2" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F2 車位使用狀態 - 操作:</span> | |||
| <button id="zoom0f2canvas">還原</button> | |||
| <button id="zoomInf2canvas">放大</button> | |||
| <button id="zoomOutf2canvas">縮小</button> | |||
| <span> ( 點撃車位圖示, 取得更多訊息 )</span> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f2canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F2 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F3 樓層 ----- */ ?> | |||
| <div data-items="F3" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F3 車位使用狀態 - 操作:</span> | |||
| <button id="zoom0f3canvas">還原</button> | |||
| <button id="zoomInf3canvas">放大</button> | |||
| <button id="zoomOutf3canvas">縮小</button> | |||
| <span> ( 點撃車位圖示, 取得更多訊息 )</span> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f3canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F3 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F4 樓層 ----- */ ?> | |||
| <div data-items="F4" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F4 車位使用狀態 - 操作:</span> | |||
| <button id="zoom0f4canvas">還原</button> | |||
| <button id="zoomInf4canvas">放大</button> | |||
| <button id="zoomOutf4canvas">縮小</button> | |||
| <span> ( 點撃車位圖示, 取得更多訊息 )</span> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f4canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F4 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F5 樓層 ----- */ ?> | |||
| <div data-items="F5" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F5 車位使用狀態 - 操作:</span> | |||
| <button id="zoom0f5canvas">還原</button> | |||
| <button id="zoomInf5canvas">放大</button> | |||
| <button id="zoomOutf5canvas">縮小</button> | |||
| <span> ( 點撃車位圖示, 取得更多訊息 )</span> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f5canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F5 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F6 樓層 ----- */ ?> | |||
| <div data-items="F6" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F6 車位使用狀態 - 操作:</span> | |||
| <button id="zoom0f6canvas">還原</button> | |||
| <button id="zoomInf6canvas">放大</button> | |||
| <button id="zoomOutf6canvas">縮小</button> | |||
| <span> ( 點撃車位圖示, 取得更多訊息 )</span> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f6canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F6 樓層(結束) ----- */ ?> | |||
| <?php /* ----- F7 樓層 ----- */ ?> | |||
| <div data-items="F7" class="row" style="display:none;"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| <span>F7 車位使用狀態 - 操作:</span> | |||
| <button id="zoom0f7canvas">還原</button> | |||
| <button id="zoomInf7canvas">放大</button> | |||
| <button id="zoomOutf7canvas">縮小</button> | |||
| <span> ( 點撃車位圖示, 取得更多訊息 )</span> | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <canvas id="f7canvas"></canvas> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- F7 樓層(結束) ----- */ ?> | |||
| <!-- /#page-wrapper --> | |||
| </div> | |||
| <!-- /#wrapper --> | |||
| <!-- jQuery --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script> | |||
| <!-- Bootstrap Core JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script> | |||
| <!-- Metis Menu Plugin JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script> | |||
| <!-- Morris Charts JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script> | |||
| <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script--> | |||
| <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script--> | |||
| <!-- virtual keyboard --> | |||
| <!--link href="<?=WEB_LIB?>virtual-keyboard/css/jquery-ui.min.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>virtual-keyboard/css/keyboard.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery-ui.min.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.extension-caret.js"></script--> | |||
| <!-- jQuery validate --> | |||
| <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script> | |||
| <!-- alertify --> | |||
| <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>js/alertify.min.js"></script> | |||
| <!-- moment --> | |||
| <script src="<?=WEB_LIB?>js/moment.min.js"></script> | |||
| <!-- altob status map --> | |||
| <script src="<?=WEB_LIB?>js/altob-status-map.js"></script> | |||
| <!-- Custom Theme JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script> | |||
| <div id="works" style="display:none;"></div><?php /* 作為浮動顯示區之用 */ ?> | |||
| </body> | |||
| </html> | |||
| <script> | |||
| <?php /* 顯示指定項目 */ ?> | |||
| function show_item(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| <?php /* validate 設定start */ ?> | |||
| $.validate( | |||
| { | |||
| modules : 'security', | |||
| } | |||
| ); | |||
| <?php /* validate 設定end */ ?> | |||
| <?php /* 樓層平面圖 */ ?> | |||
| AltobObject.StatusMap({ | |||
| queryStationPksUrl: "http://192.168.10.201/pks.html/query_station_pks/<?=STATION_NO?>/", // 廠站車位資料 API | |||
| queryStationStatusUrl: "http://192.168.10.201/pks.html/query_station_status/<?=STATION_NO?>", // 廠站地圖資料 API | |||
| dataReloadIntervalTimeMillis: 30000, // 資料, 自動更新週期 ( 30 sec ) | |||
| dataReloadErrorLimit: 5, // 資料, 連線容錯次數 | |||
| mapBaseRadius: 18, // 地圖, 圈圈大小基數 | |||
| mapInfo: { | |||
| map1: { | |||
| floorName: 'B1', | |||
| canvasId: 'b1canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/b1_map.png' | |||
| }, | |||
| map2: { | |||
| floorName: 'F1', | |||
| canvasId: 'f1canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f1_map.png' | |||
| }, | |||
| map3: { | |||
| floorName: 'F2', | |||
| canvasId: 'f2canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f2_map.png' | |||
| }, | |||
| map4: { | |||
| floorName: 'F3', | |||
| canvasId: 'f3canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f3_map.png' | |||
| }, | |||
| map5: { | |||
| floorName: 'F4', | |||
| canvasId: 'f4canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f4_map.png' | |||
| }, | |||
| map6: { | |||
| floorName: 'F5', | |||
| canvasId: 'f5canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f5_map.png' | |||
| }, | |||
| map7: { | |||
| floorName: 'F6', | |||
| canvasId: 'f6canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f6_map.png' | |||
| }, | |||
| map8: { | |||
| floorName: 'F7', | |||
| canvasId: 'f7canvas', | |||
| src: '<?=SERVER_URL?>i3/pics/f7_map.png' | |||
| } | |||
| } | |||
| }); | |||
| // 定時自動更新頁面 | |||
| (function autoReloadPage(){ | |||
| var pageReloadTimeMillis = 600000; // 頁面, 自動重新載入週期 ( 10 min ) | |||
| var pageCheckReloadTimeMillis = 10000; // 頁面, 判斷重新載入週期 ( 10 sec ) | |||
| var aliveTime = moment(); | |||
| $(document.body).bind("mousemove keypress", function(e) { | |||
| aliveTime = moment(); | |||
| }); | |||
| function refresh() { | |||
| if(moment() - aliveTime >= pageReloadTimeMillis) // 如果頁面沒動作, 才更新 | |||
| window.location.reload(true); | |||
| else | |||
| setTimeout(refresh, pageCheckReloadTimeMillis); | |||
| } | |||
| setTimeout(refresh, pageCheckReloadTimeMillis); | |||
| })(); | |||
| }); | |||
| </script> | |||
| @@ -0,0 +1,182 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh-TW"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <meta name="description" content=""> | |||
| <meta name="author" content=""> | |||
| <title>歐特儀自動化服務處理完成</title> | |||
| <!-- Bootstrap Core CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> | |||
| <!-- MetisMenu CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> | |||
| <!-- Timeline CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/timeline.css" rel="stylesheet"> | |||
| <!-- Custom CSS --> | |||
| <link href="<?=BOOTSTRAPS?>dist/css/sb-admin-2.css" rel="stylesheet"> | |||
| <!-- Morris Charts CSS --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.css" rel="stylesheet"> | |||
| <!-- Custom Fonts --> | |||
| <link href="<?=BOOTSTRAPS?>bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | |||
| <script src="<?=WEB_LIB?>js/mqttws.min.js"></script> | |||
| </head> | |||
| <body style="font-family:Microsoft JhengHei;"> | |||
| <div id="wrapper"> | |||
| <!-- Navigation --> | |||
| <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> | |||
| <div class="navbar-header"> | |||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | |||
| <span class="sr-only">Toggle navigation</span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| <span class="icon-bar"></span> | |||
| </button> | |||
| <a class="navbar-brand" href="#" onclick="go_back();">返回歐特儀自動化服務機</a> | |||
| </div> | |||
| <!-- /.navbar-top-links(左側選單) --> | |||
| <div class="navbar-default sidebar" role="navigation"> | |||
| <div class="sidebar-nav navbar-collapse"> | |||
| <ul class="nav" id="side-menu"> | |||
| <li> | |||
| <a href="#"><i class="fa fa-user fa-fw"></i>服務項目<span class="fa arrow"></span></a> | |||
| <ul class="nav nav-second-level"> | |||
| <li> | |||
| <a href="#" onclick="go_back();">返回歐特儀自動化服務機</a> | |||
| </li> | |||
| </ul> | |||
| <!-- /.nav-second-level --> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <!-- /.sidebar-collapse --> | |||
| </div> | |||
| <!-- /.navbar-static-side --> | |||
| </nav> | |||
| <div id="page-wrapper"><?php /* 主要資料顯示區 */ ?> | |||
| <div class="row"> | |||
| <div class="col-lg-12"> | |||
| <h1 class="page-header">歐特儀自動化服務處理完成</h1><?php /* 右側小表頭 */ ?> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <!-- /.row --> | |||
| <?php /* ----- 首頁 ----- */ ?> | |||
| <div data-items="homepage" class="row"> | |||
| <div class="col-lg-12"> | |||
| <div class="panel panel-default"> | |||
| <div class="panel-heading"><?php /* 資料顯示區灰色小表頭 */ ?> | |||
| 首頁 | |||
| </div> | |||
| <!-- /.panel-heading --> | |||
| <div class="panel-body"> | |||
| <div class="dataTable_wrapper"> | |||
| <table class="table table-striped table-bordered table-hover"> | |||
| <tr> | |||
| <td style="text-align:center;font-size:64px;"><input type="button" style="border-bottom-left-radius: 12px;border-bottom-right-radius: 12px;border-top-left-radius: 12px;border-top-right-radius: 12px;" value="返回" onclick="go_back();" /></td> | |||
| </tr> | |||
| </table> | |||
| </div><?php /* ----- end of dataTable_wrapper ----- */?> | |||
| </div><?php /* ----- end of panel-body ----- */?> | |||
| <!-- /.panel-body --> | |||
| </div> | |||
| <!-- /.panel --> | |||
| </div> | |||
| <!-- /.col-lg-12 --> | |||
| </div> | |||
| <?php /* ----- 首頁(結束) ----- */ ?> | |||
| <!-- /#page-wrapper --> | |||
| </div> | |||
| <!-- /#wrapper --> | |||
| <!-- jQuery --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/jquery/dist/jquery.min.js"></script> | |||
| <!-- Bootstrap Core JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/bootstrap/dist/js/bootstrap.min.js"></script> | |||
| <!-- Metis Menu Plugin JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/metisMenu/dist/metisMenu.min.js"></script> | |||
| <!-- Morris Charts JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>bower_components/raphael/raphael-min.js"></script> | |||
| <!--script src="<?=BOOTSTRAPS?>bower_components/morrisjs/morris.min.js"></script--> | |||
| <!--script src="<?=BOOTSTRAPS?>js/morris-data.js"></script--> | |||
| <!-- virtual keyboard --> | |||
| <!--link href="<?=WEB_LIB?>virtual-keyboard/css/jquery-ui.min.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>virtual-keyboard/css/keyboard.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery-ui.min.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.js"></script> | |||
| <script src="<?=WEB_LIB?>virtual-keyboard/js/jquery.keyboard.extension-caret.js"></script--> | |||
| <!-- jQuery validate --> | |||
| <script src="<?=WEB_LIB?>form-validator/jquery.form-validator.min.js"></script> | |||
| <!-- alertify --> | |||
| <link href="<?=WEB_LIB?>css/alertify.core.css" rel="stylesheet"> | |||
| <link href="<?=WEB_LIB?>css/alertify.bootstrap.css" rel="stylesheet"> | |||
| <script src="<?=WEB_LIB?>js/alertify.min.js"></script> | |||
| <!-- Custom Theme JavaScript --> | |||
| <script src="<?=BOOTSTRAPS?>dist/js/sb-admin-2.js"></script> | |||
| <div id="works" style="display:none;"></div><?php /* 作為浮動顯示區之用 */ ?> | |||
| </body> | |||
| </html> | |||
| <script> | |||
| <?php /* alertify function */ ?> | |||
| function alertify_log($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.log($msg); | |||
| } | |||
| function alertify_error($msg) | |||
| { | |||
| alertify.set({delay : 2000}); | |||
| alertify.error($msg); | |||
| } | |||
| function alertify_success($msg) | |||
| { | |||
| alertify.set({delay : 3000}); | |||
| alertify.success($msg); | |||
| } | |||
| <?php /* 顯示指定項目 */ ?> | |||
| function show_item(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 顯示指定項目, 不修改資料 */ ?> | |||
| function show_item_without_change(tags) | |||
| { | |||
| $("[data-items]").hide(); | |||
| $("[data-items="+tags+"]").show(); | |||
| return false; | |||
| } | |||
| <?php /* 返回 */ ?> | |||
| function go_back() | |||
| { | |||
| window.open("<?=APP_URL?>", "_self"); | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| <?php /* validate 設定start */ ?> | |||
| $.validate( | |||
| { | |||
| modules : 'security', | |||
| } | |||
| ); | |||
| <?php /* validate 設定end */ ?> | |||
| alertify_success("歐特儀自動化服務處理完成<br/><br/>謝謝!!"); | |||
| }); | |||
| </script> | |||
| @@ -0,0 +1,163 @@ | |||
| <!DOCTYPE html> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | |||
| <meta http-equiv="Cache-control" content="no-cache"> | |||
| <style> | |||
| body{background-color:black;font-family:Microsoft JhengHei;overflow:hidden;} | |||
| table{width:100%;text-align:center;} | |||
| .line_1 /* 第一行 */ | |||
| { | |||
| font-size:300px; | |||
| font-family:微軟正黑體; | |||
| font-weight:bolder; | |||
| color:red; | |||
| } | |||
| .line_2 /* 第二行 */ | |||
| { | |||
| width:15%; | |||
| font-family:微軟正黑體; | |||
| font-size:280px; | |||
| color:greenyellow; | |||
| text-align:center; | |||
| font-weight:bolder; | |||
| } | |||
| </style> | |||
| <script src="http://code.jquery.com/jquery-2.1.4.js"></script> | |||
| <script> | |||
| var vip_no="<?=$vip_no?>", | |||
| clientid ="<?php echo uniqid();?>", | |||
| mqtt_ip="<?=$mqtt_ip?>"; | |||
| </script> | |||
| <html> | |||
| <head> | |||
| <title>VIP車位</title> | |||
| </head> | |||
| <body> | |||
| <!-- 閒置時間, 顯示: 公務專用 請勿佔用 --> | |||
| <!--div id="no_parking" class="vip_notice" style="display:none;"--> | |||
| <div id="no_parking" class="vip_notice"> | |||
| <table style="border:0px;" cellpadding='0' bolder="0"> | |||
| <tr> | |||
| <td class="line_1" align="center" style="font-size:200px;">光興國小地下停車場</td> | |||
| </tr> | |||
| <tr> | |||
| <td class="line_2"><br /><marquee direction="left" scrollamount="40" style="font-size:300px;">歡迎光臨</marquee></td> | |||
| </tr> | |||
| </table> | |||
| </div> | |||
| <!-- 指示VIP停此, 顯示: 車號 向下指 --> | |||
| <div id="vip_here" class="vip_notice" style="background-color:white;display:none;"> | |||
| <!--div id="vip_here" class="vip_notice" style="background-color:white;"--> | |||
| <table style="border:0px;" cellpadding='0' bolder="0"> | |||
| <tr> | |||
| <td id="park_lpr" class="line_1" align="center">貴賓請停此</td> | |||
| </tr> | |||
| <tr> | |||
| <table> | |||
| <tr> | |||
| <td></td> | |||
| <td class="line_2" align="center"> | |||
| <marquee direction="down" scrollamount="40"> | |||
| <img src="/vip_parked/down_arrow.png" height="510"/> | |||
| </marquee> | |||
| </td> | |||
| <td></td> | |||
| </tr> | |||
| </table> | |||
| </tr> | |||
| </table> | |||
| </div> | |||
| <!-- VIP停車時, 顯示: 車號 貴賓車位 --> | |||
| <div id="vip_parked" class="vip_notice" style="display:none;"> | |||
| <table style="border:0px;" cellpadding='0' bolder="0"> | |||
| <tr> | |||
| <td class="line_1" align="center">公務專用</td> | |||
| </tr> | |||
| <tr> | |||
| <td class="line_2">貴賓車位</td> | |||
| </tr> | |||
| </table> | |||
| </div> | |||
| <!-- 一般車停車時, 顯示: 車號 歡迎停用 --> | |||
| <div id="someone_parked" class="vip_notice" style="display:none;"> | |||
| <table style="border:0px;" cellpadding='0' bolder="0"> | |||
| <tr> | |||
| <td class="line_1" align="center">一般車輛</td> | |||
| </tr> | |||
| <tr> | |||
| <td class="line_2">歡迎光臨</td> | |||
| </tr> | |||
| </table> | |||
| </div> | |||
| </body> | |||
| <script src="/libs/js/moment.min.js"></script> | |||
| <script src="/libs/js/mqttws.min.js"></script> | |||
| <script> | |||
| var client = new Paho.MQTT.Client(mqtt_ip, 8000, clientid); | |||
| // set callback handlers | |||
| client.onConnectionLost = onConnectionLost; | |||
| client.onMessageArrived = onMessageArrived; | |||
| client.connect({onSuccess:onConnect}); | |||
| // called when the client connects | |||
| function onConnect() | |||
| { | |||
| // Once a connection has been made, make a subscription and send a message. | |||
| console.log("onConnect|"+mqtt_ip+"|"+clientid+"|"+"welcome_"+vip_no); | |||
| client.subscribe("vip_"+vip_no, 2); | |||
| } | |||
| // called when the client loses its connection | |||
| function onConnectionLost(responseObject) | |||
| { | |||
| if (responseObject.errorCode !== 0) | |||
| { | |||
| console.log("onConnectionLost:"+responseObject.errorMessage); | |||
| } | |||
| } | |||
| // called when a message arrives | |||
| function onMessageArrived(message) | |||
| { | |||
| console.log("onMessageArrived:"+message.payloadString); | |||
| $(".vip_notice").hide(); | |||
| lpr = message.payloadString == "movie" ? "<div style='font-size:260px;'>歡迎都教授蒞臨</div>" : message.payloadString; | |||
| // lpr = decodeURIComponent(message.payloadString); | |||
| // $("#park_lpr").text(lpr+"請停此位"); | |||
| // $("#park_lpr").text(lpr); | |||
| $("#park_lpr").html(lpr); | |||
| $("#vip_here").show(); | |||
| // 30秒恢復原畫面 | |||
| vip_start = setTimeout(function() | |||
| { | |||
| $(".vip_notice").hide(); | |||
| $("#no_parking").show(); | |||
| clearTimeout(vip_start); | |||
| }, 30000); | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| // 如果畫面沒動作, 自動更新頁面 | |||
| var reloadTimeMillis = 600000; // 每 10 min 自動重新載入頁面 | |||
| var checkReloadTimeMillis = 10000; // 每 10 sec 判斷一次 | |||
| // 如果畫面沒動作, 每10分鐘自動重新載入頁面 | |||
| var aliveTime = moment(); | |||
| $(document.body).bind("mousemove keypress", function(e) { | |||
| aliveTime = moment(); | |||
| }); | |||
| function refresh() { | |||
| if(moment() - aliveTime >= reloadTimeMillis) | |||
| window.location.reload(true); | |||
| else | |||
| setTimeout(refresh, checkReloadTimeMillis); | |||
| } | |||
| setTimeout(refresh, checkReloadTimeMillis); | |||
| }); | |||
| </script> | |||
| </html> | |||
| @@ -0,0 +1,131 @@ | |||
| <!DOCTYPE html> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | |||
| <meta http-equiv="Cache-control" content="no-cache"> | |||
| <style> | |||
| body{background-color:black;font-family:Microsoft JhengHei;overflow:hidden;} | |||
| table{width:100%;text-align:center;} | |||
| .line_1 /* 第一行 */ | |||
| { | |||
| font-size:300px; | |||
| font-family:微軟正黑體; | |||
| font-weight:bolder; | |||
| color:red; | |||
| } | |||
| .line_2 /* 第二行 */ | |||
| { | |||
| width:15%; | |||
| font-family:微軟正黑體; | |||
| font-size:280px; | |||
| color:greenyellow; | |||
| text-align:center; | |||
| font-weight:bolder; | |||
| } | |||
| </style> | |||
| <script src="http://code.jquery.com/jquery-2.1.4.js"></script> | |||
| <script src="http://61.220.179.128/jsid.i/uniqid=clientid&mqtt_ip=mqtt_ip"></script> | |||
| <html> | |||
| <head> | |||
| <title>入口-VIP歡迎光臨</title> | |||
| </head> | |||
| <body> | |||
| <!-- 閒置時間, 顯示: 輸入車號後即可繳費 --> | |||
| <div id="waiting" class="vip_notice"> | |||
| <table style="border:0px;" cellpadding='0' bolder="0"> | |||
| <tr> | |||
| <td style="font-size:100px;"> </td> | |||
| </tr> | |||
| <tr> | |||
| <td class="line_1" align="center" style="font-size:140px;">輸入車號後即可繳費</td> | |||
| </tr> | |||
| <tr> | |||
| <td class="line_2"><marquee direction="left" scrollamount="40" style="font-size:170px;">本停車場使用無票卡繳費</marquee></td> | |||
| </tr> | |||
| </table> | |||
| </div> | |||
| <!-- 會員車入場, 顯示: 車號 歡迎光臨 --> | |||
| <div id="member" class="vip_notice" style="display:none;"> | |||
| <!--div id="member" class="vip_notice"--> | |||
| <img src="vip_map.jpg" width="1345" height="750"/> | |||
| </div> | |||
| <!-- VIP入場時, 顯示: VIP導車 --> | |||
| <div id="vip_comein" class="vip_notice" style="display:none;background-color:white;"> | |||
| <table style="border:0px;" cellpadding='0' bolder="0"> | |||
| <tr> | |||
| <td style="font-size:100px;"> </td> | |||
| </tr> | |||
| <tr> | |||
| <td class="line_1" align="center" style="font-size:140px;">貴賓請往前左方停車</td> | |||
| </tr> | |||
| <tr> | |||
| <td class="line_2" style="color:red;"><marquee direction="left" scrollamount="40" style="font-size:170px;">歡迎貴賓蒞臨</marquee></td> | |||
| </tr> | |||
| </table> | |||
| </div> | |||
| </body> | |||
| <script src="/libs/js/moment.min.js"></script> | |||
| <script src="/libs/js/mqttws.min.js"></script> | |||
| <script> | |||
| var client = new Paho.MQTT.Client(mqtt_ip, 8000, clientid); | |||
| // set callback handlers | |||
| client.onConnectionLost = onConnectionLost; | |||
| client.onMessageArrived = onMessageArrived; | |||
| client.connect({onSuccess:onConnect}); | |||
| // called when the client connects | |||
| function onConnect() | |||
| { | |||
| // Once a connection has been made, make a subscription and send a message. | |||
| console.log("onConnect|"+mqtt_ip+"|"+clientid+"|"+"vip_welcome"); | |||
| client.subscribe("vip_welcome", 2); | |||
| } | |||
| // called when the client loses its connection | |||
| function onConnectionLost(responseObject) | |||
| { | |||
| if (responseObject.errorCode !== 0) | |||
| { | |||
| console.log("onConnectionLost:"+responseObject.errorMessage); | |||
| } | |||
| } | |||
| // called when a message arrives | |||
| function onMessageArrived(message) | |||
| { | |||
| console.log("onMessageArrived:"+message.payloadString); | |||
| $(".vip_notice").hide(); | |||
| $("#vip_comein").show(); | |||
| // 8秒後恢復原始畫面 | |||
| vip_start = setTimeout(function() | |||
| { | |||
| $(".vip_notice").hide(); | |||
| $("#waiting").show(); | |||
| clearTimeout(vip_start); | |||
| }, 8000); | |||
| } | |||
| $(document).ready(function() | |||
| { | |||
| // 如果畫面沒動作, 自動更新頁面 | |||
| var reloadTimeMillis = 600000; // 每 10 min 自動重新載入頁面 | |||
| var checkReloadTimeMillis = 10000; // 每 10 sec 判斷一次 | |||
| // 如果畫面沒動作, 每10分鐘自動重新載入頁面 | |||
| var aliveTime = moment(); | |||
| $(document.body).bind("mousemove keypress", function(e) { | |||
| aliveTime = moment(); | |||
| }); | |||
| function refresh() { | |||
| if(moment() - aliveTime >= reloadTimeMillis) | |||
| window.location.reload(true); | |||
| else | |||
| setTimeout(refresh, checkReloadTimeMillis); | |||
| } | |||
| setTimeout(refresh, checkReloadTimeMillis); | |||
| }); | |||
| </script> | |||
| </html> | |||