altobaltobaltob GitHub 8 лет назад
Родитель
Сommit
3bbc85e280
80 измененных файлов: 41677 добавлений и 0 удалений
  1. +1558
    -0
      phplibs/AllPay.Payment.Integration.php
  2. +2078
    -0
      phplibs/AllPay_Invoice.php
  3. +200
    -0
      phplibs/Altob.Payment.Core.php
  4. +261
    -0
      phplibs/Altob.Payment.Integration.php
  5. +279
    -0
      phplibs/Altob.Sync.Integration.php
  6. +499
    -0
      phplibs/Altob.TWGC.Integration.php
  7. +251
    -0
      phplibs/ctbcbank/Altob.CTBC.Bank.Integration.php
  8. +1
    -0
      phplibs/ctbcbank/auth_mpi_mac.php
  9. +1
    -0
      phplibs/ctbcbank/auth_mpi_mac8.php
  10. +412
    -0
      phplibs/phpMQTT.php
  11. +82
    -0
      views/admins_station/_20170216/check_point.php
  12. +312
    -0
      views/admins_station/_20170216/check_point_report.php
  13. +73
    -0
      views/admins_station/_20170216/invoice_cancel.php
  14. +84
    -0
      views/admins_station/_20170216/invoice_close.php
  15. +74
    -0
      views/admins_station/_20170216/invoice_open.php
  16. +84
    -0
      views/admins_station/_20170216/invoice_reprint.php
  17. +59
    -0
      views/admins_station/_20170216/invoice_rows.php
  18. +4076
    -0
      views/admins_station/_20170216/main_page.php
  19. +82
    -0
      views/admins_station/_20170217/check_point.php
  20. +312
    -0
      views/admins_station/_20170217/check_point_report.php
  21. +3913
    -0
      views/admins_station/_20170217/main_page.php
  22. +442
    -0
      views/admins_station/_20170217/member_tx_refund_query.php
  23. +82
    -0
      views/admins_station/_20170218/check_point.php
  24. +316
    -0
      views/admins_station/_20170218/check_point_report.php
  25. +3778
    -0
      views/admins_station/_20170218/main_page.php
  26. +442
    -0
      views/admins_station/_20170218/member_tx_refund_query.php
  27. +149
    -0
      views/admins_station/_20170218/price_plan_query_all.php
  28. +209
    -0
      views/admins_station/_20170220/cario_temp_not_finished_query_all.php
  29. +88
    -0
      views/admins_station/_20170220/check_point.php
  30. +316
    -0
      views/admins_station/_20170220/check_point_report.php
  31. +2948
    -0
      views/admins_station/_20170220/main_page.php
  32. +419
    -0
      views/admins_station/_20170220/member_add.php
  33. +118
    -0
      views/admins_station/_20170220/member_query_all.php
  34. +133
    -0
      views/admins_station/_20170220/member_tx_check_query.php
  35. +442
    -0
      views/admins_station/_20170220/member_tx_refund_query.php
  36. +147
    -0
      views/admins_station/_20170220/price_plan_query_all.php
  37. +209
    -0
      views/admins_station/cario_temp_not_finished_query_all.php
  38. +87
    -0
      views/admins_station/check_point.php
  39. +327
    -0
      views/admins_station/check_point_report.php
  40. +3420
    -0
      views/admins_station/main_page.php
  41. +446
    -0
      views/admins_station/member_add.php
  42. +268
    -0
      views/admins_station/member_invoice_report.php
  43. +126
    -0
      views/admins_station/member_query_all.php
  44. +133
    -0
      views/admins_station/member_tx_check_query.php
  45. +772
    -0
      views/admins_station/member_tx_refund_query.php
  46. +147
    -0
      views/admins_station/price_plan_query_all.php
  47. +165
    -0
      views/allpa_service/admin_login_page.php
  48. +1587
    -0
      views/allpa_service/admin_page.php
  49. +181
    -0
      views/allpa_service/admin_result_page.php
  50. +181
    -0
      views/allpa_service/error_page.php
  51. +1569
    -0
      views/allpa_service/main_page.php
  52. +181
    -0
      views/allpa_service/result_page.php
  53. +165
    -0
      views/carpark/login_page.php
  54. +1787
    -0
      views/carpark/main_page.php
  55. +115
    -0
      views/carpark/station_setting.php
  56. +8
    -0
      views/errors/cli/error_404.php
  57. +8
    -0
      views/errors/cli/error_db.php
  58. +21
    -0
      views/errors/cli/error_exception.php
  59. +8
    -0
      views/errors/cli/error_general.php
  60. +21
    -0
      views/errors/cli/error_php.php
  61. +11
    -0
      views/errors/cli/index.html
  62. +64
    -0
      views/errors/html/error_404.php
  63. +64
    -0
      views/errors/html/error_db.php
  64. +32
    -0
      views/errors/html/error_exception.php
  65. +64
    -0
      views/errors/html/error_general.php
  66. +33
    -0
      views/errors/html/error_php.php
  67. +11
    -0
      views/errors/html/index.html
  68. +11
    -0
      views/errors/index.html
  69. +11
    -0
      views/index.html
  70. +436
    -0
      views/parkingquery/floor_map.php
  71. +998
    -0
      views/payment/main_page.php
  72. +182
    -0
      views/payment/result_page.php
  73. +846
    -0
      views/payment_ats/main_page.php
  74. +182
    -0
      views/payment_ats/result_page.php
  75. +45
    -0
      views/pks/parked.php
  76. +462
    -0
      views/pks/status_map.php
  77. +1097
    -0
      views/qcar/main_page.php
  78. +182
    -0
      views/qcar/result_page.php
  79. +163
    -0
      views/vip_parked/main_page.php
  80. +131
    -0
      views/vip_parked/vip_welcome.php

+ 1558
- 0
phplibs/AllPay.Payment.Integration.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 2078
- 0
phplibs/AllPay_Invoice.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 200
- 0
phplibs/Altob.Payment.Core.php Просмотреть файл

@@ -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');
}
}

+ 261
- 0
phplibs/Altob.Payment.Integration.php Просмотреть файл

@@ -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;
}
}

+ 279
- 0
phplibs/Altob.Sync.Integration.php Просмотреть файл

@@ -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;
}
}

+ 499
- 0
phplibs/Altob.TWGC.Integration.php Просмотреть файл

@@ -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;
}
}

+ 251
- 0
phplibs/ctbcbank/Altob.CTBC.Bank.Integration.php Просмотреть файл

@@ -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;
}
}

+ 1
- 0
phplibs/ctbcbank/auth_mpi_mac.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 1
- 0
phplibs/ctbcbank/auth_mpi_mac8.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 412
- 0
phplibs/phpMQTT.php Просмотреть файл

@@ -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);
}
}
}
?>

+ 82
- 0
views/admins_station/_20170216/check_point.php Просмотреть файл

@@ -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>

+ 312
- 0
views/admins_station/_20170216/check_point_report.php Просмотреть файл

@@ -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>&nbsp;&nbsp;
<input type="text" class="date" id="check_point_search_time_from" name="check_point_search_time_from">
&nbsp;<span class="input-inline" > ~ </span>&nbsp;
<label class="input-inline" for="check_point_search_time_to">結束</label>&nbsp;&nbsp;
<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>&nbsp;開始&nbsp;~&nbsp;至&nbsp;<span id='check_point_list_detail_time_str_2'></span>&nbsp;關帳,期間所有交易)
</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>

+ 73
- 0
views/admins_station/_20170216/invoice_cancel.php Просмотреть файл

@@ -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>統編&nbsp;&nbsp;</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>

+ 84
- 0
views/admins_station/_20170216/invoice_close.php Просмотреть файл

@@ -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>統編&nbsp;&nbsp;</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>

+ 74
- 0
views/admins_station/_20170216/invoice_open.php Просмотреть файл

@@ -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>統編&nbsp;&nbsp;</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>

+ 84
- 0
views/admins_station/_20170216/invoice_reprint.php Просмотреть файл

@@ -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>統編&nbsp;&nbsp;</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>

+ 59
- 0
views/admins_station/_20170216/invoice_rows.php Просмотреть файл

@@ -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>統編&nbsp;&nbsp;</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>

+ 4076
- 0
views/admins_station/_20170216/main_page.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 82
- 0
views/admins_station/_20170217/check_point.php Просмотреть файл

@@ -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>

+ 312
- 0
views/admins_station/_20170217/check_point_report.php Просмотреть файл

@@ -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>&nbsp;&nbsp;
<input type="text" class="date" id="check_point_search_time_from" name="check_point_search_time_from">
&nbsp;<span class="input-inline" > ~ </span>&nbsp;
<label class="input-inline" for="check_point_search_time_to">結束</label>&nbsp;&nbsp;
<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>&nbsp;開始&nbsp;~&nbsp;至&nbsp;<span id='check_point_list_detail_time_str_2'></span>&nbsp;關帳,期間所有交易)
</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>

+ 3913
- 0
views/admins_station/_20170217/main_page.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 442
- 0
views/admins_station/_20170217/member_tx_refund_query.php Просмотреть файл

@@ -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">&nbsp;&nbsp;<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>

+ 82
- 0
views/admins_station/_20170218/check_point.php Просмотреть файл

@@ -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>

+ 316
- 0
views/admins_station/_20170218/check_point_report.php Просмотреть файл

@@ -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>&nbsp;&nbsp;
<input type="text" class="date" id="check_point_search_time_from" name="check_point_search_time_from">
&nbsp;<span class="input-inline" > ~ </span>&nbsp;
<label class="input-inline" for="check_point_search_time_to">結束</label>&nbsp;&nbsp;
<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>&nbsp;開始&nbsp;~&nbsp;至&nbsp;<span id='check_point_list_detail_time_str_2'></span>&nbsp;關帳,期間所有交易)
</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>

+ 3778
- 0
views/admins_station/_20170218/main_page.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 442
- 0
views/admins_station/_20170218/member_tx_refund_query.php Просмотреть файл

@@ -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">&nbsp;&nbsp;<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>

+ 149
- 0
views/admins_station/_20170218/price_plan_query_all.php Просмотреть файл

@@ -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>

+ 209
- 0
views/admins_station/_20170220/cario_temp_not_finished_query_all.php Просмотреть файл

@@ -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>
&nbsp;&nbsp;
<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>

+ 88
- 0
views/admins_station/_20170220/check_point.php Просмотреть файл

@@ -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>

+ 316
- 0
views/admins_station/_20170220/check_point_report.php Просмотреть файл

@@ -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>&nbsp;&nbsp;
<input type="text" class="date" id="check_point_search_time_from" name="check_point_search_time_from">
&nbsp;<span class="input-inline" > ~ </span>&nbsp;
<label class="input-inline" for="check_point_search_time_to">結束</label>&nbsp;&nbsp;
<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>&nbsp;開始&nbsp;~&nbsp;至&nbsp;<span id='check_point_list_detail_time_str_2'></span>&nbsp;關帳,期間所有交易)
</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>

+ 2948
- 0
views/admins_station/_20170220/main_page.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 419
- 0
views/admins_station/_20170220/member_add.php Просмотреть файл

@@ -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>&nbsp;
</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">
&nbsp;說明:&nbsp;
&nbsp;每日租金(&nbsp;<span id="amt1_max">0</span>&nbsp;元
&nbsp;/ &nbsp;<span id="amt1_days_total">0</span>&nbsp;天)
&nbsp;* 實際天數&nbsp;<span id="amt1_days">0</span>&nbsp;天
</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">
&nbsp;*說明:&nbsp;
&nbsp;每日租金(&nbsp;<span id="amt2_max">0</span>&nbsp;元
&nbsp;/ &nbsp;<span id="amt2_days_total">0</span>&nbsp;天)
&nbsp;* 實際天數&nbsp;<span id="amt2_days">0</span>&nbsp;天
</label-->
<label class="select-inline" id="amt2_max_view">
&nbsp;說明:&nbsp;
&nbsp;每月租金(&nbsp;<span id="amt2_max">0</span>&nbsp;元
&nbsp;/ &nbsp;<span id="amt2_months_total">0</span>&nbsp;個月)
&nbsp;* 實際月數&nbsp;<span id="amt2_months">0</span>&nbsp;個月
</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">
&nbsp;&nbsp;應計金額 (原價):<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>
&nbsp;&nbsp;
<!--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>

+ 118
- 0
views/admins_station/_20170220/member_query_all.php Просмотреть файл

@@ -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>

+ 133
- 0
views/admins_station/_20170220/member_tx_check_query.php Просмотреть файл

@@ -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>

+ 442
- 0
views/admins_station/_20170220/member_tx_refund_query.php Просмотреть файл

@@ -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">&nbsp;&nbsp;<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>

+ 147
- 0
views/admins_station/_20170220/price_plan_query_all.php Просмотреть файл

@@ -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>

+ 209
- 0
views/admins_station/cario_temp_not_finished_query_all.php Просмотреть файл

@@ -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>
&nbsp;&nbsp;
<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>

+ 87
- 0
views/admins_station/check_point.php Просмотреть файл

@@ -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>

+ 327
- 0
views/admins_station/check_point_report.php Просмотреть файл

@@ -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>&nbsp;&nbsp;
<select id="check_point_search_station_no_modify" name="check_point_search_station_no_modify"></select>
&nbsp;<span class="input-inline" >,</span>&nbsp;
<label class="input-inline" for="check_point_search_time_from">開始</label>&nbsp;&nbsp;
<input type="text" class="date" id="check_point_search_time_from" name="check_point_search_time_from">
&nbsp;<span class="input-inline" > ~ </span>&nbsp;
<label class="input-inline" for="check_point_search_time_to">結束</label>&nbsp;&nbsp;
<input type="text" class="date" id="check_point_search_time_to" name="check_point_search_time_to">
&nbsp;&nbsp;
<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>&nbsp;開始&nbsp;~&nbsp;至&nbsp;<span id='check_point_list_detail_time_str_2'></span>&nbsp;關帳,期間所有交易)
</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>

+ 3420
- 0
views/admins_station/main_page.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 446
- 0
views/admins_station/member_add.php Просмотреть файл

@@ -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>&nbsp;
</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">
&nbsp;說明:&nbsp;
&nbsp;每日租金(&nbsp;<span id="amt1_max">0</span>&nbsp;元
&nbsp;/ &nbsp;<span id="amt1_days_total">0</span>&nbsp;天)
&nbsp;* 實際天數&nbsp;<span id="amt1_days">0</span>&nbsp;天
</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">
&nbsp;*說明:&nbsp;
&nbsp;每日租金(&nbsp;<span id="amt2_max">0</span>&nbsp;元
&nbsp;/ &nbsp;<span id="amt2_days_total">0</span>&nbsp;天)
&nbsp;* 實際天數&nbsp;<span id="amt2_days">0</span>&nbsp;天
</label-->
<label class="select-inline" id="amt2_max_view">
&nbsp;說明:&nbsp;
&nbsp;每月租金(&nbsp;<span id="amt2_max">0</span>&nbsp;元
&nbsp;/ &nbsp;<span id="amt2_months_total">0</span>&nbsp;個月)
&nbsp;* 實際月數&nbsp;<span id="amt2_months">0</span>&nbsp;個月
</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">
&nbsp;&nbsp;應計金額 (原價):<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>
&nbsp;&nbsp;
<!--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>

+ 268
- 0
views/admins_station/member_invoice_report.php Просмотреть файл

@@ -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>&nbsp;&nbsp;
<select id="member_invoice_search_station_no_modify" name="member_invoice_search_station_no_modify"></select>
&nbsp;<span class="input-inline" >,</span>&nbsp;
<label class="input-inline" for="member_invoice_search_time_from">開始</label>&nbsp;&nbsp;
<input type="text" class="date" id="member_invoice_search_time_from" name="member_invoice_search_time_from">
&nbsp;<span class="input-inline" > ~ </span>&nbsp;
<label class="input-inline" for="member_invoice_search_time_to">結束</label>&nbsp;&nbsp;
<input type="text" class="date" id="member_invoice_search_time_to" name="member_invoice_search_time_to">
&nbsp;&nbsp;
<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>

+ 126
- 0
views/admins_station/member_query_all.php Просмотреть файл

@@ -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>

+ 133
- 0
views/admins_station/member_tx_check_query.php Просмотреть файл

@@ -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>

+ 772
- 0
views/admins_station/member_tx_refund_query.php Просмотреть файл

@@ -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">&nbsp;&nbsp;<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>

+ 147
- 0
views/admins_station/price_plan_query_all.php Просмотреть файл

@@ -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>

+ 165
- 0
views/allpa_service/admin_login_page.php Просмотреть файл

@@ -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>

+ 1587
- 0
views/allpa_service/admin_page.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 181
- 0
views/allpa_service/admin_result_page.php Просмотреть файл

@@ -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>

+ 181
- 0
views/allpa_service/error_page.php Просмотреть файл

@@ -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>

+ 1569
- 0
views/allpa_service/main_page.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 181
- 0
views/allpa_service/result_page.php Просмотреть файл

@@ -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>

+ 165
- 0
views/carpark/login_page.php Просмотреть файл

@@ -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>

+ 1787
- 0
views/carpark/main_page.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 115
- 0
views/carpark/station_setting.php Просмотреть файл

@@ -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">
目前場站設定
&nbsp;<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>

+ 8
- 0
views/errors/cli/error_404.php Просмотреть файл

@@ -0,0 +1,8 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
echo "\nERROR: ",
$heading,
"\n\n",
$message,
"\n\n";

+ 8
- 0
views/errors/cli/error_db.php Просмотреть файл

@@ -0,0 +1,8 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
echo "\nDatabase error: ",
$heading,
"\n\n",
$message,
"\n\n";

+ 21
- 0
views/errors/cli/error_exception.php Просмотреть файл

@@ -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 ?>

+ 8
- 0
views/errors/cli/error_general.php Просмотреть файл

@@ -0,0 +1,8 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
echo "\nERROR: ",
$heading,
"\n\n",
$message,
"\n\n";

+ 21
- 0
views/errors/cli/error_php.php Просмотреть файл

@@ -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 ?>

+ 11
- 0
views/errors/cli/index.html Просмотреть файл

@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

+ 64
- 0
views/errors/html/error_404.php Просмотреть файл

@@ -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>

+ 64
- 0
views/errors/html/error_db.php Просмотреть файл

@@ -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>

+ 32
- 0
views/errors/html/error_exception.php Просмотреть файл

@@ -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>

+ 64
- 0
views/errors/html/error_general.php Просмотреть файл

@@ -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>

+ 33
- 0
views/errors/html/error_php.php Просмотреть файл

@@ -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>

+ 11
- 0
views/errors/html/index.html Просмотреть файл

@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

+ 11
- 0
views/errors/index.html Просмотреть файл

@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

+ 11
- 0
views/index.html Просмотреть файл

@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

+ 436
- 0
views/parkingquery/floor_map.php Просмотреть файл

@@ -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>

+ 998
- 0
views/payment/main_page.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 182
- 0
views/payment/result_page.php Просмотреть файл

@@ -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>

+ 846
- 0
views/payment_ats/main_page.php Просмотреть файл

@@ -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>

+ 182
- 0
views/payment_ats/result_page.php Просмотреть файл

@@ -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>

+ 45
- 0
views/pks/parked.php Просмотреть файл

@@ -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>

+ 462
- 0
views/pks/status_map.php Просмотреть файл

@@ -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>

+ 1097
- 0
views/qcar/main_page.php
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 182
- 0
views/qcar/result_page.php Просмотреть файл

@@ -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>

+ 163
- 0
views/vip_parked/main_page.php Просмотреть файл

@@ -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>

+ 131
- 0
views/vip_parked/vip_welcome.php Просмотреть файл

@@ -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;">&nbsp;</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;">&nbsp;</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>

Загрузка…
Отмена
Сохранить